@hirobius/design-system 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CONSUMING.md +150 -0
  2. package/DESIGN.md +220 -0
  3. package/README.md +14 -2
  4. package/dist/chunks/{activity-feed-C8_e-Btq.js → activity-feed-DIMeUJpW.js} +4907 -2912
  5. package/dist/chunks/{form-DnGRy27o.js → form-BvNNnJ0t.js} +2 -2
  6. package/dist/form.js +5 -5
  7. package/dist/hirobius-ui.js +1986 -2529
  8. package/dist/icons.js +53 -0
  9. package/dist/manifest.js +15 -14
  10. package/dist/patterns.js +292 -101
  11. package/dist/static.css +3 -3
  12. package/dist/styles.css +1 -1
  13. package/dist/tokens.css +1 -1
  14. package/dist/types/src/app/components/alert-dialog.d.ts +9 -1
  15. package/dist/types/src/app/components/alert.d.ts +4 -0
  16. package/dist/types/src/app/components/avatar.d.ts +4 -0
  17. package/dist/types/src/app/components/badge.d.ts +4 -0
  18. package/dist/types/src/app/components/box.d.ts +5 -0
  19. package/dist/types/src/app/components/breadcrumb.d.ts +4 -0
  20. package/dist/types/src/app/components/button-group.d.ts +4 -0
  21. package/dist/types/src/app/components/button.d.ts +3 -0
  22. package/dist/types/src/app/components/card.d.ts +9 -0
  23. package/dist/types/src/app/components/checkbox.d.ts +4 -0
  24. package/dist/types/src/app/components/combobox.d.ts +10 -0
  25. package/dist/types/src/app/components/command-palette.d.ts +3 -1
  26. package/dist/types/src/app/components/container.d.ts +5 -0
  27. package/dist/types/src/app/components/context-menu.d.ts +25 -2
  28. package/dist/types/src/app/components/data-table-section.d.ts +45 -0
  29. package/dist/types/src/app/components/destructive-section.d.ts +32 -0
  30. package/dist/types/src/app/components/dialog.d.ts +20 -2
  31. package/dist/types/src/app/components/disclosure.d.ts +3 -0
  32. package/dist/types/src/app/components/divider.d.ts +4 -0
  33. package/dist/types/src/app/components/empty-state.d.ts +4 -0
  34. package/dist/types/src/app/components/field.d.ts +4 -0
  35. package/dist/types/src/app/components/form-actions.d.ts +26 -0
  36. package/dist/types/src/app/components/grid.d.ts +4 -0
  37. package/dist/types/src/app/components/hds-tooltip.d.ts +14 -2
  38. package/dist/types/src/app/components/hover-card.d.ts +16 -1
  39. package/dist/types/src/app/components/icon.d.ts +4 -0
  40. package/dist/types/src/app/components/inline-link.d.ts +4 -0
  41. package/dist/types/src/app/components/input.d.ts +5 -0
  42. package/dist/types/src/app/components/kbd.d.ts +3 -0
  43. package/dist/types/src/app/components/menu.d.ts +26 -2
  44. package/dist/types/src/app/components/metric-tiles.d.ts +40 -0
  45. package/dist/types/src/app/components/page-header.d.ts +34 -0
  46. package/dist/types/src/app/components/pagination.d.ts +3 -0
  47. package/dist/types/src/app/components/popover.d.ts +14 -2
  48. package/dist/types/src/app/components/progress.d.ts +4 -0
  49. package/dist/types/src/app/components/radio.d.ts +5 -0
  50. package/dist/types/src/app/components/select.d.ts +16 -0
  51. package/dist/types/src/app/components/skeleton.d.ts +4 -0
  52. package/dist/types/src/app/components/slider.d.ts +3 -0
  53. package/dist/types/src/app/components/spinner.d.ts +4 -0
  54. package/dist/types/src/app/components/stack.d.ts +4 -0
  55. package/dist/types/src/app/components/stat.d.ts +4 -0
  56. package/dist/types/src/app/components/status-tile.d.ts +4 -0
  57. package/dist/types/src/app/components/table.d.ts +36 -4
  58. package/dist/types/src/app/components/tabs.d.ts +4 -0
  59. package/dist/types/src/app/components/tag.d.ts +3 -0
  60. package/dist/types/src/app/components/text.d.ts +4 -0
  61. package/dist/types/src/app/components/textarea.d.ts +3 -0
  62. package/dist/types/src/app/components/toast.d.ts +4 -0
  63. package/dist/types/src/app/components/toggle.d.ts +4 -0
  64. package/dist/types/src/app/components/tooltip.d.ts +1 -1
  65. package/dist/types/src/app/components/visually-hidden.d.ts +3 -0
  66. package/dist/types/src/app/context/hds-portal.d.ts +52 -0
  67. package/dist/types/src/app/context/hds-theme.d.ts +10 -0
  68. package/dist/types/src/app/data/manifest-types.d.ts +27 -0
  69. package/dist/types/src/app/design-system/generated-token-refs.d.ts +2 -0
  70. package/dist/types/src/icons.d.ts +13 -0
  71. package/dist/types/src/index.d.ts +20 -1
  72. package/dist/types/src/patterns.d.ts +5 -0
  73. package/dist/variables.css +4 -0
  74. package/docs/CONSUMING.md +758 -0
  75. package/hirobius.tokens.json +17 -0
  76. package/llms.txt +261 -0
  77. package/package.json +21 -4
  78. package/public/hds-manifest.json +1545 -89
  79. package/public/llms/components.txt +1090 -0
  80. package/public/llms/layout.txt +54 -0
  81. package/public/llms/scroll.txt +22 -0
  82. package/public/llms/tokens.txt +32 -0
  83. package/public/llms-full.txt +1561 -0
  84. package/public/llms.txt +261 -0
  85. package/src/app/data/component-api.json +6156 -0
