Dwind Component Catalog

Complete reference for all available components in dwui.

DWUI Components

Source: /home/mmy/repos/oss/dominator-css-bindgen/crates/dwui/src/components/

Button (button!)

PropTypeSignalDefault
contentOption<Dom>YesNone
on_clickdyn Fn(events::Click)Nono-op
disabledboolYesfalse
button_typeButtonTypeYesButtonType::Flat

Variants: ButtonType::Flat, ButtonType::Border

#![allow(unused)]
fn main() {
button!({
    .content(text("Click me"))
    .on_click(|_| { /* handle */ })
    .disabled_signal(is_disabled.signal())
})
}
PropTypeSignalDefault
contentOption<Dom>YesNone
openboolYesfalse
on_closedyn Fn()Nono-op
sizeModalSizeYesModalSize::Medium
close_on_backdrop_clickboolYestrue

Variants: ModalSize::Small, Medium, Large, Full

#![allow(unused)]
fn main() {
modal!({
    .content(text("Modal body"))
    .open_signal(is_open.signal())
    .on_close(|| { is_open.set(false); })
})
}

TextInput (text_input!)

PropTypeSignalDefault
valuedyn InputValueWrapperNoMutable::new("")
is_validValidationResultYesValid
labelStringYes""
on_submitdyn FnMut()Nono-op
input_typeTextInputTypeYesText
claim_focusboolNofalse
#![allow(unused)]
fn main() {
text_input!({
    .value(Box::new(text_mutable.clone()))
    .label_signal(always("Username"))
    .input_type(TextInputType::Text)
})
}

Select (select!)

PropTypeSignalDefault
valuedyn InputValueWrapperNoMutable::new("")
optionsVec<(String, String)>SignalVec[]
labelStringYes""
is_validValidationResultYesValid
#![allow(unused)]
fn main() {
select!({
    .value(Box::new(selected.clone()))
    .options_signal_vec(options_signal)
    .label_signal(always("Choose"))
})
}

Slider (slider!)

PropTypeSignalDefault
valuedyn InputValueWrapperNoMutable::new("")
minf32Yes0.0
maxf32Yes100.0
stepf32Yes1.0
labelStringYes""
#![allow(unused)]
fn main() {
slider!({
    .value(Box::new(val.clone()))
    .min_signal(always(0.0))
    .max_signal(always(100.0))
})
}

Card (card!)

PropTypeSignalDefault
contentDomYesrequired
schemeColorSchemeYesColorScheme::Void

Variants: ColorScheme::Primary, Secondary, Void

#![allow(unused)]
fn main() {
card!({
    .content_signal(always(text("Card body")))
    .scheme_signal(always(ColorScheme::Primary))
})
}

Heading (heading!)

PropTypeSignalDefault
contentDomYesrequired
text_sizeTextSizeYesTextSize::ExtraLarge
#![allow(unused)]
fn main() {
heading!({
    .content_signal(always(text("Title")))
    .text_size_signal(always(TextSize::Large))
})
}

List (pretty_list!)

PropTypeSignalDefault
itemsVec<Dom>SignalVec[]
selected_indexOption<usize>YesNone
item_click_handlerdyn Fn(usize)Nono-op
#![allow(unused)]
fn main() {
pretty_list!({
    .items_signal_vec(items_signal)
    .selected_index_signal(selected.signal())
    .item_click_handler(|index| { /* handle */ })
})
}

Common Patterns

Signal Props

All #[signal] props accept both static and reactive values:

  • Static: .prop(value)
  • Reactive: .prop_signal(signal)

Validation

#![allow(unused)]
fn main() {
pub enum ValidationResult {
    Valid,
    Invalid { message: String },
}
}

Custom Styling via apply

#![allow(unused)]
fn main() {
button!({
    .content(text("Custom"))
    .apply(|b| b.dwclass!("border border-blue-500"))
})
}