Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Component Props Reference

This page lists every prop for every component in rinch-components. All components use #[derive(Default)] unless noted, meaning Option<T> defaults to None and bool defaults to false.

String props: All text/string component props are now String type (not Option<String>). Empty string "" means “not set/use default”. The RSX macro auto-converts string literals: variant: "filled" becomes String::from("filled").

Float literals: Float literals are auto-wrapped: value: 30.0 becomes Some(30.0) for Option<f32> fields.

Universal props: All components support style: and class: in RSX, which are applied to the component’s root DOM element. These support reactive closures {|| expr}.

Style shorthands: All elements and components support CSS shorthand props like w, h, m, p, maw, etc. These expand to set_style() calls and compose with component styles. Spacing scale values (xs, sm, md, lg, xl) auto-resolve to var(--rinch-spacing-{value}):

#![allow(unused)]
fn main() {
// Shorthands work on both HTML elements and components
div { p: "md", m: "lg", w: "200px", "Styled div" }
Stack { gap: "md", p: "xl", maw: "600px",
    Text { "Content" }
}
}

See Style Shorthands for the full list.

Prop auto-wrapping: The rsx! macro automatically wraps prop values. See RSX Prop Transformation Rules — do NOT manually wrap in Some(...).

All props are reactive: Every component prop accepts a reactive closure {|| expr} in addition to a static value. When any prop uses a closure, the component automatically re-renders when the signals inside change:

#![allow(unused)]
fn main() {
let active = Signal::new(false);

// Static prop value
Button { variant: "filled", "Always filled" }

// Reactive prop value — re-renders when `active` changes
Button { variant: {|| if active.get() { "filled" } else { "outline" }}, "Toggle" }
}

For more efficient surgical updates (no full re-render), use _fn suffix props where available (e.g., value_fn, checked_fn, opened_fn).


Layout

Stack

Vertical flex container.

PropTypeDefaultDescription
gapOption<String>NoneSpacing between children (xs, sm, md, lg, xl or CSS value)
alignOption<String>NoneCSS align-items (e.g., “center”, “flex-start”)
justifyOption<String>NoneCSS justify-content

Group

Horizontal flex container.

PropTypeDefaultDescription
gapOption<String>NoneSpacing between children (xs, sm, md, lg, xl or CSS value)
alignOption<String>NoneCSS align-items
justifyOption<String>NoneCSS justify-content
wrapboolfalseEnable flex-wrap
growboolfalseChildren flex-grow: 1

SimpleGrid

Auto-layout grid.

PropTypeDefaultDescription
colsOption<u32>NoneNumber of columns (default 1)
min_child_widthOption<String>NoneMin column width for auto-fill; overrides cols
spacingOption<String>NoneGap between items (xs, sm, md, lg, xl or CSS value)
vertical_spacingOption<String>NoneVertical gap (xs, sm, md, lg, xl or CSS value); falls back to spacing

Container

Centered max-width wrapper.

PropTypeDefaultDescription
sizeOption<String>NoneMax-width (xs, sm, md, lg, xl)
fluidboolfalseFull width (no max-width)

Center

Centers content horizontally and vertically.

PropTypeDefaultDescription
inlineboolfalseUse inline-flex instead of flex

Space

Empty spacing element.

PropTypeDefaultDescription
wOption<String>NoneWidth (spacing scale or CSS value)
hOption<String>NoneHeight (spacing scale or CSS value)

Buttons

Button

PropTypeDefaultDescription
variantOption<String>None“filled”, “outline”, “light”, “subtle”, “transparent”, “white”, “default”, “gradient”
sizeOption<String>Nonexs, sm, md, lg, xl
colorOption<String>NoneTheme color name
disabledboolfalse
loadingboolfalse
full_widthboolfalse
radiusOption<String>NoneBorder radius override
onclickOption<Callback>NoneClick handler

ActionIcon

Icon-only button. For text-based action buttons, use Button with compact styling.

PropTypeDefaultDescription
iconOption<TablerIcon>NoneTabler icon to display
variantOption<String>NoneSame variants as Button
sizeOption<String>Nonexs, sm, md, lg, xl
colorOption<String>NoneTheme color name
radiusOption<String>None
disabledboolfalse
loadingboolfalse
onclickOption<Callback>NoneClick handler

