Skip to main content

dioxus_tw_components/components/
button.rs

1use dioxus::prelude::*;
2
3#[derive(Clone, PartialEq, Props)]
4pub struct ButtonProps {
5    /// Additional attributes to apply to the element
6    #[props(extends = button, extends = GlobalAttributes)]
7    attributes: Vec<Attribute>,
8
9    /// The click event handler
10    #[props(optional)]
11    onclick: EventHandler<MouseEvent>,
12    /// The double click event handler
13    #[props(optional)]
14    ondoubleclick: EventHandler<MouseEvent>,
15    /// The mouse down event handler
16    #[props(optional)]
17    onmousedown: EventHandler<MouseEvent>,
18    /// The mouse up event handler
19    #[props(optional)]
20    onmouseup: EventHandler<MouseEvent>,
21
22    /// Remove default CSS classes
23    #[props(default = false)]
24    noclasses: bool,
25
26    /// The children element
27    children: Element,
28}
29
30#[component]
31pub fn Button(mut props: ButtonProps) -> Element {
32    let default_classes = "button";
33    crate::setup_class_attribute(&mut props.attributes, default_classes);
34
35    let onclick = move |event| props.onclick.call(event);
36    let ondoubleclick = move |event| props.ondoubleclick.call(event);
37    let onmousedown = move |event| props.onmousedown.call(event);
38    let onmouseup = move |event| props.onmouseup.call(event);
39
40    rsx! {
41        button {
42            onclick,
43            ondoubleclick,
44            onmousedown,
45            onmouseup,
46            ..props.attributes,
47            {props.children}
48        }
49    }
50}