@@ -0,0 +1,1090 @@
1
+ # Hirobius Design System - components slice
2
+
3
+ See `public/llms.txt` for the index. Generated from the same sections as llms.txt.
4
+
5
+ ## Component Inventory (Source Of Truth)
6
+
7
+ This file intentionally does not embed the full component list to avoid duplication and excess context.
8
+
9
+ - Canonical inventory + metadata: read `public/hds-manifest.json`.
10
+ - If you see references to `public/manifest.json`, treat it as an optional alias; in this repo prefer `public/hds-manifest.json`.
11
+
12
+ ## Component API (Source Of Truth)
13
+
14
+ This file intentionally does not embed prop tables or long-form API docs.
15
+
16
+ - Detailed prop types, unions, defaults, and descriptions: read `src/app/data/component-api.json`.
17
+ - Runtime behavior: read the actual component source under `src/app/components/` (and associated styles).
18
+
19
+ ## Component Props Digest
20
+
21
+ Compact: name, first line of description, then prop: type = default. Full detail in `src/app/data/component-api.json`.
22
+
23
+ ### ActivityFeed
24
+ ActivityFeed — chronological system event log. Renders a list of activity events using white space as the sole separator. No dividers, no borders between items…
25
+ - events: ActivityEvent[] = [ { id: 'evt-001', title: 'File Uploade…
26
+
27
+ ### Alert
28
+ Alert - compact feedback surface with contextual severity.
29
+ - children: ReactNode
30
+ - title: string
31
+ - tone: 'success' | 'danger' | 'warning' | 'info' = info
32
+
33
+ ### AlertDialog
34
+ AlertDialog root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.
35
+ - children: React.ReactNode
36
+ - defaultOpen: boolean
37
+ - onOpenChange: ((open: boolean) => void)
38
+ - open: boolean
39
+
40
+ ### AspectRatio
41
+ Locks its single child to the given width-to-height `ratio` so media reserves its box up front and never causes layout shift while it loads.
42
+ - asChild: boolean
43
+ - ratio: number = 1
44
+
45
+ ### AssetImg
46
+ AssetImg - responsive asset frame with fallback placeholder handling. Contexts: default, lightbox, and detail.
47
+ - alt: string
48
+ - className: string
49
+ - context: 'default' | 'lightbox' | 'detail' = default
50
+ - draggable: boolean = false
51
+ - expandable: boolean = true
52
+ - expandLabel: string
53
+ - isDark: boolean = false
54
+ - loading: "lazy" | "eager" = lazy
55
+ - naturalHeight: number
56
+ - naturalWidth: number
57
+ - onClick: ((e: MouseEvent<Element, MouseEvent>) => void)
58
+ - onMouseDown: ((e: MouseEvent<Element, MouseEvent>) => void)
59
+ - onMouseLeave: ((e: MouseEvent<Element, MouseEvent>) => void)
60
+ - onMouseMove: ((e: MouseEvent<Element, MouseEvent>) => void)
61
+ - onMouseUp: ((e: MouseEvent<Element, MouseEvent>) => void)
62
+ - src: string
63
+ - style: CSSProperties = {}
64
+ - title: string
65
+
66
+ ### Avatar
67
+ Circular avatar. Renders the image when available, else initials from `alt`.
68
+ - alt: string
69
+ - initials: string
70
+ - size: "sm" | "md" | "lg" | null
71
+ - src: string
72
+
73
+ ### AvatarGroup
74
+ Renders up to `max` overlapping avatars followed by a `+N` overflow chip.
75
+ - children: ReactNode
76
+ - max: number
77
+ - size: "sm" | "md" | "lg" | null
78
+
79
+ ### Badge
80
+ Compact metadata/status chip. Tone is the only styling input.
81
+ - as: ElementType<any, keyof IntrinsicElements> = span
82
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | "inProgress" | null
83
+
84
+ ### Bleed
85
+ Bleed — controlled negative-margin full-bleed within a padded container. Every Layout reference: https://every-layout.dev/layouts/the-stack/ (bleed is the inve…
86
+ - amount: 'tight' | 'normal' | 'inset' | 'spacious' = normal
87
+ - as: ElementType<any, keyof IntrinsicElements> = div
88
+ - axis: 'x' | 'y' | 'both' = x
89
+ - children: ReactNode
90
+ - className: string
91
+ - style: CSSProperties
92
+
93
+ ### Blockquote
94
+ A quoted passage; pass `cite` for the source URL and `attribution` for a byline.
95
+ - attribution: ReactNode
96
+ - size: "sm" | "md" | "lg" | null
97
+
98
+ ### Box
99
+ Box — polymorphic layout primitive with a token-first `sx` engine. `sx` is a deliberate SUBSET of MUI's sx — not all of CSS-in-JS is a feature: - Spacing short…
100
+ - as: ElementType<any, keyof IntrinsicElements> = div
101
+ - children: ReactNode
102
+ - sx: SxObject
103
+
104
+ ### Breadcrumb
105
+ Breadcrumb trail. Links route through the HDS router seam (plain anchors with no router, client-side nav when a router adapter is provided). The final item is …
106
+ - items: BreadcrumbItem[]
107
+ - label: string = Breadcrumb
108
+
109
+ ### Button
110
+ Triggers an action when activated.
111
+ - asChild: boolean = false
112
+ - disabled: boolean
113
+ - iconLeft: ReactNode
114
+ - iconOnly: boolean = false
115
+ - iconRight: ReactNode
116
+ - label: string
117
+ - loading: boolean = false
118
+ - size: "sm" | "md" | "lg" | null
119
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | null
120
+ - variant: "primary" | "secondary" | "tertiary" | null
121
+
122
+ ### ButtonGroup
123
+ Groups Button (or button-like) children into a single attached segment.
124
+ - orientation: "horizontal" | "vertical" | null
125
+
126
+ ### Calendar
127
+ Renders an accessible month grid; compose it inside a Popover for the date inputs.
128
+
129
+ ### Callout
130
+ Tone-driven side-rule callout for status, quotes, hypotheses.
131
+ - italic: boolean = false
132
+ - tone: 'accent' | 'info' | 'success' | 'warning' | 'danger' = info
133
+
134
+ ### Card
135
+ Tagged per-export, not on the file block: this module exports eight components and a file-level @figma would hand all eight this one node.
136
+ - as: ElementType<any, keyof IntrinsicElements>
137
+ - bordered: boolean = false
138
+ - gap: GapOption = tight
139
+ - noPadding: boolean = false
140
+ - padding: PaddingOption = component
141
+ - tone: 'neutral' | 'danger' | 'success' | 'warning' | 'info' = neutral
142
+ - variant: 'default' | 'accent' = default
143
+
144
+ ### CardBody
145
+ Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §"Card Anatomy"). Status, progress, and metadata are layout-bearing — th…
146
+
147
+ ### CardDescription
148
+ Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §"Card Anatomy"). Status, progress, and metadata are layout-bearing — th…
149
+
150
+ ### CardFooter
151
+ Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §"Card Anatomy"). Status, progress, and metadata are layout-bearing — th…
152
+
153
+ ### CardHeader
154
+ Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §"Card Anatomy"). Status, progress, and metadata are layout-bearing — th…
155
+ - metadata: ReactNode
156
+
157
+ ### CardMetric
158
+ Card.Metric — one uppercase label, a large value and an optional sub-line inside a Card.
159
+ - label: ReactNode
160
+ - sub: ReactNode
161
+ - tone: 'neutral' | 'danger' | 'success' | 'warning' | 'info' = neutral
162
+ - value: ReactNode
163
+
164
+ ### CardProgress
165
+ Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §"Card Anatomy"). Status, progress, and metadata are layout-bearing — th…
166
+ - label: ReactNode
167
+ - max: number = 100
168
+ - tone: 'neutral' | 'danger' | 'success' | 'warning' | 'info' = neutral
169
+ - value: number
170
+
171
+ ### CardTitle
172
+ Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §"Card Anatomy"). Status, progress, and metadata are layout-bearing — th…
173
+
174
+ ### Carousel
175
+ Renders children as a snap-scrolling track with Prev/Next scroll buttons.
176
+ - ariaLabel: string = Carousel
177
+ - children: ReactNode
178
+ - showControls: boolean = true
179
+
180
+ ### Center
181
+ Center — max-width column, auto-centered horizontally. Every Layout reference: https://every-layout.dev/layouts/center/
182
+ - as: ElementType<any, keyof IntrinsicElements> = div
183
+ - children: ReactNode
184
+ - className: string
185
+ - gutter: 'tight' | 'normal' | 'inset' | 'spacious'
186
+ - maxWidth: 'content' | 'max' = content
187
+ - style: CSSProperties
188
+
189
+ ### Checkbox
190
+ Checkbox — custom-drawn checkbox with check / indeterminate glyph.
191
+ - checked: boolean
192
+ - indeterminate: boolean = false
193
+ - label: string
194
+ - onChange: (v: boolean) => void
195
+
196
+ ### CinematicLink
197
+ CinematicLink - cinematic editorial link treatment for portfolio surfaces.
198
+ - children: string
199
+ - href: string
200
+
201
+ ### CircularProgress
202
+ A circular progress ring; pass `value`/`max` or set `indeterminate`.
203
+ - indeterminate: boolean = false
204
+ - label: string
205
+ - max: number = 100
206
+ - size: "sm" | "md" | "lg" = md
207
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | null
208
+ - value: number = 0
209
+
210
+ ### Cluster
211
+ Cluster — wrapping horizontal group with even gaps. Every Layout reference: https://every-layout.dev/layouts/cluster/
212
+ - align: 'start' | 'center' | 'end' | 'stretch' = center
213
+ - as: ElementType<any, keyof IntrinsicElements> = div
214
+ - children: ReactNode
215
+ - className: string
216
+ - gap: 'tight' | 'normal' | 'inset' | 'spacious' = tight
217
+ - justify: 'start' | 'center' | 'end' | 'space-between' = start
218
+ - style: CSSProperties
219
+
220
+ ### CodeBlock
221
+ CodeBlock - code display with copy button and optional collapsible toggle.
222
+ - className: string
223
+ - code: string
224
+ - collapsible: boolean = false
225
+ - defaultExpanded: boolean = false
226
+ - filename: string
227
+ - language: string
228
+ - truncateFromStart: boolean = false
229
+ - variant: "inline" | "block" = block
230
+
231
+ ### Combobox
232
+ Combobox — searchable single-select (Popover + filtered listbox). A select-with-search built on the HDS Popover. The trigger shows the current selection; openi…
233
+ - aria-label: string
234
+ - className: string
235
+ - disabled: boolean = false
236
+ - emptyMessage: string = No results
237
+ - onChange: (value: string) => void
238
+ - options: ComboboxOption[]
239
+ - placeholder: string = Select…
240
+ - searchPlaceholder: string = Search…
241
+ - value: string | null
242
+
243
+ ### CommandPalette
244
+ Mountable trigger + dialog. Drop into header slot; component manages its own open state and Cmd-K / Ctrl-K global keybinding.
245
+ - className: string
246
+
247
+ ### ComponentInstanceMatrix
248
+ ComponentInstanceMatrix — responsive specimen matrix for variant and state parity.
249
+ - componentName: string
250
+ - dimensionX: string
251
+ - dimensionY: string
252
+ - freezeRowState: boolean = false
253
+ - isMobile: boolean
254
+ - renderInstance: (rowKey: string, columnKey: string) => ReactNode
255
+ - rowLabelTone: "primary" | "secondary" = primary
256
+ - rowLabelWidth: number = 120
257
+ - title: string
258
+
259
+ ### Container
260
+ Container — semantic width-constrained layout. Centers content horizontally and applies semantic max-width constraints. - maxWidth options: 'content' (760px pr…
261
+ - children: ReactNode
262
+ - className: string
263
+ - maxWidth: 'content' | 'max' = max
264
+ - padding: string = var(--semantic-space-surface-padding)
265
+ - style: CSSProperties
266
+
267
+ ### ContextMenu
268
+ ContextMenu root + parts. Wrap the right-clickable area in `ContextMenu.Trigger`. Controlled via `onOpenChange`.
269
+ - children: React.ReactNode
270
+ - dir: ("ltr" | "rtl")
271
+ - modal: boolean
272
+ - onOpenChange: ((open: boolean) => void)
273
+ - open: boolean
274
+
275
+ ### Cover
276
+ Cover — vertical shell with an auto-centered main region. Every Layout reference: https://every-layout.dev/layouts/cover/
277
+ - as: ElementType<any, keyof IntrinsicElements> = div
278
+ - centerSlot: ReactNode
279
+ - children: ReactNode
280
+ - className: string
281
+ - footer: ReactNode
282
+ - gap: 'tight' | 'normal' | 'inset' | 'spacious' = normal
283
+ - header: ReactNode
284
+ - minHeight: string = 100svh
285
+ - style: CSSProperties
286
+
287
+ ### DataTableSection
288
+ Section heading and toolbar over a `Table`. Row actions are consumer nodes in a trailing column, the table scrolls horizontally on narrow widths without a `min…
289
+ - actionsLabel: string = Actions
290
+ - columns: TableColumn[]
291
+ - emptyDescription: ReactNode
292
+ - emptyTitle: ReactNode = Nothing here yet
293
+ - level: 2 | 3 | 4 | 5 | 6 = 2
294
+ - rows: DataTableSectionRow[]
295
+ - title: ReactNode
296
+ - toolbar: ReactNode
297
+
298
+ ### DateInput
299
+ Text field + calendar popover for picking a single date.
300
+ - aria-label: string
301
+ - disabled: boolean = false
302
+ - displayFormat: string = yyyy-MM-dd
303
+ - id: string
304
+ - onChange: ((date: Date) => void) | undefined
305
+ - placeholder: string
306
+ - value: Date
307
+
308
+ ### DateRangeInput
309
+ DateRangeInput — date-range field composing the existing Popover with Calendar in range mode, so picking a start/end date reads as one overlay pattern with Com…
310
+ - aria-label: string
311
+ - disabled: boolean = false
312
+ - displayFormat: string = yyyy-MM-dd
313
+ - id: string
314
+ - numberOfMonths: number = 2
315
+ - onChange: ((range: DateRange) => void) | undefined
316
+ - placeholder: string = Select date range
317
+ - value: DateRange
318
+
319
+ ### DateTimeInput
320
+ Text date field + calendar popover, paired with a native time field, producing one Date.
321
+ - aria-label: string
322
+ - dateFormat: string = yyyy-MM-dd
323
+ - disabled: boolean = false
324
+ - id: string
325
+ - onChange: ((date: Date) => void) | undefined
326
+ - value: Date
327
+
328
+ ### DestructiveSection
329
+ Titled danger zone: a title, an explanation, and one danger `Button` that opens an `AlertDialog`. Pressing the button never runs the action; only the dialog's …
330
+ - actionLabel: ReactNode
331
+ - cancelLabel: string = Cancel
332
+ - confirmBody: ReactNode
333
+ - confirmLabel: string
334
+ - description: ReactNode
335
+ - level: 2 | 3 | 4 | 5 | 6 = 2
336
+ - onConfirm: () => void
337
+ - title: ReactNode
338
+
339
+ ### Dialog
340
+ Tagged per-export, not on the file block: this module exports ten components and a file-level @figma would hand all ten this one node.
341
+ - children: ReactNode
342
+ - defaultOpen: boolean
343
+ - modal: boolean
344
+ - onOpenChange: ((open: boolean) => void)
345
+ - open: boolean
346
+
347
+ ### DialogClose
348
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
349
+ - asChild: boolean
350
+
351
+ ### DialogContent
352
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
353
+ - asChild: boolean
354
+ - container: HTMLElement | null
355
+ - forceMount: true
356
+ - hideClose: boolean = false
357
+ - onCloseAutoFocus: ((event: Event) => void)
358
+ - onEscapeKeyDown: ((event: KeyboardEvent) => void)
359
+ - onFocusOutside: ((event: CustomEvent<{ originalEvent: FocusEvent; }>) => void)
360
+ - onInteractOutside: ((event: CustomEvent<{ originalEvent: PointerEvent; }> | CustomEvent<{ original…
361
+ - onOpenAutoFocus: ((event: Event) => void)
362
+ - onPointerDownOutside: ((event: CustomEvent<{ originalEvent: PointerEvent; }>) => void)
363
+
364
+ ### DialogDescription
365
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
366
+ - asChild: boolean
367
+
368
+ ### DialogFooter
369
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
370
+
371
+ ### DialogHeader
372
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
373
+
374
+ ### DialogOverlay
375
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
376
+ - asChild: boolean
377
+ - forceMount: true
378
+
379
+ ### DialogPortal
380
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
381
+ - children: React.ReactNode
382
+ - container: Element | DocumentFragment | null
383
+ - forceMount: true
384
+
385
+ ### DialogTitle
386
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
387
+ - asChild: boolean
388
+
389
+ ### DialogTrigger
390
+ Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with rol…
391
+ - asChild: boolean
392
+
393
+ ### Disclosure
394
+ Disclosure - compact disclosure surface for optional explanatory content.
395
+ - accent: boolean = false
396
+ - children: ReactNode
397
+ - className: string
398
+ - contentStyle: CSSProperties
399
+ - defaultOpen: boolean = false
400
+ - label: ReactNode
401
+ - onOpenChange: ((open: boolean) => void)
402
+ - open: boolean
403
+ - triggerStyle: CSSProperties
404
+ - variant: 'panel' | 'nav' | 'card' = panel
405
+
406
+ ### Divider
407
+ Divider — semantic separator between content regions.
408
+ - orientation: "horizontal" | "vertical" | null = horizontal
409
+ - spacing: string | number
410
+ - strong: boolean
411
+ - variant: "strong" | "default" | null
412
+
413
+ ### DocLinkCard
414
+ DocLinkCard - navigation card for editorial and documentation cross-links.
415
+ - accent: boolean = false
416
+ - affordance: "up-right" | "right" | "left" = up-right
417
+ - description: string
418
+ - disabled: boolean = false
419
+ - href: string
420
+ - icon: LucideIcon
421
+ - meta: string
422
+ - metaStyle: "caption" | "ui" = caption
423
+ - title: string
424
+ - variant: "feature" | "pager" = feature
425
+
426
+ ### EmptyState
427
+ EmptyState — consistent no-data placeholder for lists, grids, and sections.
428
+ - className: string
429
+ - description: ReactNode
430
+ - title: ReactNode
431
+
432
+ ### Field
433
+ Caption label paired with a value — used in metadata grids and read-only forms.
434
+ - children: React.ReactNode
435
+ - label: string
436
+ - mono: boolean | null
437
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | null
438
+ - value: ReactNode
439
+
440
+ ### FileInput
441
+ A dashed dropzone that opens the native file picker or accepts a drag-and-drop.
442
+ - accept: string
443
+ - disabled: boolean
444
+ - label: ReactNode = Click to upload or drag and drop
445
+ - multiple: boolean
446
+ - onFiles: ((files: File[]) => void)
447
+
448
+ ### Form
449
+ Styled `<form>` with consistent vertical field rhythm. Tagged per-export: FormField and FormFieldShell share this module and have no Figma node, so a file-leve…
450
+
451
+ ### FormActions
452
+ Form footer with one fixed order: destructive (far left, if any), then secondary, then primary last and right-most. Gap is the tight layout token.
453
+ - destructive: ReactNode
454
+ - primary: ReactNode
455
+ - secondary: ReactNode
456
+ - sticky: boolean = false
457
+
458
+ ### FormField
459
+ Label + description + error wrapper that wires the a11y relationships onto its single child control via cloneElement. Validation-library agnostic — pass `error…
460
+ - children: ReactElement<any, string | JSXElementConstructor<any>>
461
+ - className: string
462
+ - description: string
463
+ - error: string
464
+ - htmlFor: string
465
+ - label: string
466
+ - required: boolean = false
467
+
468
+ ### FormFieldShell
469
+ Presentational label + control slot + helper/error markup. Renders `children` verbatim — it does NOT clone — so it is safe to use with controls that own a call…
470
+ - children: ReactNode
471
+ - className: string
472
+ - controlId: string
473
+ - description: string
474
+ - error: string
475
+ - label: string
476
+ - required: boolean = false
477
+
478
+ ### FoundationSwatch
479
+ FoundationSwatch - governed foundation specimen for color and semantic role previews.
480
+ - background: string
481
+ - bordered: boolean = false
482
+ - details: string[]
483
+ - foreground: string = var(--semantic-color-content-primary)
484
+ - hidePreviewLabel: boolean = false
485
+ - label: string
486
+ - note: ReactNode
487
+ - previewPosition: 'bottom-left' | 'top-left' | 'center' = center
488
+ - specimen: ReactNode
489
+ - swatchVar: string
490
+ - tokenDisplayPreset: 'depth1' | 'depth2' | 'full' = depth2
491
+ - tokenPath: string
492
+ - value: string
493
+
494
+ ### Frame
495
+ Frame — aspect-ratio-locked, token-clipped media box. Every Layout reference: https://every-layout.dev/layouts/frame/
496
+ - as: ElementType<any, keyof IntrinsicElements> = div
497
+ - children: ReactNode
498
+ - className: string
499
+ - radius: 'none' | 'sm' | 'md' | 'full' = md
500
+ - ratio: number = 16 / 9
501
+ - style: CSSProperties
502
+
503
+ ### Grid
504
+ Grid — responsive grid composition primitive. Enforces semantic gap and column values. No arbitrary CSS grid. - layout='fixed': responsive base (collapses via …
505
+ - as: ElementType<any, keyof IntrinsicElements> = div
506
+ - children: ReactNode
507
+ - className: string
508
+ - columns: number = 12
509
+ - gap: 'tight' | 'normal' | 'inset' | 'spacious' = inset
510
+ - layout: 'fixed' | 'auto-fit' = fixed
511
+ - style: CSSProperties
512
+ - subgrid: boolean = false
513
+
514
+ ### HdsDocsShell
515
+ HdsDocsShell — three-region docs shell (left nav rail, content, right TOC rail), driven by grid columns that default to 0 and are set per breakpoint. hds#280 s…
516
+ - children: ReactNode
517
+ - className: string
518
+ - leftRail: ReactNode
519
+ - rightRail: ReactNode
520
+ - style: CSSProperties
521
+ - topOffset: string = 0px
522
+
523
+ ### HdsThemeProvider
524
+ Renders a `data-hds` scope wrapper that carries the four theming dials as root attributes + CSS vars, and exposes them to `useHdsTheme()`.
525
+ - as: ElementType<any, keyof IntrinsicElements> = div
526
+ - brand: string
527
+ - children: React.ReactNode
528
+ - className: string
529
+ - density: 'comfortable' | 'compact'
530
+ - fontFamily: string
531
+ - fontFamilyMono: string
532
+ - style: CSSProperties
533
+ - theme: 'light' | 'dark'
534
+
535
+ ### HeadingStack
536
+ HeadingStack — enforced vertical rhythm for heading + subheading pairs. Automatically handles gap and secondary color, preventing manual stacking. - Heading le…
537
+ - as: ElementType = div
538
+ - gap: HdsHeadingGap = px8
539
+ - heading: string
540
+ - headingAs: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
541
+ - level: HdsHeadingLevel
542
+ - subheading: string
543
+ - subheadingAs: 'p' | 'div' | 'span' = p
544
+
545
+ ### HoverCard
546
+ HoverCard root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`; tune timing with `openDelay`/`closeDelay`.
547
+ - children: React.ReactNode
548
+ - closeDelay: number
549
+ - defaultOpen: boolean
550
+ - onOpenChange: ((open: boolean) => void)
551
+ - open: boolean
552
+ - openDelay: number
553
+
554
+ ### Icon
555
+ Icon — semantic icon wrapper for Lucide icons.
556
+ - aria-hidden: boolean | "true" | "false" = true
557
+ - className: string
558
+ - color: string = currentColor
559
+ - icon: LucideIcon
560
+ - size: IconSize = small
561
+ - style: CSSProperties
562
+ - weight: "fill" | "bold" | "light" | "thin" | "regular" | "duotone"
563
+
564
+ ### IconButton
565
+ IconButton ” icon-only action trigger built on the shared Button primitive.
566
+ - aria-label: string
567
+ - asChild: boolean
568
+ - disabled: boolean
569
+ - icon: LucideIcon
570
+ - iconColor: string
571
+ - iconLeft: ReactNode
572
+ - iconRight: ReactNode
573
+ - iconSize: IconSize
574
+ - label: string
575
+ - loading: boolean
576
+ - size: "sm" | "md" | "lg"
577
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | null
578
+ - variant: "primary" | "secondary" | "tertiary" | null
579
+
580
+ ### InlineCode
581
+ InlineCode — inline code chip for token paths, file paths, and code-adjacent prose.
582
+ - children: ReactNode
583
+ - compact: boolean
584
+ - copyable: boolean = false
585
+ - density: "comfortable" | "compact" | null
586
+ - style: CSSProperties
587
+
588
+ ### InlineLink
589
+ InlineLink ” inline navigation and external-link primitive for body copy.
590
+ - children: ReactNode
591
+ - externalIcon: boolean = true
592
+ - href: string
593
+
594
+ ### Input
595
+ Input — text field primitive with label, helper, and error slots.
596
+ - className: string
597
+ - disabled: boolean
598
+ - error: boolean
599
+ - errorMessage: string
600
+ - helperText: string
601
+ - inputClassName: string
602
+ - label: string
603
+ - leadingVisual: ReactNode
604
+ - loading: boolean = false
605
+ - size: InputSize = md
606
+ - textStyle: "body" | "mono" = body
607
+ - trailingVisual: ReactNode
608
+ - type: 'text' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'number' = text
609
+
610
+ ### InputGroup
611
+ A single-line input with optional `leading`/`trailing` adornments.
612
+ - className: string
613
+ - leading: ReactNode
614
+ - size: "sm" | "md" | "lg" | null
615
+ - trailing: ReactNode
616
+
617
+ ### Kbd
618
+ Renders a keyboard key or shortcut token, e.g. `<Kbd>⌘K</Kbd>`.
619
+ - size: "sm" | "md" | "lg" | null
620
+
621
+ ### Lightbox
622
+ Lightbox — full-bleed image viewer built on Radix Dialog. Full-bleed image viewer built on Radix Dialog (raw primitives, not the card `Dialog` wrapper — a ligh…
623
+ - alt: string
624
+ - caption: string
625
+ - captionHref: string
626
+ - captionLabel: string
627
+ - naturalHeight: number
628
+ - naturalWidth: number
629
+ - onClose: () => void
630
+ - open: boolean
631
+ - src: string
632
+
633
+ ### Menu
634
+ Menu root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.
635
+ - children: React.ReactNode
636
+ - defaultOpen: boolean
637
+ - dir: ("ltr" | "rtl")
638
+ - modal: boolean
639
+ - onOpenChange: ((open: boolean) => void)
640
+ - open: boolean
641
+
642
+ ### MetadataList
643
+ Renders object metadata as a semantic `<dl>` of term/description pairs.
644
+ - footer: ReactNode
645
+ - items: MetadataListItem[]
646
+ - orientation: "horizontal" | "vertical" | null = vertical
647
+ - variant: "plain" | "divided" = plain
648
+
649
+ ### MetricTile
650
+ One metric tile: eyebrow label, `heading2` value, caption sub line, on a raised surface at one fixed min-height. Wraps `Card.Metric` (the sibling with the eyeb…
651
+ - label: ReactNode
652
+ - sub: ReactNode
653
+ - tone: 'neutral' | 'success' | 'warning' | 'danger' | 'info' = neutral
654
+ - value: ReactNode
655
+
656
+ ### MetricTiles
657
+ A row of `MetricTile`s. The grid has `min(tiles, 4)` columns, so three tiles fill three columns and never leave an empty fourth. The default for any row of hea…
658
+ - children: ReactNode
659
+
660
+ ### MultiSelector
661
+ MultiSelector — multi-select dropdown composing the existing Popover with a checkbox option list, so choosing several values from a fixed set reads as one over…
662
+ - className: string
663
+ - disabled: boolean = false
664
+ - onChange: (next: string[]) => void
665
+ - options: MultiSelectorOption[]
666
+ - placeholder: string = Select…
667
+ - value: string[]
668
+
669
+ ### NavGroup
670
+ NavGroup - labeled navigation group for stacks of nav items.
671
+ - children: ReactNode
672
+ - className: string
673
+ - collapsible: boolean = false
674
+ - contentStyle: CSSProperties
675
+ - getExact: ((item: NavItem) => boolean)
676
+ - items: NavItem[]
677
+ - label: string
678
+ - level: NavLevel = section
679
+ - onNavigate: (() => void)
680
+ - style: CSSProperties
681
+ - variant: 'side' | 'toc' = side
682
+
683
+ ### NavItem
684
+ NavItem - navigation row primitive for sidebars, table of contents, and list navigation.
685
+ - active: boolean = false
686
+ - disabled: boolean = false
687
+ - label: string
688
+ - level: NavLevel = root
689
+ - onNavigate: ((event: MouseEvent<HTMLAnchorElement, MouseEvent>) => void)
690
+ - variant: NavVariant = side
691
+
692
+ ### OverflowList
693
+ Renders up to `max` children followed by a `+N` overflow chip (or custom node).
694
+ - children: ReactNode
695
+ - max: number
696
+ - renderOverflow: ((count: number) => ReactNode)
697
+
698
+ ### Page
699
+ Page — standard page shell. Wraps page content in Container (width constraint) and applies the canonical vertical padding so content breathes against the viewp…
700
+ - children: ReactNode
701
+ - className: string
702
+ - maxWidth: 'content' | 'max' = max
703
+ - paddingY: 'default' | 'compact' | 'none' = default
704
+ - style: CSSProperties
705
+
706
+ ### PageHeader
707
+ Screen header: breadcrumb slot, the title at the one canonical page-title size (`heading2`), a status slot and an actions slot. Every screen has exactly one. `…
708
+ - actions: ReactNode
709
+ - breadcrumb: ReactNode
710
+ - level: PageHeaderLevel = 1
711
+ - status: ReactNode
712
+ - title: ReactNode
713
+
714
+ ### Pagination
715
+ Paged navigation with first/last anchors, sibling pages, and ellipses.
716
+ - count: number
717
+ - label: string = Pagination
718
+ - onPageChange: (page: number) => void
719
+ - page: number
720
+ - siblingCount: number = 1
721
+
722
+ ### Pin
723
+ Pin — sticky-pin an element within its scroll region.
724
+ - as: ElementType<any, keyof IntrinsicElements> = div
725
+ - children: ReactNode
726
+ - className: string
727
+ - style: CSSProperties
728
+ - top: string = 0
729
+
730
+ ### Popover
731
+ Popover root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.
732
+ - children: React.ReactNode
733
+ - defaultOpen: boolean
734
+ - modal: boolean
735
+ - onOpenChange: ((open: boolean) => void)
736
+ - open: boolean
737
+
738
+ ### Progress
739
+ Linear progress. Determinate when `value` is a number, else indeterminate.
740
+ - label: string = Progress
741
+ - size: "sm" | "md" | "lg" | null
742
+ - value: number | null = null
743
+
744
+ ### Radio
745
+ Radio — radio button with animated selection indicator.
746
+ - checked: boolean
747
+ - label: string
748
+ - onChange: (v: boolean) => void
749
+
750
+ ### Reveal
751
+ Reveal — reveal-on-scroll primitive via CSS scroll-driven animation.
752
+ - animation: 'fade' | 'fade-up' | 'fade-down' | 'scale' = fade-up
753
+ - as: ElementType<any, keyof IntrinsicElements> = div
754
+ - children: ReactNode
755
+ - className: string
756
+ - style: CSSProperties
757
+
758
+ ### SegmentedControl
759
+ SegmentedControl " segmented selection input for compact mutually-exclusive choices. The active×hover×pressed×disabled×secondary state matrix is expressed thro…
760
+ - aria-label: string
761
+ - fullWidth: boolean = false
762
+ - label: string
763
+ - onChange: (value: string) => void
764
+ - options: HdsSegmentedOption[]
765
+ - railPadding: Padding<string | number>
766
+ - segmentPaddingX: PaddingLeft<string | number>
767
+ - size: NonNullable<"sm" | "md" | null> | undefined = md
768
+ - value: string
769
+ - variant: NonNullable<"primary" | "secondary" | null> | undefined = primary
770
+
771
+ ### Select
772
+ Select — dropdown selector built on Radix Select (ADR-001 Radix convention). Radix owns the listbox a11y contract: managed focus + active-descendant, typeahead…
773
+ - container: HTMLElement | null
774
+ - label: string
775
+ - onChange: (v: string) => void
776
+ - options: { value: string; label: string; }[]
777
+ - showLabel: boolean = true
778
+ - value: string
779
+
780
+ ### SelectableCard
781
+ A card-shaped single checkbox — click or activate to toggle selection.
782
+ - disabled: boolean
783
+ - onSelectedChange: ((selected: boolean) => void)
784
+ - selected: boolean = false
785
+
786
+ ### SideNav
787
+ SideNav - sidebar navigation row primitive. Two levels: root — top-level section link. Full-width row using the shared nav label type style. nested — child pag…
788
+ - active: boolean = false
789
+ - disabled: boolean = false
790
+ - href: string
791
+ - indent: number | boolean = 0
792
+ - label: string
793
+ - level: 'root' | 'nested' = nested
794
+ - onNavigate: ((event: MouseEvent<HTMLAnchorElement, MouseEvent>) => void)
795
+ - titleLabel: boolean = false
796
+
797
+ ### Sidebar
798
+ Sidebar — fixed-width rail beside fluid content, no media query. Every Layout reference: https://every-layout.dev/layouts/sidebar/
799
+ - as: ElementType<any, keyof IntrinsicElements> = div
800
+ - children: [ReactNode, ReactNode]
801
+ - className: string
802
+ - contentMin: string = 50%
803
+ - gap: 'tight' | 'normal' | 'inset' | 'spacious' = normal
804
+ - side: 'start' | 'end' = start
805
+ - sideWidth: string = 16rem
806
+ - style: CSSProperties
807
+
808
+ ### Skeleton
809
+ Decorative loading placeholder. Marked aria-hidden — announce the loading state on the surrounding region (e.g. aria-busy) rather than per skeleton.
810
+ - height: string | number
811
+ - variant: "text" | "rectangular" | "circular" | null = rectangular
812
+ - width: string | number
813
+
814
+ ### Sketch
815
+ Sketch — shared shell for generative canvases and WebGL sketches.
816
+ - children: ReactNode
817
+ - controls: ReactNode
818
+ - title: string
819
+
820
+ ### Slider
821
+ Slider — range slider with label and value display.
822
+ - label: string
823
+ - max: number
824
+ - min: number
825
+ - onChange: (v: number) => void
826
+ - step: number = 1
827
+ - value: number
828
+
829
+ ### Spinner
830
+ Indeterminate spinner. Inherits the surrounding text color via currentColor.
831
+ - label: string = Loading
832
+ - size: "sm" | "md" | "lg" | null
833
+
834
+ ### Stack
835
+ Stack — one-dimensional layout primitive.
836
+ - align: 'start' | 'center' | 'end' | 'stretch'
837
+ - as: ElementType<any, keyof IntrinsicElements> = div
838
+ - children: ReactNode
839
+ - className: string
840
+ - direction: "row" | "column" = column
841
+ - gap: GapOption = tight
842
+ - justify: 'start' | 'center' | 'end' | 'space-between'
843
+ - style: CSSProperties
844
+ - wrap: FlexWrap
845
+
846
+ ### StackedCardRail
847
+ StackedCardRail — horizontally-scrolling stacked card carousel. Scroll mechanism: vertical scroll on an absolutely-positioned inner container is mapped to hori…
848
+ - cards: StackedCardRailCard[]
849
+
850
+ ### Stat
851
+ Headline metric — large value, uppercase caption label, optional sub-line.
852
+ - label: string
853
+ - sub: ReactNode
854
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | null
855
+ - value: ReactNode
856
+
857
+ ### StatusDot
858
+ A small solid dot conveying a semantic status via `tone`.
859
+ - label: string
860
+ - size: "sm" | "md" | "lg" | null
861
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | "inProgress" | null
862
+
863
+ ### StatusListItem
864
+ Status dot + title row with optional muted notes and trailing slot (e.g. badge).
865
+ - notes: ReactNode[]
866
+ - title: ReactNode
867
+ - tone: "neutral" | "danger" | "success" | "warning" | "info" | null
868
+ - trailing: ReactNode
869
+
870
+ ### StatusTile
871
+ Block-layout sibling of StatusListItem. Renders a raised surface tile with title, optional muted notes, and a trailing slot for a badge or affordance. Status c…
872
+ - notes: ReactNode[]
873
+ - title: ReactNode
874
+ - tone: 'success' | 'warning' | 'danger' | 'info' | 'neutral' = neutral
875
+ - trailing: ReactNode
876
+
877
+ ### Stepper
878
+ Step indicator for multi-step flows. Purely presentational — no navigation.
879
+ - activeStep: number
880
+ - orientation: "horizontal" | "vertical" = horizontal
881
+ - steps: Step[]
882
+
883
+ ### StepperField
884
+ StepperField ” numeric input with decrement/increment controls. Classification baseline: Material Design, Chakra UI, and Ant Design treat steppers as numeric i…
885
+ - inputStep: number
886
+ - label: string
887
+ - max: number
888
+ - min: number
889
+ - onChange: (value: number) => void
890
+ - precision: number
891
+ - step: number
892
+ - value: number
893
+
894
+ ### Surface
895
+ Surface — governed inset surface primitive. Enforces the "Surface Inset" rule: backgrounds MUST have internal padding. - Default padding: px24 (cards) | px16 (…
896
+ - as: ElementType<any, keyof IntrinsicElements> = div
897
+ - children: ReactNode
898
+ - className: string
899
+ - overflow: Overflow
900
+ - padding: PaddingOption = component
901
+ - shadow: boolean = false
902
+ - style: CSSProperties
903
+ - theme: "light" | "dark"
904
+
905
+ ### Switcher
906
+ Switcher — flips a row to a column below a width threshold, no media query. Every Layout reference: https://every-layout.dev/layouts/the-switcher/
907
+ - as: ElementType<any, keyof IntrinsicElements> = div
908
+ - children: ReactNode
909
+ - className: string
910
+ - gap: 'tight' | 'normal' | 'inset' | 'spacious' = normal
911
+ - limit: number
912
+ - style: CSSProperties
913
+ - threshold: string = 30rem
914
+
915
+ ### Table
916
+ Table - structured data table primitive for documentation and compact UI matrices.
917
+ - caption: ReactNode
918
+ - captionAction: ReactNode
919
+ - columns: TableColumn[]
920
+ - density: 'compact' | 'comfortable'
921
+ - description: ReactNode
922
+ - flush: boolean = false
923
+ - labelledBy: string
924
+ - minWidth: string | number
925
+ - rows: TableRow[]
926
+ - stickyHeader: boolean = false
927
+
928
+ ### Tabs
929
+ The tab set itself. Tagged here rather than in the file block because TabsList and TabsContent share this module and have no Figma node of their own — a file-l…
930
+ - activationMode: "automatic" | "manual"
931
+ - asChild: boolean
932
+ - defaultValue: string
933
+ - dir: ("ltr" | "rtl")
934
+ - onValueChange: ((value: string) => void)
935
+ - orientation: "horizontal" | "vertical"
936
+ - value: string
937
+
938
+ ### TabsContent
939
+ Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-st…
940
+ - asChild: boolean
941
+ - forceMount: true
942
+ - value: string
943
+
944
+ ### TabsList
945
+ Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-st…
946
+ - asChild: boolean
947
+ - loop: boolean
948
+
949
+ ### TabsTrigger
950
+ Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-st…
951
+ - asChild: boolean
952
+ - value: string
953
+
954
+ ### Tag
955
+ Tag — interactive filter and category chip. The outer <button> carries the accessible 44px hit target directly via the size token while the inner pill keeps th…
956
+ - active: boolean = false
957
+ - children: ReactNode
958
+
959
+ ### Text
960
+ Text — polymorphic typography primitive spanning the full HDS type ramp.
961
+ - as: "symbol" | "object" | "map" | "filter" | "title" | "a" | "button" | "div" | "fo… = defaultTagMap[variant]
962
+ - children: ReactNode
963
+ - className: string
964
+ - style: CSSProperties
965
+ - variant: TextVariant
966
+
967
+ ### TextLockup
968
+ TextLockup - governed title-and-description pairing primitive.
969
+ - align: 'left' | 'center' = left
970
+ - as: ElementType = div
971
+ - description: ReactNode
972
+ - descriptionAs: 'div' | 'p' | 'span' = div
973
+ - eyebrow: string
974
+ - id: string
975
+ - size: 'hero' | 'heroXl' | 'section' | 'metric' | 'detail' | 'numbered'
976
+ - title: string
977
+ - titleAs: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span'
978
+
979
+ ### Textarea
980
+ Textarea — multi-line text field primitive with label, helper, and error slots. Mirrors Input's shell + token skin as a native `<textarea>`. Figma parity: the …
981
+ - className: string
982
+ - disabled: boolean
983
+ - error: boolean
984
+ - errorMessage: string
985
+ - helperText: string
986
+ - label: string
987
+ - resize: TextareaResize = vertical
988
+ - textareaClassName: string
989
+
990
+ ### TileGrid
991
+ Auto-fill responsive grid for status/micro tiles. Wraps tile children in a one-line grid declaration so pages don't repeat the auto-fill minmax recipe.
992
+ - gap: "sm" | "md" | "xs" = sm
993
+ - minTileWidth: string = 260px
994
+
995
+ ### TimeInput
996
+ A native time field skinned with HDS input chrome. Value is a `HH:mm` string.
997
+ - size: "sm" | "md" | "lg" | null
998
+
999
+ ### Timestamp
1000
+ Presents a date/time with a machine-readable `dateTime` for accessibility.
1001
+ - date: string | number | Date
1002
+ - format: 'date' | 'time' | 'datetime' | 'relative' = datetime
1003
+ - locale: string
1004
+ - now: string | number | Date
1005
+
1006
+ ### ToastProvider
1007
+ Provider + viewport for the toast system. Wrap the app root once.
1008
+ - children: React.ReactNode
1009
+ - duration: number = 5000
1010
+ - swipeDirection: SwipeDirection = right
1011
+
1012
+ ### Toggle
1013
+ Toggle — boolean on/off toggle with animated thumb.
1014
+ - checked: boolean
1015
+ - label: string
1016
+ - onChange: (v: boolean) => void
1017
+
1018
+ ### ToggleButton
1019
+ A single two-state toggle button exposing a native `aria-pressed` contract — use for one independent on/off control such as bold, mute, or pin.
1020
+ - asChild: boolean
1021
+ - defaultPressed: boolean
1022
+ - onPressedChange: ((pressed: boolean) => void)
1023
+ - pressed: boolean
1024
+ - size: "sm" | "md" | "lg" | null
1025
+ - variant: "secondary" | "ghost" | null
1026
+
1027
+ ### Token
1028
+ Token - reflective token specimen for unified node-based token views. The `variant` axis (node | diagram — diagram is a deprecated alias that resolves to the s…
1029
+ - accentColor: string
1030
+ - aria-label: string
1031
+ - className: string
1032
+ - description: ReactNode
1033
+ - fullWidth: boolean
1034
+ - isSelected: boolean
1035
+ - isSourceNode: boolean
1036
+ - label: string
1037
+ - leadingSlot: ReactNode
1038
+ - nodeRef: ((el: HTMLElement | null) => void)
1039
+ - nowrap: boolean
1040
+ - onClick: (() => void) | (() => void)
1041
+ - pathDisplayDepth: number
1042
+ - pathDisplayLeadingDot: boolean
1043
+ - pathDisplayMode: "full" | "compressed"
1044
+ - rawValue: ReactNode
1045
+ - swatchVar: string
1046
+ - tokenPath: string
1047
+ - truncateFromStart: boolean
1048
+ - value: string
1049
+ - variant: "node" | "diagram"
1050
+
1051
+ ### Tokenizer
1052
+ A bordered field of Tag chips followed by a text input for adding more.
1053
+ - className: string
1054
+ - disabled: boolean
1055
+ - onChange: (next: string[]) => void
1056
+ - placeholder: string
1057
+ - value: string[]
1058
+
1059
+ ### Toolbar
1060
+ Toolbar root. Groups related controls with a single roving tab-stop. Supports the native `orientation` prop (`horizontal` | `vertical`).
1061
+ - asChild: boolean
1062
+ - dir: ("ltr" | "rtl")
1063
+ - loop: boolean
1064
+ - orientation: "horizontal" | "vertical"
1065
+
1066
+ ### Tooltip
1067
+ Tooltip root. Bakes in the Radix Provider so a single `<Tooltip>` is self-contained — no app-level provider required. Controlled via `open`/`onOpenChange`, or …
1068
+ - children: React.ReactNode
1069
+ - defaultOpen: boolean
1070
+ - delayDuration: number
1071
+ - disableHoverableContent: boolean
1072
+ - onOpenChange: ((open: boolean) => void)
1073
+ - open: boolean
1074
+
1075
+ ### TopNav
1076
+ Top navigation bar with brand, nav, and trailing action slots.
1077
+ - brand: ReactNode
1078
+ - children: ReactNode
1079
+ - sticky: boolean
1080
+ - trailing: ReactNode
1081
+
1082
+ ### TreeList
1083
+ Renders a hierarchical `role="tree"` list; nodes with children get an expand/collapse toggle.
1084
+ - defaultExpandedIds: string[]
1085
+ - items: TreeNode[]
1086
+ - onSelect: ((id: string) => void)
1087
+
1088
+ ### VisuallyHidden
1089
+ Renders its children off-screen (Tailwind `sr-only`) so they are announced by screen readers without occupying visual space — e.g. a text label for an icon-onl…
1090
+ - as: ElementType<any, keyof IntrinsicElements> = span