patternfly_yew/components/toolbar/
mod.rs1mod child;
3mod divider;
4mod group;
5mod item;
6
7pub use child::*;
8pub use divider::*;
9pub use group::*;
10pub use item::*;
11
12use crate::ouia;
13use crate::prelude::{AsClasses, ExtendClasses, WithBreakpoints};
14use crate::utils::{Ouia, OuiaComponentType, OuiaSafe};
15use yew::{html::ChildrenRenderer, prelude::*};
16
17const OUIA: Ouia = ouia!("Toolbar");
18
19#[derive(Clone, Copy, Eq, PartialEq, Debug)]
21pub enum ToolbarElementModifier {
22 Hidden,
23 Visible,
24 Left,
25 Right,
26}
27
28impl AsClasses for ToolbarElementModifier {
29 fn extend_classes(&self, classes: &mut Classes) {
30 classes.push(match self {
31 Self::Hidden => "pf-m-hidden",
32 Self::Visible => "pf-m-visible",
33 Self::Left => "pf-m-align-left", Self::Right => "pf-m-align-right", });
36 }
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40pub enum ToolbarInset {
41 None,
42 Small,
43 Medium,
44 Large,
45 XLarge,
46 XXLarge,
47}
48
49impl AsClasses for ToolbarInset {
50 fn extend_classes(&self, classes: &mut Classes) {
51 classes.push(match self {
52 ToolbarInset::None => "pf-m-inset-none",
53 ToolbarInset::Small => "pf-m-inset-sm",
54 ToolbarInset::Medium => "pf-m-inset-md",
55 ToolbarInset::Large => "pf-m-inset-lg",
56 ToolbarInset::XLarge => "pf-m-inset-xl",
57 ToolbarInset::XXLarge => "pf-m-inset-2xl",
58 });
59 }
60}
61
62#[derive(Clone, PartialEq, Properties)]
64pub struct ToolbarProperties {
65 #[prop_or_default]
66 pub class: Classes,
67
68 #[prop_or_default]
69 pub children: ChildrenWithProps<ToolbarContent>,
70
71 #[prop_or_default]
72 pub id: AttrValue,
73
74 #[prop_or_default]
75 pub full_height: bool,
76
77 #[prop_or_default]
78 pub insets: WithBreakpoints<ToolbarInset>,
79
80 #[prop_or_default]
82 pub ouia_id: Option<String>,
83 #[prop_or(OUIA.component_type())]
85 pub ouia_type: OuiaComponentType,
86 #[prop_or(OuiaSafe::TRUE)]
88 pub ouia_safe: OuiaSafe,
89}
90
91#[function_component(Toolbar)]
105pub fn toolbar(props: &ToolbarProperties) -> Html {
106 let ouia_id = use_memo(props.ouia_id.clone(), |id| {
107 id.clone().unwrap_or(OUIA.generated_id())
108 });
109 let mut class = classes!("pf-v5-c-toolbar", props.class.clone());
110 class.extend_from(&props.insets);
111
112 if props.full_height {
113 class.push("pf-m-full-height")
114 }
115
116 html! (
117 <div
118 id={&props.id}
119 {class}
120 data-ouia-component-id={(*ouia_id).clone()}
121 data-ouia-component-type={props.ouia_type}
122 data-ouia-safe={props.ouia_safe}
123 >
124 { for props.children.iter() }
125 </div>
126 )
127}
128
129#[derive(Clone, PartialEq, Properties)]
131pub struct ToolbarContentProperties {
132 #[prop_or_default]
133 pub children: ChildrenRenderer<ToolbarChildVariant>,
134
135 #[prop_or_default]
136 pub id: AttrValue,
137}
138
139#[function_component(ToolbarContent)]
140pub fn toolbar_content(props: &ToolbarContentProperties) -> Html {
141 html! (
142 <div class="pf-v5-c-toolbar__content" id={&props.id}>
143 <div class="pf-v5-c-toolbar__content-section">
144 { for props.children.iter() }
145 </div>
146 </div>
147 )
148}