CloseButton

PropTypeDefaultDescription
sizeOption<String>Nonexs, sm, md, lg, xl
radiusOption<String>None
disabledboolfalse
icon_sizeOption<u32>NoneCustom icon size in pixels
onclickOption<Callback>NoneClick handler

Form Inputs

TextInput

PropTypeDefaultDescription
labelOption<String>None
placeholderOption<String>None
descriptionOption<String>NoneHelp text below input
errorOption<String>NoneError message; shows error styling
sizeOption<String>Nonexs, sm, md, lg, xl
disabledboolfalse
requiredboolfalse
radiusOption<String>None
input_typeOption<String>NoneHTML input type (“text”, “email”, etc.)
valueOption<String>NoneStatic value
value_fnOption<ReactiveString>NoneReactive value binding (auto-wrapped)
oninputOption<InputCallback>NoneReceives String
onsubmitOption<Callback>NoneFires on Enter key

Textarea

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
errorOption<String>None
placeholderOption<String>None
sizeOption<String>None
disabledboolfalse
requiredboolfalse
autosizeboolfalseAuto-resize textarea
min_rowsOption<u32>None
max_rowsOption<u32>None
valueOption<String>None
value_fnOption<ReactiveString>NoneReactive value binding (auto-wrapped)
oninputOption<InputCallback>NoneReceives String

PasswordInput

Custom Default: toggle_visibility defaults to true.

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
errorOption<String>None
placeholderOption<String>None
valueOption<String>None
value_fnOption<ReactiveString>NoneReactive value binding (auto-wrapped)
visibleboolfalsePassword visibility state
visible_fnOption<ReactiveBool>NoneReactive visibility (auto-wrapped)
disabledboolfalse
requiredboolfalse
autofocusboolfalse
sizeOption<String>None
radiusOption<String>None
toggle_visibilitybooltrueShow/hide the eye toggle button
ontoggleOption<Callback>NoneFires when visibility toggled
oninputOption<InputCallback>NoneReceives String

NumberInput

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
errorOption<String>None
placeholderOption<String>None
valueOption<f64>None
default_valueOption<f64>None
minOption<f64>None
maxOption<f64>None
stepOption<f64>None
decimal_scaleOption<u32>NoneNumber of decimal places
prefixOption<String>Nonee.g., “$”
suffixOption<String>Nonee.g., “kg”
disabledboolfalse
hide_controlsboolfalseHide +/- buttons
requiredboolfalse
sizeOption<String>None
radiusOption<String>None
onincrementOption<Callback>None
ondecrementOption<Callback>None
oninputOption<InputCallback>NoneReceives String from direct text entry

Checkbox

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
sizeOption<String>None
disabledboolfalse
checkedboolfalseStatic checked state
checked_fnOption<ReactiveBool>NoneReactive checked binding (auto-wrapped)
indeterminateboolfalse
onchangeOption<Callback>None

Switch

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
sizeOption<String>None
disabledboolfalse
checkedboolfalse
checked_fnOption<ReactiveBool>NoneReactive checked binding (auto-wrapped)
label_positionOption<String>None“left” or “right”
onchangeOption<Callback>None

Select

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
errorOption<String>None
placeholderOption<String>None
sizeOption<String>None
disabledboolfalse
requiredboolfalse
valueOption<String>None
value_fnOption<ReactiveString>NoneReactive value binding (auto-wrapped)
onchangeOption<InputCallback>NoneReceives selected value as String

Options are passed as children: option { value: "us", "United States" }

Radio / RadioGroup

Radio:

PropTypeDefaultDescription
nameOption<String>NoneRadio group name
valueOption<String>NoneRadio value
labelOption<String>None
descriptionOption<String>None
checkedboolfalse
checked_fnOption<ReactiveBool>NoneReactive checked binding (auto-wrapped)
disabledboolfalse
sizeOption<String>None
colorOption<String>None
errorboolfalse
onchangeOption<Callback>None

RadioGroup:

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
errorOption<String>None
sizeOption<String>None
orientationOption<String>None“horizontal” or “vertical”

