mod rating_item;
mod size;
use yew::{classes, function_component, html, AttrValue, Callback, Classes, Html, Properties};
use zu_util::prop::ToAttr;
use crate::styles::size::Size;
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct Props {
#[prop_or_default]
pub classes: Classes,
#[prop_or_default]
pub default_value: Option<f64>,
#[prop_or(false)]
pub disabled: bool,
#[prop_or_default]
pub empty_icon: Option<Html>,
#[prop_or_default]
pub empty_label_text: Option<Html>,
#[prop_or(false)]
pub highlight_selected_only: bool,
#[prop_or_default]
pub icon: Option<Html>,
#[prop_or(5.0)]
pub max: f64,
#[prop_or_default]
pub name: AttrValue,
#[prop_or_default]
pub on_change: Option<Callback<f64>>,
#[prop_or_default]
pub on_change_active: Option<Callback<i32>>,
#[prop_or_default]
pub on_mouse_leave: Option<Callback<()>>,
#[prop_or_default]
pub on_mouse_move: Option<Callback<()>>,
#[prop_or(1.0)]
pub precision: f64,
#[prop_or(false)]
pub read_only: bool,
#[prop_or(Size::Medium)]
pub size: Size,
#[prop_or_default]
pub style: AttrValue,
#[prop_or_default]
pub value: Option<f64>,
}
#[function_component(Rating)]
pub fn rating(props: &Props) -> Html {
let focus_visible = false;
let root_cls = classes!(
"ZuRating-root",
size::css_class(props.size),
if props.disabled {
"ZuRating-disabled"
} else {
""
},
if focus_visible {
"ZuRating-focusVisible"
} else {
""
},
if props.read_only {
"ZuRating-readOnly"
} else {
""
}
);
let role = if props.read_only { Some("img") } else { None };
html! {
<span
class={root_cls}
role={role}
style={props.style.to_attr()}>
</span>
}
}