# Prism Design System — full agent context
> 106 React components, one re-skinnable library behind commerce, campus, finance, health, hospitality and media products. This file inlines the loading recipe, theming rules and every component with its full prop list so an agent can generate on-system code from a single fetch.
## Load it
```html
```
```jsx
const { Button, TextField, DataGrid } = window.PrismDesignSystem_39d121;
```
## Theming (cascading attributes — never override component internals)
- `data-signature="commerce|campus|finance|health|hospitality|media"` — re-skin to a product.
- `data-theme="dark"` — dark mode.
- `data-density="compact|neutral|relaxed"` — information density.
- `data-scale="cinema"` — ten-foot / TV tier.
Rules: use semantic role tokens (`--accent`, `--text-primary`, `--surface-card`, `--positive`/`--notice`/`--negative`, `--focus-ring`), never raw ramp steps; never remove the focus ring; reserve semantic colours for real meaning; supply imagery as content via props (Prism ships none).
## Components
### Core
#### Avatar
Avatar — Prism component.
`const { Avatar } = window.PrismDesignSystem_39d121;`
Props:
- `name?: string` — Drives alt text and the initials fallback.
- `src?: string | null` — Image URL; falls back to initials when absent or broken.
- `size?: "sm" | "md" | "lg"`
- `className?: string`
#### Badge
Badge — Prism component.
`const { Badge } = window.PrismDesignSystem_39d121;`
Props:
- `tone?: "neutral" | "accent" | "positive" | "notice" | "negative" | "info"`
- `variant?: "subtle" | "solid"` — `subtle` (tinted) or `solid` (filled).
- `icon?: React.ReactNode` — Optional leading icon — recommended for semantic tones.
- `dot?: boolean` — Show a small leading status dot (Helios-style) in the tone color.
- `children?: React.ReactNode`
- `className?: string`
#### Button
The primary action control. Use exactly one `accent` button per view as the main call to action; everything else is neutral, quiet or outline. Semantic fills (`positive` / `notice` / `negative`) reserve colour for genuine confirm / caution / destructive actions.
`const { Button } = window.PrismDesignSystem_39d121;`
Props:
- `variant?: "accent" | "neutral" | "quiet" | "outline" | "negative" | "positive" | "notice"` — Visual emphasis. `accent` is the single primary action per view; `positive`/`notice`/`negative` are semantic confirm/caution/destructive fills.
- `size?: "sm" | "md" | "lg" | "xl"` — Control height. `xl` is for TV / remote-friendly surfaces.
- `type?: "button" | "submit" | "reset"`
- `isDisabled?: boolean`
- `isLoading?: boolean` — Shows an in-button spinner, sets aria-busy and blocks interaction.
- `fullWidth?: boolean`
- `icon?: React.ReactNode` — Leading icon node (e.g. a Lucide ). Replaced by the spinner while loading.
- `iconEnd?: React.ReactNode` — Trailing icon node.
- `onPress?: (e: React.MouseEvent) => void`
- `onClick?: (e: React.MouseEvent) => void`
- `children?: React.ReactNode`
- `className?: string`
#### ButtonGroup
ButtonGroup — Prism component.
`const { ButtonGroup } = window.PrismDesignSystem_39d121;`
Props:
- `orientation?: "horizontal" | "vertical"` — Lay the segments in a row (default) or a column.
- `size?: "sm" | "md" | "lg" | "xl"` — Optional size applied to every child Button that doesn't set its own.
- `children?: React.ReactNode` — Button / IconButton children to join.
- `className?: string`
#### Card
Card — Prism component.
`const { Card } = window.PrismDesignSystem_39d121;`
Props:
- `padded?: boolean` — Apply internal padding. Default true.
- `isInteractive?: boolean` — Make the whole card a keyboard-focusable button target.
- `onPress?: (e: React.SyntheticEvent) => void`
- `children?: React.ReactNode`
- `className?: string`
#### Fab
Fab — Prism component.
`const { Fab } = window.PrismDesignSystem_39d121;`
Props:
- `variant?: "accent" | "neutral" | "positive" | "negative"` — Fill colour. `accent` (default), `neutral`, or semantic `positive`/`negative`.
- `size?: "sm" | "md" | "lg"`
- `icon?: React.ReactNode` — The icon node (Lucide ).
- `label?: React.ReactNode` — Optional text — present = extended (pill) FAB.
- `isDisabled?: boolean`
- `onPress?: (e: React.MouseEvent) => void` — REQUIRED when there is no visible `label`.
- `onClick?: (e: React.MouseEvent) => void`
- `className?: string`
#### IconButton
IconButton — Prism component.
`const { IconButton } = window.PrismDesignSystem_39d121;`
Props:
- `variant?: "quiet" | "neutral" | "accent"`
- `size?: "sm" | "md" | "lg"`
- `shape?: "square" | "round"` — `square` (rounded-rect, default) or `round` (circular).
- `isDisabled?: boolean`
- `onPress?: (e: React.MouseEvent) => void` — REQUIRED for accessibility — describes the action.
- `onClick?: (e: React.MouseEvent) => void`
- `children?: React.ReactNode` — The icon node.
- `className?: string`
#### NavButton
NavButton — Prism component.
`const { NavButton } = window.PrismDesignSystem_39d121;`
Props:
- `icon?: React.ReactNode` — The icon node (Lucide ).
- `label?: React.ReactNode` — Destination label.
- `orientation?: "vertical" | "horizontal"` — `vertical` stacks icon over label (tab bar); `horizontal` is icon + label (rail).
- `isActive?: boolean` — Marks the current destination (tinted + aria-current="page").
- `badge?: React.ReactNode | boolean` — A count (number/string) or a bare dot (`true`) shown on the icon.
- `onPress?: (e: React.MouseEvent) => void`
- `onClick?: (e: React.MouseEvent) => void`
- `className?: string`
#### Spinner
Spinner — Prism component.
`const { Spinner } = window.PrismDesignSystem_39d121;`
Props:
- `size?: "sm" | "md" | "lg"`
- `label?: string` — Screen-reader label. Default "Loading".
- `className?: string`
#### Tag
Tag — Prism component.
`const { Tag } = window.PrismDesignSystem_39d121;`
Props:
- `isSelected?: boolean`
- `onRemove?: (e: React.MouseEvent) => void` — When provided, renders a remove (×) button.
- `removeLabel?: string` — Accessible verb for the remove button. Default "Remove".
- `children?: React.ReactNode`
- `className?: string`
#### Toolbar
Toolbar — Prism component.
`const { Toolbar } = window.PrismDesignSystem_39d121;`
Props:
- `orientation?: "horizontal" | "vertical"`
- `children?: React.ReactNode`
- `className?: string`
#### ToolbarSeparator
ToolbarSeparator — Prism component.
`const { ToolbarSeparator } = window.PrismDesignSystem_39d121;`
_No documented props._
### Forms & inputs
#### AutosaveIndicator
AutosaveIndicator — Prism component.
`const { AutosaveIndicator } = window.PrismDesignSystem_39d121;`
Props:
- `state?: AutosaveState`
- `savedAt?: string` — e.g. "2:14 PM" — used in the default "Saved {savedAt}" label.
- `labels?: Partial>`
#### Checkbox
Checkbox — Prism component.
`const { Checkbox } = window.PrismDesignSystem_39d121;`
Props:
- `isSelected?: boolean` — Controlled checked state.
- `defaultSelected?: boolean`
- `isIndeterminate?: boolean`
- `isDisabled?: boolean`
- `onChange?: (isSelected: boolean, e: React.ChangeEvent) => void`
- `children?: React.ReactNode`
- `className?: string`
#### ComboBox
ComboBox — Prism component.
`const { ComboBox } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `description?: string`
- `items: (string | ComboBoxItem)[]` — Options as strings or { value, label } objects.
- `selectionMode?: "single" | "multiple"` — "single" (default) fills the input; "multiple" shows removable chips.
- `defaultValue?: string`
- `defaultSelectedKeys?: string[]` — Pre-selected values (multiple mode).
- `selectedKeys?: string[]` — Controlled selected values (multiple mode).
- `onSelectionChange?: (values: string[]) => void` — Fired in multiple mode with the full selected value array.
- `placeholder?: string`
- `onSelect?: (value: string, item: ComboBoxItem | null) => void`
- `allowsCustomValue?: boolean` — Allow free text that isn't in the list.
- `isDisabled?: boolean`
- `id?: string`
- `className?: string`
#### DropZone
DropZone — Prism component.
`const { DropZone } = window.PrismDesignSystem_39d121;`
Props:
- `title?: string`
- `hint?: string`
- `accept?: string` — Accept filter, e.g. "image/*,.pdf".
- `multiple?: boolean`
- `isDisabled?: boolean`
- `onFiles?: (files: FileList) => void`
- `icon?: React.ReactNode` — Override the default upload icon.
- `className?: string`
#### ErrorSummary
ErrorSummary — Prism component.
`const { ErrorSummary } = window.PrismDesignSystem_39d121;`
Props:
- `errors: FormError[]`
- `title?: React.ReactNode`
#### Field
Field — Prism component.
`const { Field } = window.PrismDesignSystem_39d121;`
Props:
- `label?: React.ReactNode`
- `description?: React.ReactNode`
- `errorMessage?: React.ReactNode`
- `isRequired?: boolean`
- `isInvalid?: boolean`
- `hint?: React.ReactNode` — Right-aligned secondary note in the label row (e.g. "Optional").
- `id?: string`
- `htmlFor?: string`
- `className?: string`
- `children?: React.ReactNode | ((aria: FieldAria) => React.ReactNode)`
#### FormActions
FormActions — Prism component.
`const { FormActions } = window.PrismDesignSystem_39d121;`
Props:
- `status?: React.ReactNode` — Start-aligned status node (often an AutosaveIndicator).
- `align?: "start" | "end" | "between"`
- `sticky?: boolean` — Pin to the bottom of a scrolling form.
#### FormRow
FormRow — Prism component.
`const { FormRow } = window.PrismDesignSystem_39d121;`
Props:
- `columns?: 1 | 2 | 3` — Columns on wide screens (collapses to 1 under 640px). Default 2.
#### FormSection
FormSection — Prism component.
`const { FormSection } = window.PrismDesignSystem_39d121;`
Props:
- `legend?: React.ReactNode`
- `description?: React.ReactNode`
- `card?: boolean` — Wrap the section in a card surface.
- `actions?: React.ReactNode`
#### MultiStepForm
MultiStepForm — Prism component.
`const { MultiStepForm } = window.PrismDesignSystem_39d121;`
Props:
- `steps: WizardStep[]`
- `current?: number` — Controlled current index. Omit for uncontrolled.
- `defaultCurrent?: number`
- `onStepChange?: (index: number) => void`
- `onComplete?: () => void`
- `canAdvance?: (index: number) => boolean` — Return false to block Next on the given step index.
- `layout?: "top" | "side"`
- `labels?: { step?: string; of?: string; back?: string; next?: string; submit?: string }`
- `actions?: React.ReactNode` — Replace the default Back/Next action bar.
#### NumberField
NumberField — Prism component.
`const { NumberField } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `description?: string`
- `value?: number`
- `defaultValue?: number`
- `min?: number`
- `max?: number`
- `step?: number`
- `isDisabled?: boolean`
- `onChange?: (value: number) => void`
- `id?: string`
- `className?: string`
#### Radio
Radio — Prism component.
`const { Radio } = window.PrismDesignSystem_39d121;`
_No documented props._
#### RadioGroup
RadioGroup — Prism component.
`const { RadioGroup } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `description?: string`
- `value?: string` — Controlled selected value.
- `defaultValue?: string | null`
- `onChange?: (value: string, e: React.ChangeEvent) => void`
- `name?: string`
- `isDisabled?: boolean`
- `children?: React.ReactNode` — Radio children.
- `className?: string`
#### SearchField
SearchField — Prism component.
`const { SearchField } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `value?: string`
- `defaultValue?: string`
- `placeholder?: string`
- `onChange?: (value: string) => void`
- `onClear?: () => void`
- `isDisabled?: boolean`
- `className?: string`
#### Select
Select — Prism component.
`const { Select } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `description?: string`
- `errorMessage?: string`
- `isRequired?: boolean`
- `isInvalid?: boolean`
- `isDisabled?: boolean`
- `value?: string`
- `defaultValue?: string`
- `onChange?: (e: React.ChangeEvent) => void`
- `id?: string`
- `children?: React.ReactNode` — / elements.
- `className?: string`
#### Slider
Slider — Prism component.
`const { Slider } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `value?: number`
- `defaultValue?: number`
- `min?: number`
- `max?: number`
- `step?: number`
- `onChange?: (value: number) => void`
- `formatValue?: (value: number) => string` — Format the displayed value, e.g. (v) => `${v}%`.
- `isDisabled?: boolean`
- `className?: string`
#### Switch
Switch — Prism component.
`const { Switch } = window.PrismDesignSystem_39d121;`
Props:
- `isSelected?: boolean`
- `defaultSelected?: boolean`
- `isDisabled?: boolean`
- `onChange?: (isSelected: boolean, e: React.ChangeEvent) => void`
- `iconOn?: React.ReactNode` — Icon shown on the thumb when ON (e.g. a moon for dark mode).
- `iconOff?: React.ReactNode` — Icon shown on the thumb when OFF (e.g. a sun for light mode).
- `children?: React.ReactNode`
- `className?: string`
#### TextField
A labelled text input with description + error wiring.
`const { TextField } = window.PrismDesignSystem_39d121;`
Props:
- `label?: string`
- `description?: string` — Helper text shown under the label; linked via aria-describedby.
- `errorMessage?: string` — Shown when isInvalid; linked via aria-describedby + aria-invalid.
- `isRequired?: boolean`
- `isInvalid?: boolean`
- `isDisabled?: boolean`
- `multiline?: boolean` — Render a