mod color;
use yew::{classes, function_component, html, AttrValue, Children, Classes, Html, Properties};
use crate::styles::color::Color;
use crate::styles::CssValue;
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct Props {
#[prop_or_default]
pub children: Children,
#[prop_or_default]
pub classes: Classes,
#[prop_or_default]
pub color: Color,
#[prop_or(AttrValue::from("label"))]
pub component: AttrValue,
#[prop_or(false)]
pub disabled: bool,
#[prop_or(false)]
pub error: bool,
#[prop_or(false)]
pub filled: bool,
#[prop_or(false)]
pub focused: bool,
#[prop_or_default]
pub id: AttrValue,
#[prop_or(false)]
pub required: bool,
#[prop_or_default]
pub style: AttrValue,
}
#[function_component(FormLabel)]
pub fn form_label(props: &Props) -> Html {
let root_cls = classes!(
"ZuFormLabel-root",
color::color_class(props.color),
if props.disabled {
"ZuFormLabel-disabled"
} else {
""
},
if props.filled {
"ZuFormLabel-filled"
} else {
""
},
if props.focused {
"ZuFormLabel-focused"
} else {
""
},
if props.required {
"ZuFormLabel-required"
} else {
""
},
props.classes.clone(),
);
let style = [
props.style.as_str(),
&format!("color: {}", props.color.css_value()),
]
.join(";");
let asterisk_cls = classes!(
"ZuFormLabel-asterisk",
if props.error { "ZuFormLabel-error" } else { "" }
);
html! {
<@{props.component.to_string()}
class={root_cls}
disabled={props.disabled}
style={style}>
{for props.children.iter()}
if props.required {
<span
aria-hidden="true"
class={asterisk_cls}>
{"\u{2009}*"}
</span>
}
</@>
}
}