{
  "namespace": "PrismDesignSystem_39d121",
  "generatedFrom": "_ds_manifest.json",
  "count": 106,
  "components": [
    {
      "name": "EditorialCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "EditorialCard — Prism component.",
      "props": [
        {
          "name": "image",
          "optional": true,
          "type": "string",
          "desc": "Thumbnail image URL; a placeholder renders when absent."
        },
        {
          "name": "imageAlt",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "eyebrow",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode[]",
          "desc": "Metadata chips shown as a dot-separated row (e.g. [\"8 min read\",\"Design\"])."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Action nodes (Buttons) shown at the bottom."
        },
        {
          "name": "layout",
          "optional": true,
          "type": "\"stack\" | \"row\"",
          "desc": "\"stack\" (image on top) or \"row\" (image beside body)."
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.SyntheticEvent) => void",
          "desc": ""
        },
        {
          "name": "href",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/EditorialCard.jsx"
    },
    {
      "name": "HeroCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "HeroCard — Prism component.",
      "props": [
        {
          "name": "sectionNumber",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "e.g. \"Section 03\" or \"03\"."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "leadout",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Lead-out label; an arrow is appended. Default \"Continue\"."
        },
        {
          "name": "image",
          "optional": true,
          "type": "string",
          "desc": "Background image URL; a tinted overlay keeps text legible."
        },
        {
          "name": "tint",
          "optional": true,
          "type": "\"dark\" | \"brand\"",
          "desc": "Overlay tint when shown. \"dark\" (neutral) or \"brand\"."
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.SyntheticEvent) => void",
          "desc": ""
        },
        {
          "name": "href",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/HeroCard.jsx"
    },
    {
      "name": "MediaCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "MediaCard — Prism component.",
      "props": [
        {
          "name": "artwork",
          "optional": true,
          "type": "string",
          "desc": "Album / cover art URL; a music-note placeholder shows when absent."
        },
        {
          "name": "eyebrow",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Small label above the title. Default \"Now playing\"."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "subtitle",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "progress",
          "optional": true,
          "type": "number",
          "desc": "Playback progress 0–100."
        },
        {
          "name": "elapsed",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "total",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "controls",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Transport control nodes (IconButtons)."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/MediaCard.jsx"
    },
    {
      "name": "MetricCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "MetricCard — Prism component.",
      "props": [
        {
          "name": "eyebrow",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Small category label above the number."
        },
        {
          "name": "value",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "The metric itself, e.g. \"€248,120\" or \"1,284\"."
        },
        {
          "name": "unit",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "delta",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Delta label, e.g. \"12.4%\"."
        },
        {
          "name": "deltaDirection",
          "optional": true,
          "type": "\"up\" | \"down\" | \"flat\"",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Optional leading icon (shown top-right instead of delta)."
        },
        {
          "name": "sparklineData",
          "optional": true,
          "type": "number[]",
          "desc": "Numbers for the built-in sparkline."
        },
        {
          "name": "sparkline",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Or supply a custom chart node."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/MetricCard.jsx"
    },
    {
      "name": "PlanCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "PlanCard — Prism component.",
      "props": [
        {
          "name": "name",
          "optional": false,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "price",
          "optional": false,
          "type": "React.ReactNode",
          "desc": "The price amount, e.g. \"€29\"."
        },
        {
          "name": "period",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Period suffix, e.g. \"/mo\". Default \"/mo\"."
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "features",
          "optional": true,
          "type": "React.ReactNode[]",
          "desc": "Feature lines, each gets a check."
        },
        {
          "name": "cta",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Call-to-action node (a Button)."
        },
        {
          "name": "featured",
          "optional": true,
          "type": "boolean",
          "desc": "Highlight as the recommended plan."
        },
        {
          "name": "flag",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Ribbon label when featured. Default \"Most popular\"."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/PlanCard.jsx"
    },
    {
      "name": "ProfileCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "ProfileCard — Prism component.",
      "props": [
        {
          "name": "name",
          "optional": false,
          "type": "string",
          "desc": ""
        },
        {
          "name": "role",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "avatar",
          "optional": true,
          "type": "string",
          "desc": "Avatar image URL; falls back to initials from name."
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode[]",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "layout",
          "optional": true,
          "type": "\"stack\" | \"row\"",
          "desc": "\"stack\" (centered) or \"row\"."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/ProfileCard.jsx"
    },
    {
      "name": "ProgressCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "ProgressCard — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "subtitle",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "max",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "tone",
          "optional": true,
          "type": "\"accent\" | \"positive\" | \"notice\" | \"negative\"",
          "desc": ""
        },
        {
          "name": "showPercent",
          "optional": true,
          "type": "boolean",
          "desc": "Show the % figure top-right. Default true."
        },
        {
          "name": "bar",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Supply a custom ProgressBar/node; otherwise one is rendered from value/max."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/ProgressCard.jsx"
    },
    {
      "name": "StatCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "StatCard — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "stats",
          "optional": false,
          "type": "StatItem[]",
          "desc": "Two related metrics shown side by side with a divider."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/StatCard.jsx"
    },
    {
      "name": "TileCard",
      "category": "cards",
      "categoryLabel": "Cards",
      "description": "TileCard — Prism component.",
      "props": [
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Large leading icon node."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.SyntheticEvent) => void",
          "desc": ""
        },
        {
          "name": "href",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/cards/TileCard.jsx"
    },
    {
      "name": "BarChart",
      "category": "charts",
      "categoryLabel": "Charts",
      "description": "BarChart — Prism component.",
      "props": [
        {
          "name": "categories",
          "optional": false,
          "type": "string[]",
          "desc": ""
        },
        {
          "name": "series",
          "optional": false,
          "type": "BarSeries[]",
          "desc": ""
        },
        {
          "name": "stacked",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "height",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "showGrid",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "showLegend",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "yTicks",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "formatY",
          "optional": true,
          "type": "(v: number) => React.ReactNode",
          "desc": ""
        },
        {
          "name": "caption",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/charts/BarChart.jsx"
    },
    {
      "name": "DonutChart",
      "category": "charts",
      "categoryLabel": "Charts",
      "description": "DonutChart — Prism component.",
      "props": [
        {
          "name": "data",
          "optional": false,
          "type": "DonutDatum[]",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "thickness",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "centerValue",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "centerLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "showLegend",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "formatValue",
          "optional": true,
          "type": "(v: number) => React.ReactNode",
          "desc": ""
        },
        {
          "name": "caption",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/charts/DonutChart.jsx"
    },
    {
      "name": "Gauge",
      "category": "charts",
      "categoryLabel": "Charts",
      "description": "Gauge — Prism component.",
      "props": [
        {
          "name": "value",
          "optional": false,
          "type": "number",
          "desc": ""
        },
        {
          "name": "min",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "max",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "label",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "unit",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "thickness",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "segments",
          "optional": true,
          "type": "GaugeSegment[]",
          "desc": ""
        },
        {
          "name": "color",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "formatValue",
          "optional": true,
          "type": "(v: number) => React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/charts/Gauge.jsx"
    },
    {
      "name": "Legend",
      "category": "charts",
      "categoryLabel": "Charts",
      "description": "Legend — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": false,
          "type": "LegendItem[]",
          "desc": ""
        },
        {
          "name": "shape",
          "optional": true,
          "type": "\"square\" | \"line\" | \"dot\"",
          "desc": ""
        },
        {
          "name": "align",
          "optional": true,
          "type": "\"start\" | \"center\"",
          "desc": ""
        }
      ],
      "source": "components/charts/Legend.jsx"
    },
    {
      "name": "LineChart",
      "category": "charts",
      "categoryLabel": "Charts",
      "description": "LineChart — Prism component.",
      "props": [
        {
          "name": "series",
          "optional": false,
          "type": "LineSeries[]",
          "desc": ""
        },
        {
          "name": "labels",
          "optional": true,
          "type": "string[]",
          "desc": ""
        },
        {
          "name": "height",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "showGrid",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "showLegend",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "showDots",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "yTicks",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "formatY",
          "optional": true,
          "type": "(v: number) => React.ReactNode",
          "desc": ""
        },
        {
          "name": "caption",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/charts/LineChart.jsx"
    },
    {
      "name": "Sparkline",
      "category": "charts",
      "categoryLabel": "Charts",
      "description": "Sparkline — Prism component.",
      "props": [
        {
          "name": "data",
          "optional": false,
          "type": "number[]",
          "desc": ""
        },
        {
          "name": "height",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "color",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "area",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "strokeWidth",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/charts/Sparkline.jsx"
    },
    {
      "name": "Avatar",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Avatar — Prism component.",
      "props": [
        {
          "name": "name",
          "optional": true,
          "type": "string",
          "desc": "Drives alt text and the initials fallback."
        },
        {
          "name": "src",
          "optional": true,
          "type": "string | null",
          "desc": "Image URL; falls back to initials when absent or broken."
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\"",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Avatar.jsx"
    },
    {
      "name": "Badge",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Badge — Prism component.",
      "props": [
        {
          "name": "tone",
          "optional": true,
          "type": "\"neutral\" | \"accent\" | \"positive\" | \"notice\" | \"negative\" | \"info\"",
          "desc": ""
        },
        {
          "name": "variant",
          "optional": true,
          "type": "\"subtle\" | \"solid\"",
          "desc": "`subtle` (tinted) or `solid` (filled)."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Optional leading icon — recommended for semantic tones."
        },
        {
          "name": "dot",
          "optional": true,
          "type": "boolean",
          "desc": "Show a small leading status dot (Helios-style) in the tone color."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Badge.jsx"
    },
    {
      "name": "Button",
      "category": "core",
      "categoryLabel": "Core",
      "description": "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.",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "\"accent\" | \"neutral\" | \"quiet\" | \"outline\" | \"negative\" | \"positive\" | \"notice\"",
          "desc": "Visual emphasis. `accent` is the single primary action per view; `positive`/`notice`/`negative` are semantic confirm/caution/destructive fills."
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\" | \"xl\"",
          "desc": "Control height. `xl` is for TV / remote-friendly surfaces."
        },
        {
          "name": "type",
          "optional": true,
          "type": "\"button\" | \"submit\" | \"reset\"",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isLoading",
          "optional": true,
          "type": "boolean",
          "desc": "Shows an in-button spinner, sets aria-busy and blocks interaction."
        },
        {
          "name": "fullWidth",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Leading icon node (e.g. a Lucide <svg>). Replaced by the spinner while loading."
        },
        {
          "name": "iconEnd",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Trailing icon node."
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": ""
        },
        {
          "name": "onClick",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Button.jsx"
    },
    {
      "name": "ButtonGroup",
      "category": "core",
      "categoryLabel": "Core",
      "description": "ButtonGroup — Prism component.",
      "props": [
        {
          "name": "orientation",
          "optional": true,
          "type": "\"horizontal\" | \"vertical\"",
          "desc": "Lay the segments in a row (default) or a column."
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\" | \"xl\"",
          "desc": "Optional size applied to every child Button that doesn't set its own."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Button / IconButton children to join."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/ButtonGroup.jsx"
    },
    {
      "name": "Card",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Card — Prism component.",
      "props": [
        {
          "name": "padded",
          "optional": true,
          "type": "boolean",
          "desc": "Apply internal padding. Default true."
        },
        {
          "name": "isInteractive",
          "optional": true,
          "type": "boolean",
          "desc": "Make the whole card a keyboard-focusable button target."
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.SyntheticEvent) => void",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Card.jsx"
    },
    {
      "name": "Fab",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Fab — Prism component.",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "\"accent\" | \"neutral\" | \"positive\" | \"negative\"",
          "desc": "Fill colour. `accent` (default), `neutral`, or semantic `positive`/`negative`."
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\"",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "The icon node (Lucide <svg>)."
        },
        {
          "name": "label",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Optional text — present = extended (pill) FAB."
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": "REQUIRED when there is no visible `label`."
        },
        {
          "name": "onClick",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Fab.jsx"
    },
    {
      "name": "IconButton",
      "category": "core",
      "categoryLabel": "Core",
      "description": "IconButton — Prism component.",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "\"quiet\" | \"neutral\" | \"accent\"",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\"",
          "desc": ""
        },
        {
          "name": "shape",
          "optional": true,
          "type": "\"square\" | \"round\"",
          "desc": "`square` (rounded-rect, default) or `round` (circular)."
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": "REQUIRED for accessibility — describes the action."
        },
        {
          "name": "onClick",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "The icon node."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/IconButton.jsx"
    },
    {
      "name": "NavButton",
      "category": "core",
      "categoryLabel": "Core",
      "description": "NavButton — Prism component.",
      "props": [
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "The icon node (Lucide <svg>)."
        },
        {
          "name": "label",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Destination label."
        },
        {
          "name": "orientation",
          "optional": true,
          "type": "\"vertical\" | \"horizontal\"",
          "desc": "`vertical` stacks icon over label (tab bar); `horizontal` is icon + label (rail)."
        },
        {
          "name": "isActive",
          "optional": true,
          "type": "boolean",
          "desc": "Marks the current destination (tinted + aria-current=\"page\")."
        },
        {
          "name": "badge",
          "optional": true,
          "type": "React.ReactNode | boolean",
          "desc": "A count (number/string) or a bare dot (`true`) shown on the icon."
        },
        {
          "name": "onPress",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": ""
        },
        {
          "name": "onClick",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/NavButton.jsx"
    },
    {
      "name": "Spinner",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Spinner — Prism component.",
      "props": [
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\"",
          "desc": ""
        },
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": "Screen-reader label. Default \"Loading\"."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Spinner.jsx"
    },
    {
      "name": "Tag",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Tag — Prism component.",
      "props": [
        {
          "name": "isSelected",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onRemove",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": "When provided, renders a remove (×) button."
        },
        {
          "name": "removeLabel",
          "optional": true,
          "type": "string",
          "desc": "Accessible verb for the remove button. Default \"Remove\"."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Tag.jsx"
    },
    {
      "name": "Toolbar",
      "category": "core",
      "categoryLabel": "Core",
      "description": "Toolbar — Prism component.",
      "props": [
        {
          "name": "orientation",
          "optional": true,
          "type": "\"horizontal\" | \"vertical\"",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/core/Toolbar.jsx"
    },
    {
      "name": "ToolbarSeparator",
      "category": "core",
      "categoryLabel": "Core",
      "description": "ToolbarSeparator — Prism component.",
      "props": [],
      "source": "components/core/Toolbar.jsx"
    },
    {
      "name": "DataGrid",
      "category": "data",
      "categoryLabel": "Data display",
      "description": "Fixed px width — required for pinned columns to compute offsets cleanly.",
      "props": [
        {
          "name": "columns",
          "optional": false,
          "type": "DataGridColumn<Row>[]",
          "desc": ""
        },
        {
          "name": "rows",
          "optional": false,
          "type": "Row[]",
          "desc": ""
        },
        {
          "name": "getRowKey",
          "optional": true,
          "type": "(row: Row, index: number) => React.Key",
          "desc": ""
        },
        {
          "name": "density",
          "optional": true,
          "type": "\"comfortable\" | \"compact\"",
          "desc": ""
        },
        {
          "name": "isSelectable",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "views",
          "optional": true,
          "type": "DataGridView[]",
          "desc": "Named presets shown in the Saved views menu."
        },
        {
          "name": "onCellEdit",
          "optional": true,
          "type": "(rowKey: React.Key, columnKey: string, value: string) => void",
          "desc": ""
        },
        {
          "name": "onRowAction",
          "optional": true,
          "type": "(row: Row) => void",
          "desc": ""
        },
        {
          "name": "maxHeight",
          "optional": true,
          "type": "number",
          "desc": "Max body height before the grid scrolls (px). Default 460."
        },
        {
          "name": "emptyState",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Custom node rendered when no rows match."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/data/DataGrid.jsx"
    },
    {
      "name": "Table",
      "category": "data",
      "categoryLabel": "Data display",
      "description": "Custom cell renderer: (row) => node.",
      "props": [
        {
          "name": "columns",
          "optional": false,
          "type": "TableColumn[]",
          "desc": ""
        },
        {
          "name": "rows",
          "optional": false,
          "type": "any[]",
          "desc": ""
        },
        {
          "name": "getRowKey",
          "optional": true,
          "type": "(row: any, index: number) => string | number",
          "desc": ""
        },
        {
          "name": "caption",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "density",
          "optional": true,
          "type": "\"comfortable\" | \"compact\"",
          "desc": "`compact` tightens padding for dense reports."
        },
        {
          "name": "hoverable",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isStriped",
          "optional": true,
          "type": "boolean",
          "desc": "Subtle zebra striping. Default true."
        },
        {
          "name": "selectedKeys",
          "optional": true,
          "type": "(string | number)[]",
          "desc": ""
        },
        {
          "name": "onRowAction",
          "optional": true,
          "type": "(row: any) => void",
          "desc": ""
        },
        {
          "name": "sortDescriptor",
          "optional": true,
          "type": "SortDescriptor",
          "desc": ""
        },
        {
          "name": "onSortChange",
          "optional": true,
          "type": "(descriptor: SortDescriptor) => void",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/data/Table.jsx"
    },
    {
      "name": "Tree",
      "category": "data",
      "categoryLabel": "Data display",
      "description": "Tree — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": false,
          "type": "TreeNodeData[]",
          "desc": ""
        },
        {
          "name": "defaultExpandedKeys",
          "optional": true,
          "type": "string[]",
          "desc": ""
        },
        {
          "name": "selectedKey",
          "optional": true,
          "type": "string | null",
          "desc": "Controlled selected node id."
        },
        {
          "name": "onSelectionChange",
          "optional": true,
          "type": "(id: string, node: TreeNodeData) => void",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/data/Tree.jsx"
    },
    {
      "name": "Calendar",
      "category": "datetime",
      "categoryLabel": "Date & time",
      "description": "Calendar — Prism component.",
      "props": [
        {
          "name": "mode",
          "optional": true,
          "type": "\"single\" | \"range\"",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "Date | { start: Date; end: Date | null }",
          "desc": ""
        },
        {
          "name": "onSelect",
          "optional": true,
          "type": "(date: Date) => void",
          "desc": ""
        },
        {
          "name": "minDate",
          "optional": true,
          "type": "Date",
          "desc": ""
        },
        {
          "name": "maxDate",
          "optional": true,
          "type": "Date",
          "desc": ""
        }
      ],
      "source": "components/datetime/Calendar.jsx"
    },
    {
      "name": "DatePicker",
      "category": "datetime",
      "categoryLabel": "Date & time",
      "description": "DatePicker — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "Date | null",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "Date | null",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(date: Date) => void",
          "desc": ""
        },
        {
          "name": "placeholder",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "minDate",
          "optional": true,
          "type": "Date",
          "desc": ""
        },
        {
          "name": "maxDate",
          "optional": true,
          "type": "Date",
          "desc": ""
        },
        {
          "name": "locale",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/datetime/DatePicker.jsx"
    },
    {
      "name": "DateRangePicker",
      "category": "datetime",
      "categoryLabel": "Date & time",
      "description": "DateRangePicker — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "DateRange",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "DateRange",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(range: DateRange) => void",
          "desc": ""
        },
        {
          "name": "placeholder",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "minDate",
          "optional": true,
          "type": "Date",
          "desc": ""
        },
        {
          "name": "maxDate",
          "optional": true,
          "type": "Date",
          "desc": ""
        },
        {
          "name": "locale",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/datetime/DateRangePicker.jsx"
    },
    {
      "name": "TimePicker",
      "category": "datetime",
      "categoryLabel": "Date & time",
      "description": "TimePicker — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "string",
          "desc": "\"HH:MM\" 24-hour string."
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(value: string) => void",
          "desc": ""
        },
        {
          "name": "step",
          "optional": true,
          "type": "number",
          "desc": "Minutes between options. Default 30."
        },
        {
          "name": "hour12",
          "optional": true,
          "type": "boolean",
          "desc": "Display 12-hour labels with AM/PM (value stays 24h)."
        },
        {
          "name": "placeholder",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/datetime/TimePicker.jsx"
    },
    {
      "name": "Alert",
      "category": "feedback",
      "categoryLabel": "Feedback",
      "description": "Alert — Prism component.",
      "props": [
        {
          "name": "tone",
          "optional": true,
          "type": "\"info\" | \"positive\" | \"notice\" | \"negative\"",
          "desc": ""
        },
        {
          "name": "title",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Override the default tone icon."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/feedback/Alert.jsx"
    },
    {
      "name": "ProgressBar",
      "category": "feedback",
      "categoryLabel": "Feedback",
      "description": "ProgressBar — Prism component.",
      "props": [
        {
          "name": "value",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "min",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "max",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "showValue",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "tone",
          "optional": true,
          "type": "\"accent\" | \"positive\" | \"notice\" | \"negative\"",
          "desc": ""
        },
        {
          "name": "isIndeterminate",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "formatValue",
          "optional": true,
          "type": "(value: number) => string",
          "desc": "Custom value formatter, e.g. (v) => `${v} / 200 MB`."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/feedback/ProgressBar.jsx"
    },
    {
      "name": "ToastProvider",
      "category": "feedback",
      "categoryLabel": "Feedback",
      "description": "Override auto-dismiss for this toast (ms).",
      "props": [
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "duration",
          "optional": true,
          "type": "number",
          "desc": "Auto-dismiss delay in ms (0 to disable). Default 5000."
        }
      ],
      "source": "components/feedback/ToastProvider.jsx"
    },
    {
      "name": "ToastRegion",
      "category": "feedback",
      "categoryLabel": "Feedback",
      "description": "ToastRegion — Prism component.",
      "props": [],
      "source": "components/feedback/ToastProvider.jsx"
    },
    {
      "name": "AutosaveIndicator",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "AutosaveIndicator — Prism component.",
      "props": [
        {
          "name": "state",
          "optional": true,
          "type": "AutosaveState",
          "desc": ""
        },
        {
          "name": "savedAt",
          "optional": true,
          "type": "string",
          "desc": "e.g. \"2:14 PM\" — used in the default \"Saved {savedAt}\" label."
        },
        {
          "name": "labels",
          "optional": true,
          "type": "Partial<Record<AutosaveState, string>>",
          "desc": ""
        }
      ],
      "source": "components/forms/AutosaveIndicator.jsx"
    },
    {
      "name": "Checkbox",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "Checkbox — Prism component.",
      "props": [
        {
          "name": "isSelected",
          "optional": true,
          "type": "boolean",
          "desc": "Controlled checked state."
        },
        {
          "name": "defaultSelected",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isIndeterminate",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(isSelected: boolean, e: React.ChangeEvent) => void",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/Checkbox.jsx"
    },
    {
      "name": "ComboBox",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "ComboBox — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "items",
          "optional": false,
          "type": "(string | ComboBoxItem)[]",
          "desc": "Options as strings or { value, label } objects."
        },
        {
          "name": "selectionMode",
          "optional": true,
          "type": "\"single\" | \"multiple\"",
          "desc": "\"single\" (default) fills the input; \"multiple\" shows removable chips."
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "defaultSelectedKeys",
          "optional": true,
          "type": "string[]",
          "desc": "Pre-selected values (multiple mode)."
        },
        {
          "name": "selectedKeys",
          "optional": true,
          "type": "string[]",
          "desc": "Controlled selected values (multiple mode)."
        },
        {
          "name": "onSelectionChange",
          "optional": true,
          "type": "(values: string[]) => void",
          "desc": "Fired in multiple mode with the full selected value array."
        },
        {
          "name": "placeholder",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "onSelect",
          "optional": true,
          "type": "(value: string, item: ComboBoxItem | null) => void",
          "desc": ""
        },
        {
          "name": "allowsCustomValue",
          "optional": true,
          "type": "boolean",
          "desc": "Allow free text that isn't in the list."
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/ComboBox.jsx"
    },
    {
      "name": "DropZone",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "DropZone — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "hint",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "accept",
          "optional": true,
          "type": "string",
          "desc": "Accept filter, e.g. \"image/*,.pdf\"."
        },
        {
          "name": "multiple",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onFiles",
          "optional": true,
          "type": "(files: FileList) => void",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Override the default upload icon."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/DropZone.jsx"
    },
    {
      "name": "ErrorSummary",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "ErrorSummary — Prism component.",
      "props": [
        {
          "name": "errors",
          "optional": false,
          "type": "FormError[]",
          "desc": ""
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/forms/ErrorSummary.jsx"
    },
    {
      "name": "Field",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "Field — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "errorMessage",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "isRequired",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isInvalid",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "hint",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Right-aligned secondary note in the label row (e.g. \"Optional\")."
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "htmlFor",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode | ((aria: FieldAria) => React.ReactNode)",
          "desc": ""
        }
      ],
      "source": "components/forms/Field.jsx"
    },
    {
      "name": "FormActions",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "FormActions — Prism component.",
      "props": [
        {
          "name": "status",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Start-aligned status node (often an AutosaveIndicator)."
        },
        {
          "name": "align",
          "optional": true,
          "type": "\"start\" | \"end\" | \"between\"",
          "desc": ""
        },
        {
          "name": "sticky",
          "optional": true,
          "type": "boolean",
          "desc": "Pin to the bottom of a scrolling form."
        }
      ],
      "source": "components/forms/FormActions.jsx"
    },
    {
      "name": "FormRow",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "FormRow — Prism component.",
      "props": [
        {
          "name": "columns",
          "optional": true,
          "type": "1 | 2 | 3",
          "desc": "Columns on wide screens (collapses to 1 under 640px). Default 2."
        }
      ],
      "source": "components/forms/FormRow.jsx"
    },
    {
      "name": "FormSection",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "FormSection — Prism component.",
      "props": [
        {
          "name": "legend",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "card",
          "optional": true,
          "type": "boolean",
          "desc": "Wrap the section in a card surface."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/forms/FormSection.jsx"
    },
    {
      "name": "MultiStepForm",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "MultiStepForm — Prism component.",
      "props": [
        {
          "name": "steps",
          "optional": false,
          "type": "WizardStep[]",
          "desc": ""
        },
        {
          "name": "current",
          "optional": true,
          "type": "number",
          "desc": "Controlled current index. Omit for uncontrolled."
        },
        {
          "name": "defaultCurrent",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "onStepChange",
          "optional": true,
          "type": "(index: number) => void",
          "desc": ""
        },
        {
          "name": "onComplete",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "canAdvance",
          "optional": true,
          "type": "(index: number) => boolean",
          "desc": "Return false to block Next on the given step index."
        },
        {
          "name": "layout",
          "optional": true,
          "type": "\"top\" | \"side\"",
          "desc": ""
        },
        {
          "name": "labels",
          "optional": true,
          "type": "{ step?: string; of?: string; back?: string; next?: string; submit?: string }",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Replace the default Back/Next action bar."
        }
      ],
      "source": "components/forms/MultiStepForm.jsx"
    },
    {
      "name": "NumberField",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "NumberField — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "min",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "max",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "step",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(value: number) => void",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/NumberField.jsx"
    },
    {
      "name": "Radio",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "Radio — Prism component.",
      "props": [],
      "source": "components/forms/RadioGroup.jsx"
    },
    {
      "name": "RadioGroup",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "RadioGroup — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "string",
          "desc": "Controlled selected value."
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string | null",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(value: string, e: React.ChangeEvent) => void",
          "desc": ""
        },
        {
          "name": "name",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Radio children."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/RadioGroup.jsx"
    },
    {
      "name": "SearchField",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "SearchField — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "placeholder",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(value: string) => void",
          "desc": ""
        },
        {
          "name": "onClear",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/SearchField.jsx"
    },
    {
      "name": "Select",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "Select — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "errorMessage",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "isRequired",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isInvalid",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(e: React.ChangeEvent) => void",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "<option> / <optgroup> elements."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/Select.jsx"
    },
    {
      "name": "Slider",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "Slider — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "min",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "max",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "step",
          "optional": true,
          "type": "number",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(value: number) => void",
          "desc": ""
        },
        {
          "name": "formatValue",
          "optional": true,
          "type": "(value: number) => string",
          "desc": "Format the displayed value, e.g. (v) => `${v}%`."
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/Slider.jsx"
    },
    {
      "name": "Switch",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "Switch — Prism component.",
      "props": [
        {
          "name": "isSelected",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "defaultSelected",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(isSelected: boolean, e: React.ChangeEvent) => void",
          "desc": ""
        },
        {
          "name": "iconOn",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Icon shown on the thumb when ON (e.g. a moon for dark mode)."
        },
        {
          "name": "iconOff",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Icon shown on the thumb when OFF (e.g. a sun for light mode)."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/Switch.jsx"
    },
    {
      "name": "TextField",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "A labelled text input with description + error wiring.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "string",
          "desc": "Helper text shown under the label; linked via aria-describedby."
        },
        {
          "name": "errorMessage",
          "optional": true,
          "type": "string",
          "desc": "Shown when isInvalid; linked via aria-describedby + aria-invalid."
        },
        {
          "name": "isRequired",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isInvalid",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "multiline",
          "optional": true,
          "type": "boolean",
          "desc": "Render a <textarea> instead of <input>."
        },
        {
          "name": "leadingIcon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Icon node placed inside the start of the field."
        },
        {
          "name": "type",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "placeholder",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(e: React.ChangeEvent) => void",
          "desc": ""
        },
        {
          "name": "id",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/TextField.jsx"
    },
    {
      "name": "ToggleButtonGroup",
      "category": "forms",
      "categoryLabel": "Forms & inputs",
      "description": "ToggleButtonGroup — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": false,
          "type": "ToggleItem[]",
          "desc": ""
        },
        {
          "name": "value",
          "optional": true,
          "type": "string | string[]",
          "desc": "Controlled value: a string (single) or string[] (multiple)."
        },
        {
          "name": "defaultValue",
          "optional": true,
          "type": "string | string[]",
          "desc": ""
        },
        {
          "name": "selectionMode",
          "optional": true,
          "type": "\"single\" | \"multiple\"",
          "desc": ""
        },
        {
          "name": "onChange",
          "optional": true,
          "type": "(value: string | string[]) => void",
          "desc": ""
        },
        {
          "name": "isDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/forms/ToggleButtonGroup.jsx"
    },
    {
      "name": "AppFooter",
      "category": "layout",
      "categoryLabel": "Layout",
      "description": "AppFooter — Prism component.",
      "props": [
        {
          "name": "brand",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Brand lockup node (logo + wordmark)."
        },
        {
          "name": "tagline",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "columns",
          "optional": true,
          "type": "FooterColumn[]",
          "desc": "Grouped primary link columns, by category."
        },
        {
          "name": "links",
          "optional": true,
          "type": "FooterLink[]",
          "desc": "Independent (ungrouped) primary links, laid out horizontally."
        },
        {
          "name": "social",
          "optional": true,
          "type": "FooterSocial[]",
          "desc": "Social icon links (each needs an accessible label)."
        },
        {
          "name": "copyright",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "legal",
          "optional": true,
          "type": "FooterLink[]",
          "desc": "Bottom-bar secondary/legal links (subtle, horizontal)."
        },
        {
          "name": "tone",
          "optional": true,
          "type": "\"default\" | \"inverse\"",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/layout/AppFooter.jsx"
    },
    {
      "name": "MediaHero",
      "category": "layout",
      "categoryLabel": "Layout",
      "description": "Alt text for image (omit/empty for decorative).",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "\"bare\" | \"box\" | \"cards\" | \"carousel\"",
          "desc": "Layout style."
        },
        {
          "name": "media",
          "optional": true,
          "type": "HeroMedia",
          "desc": "Background media (all variants except carousel)."
        },
        {
          "name": "eyebrow",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "text",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Buttons/links row."
        },
        {
          "name": "box",
          "optional": true,
          "type": "\"translucent\" | \"solid\" | \"light\"",
          "desc": "Panel style for variant=\"box\"."
        },
        {
          "name": "cards",
          "optional": true,
          "type": "HeroNavCard[]",
          "desc": "Bottom navigation cards for variant=\"cards\"."
        },
        {
          "name": "slides",
          "optional": true,
          "type": "HeroSlide[]",
          "desc": "Slides for variant=\"carousel\"."
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\" | \"full\"",
          "desc": "Hero height."
        },
        {
          "name": "align",
          "optional": true,
          "type": "\"center\" | \"end\"",
          "desc": "Vertical placement of content."
        },
        {
          "name": "scrim",
          "optional": true,
          "type": "\"soft\" | \"default\" | \"strong\"",
          "desc": "Scrim strength for legibility."
        },
        {
          "name": "autoPlay",
          "optional": true,
          "type": "boolean",
          "desc": "Auto-advance the carousel (paused under prefers-reduced-motion)."
        },
        {
          "name": "interval",
          "optional": true,
          "type": "number",
          "desc": "Carousel interval in ms."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/layout/MediaHero.jsx"
    },
    {
      "name": "PageHero",
      "category": "layout",
      "categoryLabel": "Layout",
      "description": "PageHero — Prism component.",
      "props": [
        {
          "name": "eyebrow",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Small overline above the title (optionally with a leading icon node)."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Action nodes (Buttons) rendered in a row below the copy."
        },
        {
          "name": "media",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Media node shown beside the copy (above it when align=\"center\")."
        },
        {
          "name": "align",
          "optional": true,
          "type": "\"start\" | \"center\"",
          "desc": ""
        },
        {
          "name": "tone",
          "optional": true,
          "type": "\"default\" | \"primary\" | \"secondary\" | \"tertiary\" | \"accent\"",
          "desc": "Tints the whole band: section accents or the brand accent."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/layout/PageHero.jsx"
    },
    {
      "name": "Sidebar",
      "category": "layout",
      "categoryLabel": "Layout",
      "description": "Pop-up menu (settings, sign out, …); omit for a static chip.",
      "props": [
        {
          "name": "side",
          "optional": true,
          "type": "\"left\" | \"right\"",
          "desc": "Which edge it attaches to."
        },
        {
          "name": "hero",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Fixed header content — a hero title or avatar + metadata."
        },
        {
          "name": "headerExtra",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Extra header content below the hero (e.g. a search field or CTA)."
        },
        {
          "name": "sections",
          "optional": false,
          "type": "SidebarSection[] | SidebarNavItem[]",
          "desc": "Nav sections (divided); a bare item array is treated as one section."
        },
        {
          "name": "user",
          "optional": true,
          "type": "SidebarUser",
          "desc": "Fixed footer user chip + optional pop-up menu."
        },
        {
          "name": "isCollapsed",
          "optional": true,
          "type": "boolean",
          "desc": "Collapse to an icon rail (hides labels, keeps icons)."
        },
        {
          "name": "ariaLabel",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/layout/Sidebar.jsx"
    },
    {
      "name": "SideNav",
      "category": "layout",
      "categoryLabel": "Layout",
      "description": "SideNav — Prism component.",
      "props": [
        {
          "name": "brand",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Brand lockup node (logo + wordmark)."
        },
        {
          "name": "groups",
          "optional": false,
          "type": "SideNavGroup[] | SideNavItem[]",
          "desc": "Groups of links, or a flat array of items (treated as one group)."
        },
        {
          "name": "footer",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Footer slot, e.g. a user chip."
        },
        {
          "name": "collapsible",
          "optional": true,
          "type": "boolean",
          "desc": "Show a collapse-to-rail toggle."
        },
        {
          "name": "isCollapsed",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "defaultCollapsed",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onCollapsedChange",
          "optional": true,
          "type": "(collapsed: boolean) => void",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/layout/SideNav.jsx"
    },
    {
      "name": "PageHeader",
      "category": "lockups",
      "categoryLabel": "Lockups",
      "description": "PageHeader — Prism component.",
      "props": [
        {
          "name": "breadcrumbs",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "lead",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Leading icon / avatar beside the title block."
        },
        {
          "name": "title",
          "optional": false,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "status",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Inline node next to the title (e.g. a status Badge)."
        },
        {
          "name": "subtitle",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode | React.ReactNode[]",
          "desc": "A node, or an array of meta items rendered as a wrapping row."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "tabs",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Tabs strip rendered below, separated by a rule."
        },
        {
          "name": "divider",
          "optional": true,
          "type": "boolean",
          "desc": "Add a bottom divider under the whole header."
        }
      ],
      "source": "components/lockups/PageHeader.jsx"
    },
    {
      "name": "SectionHeader",
      "category": "lockups",
      "categoryLabel": "Lockups",
      "description": "SectionHeader — Prism component.",
      "props": [
        {
          "name": "eyebrow",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "title",
          "optional": false,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\" | \"lg\"",
          "desc": ""
        },
        {
          "name": "rule",
          "optional": true,
          "type": "boolean",
          "desc": "Bottom rule under the header."
        },
        {
          "name": "as",
          "optional": true,
          "type": "keyof React.JSX.IntrinsicElements",
          "desc": "Heading tag for the title. Default \"h2\"."
        }
      ],
      "source": "components/lockups/SectionHeader.jsx"
    },
    {
      "name": "Accordion",
      "category": "navigation",
      "categoryLabel": "Navigation",
      "description": "Accordion — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": false,
          "type": "AccordionItem[]",
          "desc": ""
        },
        {
          "name": "defaultExpandedKeys",
          "optional": true,
          "type": "string[]",
          "desc": ""
        },
        {
          "name": "allowMultiple",
          "optional": true,
          "type": "boolean",
          "desc": "Keep multiple panels open at once. Default false (one at a time)."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/navigation/Accordion.jsx"
    },
    {
      "name": "AppHeader",
      "category": "navigation",
      "categoryLabel": "Navigation",
      "description": "AppHeader — Prism component.",
      "props": [
        {
          "name": "brand",
          "optional": false,
          "type": "React.ReactNode",
          "desc": "Brand lockup node (logo + wordmark)."
        },
        {
          "name": "brandHref",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "nav",
          "optional": true,
          "type": "AppHeaderNavItem[]",
          "desc": "Inline primary nav; collapses into the side nav below `collapseAt`."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "(AppHeaderAction | React.ReactElement)[]",
          "desc": "Action buttons at the end (icons), or custom nodes."
        },
        {
          "name": "sideNavExtra",
          "optional": true,
          "type": "AppHeaderNavItem[]",
          "desc": "Extra items shown only in the side-nav drawer."
        },
        {
          "name": "hasSideNav",
          "optional": true,
          "type": "boolean",
          "desc": "Force the hamburger + drawer on (else shown when sideNavExtra exists or nav collapses)."
        },
        {
          "name": "collapseAt",
          "optional": true,
          "type": "number",
          "desc": "Width (px) of the header below which inline nav collapses. Default 720."
        },
        {
          "name": "theme",
          "optional": true,
          "type": "\"light\" | \"dark\"",
          "desc": "Force an explicit header appearance independent of the app theme (e.g. a dark header on a light app). Omit for the default inverse bar."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/navigation/AppHeader.jsx"
    },
    {
      "name": "Breadcrumbs",
      "category": "navigation",
      "categoryLabel": "Navigation",
      "description": "Breadcrumbs — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": false,
          "type": "Crumb[]",
          "desc": ""
        },
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": "Accessible label for the nav landmark. Default \"Breadcrumb\"."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/navigation/Breadcrumbs.jsx"
    },
    {
      "name": "Stepper",
      "category": "navigation",
      "categoryLabel": "Navigation",
      "description": "Force a state; otherwise derived from currentStep.",
      "props": [
        {
          "name": "steps",
          "optional": false,
          "type": "Step[]",
          "desc": ""
        },
        {
          "name": "currentStep",
          "optional": true,
          "type": "number",
          "desc": "0-indexed current step; earlier steps render complete."
        },
        {
          "name": "orientation",
          "optional": true,
          "type": "\"horizontal\" | \"vertical\"",
          "desc": ""
        },
        {
          "name": "markerPosition",
          "optional": true,
          "type": "\"start\" | \"end\"",
          "desc": "Marker placement relative to the label. \"end\" = icon-after-text (horizontal) or right-aligned text-on-left rail (vertical). Default \"start\"."
        },
        {
          "name": "onStepClick",
          "optional": true,
          "type": "(index: number, step: Step) => void",
          "desc": "Makes completed steps clickable: (index, step) => void."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/navigation/Stepper.jsx"
    },
    {
      "name": "Tabs",
      "category": "navigation",
      "categoryLabel": "Navigation",
      "description": "An accessible tab set with arrow-key roving focus and tabpanels. @startingPoint section=\"Navigation\" subtitle=\"Underlined tab set with icons & roving focus\" viewport=\"700x180\"",
      "props": [
        {
          "name": "tabs",
          "optional": false,
          "type": "TabItem[]",
          "desc": ""
        },
        {
          "name": "selectedKey",
          "optional": true,
          "type": "string",
          "desc": "Controlled selected tab id."
        },
        {
          "name": "defaultKey",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "onSelectionChange",
          "optional": true,
          "type": "(id: string) => void",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/navigation/Tabs.jsx"
    },
    {
      "name": "Dialog",
      "category": "overlays",
      "categoryLabel": "Overlays",
      "description": "Dialog — Prism component.",
      "props": [
        {
          "name": "isOpen",
          "optional": false,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "onClose",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"xs\" | \"sm\" | \"md\" | \"lg\"",
          "desc": ""
        },
        {
          "name": "variant",
          "optional": true,
          "type": "\"passive\" | \"transactional\" | \"danger\"",
          "desc": "Intent-based variant (Carbon approach): - \"passive\": informational, no actions, freely dismissable. - \"transactional\": requires a choice; background click won't dismiss. - \"danger\": transactional with a destructive primary action. Inferred from the action props when omitted."
        },
        {
          "name": "primaryLabel",
          "optional": true,
          "type": "string",
          "desc": "Primary action label — renders the standard footer."
        },
        {
          "name": "onPrimary",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "secondaryLabel",
          "optional": true,
          "type": "string",
          "desc": "Secondary/cancel label. Default \"Cancel\"."
        },
        {
          "name": "onSecondary",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "isPrimaryDisabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "dismissable",
          "optional": true,
          "type": "boolean",
          "desc": "Override whether scrim-click/Esc dismiss. Defaults by variant."
        },
        {
          "name": "footer",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Custom footer node (overrides the generated action buttons)."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/overlays/Dialog.jsx"
    },
    {
      "name": "Menu",
      "category": "overlays",
      "categoryLabel": "Overlays",
      "description": "Menu — Prism component.",
      "props": [
        {
          "name": "label",
          "optional": true,
          "type": "string",
          "desc": "Fallback trigger label if `trigger` is not supplied."
        },
        {
          "name": "trigger",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Custom trigger node (e.g. an IconButton)."
        },
        {
          "name": "items",
          "optional": false,
          "type": "MenuItemSpec[]",
          "desc": ""
        },
        {
          "name": "align",
          "optional": true,
          "type": "\"start\" | \"end\"",
          "desc": ""
        }
      ],
      "source": "components/overlays/Menu.jsx"
    },
    {
      "name": "Tooltip",
      "category": "overlays",
      "categoryLabel": "Overlays",
      "description": "Tooltip — Prism component.",
      "props": [
        {
          "name": "content",
          "optional": false,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "children",
          "optional": false,
          "type": "React.ReactElement",
          "desc": "A single focusable child element."
        }
      ],
      "source": "components/overlays/Tooltip.jsx"
    },
    {
      "name": "LockedOverlay",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "description": "LockedOverlay — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "The real (blurred) content shown beneath the lock veil."
        }
      ],
      "source": "components/permissions/LockedOverlay.jsx"
    },
    {
      "name": "ReadOnlyBanner",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "description": "ReadOnlyBanner — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/permissions/ReadOnlyBanner.jsx"
    },
    {
      "name": "RestrictedState",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "description": "RestrictedState — Prism component.",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "\"no-access\" | \"locked\" | \"read-only\"",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"page\" | \"section\" | \"inline\"",
          "desc": ""
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "aux",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/permissions/RestrictedState.jsx"
    },
    {
      "name": "RoleBadge",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "description": "RoleBadge — Prism component.",
      "props": [
        {
          "name": "role",
          "optional": true,
          "type": "\"owner\" | \"admin\" | \"editor\" | \"viewer\" | string",
          "desc": "Known roles get an icon + tone; any other string renders neutral."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Override the label (defaults to the capitalised role)."
        }
      ],
      "source": "components/permissions/RoleBadge.jsx"
    },
    {
      "name": "AuditLogEntry",
      "category": "privacy",
      "categoryLabel": "Privacy",
      "description": "AuditLogEntry — Prism component.",
      "props": [
        {
          "name": "actor",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Who performed the action."
        },
        {
          "name": "action",
          "optional": false,
          "type": "React.ReactNode",
          "desc": "The action phrase, e.g. \"exported\", \"viewed record\"."
        },
        {
          "name": "target",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "The object acted upon, e.g. a record name. Emphasised."
        },
        {
          "name": "timestamp",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "When it happened (pre-formatted, locale-aware)."
        },
        {
          "name": "detail",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Secondary description line."
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Tertiary metadata, e.g. IP address / device / location."
        },
        {
          "name": "tone",
          "optional": true,
          "type": "\"neutral\" | \"create\" | \"edit\" | \"delete\" | \"view\" | \"access\" | \"alert\"",
          "desc": "Action tone — drives the marker icon & colour."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Override the marker icon (SVG path nodes)."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/privacy/AuditLogEntry.jsx"
    },
    {
      "name": "ConsentBanner",
      "category": "privacy",
      "categoryLabel": "Privacy",
      "description": "ConsentBanner — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "acceptLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "rejectLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "manageLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "onAcceptAll",
          "optional": true,
          "type": "() => void",
          "desc": "Accept all optional cookies."
        },
        {
          "name": "onReject",
          "optional": true,
          "type": "() => void",
          "desc": "Reject non-essential cookies."
        },
        {
          "name": "onManage",
          "optional": true,
          "type": "() => void",
          "desc": "Open granular preferences. When omitted, the Manage button is hidden."
        },
        {
          "name": "policyHref",
          "optional": true,
          "type": "string",
          "desc": "Link to the full privacy policy."
        },
        {
          "name": "policyLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "position",
          "optional": true,
          "type": "\"inline\" | \"fixed\"",
          "desc": "\"inline\" (in flow) or \"fixed\" (pinned to the bottom of the viewport)."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Override the leading icon (SVG path nodes)."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/privacy/ConsentBanner.jsx"
    },
    {
      "name": "MaskedField",
      "category": "privacy",
      "categoryLabel": "Privacy",
      "description": "MaskedField — Prism component.",
      "props": [
        {
          "name": "value",
          "optional": false,
          "type": "string | number",
          "desc": "The sensitive value to display (string or number)."
        },
        {
          "name": "label",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Optional caption above the value."
        },
        {
          "name": "visibleChars",
          "optional": true,
          "type": "number",
          "desc": "How many trailing characters stay visible when masked. Default 4."
        },
        {
          "name": "maskChar",
          "optional": true,
          "type": "string",
          "desc": "Character used for the mask. Default \"•\"."
        },
        {
          "name": "revealable",
          "optional": true,
          "type": "boolean",
          "desc": "Show the reveal/hide toggle. Default true."
        },
        {
          "name": "copyable",
          "optional": true,
          "type": "boolean",
          "desc": "Show a copy-to-clipboard button. Default false."
        },
        {
          "name": "defaultRevealed",
          "optional": true,
          "type": "boolean",
          "desc": "Start revealed. Default false."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/privacy/MaskedField.jsx"
    },
    {
      "name": "SensitivityTag",
      "category": "privacy",
      "categoryLabel": "Privacy",
      "description": "SensitivityTag — Prism component.",
      "props": [
        {
          "name": "level",
          "optional": true,
          "type": "\"pii\" | \"phi\" | \"financial\" | \"confidential\" | \"restricted\"",
          "desc": "Data classification level."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Custom label; defaults to the level's standard abbreviation."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Override the leading icon (SVG path nodes)."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/privacy/SensitivityTag.jsx"
    },
    {
      "name": "SessionTimeoutDialog",
      "category": "privacy",
      "categoryLabel": "Privacy",
      "description": "SessionTimeoutDialog — Prism component.",
      "props": [
        {
          "name": "open",
          "optional": false,
          "type": "boolean",
          "desc": "Whether the dialog is shown."
        },
        {
          "name": "secondsLeft",
          "optional": true,
          "type": "number",
          "desc": "Seconds remaining before automatic logout (you tick this down)."
        },
        {
          "name": "totalSeconds",
          "optional": true,
          "type": "number",
          "desc": "Starting seconds — used to fill the countdown ring. Default 60."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "extendLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "logoutLabel",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "onExtend",
          "optional": true,
          "type": "() => void",
          "desc": "Keep the session alive."
        },
        {
          "name": "onLogout",
          "optional": true,
          "type": "() => void",
          "desc": "Log out immediately."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/privacy/SessionTimeoutDialog.jsx"
    },
    {
      "name": "EmptyState",
      "category": "states",
      "categoryLabel": "States",
      "description": "EmptyState — Prism component.",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "EmptyVariant",
          "desc": "Picks the default glyph + tone. Default \"empty\"."
        },
        {
          "name": "size",
          "optional": true,
          "type": "EmptySize",
          "desc": "Footprint. Default \"section\"."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "description",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "icon",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Swap just the glyph (keeps the tinted disc)."
        },
        {
          "name": "illustration",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Replace the disc entirely with custom artwork."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Buttons / links rendered below the copy."
        },
        {
          "name": "aux",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Small auxiliary line under the actions (page/section only)."
        }
      ],
      "source": "components/states/EmptyState.jsx"
    },
    {
      "name": "TVButton",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVButton — Prism component.",
      "props": [
        {
          "name": "variant",
          "optional": true,
          "type": "\"glass\" | \"primary\" | \"accent\"",
          "desc": "Visual style. Default \"glass\"."
        },
        {
          "name": "round",
          "optional": true,
          "type": "boolean",
          "desc": "Icon-only circular button."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "string",
          "desc": "lucide icon name."
        },
        {
          "name": "iconFill",
          "optional": true,
          "type": "string",
          "desc": "Fill for the icon (e.g. \"currentColor\" for a solid play triangle)."
        },
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Backdrop image URL to show when focused."
        },
        {
          "name": "onSelect",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": "Convenience alias for onClick."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/tv/TVButton.jsx"
    },
    {
      "name": "TVCard",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVCard — Prism component.",
      "props": [
        {
          "name": "shape",
          "optional": true,
          "type": "\"wide\" | \"poster\" | \"square\"",
          "desc": "Tile aspect. Default \"wide\"."
        },
        {
          "name": "image",
          "optional": true,
          "type": "string | React.CSSProperties",
          "desc": "CSS background for the art (a string, may include a gradient fallback) or a style object."
        },
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Hi-res URL the cinematic backdrop crossfades to on focus."
        },
        {
          "name": "badge",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Corner badge, e.g. \"4K\" / \"HDR\"."
        },
        {
          "name": "progress",
          "optional": true,
          "type": "number",
          "desc": "Watch progress 0–100; renders a progress bar."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "string",
          "desc": "lucide icon name, overlaid bottom-left (for utility tiles)."
        },
        {
          "name": "name",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Title caption (revealed on focus for posters)."
        },
        {
          "name": "sub",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Secondary caption line."
        },
        {
          "name": "initial",
          "optional": true,
          "type": "boolean",
          "desc": "Make this the scene's initial focus."
        },
        {
          "name": "onSelect",
          "optional": true,
          "type": "(e: React.MouseEvent) => void",
          "desc": "Convenience alias for onClick."
        },
        {
          "name": "onLongPress",
          "optional": true,
          "type": "(e: Event) => void",
          "desc": "Fired on remote long-press (hold OK)."
        }
      ],
      "source": "components/tv/TVCard.jsx"
    },
    {
      "name": "TVEmergencyScreen",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVEmergencyScreen — Prism component.",
      "props": [
        {
          "name": "badge",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Uppercase badge label. Default \"Emergency\"."
        },
        {
          "name": "icon",
          "optional": true,
          "type": "string",
          "desc": "lucide icon name for the badge. Default \"TriangleAlert\"."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Huge headline."
        },
        {
          "name": "message",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Primary message."
        },
        {
          "name": "instructions",
          "optional": true,
          "type": "React.ReactNode[]",
          "desc": "Step/instruction chips."
        }
      ],
      "source": "components/tv/TVEmergencyScreen.jsx"
    },
    {
      "name": "TVHero",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVHero — Prism component.",
      "props": [
        {
          "name": "kicker",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Small uppercase eyebrow above the title."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Oversized feature title."
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode[]",
          "desc": "Metadata chips; the first renders as a bordered tag (e.g. \"4K HDR\")."
        },
        {
          "name": "rating",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Rating shown with a star."
        },
        {
          "name": "synopsis",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "One- or two-line description."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Action row, typically <TVButton>s."
        },
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Backdrop image URL the cinematic background shows for the hero."
        }
      ],
      "source": "components/tv/TVHero.jsx"
    },
    {
      "name": "TVIdleScreen",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVIdleScreen — Prism component.",
      "props": [
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Ambient background image URL."
        },
        {
          "name": "clock",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Large clock readout."
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Secondary line (date, weather, room)."
        },
        {
          "name": "hint",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Wake hint. Default \"Press any button to wake\"."
        }
      ],
      "source": "components/tv/TVIdleScreen.jsx"
    },
    {
      "name": "TVLanguageSelector",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "The English name (e.g. \"Spanish\").",
      "props": [
        {
          "name": "languages",
          "optional": false,
          "type": "TVLanguage[]",
          "desc": ""
        },
        {
          "name": "columns",
          "optional": true,
          "type": "number",
          "desc": "Columns in the grid. Default 3."
        },
        {
          "name": "current",
          "optional": true,
          "type": "string | number",
          "desc": "Currently selected code or index."
        },
        {
          "name": "onSelect",
          "optional": true,
          "type": "(language: TVLanguage, index: number) => void",
          "desc": ""
        },
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Backdrop URL when an option is focused."
        }
      ],
      "source": "components/tv/TVLanguageSelector.jsx"
    },
    {
      "name": "TVMediaControls",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVMediaControls — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Now-playing title."
        },
        {
          "name": "sub",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Subtitle (episode, channel, …)."
        },
        {
          "name": "position",
          "optional": true,
          "type": "number",
          "desc": "Current position in seconds."
        },
        {
          "name": "duration",
          "optional": true,
          "type": "number",
          "desc": "Total duration in seconds."
        },
        {
          "name": "buffered",
          "optional": true,
          "type": "number",
          "desc": "Buffered-to position in seconds."
        },
        {
          "name": "playing",
          "optional": true,
          "type": "boolean",
          "desc": "Whether playback is active (toggles the play/pause glyph)."
        },
        {
          "name": "onPlayPause",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "onSkipBack",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "onSkipForward",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "skip",
          "optional": true,
          "type": "number",
          "desc": "Skip amount in seconds (for labels). Default 10."
        },
        {
          "name": "controls",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Extra controls appended to the transport row."
        },
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Backdrop URL when a control is focused."
        }
      ],
      "source": "components/tv/TVMediaControls.jsx"
    },
    {
      "name": "TVModal",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVModal — Prism component.",
      "props": [
        {
          "name": "open",
          "optional": true,
          "type": "boolean",
          "desc": "Render the modal. Default true."
        },
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Heading."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Body; a string renders as a paragraph, otherwise rendered as-is."
        },
        {
          "name": "actions",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Action row, typically <TVButton>s."
        },
        {
          "name": "onClose",
          "optional": true,
          "type": "() => void",
          "desc": "Called when the modal should close (wire to the scene's onBack)."
        }
      ],
      "source": "components/tv/TVModal.jsx"
    },
    {
      "name": "TVQRHandoff",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVQRHandoff — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Heading. Default \"Continue on your phone\"."
        },
        {
          "name": "note",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Supporting instruction line."
        },
        {
          "name": "code",
          "optional": true,
          "type": "string | React.ReactNode",
          "desc": "QR as an image URL or an inline node (svg/canvas). Omit for a demo placeholder."
        }
      ],
      "source": "components/tv/TVQRHandoff.jsx"
    },
    {
      "name": "TVRail",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVRail — Prism component.",
      "props": [
        {
          "name": "title",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Row heading."
        },
        {
          "name": "more",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Trailing affordance; default \"See All ›\". Pass null/\"\" to hide."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Cards, typically <TVCard>s."
        }
      ],
      "source": "components/tv/TVRail.jsx"
    },
    {
      "name": "TVRemoteHelp",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "Button glyphs for this row, e.g. [\"↑\",\"↓\",\"←\",\"→\"].",
      "props": [
        {
          "name": "rows",
          "optional": true,
          "type": "TVRemoteHelpRow[]",
          "desc": "Override the default remote→action legend."
        }
      ],
      "source": "components/tv/TVRemoteHelp.jsx"
    },
    {
      "name": "TVScene",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVScene — Prism component.",
      "props": [
        {
          "name": "scale",
          "optional": true,
          "type": "\"tv\" | \"cinema\" | \"desktop\"",
          "desc": "Device tier; drives the cinema scale. Default \"tv\"."
        },
        {
          "name": "theme",
          "optional": true,
          "type": "\"dark\" | \"light\"",
          "desc": "Color theme. TV surfaces are dark by default."
        },
        {
          "name": "backdrop",
          "optional": true,
          "type": "boolean",
          "desc": "Render the crossfading cinematic backdrop layers. Default true."
        },
        {
          "name": "showHint",
          "optional": true,
          "type": "boolean",
          "desc": "Show the corner remote hint. Default true."
        },
        {
          "name": "hint",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Custom hint content (replaces the default ↑↓←→ / ⏎ legend)."
        },
        {
          "name": "idleMs",
          "optional": true,
          "type": "number",
          "desc": "Idle timeout in ms; after this with no input the scene shows its idle slot."
        },
        {
          "name": "panAnchor",
          "optional": true,
          "type": "number",
          "desc": "Where the focused row sits vertically when panning (0–1). Default 0.4."
        },
        {
          "name": "topBar",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Pinned top bar (e.g. <TVTopBar>); stays fixed while the body pans."
        },
        {
          "name": "idle",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Idle/screensaver slot (e.g. <TVIdleScreen>); shown when idle."
        },
        {
          "name": "overlay",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Overlay slot rendered above everything (e.g. <TVModal>, <TVEmergencyScreen>)."
        },
        {
          "name": "toasts",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Toast slot (e.g. <TVToast>)."
        },
        {
          "name": "onBack",
          "optional": true,
          "type": "() => void",
          "desc": "Called when Back/Esc is pressed."
        },
        {
          "name": "onHome",
          "optional": true,
          "type": "() => void",
          "desc": "Called when Home is pressed."
        },
        {
          "name": "onMenu",
          "optional": true,
          "type": "() => void",
          "desc": "Called when the Menu/context key is pressed."
        },
        {
          "name": "onIdle",
          "optional": true,
          "type": "(asleep: boolean) => void",
          "desc": "Called when the scene sleeps (true) or wakes (false)."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        }
      ],
      "source": "components/tv/TVScene.jsx"
    },
    {
      "name": "TVTabs",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVTabs — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": false,
          "type": "TVTabItem[]",
          "desc": "Tabs as strings or { label, current, art } objects."
        },
        {
          "name": "current",
          "optional": true,
          "type": "number",
          "desc": "Index of the current tab (when items are plain strings)."
        },
        {
          "name": "onSelect",
          "optional": true,
          "type": "(index: number, item: TVTabItem) => void",
          "desc": "Called with (index, item) when a tab is selected."
        },
        {
          "name": "art",
          "optional": true,
          "type": "string",
          "desc": "Backdrop image URL to show when a tab is focused."
        }
      ],
      "source": "components/tv/TVTabs.jsx"
    },
    {
      "name": "TVToast",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "lucide icon name; defaults by tone.",
      "props": [
        {
          "name": "toasts",
          "optional": false,
          "type": "TVToastItem[]",
          "desc": ""
        }
      ],
      "source": "components/tv/TVToast.jsx"
    },
    {
      "name": "TVTopBar",
      "category": "tv",
      "categoryLabel": "TV & cinema",
      "description": "TVTopBar — Prism component.",
      "props": [
        {
          "name": "brand",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Brand: a string (renders the Prism mark + label) or a custom node."
        },
        {
          "name": "end",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Right-aligned status/account slot (clock, search, avatar)."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Center content, typically <TVTabs>."
        }
      ],
      "source": "components/tv/TVTopBar.jsx"
    },
    {
      "name": "Blockquote",
      "category": "typography",
      "categoryLabel": "Typography",
      "description": "Blockquote — Prism component.",
      "props": [
        {
          "name": "cite",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Optional attribution shown below, prefixed with an em dash."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/typography/Blockquote.jsx"
    },
    {
      "name": "Eyebrow",
      "category": "typography",
      "categoryLabel": "Typography",
      "description": "Eyebrow — Prism component.",
      "props": [
        {
          "name": "as",
          "optional": true,
          "type": "\"p\" | \"span\" | \"div\"",
          "desc": "Element to render. Default `p`."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/typography/Eyebrow.jsx"
    },
    {
      "name": "Heading",
      "category": "typography",
      "categoryLabel": "Typography",
      "description": "Heading — Prism component.",
      "props": [
        {
          "name": "level",
          "optional": true,
          "type": "1 | 2 | 3 | 4 | 5 | 6",
          "desc": "Semantic level — sets the rendered tag h1–h6 (keep the document outline correct)."
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"hero\" | \"display\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\"",
          "desc": "Visual scale override. Defaults to `h{level}`. `hero`/`display` are oversized."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/typography/Heading.jsx"
    },
    {
      "name": "Prose",
      "category": "typography",
      "categoryLabel": "Typography",
      "description": "Prose — Prism component.",
      "props": [
        {
          "name": "html",
          "optional": true,
          "type": "string",
          "desc": "Trusted HTML string (e.g. rendered markdown). Mutually exclusive with children."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/typography/Prose.jsx"
    },
    {
      "name": "Pullquote",
      "category": "typography",
      "categoryLabel": "Typography",
      "description": "Pullquote — Prism component.",
      "props": [
        {
          "name": "attribution",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Name / source shown below the quote."
        },
        {
          "name": "role",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Secondary line under the attribution (title, company)."
        },
        {
          "name": "accent",
          "optional": true,
          "type": "boolean",
          "desc": "Color the quote in the brand accent."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/typography/Pullquote.jsx"
    },
    {
      "name": "Text",
      "category": "typography",
      "categoryLabel": "Typography",
      "description": "Text — Prism component.",
      "props": [
        {
          "name": "size",
          "optional": true,
          "type": "\"lead\" | \"body-lg\" | \"body\" | \"body-sm\" | \"small\" | \"caption\"",
          "desc": "Role size. `lead` is an intro paragraph; `caption`/`small` are sub-body."
        },
        {
          "name": "tone",
          "optional": true,
          "type": "\"secondary\" | \"tertiary\" | \"accent\" | \"positive\" | \"negative\"",
          "desc": "Optional color tone. Omit for the default per-size color."
        },
        {
          "name": "as",
          "optional": true,
          "type": "\"p\" | \"span\" | \"div\"",
          "desc": "Element to render. Default `p`; use `span` for inline."
        },
        {
          "name": "measure",
          "optional": true,
          "type": "boolean",
          "desc": "Cap width to the readable measure (~68ch)."
        },
        {
          "name": "children",
          "optional": true,
          "type": "React.ReactNode",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/typography/Text.jsx"
    },
    {
      "name": "ActivityTimeline",
      "category": "workflow",
      "categoryLabel": "Workflow",
      "description": "ActivityTimeline — Prism component.",
      "props": [
        {
          "name": "items",
          "optional": true,
          "type": "TimelineItem[]",
          "desc": "Flat chronological list."
        },
        {
          "name": "groups",
          "optional": true,
          "type": "{ label: string; items: TimelineItem[] }[]",
          "desc": "Or date-grouped sections; takes precedence over `items`."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/workflow/ActivityTimeline.jsx"
    },
    {
      "name": "ReviewActionBar",
      "category": "workflow",
      "categoryLabel": "Workflow",
      "description": "ReviewActionBar — Prism component.",
      "props": [
        {
          "name": "summary",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Left-side at-a-glance status, e.g. \"3 of 5 sections complete\"."
        },
        {
          "name": "meta",
          "optional": true,
          "type": "React.ReactNode",
          "desc": "Secondary context line — reviewer, SLA, last updated."
        },
        {
          "name": "onApprove",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "onRequestChanges",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "onReject",
          "optional": true,
          "type": "() => void",
          "desc": ""
        },
        {
          "name": "approveLabel",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "requestLabel",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "rejectLabel",
          "optional": true,
          "type": "string",
          "desc": ""
        },
        {
          "name": "pending",
          "optional": true,
          "type": "boolean",
          "desc": "Busy state — disables actions, shows \"Approving…\"."
        },
        {
          "name": "disabled",
          "optional": true,
          "type": "boolean",
          "desc": ""
        },
        {
          "name": "sticky",
          "optional": true,
          "type": "boolean",
          "desc": "Stick to the bottom of the review surface. Default true."
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/workflow/ReviewActionBar.jsx"
    },
    {
      "name": "StatusPipeline",
      "category": "workflow",
      "categoryLabel": "Workflow",
      "description": "StatusPipeline — Prism component.",
      "props": [
        {
          "name": "steps",
          "optional": false,
          "type": "PipelineStep[]",
          "desc": "Lifecycle nodes in order."
        },
        {
          "name": "orientation",
          "optional": true,
          "type": "\"horizontal\" | \"vertical\"",
          "desc": ""
        },
        {
          "name": "size",
          "optional": true,
          "type": "\"sm\" | \"md\"",
          "desc": ""
        },
        {
          "name": "className",
          "optional": true,
          "type": "string",
          "desc": ""
        }
      ],
      "source": "components/workflow/StatusPipeline.jsx"
    }
  ]
}