use crate::class::Class;
use dioxus::prelude::*;
use zino_core::SharedString;
pub fn Button(props: ButtonProps) -> Element {
rsx! {
button {
class: props.class,
class: if !props.color.is_empty() { "is-{props.color}" },
class: if !props.theme.is_empty() { "is-{props.theme}" },
class: if !props.size.is_empty() { "is-{props.size}" },
class: if !props.state.is_empty() { "is-{props.state}" },
class: if props.responsive { "is-responsive" },
class: if props.fullwidth { "is-fullwidth" },
class: if props.outlined { "is-outlined" },
class: if props.inverted { "is-inverted" },
class: if props.rounded { "is-rounded" },
onclick: move |event| {
if let Some(handler) = props.on_click.as_ref() {
handler.call(event);
}
},
..props.attributes,
{ props.children }
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct ButtonProps {
#[props(into, default = "button".into())]
pub class: Class,
#[props(into, default)]
pub color: SharedString,
#[props(into, default)]
pub theme: SharedString,
#[props(into, default)]
pub size: SharedString,
#[props(into, default)]
pub state: SharedString,
#[props(default)]
pub responsive: bool,
#[props(default)]
pub fullwidth: bool,
#[props(default)]
pub outlined: bool,
#[props(default)]
pub inverted: bool,
#[props(default)]
pub rounded: bool,
pub on_click: Option<EventHandler<MouseEvent>>,
#[props(extends = button)]
attributes: Vec<Attribute>,
children: Element,
}