Slider

PropTypeDefaultDescription
minOption<f64>None
maxOption<f64>None
valueOption<f64>NoneStatic value
value_signalOption<Signal<f64>>NoneDirect signal binding
stepOption<f64>None
sizeOption<String>None
colorOption<String>None
radiusOption<String>None
disabledboolfalse
labelOption<String>NoneTooltip label format
show_label_on_hoverboolfalse
label_always_onboolfalse
onchangeOption<ValueCallback<f64>>NoneReceives f64

Color

ColorSwatch

A colored square with checkerboard transparency indication.

PropTypeDefaultDescription
colorString""CSS color value
sizeString"28px"Width and height
radiusString"sm"Border radius (xs, sm, md, lg, xl or CSS value)
with_shadowboolfalseShow box shadow
onclickOption<Callback>NoneClick handler

ColorPicker

Interactive color picker with saturation panel, hue/alpha sliders, hex input, and swatches.

PropTypeDefaultDescription
formatString"hex"Output format: hex, hexa, rgb, rgba, hsl, hsla
valueString""Initial color (any parseable CSS color)
value_fnOption<ReactiveString>NoneReactive external value binding
onchangeOption<InputCallback>NoneFires formatted color string on change
alphaboolfalseShow alpha slider
swatchesVec<String>[]Preset swatch colors
swatches_per_rowOption<usize>7Swatches per row
sizeString"md"Size: sm, md, lg, xl
with_inputboolfalseShow hex text input

ColorInput

Text input with inline color preview and dropdown ColorPicker.

PropTypeDefaultDescription
labelString""Input label
descriptionString""Description text below the input
errorString""Error message (shows error styling)
placeholderString""Placeholder text
sizeString""Input size
radiusString""Border radius
disabledboolfalseDisable the input
valueString""Current color value
value_fnOption<ReactiveString>NoneReactive value binding
onchangeOption<InputCallback>NoneFires formatted color string on change
formatString"hex"Output format
alphaboolfalseShow alpha slider in picker
swatchesVec<String>[]Preset swatch colors
swatches_per_rowOption<usize>7Swatches per row
close_on_click_outsideboolfalseClose dropdown on outside click
disallow_inputboolfalseDisallow typing (picker only)

Typography

Text

PropTypeDefaultDescription
sizeOption<String>Nonexs, sm, md, lg, xl
weightOption<String>NoneCSS font-weight
colorOption<String>NoneTheme color or “dimmed”
alignOption<String>NoneCSS text-align
inlineboolfalseUse <span> instead of <p>

Title

PropTypeDefaultDescription
orderOption<u8>NoneHeading level 1-6
alignOption<String>NoneCSS text-align
sizeOption<String>NoneOverride size independent of order

Code

PropTypeDefaultDescription
blockboolfalseBlock display (<pre>) vs inline (<code>)
colorOption<String>None

Kbd

PropTypeDefaultDescription
sizeOption<String>Nonexs, sm, md, lg, xl

Anchor

PropTypeDefaultDescription
hrefOption<String>None
targetOption<String>Nonee.g., “_blank”
sizeOption<String>None
underlineboolfalse

Blockquote

PropTypeDefaultDescription
citeOption<String>NoneCitation source
iconOption<Icon>None
colorOption<String>None
radiusOption<String>None

Mark

PropTypeDefaultDescription
colorOption<String>NoneHighlight background color

Highlight

Custom Default: ignore_case defaults to true.

PropTypeDefaultDescription
textOption<String>NoneFull text to display
highlightOption<String>NoneSubstring(s) to highlight
colorOption<String>NoneHighlight color
ignore_casebooltrueCase-insensitive matching

Data Display

Avatar

PropTypeDefaultDescription
srcOption<String>NoneImage URL
altOption<String>None
nameOption<String>NoneFor initials fallback
sizeOption<String>None
radiusOption<String>None
colorOption<String>None
variantOption<String>None“filled”, “light”, “outline”

AvatarGroup: spacing: Option<String> — overlap spacing.

Badge

PropTypeDefaultDescription
variantOption<String>None“filled”, “light”, “outline”, “dot”, “transparent”, “white”, “default”, “gradient”
sizeOption<String>None
colorOption<String>None
radiusOption<String>None
full_widthboolfalse

