rustcn_ui/button/
mod.rs

1//ui/button/mod.rs
2use 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    // Destructure the props for easier access
13    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    // Combine the base, variant, and size classes with any additional classes provided
25    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}