Design System
Component reference and live examples.
API Reference
Props and variants for key components.
Button
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "destructive" | "outline" | "secondary" | "secondary-fill" | "ghost" | "link" | "default" | Visual style of the button |
size | "default" | "sm" | "lg" | "icon" | "default" | Button size |
render | ReactElement | — | Render a different element instead of a <button>, e.g. render={<a href="…" />} |
Badge
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "error" | "default" | Visual style and color of the badge |
Card
| Prop | Type | Default | Description |
|---|---|---|---|
interactive | boolean | false | Adds hover border, shadow lift, and press-down effect |
Input
| Prop | Type | Default | Description |
|---|---|---|---|
type | string | — | HTML input type (text, email, password, etc.) |
className | string | — | Additional classes. Uses border-2 and focus:ring by default. |
Field
| Prop | Type | Default | Description |
|---|---|---|---|
error | boolean | false | Applies error styling to label and child inputs |
id | string | — | Custom id — auto-generated if not provided |
Combobox
| Prop | Type | Default | Description |
|---|---|---|---|
options | { value: string; label: string }[] | — | List of selectable options |
value | string | string[] | — | Currently selected value(s) |
onValueChange | (value) => void | — | Callback when selection changes |
multiple | boolean | false | Enable multi-select mode |
placeholder | string | "Select..." | Text shown when nothing is selected |
searchPlaceholder | string | "Search..." | Placeholder inside the search input |
emptyMessage | string | "No results found." | Message when no options match the search |
DataTable
| Prop | Type | Default | Description |
|---|---|---|---|
columns | ColumnDef<TData>[] | — | TanStack Table column definitions |
data | TData[] | — | Array of row data |
toolbar | ReactNode | — | Optional toolbar rendered above the table |
DatePicker
| Prop | Type | Default | Description |
|---|---|---|---|
date | Date | — | Currently selected date |
onDateChange | (date: Date | undefined) => void | — | Callback when a date is selected |
placeholder | string | "Pick a date" | Text shown when no date is selected |
SearchField
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | — | Current search string |
onChange | (value: string) => void | — | Callback when the search value changes |
placeholder | string | "Search..." | Input placeholder text |
shortcut | string | — | Optional keyboard shortcut hint (e.g. "/") |
onClear | () => void | — | Optional callback when the clear button is clicked |
Stack
| Prop | Type | Default | Description |
|---|---|---|---|
gap | "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "md" | Vertical spacing between children |
align | "start" | "center" | "end" | "stretch" | "stretch" | Cross-axis alignment |
render | ReactElement | — | Render a different element instead of a <div> |
Cluster
| Prop | Type | Default | Description |
|---|---|---|---|
gap | "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "sm" | Spacing between items |
align | "start" | "center" | "end" | "baseline" | "center" | Cross-axis alignment |
justify | "start" | "center" | "end" | "between" | "start" | Main-axis justification |
wrap | boolean | true | Allow items to wrap to the next line |
Grid
| Prop | Type | Default | Description |
|---|---|---|---|
columns | 1 | 2 | 3 | 4 | 5 | 6 | "auto-fill" | "auto-fit" | 1 | Number of columns or auto layout mode |
gap | "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "md" | Gap between grid cells |
minChildWidth | string | — | Minimum child width for auto modes (e.g. "280px") |
Center
| Prop | Type | Default | Description |
|---|---|---|---|
max | "sm" | "md" | "lg" | "xl" | "2xl" | "full" | "2xl" | Maximum width constraint |
padding | boolean | true | Apply responsive horizontal padding |
Alert
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "destructive" | "success" | "warning" | "default" | Visual style and color of the alert |
Spinner
| Prop | Type | Default | Description |
|---|---|---|---|
size | "sm" | "default" | "lg" | "default" | Spinner diameter |
Empty
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | — | Compose with EmptyIcon, EmptyTitle, EmptyDescription, EmptyAction |
FormSection
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | — | Compose with FormSectionHeader, FormSectionTitle, FormSectionDescription, FormSectionContent |
FormSectionContent
| Prop | Type | Default | Description |
|---|---|---|---|
layout | "stack" | "grid" | "stack" | Layout mode — "grid" renders a responsive two-column grid |
StatCard
| Prop | Type | Default | Description |
|---|---|---|---|
title | string | — | Metric label displayed above the value |
value | string | — | Primary metric value |
change | string | — | Optional delta text (e.g. "+12.5%") |
changeType | "positive" | "negative" | "neutral" | "neutral" | Color of the change text |
icon | ComponentType | — | Optional icon component rendered top-right |
AppShellNavItem
| Prop | Type | Default | Description |
|---|---|---|---|
href | string | — | Navigation link URL |
icon | ComponentType | — | Icon component rendered before the label |
active | boolean | false | Highlights the item as the current page |
Colors
Raw palette, semantic tokens, and status colors.
Plum
Amber
Warm Neutrals
Semantic Tokens
Status Colors
Typography
Every typographic component with sample text.
H1Heading One
H2Heading Two
H3Heading Three
H4Heading Four
PThis is a paragraph of body text used across the interface.
LeadLead text for introductions and summaries.
LargeSmallMutedMuted secondary text for descriptions.
Codeconst x = 42;MonoBadges
Status indicators and labels.
Form Controls
Individual form elements and input types.
Input
Please enter a valid email address.
Textarea
Select
Checkbox
Radio Group
Switch
Slider
Combobox
Date Picker
Native Select
Input OTP
Search Field
Form Patterns
Structured form layout with sections and validation.
Cards
Content containers with optional interactivity.
Card content goes here. This is a simple example of a card layout.
This card responds to hover with a subtle visual change.
Content for card 1.
Content for card 2.
Content for card 3.
Data Display
Tables, accordions, and tabbed content.
Table
| Name | Role | Status | |
|---|---|---|---|
| Alex Chen | alex@example.com | Engineering | Active |
| Sarah Kim | sarah@example.com | Design | Active |
| James Wilson | james@example.com | Product | Pending |
| Maria Garcia | maria@example.com | Engineering | Active |
| David Park | david@example.com | Marketing | Inactive |
Data Table
| Alex Chen | alex@example.com | Engineering | Active | |
| Sarah Kim | sarah@example.com | Design | Active | |
| James Wilson | james@example.com | Product | Pending | |
| Maria Garcia | maria@example.com | Engineering | Active | |
| David Park | david@example.com | Marketing | Inactive |
Accordion
Tabs
Overview content with project summary and key metrics.
Feedback
Alerts, progress indicators, and loading states.
Alerts
Information
Success
Warning
Error
Progress
Spinner
Skeleton
Empty State
No results found
Try adjusting your search or filters to find what you're looking for.
Overlays & Floating
Dialogs, sheets, popovers, tooltips, and menus.
Context Menu
Layout Primitives
Composable layout components for spacing and alignment.
Stack
Cluster
Grid
Center
This page uses Center max="xl" for its main content area.
Divider
Spacer
Utility
Keyboard hints, avatars, separators, and more.