Components
The relevant @packages/ui primitives rendered as a catalogue. Compose these before adding route-local UI.
components
component library
Reusable primitives come from @packages/ui. This route composes them rather than forking a separate design system.
primitive catalogue
packages/ui/src/components/alert.tsx@packages/ui/components/alertstates: default, destructive
accessibility: role and aria semantics come from Alert structure
usage: Callouts, errors, warnings, and route boundary messages.
packages/ui/src/components/alert-dialog.tsx@packages/ui/components/alert-dialogstates: closed, open, cancel, action
accessibility: dialog title, description, focus return, Escape close
usage: Destructive confirmations and irreversible command review.
packages/ui/src/components/badge.tsx@packages/ui/components/badgestates: default, secondary, outline, destructive
accessibility: text label remains visible; never color-only status
usage: Inline status, category, and metadata labels.
packages/ui/src/components/breadcrumb.tsx@packages/ui/components/breadcrumbstates: link, current, separator, app-owned link class
accessibility: labelled nav landmark, ordered list, aria-current page, decorative separators
usage: Route orientation trails where apps own TanStack Link and routes own item order.
packages/ui/src/components/button.tsx@packages/ui/components/buttonstates: default, secondary, outline, ghost, link, disabled
accessibility: native button semantics with focus-visible ring
usage: Every command button and custom trigger base.
packages/ui/src/components/combobox.tsx@packages/ui/components/comboboxstates: closed, open, filtered, empty
accessibility: labelled input owns active option and empty state
usage: Search-as-you-type selection where filtering matters.
packages/ui/src/components/date-mono.tsx@packages/ui/components/date-monostates: muted, subtle, strong
accessibility: renders time with dateTime
usage: Single date rendering primitive for posts and metadata.
packages/ui/src/components/dropdown-menu.tsx@packages/ui/components/dropdown-menustates: closed, open, highlighted, disabled
accessibility: menu roles, keyboard navigation, Escape focus return
usage: Small command menus and selection-like action lists.
packages/ui/src/components/empty.tsx@packages/ui/components/emptystates: empty, empty with action
accessibility: announces empty content through normal document flow
usage: No-results, 404, missing data, and loading fallback endpoints.
packages/ui/src/components/field.tsx@packages/ui/components/fieldstates: default, invalid, disabled
accessibility: label, description, and invalid state stay adjacent
usage: Form field rhythm around inputs, textareas, and selects.
packages/ui/src/components/input.tsx@packages/ui/components/inputstates: default, focus, invalid, disabled
accessibility: inherits native input semantics
usage: Single-line text entry.
packages/ui/src/components/input-group.tsx@packages/ui/components/input-groupstates: inline start/end, block start/end, action button
accessibility: role group keeps addons and control connected
usage: Inputs with prefix, suffix, keyboard hints, or local command.
packages/ui/src/components/label.tsx@packages/ui/components/labelstates: default, disabled via parent group
accessibility: native label; caller supplies htmlFor or wraps control
usage: Standalone form labels when Field is too heavy.
packages/ui/src/components/select.tsx@packages/ui/components/selectstates: closed, open, selected, disabled
accessibility: keyboard selection with visible trigger value
usage: Bounded option sets where filtering is unnecessary.
packages/ui/src/components/separator.tsx@packages/ui/components/separatorstates: horizontal
accessibility: decorative separator hidden from focus order
usage: Section breaks and card internals instead of border divs.
packages/ui/src/components/textarea.tsx@packages/ui/components/textareastates: default, focus, invalid, disabled
accessibility: textarea owns native multiline semantics
usage: Multiline text entry.
packages/ui/src/components/typography.tsx@packages/ui/components/typographystates: Heading levels 1-6, text roles, code/span/kbd elements, foreground/muted/subtle/beacon/destructive tones
accessibility: Heading level selects native h1-h6; text and code use native elements without ARIA-only semantics
usage: Canonical Heading, Text, and CodeText primitives for visible text roles.
packages/ui/src/components/theme-toggle.tsx@packages/ui/components/theme-togglestates: light, dark, system
accessibility: native select has a deterministic accessible label
usage: Compact native light, dark, and system selector.
packages/ui/src/components/tooltip.tsx@packages/ui/components/tooltipstates: closed, open, delayed
accessibility: hover and focus disclosure for short hints
usage: Short labels for icon-only or dense controls.
packages/ui/src/mdx/code-block.tsx@packages/ui/mdx/code-blockstates: static, copy idle, copy success
accessibility: figure caption and copy button label
usage: MDX code figures and pre overrides in posts.
packages/ui/src/mdx/picture.tsx@packages/ui/mdx/picturestates: image, image with caption
accessibility: alt text is mandatory; caption is optional
usage: MDX images until responsive sources land.
composite catalogue
packages/ui/src/components/metadata-row.tsx@packages/ui/components/metadata-rowstates: responsive, inline, stack; foreground, muted, subtle tones
accessibility: description-list semantics preserve term and value pairs
usage: Compact route, post, and project metadata rows.
packages/ui/src/components/route-error-block.tsx@packages/ui/components/route-error-blockstates: default, destructive, with action slot
accessibility: role alert from Alert; route supplies action semantics
usage: Presentational route error UI while TanStack retry commands remain in the route.
packages/ui/src/components/card.tsx@packages/ui/components/cardstates: default, with footer actions
accessibility: heading and description hierarchy stays inside card
usage: Repeated content surfaces and component examples.
packages/ui/src/components/surface.tsx@packages/ui/components/surfacestates: tone: canvas | base | raised | inset | overlay | feature; texture: none | paper
accessibility: paper texture is decorative, stays behind content, and is suppressed for print and stronger-contrast modes
usage: Semantic planes composed high in routes; paper is limited to documented feature specimens.
packages/ui/src/components/wordmark.tsx@packages/ui/components/wordmarkstates: header, footer
accessibility: text identity; not a navigation landmark
usage: Site identity in header, footer, and design specimens.
apps/web/src/components/default-catch-boundary.tsxnonestates: caught error, reset command
accessibility: composed page fallback keeps user action explicit
usage: Route error leaves own fallback messaging and reset command.
non-display: App-only route boundary; represented here by Alert plus Button examples.
apps/web/src/components/not-found.tsxnonestates: missing route
accessibility: composed empty page keeps heading and recovery action
usage: 404 leaf owns its fallback copy and navigation command.
non-display: App-only route boundary; represented here by the Empty primitive.
layout catalogue
packages/ui/src/components/index-feed.tsx@packages/ui/components/index-feedstates: default, compact, date/body/title/description slots
accessibility: ul/li semantics preserve chronological list structure
usage: Chronological writing, activity, and work feeds before route-local list scaffolding.
packages/ui/src/components/page.tsx@packages/ui/components/pagestates: shell width, shell rhythm, header layout, section rhythm
accessibility: main, header, section, and article semantics
usage: PageShell, PageHeader, PageSection, and ProsePage for route-high layout composition.
examples
component examples
Primitive and composite examples exercise the exported package components before route-local markup is considered.
primitive examples
Semantic section title with native heading level
Role controls family, size, line-height, weight, and tracking. Tone stays separate and resolves through semantic color tokens.
Section title
Dense descriptions use the same primitive instead of local text utility piles.
--type-body-font-sizepackages/ui/src/components/typography.tsxcmd k@packages/ui/components/cardInputs stay square, dense, and tokenized.
Use the native link primitive for plain anchors. Route modules can apply the same link class to TanStack Link so navigation remains app-owned.
@packages/ui/components/breadcrumb@packages/ui overlay primitivesno matching components
Empty states are primitives with their own copy and recovery slot.
<Button variant="outline">inspect</Button>Route-composed section
PageHeader supplies the shell. The route supplies the visible text, loader data, and leaves.
Feed and metadata slots
Composable layouts
Feed rows expose slots without knowing about posts.
- owner
- @packages/ui
- route work
- loader data and retry commands
@packages/ui/components/page@packages/ui/components/index-feedcomposite examples
Cards are composites that combine typography, spacing, borders, and action slots without route-local styling.
@packages/ui/components/cardfeature surface
Surface exports CVA-backed tone and texture axes. Paper is decorative, behind readable content, and restricted to documented feature specimens.
@packages/ui/components/surfacesurfaceVariantstone="feature" texture="paper"surfaces
surface primitive
Surface applies documented semantic planes. It exposes CVA-owned tone and texture inputs without owning route structure or content.
tone="canvas"Flat page canvas. This role establishes the quiet background and never receives texture.
tone="base"Ordinary content plane for unframed route sections. It remains quiet in both themes.
tone="raised"Standalone panel with a tonal step and hairline boundary, without decorative texture.
tone="inset"Contained secondary plane for dense metadata, code, and secondary information.
tone="overlay"Opaque interactive plane for menus, dialogs, and other floating UI. Texture is not allowed.
tone="feature" texture="paper"Rare editorial plane. Paper is a decorative layer behind content, removed for print and stronger-contrast modes.
--surface-canvasflat page canvas; no texturevar(--surface-canvas)--surface-baseordinary content plane; no texturevar(--surface-base)--surface-raisedstandalone panel; no texturevar(--surface-raised)--surface-insetcontained secondary plane; no texturevar(--surface-inset)--surface-overlayfloating interactive plane; no texturevar(--surface-overlay)--surface-featurerare editorial plane; paper texture allowedvar(--surface-feature)