Card

PropTypeDefaultDescription
shadowOption<String>Nonexs, sm, md, lg, xl
paddingOption<String>None
radiusOption<String>None
with_borderboolfalse

CardSection: inherit_padding: bool, with_border: bool.

Paper

PropTypeDefaultDescription
shadowOption<String>Nonexs, sm, md, lg, xl
pOption<String>NonePadding (spacing scale)
radiusOption<String>None
with_borderboolfalse

Divider

PropTypeDefaultDescription
orientationOption<String>None“horizontal” or “vertical”
sizeOption<String>None
labelOption<String>NoneText label in the divider
label_positionOption<String>None“left”, “center”, “right”

Fieldset

PropTypeDefaultDescription
legendOption<String>None
variantOption<String>None“default”, “filled”, “unstyled”
sizeOption<String>None
disabledboolfalse

Image

PropTypeDefaultDescription
srcOption<String>NoneImage URL
altOption<String>None
widthOption<String>NoneCSS width
heightOption<String>NoneCSS height
fitOption<String>NoneCSS object-fit
radiusOption<String>None
fallback_srcOption<String>NoneFallback image URL
captionOption<String>NoneCaption text below image

List / ListItem

List:

PropTypeDefaultDescription
typeOption<String>None“ordered” or “unordered”
sizeOption<String>None
spacingOption<String>None
centerboolfalseCenter items with icons
iconOption<Icon>NoneDefault icon for all items
with_paddingboolfalse

ListItem: icon: Option<Icon> — per-item icon override.


Feedback

Alert

PropTypeDefaultDescription
colorOption<String>None
variantOption<String>None“filled”, “light”, “outline”, “transparent”, “white”, “default”
titleOption<String>None
radiusOption<String>None
with_close_buttonboolfalse
iconOption<Icon>None
oncloseOption<Callback>None

Loader

PropTypeDefaultDescription
typeOption<String>None“oval”, “bars”, “dots”
sizeOption<String>None
colorOption<String>None

Progress

PropTypeDefaultDescription
valueOption<f32>NonePercentage 0-100
value_fnOption<ReactiveF32>NoneReactive value binding (auto-wrapped)
colorOption<String>None
sizeOption<String>None
radiusOption<String>None
stripedboolfalse
animatedboolfalse

Skeleton

Custom Default: animate and visible default to true.

PropTypeDefaultDescription
widthOption<String>None
heightOption<String>None
radiusOption<String>None
circleboolfalse
animatebooltrue
visiblebooltrue

Overlays

Tooltip

PropTypeDefaultDescription
labelOption<String>NoneTooltip text
positionOption<String>None“top”, “bottom”, “left”, “right”
colorOption<String>None
openedboolfalse
disabledboolfalse
with_arrowboolfalse
multilineboolfalse
widthOption<String>None

Custom Default: with_overlay, close_on_click_outside, close_on_escape, with_close_button, lock_scroll, trap_focus all default to true.

PropTypeDefaultDescription
openedboolfalse
opened_fnOption<ReactiveBool>NoneReactive open state (auto-wrapped)
titleOption<String>None
sizeOption<String>None
radiusOption<String>None
with_overlaybooltrue
overlay_opacityOption<f32>None
overlay_blurOption<String>None
centeredboolfalse
close_on_click_outsidebooltrue
close_on_escapebooltrue
with_close_buttonbooltrue
paddingOption<String>None
z_indexOption<i32>None
lock_scrollbooltrue
trap_focusbooltrue
oncloseOption<Callback>None

Drawer

Custom Default: with_overlay, close_on_click_outside, close_on_escape, with_close_button, lock_scroll, trap_focus all default to true.

PropTypeDefaultDescription
openedboolfalse
opened_fnOption<ReactiveBool>NoneReactive open state (auto-wrapped)
titleOption<String>None
positionOption<String>None“left”, “right”, “top”, “bottom”
sizeOption<String>None
with_overlaybooltrue
overlay_opacityOption<f32>None
close_on_click_outsidebooltrue
close_on_escapebooltrue
with_close_buttonbooltrue
paddingOption<String>None
z_indexOption<i32>None
lock_scrollbooltrue
trap_focusbooltrue
oncloseOption<Callback>None

