Components

84 reusable building blocks built on Radix UI and Tailwind v4. Every page documents usage, live examples, props, and accessibility — generated from a single metadata source.

84 components

Actions

Forms & input

BadgeSelect

A single-value pick-to-change control styled as a Badge — a tinted lozenge whose tone follows the selected option, opening a single-select list to change the value.

Calendar

A smart, self-constraining month-grid date picker (single, multiple, or range) built on react-day-picker. Owns first-class constraints (min/max/unavailable + clamped nav), fast navigation (dropdown captions or a grid drill-down), range preview feel, a `size` axis, per-day indicator dots, and an opt-in Today footer.

Checkbox

A binary (or indeterminate) choice, typically submitted with a form.

Combobox

A searchable single-select — a field-styled trigger that opens a Popover with a cmdk search box and a filtered listbox. Accent-insensitive matching, grouped + rich options, a data-driven options prop, async/loading, opt-in free-text create, a clear control, and an aria-live result-count announcer.

DatePicker

A date field you can both type into and pick from a calendar — format-driven, with a native Date value. Ships a DateRangePicker sibling for ranges.

DateTimePicker

A combined date + time field — a calendar and a time field in one popover, with a single Date value.

Field

Pairs a control with a label and optional description, as a row or a card.

File Upload

A drag-and-drop file intake surface for business documents — résumés, attachments, deal-room docs. Accessible-first (a real, keyboard-operable file input; drag is progressive enhancement) and transport-agnostic (it owns file state, validation, and per-item status/progress display — the consumer drives the actual upload and reports progress back through a controlled `files` array). Typed rejections (type/size/count/totalSize/duplicate), directory drop, a running total, retry/remove, and drag-reorder — with rows composed from List + per-row Progress.

FilterBar

An agent-native filter system — a headless `useFilters<T>` engine plus a `FilterBar` of editable `field · operator · value` pills, where the operator set is derived from each field's type so impossible queries can't be authored. Ships type-dispatched value editors, faceted counts, a rolling-vs-calendar relative-date engine, nested AND/OR groups, saved views, URL round-trip, a natural-language Ask bar, and a `FilterApi` handle an agent or MCP tool can drive.

Form

React Hook Form scaffolding that wires labels, controls, descriptions, and validation messages.

InlineEditBeta

Edit a value in place — a value that reads as plain text until you touch it, then becomes a real field. Compound Preview ⟷ Control with click/focus/dblclick activation, quiet or explicit commit, validation, dirty-check, optimistic updates, async save, and a swappable typed control.

Input

A single-line text field — with optional in-field leading/trailing slots and built-in clear, password-reveal, and loading affordances.

Input OTP

A segmented input for short fixed-length codes (one-time passwords, 2FA, PINs).

Label

An accessible caption that names a form control.

MultiSelect

A multi-value / tag input — an editable field-surface holding several values as removable chips, with a searchable stay-open listbox, per-option chip tone, opt-in free-text tags (Create row, paste + delimiter tokenize, dedupe), a per-token validation lifecycle, a max cap, and a '+N' overflow reveal.

NumberField

A typed numeric input — Intl-formatted (decimal/currency/percent/unit) with a stepper, spinbutton a11y, and a raw number value.

Radio Group

Choose exactly one option from a small set of visible choices.

Rating

A star/score control for collecting or displaying a rating.

Select

Choose one option from a list, presented in a popover.

Slider

A draggable track for choosing a number or a range.

Switch

An instant on/off toggle for a single setting.

Textarea

A multi-line text field for longer freeform input.

TimeField

A typed time input — format-driven, with Arrow-key stepping and a native Date value.

TimePicker

A time field with a scrollable list of selectable time slots — the booking-UI pattern.

Overlays & layering

Disclosure

Feedback & status

Data display

Activity Grid

A grid of intensity-shaded cells showing activity or frequency over time (a contribution graph).

Avatar

An identity avatar — circle / square / hexagon, with presence & status indicators, a name + detail AvatarItem, and overlapping AvatarGroups.

Badge

A static, inline label for a status, count, or short piece of metadata.

Bar List

