A rule between neighbors (divider()): a hairline across the width it is offered, or,
with vertical, down the height it is offered (divider().vertical(), between a
row’s panes). A toolkit measures both the same way, as a horizontal rule, because the
pieces layer swaps the axes of a vertical one’s proposal and answer; realization is
where the orientation matters, for the few widgets that draw a horizontal line
regardless of their frame.
A kinds::INSPECTOR split (docs/inspector.md): content beside a trailing inspector
pane. The pane’s visibility is Day-owned state (the piece’s bound signal), so the
props carry the value to draw and InspectorPatch::Visible keeps it current;
a native affordance hiding the pane (a dock close button, a dragged-shut divider)
reports back with crate::Event::InspectorChanged.
Native recycling list (docs/list.md). The host owns scrolling + cell reuse; Day supplies
row content on demand through the injected ListSource (see Toolkit::attach_list).
Native navigation item list. items are display titles in route order;
selected highlights the active route (split presentation; None on mobile roots).
icons (parallel to items, None = no icon) are bundled image names resolved by each
backend via resource::resolve_image_file; a backend that can’t decorate its rows just
ignores them.
Progress indicator. value is the completed fraction in 0.0..=1.0; None means
indeterminate (an animated spinner / busy bar, no known extent). Backends map this to
their native determinate/indeterminate widgets (docs/progress.md).
Configure a navigation sidebar’s native pull-to-refresh control. Not a synthetic pan:
supported toolkits own gesture arbitration and the progress indicator. A false state
ends a pull, including a request the application declines. Never emits an event.
Realize props for a scroll container: which axis it scrolls. Backends create the matching
native scroll view (vertical UIScrollView/ScrollView, horizontal
HorizontalScrollView, etc.).
Search over a navigation surface (docs/search.md). The query itself stays an app-owned
signal; this carries only what the toolkit must draw, so moving the field between
placements never moves the state.
A kinds::SPLIT (docs/split.md): two panes with a divider the user drags. The first
pane’s share is Day-owned state (the piece’s bound signal): the props carry the value
to draw, SplitPatch::Fraction keeps it current, and a divider the user moved
reports back as crate::Event::ValueChanged with the new share, which applying the
patch must never re-emit (the from-native echo rule).
Full text-area props (realize, kinds::TEXT_AREA; docs/textarea.md). text seeds the
editor; min_lines/max_lines bound the auto-growing height in text lines
(max_lines == 0 = unbounded). editable/selectable/spellcheck control the native
editor attributes (all default true); a backend that can’t honor one answers
Cap::Text{Editable,Selectable,SpellCheck} = Unsupported. text and the three attributes
change after build (via TextAreaPatch); the rest are build-only.
Immutable-at-realize props of a kinds::TREE host (docs/tree.md). Everything that
changes after realize flows through TreePatch or the injected TreeSource.
A button’s native styling tier. Automatic is the toolkit’s stock look; Bordered
asks for a visually contained button where the stock look is borderless (iOS’s plain
system button reads as a link); Prominent asks for the platform’s accent-filled /
default-action affordance. Toolkits whose stock buttons are already contained treat
Bordered as Automatic.
Reactive surface update for a background(..) decorator whose color is a signal/closure:
the backend re-applies the fill on the container’s native backing view. Corner radius and
clipping are fixed at realize (the corner_radius(r) decorator takes a plain f64).
One row-level result-set change. Indexes are sequential (each delta describes the
set as the previous ones left it), so a host applies them one at a time (or falls back
to a reload; the source’s snapshot already holds the final state either way).
How a kinds::SPLIT lays its two panes (docs/split.md): beside each other, the divider
standing, or stacked, the divider lying. Named by where the panes go, since that is
what an app’s “layout” toggle means; the divider runs the other way.