use dioxus::prelude::*; #[css_module("/src/components/textarea/style.css")] struct Styles; #[derive(Copy, Clone, PartialEq, Default)] #[non_exhaustive] pub enum TextareaVariant { #[default] Default, Fade, Outline, Ghost, } impl TextareaVariant { pub fn class(&self) -> &'static str { match self { TextareaVariant::Default => "default", TextareaVariant::Fade => "fade", TextareaVariant::Outline => "outline", TextareaVariant::Ghost => "ghost", } } } #[component] pub fn Textarea( oninput: Option>, onchange: Option>, oninvalid: Option>, onselect: Option>, onselectionchange: Option>, onfocus: Option>, onblur: Option>, onfocusin: Option>, onfocusout: Option>, onkeydown: Option>, onkeypress: Option>, onkeyup: Option>, oncompositionstart: Option>, oncompositionupdate: Option>, oncompositionend: Option>, oncopy: Option>, oncut: Option>, onpaste: Option>, onmounted: Option>, #[props(default)] variant: TextareaVariant, #[props(extends=GlobalAttributes)] #[props(extends=textarea)] attributes: Vec, children: Element, ) -> Element { rsx! { textarea { class: Styles::dx_textarea, "data-slot": "textarea", "data-style": variant.class(), oninput: move |e| _ = oninput.map(|callback| callback(e)), onchange: move |e| _ = onchange.map(|callback| callback(e)), oninvalid: move |e| _ = oninvalid.map(|callback| callback(e)), onselect: move |e| _ = onselect.map(|callback| callback(e)), onselectionchange: move |e| _ = onselectionchange.map(|callback| callback(e)), onfocus: move |e| _ = onfocus.map(|callback| callback(e)), onblur: move |e| _ = onblur.map(|callback| callback(e)), onfocusin: move |e| _ = onfocusin.map(|callback| callback(e)), onfocusout: move |e| _ = onfocusout.map(|callback| callback(e)), onkeydown: move |e| _ = onkeydown.map(|callback| callback(e)), onkeypress: move |e| _ = onkeypress.map(|callback| callback(e)), onkeyup: move |e| _ = onkeyup.map(|callback| callback(e)), oncompositionstart: move |e| _ = oncompositionstart.map(|callback| callback(e)), oncompositionupdate: move |e| _ = oncompositionupdate.map(|callback| callback(e)), oncompositionend: move |e| _ = oncompositionend.map(|callback| callback(e)), oncopy: move |e| _ = oncopy.map(|callback| callback(e)), oncut: move |e| _ = oncut.map(|callback| callback(e)), onpaste: move |e| _ = onpaste.map(|callback| callback(e)), onmounted: move |e| _ = onmounted.map(|callback| callback(e)), ..attributes, {children} } } }