Browse documentation

Learning paths

Learn the UI primitives

Choose a practical UI task, then follow its worked interaction and the module reference when you need exact contracts.

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

BuildStart hereCheck before shipping
A save action with loading, failure, and retryBuild a save controlDuplicate submission, failure recovery, and the control that receives focus.
A browser-backed editorForms as a browser contractLabels, decoded values, errors, reset, and submit.
A picker or command surfaceSelection, autocomplete, and command surfacesQuery, active option, committed value, and keyboard commit.
Keyboard movement through rendered itemsCollections and focusDisabled/removal behavior and the actual focused element.
An archive or other confirmationDialogCancel, accepted action, failure, close request, and focus return.
Supporting informationOverlays and disclosureWhether 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

Meter: communicate a measurement in a known range ↗

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

Collections

Combobox: editable queries and committed suggestions ↗

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