mod child;
mod divider;
mod group;
mod item;
pub use child::*;
pub use divider::*;
pub use group::*;
pub use item::*;
use crate::ouia;
use crate::prelude::{AsClasses, ExtendClasses, WithBreakpoints};
use crate::utils::{Ouia, OuiaComponentType, OuiaSafe};
use yew::{html::ChildrenRenderer, prelude::*};
const OUIA: Ouia = ouia!("Toolbar");
#[derive(Clone, Copy, Eq, PartialEq, Debug)]
pub enum ToolbarElementModifier {
Hidden,
Visible,
Left,
Right,
}
impl AsClasses for ToolbarElementModifier {
fn extend_classes(&self, classes: &mut Classes) {
classes.push(match self {
Self::Hidden => "pf-m-hidden",
Self::Visible => "pf-m-visible",
Self::Left => "pf-m-align-left", Self::Right => "pf-m-align-right", });
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ToolbarInset {
None,
Small,
Medium,
Large,
XLarge,
XXLarge,
}
impl AsClasses for ToolbarInset {
fn extend_classes(&self, classes: &mut Classes) {
classes.push(match self {
ToolbarInset::None => "pf-m-inset-none",
ToolbarInset::Small => "pf-m-inset-sm",
ToolbarInset::Medium => "pf-m-inset-md",
ToolbarInset::Large => "pf-m-inset-lg",
ToolbarInset::XLarge => "pf-m-inset-xl",
ToolbarInset::XXLarge => "pf-m-inset-2xl",
});
}
}
#[derive(Clone, PartialEq, Properties)]
pub struct ToolbarProperties {
#[prop_or_default]
pub class: Classes,
#[prop_or_default]
pub children: ChildrenWithProps<ToolbarContent>,
#[prop_or_default]
pub id: AttrValue,
#[prop_or_default]
pub full_height: bool,
#[prop_or_default]
pub insets: WithBreakpoints<ToolbarInset>,
#[prop_or_default]
pub ouia_id: Option<String>,
#[prop_or(OUIA.component_type())]
pub ouia_type: OuiaComponentType,
#[prop_or(OuiaSafe::TRUE)]
pub ouia_safe: OuiaSafe,
}
#[function_component(Toolbar)]
pub fn toolbar(props: &ToolbarProperties) -> Html {
let ouia_id = use_memo(props.ouia_id.clone(), |id| {
id.clone().unwrap_or(OUIA.generated_id())
});
let mut class = classes!("pf-v5-c-toolbar", props.class.clone());
class.extend_from(&props.insets);
if props.full_height {
class.push("pf-m-full-height")
}
html! (
<div
id={&props.id}
{class}
data-ouia-component-id={(*ouia_id).clone()}
data-ouia-component-type={props.ouia_type}
data-ouia-safe={props.ouia_safe}
>
{ for props.children.iter() }
</div>
)
}
#[derive(Clone, PartialEq, Properties)]
pub struct ToolbarContentProperties {
#[prop_or_default]
pub children: ChildrenRenderer<ToolbarChildVariant>,
#[prop_or_default]
pub id: AttrValue,
}
#[function_component(ToolbarContent)]
pub fn toolbar_content(props: &ToolbarContentProperties) -> Html {
html! (
<div class="pf-v5-c-toolbar__content" id={&props.id}>
<div class="pf-v5-c-toolbar__content-section">
{ for props.children.iter() }
</div>
</div>
)
}