A ranked list of label/value rows, each backed by a bar sized to its share of the max.

BoardBeta

A Kanban / column board — records grouped into ordered columns where a drag is a field mutation (onCardMove). Composes the `sortable` primitive for all drag (pointer, keyboard, touch, cross-column, overlay ghost, announcements) and adds column headers with a live count + accent tone, WIP limits, collapse-to-rail, swimlanes, an inline card composer, and empty/loading states. Data-driven or composable, controlled or uncontrolled.

Bullet

A compact measure-vs-target readout: a value bar over qualitative range bands with a target marker.

Carousel

A horizontally or vertically scrolling set of slides with prev/next controls.

Chart

Token-themed chart primitives (container, config, tooltip, legend, data-table) composed with Recharts.

Counter

A compact numeric count pill — notification totals and unread counts, with a 99+ overflow cap and an animated digit roll.

DataList

The read-only 'field: value' detail block — a real description list (<dl>/<dt>/<dd>) for demographics, order summaries, settings recaps, and entity metadata. Three responsive orientations, a token-driven label column, dividers, graceful empty values, truncation, and an opt-in copy affordance.

GalleryBeta

A masonry / justified / uniform thumbnail grid — a real layout engine plus a zero-CLS lazy-media pipeline, a view-agnostic multi-select model (click · shift-range · marquee · keyboard), a built-in lightbox, FLIP re-layout motion, drag-reorder, and windowed virtualization for large asset libraries.

GanttBeta

A horizontal roadmap / Gantt canvas — entity rows × a zoomable time axis with editable bars, milestones, rolled-up summaries, dependency arrows and a critical path.

Gauge

A radial dial for a single value — with threshold zones, an optional needle, ticks, and a target.

Heatmap

A value matrix — rows × columns of cells tinted by value — rendered as a navigable table.

Kbd

Displays a keyboard key or shortcut as a keycap.

List

A general-purpose content list — a stack of peer item rows (leading media · title/description · trailing meta/actions) for settings, inbox/notification feeds, file lists, search results, and resource lists. Terse or composed items, surfaces & dividers, grouped sections, truncation, expandable rows, per-row status/unread/tone, and three selection models (navigational overlay, a keyboard GridList for multi-select, a radiogroup for single) with select-all, range, and a bulk-action bar.

Sortable

The foundational drag-and-drop reorder primitive — a zero-dependency, accessible engine that makes any collection reorderable: a single vertical/horizontal list, a wrapping 2D grid, or a Kanban board (cross-container). Keyboard drag mode and screen-reader announcements come for free; edge auto-scroll, a touch long-press sensor, a drop indicator, and multi-item drag are built in. A `useSortable` hook wires the same engine into List, Tree, and Table.

Sparkline

A compact, inline trend line/area/bar — a chart small enough to sit in a sentence or a tile.

Stat

The KPI / metric tile a dashboard opens with — a labelled number with an optional sentiment-aware delta, an icon, a description, and a chart-agnostic trend slot. Terse one-liner or full slot composition; Stat.Group lays a responsive row of tiles.

Table

A styled, semantic data table — primitives plus smart parts for sorting, row selection, sticky/pinned columns, column resize, empty/loading states, and pagination.

Tag

Removable and selectable chips — dismissable filter tokens and pick-to-toggle option chips, with TagGroup coordinating roving-keyboard selection and removal across a set.

Timeline

A read-only chronology — activity feed, audit log, order/shipment history, changelog, or status thread. A toned-marker rail of ordered events with terse or fully-composed items, grouped day headers, a live pending tail, alternating layout, and a collapsible body.

Tracker

A strip of tone-coloured blocks showing a status history — uptime, SLA, or health over time.

Tree

An arbitrary-depth hierarchical tree — recursive expand/collapse nodes with roving-tabindex keyboard navigation (WAI-ARIA Tree View), for file explorers, folder/nav sidebars, and threaded or org structures. Terse or composed items, selection (single / multiple with range + ⌘A), tri-state checkbox cascade, filter-to-reveal with highlighting, scroll-to-node, async lazy children, and inline rename.

Layout & structure