{
  "name": "aicanvas",
  "generatedAt": "2026-11-10T14:39:19.298Z",
  "componentCount": 130,
  "props": {
    "3d-gem-pricing-section": [
      {
        "table": "PricingTier",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Plan name shown as the card heading."
          },
          {
            "name": "pro",
            "type": "boolean",
            "optional": false,
            "default": "",
            "description": "Whether this is the highlighted/hero plan."
          },
          {
            "name": "monthly",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Price shown when billed monthly (e.g. \"$19\")."
          },
          {
            "name": "yearly",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Price shown when billed yearly (e.g. \"$15\")."
          },
          {
            "name": "suffix",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Text after the price (e.g. \"/month\"); empty for a custom-quote plan."
          },
          {
            "name": "cta",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Call-to-action button label."
          },
          {
            "name": "intro",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Line introducing the checklist (e.g. \"What's included:\")."
          },
          {
            "name": "features",
            "type": "string[]",
            "optional": false,
            "default": "",
            "description": "Checklist rows shown under the CTA."
          },
          {
            "name": "seats",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Footer band left stat (e.g. \"5 Team Seats\")."
          },
          {
            "name": "storage",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Footer band right stat (e.g. \"10 GB\")."
          }
        ]
      },
      {
        "table": "GemPricingSection",
        "props": [
          {
            "name": "tiers",
            "type": "PricingTier[]",
            "optional": true,
            "default": "DEFAULT_TIERS",
            "description": "The three plans shown left to right. Exactly one should have `pro: true`; the gem accessory and shape order pair by position (1st/2nd/3rd), so custom tiers keep the same three-plan shape."
          },
          {
            "name": "onSelectPlan",
            "type": "(tierName: string) => void",
            "optional": true,
            "default": "",
            "description": "Called with the plan name when a CTA button is clicked."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          }
        ]
      }
    ],
    "3d-product-card": [
      {
        "table": "Product3DCard",
        "props": [
          {
            "name": "tag",
            "type": "string",
            "optional": true,
            "default": "'NEW'",
            "description": "Corner badge label shown on the card."
          },
          {
            "name": "brand",
            "type": "string",
            "optional": true,
            "default": "'NORDHAUS'",
            "description": "Brand line above the product name."
          },
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "'Lyra Lounge Chair'",
            "description": "Product name heading."
          },
          {
            "name": "price",
            "type": "string",
            "optional": true,
            "default": "'$420'",
            "description": "Price label shown beside the name."
          },
          {
            "name": "model",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Same-origin or CORS-enabled GLB URL; defaults to Khronos \"Sheen Chair\" from glTF-Sample-Assets (CC0)."
          },
          {
            "name": "finishes",
            "type": "{name: string, hex: string}[]",
            "optional": true,
            "default": "DEFAULT_FINISHES",
            "description": "Finish swatches; each tints the dominant material, first is shown at rest."
          },
          {
            "name": "onAddToCart",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Called when the Add to cart button is pressed."
          },
          {
            "name": "onWishlistToggle",
            "type": "(wished: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next wishlist state when the heart is toggled."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          }
        ]
      }
    ],
    "agent-checkpoint": [
      {
        "table": "CheckpointQuestion",
        "props": [
          {
            "name": "prompt",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The question shown in 14px 600."
          },
          {
            "name": "options",
            "type": "string[]",
            "optional": false,
            "default": "",
            "description": "Up to three option chips; keys 1 to 3 pick them."
          },
          {
            "name": "allowCustom",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Adds a \"Something else\" chip that reveals a text input."
          }
        ]
      },
      {
        "table": "AgentCheckpoint",
        "props": [
          {
            "name": "mode",
            "type": "'question'|'command'|'plan'",
            "optional": true,
            "default": "",
            "description": "Which decision the card asks for. Left out, it follows the data: questions, then steps, else command. With no data props at all the card plays its demo, with a mode switch above it."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Header title next to the fingerprint mark."
          },
          {
            "name": "questions",
            "type": "CheckpointQuestion[]",
            "optional": true,
            "default": "",
            "description": "Questions asked one at a time in question mode."
          },
          {
            "name": "command",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shell command shown in command mode; editable inline, the edited text is what gets approved. A new value starts a new request."
          },
          {
            "name": "cwd",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Working directory shown on the first line of the command box."
          },
          {
            "name": "risk",
            "type": "'read'|'writes'|'destructive'",
            "optional": true,
            "default": "",
            "description": "Risk grade chip; destructive turns the approve button red and requires two presses."
          },
          {
            "name": "why",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "One-sentence reason shown under the command."
          },
          {
            "name": "steps",
            "type": "string[]",
            "optional": true,
            "default": "",
            "description": "Plan steps; each can be struck out before confirming."
          },
          {
            "name": "autoApproveSeconds",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Draws a ring around the approve button that approves with reason 'timeout' when it completes; pauses while the card is hovered or focused. Left out or 0, nothing auto-approves; ignored when risk is destructive."
          },
          {
            "name": "labels",
            "type": "{approve?: string, reject?: string}",
            "optional": true,
            "default": "",
            "description": "Overrides the approve and reject button labels in every mode."
          },
          {
            "name": "onApprove",
            "type": "(payload: CheckpointPayload & {reason: 'user'|'timeout'}) => void",
            "optional": true,
            "default": "",
            "description": "Receives exactly what the user agreed to: the edited command, the kept steps, or the answers."
          },
          {
            "name": "onReject",
            "type": "(reason: 'user'|'skip') => void",
            "optional": true,
            "default": "",
            "description": "Called on reject (or skip in question mode). Passing onApprove, onReject or onUndo disables the demo auto-reset and demo auto-approve."
          },
          {
            "name": "onUndo",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Called when the user undoes a decision. Left out in host use, no Undo is offered."
          },
          {
            "name": "requestId",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Give each ask its own id; a new id reopens a decided card even when the text is identical."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          },
          {
            "name": "tuning",
            "type": "Partial<CheckpointTuning>",
            "optional": true,
            "default": "",
            "description": "Overrides any number in CHECKPOINT_TUNING (timings, sizes, springs); keys left out keep their defaults."
          }
        ]
      }
    ],
    "agent-composer": [
      {
        "table": "CommandItem",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable command identifier that must be unique within the commands list."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Command name shown in the picker and selected chip."
          },
          {
            "name": "hint",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Supporting text shown beside the command name in the picker."
          },
          {
            "name": "icon",
            "type": "IconType",
            "optional": true,
            "default": "",
            "description": "Icon shown for the command; left out, the picker uses its generic command mark."
          }
        ]
      },
      {
        "table": "FileItem",
        "props": [
          {
            "name": "path",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "File path shown in mention results and inserted into the context list."
          },
          {
            "name": "kb",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "File size in kilobytes used to estimate the context token count."
          }
        ]
      },
      {
        "table": "ModelItem",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable model identifier that must be unique within the models list."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Model name shown on the selector and in its menu."
          },
          {
            "name": "speed",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Speed description shown in the model menu."
          },
          {
            "name": "cost",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Cost description shown in the model menu when space allows."
          },
          {
            "name": "mark",
            "type": "ModelMark",
            "optional": true,
            "default": "",
            "description": "Mark drawn beside the model; left out, a generic circular mark is used."
          }
        ]
      },
      {
        "table": "AgentComposer",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controls the message text; left out, text is kept internally, while passing it turns the demo off."
          },
          {
            "name": "onChange",
            "type": "(value: string) => void",
            "optional": true,
            "default": "",
            "description": "Receives each text edit; left out, uncontrolled text still updates locally but a controlled value cannot change."
          },
          {
            "name": "onSend",
            "type": "(payload: SendPayload) => void",
            "optional": true,
            "default": "",
            "description": "Receives the trimmed text, selected command, mentions and attachments; left out, submission only clears the local composition, while passing it turns the demo off."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles stopping a busy request and makes the stop control available outside the demo; left out, a host-controlled busy state has no stop control."
          },
          {
            "name": "busy",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controls whether the composer shows its working state; left out, that state is managed internally, while passing it turns the demo off."
          },
          {
            "name": "commands",
            "type": "CommandItem[]",
            "optional": true,
            "default": "",
            "description": "Supplies slash commands; left out, the demo uses sample commands and host mode uses none, while passing it turns the demo off."
          },
          {
            "name": "files",
            "type": "FileItem[]",
            "optional": true,
            "default": "",
            "description": "Supplies files for mentions and attachments; left out, the demo uses sample files and host mode uses none, while passing it turns the demo off."
          },
          {
            "name": "models",
            "type": "ModelItem[]",
            "optional": true,
            "default": "",
            "description": "Supplies the model selector options; left out, the demo uses sample models and host mode uses none, while passing it turns the demo off."
          },
          {
            "name": "model",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controls the selected model by id; left out, the first available model is selected internally, while passing it turns the demo off."
          },
          {
            "name": "onModelChange",
            "type": "(id: string) => void",
            "optional": true,
            "default": "",
            "description": "Receives a selected model id; left out, model selection is kept internally when model is uncontrolled."
          },
          {
            "name": "placeholder",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Sets the empty text prompt; left out, it is assembled from the available command and file shortcuts."
          },
          {
            "name": "submitMode",
            "type": "SubmitMode",
            "optional": true,
            "default": "'enter'",
            "description": "Chooses whether Enter, modified Enter or no keyboard shortcut sends the message."
          },
          {
            "name": "maxRows",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Sets the textarea height limit in text rows; left out, the tuning height limit is used."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides composer measurements and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "agent-cost-flow": [
      {
        "table": "AgentCostFlow",
        "props": [
          {
            "name": "task",
            "type": "string",
            "optional": true,
            "default": "'Evaluate migrating the app to a new framework'",
            "description": "The one task the orchestrator decomposed."
          },
          {
            "name": "eyebrow",
            "type": "string",
            "optional": true,
            "default": "'ORCHESTRATOR TRACE'",
            "description": "The small letter-spaced caps line above the task."
          },
          {
            "name": "agents",
            "type": "AgentCostFlowAgent[]",
            "optional": true,
            "default": "AGENT_COST_FLOW_AGENTS",
            "description": "One row per subagent; every total in the graphic is derived from this array."
          },
          {
            "name": "initialAgent",
            "type": "number | null",
            "optional": true,
            "default": "null",
            "description": "Index of the lane lit when the picture opens, or null for the rest state."
          },
          {
            "name": "onAgentChange",
            "type": "(id: string | null, index: number | null) => void",
            "optional": true,
            "default": "",
            "description": "Called with the agent id and index as the lit lane changes, and with nulls when none is lit."
          },
          {
            "name": "elapsedParallel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Overrides the run's wall clock, which is otherwise the longest subagent, since they run at the same time. Printed in the stacked layout only."
          },
          {
            "name": "elapsedSerial",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Overrides the serial clock, which is otherwise every subagent's time added up: the same reading done one agent at a time. Printed in the stacked layout only."
          },
          {
            "name": "showOutcome",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether the outcome column, one block and label per subagent, is drawn at the right edge."
          },
          {
            "name": "layout",
            "type": "'auto' | 'wide' | 'narrow'",
            "optional": true,
            "default": "'auto'",
            "description": "Force the wide stage or the stacked layout instead of measuring the host."
          },
          {
            "name": "paletteDark",
            "type": "Partial<AgentCostFlowPalette>",
            "optional": true,
            "default": "",
            "description": "Colour overrides for the dark theme, merged over AGENT_COST_FLOW_DARK."
          },
          {
            "name": "paletteLight",
            "type": "Partial<AgentCostFlowPalette>",
            "optional": true,
            "default": "",
            "description": "Colour overrides for the light theme, merged over AGENT_COST_FLOW_LIGHT."
          },
          {
            "name": "tuning",
            "type": "Partial<AgentCostFlowTuning>",
            "optional": true,
            "default": "",
            "description": "Geometry and timing overrides, merged over AGENT_COST_FLOW_TUNING. The hover reads hoverInMs, hoverOutMs, hoverMs, hoverHoldMs and detailCountMs; the surge a lit lane sends down its strands reads surgeMs, surgeDash, surgeWidth and surgeFade; the lane bands are measured with laneNameRise, outLabelSize, outLabelReach and spineHitPad."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          }
        ]
      }
    ],
    "agent-feedback-loop": [
      {
        "table": "AgentFeedbackLoop",
        "props": [
          {
            "name": "stages",
            "type": "AgentFeedbackLoopStage[]",
            "optional": true,
            "default": "AGENT_FEEDBACK_LOOP_STAGES",
            "description": "The six stage names and descriptions, left to right. The drawings stay tied to position, so entry 0 is always the card fan and entry 5 the tray."
          },
          {
            "name": "feedbackLabel",
            "type": "string",
            "optional": true,
            "default": "'Feedback'",
            "description": "The caption under the cube on the loop."
          },
          {
            "name": "labels",
            "type": "'hover' | 'always'",
            "optional": true,
            "default": "'hover'",
            "description": "Whether stage names appear on hover, focus and tap, or stay visible. On narrow screens they are always visible."
          },
          {
            "name": "ambient",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether the relay runs after the intro: a comet travels each conduit in turn, the stage it reaches briefly plays its motion and emits the next comet in its own colour, then the loop carries it through the cube back to Discover and the cycle repeats. Hovering a stage, or holding one with activeStage, pauses it. Off, the conduits are still, with a small notch at each entry port showing the direction, as with reduced motion."
          },
          {
            "name": "playIntro",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether the stages assemble one by one when the picture first scrolls into view. Off, it opens composed."
          },
          {
            "name": "onStageClick",
            "type": "(id: string, index: number) => void",
            "optional": true,
            "default": "",
            "description": "Called with the stage id and index on click, Enter or Space, and on a second tap on touch. The Feedback cube is a seventh button and calls it with 'feedback' and 6."
          },
          {
            "name": "onStageHover",
            "type": "(id: string | null, index: number) => void",
            "optional": true,
            "default": "",
            "description": "Called with the stage id and index on pointer enter, focus or a first tap, and with null and -1 when it ends. The Feedback cube reports 'feedback' and 6."
          },
          {
            "name": "activeStage",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id of a stage to hold in its hovered state, or 'feedback' for the cube. Hovering another stage still previews it."
          },
          {
            "name": "paletteDark",
            "type": "Partial<AgentFeedbackLoopPalette>",
            "optional": true,
            "default": "",
            "description": "Colour overrides for the dark theme, merged over AGENT_FEEDBACK_LOOP_DARK. `lanes` (string[]) is the series ramp: Discover and Extract take lane 1, Evaluate to Learn lanes 2 to 5, the Feedback cube lane 1 again; a shorter ramp wraps. Every coloured surface, glow, badge shadow and the travelling light is mixed from it, and glyphs on a lane switch to the dark ground where white would fall under 3:1."
          },
          {
            "name": "paletteLight",
            "type": "Partial<AgentFeedbackLoopPalette>",
            "optional": true,
            "default": "",
            "description": "Colour overrides for the light theme, merged over AGENT_FEEDBACK_LOOP_LIGHT, `lanes` included. The light lanes are fills on white tiles: keep each deep enough that white glyphs on it clear 3:1 (the default amber does at 3.19:1), or the glyphs switch to the dark ground."
          },
          {
            "name": "tuning",
            "type": "Partial<AgentFeedbackLoopTuning>",
            "optional": true,
            "default": "",
            "description": "Timing and motion overrides, merged over AGENT_FEEDBACK_LOOP_TUNING."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          }
        ]
      }
    ],
    "agent-status": [
      {
        "table": "StatusStep",
        "props": [
          {
            "name": "kind",
            "type": "StepKind",
            "optional": false,
            "default": "",
            "description": "Selects the activity icon and waiting treatment for the step."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Step action text shown in the run details."
          },
          {
            "name": "target",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "File, command or other target shown after the label; left out, no target is shown."
          },
          {
            "name": "outcome",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Result text shown at the end of the row; left out, no result text is shown."
          },
          {
            "name": "diff",
            "type": "{added: number, removed: number}",
            "optional": true,
            "default": "",
            "description": "Added and removed counts shown instead of outcome; left out, outcome is used when present."
          },
          {
            "name": "failed",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Colors the outcome as a failure when true; left out, the outcome uses the muted treatment."
          },
          {
            "name": "durationMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Step duration shown at the row end; left out, no duration is shown."
          },
          {
            "name": "status",
            "type": "'done'|'live'|'canceled'",
            "optional": true,
            "default": "",
            "description": "Sets the row state; left out, the row is treated as done."
          }
        ]
      },
      {
        "table": "TokenUse",
        "props": [
          {
            "name": "input",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Input token count shown in the cost breakdown."
          },
          {
            "name": "output",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Output token count shown in the cost breakdown."
          },
          {
            "name": "inputUsd",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Input cost used in the breakdown and calculated total; left out, no input price is shown."
          },
          {
            "name": "outputUsd",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Output cost used in the breakdown and calculated total; left out, no output price is shown."
          }
        ]
      },
      {
        "table": "AgentStatus",
        "props": [
          {
            "name": "state",
            "type": "AgentState",
            "optional": true,
            "default": "",
            "description": "Sets the agent state and its pill treatment; left out, it is ready in host mode, while passing it turns the demo off."
          },
          {
            "name": "phrase",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Replaces the state phrase in the pill; left out, a phrase is chosen from the state, while passing it turns the demo off."
          },
          {
            "name": "target",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds a file, command or other target after the phrase; left out, no target is shown, while passing it turns the demo off."
          },
          {
            "name": "elapsedMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shows elapsed or terminal duration in milliseconds; left out, no elapsed time is shown, while passing it turns the demo off."
          },
          {
            "name": "waitingMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shows how long the waiting state has lasted; left out, the waiting pill has no clock, while passing it turns the demo off."
          },
          {
            "name": "quietMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Marks working or thinking as stalled after the tuning threshold; left out, no quiet-time stall is inferred, while passing it turns the demo off."
          },
          {
            "name": "costUsd",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shows the total run cost in US dollars; left out, a total is calculated only when token prices are supplied, while passing it turns the demo off."
          },
          {
            "name": "steps",
            "type": "StatusStep[]",
            "optional": true,
            "default": "",
            "description": "Supplies rows for the expandable run details; left out, the details contain no steps in host mode, while passing it turns the demo off."
          },
          {
            "name": "tokens",
            "type": "TokenUse",
            "optional": true,
            "default": "",
            "description": "Supplies input and output usage for the cost breakdown; left out, token lines are not shown, while passing it turns the demo off."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Sets whether run details start expanded."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles stopping an active run and makes the stop control available outside the demo; left out, host runs have no stop control."
          },
          {
            "name": "onReview",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles the review action and makes that control available while waiting; left out, host waiting states have no review control."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides status measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "ai-knowledge-map": [
      {
        "table": "AiKnowledgeMap",
        "props": [
          {
            "name": "categories",
            "type": "KnowledgeMapCategory[]",
            "optional": true,
            "default": "KNOWLEDGE_MAP_CATEGORIES",
            "description": "The category cards and the results each one fans out to."
          },
          {
            "name": "initialCategory",
            "type": "number",
            "optional": true,
            "default": "2",
            "description": "Index of the card that is active on mount."
          },
          {
            "name": "onCategoryChange",
            "type": "(id: string, index: number) => void",
            "optional": true,
            "default": "",
            "description": "Called with the category id and index when the active card changes."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Knowledge Index'",
            "description": "Heading above the orb."
          },
          {
            "name": "modelIndex",
            "type": "number",
            "optional": true,
            "default": "4",
            "description": "First number in the line under the heading, read as \"Model 4 of 12\"."
          },
          {
            "name": "modelCount",
            "type": "number",
            "optional": true,
            "default": "12",
            "description": "Second number in that line."
          },
          {
            "name": "confidence",
            "type": "number",
            "optional": true,
            "default": "92",
            "description": "Percentage shown in the ring under the orb; its colour follows the score."
          },
          {
            "name": "layout",
            "type": "'fit' | 'follow' | 'bands'",
            "optional": true,
            "default": "'follow'",
            "description": "How the result column sits: centred, following the active card, or grouped by score."
          },
          {
            "name": "pulse",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether the orb sends light down the active wire to the results on every pass."
          },
          {
            "name": "paletteDark",
            "type": "Partial<KnowledgeMapPalette>",
            "optional": true,
            "default": "",
            "description": "Colour overrides for the dark theme, merged over KNOWLEDGE_MAP_DARK."
          },
          {
            "name": "paletteLight",
            "type": "Partial<KnowledgeMapPalette>",
            "optional": true,
            "default": "",
            "description": "Colour overrides for the light theme, merged over KNOWLEDGE_MAP_LIGHT."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-alert": [
      {
        "table": "Alert",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-avatar": [
      {
        "table": "Avatar",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "'?'",
            "description": "Used to derive uppercase initials (shown when no src)."
          },
          {
            "name": "src",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional image URL. When provided, renders an img instead of initials."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "status",
            "type": "'online'|'caution'|'fault'|'offline'",
            "optional": true,
            "default": "",
            "description": "When set, renders a status dot."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes merged onto the inner avatar box (the outer wrapper receives style and ...props)."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-badge": [
      {
        "table": "Badge",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'|'subtle'|'outline'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault, subtle, outline."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-button-system": [
      {
        "table": "Button",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'outline'|'ghost'|'destructive'|'link'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, outline, ghost, destructive, link."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "asChild",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, renders the only child element with the button's props/styles."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component rendered before children."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "Native button type; defaults to 'button', so it does not submit an enclosing form unless set to 'submit'."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "When true, disables the control."
          },
          {
            "name": "onClick",
            "type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the element is clicked."
          }
        ]
      }
    ],
    "andromeda-card": [
      {
        "table": "Card",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'glow'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, glow."
          },
          {
            "name": "bordered",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Toggle a continuous 1px border. Off by default. Andromeda cards rely on corner brackets, not perimeter strokes."
          },
          {
            "name": "markers",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Toggle the corner markers motif."
          },
          {
            "name": "markerProps",
            "type": "import('./CornerMarkers').CornerMarkersProps",
            "optional": true,
            "default": "",
            "description": "Pass-through overrides for the inner CornerMarkers."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "CardSection",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-checkbox": [
      {
        "table": "Checkbox",
        "props": [
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled checked state."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Uncontrolled initial state."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the next checked state when toggled."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional inline label."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables the checkbox and blocks interaction."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the visual box."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the outer wrapper."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id applied to the input and inline label, auto-generated if omitted."
          }
        ]
      }
    ],
    "andromeda-corner-markers": [
      {
        "table": "CornerMarkers",
        "props": [
          {
            "name": "size",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px square the bracket lives inside; defaults to tokens.marker.size"
          },
          {
            "name": "offset",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px inset from the corner; defaults to tokens.marker.offset"
          },
          {
            "name": "borderWidth",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px stroke thickness; defaults to tokens.marker.borderWidth"
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "any CSS color; defaults to themeColor.border.bright"
          },
          {
            "name": "radius",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px corner curve; defaults to the --andromeda-radius-frame token"
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          }
        ]
      }
    ],
    "andromeda-data-table": [
      {
        "table": "DataTable",
        "props": [
          {
            "name": "columns",
            "type": "Array<{key: string, header: string, width?: string|number, align?: 'left'|'center'|'right', hideBelow?: 'md', fold?: 'info'|'meta'|'none', infoValue?: (row: object) => React.ReactNode, primary?: boolean, color?: string|((row: object) => string), render?: (row: object) => React.ReactNode}>",
            "optional": true,
            "default": "DEFAULT_COLUMNS",
            "description": "Column definitions. `hideBelow:'md'` hides the column on phones; it then folds into the per-row info tooltip (`fold:'info'`, the default), the primary column's mobile sub-line (`fold:'meta'`), or nowhere (`fold:'none'`). `infoValue` supplies the textual value shown in a fold (use it for visual cells like meters); `render` is the desktop cell."
          },
          {
            "name": "rows",
            "type": "Array<object>",
            "optional": true,
            "default": "DEFAULT_ROWS",
            "description": "Row objects consumed by the column definitions."
          },
          {
            "name": "getRowKey",
            "type": "(row: object) => string|number",
            "optional": true,
            "default": "DEFAULT_GET_ROW_KEY",
            "description": "Returns a stable key for each row."
          },
          {
            "name": "onRowClick",
            "type": "(row: object) => void",
            "optional": true,
            "default": "",
            "description": "Runs when a row is clicked, or activated with Enter or Space. Rows are only focusable and show a hover state when it is passed."
          },
          {
            "name": "selectedRowKey",
            "type": "string|number",
            "optional": true,
            "default": "'track-02'",
            "description": "Identifies the current row shown with an active measurement edge."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "{}",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-date-range-picker": [
      {
        "table": "DateRangePicker",
        "props": [
          {
            "name": "value",
            "type": "{ start: Date, end: Date }",
            "optional": true,
            "default": "",
            "description": "Selected date range; controlled."
          },
          {
            "name": "onChange",
            "type": "(range: { start: Date, end: Date }) => void",
            "optional": true,
            "default": "",
            "description": "Called with the new range once both endpoints are chosen."
          },
          {
            "name": "presetLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Label for the active preset shown in the trigger (for example \"Last month\")."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Whether the calendar panel starts open (uncontrolled)."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Pins the panel open and disables the dismissers; for showcases and docs."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-drawer": [
      {
        "table": "Drawer",
        "props": [
          {
            "name": "open",
            "type": "boolean",
            "optional": false,
            "default": "",
            "description": "Whether the drawer is open."
          },
          {
            "name": "onOpenChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the next open state when the drawer requests to close (ESC or backdrop click)."
          },
          {
            "name": "side",
            "type": "'left'|'right'|'top'|'bottom'",
            "optional": true,
            "default": "'right'",
            "description": "Screen edge the panel slides in from."
          },
          {
            "name": "size",
            "type": "number|string",
            "optional": true,
            "default": "420",
            "description": "Width (left/right) or height (top/bottom). Number → px, string passed through."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Panel content, typically the Drawer compound parts (Header, Body, Footer)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the panel element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the panel element."
          }
        ]
      }
    ],
    "andromeda-empty-state": [
      {
        "table": "EmptyState",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-gauge": [
      {
        "table": "Gauge",
        "props": [
          {
            "name": "value",
            "type": "number",
            "optional": true,
            "default": "68",
            "description": "The reading. Clamped to 0..max. Defaults to a demo reading so the bare component renders meaningfully."
          },
          {
            "name": "max",
            "type": "number",
            "optional": true,
            "default": "100",
            "description": "Full scale — the arc shows value/max."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "variant",
            "type": "'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'accent'",
            "description": "Arc color by meaning: accent = live/healthy, warning = orange, fault = red."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "'%'",
            "description": "Suffix after the readout, muted + smaller. Pass '' for a unitless reading."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional code label below the value inside the circle (mono xs, muted, uppercase). Centered when showValue is false."
          },
          {
            "name": "showValue",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": ""
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Overrides the generated \"<label or Gauge> <value> of <max><unit>\" description."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-heat-grid": [
      {
        "table": "HeatGrid",
        "props": [
          {
            "name": "value",
            "type": "number",
            "optional": true,
            "default": "0",
            "description": "0–100 fill level (clamped)."
          },
          {
            "name": "cols",
            "type": "number",
            "optional": true,
            "default": "7",
            "description": "Number of columns in the cell matrix."
          },
          {
            "name": "rows",
            "type": "number",
            "optional": true,
            "default": "5",
            "description": "Number of rows in the cell matrix."
          },
          {
            "name": "cellSize",
            "type": "number",
            "optional": true,
            "default": "22",
            "description": "px per cell side."
          },
          {
            "name": "gap",
            "type": "number",
            "optional": true,
            "default": "3",
            "description": "px between cells."
          },
          {
            "name": "showValue",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Render the accent percentage readout beside the grid."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "'%'",
            "description": "Suffix appended to the value readout."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name for the meter."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class names for the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-icon-button": [
      {
        "table": "IconButton",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'outline'|'ghost'|'destructive'",
            "optional": true,
            "default": "'outline'",
            "description": "One of: default, outline, ghost, destructive."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component. Pass either `icon` OR `children` for custom glyphs."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Custom icon content (SVG, bars, etc.)"
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Required for accessibility (no visible text)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "HTML button type; defaults to 'button' so the control does not submit an enclosing form."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "When true, disables the control."
          },
          {
            "name": "onClick",
            "type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the element is clicked."
          }
        ]
      }
    ],
    "andromeda-input": [
      {
        "table": "Input",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Uppercase mono label rendered above the field."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<{ size?: number, weight?: 'thin' | 'light' | 'regular' | 'bold' | 'extrabold' }>",
            "optional": true,
            "default": "",
            "description": "Optional left icon."
          },
          {
            "name": "error",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "When set, switches the field into the error state and renders the message."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name forwarded to the <input> element."
          },
          {
            "name": "wrapperClassName",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name forwarded to the outer wrapper."
          }
        ]
      }
    ],
    "andromeda-media-card": [
      {
        "table": "MediaCard",
        "props": [
          {
            "name": "image",
            "type": "string",
            "optional": true,
            "default": "DEFAULT_IMAGE",
            "description": "Background image URL for the full-bleed media."
          },
          {
            "name": "code",
            "type": "string",
            "optional": true,
            "default": "'MIX-01'",
            "description": "Mono identifier shown in the top-left tag; a falsy value hides it."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Your Mix'",
            "description": "Primary title shown over the lower image edge."
          },
          {
            "name": "meta",
            "type": "string",
            "optional": true,
            "default": "'Updates daily'",
            "description": "Uppercase metadata shown beneath the title."
          },
          {
            "name": "action",
            "type": "'play' | 'cta' | 'none'",
            "optional": true,
            "default": "'play'",
            "description": "Selects the card's single action treatment."
          },
          {
            "name": "ctaLabel",
            "type": "string",
            "optional": true,
            "default": "'Open'",
            "description": "Accessible label for the CTA action's arrow icon button."
          },
          {
            "name": "playing",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Shows the active pause control when the play action is selected."
          },
          {
            "name": "onAction",
            "type": "() => void",
            "optional": true,
            "default": "NOOP",
            "description": "Called when the selected play or CTA control is pressed."
          },
          {
            "name": "height",
            "type": "number | string",
            "optional": true,
            "default": "200",
            "description": "CSS height of the card."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Additional class names applied to the Card root."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "EMPTY_STYLE",
            "description": "Inline styles merged onto the Card root."
          }
        ]
      }
    ],
    "andromeda-metric-chart": [
      {
        "table": "MetricChart",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'/// Telemetry'",
            "description": "Card kicker label."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Metric'",
            "description": "Card title."
          },
          {
            "name": "description",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional description line."
          },
          {
            "name": "data",
            "type": "object[]",
            "optional": true,
            "default": "",
            "description": "Points of { [xKey], [dataKey] }."
          },
          {
            "name": "dataKey",
            "type": "string",
            "optional": true,
            "default": "'v'",
            "description": ""
          },
          {
            "name": "xKey",
            "type": "string",
            "optional": true,
            "default": "'t'",
            "description": ""
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shown muted after the tooltip value."
          },
          {
            "name": "variant",
            "type": "'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'accent'",
            "description": "Badge only — chart ink stays neutral."
          },
          {
            "name": "badgeText",
            "type": "string|null",
            "optional": true,
            "default": "'Live'",
            "description": "null hides the badge."
          },
          {
            "name": "domain",
            "type": "Array",
            "optional": true,
            "default": "['dataMin - 1', 'dataMax + 1']",
            "description": "recharts y-domain (fitted)."
          },
          {
            "name": "xInterval",
            "type": "number",
            "optional": true,
            "default": "3",
            "description": ""
          },
          {
            "name": "height",
            "type": "number|'fill'",
            "optional": true,
            "default": "224",
            "description": "Plot height; 'fill' grows into a flex parent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-music-player": [
      {
        "table": "MusicPlayer",
        "props": [
          {
            "name": "track",
            "type": "{ title: string, subtitle: string, cover: string | null }",
            "optional": true,
            "default": "DEFAULT_TRACK",
            "description": "Track identity shown in the metadata region."
          },
          {
            "name": "playing",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Play state; the internal fallback's initial value when onTogglePlay is omitted."
          },
          {
            "name": "elapsed",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Controlled elapsed seconds; omit it (and onSeek) to run the internal demo timer from zero. Supplying either one makes elapsed controlled and stops the timer."
          },
          {
            "name": "duration",
            "type": "number",
            "optional": true,
            "default": "221",
            "description": "Track length in seconds."
          },
          {
            "name": "volume",
            "type": "number",
            "optional": true,
            "default": "72",
            "description": "Volume 0..100; local fallback when onVolumeChange is omitted."
          },
          {
            "name": "liked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Liked state; local fallback when onLike is omitted."
          },
          {
            "name": "onTogglePlay",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Primary play/pause handler; omission enables local play state."
          },
          {
            "name": "onSeek",
            "type": "(seconds: number) => void",
            "optional": true,
            "default": "",
            "description": "Scrub handler; omission enables local seeking when elapsed is also omitted."
          },
          {
            "name": "onNext",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Next-track handler; omission restarts the demo track."
          },
          {
            "name": "onPrev",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Previous-track handler; omission restarts the demo track."
          },
          {
            "name": "shuffle",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Shuffle state; local fallback when onShuffle is omitted."
          },
          {
            "name": "repeat",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Repeat state; local fallback when onRepeat is omitted."
          },
          {
            "name": "lyrics",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Lyrics-open state; local fallback when onLyrics is omitted."
          },
          {
            "name": "onShuffle",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Shuffle-toggle handler; omission enables local shuffle state."
          },
          {
            "name": "onRepeat",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Repeat-toggle handler; omission enables local repeat state."
          },
          {
            "name": "onLyrics",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Lyrics-toggle handler; omission enables local lyrics state."
          },
          {
            "name": "onLike",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Like-toggle handler; omission enables local liked state."
          },
          {
            "name": "onVolumeChange",
            "type": "(volume: number) => void",
            "optional": true,
            "default": "",
            "description": "Volume handler; omission enables local volume state."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-nav-item": [
      {
        "table": "NavItem",
        "props": [
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Optional icon component rendered at 20px before the label."
          },
          {
            "name": "label",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "Visible content of the nav row."
          },
          {
            "name": "active",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Marks the row as the current selection, applying accent text and the indicator dot."
          },
          {
            "name": "mono",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Renders the label in uppercase mono type; set false for sans."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "HTML button type; defaults to 'button' to avoid accidental form submits."
          },
          {
            "name": "layoutGroupId",
            "type": "string",
            "optional": true,
            "default": "'andromeda-navitem-indicator'",
            "description": "Override only when two distinct nav lists share a viewport and you don't want the active dot to animate between them. To get the slide between sibling NavItems, wrap the list in framer's <LayoutGroup>."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-panel-header": [
      {
        "table": "PanelHeader",
        "props": [
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "Sentence-case mono title."
          },
          {
            "name": "actions",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Right-aligned slot (PanelMenu, IconButton, Button, etc.)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-panel-menu": [
      {
        "table": "MenuItem",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text shown for the menu item."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon rendered to the left of the label."
          },
          {
            "name": "onSelect",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the item is chosen (ignored on items with a submenu)."
          },
          {
            "name": "submenu",
            "type": "MenuItem[]",
            "optional": true,
            "default": "",
            "description": "Nested items opened as a flyout submenu."
          },
          {
            "name": "selected",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Marks the item as the active choice, styling it accordingly."
          },
          {
            "name": "destructive",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Renders the item label in the destructive red color."
          },
          {
            "name": "type",
            "type": "'separator'",
            "optional": true,
            "default": "",
            "description": "Set to 'separator' to render a divider rule instead of a clickable item."
          }
        ]
      },
      {
        "table": "PanelMenu",
        "props": [
          {
            "name": "items",
            "type": "MenuItem[]",
            "optional": false,
            "default": "",
            "description": "Entries rendered in the menu, in order."
          },
          {
            "name": "align",
            "type": "'left'|'right'",
            "optional": true,
            "default": "'right'",
            "description": "Edge of the trigger the menu aligns to."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "'Panel options'",
            "description": "Accessible label for the kebab trigger button."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the menu pre-opened. Useful in showcases / docs so the consumer can see the menu contents without first having to click the trigger. Click-outside and Escape still dismiss it."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Like defaultOpen, but the menu stays open: the click-outside and Escape dismissers are not attached. For showcases / docs where the menu must remain visible as the reader scrolls past, so the component reads as a menu without any interaction. The trigger can still toggle it. Not for product UI; a real overflow menu must dismiss."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class applied to the wrapper element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper element."
          }
        ]
      }
    ],
    "andromeda-planet": [
      {
        "table": "Planet",
        "props": [
          {
            "name": "particleCount",
            "type": "number",
            "optional": true,
            "default": "6000",
            "description": "Number of surface particles; 6000 reads dense at 320 to 480px."
          },
          {
            "name": "particleSize",
            "type": "number",
            "optional": true,
            "default": "0.028",
            "description": "Per-particle point size in world units."
          },
          {
            "name": "rotationSpeed",
            "type": "number",
            "optional": true,
            "default": "0.0035",
            "description": "Auto-rotation speed in radians per frame (assumes about 60fps)."
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, the planet does not auto-rotate."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-accordion": [
      {
        "table": "Accordion",
        "props": [
          {
            "name": "type",
            "type": "'single'|'multiple'",
            "optional": true,
            "default": "'single'",
            "description": "Single keeps one item open at a time; multiple opens items independently."
          },
          {
            "name": "collapsible",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Single only: the open item closes when its trigger is pressed again, leaving none open. False keeps one open at all times."
          },
          {
            "name": "value",
            "type": "string|string[]",
            "optional": true,
            "default": "",
            "description": "Controlled open value: a string for single ('' for none), an array for multiple. Pair with onValueChange."
          },
          {
            "name": "defaultValue",
            "type": "string|string[]",
            "optional": true,
            "default": "",
            "description": "Initial open value when uncontrolled, same shape as value."
          },
          {
            "name": "onValueChange",
            "type": "(value: string | string[]) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next open value: a string for single, an array for multiple."
          },
          {
            "name": "as",
            "type": "'div'|'ol'|'ul'",
            "optional": true,
            "default": "'div'",
            "description": "The list element. With 'ol' or 'ul' each item renders as an li, so a numbered list keeps its list semantics."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "AccordionItems."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "AccordionItem",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Identifies the item in the group's open value."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "The item cannot be toggled: Collapsible's disabled state (dimmed, not-allowed cursor). It keeps whatever open state the group gives it."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "An AccordionTrigger followed by an AccordionContent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "AccordionTrigger",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The question, set at textLg in text.primary."
          },
          {
            "name": "leading",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A short index (\"01\") in the glyph slot before the question: label role, tabular, text.faint at rest, text.muted while open, hovered or focused. Without it the question starts at the row inset."
          },
          {
            "name": "onClick",
            "type": "(event: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Runs before the toggle; call preventDefault to keep the item as it is."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "AccordionContent",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The answer, set at textMd in text.secondary. Children stack in a column 12px apart."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Merged onto the answer's box."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Merged onto the answer's box."
          }
        ]
      }
    ],
    "andromeda-pro-alert": [
      {
        "table": "Alert",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-artifact": [
      {
        "table": "Artifact",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "ArtifactHeader, then ArtifactContent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the frame."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the frame."
          }
        ]
      },
      {
        "table": "ArtifactHeader",
        "props": [
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Leading glyph naming the kind of thing the artifact is, in text.muted at 16px (the 12px title's rung on the icon-label ladder)."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "ArtifactTitle and ArtifactDescription, stacked in the flexible column; an ArtifactActions child is lifted out to the trailing end."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the bar."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the bar."
          }
        ]
      },
      {
        "table": "ArtifactText",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the line."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the line."
          }
        ]
      },
      {
        "table": "ArtifactAction",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "REQUIRED. The action's name: the button's aria-label and the tooltip's text."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": false,
            "default": "",
            "description": "REQUIRED. The glyph, drawn at the sm rung (16px) by IconButton."
          },
          {
            "name": "tooltip",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Show the label in a Tooltip under the button on hover and focus. It portals out of the Artifact frame (which clips) and stays inline anywhere else, such as a DrawerHeader."
          },
          {
            "name": "hideBelow",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "",
            "description": "Hide the action below that breakpoint. Only for a secondary action that stays reachable elsewhere (the expanded view keeps it)."
          },
          {
            "name": "onClick",
            "type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "What the action does. An action with no handler is a dead control: leave it out instead."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "When true, disables the control."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the button."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the button."
          }
        ]
      },
      {
        "table": "ArtifactClose",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'Close'",
            "description": "The button's aria-label and tooltip text."
          }
        ]
      }
    ],
    "andromeda-pro-avatar": [
      {
        "table": "Avatar",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "'?'",
            "description": "Used to derive uppercase initials (shown when no src)."
          },
          {
            "name": "src",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional image URL. When provided, renders an img instead of initials."
          },
          {
            "name": "lightSrc",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional light-theme version of `src`, for a picture made for both themes. Both load and the Andromeda theme shows one: `src` in dark, `lightSrc` in light. Needs `src`; if it fails to load, `src` shows in both themes."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "status",
            "type": "'online'|'caution'|'fault'|'offline'",
            "optional": true,
            "default": "",
            "description": "When set, renders a status dot."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes merged onto the inner avatar box (the outer wrapper receives style and ...props)."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-badge": [
      {
        "table": "Badge",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'|'success'|'subtle'|'outline'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault, success, subtle, outline."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'sm'",
            "description": "Rung on the LABEL ladder: 20, 24 or 28px tall (not the 28/32/40 control ladder). Defaults to sm, the inline density; pass md or lg to sit beside a field or button of that size."
          },
          {
            "name": "icon",
            "type": "React.ComponentType",
            "optional": true,
            "default": "",
            "description": "Icon component; replaces the dot and takes its per-variant color. The icon sizes with the label type."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-bento-grid": [
      {
        "table": "BentoGrid",
        "props": [
          {
            "name": "columns",
            "type": "1|2|3|4",
            "optional": true,
            "default": "2",
            "description": "Columns on a desktop row."
          },
          {
            "name": "tabletColumns",
            "type": "1|2",
            "optional": true,
            "default": "",
            "description": "Columns between md and lg. Defaults to 2 for a three or four column grid, else to `columns`."
          },
          {
            "name": "gap",
            "type": "keyof tokens.spacing",
            "optional": true,
            "default": "3",
            "description": "The gutter between panels, a spacing step, on both axes. The system's panel gutter is spacing[3]."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "BentoGridItems."
          }
        ]
      },
      {
        "table": "BentoGridItem",
        "props": [
          {
            "name": "colSpan",
            "type": "number|'full'",
            "optional": true,
            "default": "1",
            "description": "Columns the panel runs across; 'full' takes the whole row at every width. Clamped to the columns the grid has at each width."
          },
          {
            "name": "rowSpan",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Rows the panel runs down, beside shorter neighbours. Dropped below md, where nothing stands beside it."
          },
          {
            "name": "rows",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shared rows: the panel spans this many grid rows and lays its children on them (subgrid), so siblings with the same count line up part by part. One child per row. Overrides `rowSpan`."
          },
          {
            "name": "rowGap",
            "type": "keyof tokens.spacing",
            "optional": true,
            "default": "6",
            "description": "The space between the shared rows, a spacing step; the card inset by default."
          },
          {
            "name": "asChild",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the only child (the caller's Card) as the item, merging the item's class, style and ref onto it."
          },
          {
            "name": "render",
            "type": "React.ReactElement",
            "optional": true,
            "default": "",
            "description": "The same as asChild, in the Base UI form some installers rewrite asChild into: the item renders this element with its class, style and ref merged on, and its children become the element's children."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The panel content, or with `asChild` the panel itself."
          }
        ]
      }
    ],
    "andromeda-pro-burst": [
      {
        "table": "Burst",
        "props": [
          {
            "name": "density",
            "type": "'sparse'|'standard'|'dense'",
            "optional": true,
            "default": "",
            "description": "how much of the lattice is wired back; defaults to 'standard'"
          },
          {
            "name": "variant",
            "type": "'irregular'|'symmetry'",
            "optional": true,
            "default": "",
            "description": "sanctioned face: low gathered focus or four-way frame-centred mirror; defaults to 'irregular'"
          },
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "layout seed — same seed, same field, every reload"
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "freeze to the composed still frame"
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "strand ink — any CSS colour (hex, rgb(), a var()); defaults to border.base via `var(--andromeda-border-base, …)`"
          },
          {
            "name": "dotColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "resting endpoint / mid-strand dots; defaults to border.strong via `var(--andromeda-border-strong, …)`"
          },
          {
            "name": "lightColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "travelling pulses and the flash of a dot they hit; defaults to text.primary via `var(--andromeda-text-primary, …)`"
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-button": [
      {
        "table": "Button",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'outline'|'ghost'|'destructive'|'link'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, outline, ghost, destructive, link."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "pressed",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Makes it a toggle button that stays on or off, and sets aria-pressed. On outline and ghost, true paints the held look (surface.active fill, primary ink, border.bright edge on hover); default and destructive keep their fill. Leave unset for a plain action."
          },
          {
            "name": "asChild",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, renders the only child element with the button's props/styles."
          },
          {
            "name": "render",
            "type": "React.ReactElement",
            "optional": true,
            "default": "",
            "description": "The same as asChild, in the Base UI form some installers rewrite asChild into: the button renders this element with its props and styles, and its children become the element's children."
          },
          {
            "name": "nativeButton",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Accepted with `render` and ignored; the element passed decides what renders."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component rendered before children."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "Native button type; defaults to 'button', so it does not submit an enclosing form unless set to 'submit'."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "When true, disables the control."
          },
          {
            "name": "onClick",
            "type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the element is clicked."
          }
        ]
      }
    ],
    "andromeda-pro-card": [
      {
        "table": "Card",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'glow'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, glow."
          },
          {
            "name": "bordered",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Toggle a continuous 1px border. Off by default. Andromeda cards rely on corner brackets, not perimeter strokes."
          },
          {
            "name": "markers",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Toggle the corner markers motif."
          },
          {
            "name": "markerProps",
            "type": "import('./CornerMarkers').CornerMarkersProps",
            "optional": true,
            "default": "",
            "description": "Pass-through overrides for the inner CornerMarkers."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "CardSection",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-checkbox": [
      {
        "table": "Checkbox",
        "props": [
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled checked state."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Uncontrolled initial state."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the next checked state when toggled."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional inline label."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Helper line under the label; the box aligns to the first line and the input is described by it."
          },
          {
            "name": "size",
            "type": "'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Two rungs, 16 and 20px boxes, scaling the box, its tick and the label together. There is no `sm`: below 16px the box stops reading as a checkbox and the label falls under the legibility floor."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables the checkbox and blocks interaction."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the visual box."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the outer wrapper."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id applied to the input and inline label, auto-generated if omitted."
          }
        ]
      }
    ],
    "andromeda-pro-choice-card": [
      {
        "table": "ChoiceCard",
        "props": [
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "Primary option name; display content only, with no nested interactive element."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Optional supporting line; display content only, with no nested interactive element."
          },
          {
            "name": "control",
            "type": "'radio'|'checkbox'|'toggle'",
            "optional": true,
            "default": "'radio'",
            "description": "Native control used as the state indicator."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Native input value; required for radio cards inside ChoiceCardGroup."
          },
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled checked state."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial checked state in uncontrolled mode."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next checked state."
          },
          {
            "name": "size",
            "type": "'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Size passed to the nested control."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables the native control and dims the whole card."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Native input id; auto-generated when omitted."
          },
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Native input name; a ChoiceCardGroup supplies this to radio cards."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the Card root."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the Card root."
          }
        ]
      },
      {
        "table": "ChoiceCardGroup",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shared native name for the group's radio cards; auto-generated when omitted."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Selected value in controlled mode."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Initially selected value in uncontrolled mode."
          },
          {
            "name": "onValueChange",
            "type": "(next: string) => void",
            "optional": true,
            "default": "",
            "description": "Called with the newly selected value."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables every radio card in the group."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "ChoiceCard elements using control=\"radio\" and unique values."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the radiogroup wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the radiogroup wrapper."
          },
          {
            "name": "aria-orientation",
            "type": "'vertical'|'horizontal'",
            "optional": true,
            "default": "'vertical'",
            "description": "Direction exposed to assistive technology; native radio arrow keys handle both axes."
          }
        ]
      }
    ],
    "andromeda-pro-collapsible": [
      {
        "table": "Collapsible",
        "props": [
          {
            "name": "open",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled open state. Pair with onOpenChange."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial open state when uncontrolled."
          },
          {
            "name": "onOpenChange",
            "type": "(open: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next open state when the trigger is pressed."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "The row cannot be toggled: dimmed to the disabled opacity, not-allowed cursor, no hover, no aria-expanded. The section keeps whatever state `open` gives it."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A CollapsibleTrigger followed by a CollapsibleContent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "CollapsibleTrigger",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The row's label, set medium weight."
          },
          {
            "name": "indicator",
            "type": "React.ReactNode|false",
            "optional": true,
            "default": "",
            "description": "Replaces the caret, e.g. a Spinner while the section has nothing in it yet. Drawn in a glyph-sized slot, aria-hidden. `false` removes the slot: the label starts at the row's edge and the section's inset follows it."
          },
          {
            "name": "meta",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Trailing text pushed to the right edge in text.secondary: a duration, a count, a state word."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'sm'",
            "description": "Row rung: 12 / 14px label, 16 / 18px caret, 8px gap."
          },
          {
            "name": "onClick",
            "type": "(event: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Runs before the toggle; call preventDefault to keep the row as it is."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "CollapsibleContent",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The section. Children stack in a column 12px apart."
          },
          {
            "name": "guide",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Hang the section off a hairline rule under the caret (the step-trace look). Off, the section starts where the label starts."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Merged onto the section's box (the element that carries the padding and gap)."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Merged onto the section's box."
          }
        ]
      }
    ],
    "andromeda-pro-combobox": [
      {
        "table": "ComboboxOption",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable key; also what the caller matches on in `onSelect`."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The row's title, and what the default filter searches."
          },
          {
            "name": "icon",
            "type": "React.ComponentType",
            "optional": true,
            "default": "",
            "description": "Icon shown as the row's plain leading glyph, sized by the row's rung."
          },
          {
            "name": "meta",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Trailing metadata, read not clicked (a value, a date): 10px on text.muted."
          },
          {
            "name": "keywords",
            "type": "string[]",
            "optional": true,
            "default": "",
            "description": "Extra words the default filter matches besides the label."
          }
        ]
      },
      {
        "table": "Combobox",
        "props": [
          {
            "name": "options",
            "type": "ComboboxOption[]",
            "optional": false,
            "default": "",
            "description": "Everything the field can find. The list shows the ones `filter` keeps for the typed query."
          },
          {
            "name": "onSelect",
            "type": "(option: ComboboxOption) => void",
            "optional": false,
            "default": "",
            "description": "Called with the picked option, by Enter on the cursor row or a click."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controlled query (the typed text). Pair with `onValueChange`."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Initial query of an uncontrolled field."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Show the results list at mount, without taking focus, when the field starts with a query. From then on it closes and opens as usual. For a page that documents the list."
          },
          {
            "name": "onValueChange",
            "type": "(query: string) => void",
            "optional": true,
            "default": "",
            "description": "Called on every keystroke, and with '' when a pick clears the field."
          },
          {
            "name": "filter",
            "type": "(option: ComboboxOption, query: string) => boolean",
            "optional": true,
            "default": "",
            "description": "Which options match the trimmed query. Defaults to a case-insensitive \"includes\" over the label and the keywords."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'md'",
            "description": "Rung of the field (28 or 32px tall), and of the result rows unless `listSize` says otherwise."
          },
          {
            "name": "listSize",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "",
            "description": "Rung of the result rows: 12px title and 16px glyph, or 14px and 18px. Defaults to `size`. A compact field in a top bar keeps md rows, so the results stay readable under a small field."
          },
          {
            "name": "placeholder",
            "type": "string",
            "optional": true,
            "default": "'Search anything'",
            "description": "Text shown in the empty field."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name of the input. Defaults to the placeholder."
          },
          {
            "name": "shortcut",
            "type": "string|null",
            "optional": true,
            "default": "'⌘ K'",
            "description": "The field's keycap. Pass null to hide it. The caller binds the key itself, to the forwarded ref."
          },
          {
            "name": "emptyText",
            "type": "(query: string) => React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The line shown when nothing matches, given the trimmed query. Defaults to Nothing matches “query”."
          },
          {
            "name": "clearOnSelect",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Empty the field after a pick. Set false to leave the query in place."
          },
          {
            "name": "width",
            "type": "string|number",
            "optional": true,
            "default": "'100%'",
            "description": "Width of the field, any CSS length. The list matches it."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class on the outer wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the outer wrapper."
          }
        ]
      }
    ],
    "andromeda-pro-corner-markers": [
      {
        "table": "CornerMarkers",
        "props": [
          {
            "name": "size",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px square the bracket lives inside; defaults to tokens.marker.size"
          },
          {
            "name": "offset",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px inset from the corner; defaults to tokens.marker.offset"
          },
          {
            "name": "borderWidth",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px stroke thickness; defaults to tokens.marker.borderWidth"
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "any CSS color; defaults to tokens.color.border.bright"
          },
          {
            "name": "radius",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "px corner curve; defaults to the --andromeda-radius-frame token"
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-cube": [
      {
        "table": "Cube",
        "props": [
          {
            "name": "density",
            "type": "'default'|'dense'",
            "optional": true,
            "default": "",
            "description": "dots per edge (15 or 18); defaults to 'default'"
          },
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "move script and entrance — same seed, same sequence, every render"
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "hold the cube still on its composed frame"
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "lattice dot ink; defaults to text.muted. Any CSS colour syntax. Depth is alphas of THIS value, so one prop recolours the whole lattice."
          },
          {
            "name": "lightColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "the lit dots' ink; defaults to text.primary."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-data-table": [
      {
        "table": "DataTable",
        "props": [
          {
            "name": "columns",
            "type": "Array<{key: string, header: React.ReactNode, width?: string|number, align?: 'left'|'center'|'right', hideBelow?: 'md', fold?: 'info'|'meta'|'none', infoValue?: (row: object) => React.ReactNode, primary?: boolean, color?: string|((row: object) => string), render?: (row: object) => React.ReactNode, sortable?: boolean, sortValue?: (row: object) => string|number}>",
            "optional": true,
            "default": "DEFAULT_COLUMNS",
            "description": "Column definitions. `sortable` makes the header a sort control; `sortValue` supplies what to compare when the cell is visual or the raw field would sort wrong. `hideBelow:'md'` hides the column on phones; it then folds into the per-row details row (`fold:'info'`, the default), the primary column's mobile sub-line (`fold:'meta'`), or nowhere (`fold:'none'`). `infoValue` supplies the textual value shown in a fold (use it for visual cells like meters); `render` is the desktop cell."
          },
          {
            "name": "rows",
            "type": "Array<object>",
            "optional": true,
            "default": "DEFAULT_ROWS",
            "description": "Row objects consumed by the column definitions."
          },
          {
            "name": "getRowKey",
            "type": "(row: object) => string|number",
            "optional": true,
            "default": "DEFAULT_GET_ROW_KEY",
            "description": "Returns a stable key for each row."
          },
          {
            "name": "onRowClick",
            "type": "(row: object) => void",
            "optional": true,
            "default": "DEFAULT_ON_ROW_CLICK",
            "description": "Runs when a non-interactive area of a row is clicked."
          },
          {
            "name": "selectedRowKey",
            "type": "string|number|null",
            "optional": true,
            "default": "null",
            "description": "Key of the current row, shown with an active measurement edge. Null or omitted marks no row."
          },
          {
            "name": "selectable",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Adds a leading checkbox column with a select-all in the header. Selection is controlled: pass `selectedKeys` and handle `onSelectionChange`."
          },
          {
            "name": "selectedKeys",
            "type": "Array<string|number>",
            "optional": true,
            "default": "[]",
            "description": "Keys of the currently selected rows. Only read when `selectable`."
          },
          {
            "name": "onSelectionChange",
            "type": "(keys: Array<string|number>) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next full selection whenever a row checkbox or the select-all is toggled."
          },
          {
            "name": "defaultSort",
            "type": "{key: string, dir: 'asc'|'desc'}",
            "optional": true,
            "default": "",
            "description": "Column the table opens sorted by. Omit and every sortable header shows its neutral marker until the reader picks one — a table that arrives pre-sorted with no one having asked reads as a bug."
          },
          {
            "name": "onSortChange",
            "type": "(sort: {key: string, dir: 'asc'|'desc'}) => void",
            "optional": true,
            "default": "",
            "description": "Called after each header click. The table sorts itself either way; this is for callers that mirror the state elsewhere."
          },
          {
            "name": "layout",
            "type": "'fixed'|'auto'",
            "optional": true,
            "default": "'fixed'",
            "description": "Column sizing. `fixed` splits the width evenly (or by each column's `width`); `auto` lets the content set it, which a wide operational table needs."
          },
          {
            "name": "dividers",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Draws the inset hairline under every row but the last. Set false for a table that separates its rows by rhythm alone; the header keeps its rule either way, since that one divides two different things rather than two rows of the same thing."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "{}",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-date-range-picker": [
      {
        "table": "DateRangePicker",
        "props": [
          {
            "name": "value",
            "type": "{ start: Date, end: Date }",
            "optional": true,
            "default": "",
            "description": "Selected date range; controlled."
          },
          {
            "name": "onChange",
            "type": "(range: { start: Date, end: Date }, presetLabel?: string) => void",
            "optional": true,
            "default": "",
            "description": "Called with the new range and, for preset picks, the label that produced it."
          },
          {
            "name": "presetLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Label for the active preset shown in the trigger (for example \"Last month\")."
          },
          {
            "name": "presets",
            "type": "{ label: string, range: { start: Date, end: Date } }[]",
            "optional": true,
            "default": "",
            "description": "Deterministic preset ranges shown below the day grid."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Whether the calendar panel starts open (uncontrolled)."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Pins the panel open and disables the dismissers; for a page that documents the calendar."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-drawer": [
      {
        "table": "Drawer",
        "props": [
          {
            "name": "open",
            "type": "boolean",
            "optional": false,
            "default": "",
            "description": "Whether the drawer is open."
          },
          {
            "name": "onOpenChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the next open state when the drawer requests to close (ESC or backdrop click)."
          },
          {
            "name": "side",
            "type": "'left'|'right'",
            "optional": true,
            "default": "'right'",
            "description": "Screen edge the panel slides in from."
          },
          {
            "name": "size",
            "type": "number|string",
            "optional": true,
            "default": "420",
            "description": "Panel width. Number → px, string passed through."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Panel content, typically the Drawer compound parts (Header, Body, Footer)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the panel element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the panel element."
          }
        ]
      }
    ],
    "andromeda-pro-empty-state": [
      {
        "table": "EmptyState",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'outline'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, outline."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-footer": [
      {
        "table": "FooterWordmark",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The name to set. Shown in capitals, measured in its own face so it runs the column's full width."
          },
          {
            "name": "mark",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "SVG shapes for a symbol beside the name (paths without their own fill, so they take the figure's ink), drawn on `markViewBox` and scaled to the cap height."
          },
          {
            "name": "markViewBox",
            "type": "string",
            "optional": true,
            "default": "'0 0 24 24'",
            "description": "The drawing box the `mark` shapes are drawn on."
          }
        ]
      },
      {
        "table": "Footer",
        "props": [
          {
            "name": "brand",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The brand lockup at the head of the left column (a mark and the product name)."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "One line under the brand saying what the product is."
          },
          {
            "name": "columns",
            "type": "{ title: string, links: { label: string, href?: string, onClick?: Function }[] }[]",
            "optional": true,
            "default": "",
            "description": "The link columns on the right. A link with no href is a placeholder: it renders, takes focus and fires onClick, but never moves the page."
          },
          {
            "name": "wordmark",
            "type": "string | false",
            "optional": true,
            "default": "false",
            "description": "The closing wordmark: a name set huge and faint across the column, running off the bottom edge. Off by default; pass the brand name to sign off with it."
          },
          {
            "name": "wordmarkMark",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "SVG shapes for a symbol beside the wordmark, drawn on `wordmarkMarkViewBox` and scaled to the cap height. None by default."
          },
          {
            "name": "wordmarkMarkViewBox",
            "type": "string",
            "optional": true,
            "default": "'0 0 24 24'",
            "description": "The drawing box the `wordmarkMark` shapes are drawn on."
          },
          {
            "name": "legal",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A bottom line under the columns (copyright, a legal link or two), over a hairline."
          },
          {
            "name": "maxWidth",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The content column's max width (a CSS length), to line the footer up with the page. Full width by default."
          }
        ]
      }
    ],
    "andromeda-pro-funnel-chart": [
      {
        "table": "FunnelStage",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable key for the stage."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stage name, shown under the band."
          },
          {
            "name": "value",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Absolute count at this stage. Must be <= the previous stage's value; a funnel where a stage grows is not a funnel."
          },
          {
            "name": "tone",
            "type": "'neutral'|'accent'|'warning'|'fault'|'context'",
            "optional": true,
            "default": "'neutral'",
            "description": "How healthy this stage's reading is. Derive it from the data, never assign it to make the chart colourful."
          }
        ]
      },
      {
        "table": "FunnelChart",
        "props": [
          {
            "name": "stages",
            "type": "FunnelStage[]",
            "optional": false,
            "default": "",
            "description": "Ordered stages, widest first. Two or more."
          },
          {
            "name": "percentOf",
            "type": "'first'|'previous'",
            "optional": true,
            "default": "'first'",
            "description": "What each stage's percentage is measured against: the top of the funnel (overall conversion) or the stage before it (step conversion)."
          },
          {
            "name": "valueFormatter",
            "type": "(value:number)=>string",
            "optional": true,
            "default": "",
            "description": "Formats the count shown above each band. Defaults to a thousands-separated integer."
          },
          {
            "name": "height",
            "type": "number",
            "optional": true,
            "default": "200",
            "description": "Height of the band area in px. Labels and values sit outside it."
          },
          {
            "name": "emptyLabel",
            "type": "string",
            "optional": true,
            "default": "'No data'",
            "description": "Shown in place of the chart when `stages` is empty."
          },
          {
            "name": "onStageSelect",
            "type": "(stage:FunnelStage, index:number)=>void",
            "optional": true,
            "default": "",
            "description": "Called when a stage is clicked or activated by keyboard."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-gauge": [
      {
        "table": "Gauge",
        "props": [
          {
            "name": "value",
            "type": "number",
            "optional": true,
            "default": "0",
            "description": "The reading. Clamped to 0..max. Defaults to 0, an empty ring, so the gauge never shows a reading nobody passed."
          },
          {
            "name": "max",
            "type": "number",
            "optional": true,
            "default": "100",
            "description": "Full scale — the arc shows value/max."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "thresholds",
            "type": "{warning: number, fault: number}",
            "optional": true,
            "default": "",
            "description": "Where this reading stops being healthy, in the same units as `value`. Supply it and the arc colours itself — the preferred form, since a gauge that is TOLD its colour can contradict the number printed inside it. The order carries the direction: `{warning: 70, fault: 90}` is high-is-bad, `{warning: 30, fault: 15}` is low-is-bad. Boundaries are inclusive."
          },
          {
            "name": "variant",
            "type": "'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'accent'",
            "description": "Arc color by meaning: accent = live/healthy, warning = caution, fault = danger. The manual fallback, for a gauge with no meaningful threshold; `thresholds` wins."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "'%'",
            "description": "Suffix after the readout, muted + smaller. Pass '' for a unitless reading."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional code label below the value inside the circle (sans xs, muted, uppercase). Centered when showValue is false."
          },
          {
            "name": "showValue",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": ""
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Overrides the generated \"<label or Gauge> <value> of <max><unit>\" description."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-heat-grid": [
      {
        "table": "HeatGrid",
        "props": [
          {
            "name": "value",
            "type": "number",
            "optional": true,
            "default": "0",
            "description": "0–100 fill level (clamped)."
          },
          {
            "name": "cols",
            "type": "number",
            "optional": true,
            "default": "7",
            "description": "Number of columns in the cell matrix."
          },
          {
            "name": "rows",
            "type": "number",
            "optional": true,
            "default": "5",
            "description": "Number of rows in the cell matrix."
          },
          {
            "name": "cellSize",
            "type": "number",
            "optional": true,
            "default": "22",
            "description": "px per cell side."
          },
          {
            "name": "gap",
            "type": "number",
            "optional": true,
            "default": "3",
            "description": "px between cells."
          },
          {
            "name": "showValue",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Render the brand percentage readout beside the grid."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "'%'",
            "description": "Suffix appended to the value readout."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name for the meter."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class names for the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-pro-icon-button": [
      {
        "table": "IconButton",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'outline'|'ghost'|'destructive'",
            "optional": true,
            "default": "'outline'",
            "description": "One of: default, outline, ghost, destructive."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "pressed",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Makes it a toggle button that stays on or off, and sets aria-pressed. On outline and ghost, true paints the held look (surface.active fill, primary ink, border.bright edge on hover); default and destructive keep their fill. Leave unset for a plain action."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component. Pass either `icon` OR `children` for custom glyphs."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Custom icon content (SVG, bars, etc.)"
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "REQUIRED for accessibility (no visible text)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "HTML button type; defaults to 'button' so the control does not submit an enclosing form."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "When true, disables the control."
          },
          {
            "name": "onClick",
            "type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the element is clicked."
          }
        ]
      }
    ],
    "andromeda-pro-input": [
      {
        "table": "Input",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Label rendered above the field and linked to it."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Rung on the shared control ladder: 28, 32 or 40px tall. Matches Button and IconButton at the same value, so a field and a button in one row align without further styling."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<{ size?: number, weight?: 'thin' | 'light' | 'regular' | 'bold' | 'extrabold' }>",
            "optional": true,
            "default": "",
            "description": "Optional left icon. Its glyph scales with `size` (16, 18, 20px)."
          },
          {
            "name": "trailingIcon",
            "type": "React.ComponentType<{ size?: number, weight?: 'thin' | 'light' | 'regular' | 'bold' | 'extrabold' }>",
            "optional": true,
            "default": "",
            "description": "Optional right icon. Its glyph follows the same scale as `icon`."
          },
          {
            "name": "trailingIconLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name for the trailing control. Required when `onTrailingIconClick` is set."
          },
          {
            "name": "onTrailingIconClick",
            "type": "(event: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Turns `trailingIcon` into a focusable button rendered after the input in the tab order."
          },
          {
            "name": "error",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "When set, switches the field into the error state and renders the message."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name forwarded to the <input> element."
          },
          {
            "name": "wrapperClassName",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name forwarded to the outer wrapper."
          },
          {
            "name": "required",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Sets the native attribute and draws a brand mark after the label."
          },
          {
            "name": "hint",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "A quiet line under the field explaining what it wants, before anything has gone wrong. An `error` replaces it: two messages under one field make a reader decide which one is live."
          },
          {
            "name": "action",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A control on the label row, right aligned. It is for a shortcut that belongs to this field and nowhere else, such as \"Forgot password\". Keep it to one small link-weight button; the label has to stay the loudest thing on that line."
          }
        ]
      }
    ],
    "andromeda-pro-item": [
      {
        "table": "Item",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'outline'",
            "optional": true,
            "default": "'default'",
            "description": "`default` is the frameless row of a menu or list (spacing[2] padding, transparent); `outline` is a row on its own (hairline border.subtle, surface.raised ground, spacing[3] padding)."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'md'",
            "description": "Rung: sm 12px title, 16px glyph, 28px minimum height; md 14px title, 18px glyph, 32px minimum height. The description is 12px at both."
          },
          {
            "name": "asChild",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Renders via Radix Slot, merging the row onto its single child (a button, link, menuitemradio, option). A child that is interactive takes the row states: hover surface.hover, pressed and aria-checked surface.active, aria-selected or data-active surface.hover, the inset focus ring."
          },
          {
            "name": "render",
            "type": "React.ReactElement",
            "optional": true,
            "default": "",
            "description": "The same as asChild, in the Base UI form some installers rewrite asChild into: the row renders this element with its props merged onto it, and the row's children, when given, become the element's children."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "ItemMedia, ItemContent and ItemActions, in that order."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the row."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the row. Leave background to the row: its states depend on it."
          }
        ]
      },
      {
        "table": "ItemMedia",
        "props": [
          {
            "name": "variant",
            "type": "'plain'|'icon'",
            "optional": true,
            "default": "'plain'",
            "description": "`plain` is the bare glyph in text.muted at the rung's icon size (16 sm / 18 md); `icon` is a 32px box (spacing[8]) with a hairline border.subtle frame and an 18px glyph."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "An icon element (sized here, any `size` prop is overridden) or an Avatar."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the media slot."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the media slot."
          }
        ]
      },
      {
        "table": "ItemPart",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the part."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the part."
          }
        ]
      }
    ],
    "andromeda-pro-logo-cloud": [
      {
        "table": "LogoCloudLogo",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The customer's name: set as type, or the accessible name of `logo`."
          },
          {
            "name": "symbol",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "SVG content on a 20 x 20 grid in `currentColor`, drawn at 1em before the name. Defaults to the slot's built-in symbol (six, repeating)."
          },
          {
            "name": "logo",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A real logo (an svg or img) shown in place of the symbol and the type treatment. Paint it in `currentColor` to keep the muted rest and the hover lift."
          }
        ]
      },
      {
        "table": "LogoCloud",
        "props": [
          {
            "name": "logos",
            "type": "LogoCloudLogo[]",
            "optional": false,
            "default": "",
            "description": "The marks, in order. Each takes its slot's symbol and treatment unless it brings its own."
          },
          {
            "name": "label",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The centred line above the band; it also names the list."
          },
          {
            "name": "duration",
            "type": "number",
            "optional": true,
            "default": "52",
            "description": "Seconds for one full pass of the band."
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Names the list when there is no `label`."
          }
        ]
      }
    ],
    "andromeda-pro-marquee": [
      {
        "table": "Marquee",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The items. Each child becomes one list item, and the whole set renders once per run."
          },
          {
            "name": "duration",
            "type": "number",
            "optional": true,
            "default": "52",
            "description": "Seconds for one full pass. The default is the system's one sanctioned non-token duration."
          },
          {
            "name": "pauseOnHover",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Hovering glides the track to a stop and leaving glides it back up to speed."
          },
          {
            "name": "reverse",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Runs left to right instead of right to left."
          },
          {
            "name": "fade",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Both ends dissolve into the page through a mask."
          },
          {
            "name": "gap",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "A spacing step (`tokens.spacing` key) padded on each side of every item, so two items sit twice this apart. Unset, it is 48px on desktop and 32px from the md breakpoint down."
          },
          {
            "name": "separator",
            "type": "boolean|React.ReactNode",
            "optional": true,
            "default": "false",
            "description": "`true` draws the short slanted hairline between items; a node draws that node instead, centred on the boundary."
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Names the list of items for assistive tech (or use aria-labelledby)."
          }
        ]
      }
    ],
    "andromeda-pro-media-card": [
      {
        "table": "MediaCard",
        "props": [
          {
            "name": "image",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Media image URL. Full-bleed background in `overlay` layout; a discrete block at the top of the card in `stacked` layout. Omitted, the card shows its plain surface where the photo would be."
          },
          {
            "name": "lightImage",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional light-theme version of `image`, for a picture made for both themes. Both are layered and the Andromeda theme shows one: `image` in dark, `lightImage` in light. Needs `image`. If `lightImage` fails to load, `image` shows in light too."
          },
          {
            "name": "layout",
            "type": "'overlay' | 'stacked' | 'stacked-pinned'",
            "optional": true,
            "default": "'overlay'",
            "description": "`overlay` (default): image fills the card, text sits over a lower scrim. `stacked`: image is its own block at the top, text sits below it on the plain card surface — for a caption that needs full-contrast text rather than text-over-photo. `stacked-pinned`: the same, with `code` pinned to the image's top-left corner instead of the title line."
          },
          {
            "name": "code",
            "type": "string",
            "optional": true,
            "default": "'MIX-01'",
            "description": "Short identifier; a small pinned tag on the image corner in `overlay`, alongside the title in `stacked`. A falsy value hides it."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Your Mix'",
            "description": "Primary title shown over the lower image edge in `overlay`, or below the image in `stacked`."
          },
          {
            "name": "meta",
            "type": "string",
            "optional": true,
            "default": "'Updates daily'",
            "description": "Line beneath the title: an uppercase sans metadata label in `overlay`, a sentence-case description in `stacked`."
          },
          {
            "name": "action",
            "type": "'play' | 'cta' | 'none'",
            "optional": true,
            "default": "'play'",
            "description": "Selects the card's single action treatment."
          },
          {
            "name": "ctaLabel",
            "type": "string",
            "optional": true,
            "default": "'Open'",
            "description": "CTA action wording: the visible label on `stacked`'s primary button, the accessible label on `overlay`'s arrow icon button."
          },
          {
            "name": "playing",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Shows the active pause control when the play action is selected."
          },
          {
            "name": "onAction",
            "type": "() => void",
            "optional": true,
            "default": "NOOP",
            "description": "Called when the play or CTA control is pressed, or the card is clicked anywhere else."
          },
          {
            "name": "height",
            "type": "number | string",
            "optional": true,
            "default": "200",
            "description": "CSS height of the card in `overlay` layout, or of the image block alone in `stacked` layout (the content block below adds its own height on top of it)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Additional class names applied to the Card root."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "EMPTY_STYLE",
            "description": "Inline styles merged onto the Card root."
          }
        ]
      }
    ],
    "andromeda-pro-message": [
      {
        "table": "Message",
        "props": [
          {
            "name": "from",
            "type": "'user'|'assistant'",
            "optional": false,
            "default": "",
            "description": "Who spoke. user: bubble on the right sized to its words, mark on the right. assistant: full-width panel on the left, mark on the left."
          },
          {
            "name": "busy",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "The answer is still arriving: sets aria-busy on the turn, and MessageActions renders nothing until it settles."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A MessageAvatar, a MessageContent and an optional MessageActions, in any order."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "MessageAvatar",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "user: an Avatar at size=\"md\". assistant: an 18px glyph (tokens.iconSize.md), e.g. the product mark."
          },
          {
            "name": "framed",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Draw the 32px box around the child: a border.base hairline, text.secondary ink, the glyph centred. Defaults to true for the assistant and false for the user, whose Avatar brings its own frame."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "MessageContent",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "user: the words sent. assistant: the answer, any mix of prose, tables, artifacts, tool steps and suggestions, stacked spacing[3] apart."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "MessageActions",
        "props": [
          {
            "name": "meta",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Leading text, in text.muted: the time, or \"time · duration\", or \"time · Stopped\"."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The actions: IconButtons at size=\"sm\", variant=\"ghost\". Pushed to the far end on an assistant turn, beside the meta on a user turn."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-metric-chart": [
      {
        "table": "MetricChart",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'/// Telemetry'",
            "description": "Card kicker label."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Metric'",
            "description": "Card title."
          },
          {
            "name": "description",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional description line."
          },
          {
            "name": "data",
            "type": "object[]",
            "optional": true,
            "default": "",
            "description": "Points of { [xKey], [dataKey] }."
          },
          {
            "name": "dataKey",
            "type": "string",
            "optional": true,
            "default": "'v'",
            "description": ""
          },
          {
            "name": "xKey",
            "type": "string",
            "optional": true,
            "default": "'t'",
            "description": ""
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shown muted after the tooltip value."
          },
          {
            "name": "formatX",
            "type": "(x:any)=>string",
            "optional": true,
            "default": "",
            "description": "Labels the x value on the axis ticks AND as the tooltip heading, e.g. a date. Without it both show the raw `xKey` value, so pass it whenever that value is an index or a bare number."
          },
          {
            "name": "thresholds",
            "type": "{warning: number, fault: number}",
            "optional": true,
            "default": "",
            "description": "Where this metric stops being healthy, in `dataKey` units. Supply it and the panel colours itself from the LATEST reading — the preferred form, since a chart that is TOLD its colour can contradict the series it draws. The order carries the direction: `{warning: 70, fault: 90}` is high-is-bad, `{warning: 30, fault: 15}` is low-is-bad. Boundaries are inclusive."
          },
          {
            "name": "variant",
            "type": "'neutral'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'accent'",
            "description": "Sets the badge tone, and decides whether the series reads as declared (the live stop) or as stated-by-nothing (`neutral`, the grey single-series ink every other chart uses). The manual fallback, for a metric with no meaningful threshold; `thresholds` wins."
          },
          {
            "name": "badgeText",
            "type": "string|null",
            "optional": true,
            "default": "'Live'",
            "description": "null hides the badge."
          },
          {
            "name": "domain",
            "type": "[number|string, number|string]",
            "optional": true,
            "default": "['dataMin - 1', 'dataMax + 1']",
            "description": "recharts y-domain (fitted)."
          },
          {
            "name": "xInterval",
            "type": "number|'preserveStart'|'preserveEnd'|'preserveStartEnd'",
            "optional": true,
            "default": "'preserveStartEnd'",
            "description": "Tick thinning. 'preserveStartEnd' (default) picks an index-even spread of ~7 labels that always includes the first and last reading. A number shows every nth label (recharts native); 'preserveStart'/'preserveEnd' also fall through to recharts native."
          },
          {
            "name": "height",
            "type": "number|'fill'",
            "optional": true,
            "default": "224",
            "description": "Plot height; 'fill' grows into a flex parent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-music-player": [
      {
        "table": "MusicPlayer",
        "props": [
          {
            "name": "track",
            "type": "{ title: string, subtitle: string, cover: string | null }",
            "optional": true,
            "default": "DEFAULT_TRACK",
            "description": "Track identity shown in the metadata region."
          },
          {
            "name": "playing",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Play state; the internal fallback's initial value when onTogglePlay is omitted."
          },
          {
            "name": "elapsed",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Controlled elapsed seconds; supplying it stops the internal demo timer. Omitted, the timer runs from zero (onSeek alone does not make it controlled)."
          },
          {
            "name": "duration",
            "type": "number",
            "optional": true,
            "default": "221",
            "description": "Track length in seconds."
          },
          {
            "name": "volume",
            "type": "number",
            "optional": true,
            "default": "72",
            "description": "Volume 0..100; local fallback when onVolumeChange is omitted."
          },
          {
            "name": "liked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Liked state; local fallback when onLike is omitted."
          },
          {
            "name": "onTogglePlay",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Primary play/pause handler; omission enables local play state."
          },
          {
            "name": "onSeek",
            "type": "(seconds: number) => void",
            "optional": true,
            "default": "",
            "description": "Scrub handler; with `elapsed` omitted, scrubs also move the local timer."
          },
          {
            "name": "shuffle",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Shuffle state, shown as a pressed Shuffle button. It changes only through onShuffle."
          },
          {
            "name": "repeat",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Repeat state, shown as a pressed Repeat button. It changes only through onRepeat."
          },
          {
            "name": "onNext",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Next-track handler; without it the Next button renders disabled."
          },
          {
            "name": "onPrev",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Previous-track handler; without it the Previous button renders disabled."
          },
          {
            "name": "onShuffle",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Shuffle handler; without it the Shuffle button renders disabled."
          },
          {
            "name": "onRepeat",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Repeat handler; without it the Repeat button renders disabled."
          },
          {
            "name": "onEnded",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Fires when the local timer reaches the end of the track with repeat off; a queue advances here."
          },
          {
            "name": "onLike",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Like-toggle handler; omission enables local liked state."
          },
          {
            "name": "onVolumeChange",
            "type": "(volume: number) => void",
            "optional": true,
            "default": "",
            "description": "Volume handler; omission enables local volume state."
          },
          {
            "name": "onLyrics",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Lyrics handler; the Lyrics button renders only when provided."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-nav-item": [
      {
        "table": "NavItem",
        "props": [
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Optional icon component rendered at 16px (iconSize.sm), 8px before the label."
          },
          {
            "name": "label",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "Visible content of the nav row."
          },
          {
            "name": "active",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Marks the row as the current selection, applying brand text and the indicator dot."
          },
          {
            "name": "selected",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "The chosen item in a list (the open chat among chats), distinct from `active` (where you are in the app). Neutral: the pressed fill (surface.active) and text.primary, held on hover; no brand colour, no edge marker. Sets `aria-current=\"true\"` unless the caller passes its own `aria-current`. `active` wins when both are set."
          },
          {
            "name": "collapsed",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Icon-rail form: centers the icon and drops the label to screen readers only. The active brand glyph and the trailing-edge marker both hold, so the selected row reads the same at either width. Requires `icon`; pair with a Tooltip so the label is still reachable by sight."
          },
          {
            "name": "asChild",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Renders via Radix Slot, merging props onto the child instead of a native button."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "HTML button type; defaults to 'button' to avoid accidental form submits, and is omitted when asChild is set."
          },
          {
            "name": "layoutGroupId",
            "type": "string",
            "optional": true,
            "default": "'andromeda-navitem-indicator'",
            "description": "Override only when two distinct nav lists share a viewport and you don't want the active dot to animate between them. To get the slide between sibling NavItems, wrap the list in framer's <LayoutGroup>."
          },
          {
            "name": "action",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Trailing secondary control, typically a `PanelMenu size=\"sm\"`. Rendered beside the row button (never inside it), on the row's right end; hidden at rest on pointer devices and shown on row hover, focus-within, on the `active` or `selected` row, and while its menu is open; always shown on touch. Not rendered when `collapsed`."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the row element (the button, or the asChild element)."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the row element (the button, or the asChild element)."
          }
        ]
      }
    ],
    "andromeda-pro-navbar": [
      {
        "table": "Navbar",
        "props": [
          {
            "name": "brand",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The brand lockup on the left (a mark and the product name). Shown again at the head of the menu drawer."
          },
          {
            "name": "links",
            "type": "{ label: string, href: string }[]",
            "optional": true,
            "default": "",
            "description": "The page's links, centred. An href starting with '#' scrolls to that section smoothly and is tracked; any other href navigates."
          },
          {
            "name": "actions",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The primary action on the right, kept in the bar at every width. One filled Button."
          },
          {
            "name": "secondaryActions",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Quiet actions before the primary one (a ghost Sign in). Fold into the menu below md."
          },
          {
            "name": "menuActions",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The drawer footer, primary first. Defaults to `actions` then `secondaryActions` as given."
          },
          {
            "name": "trackSections",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Mark the link for the section in view with aria-current=\"location\"."
          },
          {
            "name": "sectionSelector",
            "type": "string",
            "optional": true,
            "default": "'section'",
            "description": "The elements the reading line is tested against. A match without a linked id clears the mark."
          },
          {
            "name": "sticky",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Stick to the top of the scroller, with the hairline shown once the page has moved. False renders a static bar with its hairline always on."
          },
          {
            "name": "maxWidth",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The row's max width (a CSS length), to line the bar up with the page's content column. Full width by default."
          },
          {
            "name": "menuLabel",
            "type": "string",
            "optional": true,
            "default": "'Menu'",
            "description": "The drawer's accessible name; the menu buttons read \"Open menu\" and \"Close menu\" from it."
          },
          {
            "name": "onNavigate",
            "type": "(href: string) => void",
            "optional": true,
            "default": "",
            "description": "Called instead of the browser's own navigation for links not starting with '#', for a client router."
          }
        ]
      }
    ],
    "andromeda-pro-nodes": [
      {
        "table": "Nodes",
        "props": [
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "fixes the lattice offset, the roots and the whole cascade; default 1337"
          },
          {
            "name": "variant",
            "type": "'sparse'|'default'|'dense'",
            "optional": true,
            "default": "",
            "description": "lattice density (pitch + root count); default 'default' (the canonical look)"
          },
          {
            "name": "emphasis",
            "type": "'subject'|'ground'",
            "optional": true,
            "default": "",
            "description": "how much ink it carries; default 'subject'. 'ground' is for an Object lying under content that has to be read"
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "freeze on the current frame (off-focus / backgrounded surfaces)"
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "resting lattice hairlines; any CSS colour syntax; defaults to border.subtle"
          },
          {
            "name": "glyphColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "resting survey glyphs at each crossing; defaults to border.base"
          },
          {
            "name": "lightColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "travelling light — rays, halo, spark, bloom, all derived from this one value; defaults to text.primary"
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-orb": [
      {
        "table": "Orb",
        "props": [
          {
            "name": "density",
            "type": "'sparse'|'default'|'dense'",
            "optional": true,
            "default": "",
            "description": "loop + pulse count; defaults to 'default'"
          },
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "composition seed — same seed, same figure, every render"
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "hold the figure still (no rotation, no pulses)"
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "loop hairline ink; defaults to border.strong. Any CSS colour syntax — hex, rgb(), a var() expression. The pinch and the depth shading are alphas of THIS value, so one prop recolours the whole structure."
          },
          {
            "name": "lightColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "travelling pulse ink (trail, halo, head); defaults to text.primary. Same syntax freedom."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-panel-header": [
      {
        "table": "PanelHeader",
        "props": [
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "Sentence-case title."
          },
          {
            "name": "titleAs",
            "type": "'h2'|'h3'|'h4'|'h5'|'h6'|'span'",
            "optional": true,
            "default": "'h3'",
            "description": "Element the title renders as. A heading by default so the panel shows up in the page outline; pick the level that fits your page, or `span` for no heading. The look does not change."
          },
          {
            "name": "actions",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Right-aligned slot (PanelMenu, IconButton, Button, etc.)."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Header weight: title type + padding. The actions child keeps its OWN size prop (the header never forces it), so pair them by name: sm header + `size=\"sm\"` control (28px), md + `md` (32px), lg + `lg` (40px). A mismatched pair is legal and occasionally right (a dense sm kebab on an md header), just make it deliberate."
          },
          {
            "name": "divider",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Hairline under the header, inset 12px from each edge. On by default. Turn it off where the surface below brings its own edge — a map, a chart canvas, a full-bleed media panel — so the header does not draw a second line a few pixels from the first."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-panel-menu": [
      {
        "table": "PanelMenuItem",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text shown for the menu item."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon rendered to the left of the label."
          },
          {
            "name": "onSelect",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the item is chosen (ignored on items with a submenu)."
          },
          {
            "name": "submenu",
            "type": "PanelMenuItem[]",
            "optional": true,
            "default": "",
            "description": "Nested items opened as a flyout submenu."
          },
          {
            "name": "selected",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Marks the item as the active choice, styling it accordingly."
          },
          {
            "name": "destructive",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Renders the item label in the destructive red color."
          },
          {
            "name": "type",
            "type": "'separator'",
            "optional": true,
            "default": "",
            "description": "Set to 'separator' to render a divider rule instead of a clickable item."
          }
        ]
      },
      {
        "table": "PanelMenu",
        "props": [
          {
            "name": "items",
            "type": "PanelMenuItem[]",
            "optional": false,
            "default": "",
            "description": "Entries rendered in the menu, in order."
          },
          {
            "name": "align",
            "type": "'left'|'right'",
            "optional": true,
            "default": "'right'",
            "description": "Edge of the trigger the menu aligns to."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Trigger size, forwarded straight to IconButton. `md` is the panel-header default. Drop to `sm` when the menu is a per-row overflow inside a dense table, where a 32px square would set the row height. The rows follow the same rung as the trigger."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "'Panel options'",
            "description": "Accessible label for the kebab trigger button and menu."
          },
          {
            "name": "triggerIcon",
            "type": "React.ComponentType",
            "optional": true,
            "default": "EllipsisVertical",
            "description": "The trigger's glyph. The kebab is the overflow default; pass another icon when the menu is not an overflow, e.g. `Plus` for a menu of things to add. The trigger stays a ghost IconButton either way."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the menu pre-opened. Useful in showcases / docs so the consumer can see the menu contents without first having to click the trigger. Click-outside and Escape still dismiss it."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Like defaultOpen, but the menu stays open and renders inline under the trigger: the click-outside and Escape dismissers are not attached and the trigger cannot toggle it. For a page that documents the menu's contents; an overflow menu in an app must dismiss."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class applied to the wrapper element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper element."
          }
        ]
      }
    ],
    "andromeda-pro-payment-card": [
      {
        "table": "PaymentCard",
        "props": [
          {
            "name": "brand",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The issuer's name or lockup, top left, in the primary ink. None by default."
          },
          {
            "name": "kind",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "What the card is (\"Debit\", \"Credit\", \"Virtual\"), top right in the meta ink."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The card's own name (\"Everyday\", \"Travel\"), over the number."
          },
          {
            "name": "last4",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The last four digits; the number is shown masked as \"•••• 4821\"."
          },
          {
            "name": "expiry",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The expiry (\"08/29\"), bottom right."
          },
          {
            "name": "tone",
            "type": "'graphite' | 'steel' | 'ember' | 'brand'",
            "optional": true,
            "default": "'graphite'",
            "description": "The lacquer: graphite (neutral with a trace of brand), steel (the blue end of the ramp), ember (the system's contrast orange, pinned to its token in both themes) or brand (the deep brand lacquer)."
          },
          {
            "name": "interactive",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Tilt toward a mouse pointer with a light across the face, a lit rim and one rung of lift on hover. Off under reduced motion and on touch."
          },
          {
            "name": "dimmed",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "The face recedes to half strength, for a card that sits behind another."
          },
          {
            "name": "raised",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "One rung up the elevation ladder, for the card on top of a stack."
          },
          {
            "name": "width",
            "type": "number | string",
            "optional": true,
            "default": "",
            "description": "The card's width (a number of px or a CSS length); the height follows the card ratio. Fills its container by default."
          }
        ]
      }
    ],
    "andromeda-pro-planet": [
      {
        "table": "Planet",
        "props": [
          {
            "name": "particleCount",
            "type": "number",
            "optional": true,
            "default": "6000",
            "description": "Number of surface particles; 6000 reads dense at 320 to 480px."
          },
          {
            "name": "particleSize",
            "type": "number",
            "optional": true,
            "default": "0.028",
            "description": "Per-particle point size in world units."
          },
          {
            "name": "rotationSpeed",
            "type": "number",
            "optional": true,
            "default": "0.0035",
            "description": "Auto-rotation speed in radians per frame (assumes about 60fps)."
          },
          {
            "name": "variant",
            "type": "'shell' | 'mantle'",
            "optional": true,
            "default": "'shell'",
            "description": "Surface construction; Mantle divides the particles between a porous shell and a smaller inner body."
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, the planet does not auto-rotate."
          },
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Seeds the particle field. The same seed always builds the same planet, so a shot can be reproduced and two renders can be compared, screenshotted or regression-tested."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Lit-body colour, any CSS colour syntax; defaults to `var(--andromeda-text-secondary, oklch(0.877 0.002 286.2))`. The terminator and the highlight specks are derived from this and `shadowColor`, so one value recolours the whole planet."
          },
          {
            "name": "shadowColor",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Unlit-side colour, any CSS colour syntax; defaults to `var(--andromeda-border-base, oklch(0.413 0.002 286.2))`."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-popover": [
      {
        "table": "Popover",
        "props": [
          {
            "name": "open",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled open state. Pair with `onOpenChange`. Leave unset for an uncontrolled popover."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial open state of an uncontrolled popover."
          },
          {
            "name": "onOpenChange",
            "type": "(open: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next open state on every request: the trigger's toggle, an outside pointer-down, Escape."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The anchor (a `PopoverTrigger`, or a field its owner opens and closes) and the `PopoverContent`."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class on the anchor wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the anchor wrapper, e.g. a width for a field anchor."
          }
        ]
      },
      {
        "table": "PopoverTrigger",
        "props": [
          {
            "name": "asChild",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Renders via Radix Slot, merging the trigger's props onto its only child (a Button, an IconButton, a custom button) instead of a bare native button."
          },
          {
            "name": "render",
            "type": "React.ReactElement",
            "optional": true,
            "default": "",
            "description": "The same as asChild, in the Base UI form some installers rewrite asChild into: the trigger renders this element with its props merged onto it, and the trigger's children, when given, become the element's children."
          },
          {
            "name": "aria-haspopup",
            "type": "'dialog'|'menu'|'listbox'|'grid'|'tree'|boolean",
            "optional": true,
            "default": "'dialog'",
            "description": "What the panel is. Match it to `PopoverContent`'s `role`."
          },
          {
            "name": "type",
            "type": "'button'|'submit'|'reset'",
            "optional": true,
            "default": "'button'",
            "description": "HTML button type, omitted when asChild or render is set."
          },
          {
            "name": "onClick",
            "type": "(event: React.MouseEvent<HTMLButtonElement>) => void",
            "optional": true,
            "default": "",
            "description": "Runs before the toggle; call `event.preventDefault()` to keep the popover as it is."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The trigger's content, with asChild the element that becomes the trigger, with render the element's content."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Merged over the open-state fill, so a trigger that paints its own open state keeps it."
          }
        ]
      },
      {
        "table": "PopoverContent",
        "props": [
          {
            "name": "side",
            "type": "'auto'|'top'|'bottom'",
            "optional": true,
            "default": "'auto'",
            "description": "Which side of the anchor the panel opens on. `auto` takes the side with room for the whole panel inside the nearest scrolling ancestor (above first), else the roomier side with the panel capped to it and scrolling. `top` / `bottom` pin the side and cap the panel to that side's room."
          },
          {
            "name": "align",
            "type": "'start'|'end'",
            "optional": true,
            "default": "'start'",
            "description": "Which edge of the anchor the panel lines up with."
          },
          {
            "name": "width",
            "type": "string|number",
            "optional": true,
            "default": "",
            "description": "Panel width, any CSS length. `'100%'` matches the anchor. Unset, the panel sizes to its content. Always capped inside the viewport."
          },
          {
            "name": "role",
            "type": "string",
            "optional": true,
            "default": "'dialog'",
            "description": "The panel's role: `dialog` for mixed content, `menu` for a menu, `listbox` for a results list."
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name. Unset, the panel is named by its `PopoverLabel` when it has one."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Panel id; the trigger's `aria-controls` follows it. Generated when unset."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The panel's content: rows, a label, separators, controls."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class on the panel."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the panel."
          }
        ]
      },
      {
        "table": "PopoverLabel",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The section's name, sentence case; the role sets it in capitals."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Label id. Generated when unset; the panel is named by it unless it has an aria-label."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "PopoverSeparator",
        "props": [
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-pricing-card": [
      {
        "table": "PricingCard",
        "props": [
          {
            "name": "name",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The plan's name, rendered as an h3 that names the card."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "One line on who the plan is for."
          },
          {
            "name": "price",
            "type": "number|string",
            "optional": false,
            "default": "",
            "description": "The figure. A number is grouped for reading (1,000); a string is shown as given."
          },
          {
            "name": "currency",
            "type": "string",
            "optional": true,
            "default": "'$'",
            "description": "The small glyph before the figure. Pass '' for a word price such as \"Custom\"."
          },
          {
            "name": "period",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The note under the price: \"per month\", or what makes a free plan free."
          },
          {
            "name": "features",
            "type": "string[]",
            "optional": true,
            "default": "[]",
            "description": "What the plan includes, one check mark each."
          },
          {
            "name": "cta",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "The action's label; the card renders the Button in the right lane for its state and theme."
          },
          {
            "name": "onCta",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Called when the `cta` Button is pressed."
          },
          {
            "name": "action",
            "type": "React.ReactNode | ((variant: 'default'|'outline') => React.ReactNode)",
            "optional": true,
            "default": "",
            "description": "Replaces the `cta` Button. A function is called with the lane to use, once per theme on a featured card, so a link Button (asChild) keeps the theme rule."
          },
          {
            "name": "markers",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Corner markers on the card; ignored when featured."
          },
          {
            "name": "featured",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "The recommended plan: solid fill, its own ink, no corner markers, leads when stacked."
          },
          {
            "name": "featuredLabel",
            "type": "string",
            "optional": true,
            "default": "'Recommended'",
            "description": "What a screen reader hears beside the name of the featured plan; the fill is the visible badge."
          }
        ]
      },
      {
        "table": "PricingGrid",
        "props": [
          {
            "name": "columns",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Plans per row on desktop; defaults to the number of cards."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "PricingCards."
          }
        ]
      }
    ],
    "andromeda-pro-progress-bar": [
      {
        "table": "ProgressBar",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Caption shown above the bar and used as the accessible label."
          },
          {
            "name": "value",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "0–100; clamped internally."
          },
          {
            "name": "thresholds",
            "type": "{warning: number, fault: number}",
            "optional": true,
            "default": "",
            "description": "Where this reading stops being healthy, on the same 0–100 scale as `value`. Supply it and the fill colours itself — the preferred form, since a bar that is TOLD its colour can contradict the number beside it. The order carries the direction: `{warning: 70, fault: 90}` is high-is-bad (storage, memory), `{warning: 30, fault: 15}` is low-is-bad (battery, credits). Boundaries are inclusive."
          },
          {
            "name": "variant",
            "type": "'default'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "Color of the filled segments. The manual fallback, for a bar with no meaningful threshold; `thresholds` wins."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-pro-prompt-input": [
      {
        "table": "PromptInput",
        "props": [
          {
            "name": "status",
            "type": "'ready'|'streaming'",
            "optional": true,
            "default": "'ready'",
            "description": "`streaming` means the assistant is working: Send becomes Stop (when `onStop` is set) and Enter no longer sends. The field stays writable."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Ends the running turn. Called by the Stop button shown in Send's place while `status` is `streaming`. Without it, Send stays in place and dead during a run."
          },
          {
            "name": "onSubmit",
            "type": "(event: React.FormEvent<HTMLFormElement>) => void",
            "optional": true,
            "default": "",
            "description": "Called when Send is pressed or Enter is typed in the field, with the default already prevented. Never called over an empty field or during a run."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A PromptInputTextarea followed by a PromptInputToolbar."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "PromptInputTextarea",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controlled value. Pair with onChange. Leave unset for an uncontrolled field (read it from the form on submit; `name` defaults to \"message\")."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Initial value when uncontrolled."
          },
          {
            "name": "onChange",
            "type": "(event: React.ChangeEvent<HTMLTextAreaElement>) => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the value changes."
          },
          {
            "name": "maxRows",
            "type": "number",
            "optional": true,
            "default": "10",
            "description": "The field starts at one line, grows with the words up to this many lines, then scrolls."
          },
          {
            "name": "placeholder",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Placeholder text shown when the field is empty."
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": true,
            "default": "'Prompt'",
            "description": "The field's accessible name; it has no visible label. A `label` prop also works and is rendered visually hidden."
          },
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "'message'",
            "description": "Form field name, so an uncontrolled field is in the form's FormData."
          },
          {
            "name": "onKeyDown",
            "type": "(event: React.KeyboardEvent<HTMLTextAreaElement>) => void",
            "optional": true,
            "default": "",
            "description": "Runs before the Enter handling; call preventDefault to keep Enter from sending."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Forwarded to the <textarea>."
          }
        ]
      },
      {
        "table": "PromptInputToolbar",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Laid out left to right: a PromptInputTools group first, then the right-hand controls (a mic, PromptInputSubmit), which it pushes to the far end."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Forwarded to the footer row."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Forwarded to the footer row."
          }
        ]
      },
      {
        "table": "PromptInputTools",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The left group: an add menu, a model picker, a removable Tag. It takes the free width, so whatever follows it in the toolbar sits at the far end; a Tag inside may shrink."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      },
      {
        "table": "PromptInputSubmit",
        "props": [
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'sm'",
            "description": "Rung on the control ladder; match the other controls in the toolbar."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-radar-chart": [
      {
        "table": "RadarSeries",
        "props": [
          {
            "name": "key",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Key in each data row whose numeric value this series plots."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Series name shown in the legend and tooltip."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Stroke and fill color for this series, defaults to the brand color."
          }
        ]
      },
      {
        "table": "RadarChart",
        "props": [
          {
            "name": "data",
            "type": "object[]",
            "optional": true,
            "default": "",
            "description": "Array of data rows, each an axis label plus one numeric value per series."
          },
          {
            "name": "series",
            "type": "RadarSeries[]",
            "optional": true,
            "default": "",
            "description": "Series descriptors defining which data keys to plot and how."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'/// Diagnostics'",
            "description": "Kicker text shown above the title in the card header."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Systems Radar'",
            "description": "Main heading shown in the card header."
          },
          {
            "name": "description",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional line of text shown beneath the title."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes for the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-pro-radio": [
      {
        "table": "RadioGroup",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shared group name for the radios' native inputs; auto-generated when omitted."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Selected value in controlled mode; the matching radio is checked."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Initially selected value when uncontrolled."
          },
          {
            "name": "onValueChange",
            "type": "(next: string) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the newly selected value."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables every radio in the group."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Radio elements belonging to the group."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes for the group wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the group wrapper."
          }
        ]
      },
      {
        "table": "Radio",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Required when used inside RadioGroup."
          },
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Standalone controlled state."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial checked state when uncontrolled and standalone."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the new checked state when toggled."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text label rendered beside the box."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Helper line under the label; the box aligns to the first line and the input is described by it."
          },
          {
            "name": "size",
            "type": "'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Two rungs, 16 and 20px boxes, scaling the box, its mark and the label together, matching Checkbox at the same value. There is no 12px `sm` rung."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Disables the radio and blocks interaction."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the visual box."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id for the input; links the label via htmlFor, auto-generated when omitted."
          },
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Native input name that groups radios; falls back to the group's name."
          }
        ]
      }
    ],
    "andromeda-pro-search-field": [
      {
        "table": "SearchField",
        "props": [
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Rung on the shared control ladder: 28, 32 or 40px tall. Matches Button, IconButton and Input at the same value."
          },
          {
            "name": "placeholder",
            "type": "string",
            "optional": true,
            "default": "'Search anything'",
            "description": "Text shown when empty. Defaults to \"Search anything\"."
          },
          {
            "name": "shortcut",
            "type": "string|null",
            "optional": true,
            "default": "'⌘ K'",
            "description": "Keyboard shortcut chip. Pass null to hide. Defaults to \"⌘ K\"."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "Search",
            "description": "Leading icon. Defaults to Search. Pass null to hide."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controlled value."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Uncontrolled initial value."
          },
          {
            "name": "onValueChange",
            "type": "(next: string) => void",
            "optional": true,
            "default": "",
            "description": "Called when typed value changes."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible label for the input. Defaults to placeholder."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name forwarded to the outer wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Style merged into the outer wrapper (lets the parent set width)."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Disables the field: dims it to the disabled opacity, shows a not-allowed cursor, and disables the underlying input."
          }
        ]
      }
    ],
    "andromeda-pro-section-heading": [
      {
        "table": "SectionHeading",
        "props": [
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The heading itself."
          },
          {
            "name": "eyebrow",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A short label over the title, set in the label role (uppercase, tracked, muted)."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "One or two sentences under the title, or beside it in `split`."
          },
          {
            "name": "actions",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A control or two under the description, such as a Button or a toggle."
          },
          {
            "name": "align",
            "type": "'center'|'left'|'split'",
            "optional": true,
            "default": "'center'",
            "description": "`center` opens a band, `left` heads a column, `split` sets the description and actions beside the title on a 7:5 grid."
          },
          {
            "name": "as",
            "type": "'h1'|'h2'|'h3'|'h4'|'h5'|'h6'",
            "optional": true,
            "default": "'h2'",
            "description": "The title's heading level; the look never changes with it."
          },
          {
            "name": "titleId",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "An id for the title, so the section can be labelled by it."
          }
        ]
      }
    ],
    "andromeda-pro-segmented-control": [
      {
        "table": "SegmentOption",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Unique value that identifies this segment."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text shown on the segment."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component rendered in the segment, optionally alongside its label."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name for the segment, falling back to label when omitted."
          }
        ]
      },
      {
        "table": "SegmentedControl",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Value of the currently selected segment."
          },
          {
            "name": "onChange",
            "type": "(next: string) => void",
            "optional": false,
            "default": "",
            "description": "Handler called with the value of the newly selected segment."
          },
          {
            "name": "options",
            "type": "SegmentOption[]",
            "optional": false,
            "default": "",
            "description": "Segments to render, in display order."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Accessible name for the tablist; required when no surrounding label names the control."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Height and icon-size preset for the control."
          },
          {
            "name": "layoutGroupId",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Override the auto-generated per-instance id only when you explicitly want two SegmentedControls to share their indicator (animating across both as one unit). The default `useId()` value scopes the indicator to a single control, which is what you want 99% of the time, without it, switching selections in one control makes the indicator fly between controls."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-pro-sidebar": [
      {
        "table": "SidebarItem",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Row label; also the row's React key and its tooltip text when collapsed."
          },
          {
            "name": "icon",
            "type": "React.ElementType",
            "optional": false,
            "default": "",
            "description": "Icon for the row. Required — the rail can always be collapsed, and a collapsed row is its glyph."
          },
          {
            "name": "active",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Current destination — accent glyph plus the trailing-edge marker."
          },
          {
            "name": "onClick",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Navigate handler."
          }
        ]
      },
      {
        "table": "Sidebar",
        "props": [
          {
            "name": "items",
            "type": "SidebarItem[]",
            "optional": false,
            "default": "",
            "description": "The nav rows. The rail renders every row itself, which is what lets it guarantee that nothing mounts or reflows mid-fold."
          },
          {
            "name": "footerItems",
            "type": "SidebarItem[]",
            "optional": true,
            "default": "[]",
            "description": "Utility rows (Docs, Settings) under their own hairline at the foot of the rail. They are destinations, so they are rows and not IconButtons, and they fold on the same switch as the nav above them. They carry their own marker scope, so an active footer row never pulls the marker out of the nav list."
          },
          {
            "name": "logo",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The mark at the top of the rail. Defaults to `AndromedaIcon` at 28px — behind `spacing[3]` that centres it on the rail's own 26px line at both widths. Size a replacement to the same box; `null` drops the mark."
          },
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "ONE line of type beside the mark, naming the console. A rail that folds cannot afford a brand block whose height changes with the form, so this is a single line and never a two-line lockup. With no `title` and `logo={null}` the brand block and its hairline are not rendered at all."
          },
          {
            "name": "collapsible",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Renders the fold caret and lets the rail move between its two widths. False locks the rail at whichever width `defaultCollapsed` names and draws no caret: `collapsible={false}` is the static labelled sidebar, and `collapsible={false} defaultCollapsed` is the static icon rail."
          },
          {
            "name": "defaultCollapsed",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Which form the rail opens in. Expanded by default: that is the form the labels live in, and the rail folds down to icons on request. The rail owns this state; a page does not hold it."
          },
          {
            "name": "onCollapsedChange",
            "type": "(collapsed: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Fired when the caret folds the rail. Notification only — the rail stays in charge of its own width, and this is here so a page can persist the reader's preference without taking ownership of it."
          },
          {
            "name": "togglePlacement",
            "type": "'footer'|'header'",
            "optional": true,
            "default": "'footer'",
            "description": "Where the fold control lives. `footer` is the caret in its own block under its own seam at the foot of the rail. `header` is a 28px panel toggle (PanelLeft, never turned) pinned 12px in from the brand block's right edge, which lands it on the mark's box at 52px. The mark fades out under it on the click that folds the rail and back in after the open. One element throughout, so focus stays on it."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content under the nav rows, such as a chat history. Expanded form only: it fades with the labels and is inert while the rail is folded. It takes the rail's spare height and scrolls on its own, so the nav above and the footer below never move. Laid out at the expanded width, so nothing inside reflows mid-fold."
          },
          {
            "name": "user",
            "type": "SidebarUser",
            "optional": true,
            "default": "",
            "description": "The signed-in user's row at the foot of the rail under its own seam: avatar centred on the rail's line, name and role beside it fading with the labels, a chevron, and the account menu (`items`) opening upward. One row at both widths."
          },
          {
            "name": "motionProps",
            "type": "import('framer-motion').MotionProps",
            "optional": true,
            "default": "",
            "description": "Entrance choreography from a parent's `useCascadeProps` (foundations/motion.md). The root is already a motion element for the fold, so this rides on it."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-skeleton": [
      {
        "table": "Skeleton",
        "props": [
          {
            "name": "widths",
            "type": "string[]",
            "optional": true,
            "default": "['100%','92%','64%']",
            "description": "Bar widths, top to bottom. A ragged last line reads as prose; equal bars read as a table."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'md'",
            "description": "Bar height: 8px under 12px type, 12px under 14px."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-slider": [
      {
        "table": "Slider",
        "props": [
          {
            "name": "value",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Controlled value."
          },
          {
            "name": "defaultValue",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Uncontrolled initial value."
          },
          {
            "name": "min",
            "type": "number",
            "optional": true,
            "default": "0",
            "description": "Minimum value of the range."
          },
          {
            "name": "max",
            "type": "number",
            "optional": true,
            "default": "100",
            "description": "Maximum value of the range."
          },
          {
            "name": "step",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Increment the value snaps to."
          },
          {
            "name": "onValueChange",
            "type": "(next: number) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the new value on drag or keyboard change."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional uppercase sans label."
          },
          {
            "name": "size",
            "type": "'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Rung on the shared control ladder, which starts at md here — an sm slider is too small a drag target. Scales the track row, thumb and readout together."
          },
          {
            "name": "showValue",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Render the numeric readout next to the label."
          },
          {
            "name": "showScale",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Print `min` and `max` under the track ends, the domain the fill is a proportion of. Turn it off for a slider whose range is already obvious from its surroundings."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional unit suffix (e.g. \"%\", \"KM\")."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables interaction and dims the slider."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional classes for the root wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root wrapper."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id for the slider track; auto-generated when omitted."
          }
        ]
      }
    ],
    "andromeda-pro-spinner": [
      {
        "table": "Spinner",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'Loading'",
            "description": "Accessible label."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-stat-tile": [
      {
        "table": "StatTile",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Metric name shown as the top-left caption."
          },
          {
            "name": "value",
            "type": "string|number",
            "optional": false,
            "default": "",
            "description": "Primary figure rendered as the large number, counted up from zero on reveal."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Short unit rendered beside the value."
          },
          {
            "name": "delta",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Signed change. The ▲/▼ glyph always states the direction of the move; `polarity` decides whether that move is coloured as good (brand) or bad (fault). Exactly 0 is neutral: no glyph, muted."
          },
          {
            "name": "polarity",
            "type": "'higher-is-better'|'lower-is-better'|'none'",
            "optional": true,
            "default": "'higher-is-better'",
            "description": "Which direction is the good one for this metric. `'lower-is-better'` for response time, latency, error rate, incident count — a drop there is an improvement and must not render red. `'none'` for readings with no good/bad sense at all (demand, headcount, temperature): the arrow still states the move, the delta stays muted."
          },
          {
            "name": "deltaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Caption shown beside the delta in the trend row."
          },
          {
            "name": "code",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional small identifier in the top-right."
          },
          {
            "name": "live",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, the count-up animation runs only on first mount; subsequent value changes snap (no re-animation). Use for telemetry rows whose values update on a recurring interval. Without this, each refresh runs a fresh 1.8s count-up from zero, which is unreadable."
          },
          {
            "name": "liveRoll",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, the value is rendered as a row of fixed-width digit slots; on update, only the slots whose character changed \"roll\" (previous translates up + fades, new enters from below). Use for high-frequency telemetry where the eye should track which digits moved (price ticks, latency counters, throughput rates). Overrides `live`. Initial render fades in without rolling."
          },
          {
            "name": "prefix",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text held still before the value, in the value's face ('$' in '$12B'). Only the number counts up."
          },
          {
            "name": "suffix",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text held still after the value, in the value's face ('B' in '$12B', '/7' in '24/7'). Unlike `unit`, it is part of the figure."
          },
          {
            "name": "size",
            "type": "'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Readout step: `md` = displayMd, `lg` = displayLg for headline figures on a marketing band."
          },
          {
            "name": "labelPosition",
            "type": "'top'|'bottom'",
            "optional": true,
            "default": "'top'",
            "description": "`top` = the uppercase micro-label above the value; `bottom` = a one-line textSm caption under it, ellipsised."
          },
          {
            "name": "bare",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Drops the tile's own frame (no Card surface, no corner markers, no padding) so tiles sit inside a surface the caller owns."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root (Card, or the plain div when `bare`)."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root."
          }
        ]
      }
    ],
    "andromeda-pro-stepper": [
      {
        "table": "Stepper",
        "props": [
          {
            "name": "activeStep",
            "type": "number",
            "optional": true,
            "default": "0",
            "description": "The index of the step in progress. Steps before it are complete, steps after it pending; -1 leaves every step pending and the step count or more marks every step complete."
          },
          {
            "name": "labels",
            "type": "{pending: string, active: string, complete: string}",
            "optional": true,
            "default": "",
            "description": "The state words read to assistive tech beside each title; defaults \"Pending\", \"In progress\", \"Complete\"."
          },
          {
            "name": "aria-label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Names the run for assistive tech (or use aria-labelledby)."
          }
        ]
      },
      {
        "table": "StepperItem",
        "props": [
          {
            "name": "state",
            "type": "'pending'|'active'|'complete'",
            "optional": true,
            "default": "",
            "description": "Overrides the state the root's `activeStep` gives this step."
          }
        ]
      }
    ],
    "andromeda-pro-strength-meter": [
      {
        "table": "StrengthMeter",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The password being judged. The meter reads the value itself instead of taking a score, so the screen cannot report a strength the form disagrees with."
          },
          {
            "name": "minLength",
            "type": "number",
            "optional": true,
            "default": "12",
            "description": "Below this many typed characters the password is Weak, whatever else it contains. Set it to the same number the form actually enforces."
          },
          {
            "name": "strongLength",
            "type": "number",
            "optional": true,
            "default": "16",
            "description": "At this many typed characters the password is Strong on length alone. Between the two bounds, three of the four character families are what reach Strong."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-pro-suggestion": [
      {
        "table": "Suggestion",
        "props": [
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The suggestion's label."
          },
          {
            "name": "icon",
            "type": "React.ComponentType",
            "optional": true,
            "default": "",
            "description": "Icon before the label, on the rung's size."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'sm'",
            "description": "Control rung: 28 / 32px tall, 12 / 14px label, 16 / 18px glyph."
          },
          {
            "name": "selected",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Taken: the dashed frame turns solid with the selection border and tint. Passed (true or false), it sets aria-pressed and the suggestion is a toggle, a lane that can be taken; left unset, there is no aria-pressed and it is a plain button, a one-shot follow-up."
          },
          {
            "name": "onClick",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the element is clicked."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-table": [
      {
        "table": "TableRow",
        "props": [
          {
            "name": "selected",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Applies surface.active bg + brand-300 left edge."
          },
          {
            "name": "hoverable",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Adds the background-hover class (default on only when the row has onClick)."
          }
        ]
      },
      {
        "table": "TableHeader",
        "props": [
          {
            "name": "sort",
            "type": "'asc'|'desc'|'sortable'|undefined",
            "optional": true,
            "default": "",
            "description": "Column sort state; picks the matching caret and sets aria-sort."
          },
          {
            "name": "align",
            "type": "'left'|'right'|'center'",
            "optional": true,
            "default": "'left'",
            "description": "Horizontal text alignment of the header cell."
          },
          {
            "name": "onSort",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Called when the header is activated. With `sort` set, the label and caret render inside a real button, so the column can be sorted by keyboard as well as pointer; the table's order stays the caller's to change."
          }
        ]
      },
      {
        "table": "TableCell",
        "props": [
          {
            "name": "align",
            "type": "'left'|'right'|'center'",
            "optional": true,
            "default": "'left'",
            "description": "Horizontal text alignment of the cell content."
          },
          {
            "name": "muted",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Uses text.secondary instead of text.primary."
          },
          {
            "name": "nowrap",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Keeps the cell content on a single line when true."
          }
        ]
      }
    ],
    "andromeda-pro-tabs": [
      {
        "table": "Tabs",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controlled selected value; pair with `onValueChange`."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Initial value when uncontrolled."
          },
          {
            "name": "onValueChange",
            "type": "(value: string) => void",
            "optional": true,
            "default": "",
            "description": "Called with the value of the tab picked."
          },
          {
            "name": "orientation",
            "type": "'horizontal'|'vertical'",
            "optional": true,
            "default": "'horizontal'",
            "description": "Horizontal: a row on the control ladder with the accent edge along the bottom. Vertical: a list of rows with hairlines between, the accent edge on the left, and room for a description per row."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Horizontal only: the rung on the shared control ladder (28, 32 or 40px tall; 12, 14 or 16px type), so a tab row sits level with the Buttons beside it."
          }
        ]
      },
      {
        "table": "TabsList",
        "props": [
          {
            "name": "aria-label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Names the list for assistive tech (or use aria-labelledby)."
          }
        ]
      },
      {
        "table": "TabsTrigger",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The value this tab selects."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The tab's label."
          },
          {
            "name": "leading",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "A short mark before the label: an index (\"01\") or an icon. Faint at rest, primary when hovered or picked."
          },
          {
            "name": "description",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Vertical only: a sentence under the label, muted at rest, secondary when hovered or picked."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "When true, disables the control."
          }
        ]
      },
      {
        "table": "TabsContent",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "The value whose panel this is. Only the selected value's panel is mounted."
          }
        ]
      }
    ],
    "andromeda-pro-tag": [
      {
        "table": "Tag",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'sm'",
            "description": "Rung on the LABEL ladder: 20, 24 or 28px tall (not the 28/32/40 control ladder). Defaults to sm because a tag usually sits inline rather than in a control row; pass md or lg to line it up beside a field or button of that size."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "onClose",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "When provided, renders a close button."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-textarea": [
      {
        "table": "Textarea",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Label linked to the field. Rendered above it; with `bare`, visually hidden and kept as the accessible name."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Rung on the shared control ladder. Sets padding and text size to match an Input of the same size; the height still comes from `rows`."
          },
          {
            "name": "error",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "When set, switches the field into the error state."
          },
          {
            "name": "rows",
            "type": "number",
            "optional": true,
            "default": "4",
            "description": "Number of visible text lines; sets the field's initial height (the starting height with `autoGrow`)."
          },
          {
            "name": "autoGrow",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Grows the field with its content from `rows` lines up to `maxRows`, then scrolls. Removes the resize handle."
          },
          {
            "name": "maxRows",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Line cap for `autoGrow`: exactly this many lines at every size, then the field scrolls. No cap when unset. Ignored without `autoGrow`."
          },
          {
            "name": "bare",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Drops the border, fill, padding and focus ring, for a field inside a frame the host draws. The host must show focus on its frame and give the field an accessible name."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Forwarded to the <textarea>."
          },
          {
            "name": "wrapperClassName",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Forwarded to the outer wrapper."
          }
        ]
      }
    ],
    "andromeda-pro-toggle": [
      {
        "table": "Toggle",
        "props": [
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled checked state; supplying it puts the switch in controlled mode."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial checked state when uncontrolled."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the next checked state whenever the switch toggles."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional text rendered beside the switch and linked to it via htmlFor."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Three rungs, 34x18 / 42x22 / 50x26, scaling the track, thumb travel and label together. Checkbox and Radio carry two rungs."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables interaction and dims the switch."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the visual track."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper element."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id for the input; falls back to a generated id and links the label."
          }
        ]
      }
    ],
    "andromeda-pro-tool": [
      {
        "table": "Tool",
        "props": [
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "What the step did, in sentence case (\"Searched the web\")."
          },
          {
            "name": "status",
            "type": "'running'|'done'|'stopped'|'error'",
            "optional": true,
            "default": "'done'",
            "description": "Running shows the Spinner and cannot open; stopped cannot open; done and error open when there is a body."
          },
          {
            "name": "duration",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "How long the step took, in milliseconds. Read on a done row as one-decimal seconds (\"1.2 s\"); a done row without it shows no meta."
          },
          {
            "name": "open",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled open state. Pair with onOpenChange. Ignored (shut) while the row cannot open."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial open state when uncontrolled."
          },
          {
            "name": "onOpenChange",
            "type": "(open: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Called with the next open state when the row is pressed, and with true when openOnDone opens it."
          },
          {
            "name": "openOnDone",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Opens the row the moment status is seen to turn 'done' from another status: the reader lands on what just ran. A row that mounts already done starts open, with no callback. Give it to the last step only."
          },
          {
            "name": "labels",
            "type": "{ running?: string, stopped?: string, error?: string }",
            "optional": true,
            "default": "",
            "description": "Overrides the status words (\"Running\", \"Stopped\", \"Failed\") for localisation."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'sm'",
            "description": "Row rung, forwarded to the trigger: 12 / 14px title, 16 / 18px glyph."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "What the step produced: a card, a paragraph, the error detail. Hangs off the branch rule when open."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-tooltip": [
      {
        "table": "Tooltip",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Text shown in the tooltip."
          },
          {
            "name": "position",
            "type": "'top'|'bottom'|'left'|'right'",
            "optional": true,
            "default": "'top'",
            "description": "Side of the trigger the label hangs off. `left`/`right` are for icon rails, where a label above the row would cover its neighbour."
          },
          {
            "name": "portal",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the bubble into <body> instead of the trigger, for triggers inside a clipping or scrolling panel."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The trigger element."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-top-bar": [
      {
        "table": "TopBarLink",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Nav label; also the row's React key."
          },
          {
            "name": "active",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Current page — semibold primary ink plus the active line."
          },
          {
            "name": "onClick",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Navigate handler."
          }
        ]
      },
      {
        "table": "TopBar",
        "props": [
          {
            "name": "logo",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "The mark at the head of the brand lockup. Defaults to `AndromedaIcon` at `iconSize.xl`. Size a replacement to the same 22px box so the lockup keeps its proportions; `null` drops the mark and the wordmark leads."
          },
          {
            "name": "wordmark",
            "type": "React.ReactNode",
            "optional": true,
            "default": "'Andromeda'",
            "description": "The product name, the lockup's first line, set in the same uppercase label treatment. `null` drops the line."
          },
          {
            "name": "title",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Screen name, set under the wordmark in the brand lockup. Omitted, the second line is not rendered at all and the wordmark sits alone, centred on the bar — no empty line, no height change."
          },
          {
            "name": "links",
            "type": "TopBarLink[]",
            "optional": true,
            "default": "",
            "description": "Nav links. Empty drops the nav AND its divider, so the brand doesn't sit beside an orphaned hairline."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'sm'",
            "description": "Rung for the bar's own nav: the links render at textSm / textMd in a `tokens.control[size]` box (28 / 32px), and the nav gap steps with them. The bar's HEIGHT is `layout.headerHeight` at both rungs — this sizes the nav, not the strip. The three cluster slots are the caller's: pass Button / UserMenu at the MATCHING rung, or the row mixes sizes."
          },
          {
            "name": "search",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Optional search field, centred in the spacer between the nav and the right cluster. Omitted, the spacer stays empty and the bar is unchanged."
          },
          {
            "name": "badge",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Status slot — a live/degraded reading, never decoration."
          },
          {
            "name": "cta",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "One primary action for the whole screen."
          },
          {
            "name": "user",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Identity slot (UserMenu)."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-pro-trend-chart": [
      {
        "table": "TrendSeries",
        "props": [
          {
            "name": "key",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Field in each data row holding this series' y-value."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Display name shown in the tooltip and legend chip."
          },
          {
            "name": "role",
            "type": "'baseline'|'live'|'context'|'threshold'|'compare'",
            "optional": true,
            "default": "",
            "description": "Colour role in the Andromeda charts hierarchy; threshold also renders dashed; compare is the orange series that must stand apart from live."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Explicit override; prefer `role`."
          }
        ]
      },
      {
        "table": "TrendChart",
        "props": [
          {
            "name": "data",
            "type": "object[]",
            "optional": false,
            "default": "",
            "description": "Rows of chart data, one object per x-axis point."
          },
          {
            "name": "series",
            "type": "TrendSeries[]",
            "optional": false,
            "default": "",
            "description": "Series to plot, each bound to a data-row field by key."
          },
          {
            "name": "xKey",
            "type": "string",
            "optional": true,
            "default": "'t'",
            "description": "Field in each data row plotted along the x-axis."
          },
          {
            "name": "modes",
            "type": "Array<'line'|'area'|'bar'>",
            "optional": true,
            "default": "['area','bar']",
            "description": "Toggle appears when >1."
          },
          {
            "name": "barLayout",
            "type": "'stacked'|'grouped'",
            "optional": true,
            "default": "'stacked'",
            "description": "How bar mode arranges multiple series. Use `grouped` when the series overlap rather than compose, so a stack would double-count. Bars keep their ROLE colours in either layout. A `threshold` series is never a bar in either layout: it draws as a line over the plot in its role colour instead of being added into a total that never happened."
          },
          {
            "name": "defaultMode",
            "type": "'line'|'area'|'bar'",
            "optional": true,
            "default": "",
            "description": "Render mode selected on mount; defaults to the first entry in modes."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Heading shown at the top-left of the header."
          },
          {
            "name": "yLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Uppercase axis caption, top-left."
          },
          {
            "name": "formatX",
            "type": "(x:any)=>string",
            "optional": true,
            "default": "",
            "description": "Labels the x value on the axis ticks AND as the tooltip heading, e.g. `(d) => 'Sep ' + d`. Without it both show the raw `xKey` value, so pass it whenever that value is an index or a bare number."
          },
          {
            "name": "tooltipLabelFormatter",
            "type": "(label:any)=>string",
            "optional": true,
            "default": "",
            "description": "Overrides `formatX` for the tooltip heading only."
          },
          {
            "name": "valueFormatter",
            "type": "(value:any)=>string",
            "optional": true,
            "default": "",
            "description": "Formats each series value shown in the tooltip."
          },
          {
            "name": "xInterval",
            "type": "number",
            "optional": true,
            "default": "4",
            "description": "Number of x-axis ticks skipped between rendered labels."
          },
          {
            "name": "showLegend",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Render the toggleable legend row in the footer."
          },
          {
            "name": "showYAxis",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Reserve the left Y-axis tick gutter. Set false on compact cards where an external headline already states the magnitude, and the plot then fills its card content box edge-to-edge with no stray left inset (the Andromeda spacing rules)."
          },
          {
            "name": "domain",
            "type": "[number|string, number|string]",
            "optional": true,
            "default": "[0,'auto']",
            "description": "Y-axis domain, passed through to recharts. The default zero baseline is the honest one for most series. Pass `['auto','auto']` (or explicit bounds) when the measurement has a floor far from zero — a satisfaction score that only moves between 3.8 and 4.3 is a flat sliver on a 0-based axis. In `bar` mode the zero floor is kept whatever is passed: only the upper bound is honoured, because a bar read against a truncated baseline misstates every difference it draws."
          },
          {
            "name": "footerSlot",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Right side of the footer (custom controls)."
          },
          {
            "name": "height",
            "type": "number|'fill'",
            "optional": true,
            "default": "240",
            "description": "Plot height in px, or 'fill' to grow into a flex parent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class applied to the root container element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root container element."
          }
        ]
      }
    ],
    "andromeda-pro-user-card": [
      {
        "table": "UserCard",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Shown as the card's primary label and used for the avatar initials."
          },
          {
            "name": "role",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Subtitle under the name (e.g. \"Flight Director\")."
          },
          {
            "name": "src",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional avatar image URL; falls back to initials when absent."
          },
          {
            "name": "lightSrc",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional light-theme version of `src`; passed to Avatar, which shows `src` in dark and `lightSrc` in light."
          },
          {
            "name": "status",
            "type": "'online'|'caution'|'fault'|'offline'",
            "optional": true,
            "default": "",
            "description": "Presence status shown as a dot on the avatar. Passed verbatim to Avatar, whose enum this is; any other value renders no dot."
          },
          {
            "name": "size",
            "type": "'sm'|'md'",
            "optional": true,
            "default": "'md'",
            "description": "Scales the card: avatar (32/36), inset, gap, and name/role type. No lg rung — a sidebar rail never has the room for one. The popover rows follow the same rung (capped to UserMenuPanel's own sm/md/lg ladder). Replaces the older `avatarSize` prop, which scaled only the avatar; a copy still passing `avatarSize` renders md."
          },
          {
            "name": "items",
            "type": "UserMenuItem[]",
            "optional": false,
            "default": "",
            "description": "Entries rendered in the popover menu."
          },
          {
            "name": "placement",
            "type": "'top'|'bottom'",
            "optional": true,
            "default": "'top'",
            "description": "Which side of the card the menu opens toward."
          },
          {
            "name": "align",
            "type": "'start'|'end'|'stretch'",
            "optional": true,
            "default": "'stretch'",
            "description": "How the panel aligns to the card; stretch matches its width."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the menu pre-opened (showcases / docs). Outside-click and Escape still dismiss it."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render pre-opened AND pinned; outside-click / Escape do not dismiss it. For showcases / docs where several popovers are shown open at once and one must not close the others."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible label for the trigger button and menu. Omitted, the trigger is named by its visible name and role, and the menu is labelled 'User menu'."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class names for the card's root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the card's root element."
          }
        ]
      }
    ],
    "andromeda-pro-user-menu": [
      {
        "table": "UserMenuItem",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Stable key for the row, falling back to its array index."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text shown on the menu item."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component rendered before the label."
          },
          {
            "name": "onSelect",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the item is chosen; the menu closes after."
          },
          {
            "name": "destructive",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Renders the item in the destructive red color."
          },
          {
            "name": "type",
            "type": "'separator'",
            "optional": true,
            "default": "",
            "description": "Set to 'separator' to render a divider instead of an item."
          }
        ]
      },
      {
        "table": "UserMenu",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Display name; passed to Avatar for the initial fallback."
          },
          {
            "name": "src",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Avatar image URL."
          },
          {
            "name": "lightSrc",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Light-theme version of `src`; passed to Avatar, which shows `src` in dark and `lightSrc` in light."
          },
          {
            "name": "status",
            "type": "'online'|'caution'|'fault'|'offline'",
            "optional": true,
            "default": "",
            "description": "Presence state; passed to Avatar for the status dot."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Scales the whole trigger: box height on the shared control ladder (28/32/40), avatar (24/28/36) inside it, side padding, gap and chevron. The popover rows follow the same rung. Replaces the older `avatarSize` prop, which scaled only the avatar; a copy still passing `avatarSize` renders md."
          },
          {
            "name": "items",
            "type": "UserMenuItem[]",
            "optional": false,
            "default": "",
            "description": "The menu rows to render, including separators."
          },
          {
            "name": "placement",
            "type": "'top'|'bottom'",
            "optional": true,
            "default": "'bottom'",
            "description": "Whether the panel opens below or above the trigger."
          },
          {
            "name": "align",
            "type": "'start'|'end'",
            "optional": true,
            "default": "'end'",
            "description": "Which trigger edge the panel aligns to horizontally."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the menu pre-opened (showcases / docs). Outside-click and Escape still dismiss it."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render pre-opened AND pinned; outside-click / Escape do not dismiss it. For showcases / docs where several popovers are shown open at once and one must not close the others."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "'User menu'",
            "description": "Accessible label for the trigger button and menu panel."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name applied to the wrapper element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper element."
          }
        ]
      }
    ],
    "andromeda-pro-waveform": [
      {
        "table": "Waveform",
        "props": [
          {
            "name": "samples",
            "type": "number",
            "optional": true,
            "default": "120",
            "description": "Number of points sampled across the waveform."
          },
          {
            "name": "speed",
            "type": "number",
            "optional": true,
            "default": "0.6",
            "description": "Animation time-scale multiplier."
          },
          {
            "name": "amplitude",
            "type": "number",
            "optional": true,
            "default": "0.4",
            "description": "Peak height as a fraction of the SVG height."
          },
          {
            "name": "height",
            "type": "number",
            "optional": true,
            "default": "120",
            "description": "Fluid SVG height in pixels."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "tokens.color.text.primary",
            "description": "Polyline stroke color only."
          },
          {
            "name": "showBars",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether to render mirrored level bars."
          },
          {
            "name": "showCenterline",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether to render the dashed centre reference."
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Whether to hold the current or initial static frame."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Root element class name."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "{}",
            "description": "Root element inline styles."
          }
        ]
      }
    ],
    "andromeda-progress-bar": [
      {
        "table": "ProgressBar",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Caption shown above the bar and used as the accessible label."
          },
          {
            "name": "value",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "0–100; clamped internally."
          },
          {
            "name": "variant",
            "type": "'default'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "Color of the filled segments."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-radar-chart": [
      {
        "table": "RadarSeries",
        "props": [
          {
            "name": "key",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Key in each data row whose numeric value this series plots."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Series name shown in the legend and tooltip."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Stroke and fill color for this series, defaults to the accent color."
          }
        ]
      },
      {
        "table": "RadarChart",
        "props": [
          {
            "name": "data",
            "type": "object[]",
            "optional": true,
            "default": "",
            "description": "Array of data rows, each an axis label plus one numeric value per series."
          },
          {
            "name": "series",
            "type": "RadarSeries[]",
            "optional": true,
            "default": "",
            "description": "Series descriptors defining which data keys to plot and how."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'/// Diagnostics'",
            "description": "Kicker text shown above the title in the card header."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Systems Radar'",
            "description": "Main heading shown in the card header."
          },
          {
            "name": "description",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional line of text shown beneath the title."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes for the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-radio": [
      {
        "table": "RadioGroup",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shared group name for the radios' native inputs; auto-generated when omitted."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Selected value in controlled mode; the matching radio is checked."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Initially selected value when uncontrolled."
          },
          {
            "name": "onValueChange",
            "type": "(next: string) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the newly selected value."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables every radio in the group."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Radio elements belonging to the group."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes for the group wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the group wrapper."
          }
        ]
      },
      {
        "table": "Radio",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Required when used inside RadioGroup."
          },
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Standalone controlled state."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial checked state when uncontrolled and standalone."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the new checked state when toggled."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text label rendered beside the box."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Disables the radio and blocks interaction."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the visual box."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id for the input; links the label via htmlFor, auto-generated when omitted."
          },
          {
            "name": "name",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Native input name that groups radios; falls back to the group's name."
          }
        ]
      }
    ],
    "andromeda-search-field": [
      {
        "table": "SearchField",
        "props": [
          {
            "name": "placeholder",
            "type": "string",
            "optional": true,
            "default": "'Search anything'",
            "description": "Text shown when empty. Defaults to \"Search anything\"."
          },
          {
            "name": "shortcut",
            "type": "string|null",
            "optional": true,
            "default": "'⌘ K'",
            "description": "Keyboard shortcut chip. Pass null to hide. Defaults to \"⌘ K\"."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "Search",
            "description": "Leading icon. Defaults to Search. Pass null to hide."
          },
          {
            "name": "value",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Controlled value."
          },
          {
            "name": "defaultValue",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Uncontrolled initial value."
          },
          {
            "name": "onValueChange",
            "type": "(next: string) => void",
            "optional": true,
            "default": "",
            "description": "Called when typed value changes."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible label for the input. Defaults to placeholder."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name forwarded to the outer wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Style merged into the outer wrapper (lets the parent set width)."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Disables the field: dims it to the disabled opacity, shows a not-allowed cursor, and disables the underlying input."
          }
        ]
      }
    ],
    "andromeda-segmented-control": [
      {
        "table": "SegmentOption",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Unique value that identifies this segment."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text shown on the segment."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component rendered in the segment, optionally alongside its label."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Accessible name for the segment, falling back to label when omitted."
          }
        ]
      },
      {
        "table": "SegmentedControl",
        "props": [
          {
            "name": "value",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Value of the currently selected segment."
          },
          {
            "name": "onChange",
            "type": "(next: string) => void",
            "optional": false,
            "default": "",
            "description": "Handler called with the value of the newly selected segment."
          },
          {
            "name": "options",
            "type": "SegmentOption[]",
            "optional": false,
            "default": "",
            "description": "Segments to render, in display order."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Height and icon-size preset for the control."
          },
          {
            "name": "layoutGroupId",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Override the auto-generated per-instance id only when you explicitly want two SegmentedControls to share their indicator (animating across both as one unit). The default `useId()` value scopes the indicator to a single control, which is what you want 99% of the time, without it, switching selections in one control makes the indicator fly between controls."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root element."
          }
        ]
      }
    ],
    "andromeda-slider": [
      {
        "table": "Slider",
        "props": [
          {
            "name": "value",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Controlled value."
          },
          {
            "name": "defaultValue",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Uncontrolled initial value."
          },
          {
            "name": "min",
            "type": "number",
            "optional": true,
            "default": "0",
            "description": "Minimum value of the range."
          },
          {
            "name": "max",
            "type": "number",
            "optional": true,
            "default": "100",
            "description": "Maximum value of the range."
          },
          {
            "name": "step",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Increment the value snaps to."
          },
          {
            "name": "onValueChange",
            "type": "(next: number) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the new value on drag or keyboard change."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional uppercase mono label."
          },
          {
            "name": "showValue",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Render the numeric readout next to the label."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional unit suffix (e.g. \"%\", \"KM\")."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables interaction and dims the slider."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional classes for the root wrapper."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root wrapper."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id for the slider track; auto-generated when omitted."
          }
        ]
      }
    ],
    "andromeda-spinner": [
      {
        "table": "Spinner",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault."
          },
          {
            "name": "size",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "One of: sm, md, lg."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'Loading'",
            "description": "Accessible label."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-stat-tile": [
      {
        "table": "StatTile",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Metric name shown in the top-left mono caption."
          },
          {
            "name": "value",
            "type": "string|number",
            "optional": false,
            "default": "",
            "description": "Primary figure rendered as the large number, counted up from zero on reveal."
          },
          {
            "name": "unit",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Short unit rendered beside the value."
          },
          {
            "name": "delta",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Signed change. The ▲/▼ glyph always states the direction of the move; `polarity` decides whether that move is coloured as good (accent) or bad (fault). Exactly 0 is neutral: no glyph, muted."
          },
          {
            "name": "polarity",
            "type": "'higher-is-better'|'lower-is-better'|'none'",
            "optional": true,
            "default": "'higher-is-better'",
            "description": "Which direction is the good one for this metric. `'lower-is-better'` for response time, latency, error rate, incident count — a drop there is an improvement and must not render red. `'none'` for readings with no good/bad sense at all (demand, headcount, temperature): the arrow still states the move, the delta stays muted."
          },
          {
            "name": "deltaLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Caption shown beside the delta in the trend row."
          },
          {
            "name": "code",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional small mono identifier in the top-right."
          },
          {
            "name": "live",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, the count-up animation runs only on first mount; subsequent value changes snap (no re-animation). Use for telemetry rows whose values update on a recurring interval. Without this, each refresh runs a fresh 1.8s count-up from zero, which is unreadable."
          },
          {
            "name": "liveRoll",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "When true, the value is rendered as a row of fixed-width digit slots; on update, only the slots whose character changed \"roll\" (previous translates up + fades, new enters from below). Use for high-frequency telemetry where the eye should track which digits moved (price ticks, latency counters, throughput rates). Overrides `live`. Initial render fades in without rolling."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the root Card."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root Card."
          }
        ]
      }
    ],
    "andromeda-table": [
      {
        "table": "TableRow",
        "props": [
          {
            "name": "selected",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Applies surface.active bg + accent-300 left edge."
          },
          {
            "name": "hoverable",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Adds the hover-lift class (default on only when the row has onClick)."
          }
        ]
      },
      {
        "table": "TableHeader",
        "props": [
          {
            "name": "sort",
            "type": "'asc'|'desc'|'sortable'|undefined",
            "optional": true,
            "default": "",
            "description": "Column sort state; picks the matching caret and sets aria-sort."
          },
          {
            "name": "align",
            "type": "'left'|'right'|'center'",
            "optional": true,
            "default": "'left'",
            "description": "Horizontal text alignment of the header cell."
          }
        ]
      },
      {
        "table": "TableCell",
        "props": [
          {
            "name": "align",
            "type": "'left'|'right'|'center'",
            "optional": true,
            "default": "'left'",
            "description": "Horizontal text alignment of the cell content."
          },
          {
            "name": "muted",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Uses text.secondary instead of text.primary."
          },
          {
            "name": "nowrap",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Keeps the cell content on a single line when true."
          }
        ]
      }
    ],
    "andromeda-tag": [
      {
        "table": "Tag",
        "props": [
          {
            "name": "variant",
            "type": "'default'|'accent'|'warning'|'fault'",
            "optional": true,
            "default": "'default'",
            "description": "One of: default, accent, warning, fault."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Content rendered inside the component."
          },
          {
            "name": "onClose",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "When provided, renders a close button."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-textarea": [
      {
        "table": "Textarea",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Uppercase mono label rendered above the field."
          },
          {
            "name": "error",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "When set, switches the field into the error state."
          },
          {
            "name": "rows",
            "type": "number",
            "optional": true,
            "default": "4",
            "description": "Number of visible text lines; sets the field's initial and minimum height."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Forwarded to the <textarea>."
          },
          {
            "name": "wrapperClassName",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Forwarded to the outer wrapper."
          }
        ]
      }
    ],
    "andromeda-toggle": [
      {
        "table": "Toggle",
        "props": [
          {
            "name": "checked",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Controlled checked state; supplying it puts the switch in controlled mode."
          },
          {
            "name": "defaultChecked",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Initial checked state when uncontrolled."
          },
          {
            "name": "onCheckedChange",
            "type": "(next: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Handler called with the next checked state whenever the switch toggles."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional text rendered beside the switch and linked to it via htmlFor."
          },
          {
            "name": "disabled",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Disables interaction and dims the switch."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the visual track."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper element."
          },
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Id for the input; falls back to a generated id and links the label."
          }
        ]
      }
    ],
    "andromeda-tooltip": [
      {
        "table": "Tooltip",
        "props": [
          {
            "name": "label",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "Content shown in the tooltip."
          },
          {
            "name": "position",
            "type": "'top'|'bottom'",
            "optional": true,
            "default": "'top'",
            "description": "One of: top, bottom."
          },
          {
            "name": "portal",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the label into <body> instead of the trigger."
          },
          {
            "name": "children",
            "type": "React.ReactNode",
            "optional": false,
            "default": "",
            "description": "The trigger element."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Additional CSS classes applied to the root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles applied to the root element."
          }
        ]
      }
    ],
    "andromeda-trend-chart": [
      {
        "table": "TrendSeries",
        "props": [
          {
            "name": "key",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Field in each data row holding this series' y-value."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Display name shown in the tooltip and legend chip."
          },
          {
            "name": "role",
            "type": "'baseline'|'live'|'context'|'threshold'",
            "optional": true,
            "default": "",
            "description": "Colour role in the Andromeda charts hierarchy; threshold also renders dashed."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Explicit override; prefer `role`."
          }
        ]
      },
      {
        "table": "TrendChart",
        "props": [
          {
            "name": "data",
            "type": "object[]",
            "optional": false,
            "default": "",
            "description": "Rows of chart data, one object per x-axis point."
          },
          {
            "name": "series",
            "type": "TrendSeries[]",
            "optional": false,
            "default": "",
            "description": "Series to plot, each bound to a data-row field by key."
          },
          {
            "name": "xKey",
            "type": "string",
            "optional": true,
            "default": "'t'",
            "description": "Field in each data row plotted along the x-axis."
          },
          {
            "name": "modes",
            "type": "Array<'line'|'area'|'bar'>",
            "optional": true,
            "default": "['area','bar']",
            "description": "Toggle appears when >1."
          },
          {
            "name": "defaultMode",
            "type": "'line'|'area'|'bar'",
            "optional": true,
            "default": "",
            "description": "Render mode selected on mount; defaults to the first entry in modes."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Heading shown at the top-left of the header."
          },
          {
            "name": "yLabel",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Uppercase mono axis caption, top-left."
          },
          {
            "name": "tooltipLabelFormatter",
            "type": "(label:any)=>string",
            "optional": true,
            "default": "",
            "description": "Formats the x value shown as the tooltip heading."
          },
          {
            "name": "valueFormatter",
            "type": "(value:any)=>string",
            "optional": true,
            "default": "",
            "description": "Formats each series value shown in the tooltip."
          },
          {
            "name": "xInterval",
            "type": "number",
            "optional": true,
            "default": "4",
            "description": "Number of x-axis ticks skipped between rendered labels."
          },
          {
            "name": "showLegend",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Render the toggleable legend row in the footer."
          },
          {
            "name": "showYAxis",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Reserve the left Y-axis tick gutter. Set false on compact cards where an external headline already states the magnitude, and the plot then fills its card content box edge-to-edge with no stray left inset (the Andromeda spacing rules)."
          },
          {
            "name": "domain",
            "type": "[number|string, number|string]",
            "optional": true,
            "default": "[0,'auto']",
            "description": "Y-axis domain, passed through to recharts. The default zero baseline is the honest one for most series. Pass `['auto','auto']` (or explicit bounds) when the measurement has a floor far from zero — a satisfaction score that only moves between 3.8 and 4.3 is a flat sliver on a 0-based axis. In `bar` mode the zero floor is kept whatever is passed: only the upper bound is honoured, because a bar read against a truncated baseline misstates every difference it draws."
          },
          {
            "name": "footerSlot",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Right side of the footer (custom controls)."
          },
          {
            "name": "height",
            "type": "number|'fill'",
            "optional": true,
            "default": "240",
            "description": "Plot height in px, or 'fill' to grow into a flex parent."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class applied to the root container element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the root container element."
          }
        ]
      }
    ],
    "andromeda-user-card": [
      {
        "table": "UserCard",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Shown as the card's primary label and used for the avatar initials."
          },
          {
            "name": "role",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Subtitle under the name (e.g. \"Flight Director\")."
          },
          {
            "name": "src",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Optional avatar image URL; falls back to initials when absent."
          },
          {
            "name": "status",
            "type": "'online'|'caution'|'fault'|'offline'",
            "optional": true,
            "default": "",
            "description": "Presence status shown as a dot on the avatar. Passed verbatim to Avatar, whose enum this is; any other value renders no dot."
          },
          {
            "name": "avatarSize",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Size of the avatar shown in the card."
          },
          {
            "name": "items",
            "type": "UserMenuItem[]",
            "optional": false,
            "default": "",
            "description": "Entries rendered in the popover menu."
          },
          {
            "name": "placement",
            "type": "'top'|'bottom'",
            "optional": true,
            "default": "'top'",
            "description": "Which side of the card the menu opens toward."
          },
          {
            "name": "align",
            "type": "'start'|'end'|'stretch'",
            "optional": true,
            "default": "'stretch'",
            "description": "How the panel aligns to the card; stretch matches its width."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the menu pre-opened (showcases / docs). Outside-click and Escape still dismiss it."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render pre-opened AND pinned; outside-click / Escape do not dismiss it. For showcases / docs where several popovers are shown open at once and one must not close the others."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "'User menu'",
            "description": "Accessible label for the trigger button and menu."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra class names for the card's root element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the card's root element."
          }
        ]
      }
    ],
    "andromeda-user-menu": [
      {
        "table": "UserMenuItem",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Stable key for the row, falling back to its array index."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Text shown on the menu item, rendered uppercase."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<IconProps>",
            "optional": true,
            "default": "",
            "description": "Icon component rendered before the label."
          },
          {
            "name": "onSelect",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handler called when the item is chosen; the menu closes after."
          },
          {
            "name": "destructive",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Renders the item in the destructive red color."
          },
          {
            "name": "type",
            "type": "'separator'",
            "optional": true,
            "default": "",
            "description": "Set to 'separator' to render a divider instead of an item."
          }
        ]
      },
      {
        "table": "UserMenu",
        "props": [
          {
            "name": "name",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Display name; passed to Avatar for the initial fallback."
          },
          {
            "name": "src",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Avatar image URL."
          },
          {
            "name": "status",
            "type": "'online'|'caution'|'fault'|'offline'",
            "optional": true,
            "default": "",
            "description": "Presence state; passed to Avatar for the status dot."
          },
          {
            "name": "avatarSize",
            "type": "'sm'|'md'|'lg'",
            "optional": true,
            "default": "'md'",
            "description": "Size of the trigger avatar."
          },
          {
            "name": "items",
            "type": "UserMenuItem[]",
            "optional": false,
            "default": "",
            "description": "The menu rows to render, including separators."
          },
          {
            "name": "placement",
            "type": "'top'|'bottom'",
            "optional": true,
            "default": "'bottom'",
            "description": "Whether the panel opens below or above the trigger."
          },
          {
            "name": "align",
            "type": "'start'|'end'",
            "optional": true,
            "default": "'end'",
            "description": "Which trigger edge the panel aligns to horizontally."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render the menu pre-opened (showcases / docs). Outside-click and Escape still dismiss it."
          },
          {
            "name": "staticOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Render pre-opened AND pinned; outside-click / Escape do not dismiss it. For showcases / docs where several popovers are shown open at once and one must not close the others."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "'User menu'",
            "description": "Accessible label for the trigger button and menu panel."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Class name applied to the wrapper element."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "",
            "description": "Inline styles merged onto the wrapper element."
          }
        ]
      }
    ],
    "andromeda-waveform": [
      {
        "table": "Waveform",
        "props": [
          {
            "name": "samples",
            "type": "number",
            "optional": true,
            "default": "120",
            "description": "Number of points sampled across the waveform."
          },
          {
            "name": "speed",
            "type": "number",
            "optional": true,
            "default": "0.6",
            "description": "Animation time-scale multiplier."
          },
          {
            "name": "amplitude",
            "type": "number",
            "optional": true,
            "default": "0.4",
            "description": "Peak height as a fraction of the SVG height."
          },
          {
            "name": "height",
            "type": "number",
            "optional": true,
            "default": "120",
            "description": "Fluid SVG height in pixels."
          },
          {
            "name": "color",
            "type": "string",
            "optional": true,
            "default": "tokens.color.text.primary",
            "description": "Polyline stroke color only."
          },
          {
            "name": "showBars",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether to render mirrored level bars."
          },
          {
            "name": "showCenterline",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether to render the dashed centre reference."
          },
          {
            "name": "paused",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Whether to hold the current or initial static frame."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Root element class name."
          },
          {
            "name": "style",
            "type": "React.CSSProperties",
            "optional": true,
            "default": "{}",
            "description": "Root element inline styles."
          }
        ]
      }
    ],
    "change-review": [
      {
        "table": "DiffLine",
        "props": [
          {
            "name": "kind",
            "type": "DiffLineKind",
            "optional": false,
            "default": "",
            "description": "Selects context, addition, deletion or folded-line rendering."
          },
          {
            "name": "text",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Line text, or newline-joined hidden lines when kind is fold."
          },
          {
            "name": "oldNo",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "First old-file line number shown for the line or fold; left out, the old side is blank."
          },
          {
            "name": "newNo",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "First new-file line number shown for the line or fold; left out, the new side is blank."
          },
          {
            "name": "marks",
            "type": "[number, number][]",
            "optional": true,
            "default": "",
            "description": "Zero-based text ranges emphasized within the line; left out, no text is emphasized."
          },
          {
            "name": "count",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Number of hidden lines represented by a fold; left out, the fold derives its count from the hidden text."
          }
        ]
      },
      {
        "table": "DiffHunk",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable hunk identifier that must be unique across all hunks in the files list."
          },
          {
            "name": "reason",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Explanation shown above the hunk decision controls."
          },
          {
            "name": "lines",
            "type": "DiffLine[]",
            "optional": false,
            "default": "",
            "description": "Diff lines rendered for the hunk."
          }
        ]
      },
      {
        "table": "DiffFile",
        "props": [
          {
            "name": "path",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "File path used as the collapsible file heading."
          },
          {
            "name": "hunks",
            "type": "DiffHunk[]",
            "optional": false,
            "default": "",
            "description": "Reviewable changes contained in the file."
          }
        ]
      },
      {
        "table": "ChangeReview",
        "props": [
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Sets the review heading; left out, the demo uses its sample title and host mode shows an empty heading, while passing it turns the demo off."
          },
          {
            "name": "checkSummary",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shows a check result below the heading; left out, the demo uses its sample result and host mode shows none, while passing it turns the demo off."
          },
          {
            "name": "files",
            "type": "DiffFile[]",
            "optional": true,
            "default": "",
            "description": "Supplies the files and hunks to review; left out, the demo uses sample changes, while passing it turns the demo off."
          },
          {
            "name": "onDecide",
            "type": "(hunkId: string, decision: HunkDecision | null) => void",
            "optional": true,
            "default": "",
            "description": "Reports keep, discard and cleared decisions while decisions are still tracked locally; left out, no decision updates are reported."
          },
          {
            "name": "onApply",
            "type": "(keptIds: string[]) => void",
            "optional": true,
            "default": "",
            "description": "Receives the kept hunk ids and makes the Apply control available outside the demo; left out, host reviews have no Apply control."
          },
          {
            "name": "onUndo",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles undoing an applied review and makes the receipt Undo control available outside the demo; left out, host receipts have no Undo control."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides review measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "code-panel": [
      {
        "table": "CodeMarker",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable marker identifier that must be unique within the markers list."
          },
          {
            "name": "lines",
            "type": "[number, number]",
            "optional": false,
            "default": "",
            "description": "Inclusive one-based line range attached to the note, clamped to the available code."
          },
          {
            "name": "note",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Annotation text shown for the marked range after streaming ends."
          }
        ]
      },
      {
        "table": "CodePanel",
        "props": [
          {
            "name": "filename",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Sets the path shown in the header and apply hint; left out, the demo uses a sample path and host mode shows no path, while passing it turns the demo off."
          },
          {
            "name": "language",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Sets the language label shown after writing finishes; left out, the demo uses TypeScript and host mode shows no language, while passing it turns the demo off."
          },
          {
            "name": "code",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Supplies the displayed source text; left out, the demo streams sample code and host mode shows no lines, while passing it turns the demo off."
          },
          {
            "name": "markers",
            "type": "CodeMarker[]",
            "optional": true,
            "default": "",
            "description": "Supplies annotated line ranges; left out, the demo uses sample notes and host mode shows none, while passing it turns the demo off."
          },
          {
            "name": "streaming",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Keeps the panel in its writing state and hides marker notes when true; left out, the demo animates writing and host code is treated as complete, while passing it turns the demo off."
          },
          {
            "name": "onCopy",
            "type": "(code: string) => void",
            "optional": true,
            "default": "",
            "description": "Receives the code after a successful clipboard copy; left out, copying still works without a notification."
          },
          {
            "name": "onApply",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles applying the code and makes the Apply control available outside the demo; left out, host panels have no Apply control."
          },
          {
            "name": "onUndo",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles undoing an apply and makes the Undo control available after applying; left out, host panels have no Undo control."
          },
          {
            "name": "applyLabel",
            "type": "string",
            "optional": true,
            "default": "'Apply'",
            "description": "Sets the apply button text."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides panel measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "curved-frame-carousel": [
      {
        "table": "CurvedFrameCarousel",
        "props": [
          {
            "name": "items",
            "type": "{src: string, alt: string, caption: string, focus?: number}[]",
            "optional": true,
            "default": "DEFAULT_ITEMS",
            "description": "Panels on the endless track, in order; each needs an image URL, alt text and a caption, plus an optional focus from 0 to 1 marking where in the image the subject sits vertically."
          },
          {
            "name": "eyebrow",
            "type": "string",
            "optional": true,
            "default": "'Portfolio'",
            "description": "Small uppercase kicker above the title, also used as the carousel label for screen readers."
          },
          {
            "name": "title",
            "type": "string",
            "optional": true,
            "default": "'Things we made on purpose'",
            "description": "Heading shown inside the frame's top band."
          },
          {
            "name": "subtitle",
            "type": "string",
            "optional": true,
            "default": "'Made with intent and a stubborn sense of proportion. Classical bones, modern finish, nothing decorative.'",
            "description": "Supporting line under the title, hidden on stages narrower than 480px."
          },
          {
            "name": "hint",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Optional input hint under the readout row; empty by default, and hidden on stages narrower than 480px when set."
          },
          {
            "name": "ctaPrimary",
            "type": "{label: string, href?: string, onClick?: () => void}",
            "optional": true,
            "default": "null",
            "description": "Optional filled call to action under the subtitle; renders a link when href is given and a button otherwise. Off by default."
          },
          {
            "name": "ctaSecondary",
            "type": "{label: string, href?: string, onClick?: () => void}",
            "optional": true,
            "default": "{label: 'Start a project'}",
            "description": "Outlined call to action. Sits beside ctaPrimary when both are set and is dropped on stages under 400px in that case; when it is the only action it always renders. Pass null for none."
          },
          {
            "name": "autoDrift",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Whether the track drifts on its own while idle."
          },
          {
            "name": "driftSpeed",
            "type": "number",
            "optional": true,
            "default": "26",
            "description": "Idle drift speed in pixels per second."
          },
          {
            "name": "panelAspect",
            "type": "number",
            "optional": true,
            "default": "2",
            "description": "Width divided by height of the panel crop visible in the middle of the frame; raise it for a wider, shorter centre band."
          },
          {
            "name": "edgeSlotRatio",
            "type": "number",
            "optional": true,
            "default": "0.78",
            "description": "Visible slot height at each stage edge, as a fraction of stage height. Lower it for a shallower curve, raise it toward 1 for a deeper one."
          },
          {
            "name": "flareRatio",
            "type": "number",
            "optional": true,
            "default": "0.28",
            "description": "Horizontal run of the flare per side, as a fraction of stage width. This is the strongest lever on the frame's character: low leaves a straight band with rounded corners, high turns the whole frame into one continuous sweep."
          },
          {
            "name": "flareTension",
            "type": "number",
            "optional": true,
            "default": "0.72",
            "description": "Character of the flare, as the bezier handle length over the run. Low turns early and bluntly, high hugs the straight line and the edge and puts the turn in the middle. 0.35 blunt, 0.5523 exact quarter ellipse, 0.72 squircle, 0.85 very taut."
          },
          {
            "name": "edgeRotation",
            "type": "number",
            "optional": true,
            "default": "24",
            "description": "Maximum edge foreshortening in degrees; 18 is barely there, 32 is the ceiling before panels read as folded paper."
          },
          {
            "name": "onIndexChange",
            "type": "(index: number, item: object) => void",
            "optional": true,
            "default": "",
            "description": "Called with the index and item whenever a new panel becomes the one nearest the slot centre."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          }
        ]
      }
    ],
    "diamond-grid": [
      {
        "table": "DiamondGrid",
        "props": [
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          },
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "1337",
            "description": "Determines grid placement, ignition positions and the complete loop sequence."
          }
        ]
      }
    ],
    "filter-menu": [
      {
        "table": "FilterOption",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Unique id used to track selection."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Text shown for the filter row."
          },
          {
            "name": "icon",
            "type": "React.ComponentType<{ size?: number }>",
            "optional": true,
            "default": "",
            "description": "Optional icon component rendered before the label."
          }
        ]
      },
      {
        "table": "FilterMenu",
        "props": [
          {
            "name": "filters",
            "type": "FilterOption[]",
            "optional": true,
            "default": "DEFAULT_FILTERS",
            "description": "The filter rows shown inside the open panel."
          },
          {
            "name": "defaultSelected",
            "type": "string[]",
            "optional": true,
            "default": "[]",
            "description": "Ids selected and applied on mount (uncontrolled)."
          },
          {
            "name": "onApply",
            "type": "(ids: string[]) => void",
            "optional": true,
            "default": "",
            "description": "Called with the applied filter ids when Apply is pressed."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "'Filters'",
            "description": "Text for the closed trigger button."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          }
        ]
      }
    ],
    "fluid-simulation-hero": [
      {
        "table": "FluidNavItem",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Link text shown in the top right nav."
          },
          {
            "name": "href",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Link target."
          }
        ]
      },
      {
        "table": "FluidTypography",
        "props": [
          {
            "name": "fontFamily",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Family for all UI text. Empty inherits the surrounding page font."
          },
          {
            "name": "displayFontFamily",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Family for the oversized watermark only."
          },
          {
            "name": "watermarkStyle",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Watermark slant, 'italic' or 'normal'. Families with no real italic get a browser faked one that leans the glyphs together, which watermarkTracking buys back."
          },
          {
            "name": "watermarkTracking",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Letter spacing on the watermark. At 460px every 0.01em is another 4.6px between glyphs."
          },
          {
            "name": "eyebrowSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the small label above the headline."
          },
          {
            "name": "headlineSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the h1. Any CSS length, clamp() included."
          },
          {
            "name": "headlineWeight",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Font weight of the h1."
          },
          {
            "name": "headlineTracking",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Letter spacing of the h1."
          },
          {
            "name": "headlineLeading",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Line height of the h1, unitless."
          },
          {
            "name": "sublineSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the paragraph under the headline."
          },
          {
            "name": "ctaSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the pill button label."
          },
          {
            "name": "hintSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the stir hint in the bottom right corner."
          },
          {
            "name": "wordmarkSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the top left wordmark."
          },
          {
            "name": "navSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the nav links."
          },
          {
            "name": "watermarkSize",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Font size of the watermark bleeding off the lower left corner."
          }
        ]
      },
      {
        "table": "FluidPalette",
        "props": [
          {
            "name": "ground",
            "type": "string[]",
            "optional": false,
            "default": "",
            "description": "Three background wash stops, painted at 155 degrees in the display shader."
          },
          {
            "name": "vignette",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Colour mixed into the corners of the wash."
          },
          {
            "name": "vignetteAlpha",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Vignette strength, 0 to 1."
          },
          {
            "name": "core",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Dye colour where density is highest."
          },
          {
            "name": "body",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Dye colour at working density."
          },
          {
            "name": "tail",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Dye colour in the thin trailing filaments."
          },
          {
            "name": "iridescenceA",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Thin film lip on the leading side of a filament."
          },
          {
            "name": "iridescenceB",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Thin film lip on the trailing side."
          },
          {
            "name": "iridescence",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Strength of both lips, 0 to 1."
          },
          {
            "name": "veil",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Colour the fluid pushes the headline toward as it passes over."
          },
          {
            "name": "veilMax",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Veil alpha ceiling, 0 to switch the veil off entirely. If you turn it on, 0.4 keeps the headline above 4.5:1."
          },
          {
            "name": "text",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Headline colour."
          },
          {
            "name": "textSoft",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Nav, eyebrow and sub line colour."
          },
          {
            "name": "watermark",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Colour of the oversized script watermark."
          },
          {
            "name": "pillBg",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Call to action background."
          },
          {
            "name": "pillFg",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Call to action label colour."
          }
        ]
      },
      {
        "table": "FluidAnchor",
        "props": [
          {
            "name": "x",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Horizontal position of the mass, 0 to 1 across the canvas."
          },
          {
            "name": "y",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Vertical position, 0 to 1, measured from the BOTTOM of the canvas."
          },
          {
            "name": "r",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Emitter orbit radius in short edge units. The visible mass ends up roughly three times this across."
          }
        ]
      },
      {
        "table": "FluidComposition",
        "props": [
          {
            "name": "wide",
            "type": "FluidAnchor",
            "optional": false,
            "default": "",
            "description": "Used from 768px of frame width up, where the type sits beside the mass."
          },
          {
            "name": "narrow",
            "type": "FluidAnchor",
            "optional": false,
            "default": "",
            "description": "Used below 768px, where the composition stacks with the mass on top."
          }
        ]
      },
      {
        "table": "FluidIntro",
        "props": [
          {
            "name": "duration",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Seconds the fluid takes to grow from one point into the resting mass. 0 opens on the settled composition instead."
          },
          {
            "name": "burst",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Outward kick on the ignition frame, as a multiple of the running spawner velocity."
          },
          {
            "name": "overshoot",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "How far past the resting radius the ring swells mid bloom before easing back. 1 is no overshoot."
          },
          {
            "name": "textDelay",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Seconds from mount before the first text element arrives."
          },
          {
            "name": "textStagger",
            "type": "number",
            "optional": false,
            "default": "",
            "description": "Seconds between one arriving text element and the next."
          }
        ]
      },
      {
        "table": "FluidSimulationHero",
        "props": [
          {
            "name": "headline",
            "type": "string[]",
            "optional": true,
            "default": "['Every pixel moves', 'like water']",
            "description": "Headline lines, rendered as a real h1."
          },
          {
            "name": "eyebrow",
            "type": "string",
            "optional": true,
            "default": "''",
            "description": "Small label above the headline. Empty by default, so nothing renders and the headline takes the top of the block; pass a string to bring it back."
          },
          {
            "name": "subline",
            "type": "string",
            "optional": true,
            "default": "'A live Navier Stokes surface...'",
            "description": "Paragraph under the headline."
          },
          {
            "name": "hint",
            "type": "string",
            "optional": true,
            "default": "'Drag anywhere to stir the surface'",
            "description": "Caption shown only to fine pointers with motion enabled."
          },
          {
            "name": "wordmark",
            "type": "string",
            "optional": true,
            "default": "'Fluid Simulation Hero'",
            "description": "Top left wordmark."
          },
          {
            "name": "watermark",
            "type": "string",
            "optional": true,
            "default": "'fluid'",
            "description": "Oversized script watermark bleeding off the lower left corner."
          },
          {
            "name": "navItems",
            "type": "FluidNavItem[]",
            "optional": true,
            "default": "NAV",
            "description": "Up to three nav links. Below 1024px all of them fold into a menu behind a button rather than any of them being dropped."
          },
          {
            "name": "wordmarkHref",
            "type": "string",
            "optional": true,
            "default": "'#'",
            "description": "Target of the top left wordmark link."
          },
          {
            "name": "ctaLabel",
            "type": "string",
            "optional": true,
            "default": "'Start a project'",
            "description": "Label of the pill button."
          },
          {
            "name": "onCtaClick",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Called when the pill button is pressed."
          },
          {
            "name": "palette",
            "type": "FluidPalette",
            "optional": true,
            "default": "PALETTE",
            "description": "The full colour set. This hero is light only; there is no dark variant to fall back to."
          },
          {
            "name": "typography",
            "type": "FluidTypography",
            "optional": true,
            "default": "TYPO",
            "description": "Fonts and the full type scale. fontFamily empty inherits the page font; displayFontFamily styles the watermark alone, and watermarkStyle must drop to 'normal' for any family with no real italic."
          },
          {
            "name": "composition",
            "type": "FluidComposition",
            "optional": true,
            "default": "COMPOSITION",
            "description": "Where the mass sits and how large it is, one anchor per frame width. `wide` hangs it in the upper right with the type beside it; `narrow` stacks, mass on top and type under. The switch is the same 768px the text block uses, read live, so a rotation or a window drag re-aims the composition with no remount."
          },
          {
            "name": "intro",
            "type": "FluidIntro",
            "optional": true,
            "default": "INTRO",
            "description": "The arrival. The fluid is ignited on the first frame and grows into the resting mass while the type lands on the same clock. Set duration to 0 to open on the settled composition with no bloom. Reduced motion skips the whole thing and gets the settled still."
          },
          {
            "name": "chromeInsetTop",
            "type": "string",
            "optional": true,
            "default": "'clamp(16px, 2.5vw, 32px)'",
            "description": "Distance from the top edge to the wordmark and nav."
          },
          {
            "name": "chromeInsetSide",
            "type": "string",
            "optional": true,
            "default": "'clamp(32px, 3.8vw, 48px)'",
            "description": "Distance from the left and right edges. Larger than the top on purpose, see the note at the destructure."
          },
          {
            "name": "simResolution",
            "type": "number",
            "optional": true,
            "default": "192",
            "description": "Velocity and pressure grid on the short edge. Lower is faster and softer."
          },
          {
            "name": "dyeResolution",
            "type": "number",
            "optional": true,
            "default": "640",
            "description": "Dye grid on the short edge, clamped to the canvas. This is the detail you actually see."
          },
          {
            "name": "curl",
            "type": "number",
            "optional": true,
            "default": "8",
            "description": "Vorticity confinement strength. Zero kills the filaments. Against this much injection it boils well before 50; the old 15 already frothed the mass instead of folding it."
          },
          {
            "name": "densityDissipation",
            "type": "number",
            "optional": true,
            "default": "0.975",
            "description": "Per frame dye decay, and the number the rest of the set is balanced against. Near 1 keeps structure alive for many seconds and turns the surface still; raise it without pulling spawnAmplification, spawnVelocity and splatRadius down with it and the mass sprawls across the frame."
          },
          {
            "name": "velocityDissipation",
            "type": "number",
            "optional": true,
            "default": "0.952",
            "description": "Per frame velocity decay."
          },
          {
            "name": "pressureIterations",
            "type": "number",
            "optional": true,
            "default": "12",
            "description": "Jacobi iterations per step. Fewer is faster and looser."
          },
          {
            "name": "splatRadius",
            "type": "number",
            "optional": true,
            "default": "0.0028",
            "description": "Injection radius as a fraction of the short edge. Wide, because a single pointer stroke is one point here rather than a whole source texture, and a fine one disappears against this dye decay."
          },
          {
            "name": "splatForce",
            "type": "number",
            "optional": true,
            "default": "5400",
            "description": "Velocity injected per unit of pointer travel."
          },
          {
            "name": "intensity",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Master multiplier on every splat and on the spawner, 0 to 1."
          },
          {
            "name": "normalEpsilon",
            "type": "number",
            "optional": true,
            "default": "0.005",
            "description": "Flat area guard in the surface normal pass. Larger softens the iridescent film, smaller sharpens and speckles it."
          },
          {
            "name": "iridescenceStrength",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Master multiplier over the palette's iridescence value. Zero removes the thin film entirely."
          },
          {
            "name": "spawnAmplification",
            "type": "number",
            "optional": true,
            "default": "0.03",
            "description": "Dye the spawner injects per frame. This is what holds the resting mass together with no pointer on screen; raise it and the mass gets denser, not bigger."
          },
          {
            "name": "spawnVelocity",
            "type": "number",
            "optional": true,
            "default": "27",
            "description": "Velocity the spawner injects per frame, in grid texels per second. This sets how fast the mass turns over, and it is the difference between a bloom of colour and something that throws filaments. It stays contained this high only because the dye is spent quickly; see densityDissipation."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          }
        ]
      }
    ],
    "magnetic-logo-cluster": [
      {
        "table": "MagneticLogoCluster",
        "props": [
          {
            "name": "icons",
            "type": "React.ReactNode[]",
            "optional": true,
            "default": "",
            "description": "Your logos or icons, cycled across the pack. Each one is rendered inside a square slot and scaled to fit, so inline SVG, an `<img>` or a whole component all work. Omit it to get the built-in placeholder mark."
          },
          {
            "name": "tints",
            "type": "string[]",
            "optional": true,
            "default": "[]",
            "description": "Colours applied as CSS `color` to each slot, picked per icon. Monochrome marks drawn with `currentColor` pick this up; leave it empty to keep your artwork's own colours. Ignored by the built-in mark, which carries its own palette ladder."
          },
          {
            "name": "count",
            "type": "number",
            "optional": true,
            "default": "150",
            "description": "How many icons make up the pack."
          },
          {
            "name": "seed",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Reshuffles the layout, sizes, entry bearings and drift. Same seed renders the same pack on server and client."
          },
          {
            "name": "layout",
            "type": "'diamond' | 'rect'",
            "optional": true,
            "default": "'diamond'",
            "description": "Pack silhouette. `diamond` is the rotated square with corners up/down/left/right; `rect` fills the container edge to edge."
          },
          {
            "name": "spreadX",
            "type": "number",
            "optional": true,
            "default": "0.47",
            "description": "Half-width of the pack, as a fraction of the container. Raise it to stretch the shape horizontally."
          },
          {
            "name": "spreadY",
            "type": "number",
            "optional": true,
            "default": "0.47",
            "description": "Half-height of the pack, as a fraction of the container."
          },
          {
            "name": "minIconSize",
            "type": "number",
            "optional": true,
            "default": "0.024",
            "description": "Smallest icon, as a fraction of the container width."
          },
          {
            "name": "maxIconSize",
            "type": "number",
            "optional": true,
            "default": "0.072",
            "description": "Largest icon, as a fraction of the container width."
          },
          {
            "name": "magnetRadius",
            "type": "number",
            "optional": true,
            "default": "0.42",
            "description": "How far the cursor's pull reaches, as a fraction of the container."
          },
          {
            "name": "magnetStrength",
            "type": "number",
            "optional": true,
            "default": "0.18",
            "description": "Peak displacement for an icon directly under the cursor, as a fraction of the container."
          },
          {
            "name": "curl",
            "type": "number",
            "optional": true,
            "default": "0.3",
            "description": "Mixes in a push perpendicular to the pull, giving the field a swirl instead of a straight-line tug. 0 is a pure radial magnet."
          },
          {
            "name": "drift",
            "type": "number",
            "optional": true,
            "default": "1",
            "description": "Multiplier on the idle floating motion. 0 holds the pack perfectly still once it lands."
          },
          {
            "name": "entryStagger",
            "type": "number",
            "optional": true,
            "default": "0.012",
            "description": "Seconds between each icon launching, so the pack converges in a wave rather than all at once."
          },
          {
            "name": "autoDemo",
            "type": "boolean",
            "optional": true,
            "default": "true",
            "description": "Runs one scripted cursor sweep across the pack after the entry settles, so a visitor who never moves their mouse still sees the magnetic interaction. Cancels the moment they move it themselves."
          },
          {
            "name": "ariaLabel",
            "type": "string",
            "optional": true,
            "default": "'A drifting cluster of logo marks'",
            "description": "Label for the cluster, which is exposed as a single decorative image to assistive tech."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes merged onto the outermost root element."
          }
        ]
      }
    ],
    "permission-scope": [
      {
        "table": "AccessRequest",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable request identifier that must be unique within the requests list."
          },
          {
            "name": "kind",
            "type": "AccessKind",
            "optional": false,
            "default": "",
            "description": "Selects the request wording, icon and scope choices."
          },
          {
            "name": "target",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Resource or command the agent wants to access."
          },
          {
            "name": "summary",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Short context shown above the reason; left out, the reason moves up with no summary."
          },
          {
            "name": "why",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Explanation shown for why the access is needed."
          },
          {
            "name": "pattern",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Initial editable pattern for always access; left out, a pattern is derived from kind and target."
          },
          {
            "name": "coverage",
            "type": "(pattern: string) => string",
            "optional": true,
            "default": "",
            "description": "Describes what an edited always-access pattern covers; left out, built-in coverage text is used."
          },
          {
            "name": "allowAlways",
            "type": "boolean",
            "optional": true,
            "default": "",
            "description": "Allows the always scope when true for non-secret requests; left out, always is allowed for every kind except secret."
          }
        ]
      },
      {
        "table": "PermissionScope",
        "props": [
          {
            "name": "requests",
            "type": "AccessRequest[]",
            "optional": true,
            "default": "",
            "description": "Supplies access requests shown one at a time; left out, the component plays its demo, while passing it turns the demo off."
          },
          {
            "name": "onDecide",
            "type": "(id: string, decision: AccessDecision) => void",
            "optional": true,
            "default": "",
            "description": "Reports an allow or deny decision while the receipt is still tracked locally; left out, no decisions are reported."
          },
          {
            "name": "onRevoke",
            "type": "(id: string) => void",
            "optional": true,
            "default": "",
            "description": "Reports revocation of chat or always access while the receipt still changes locally; left out, no revocations are reported."
          },
          {
            "name": "onReason",
            "type": "(id: string, text: string) => void",
            "optional": true,
            "default": "",
            "description": "Receives the explanation submitted after a denial while the receipt still changes locally; left out, no explanations are reported."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<PermissionScopeTuning>",
            "optional": true,
            "default": "",
            "description": "Overrides permission measurements, timing and motion values; left out, every value in PERMISSION_SCOPE_TUNING is used."
          }
        ]
      }
    ],
    "perspective-showcase-hero": [
      {
        "table": "ShowcaseItem",
        "props": [
          {
            "name": "src",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Image URL for the card."
          },
          {
            "name": "caption",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Editorial caption under the card, clamped to two lines."
          },
          {
            "name": "href",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Opened in a new tab when the centred card is activated."
          }
        ]
      },
      {
        "table": "PerspectiveShowcaseHero",
        "props": [
          {
            "name": "items",
            "type": "ShowcaseItem[]",
            "optional": true,
            "default": "DEFAULT_ITEMS",
            "description": "Cards in slot order; the loop wraps them endlessly. Clicking a side card centres it; clicking the centred card opens its href or fires onItemClick. Pass at least 5 items: the wrap ring is items.length * card pitch, so a shorter set is narrower than the stage and cards jump instead of looping. An empty array renders nothing."
          },
          {
            "name": "titleLine1",
            "type": "string",
            "optional": true,
            "default": "'Everything bends'",
            "description": "First title line, rendered in the ink color."
          },
          {
            "name": "titleLine2",
            "type": "string",
            "optional": true,
            "default": "'at the edges'",
            "description": "Second title line, rendered in the accent color."
          },
          {
            "name": "description",
            "type": "string",
            "optional": true,
            "default": "DEFAULT_DESCRIPTION",
            "description": "Paragraph shown beside the title, past the divider."
          },
          {
            "name": "hint",
            "type": "string",
            "optional": true,
            "default": "'Drag, scroll, or use the arrow keys'",
            "description": "Small helper line under the stage; empty string hides it."
          },
          {
            "name": "driftSpeed",
            "type": "number",
            "optional": true,
            "default": "14",
            "description": "Idle auto-drift speed in px per second; 0 disables the drift."
          },
          {
            "name": "zoom",
            "type": "number",
            "optional": true,
            "default": "1.4",
            "description": "Image scale while a card is flat at the centre; eases to 1 as it curls away."
          },
          {
            "name": "onItemClick",
            "type": "(item: ShowcaseItem, index: number) => void",
            "optional": true,
            "default": "",
            "description": "Called when the centred card is activated by click, Enter or Space."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Extra classes for the section root."
          }
        ]
      }
    ],
    "plan-runner": [
      {
        "table": "StepActivity",
        "props": [
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Activity action shown in the step trail."
          },
          {
            "name": "target",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "File, command or other activity target; left out, no target is shown."
          },
          {
            "name": "outcome",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Activity result shown at the row end; left out, no result is shown."
          },
          {
            "name": "tone",
            "type": "'neutral'|'success'|'red'",
            "optional": true,
            "default": "",
            "description": "Colors the activity result; left out, the neutral treatment is used."
          }
        ]
      },
      {
        "table": "Step",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable step identifier that must be unique within the steps list."
          },
          {
            "name": "text",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Plan instruction shown in the step row."
          },
          {
            "name": "status",
            "type": "StepStatus",
            "optional": true,
            "default": "",
            "description": "Supplies the step state in host-controlled runs; left out, the step starts upcoming."
          },
          {
            "name": "durationMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Supplies the completed duration and demo playback length; left out, the configured step playback length is used."
          },
          {
            "name": "addedReason",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Marks an agent-added step and explains why it was added; left out, no added-step marker or reason is shown."
          },
          {
            "name": "activity",
            "type": "StepActivity[]",
            "optional": true,
            "default": "",
            "description": "Supplies activity rows revealed beneath the step; left out, the step has no activity trail."
          }
        ]
      },
      {
        "table": "PlanRunner",
        "props": [
          {
            "name": "goal",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Sets the plan heading; left out, the demo uses its sample goal and host mode shows an empty heading, while passing it turns the demo off."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds muted text before the goal; left out, no prefix is shown, while passing it turns the demo off."
          },
          {
            "name": "steps",
            "type": "Step[]",
            "optional": true,
            "default": "",
            "description": "Supplies the editable or running plan; left out, the demo uses sample steps and host mode uses none, while passing it turns the demo off."
          },
          {
            "name": "doneLooksLike",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shows the completion criterion during review; left out, the demo uses sample criteria and host mode hides the section, while passing it turns the demo off."
          },
          {
            "name": "summary",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shows the completion summary when the plan finishes; left out, the demo uses a sample summary and host mode shows none, while passing it turns the demo off."
          },
          {
            "name": "phase",
            "type": "PlanPhase",
            "optional": true,
            "default": "",
            "description": "Controls the plan phase; left out, phase transitions are managed internally, while passing it turns the demo off."
          },
          {
            "name": "currentIndex",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Marks earlier steps done and the first non-skipped step at or after this zero-based index current; left out, the statuses supplied on steps are used, while passing it turns the demo off."
          },
          {
            "name": "autoStartSeconds",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Starts the review countdown when positive and onStart is available; left out, the demo uses its tuned delay and host mode does not auto-start, while passing it turns the demo off."
          },
          {
            "name": "onStart",
            "type": "(steps: Step[]) => void",
            "optional": true,
            "default": "",
            "description": "Receives the final nonblank steps and makes the Start control available outside the demo; left out, host reviews have no Start control."
          },
          {
            "name": "onRevise",
            "type": "(note: string) => void",
            "optional": true,
            "default": "",
            "description": "Receives a requested revision and makes the Revise control available outside the demo; left out, host reviews have no Revise control."
          },
          {
            "name": "onPause",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles pausing and makes the Pause control available while running; left out, host runs have no Pause control."
          },
          {
            "name": "onResume",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles resuming and makes the Resume control available while paused; left out, host pauses have no Resume control."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles stopping and makes the Stop control available while running; left out, host runs have no Stop control."
          },
          {
            "name": "onSkip",
            "type": "(id: string) => void",
            "optional": true,
            "default": "",
            "description": "Receives the current step id and makes its Skip control available outside the demo; left out, host runs have no Skip control."
          },
          {
            "name": "onStepsChange",
            "type": "(steps: Step[]) => void",
            "optional": true,
            "default": "",
            "description": "Receives edits, additions, removals and reordering; left out, plan edits remain local."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides plan measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "reasoning-trace": [
      {
        "table": "ThoughtStep",
        "props": [
          {
            "name": "headline",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Summary shown for the reasoning step."
          },
          {
            "name": "body",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Supporting explanation revealed when the trace is open; left out, only the headline is shown."
          },
          {
            "name": "sources",
            "type": "string[]",
            "optional": true,
            "default": "",
            "description": "Source labels shown beneath the explanation; left out, no sources are shown for the step."
          }
        ]
      },
      {
        "table": "ReasoningTrace",
        "props": [
          {
            "name": "steps",
            "type": "ThoughtStep[]",
            "optional": true,
            "default": "",
            "description": "Supplies the reasoning timeline; left out, host mode has no steps, while passing it turns the demo off."
          },
          {
            "name": "status",
            "type": "'thinking'|'done'|'stopped'",
            "optional": true,
            "default": "",
            "description": "Sets the trace state; left out, host mode is idle, while passing it turns the demo off."
          },
          {
            "name": "elapsedMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shows the thinking or stopped duration in milliseconds; left out, no duration is shown in host mode, while passing it turns the demo off."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds a label beside the trace status; left out, no label is shown, while passing it turns the demo off."
          },
          {
            "name": "defaultOpen",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Sets whether the reasoning steps start expanded."
          },
          {
            "name": "answer",
            "type": "React.ReactNode",
            "optional": true,
            "default": "",
            "description": "Renders answer content below the trace whenever it is not thinking; left out, host mode shows no answer, while passing it turns the demo off."
          },
          {
            "name": "onToggle",
            "type": "(open: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Reports expansion changes while open state remains local; left out, expansion changes are not reported."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles stopping and makes the stop control available while thinking; left out, host traces have no stop control."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides trace measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "source-rail": [
      {
        "table": "CitedSentence",
        "props": [
          {
            "name": "text",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Answer sentence shown in the claim text."
          },
          {
            "name": "cites",
            "type": "(string|number)[]",
            "optional": true,
            "default": "",
            "description": "Source ids attached as numbered citations; left out, the sentence is flagged as having no source."
          }
        ]
      },
      {
        "table": "CitedSource",
        "props": [
          {
            "name": "id",
            "type": "string|number",
            "optional": false,
            "default": "",
            "description": "Stable source identifier that must be unique within the sources list."
          },
          {
            "name": "title",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Source title shown in the rail and evidence pane."
          },
          {
            "name": "domain",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Source domain shown below its title."
          },
          {
            "name": "verdict",
            "type": "Verdict",
            "optional": true,
            "default": "",
            "description": "Labels cited evidence as supporting, partial or contradictory; left out, no verdict tag is shown."
          },
          {
            "name": "quote",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Passage shown when the source backs a claim; left out, a cited source says that no passage was provided."
          },
          {
            "name": "highlight",
            "type": "[number, number][]",
            "optional": true,
            "default": "",
            "description": "Zero-based ranges emphasized within the passage; left out, no passage text is emphasized."
          },
          {
            "name": "locator",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Page or section locator shown below the passage; left out, no locator is shown."
          },
          {
            "name": "href",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Absolute HTTP or HTTPS address used by the Open action; left out or invalid, Open appears only when onOpenSource is passed."
          }
        ]
      },
      {
        "table": "ActiveClaim",
        "props": [
          {
            "name": "sentence",
            "type": "number|null",
            "optional": false,
            "default": "",
            "description": "Zero-based sentence index, or null to open a source that no sentence cites."
          },
          {
            "name": "source",
            "type": "string|number",
            "optional": false,
            "default": "",
            "description": "Id of the source selected in the rail."
          }
        ]
      },
      {
        "table": "SourceRail",
        "props": [
          {
            "name": "question",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Sets the heading above the answer; left out, the demo uses its sample question and host mode falls back to Answer, while passing it turns the demo off."
          },
          {
            "name": "sentences",
            "type": "CitedSentence[]",
            "optional": true,
            "default": "",
            "description": "Supplies answer sentences and citation links; left out, the demo uses sample claims and host mode shows no answer text, while passing it turns the demo off."
          },
          {
            "name": "sources",
            "type": "CitedSource[]",
            "optional": true,
            "default": "",
            "description": "Supplies source rows and evidence; left out, the demo uses sample sources and host mode shows none, while passing it turns the demo off."
          },
          {
            "name": "active",
            "type": "ActiveClaim|null",
            "optional": true,
            "default": "",
            "description": "Controls the selected claim or source, with null closing the evidence pane; left out, selection is managed internally, while passing it turns the demo off."
          },
          {
            "name": "defaultActive",
            "type": "ActiveClaim|null",
            "optional": true,
            "default": "",
            "description": "Sets the initial uncontrolled selection; left out, host mode selects the first valid cited claim, while passing it turns the demo off."
          },
          {
            "name": "onActiveChange",
            "type": "(active: ActiveClaim | null) => void",
            "optional": true,
            "default": "",
            "description": "Reports claim and source selection changes; left out, uncontrolled selection still works locally."
          },
          {
            "name": "onOpenSource",
            "type": "(source: CitedSource) => void",
            "optional": true,
            "default": "",
            "description": "Handles the Open action and makes it available without a valid href; left out, Open requires a valid source href."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides rail measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "token-stream": [
      {
        "table": "TokenStream",
        "props": [
          {
            "name": "markdown",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Supplies the answer parsed and revealed as Markdown; left out, the demo uses sample text and host mode uses an empty answer, while passing it turns the demo off."
          },
          {
            "name": "status",
            "type": "TokenStreamStatus",
            "optional": true,
            "default": "",
            "description": "Controls waiting, writing, done or stopped presentation; left out, host mode infers done from nonempty Markdown and waiting otherwise, while passing it turns the demo off."
          },
          {
            "name": "waitingPhrases",
            "type": "string[]",
            "optional": true,
            "default": "",
            "description": "Supplies rotating work messages before the answer; left out, the demo uses sample messages and host mode shows none, while passing it turns the demo off."
          },
          {
            "name": "wordsPerSecond",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Sets a positive reveal speed; left out or nonpositive, the tuned word timing is used."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds metadata text to the answer header; left out, no label is shown, while passing it turns the demo off."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles stopping and makes the stop control available during host writing; left out, host streams have no stop control."
          },
          {
            "name": "onContinue",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles continuing and makes the Continue control available after a host stop; left out, host stopped answers have no Continue control."
          },
          {
            "name": "onRetry",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles retrying and makes retry controls available in host mode; left out, host answers have no retry controls."
          },
          {
            "name": "onFeedback",
            "type": "(value: 'up'|'down'|null) => void",
            "optional": true,
            "default": "",
            "description": "Reports the current rating while rating state remains local; left out, rating controls still update locally."
          },
          {
            "name": "elapsedMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shows how long a host answer took in milliseconds; left out, no host duration is shown, while passing it turns the demo off."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides stream measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ],
    "tool-ledger": [
      {
        "table": "Action",
        "props": [
          {
            "name": "id",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Stable action identifier that must be unique within its list."
          },
          {
            "name": "kind",
            "type": "ActionKind",
            "optional": false,
            "default": "",
            "description": "Selects the tool icon and action treatment."
          },
          {
            "name": "label",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Present-tense action text used while queued or running."
          },
          {
            "name": "doneLabel",
            "type": "string",
            "optional": false,
            "default": "",
            "description": "Past-tense action text used after the action settles."
          },
          {
            "name": "target",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "File, query, command or URL shown after the action label; left out, no target is shown."
          },
          {
            "name": "outcome",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Result summary shown at the row end; left out, no result summary is shown."
          },
          {
            "name": "tone",
            "type": "'neutral'|'success'|'failed'",
            "optional": true,
            "default": "",
            "description": "Colors a settled action that did not fail; left out, the neutral treatment is used."
          },
          {
            "name": "diff",
            "type": "{added: number, removed: number}",
            "optional": true,
            "default": "",
            "description": "Added and removed counts shown instead of outcome; left out, outcome is used when present."
          },
          {
            "name": "durationMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Action duration shown after it settles; left out, no duration is shown."
          },
          {
            "name": "status",
            "type": "ActionStatus",
            "optional": false,
            "default": "",
            "description": "Sets whether the action is queued, running, done, failed or stopped."
          },
          {
            "name": "input",
            "type": "Record<string, string>",
            "optional": true,
            "default": "",
            "description": "Tool input fields shown in the expandable details; left out, no input section is shown."
          },
          {
            "name": "output",
            "type": "string[]",
            "optional": true,
            "default": "",
            "description": "Tool output lines previewed in the expandable details; left out, no output section is shown."
          },
          {
            "name": "outputTotal",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Total output line count used when output is a preview; left out, the supplied output length is used."
          },
          {
            "name": "children",
            "type": "Action[]",
            "optional": true,
            "default": "",
            "description": "Nested actions shown beneath this action; left out, the action is rendered as a leaf."
          },
          {
            "name": "parallelGroup",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Groups adjacent actions with the same value on a shared parallel rail; left out, the action is shown sequentially."
          }
        ]
      },
      {
        "table": "ToolLedger",
        "props": [
          {
            "name": "actions",
            "type": "Action[]",
            "optional": true,
            "default": "",
            "description": "Supplies the tool action tree; left out, host mode has no actions, while passing it turns the demo off."
          },
          {
            "name": "status",
            "type": "RunStatus",
            "optional": true,
            "default": "",
            "description": "Sets the overall run state; left out, it is inferred from the actions, while passing it turns the demo off."
          },
          {
            "name": "elapsedMs",
            "type": "number",
            "optional": true,
            "default": "",
            "description": "Shows the run duration in milliseconds; left out, no host duration is shown, while passing it turns the demo off."
          },
          {
            "name": "label",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds text beside the ledger heading; left out, only the default heading is shown in host mode, while passing it turns the demo off."
          },
          {
            "name": "summary",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Shows a result row after a completed run; left out, no result row is shown in host mode, while passing it turns the demo off."
          },
          {
            "name": "defaultCollapsed",
            "type": "boolean",
            "optional": true,
            "default": "false",
            "description": "Sets whether the action list starts collapsed."
          },
          {
            "name": "onActionToggle",
            "type": "(id: string, expanded: boolean) => void",
            "optional": true,
            "default": "",
            "description": "Reports action detail expansion changes while expansion remains local; left out, toggles are not reported."
          },
          {
            "name": "onStop",
            "type": "() => void",
            "optional": true,
            "default": "",
            "description": "Handles stopping and makes the stop control available during a host run; left out, host runs have no stop control."
          },
          {
            "name": "className",
            "type": "string",
            "optional": true,
            "default": "",
            "description": "Adds classes to the outermost root; left out, only the built-in classes are used."
          },
          {
            "name": "tuning",
            "type": "Partial<Tuning>",
            "optional": true,
            "default": "",
            "description": "Overrides ledger measurements, timing and motion values; left out, every value in TUNING is used."
          }
        ]
      }
    ]
  }
}
