1use dioxus::prelude::*;
3
4mod props;
5pub use props::{ButtonProps, ButtonSize, ButtonVariants};
6
7mod style;
8use style::{get_size_class, get_variant_class, BASE_CLASS};
9
10#[component]
11pub fn Button(props: ButtonProps) -> Element {
12 let ButtonProps {
14 class,
15 variant,
16 size,
17 children,
18 onclick,
19 } = props;
20
21 let variant_class = get_variant_class(&variant);
22 let size_class = get_size_class(&size);
23
24 let combined_class = format!("{} {} {} {}", BASE_CLASS, variant_class, size_class, class);
26
27 rsx! {
28 button {
29 class: "{combined_class}",
30 onclick: move |event| {
31 if let Some(handler) = onclick {
32 handler.call(event);
33 }
34 },
35 {children}
36 }
37 }
38}