use crate::ouia;
use crate::prelude::{ExtendClasses, OuiaComponentType, Size};
use crate::utils::{Ouia, OuiaSafe};
use yew::prelude::*;
const OUIA: Ouia = ouia!("Title");
#[derive(Clone, Default, PartialEq, Eq, Ord, PartialOrd, Copy, Debug)]
pub enum Level {
#[default]
H1,
H2,
H3,
H4,
H5,
H6,
}
#[derive(Clone, Debug, PartialEq, Properties)]
pub struct TitleProperties {
#[prop_or_default]
pub children: Html,
#[prop_or_default]
pub level: Level,
#[prop_or_default]
pub size: Option<Size>,
#[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(Title)]
pub fn title(props: &TitleProperties) -> Html {
let ouia_id = use_memo(props.ouia_id.clone(), |id| {
id.clone().unwrap_or(OUIA.generated_id())
});
let mut class = Classes::from("pf-v5-c-title");
class.extend_from(&props.size.unwrap_or(match props.level {
Level::H1 => Size::XXLarge,
Level::H2 => Size::XLarge,
Level::H3 => Size::Large,
Level::H4 => Size::Medium,
Level::H5 => Size::Medium,
Level::H6 => Size::Medium,
}));
let element = match props.level {
Level::H1 => "h1",
Level::H2 => "h2",
Level::H3 => "h3",
Level::H4 => "h4",
Level::H5 => "h5",
Level::H6 => "h6",
};
html! {
<@{element}
{class}
data-ouia-component-id={(*ouia_id).clone()}
data-ouia-component-type={props.ouia_type}
data-ouia-safe={props.ouia_safe}
>
{ props.children.clone() }
</@>
}
}