Start with the feature you are building. Typed primitives provide interaction and browser contracts; your application owns domain state, requests, and visual design.
Choose a task
| Build | Start here | Check before shipping |
|---|---|---|
| A save action with loading, failure, and retry | Build a save control | Duplicate submission, failure recovery, and the control that receives focus. |
| A browser-backed editor | Forms as a browser contract | Labels, decoded values, errors, reset, and submit. |
| A picker or command surface | Selection, autocomplete, and command surfaces | Query, active option, committed value, and keyboard commit. |
| Keyboard movement through rendered items | Collections and focus | Disabled/removal behavior and the actual focused element. |
| An archive or other confirmation | Dialog | Cancel, accepted action, failure, close request, and focus return. |
| Supporting information | Overlays and disclosure | Whether it belongs in flow, a popover, or a modal task. |
For an ordinary action, destination, or native field, use the corresponding Button, Link, or form reference. Prefer native HTML where it already supplies the interaction you need.
Read a reference when you need a contract
For submitted values, use Form; for keyboard movement, use Composite. Each module page documents its options and limitations. The complete UI reference lists every public export.
Use Storybook and browser tests to exercise the assembled interaction. Test transitions a screenshot cannot establish: a pending save, a rejected submit, an active item disappearing, or a dialog closing while work is pending.
Template authoring
UI
Foundations
Reference bounded measurements: units, limits, thresholds, and the difference from progress or input.
Alert: urgent messages without moving focus ↗Announce an urgent text change from an already mounted live region.
Heading: document hierarchy independent of visual size ↗Reference contextual heading levels and the default role-based host.
Group: make related controls understandable together ↗Reference explicit group naming and the distinction between Group and a native fieldset.
Separator: a division without an interaction ↗Reference static semantic separation, orientation, and the boundary with a draggable splitter.
VisuallyHidden: retain meaning without visual layout ↗Reference clipped accessible text and the limitation for focusable content.
WindowSplitter: accessible range state for resizable panes ↗Connect native pointer dragging and keyboard resizing to the same bounded pane layout.
Focusable: an explicit keyboard entry point ↗Reference deliberate tab stops: zero versus minus one, and the element that actually receives focus.
Collection: mounted item identity and order ↗Register runtime element handles with scope cleanup and explicit navigation metadata.
Composite: active identity, movement, and focus ↗Build keyboard movement from a collection while choosing roving or virtual focus explicitly.
Role: semantic output without invented behavior ↗Reference an explicit role host while preserving native interactions and naming.
Dom: preserve behavior when authoring a host ↗Keep props, event cancellation, and refs attached to the element that owns the interaction.
Storybook: mount a story with an owned render scope ↗Mount and dispose Typed output in a component explorer or browser fixture.
Forms
Reference native action activation, button types, disabled behavior, and Effect handlers.
Link: navigation that still behaves like a link ↗Reference intercepted navigation clicks, browser-owned anchors, and scheme policy.
Checkbox: boolean choices and mixed summaries ↗Reference checked and mixed state, native form omission, and hydrated input state.
Switch: a stable name for an on/off setting ↗Reference a stable setting name, binary switch state, and its non-form-control semantics.
RadioGroup: one choice and one native group ↗Reference native radio name/value identity and collection-backed keyboard movement.
Select: a popover-backed list of choices ↗Compare custom Select focus and commit behavior with native Form.Select.
Slider: continuous native range input ↗Reference range input timing and the distinction between user changes and programmatic bounds.
SpinButton: numeric entry at the change boundary ↗Reference numeric input timing, bounds, and invalid draft limitations.
Form: schema-bound controls and submission state ↗Canonical reference for decoded values, errors, reset, submit, and native form limitations.
Collections
Compare query text, active suggestion, and accepted record; use the project picker for the worked flow.
Listbox: visible choices with selection following focus ↗Reference persistent single-choice lists and the decision to commit on focus.
Menu: commands, checked items, and nested popups ↗Reference command menus, disabled traversal, submenu ownership, and explicit focus state.
Menubar: a persistent command row with popup menus ↗Connect horizontal command focus to independently owned submenu popovers.
Tabs: panel visibility and deliberate activation ↗Choose automatic or manual activation and keep tab identity separate from panel lifetime.
Tab: the Tabs compatibility entry point ↗Use the singular Tab import as an alias for Tabs; activation, panels, and limitations are documented there.
Toolbar: one keyboard surface for related commands ↗Reference toolbar focus and pressed state; follow collections and focus for the worked scenario.
Tree: hierarchical focus and expansion ↗Model parent identities and visible descendants without mistaking focus for file selection.
Grid: spatial navigation with active-descendant focus ↗Build a two-dimensional keyboard surface and distinguish it from an editable spreadsheet.
TreeGrid: hierarchical rows and spatial cell focus ↗Keep row expansion identities separate from cell focus identities in a hierarchical grid.
Carousel: slide identity, controls, and rotation policy ↗Build a manual slide sequence; rotation and pause require a separately scoped product policy.
Overlays
Separate opening, cancel requests, accepted actions, and native modal behavior.
NativeDialog: synchronize an existing dialog ↗Reference the low-level dialog state bridge and the explicit reverse close-event path.
Popover: supporting content in the top layer ↗Reference manual popover visibility, dismissal, and focus expectations.
NativePopover: observe open state on a real element ↗Reference an application-owned popover bridge, connection wait, and reverse toggle synchronization.
Disclosure: reveal content without leaving the page ↗Reference named disclosure parts and native details synchronization.
NativeDetails: connect details.open to application state ↗Reference the one-way details bridge and the explicit browser-to-state toggle path.
Tooltip: a description that survives pointer and keyboard use ↗Connect a stable description ID, focusable anchor, delays, and manual popover content.
Hovercard: keep interactive previews reachable ↗Preserve pointer and focus transfer into a named non-modal preview.