Notification

Custom Default: with_close_button defaults to true.

PropTypeDefaultDescription
openedboolfalse
opened_fnOption<ReactiveBool>NoneReactive open state (auto-wrapped)
titleOption<String>None
colorOption<String>None
positionOption<String>NoneToast position
radiusOption<String>None
with_close_buttonbooltrue
with_borderboolfalse
iconOption<Icon>None
auto_closeu320Auto-close delay in ms (0 = disabled)
loadingboolfalse
z_indexOption<i32>None
oncloseOption<Callback>None

Popover

Custom Default: close_on_click_outside and close_on_escape default to true.

PropTypeDefaultDescription
openedboolfalse
positionOption<String>None
offsetOption<i32>None
radiusOption<String>None
shadowOption<String>None
with_arrowboolfalse
arrow_sizeOption<f32>None
arrow_offsetOption<f32>None
close_on_click_outsidebooltrue
close_on_escapebooltrue
widthOption<String>None
z_indexOption<i32>None
trap_focusboolfalse

Sub-components: PopoverTarget (no props), PopoverDropdown (no props).

ContextMenu

A right-click context menu. No props on the wrapper — state is managed internally.

Sub-components: ContextMenuTarget (no props), ContextMenuDropdown (no props).

Use DropdownMenuItem and DropdownMenuDivider as children of ContextMenuDropdown.

Custom Default: close_on_click_outside and close_on_item_click default to true.

PropTypeDefaultDescription
openedboolfalse
positionOption<String>None
offsetOption<i32>None
radiusOption<String>None
shadowOption<String>None
close_on_click_outsidebooltrue
close_on_item_clickbooltrue
widthOption<String>None
z_indexOption<i32>None

DropdownMenuTarget, DropdownMenuDropdown, DropdownMenuLabel, DropdownMenuDivider: No props.

DropdownMenuItem:

PropTypeDefaultDescription
left_sectionOption<Icon>None
right_sectionOption<Icon>None
colorOption<String>None
disabledboolfalse
onclickOption<Callback>None

HoverCard

PropTypeDefaultDescription
positionOption<String>None
offsetOption<i32>None
radiusOption<String>None
shadowOption<String>None
widthOption<String>None
open_delayOption<u32>None
close_delayOption<u32>None
with_arrowboolfalse

Sub-components: HoverCardTarget (no props), HoverCardDropdown (no props).

LoadingOverlay

PropTypeDefaultDescription
visibleboolfalse
overlay_opacityOption<f32>None
overlay_blurOption<String>None
loader_typeOption<String>None
loader_sizeOption<String>None
loader_colorOption<String>None
radiusOption<String>None
z_indexOption<i32>None
transition_durationOption<u32>None

Tabs

PropTypeDefaultDescription
valueOption<String>NoneActive tab value
default_valueOption<String>None
variantOption<String>None“default”, “outline”, “pills”
orientationOption<String>None“horizontal”, “vertical”
positionOption<String>None
growboolfalse
colorOption<String>None
radiusOption<String>None

TabsList: grow: bool, justify: Option<String>.

Tab:

PropTypeDefaultDescription
valueOption<String>NoneTab identifier
disabledboolfalse
left_sectionOption<Icon>None
right_sectionOption<Icon>None
onclickOption<Callback>None

TabsPanel: value: Option<String> — matches the Tab value.

Accordion

PropTypeDefaultDescription
valueOption<String>NoneActive item value
default_valueOption<String>None
variantOption<String>None“default”, “contained”, “filled”, “separated”
radiusOption<String>None
multipleboolfalseAllow multiple open items
chevron_positionOption<String>None“left”, “right”
disable_chevron_rotationboolfalse

AccordionItem: value: Option<String>.

AccordionControl: disabled: bool, icon: Option<Icon>, onclick: Option<Callback>.

AccordionPanel: No props.

PropTypeDefaultDescription
separatorOption<String>NoneCustom separator character
separator_marginOption<String>NoneSpacing around separator

BreadcrumbsItem: href: Option<String>.

