# Components

> The design-system components and colour tokens a page may use.

`import { Button, ... } from "@0x1audio/design-system"`

Only these components and tokens below the hero; no hex colours; one filled Button per view; design empty, working, done and error states; check light and dark.

The same index the MCP tool `ui_components` returns, so an agent and this page never disagree.

## Actions

| Component | Props | Use it for |
| --- | --- | --- |
| `Button` | className, variant, size, ...props | variant = default (filled) · secondary · outline · ghost · destructive · outline-destructive · link; size = sm · default · lg · icon · icon-sm. |
| `DropdownMenu` | ...props (MenuPrimitive.Root.Props) | row actions, sort, and filters. |
| `Tabs` | className, ...props (TabsPrimitive.Root.Props) | a segmented control for switching what a list shows (Sounds, MIDI, Other). |

## Inputs

| Component | Props | Use it for |
| --- | --- | --- |
| `Input` | className, type, ...props (React.ComponentProps<"input">) | one field look: bg-field, a hairline border-input, shadow-xs, a stronger border on hover, the ink ring on focus. |
| `Textarea` | className, ...props (React.ComponentProps<"textarea">) | one field look: bg-field, a hairline border-input, shadow-xs, a stronger border on hover, the ink ring on focus. |
| `Combobox` | items: readonly ComboboxOption[], value: string, onValueChange: (value: string) => void, placeholder?: string, empty?: string | one field look: bg-field, a hairline border-input, shadow-xs, a stronger border on hover, the ink ring on focus. |
| `InputOTP` | id?: string, disabled?: boolean, onValueChange?: (value: string) => void | one field look: bg-field, a hairline border-input, shadow-xs, a stronger border on hover, the ink ring on focus. |
| `SearchField` | value: string, onChange: (value: string) => void, label: string, placeholder?: string, size?: keyof typeof searchSizes, className?: string | search in a toolbar. |
| `Checkbox` | className, ...props (CheckboxPrimitive.Root.Props) | as named. |
| `Switch` | className, ...props (SwitchPrimitive.Root.Props) | as named. |
| `Slider` | className, thumbLabels, valueText, origin, ...props | as named. |
| `FolderField` | value: string, onValueChange: (value: string) => void, onBrowse: () => void, placeholder?: string, disabled?: boolean, browseLabel?: string, className?: string | as named. |

## Structure

| Component | Props | Use it for |
| --- | --- | --- |
| `PageHeader` | title, eyebrow, description, actions, className, ...props | every page. |
| `PageSection` | title, description, actions, className, children, ...props | a titled part of a page, with at most one action (usually "See all"). |
| `Card` | className, ...props (React.ComponentProps<"div">) | a raised surface for a group of related things. |
| `Separator` | className, orientation, ...props (SeparatorPrimitive.Props) | between groups in a menu or a toolbar. |
| `IconTile` | size, tone, className, ...props | an icon on a plate (empty states, step lists, settings hubs). |
| `AppIcon` | name: string, accent?: string, icon?: string, size?: AppIconSize, className?: string | the tile that stands for an app, everywhere (desktop, web, docs). |
| `Avatar` | name: string, src?: string, size?: keyof typeof avatarSizes, className?: string | a person, as the first letter of their name or email on a bg-secondary disc, or their photo. |

## Feedback

| Component | Props | Use it for |
| --- | --- | --- |
| `EmptyState` | icon, title, description, actions, pixel, className, children, ...props | what will appear here, and the first step (at most two actions). |
| `Callout` | tone, icon, title, actions, className, children, ...props | a message inside the page. |
| `Skeleton` | className, ...props (React.ComponentProps<"div">) | loading, in the shape of the final layout. |
| `Spinner` | className, ...props (ComponentProps<"span">) | inside a button that is working ("Installing…"), or a one-line status. |
| `Progress` | className, pulse, indeterminate, value, ...props | a job with a known size (value) or not (indeterminate). |
| `Badge` | className, tone, ...props | a short status in a row or card (tone). |
| `Toaster` | theme, position, ...props (ToasterProps) | bottom-right of the page above the player strip, one line as wide as it needs, one optional action (usually Undo, Try again or Show in Finder) drawn as an… |
| `Tooltip` | label: ReactNode, shortcut?: string, side?: "top" \| "bottom" \| "left" \| "right", disabled?: boolean, children: ReactElement, className?: string | an icon button's name and key on hover and focus ("Show details ⌥⌘I"), ink on the page colour, centred under it. |
| `Kbd` | className, ...props (React.ComponentProps<"kbd">) | a key in a hint or a menu. |
| `ListSummary` | className, ...props (React.ComponentProps<"p">) | a list's closing line, "Showing 3 of 40 sounds". |

## Audio

| Component | Props | Use it for |
| --- | --- | --- |
| `Waveform` | label: string, detail?: string, wave?: Wave \| null, empty: string, className?: string | the Library outside the desktop (cloud web, app pages). |
| `LibraryDialog` | open: boolean, onOpenChange: (open: boolean) => void, onPick: (paths: string[]) => void, multiple?: boolean, disabled?: boolean | the Library outside the desktop (cloud web, app pages). |
| `Dropzone` | title?: ReactNode, description?: ReactNode, dragging?: boolean, disabled?: boolean, multiple?: boolean, onChoose?: (paths: string[]) => void, extra?: ReactNode, className?: string | the Library outside the desktop (cloud web, app pages). |
| `ActionForm` | action: string \| ActionSpec, host?: ActionHost, openWith?: string[], onSettled?: (outcome: Settled) => void, className?: string | generated app UIs. |
| `AppHero` | accent?: string, icon?: string, wordmark: ReactNode, description?: ReactNode, art?: ReactNode, className?: string | generated app UIs. |

## Colour tokens

Use them as `bg-<token>`, `text-<token>`, `border-<token>`. Never a hex colour.

`accent` · `accent-foreground` · `background` · `border` · `border-strong` · `brand` · `card` · `card-foreground` · `chrome` · `destructive` · `field` · `field-hover` · `foreground` · `hover` · `input` · `lit` · `muted` · `muted-foreground` · `popover` · `popover-foreground` · `pressed` · `primary` · `primary-foreground` · `ring` · `scrim` · `secondary` · `secondary-foreground` · `secondary-hover` · `secondary-pressed` · `selected` · `subtle-foreground` · `success` · `warning` · `warning-foreground` · `wave`
