# 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` —