Pagination

Custom Default: total, value, siblings, boundaries default to 1; with_controls defaults to true.

PropTypeDefaultDescription
totalu321Total number of pages
valueu321Current page
siblingsu321Pages visible on each side
boundariesu321Pages at start/end
sizeOption<String>None
radiusOption<String>None
with_edgesboolfalseShow first/last page buttons
with_controlsbooltrueShow prev/next buttons
colorOption<String>None
disabledboolfalse
gapOption<String>None
onchangeOption<ValueCallback<u32>>NoneReceives page number
PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
hrefOption<String>None
activeboolfalse
active_fnOption<ReactiveBool>NoneReactive active binding (auto-wrapped)
variantOption<String>None“light”, “filled”, “subtle”
colorOption<String>None
left_sectionOption<Icon>None
right_sectionOption<Icon>None
disabledboolfalse
children_offsetOption<String>NoneIndentation for nested NavLinks
openedboolfalseNested section expanded
default_openedboolfalse
no_wrapboolfalse
onclickOption<Callback>None

Stepper

PropTypeDefaultDescription
activeu320Active step index
sizeOption<String>None
orientationOption<String>None“horizontal”, “vertical”
colorOption<String>None
radiusOption<String>None
icon_sizeOption<String>None
allow_next_steps_selectboolfalse
completed_iconOption<Icon>NoneDefault completed icon for all steps
progress_iconOption<Icon>NoneDefault in-progress icon

StepperStep:

PropTypeDefaultDescription
labelOption<String>None
descriptionOption<String>None
iconOption<Icon>NoneDefault icon
completed_iconOption<Icon>NonePer-step override
progress_iconOption<Icon>NonePer-step override
allow_step_clickboolfalse
allow_step_selectboolfalse
loadingboolfalse
stateOption<String>None“step-progress”, “step-completed”, “step-inactive”
stepOption<u32>NoneStep index

StepperCompleted: No props.

Tree

Custom Default: level_offset defaults to Some("md"), expand_on_click defaults to true.

PropTypeDefaultDescription
dataVec<TreeNodeData>[]Tree data
treeOption<UseTreeReturn>NoneState from UseTreeReturn::new()
level_offsetOption<String>Some("md")Indentation per level
expand_on_clickbooltrueClick expands/collapses
select_on_clickboolfalseClick selects
render_nodeOption<RenderTreeNode>NoneCustom node renderer
onselectOption<ValueCallback<String>>None
onexpandOption<ValueCallback<String>>None
oncollapseOption<ValueCallback<String>>None

TreeNodeData: value: String, label: String, children: Vec<TreeNodeData>, disabled: bool, icon: Option<Icon>, payload: Option<Rc<dyn Any>>.


Window

BorderlessWindow

Custom Default: show_minimize, show_maximize, show_close all default to true.

PropTypeDefaultDescription
titleOption<String>NoneWindow title in titlebar
radiusOption<String>NoneCorner radius (none, xs, sm, md, lg, xl)
show_minimizebooltrue
show_maximizebooltrue
show_closebooltrue
left_sectionOption<SectionRenderer>NoneCustom titlebar left content
right_sectionOption<SectionRenderer>NoneCustom content before controls
on_minimizeOption<Callback>None
on_maximizeOption<Callback>None
on_closeOption<Callback>None

Callback Types Reference

TypeSignatureUsed By
CallbackRc<dyn Fn()>onclick, onclose, onsubmit, onchange (toggle)
InputCallbackRc<dyn Fn(String)>oninput, onchange (value)
ValueCallback<T>Rc<dyn Fn(T)>Slider (f64), Pagination (u32), Tree (String)
ReactiveBoolRc<dyn Fn() -> bool>checked_fn, active_fn, opened_fn, visible_fn
ReactiveStringRc<dyn Fn() -> String>value_fn
ReactiveF32Rc<dyn Fn() -> f32>Progress value_fn
SectionRendererRc<dyn Fn(&mut RenderScope) -> NodeHandle>BorderlessWindow sections

All callback/reactive props are auto-wrapped by the rsx! macro — just pass closures directly, do not wrap in Some(...) or Rc::new(...).