[
  {
    "concept": "Abstract controlled value.",
    "name": "ValueProp<T = string>",
    "usedBy": [
      "CheckboxGroup",
      "Upload",
      "Cascader",
      "TreeSelect",
      "Tabs",
      "SearchSelect"
    ],
    "values": [
      "generic"
    ]
  },
  {
    "concept": "Abstract uncontrolled initial value.",
    "name": "DefaultValueProp<T = string>",
    "usedBy": [
      "CheckboxGroup",
      "Upload",
      "Cascader",
      "TreeSelect",
      "Tabs"
    ],
    "values": [
      "generic"
    ]
  },
  {
    "concept": "Callback for abstract value changes. DOM events continue to use onChange.",
    "name": "OnValueChangeProp<T = string>",
    "usedBy": [
      "CheckboxGroup",
      "Upload",
      "Cascader",
      "TreeSelect",
      "Transfer",
      "settings pickers"
    ],
    "values": [
      "(value: T) => void"
    ]
  },
  {
    "concept": "Disclosure state.",
    "name": "OpenProp / DefaultOpenProp / OnOpenChangeProp",
    "usedBy": [
      "Dialog",
      "Sheet",
      "Popover"
    ],
    "values": [
      "boolean",
      "(open: boolean) => void"
    ]
  },
  {
    "concept": "Shared public size names.",
    "name": "SizeProp",
    "notes": "Component-specific subsets must be documented. Old alias small is sm.",
    "usedBy": [
      "Button",
      "Steps",
      "Switch"
    ],
    "values": [
      "xs",
      "sm",
      "md",
      "lg"
    ]
  },
  {
    "concept": "Semantic status/color intent.",
    "name": "ToneProp",
    "notes": "Status values belong in tone, not variant.",
    "usedBy": [
      "Badge",
      "Alert"
    ],
    "values": [
      "default",
      "success",
      "warning",
      "destructive",
      "info",
      "muted",
      "neutral"
    ]
  },
  {
    "concept": "Shared layout gap scale.",
    "name": "GapProp",
    "notes": "The single shared gap scale on Flex — the one layout primitive (default direction=\"row\"; use direction=\"col\" for vertical rhythm; these replaced the removed Stack/Inline).",
    "usedBy": [
      "Flex"
    ],
    "values": [
      "xs",
      "sm",
      "md",
      "lg",
      "xl"
    ]
  },
  {
    "concept": "Primary heading text.",
    "name": "TitleProp",
    "usedBy": [
      "PageContainer",
      "PageHeader",
      "EmptyState",
      "Dialog"
    ],
    "values": [
      "React.ReactNode"
    ]
  },
  {
    "concept": "Page/subtree density.",
    "name": "DensityProp",
    "usedBy": [
      "PageContainer"
    ],
    "values": [
      "compact",
      "default",
      "comfortable"
    ]
  },
  {
    "concept": "Named whole-page SHELL contract for CenteredShell — the page measure, section rhythm, chrome flatness and hero heading tier, all owned by component tokens.",
    "name": "CenteredShellPresetProp",
    "notes": "public-landing is the PUBLIC marketing/product landing geometry: one 67.5rem measure shared by the header bar, the centred column and the footer, the section rhythm, flat elevation-free cards and the hero h1 tier. \"default\" emits NO data-preset at all, so the existing shell box is untouched. Pair with `Flex hideBelow`/`hideFrom` for header region visibility — a landing must never own a page-local media query or a max-width wrapper.",
    "usedBy": [
      "CenteredShell"
    ],
    "values": [
      "default",
      "public-landing"
    ]
  },
  {
    "concept": "Named collection contract for a table — how a dense collection behaves when its container gets narrow.",
    "name": "TablePresetProp",
    "notes": "action-collection swaps the desktop intrinsic column widths for table-layout: fixed + the token-owned column PRIORITY measures below `collapseBelow`, so a five-column approval queue keeps every column — including row actions — inside a 390px frame with no page-local CSS, no hidden column and no horizontal scroll. It changes the SIZING model only: no display change, no role rewriting, no card transformation, so table semantics and screen-reader navigation are identical at every width. ONE contract, two entry points: the `Table` primitive (mark `priority` on each TableHead/TableCell yourself) and the TanStack `DataTable` (mark `priority` on the ColumnDef; it stamps both cells for you, and additionally releases the surface's `--table-surface-min-inline-size` floor). Both read the same `--table-action-collection-*` tokens — there is no parallel DataTable family.",
    "usedBy": [
      "Table",
      "DataTable"
    ],
    "values": [
      "default",
      "action-collection"
    ]
  },
  {
    "concept": "Relative importance of a table column, used by the action-collection preset to allocate the narrow-frame measure.",
    "name": "TableColumnPriorityProp",
    "notes": "On the raw `Table`, set it on BOTH the TableHead and the TableCell of a column; on `DataTable` set it once on the `ColumnDef` and it is stamped onto the <th> and every <td>. `actions` reserves its measure first so the row-action affordance can never be pushed outside the viewport; a column with no priority takes the remaining space (the free-text column).",
    "usedBy": [
      "Table",
      "DataTable"
    ],
    "values": [
      "primary",
      "secondary",
      "meta",
      "actions"
    ]
  },
  {
    "concept": "Named hosted-identity FLOW MEASURE for the auth CenteredShell (`variant=\"auth\"`) — the card max-width plus the desktop and mobile page gutters, all owned by component tokens.",
    "name": "AuthShellPresetProp",
    "notes": "Orthogonal to the auth CenteredShell's `variant` (which owns control density + heading size) and applied after it, so `variant=\"auth-canonical\" preset=\"device-authorization\"` composes. device-authorization = 380px card / 5px inline gutter at 390; context-selection = 25rem card, edge-to-edge on mobile. Selecting a preset REPLACES any consumer-side --auth-shell-card-max-width override — a page-local width is the anti-pattern these presets exist to remove.",
    "usedBy": [
      "CenteredShell"
    ],
    "values": [
      "default",
      "device-authorization",
      "context-selection"
    ]
  },
  {
    "concept": "Avatar geometry — WHAT the identity mark represents: a person or an entity. Deliberately NOT the control ShapeProp (default|pill|sharp), whose `sharp` is --radius-sharp: 0 and cannot express the rounded rect an entity mark needs.",
    "name": "AvatarShapeProp",
    "notes": "circle (default, inert) = the round --radius-pill person avatar on the muted surface; square = the entity-header organization/service mark — a compact rounded square on the brand surface driven by --avatar-square-{radius,size,background,foreground}. Choose by meaning, never by look: a className=\"rounded-md bg-primary\" override on the call site is the anti-pattern this prop removes.",
    "usedBy": [
      "Avatar"
    ],
    "values": [
      "circle",
      "square"
    ]
  }
]
