@hirobius/design-system 0.13.0 → 0.14.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 (74) hide show
  1. package/NOTICE.md +9 -0
  2. package/README.md +109 -43
  3. package/dist/contexts.js +62 -60
  4. package/dist/hirobius-ui.js +6810 -5807
  5. package/dist/manifest.js +5 -5
  6. package/dist/static.css +1 -1
  7. package/dist/styles.css +1 -1
  8. package/dist/tokens.css +1 -1
  9. package/dist/tokens.js +2 -2
  10. package/dist/types/src/app/components/activity-feed.d.ts +6 -0
  11. package/dist/types/src/app/components/alert.d.ts +1 -0
  12. package/dist/types/src/app/components/avatar.d.ts +1 -0
  13. package/dist/types/src/app/components/badge.d.ts +1 -0
  14. package/dist/types/src/app/components/box.d.ts +2 -2
  15. package/dist/types/src/app/components/breadcrumb.d.ts +1 -0
  16. package/dist/types/src/app/components/button.d.ts +1 -0
  17. package/dist/types/src/app/components/callout.d.ts +1 -0
  18. package/dist/types/src/app/components/card.d.ts +7 -2
  19. package/dist/types/src/app/components/checkbox.d.ts +1 -0
  20. package/dist/types/src/app/components/code-block.d.ts +1 -0
  21. package/dist/types/src/app/components/combobox.d.ts +1 -0
  22. package/dist/types/src/app/components/dialog.d.ts +5 -0
  23. package/dist/types/src/app/components/disclosure.d.ts +1 -0
  24. package/dist/types/src/app/components/divider.d.ts +4 -0
  25. package/dist/types/src/app/components/empty-state.d.ts +1 -0
  26. package/dist/types/src/app/components/field.d.ts +1 -0
  27. package/dist/types/src/app/components/form.d.ts +7 -1
  28. package/dist/types/src/app/components/icon-button.d.ts +2 -2
  29. package/dist/types/src/app/components/icon.d.ts +1 -1
  30. package/dist/types/src/app/components/inline-code.d.ts +3 -0
  31. package/dist/types/src/app/components/inline-link.d.ts +1 -0
  32. package/dist/types/src/app/components/input.d.ts +1 -0
  33. package/dist/types/src/app/components/menu.d.ts +1 -0
  34. package/dist/types/src/app/components/nav-group.d.ts +2 -2
  35. package/dist/types/src/app/components/nav-item.d.ts +1 -1
  36. package/dist/types/src/app/components/pagination.d.ts +1 -0
  37. package/dist/types/src/app/components/popover.d.ts +1 -0
  38. package/dist/types/src/app/components/progress.d.ts +1 -0
  39. package/dist/types/src/app/components/radio.d.ts +1 -0
  40. package/dist/types/src/app/components/skeleton.d.ts +1 -0
  41. package/dist/types/src/app/components/slider.d.ts +1 -0
  42. package/dist/types/src/app/components/spinner.d.ts +1 -0
  43. package/dist/types/src/app/components/stack.d.ts +1 -1
  44. package/dist/types/src/app/components/stat.d.ts +1 -0
  45. package/dist/types/src/app/components/status-list-item.d.ts +1 -0
  46. package/dist/types/src/app/components/status-tile.d.ts +1 -0
  47. package/dist/types/src/app/components/surface.d.ts +1 -1
  48. package/dist/types/src/app/components/table.d.ts +1 -0
  49. package/dist/types/src/app/components/tabs.d.ts +6 -0
  50. package/dist/types/src/app/components/tag.d.ts +1 -0
  51. package/dist/types/src/app/components/textarea.d.ts +1 -0
  52. package/dist/types/src/app/components/toast.d.ts +1 -0
  53. package/dist/types/src/app/components/toggle.d.ts +1 -0
  54. package/dist/types/src/app/context/TenantContext.d.ts +20 -6
  55. package/dist/types/src/app/context/index.d.ts +7 -7
  56. package/dist/types/src/app/design-system/generated-token-refs.d.ts +13 -2
  57. package/dist/types/src/app/design-system/generated-token-values.d.ts +3 -3
  58. package/dist/types/src/app/design-system/theme.d.ts +1 -1
  59. package/dist/types/src/app/design-system/tokens.d.ts +2 -2
  60. package/dist/types/src/app/hooks/useHdsMotion.d.ts +16 -0
  61. package/dist/types/src/app/hooks/useReducedMotion.d.ts +1 -0
  62. package/dist/types/src/app/layouts/HdsSystemDocLayout.d.ts +1 -1
  63. package/dist/types/src/app/lib/hds-search.d.ts +1 -1
  64. package/dist/types/src/brand/index.d.ts +1 -1
  65. package/dist/types/src/form/index.d.ts +3 -3
  66. package/dist/types/src/index.d.ts +253 -118
  67. package/dist/types/src/lib/env.d.ts +31 -0
  68. package/dist/types/src/lib/manifest-entry.d.ts +1 -1
  69. package/dist/types/src/scroll/index.d.ts +2 -2
  70. package/dist/variables.css +56 -34
  71. package/hirobius.tokens.json +200 -65
  72. package/package.json +56 -17
  73. package/public/hds-manifest.json +1575 -696
  74. /package/{LICENSE/main.tsx → LICENSE} +0 -0
@@ -2,7 +2,7 @@
2
2
  "name": "Hirobius Design System",
3
3
  "description": "Three-tier design token system for Adrian Milsap's portfolio site. Tokens flow primitive → semantic → component. All visual decisions trace back to hirobius.tokens.json.",
4
4
  "version": "1",
5
- "generated": "2026-07-07T05:40:59.475Z",
5
+ "generated": "2026-09-21T02:18:05.720Z",
6
6
  "source": "hirobius.tokens.json",
7
7
  "format": "W3C DTCG 2025.10",
8
8
  "docs": "https://adrianmilsap.com/hds",
@@ -38,9 +38,11 @@
38
38
  "accentCount": 1
39
39
  },
40
40
  "componentInventory": [
41
+ "ActivityFeed",
41
42
  "Alert",
42
43
  "AlertDialog",
43
44
  "AspectRatio",
45
+ "AssetImg",
44
46
  "Avatar",
45
47
  "AvatarGroup",
46
48
  "Badge",
@@ -48,10 +50,18 @@
48
50
  "Blockquote",
49
51
  "Box",
50
52
  "Breadcrumb",
53
+ "Button",
51
54
  "ButtonGroup",
52
55
  "Calendar",
53
56
  "Callout",
54
57
  "Card",
58
+ "CardBody",
59
+ "CardDescription",
60
+ "CardFooter",
61
+ "CardHeader",
62
+ "CardMetric",
63
+ "CardProgress",
64
+ "CardTitle",
55
65
  "Carousel",
56
66
  "Center",
57
67
  "CinematicLink",
@@ -68,6 +78,15 @@
68
78
  "DateRangeInput",
69
79
  "DateTimeInput",
70
80
  "Dialog",
81
+ "DialogClose",
82
+ "DialogContent",
83
+ "DialogDescription",
84
+ "DialogFooter",
85
+ "DialogHeader",
86
+ "DialogOverlay",
87
+ "DialogPortal",
88
+ "DialogTitle",
89
+ "DialogTrigger",
71
90
  "Disclosure",
72
91
  "Divider",
73
92
  "DocLinkCard",
@@ -82,18 +101,22 @@
82
101
  "Grid",
83
102
  "HdsCheckbox",
84
103
  "HdsRadio",
104
+ "HdsSelect",
85
105
  "HdsSlider",
86
106
  "HdsThemeProvider",
87
107
  "HdsToggle",
108
+ "HdsTooltip",
88
109
  "HeadingStack",
89
110
  "HoverCard",
90
111
  "Icon",
91
112
  "IconButton",
92
113
  "InlineCode",
93
114
  "InlineLink",
115
+ "Input",
94
116
  "InputGroup",
95
117
  "Kbd",
96
118
  "Lightbox",
119
+ "Menu",
97
120
  "MetadataList",
98
121
  "MultiSelector",
99
122
  "NavGroup",
@@ -102,6 +125,7 @@
102
125
  "Page",
103
126
  "Pagination",
104
127
  "Pin",
128
+ "Popover",
105
129
  "Progress",
106
130
  "Reveal",
107
131
  "SegmentedControl",
@@ -113,6 +137,7 @@
113
137
  "SpecimenBlock",
114
138
  "Spinner",
115
139
  "Stack",
140
+ "StackedCardRail",
116
141
  "Stat",
117
142
  "StatusDot",
118
143
  "StatusListItem",
@@ -128,6 +153,7 @@
128
153
  "TabsTrigger",
129
154
  "Tag",
130
155
  "Text",
156
+ "Textarea",
131
157
  "TextLockup",
132
158
  "TileGrid",
133
159
  "TimeInput",
@@ -551,10 +577,6 @@
551
577
  {
552
578
  "name": "HdsLegacyTokenGovernancePanel",
553
579
  "filePath": "src/app/components/lab/legacy-token-detail.tsx"
554
- },
555
- {
556
- "name": "HdsSelect",
557
- "filePath": "src/app/components/select.tsx"
558
580
  }
559
581
  ],
560
582
  "namespaceViolations": [
@@ -570,10 +592,18 @@
570
592
  "name": "HdsMobileTopBar",
571
593
  "filePath": "src/app/components/shell-controls.tsx"
572
594
  },
595
+ {
596
+ "name": "HdsRadio",
597
+ "filePath": "src/app/components/controls.tsx"
598
+ },
573
599
  {
574
600
  "name": "HdsRadio",
575
601
  "filePath": "src/app/components/radio.tsx"
576
602
  },
603
+ {
604
+ "name": "HdsSelect",
605
+ "filePath": "src/app/components/controls.tsx"
606
+ },
577
607
  {
578
608
  "name": "HdsSelect",
579
609
  "filePath": "src/app/components/select.tsx"
@@ -582,13 +612,25 @@
582
612
  "name": "HdsSidebarUtilityButton",
583
613
  "filePath": "src/app/components/shell-controls.tsx"
584
614
  },
615
+ {
616
+ "name": "HdsSlider",
617
+ "filePath": "src/app/components/controls.tsx"
618
+ },
585
619
  {
586
620
  "name": "HdsSlider",
587
621
  "filePath": "src/app/components/slider.tsx"
588
622
  },
623
+ {
624
+ "name": "HdsToggle",
625
+ "filePath": "src/app/components/controls.tsx"
626
+ },
589
627
  {
590
628
  "name": "HdsToggle",
591
629
  "filePath": "src/app/components/toggle.tsx"
630
+ },
631
+ {
632
+ "name": "HdsTooltip",
633
+ "filePath": "src/app/components/hds-tooltip.tsx"
592
634
  }
593
635
  ]
594
636
  },
@@ -693,7 +735,7 @@
693
735
  "hidden": false,
694
736
  "filePath": "src/app/components/alert.tsx",
695
737
  "description": "Alert - compact feedback surface with contextual severity.",
696
- "figmaUrl": null,
738
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=33-34",
697
739
  "figmaId": null,
698
740
  "preview": {
699
741
  "exportName": "Alert",
@@ -702,7 +744,8 @@
702
744
  "consumers": [
703
745
  "src/app/components/componentPreviewRegistry.tsx",
704
746
  "src/app/data/hdsEditorial.tsx",
705
- "src/stories/alert.stories.tsx"
747
+ "src/stories/alert.stories.tsx",
748
+ "src/stories/static-primitives.stories.tsx"
706
749
  ],
707
750
  "tokenMapping": {
708
751
  "Success accent": "semantic.color.feedback.success",
@@ -715,42 +758,9 @@
715
758
  "Info surface fill": "semantic.color.feedback.bg.info",
716
759
  "Corner radius": "primitive.radius.4"
717
760
  },
718
- "props": {
719
- "variant": {
720
- "type": "enum",
721
- "values": [
722
- "info",
723
- "success",
724
- "warning",
725
- "error"
726
- ],
727
- "default": "info"
728
- },
729
- "title": {
730
- "type": "string",
731
- "optional": true
732
- },
733
- "children": {
734
- "type": "ReactNode"
735
- }
736
- },
737
761
  "allowedChildren": [
738
762
  "*"
739
763
  ],
740
- "propConstraints": {
741
- "variant": {
742
- "type": "enum",
743
- "values": [
744
- "info",
745
- "success",
746
- "warning",
747
- "error"
748
- ]
749
- },
750
- "title": {
751
- "type": "string"
752
- }
753
- },
754
764
  "requiredProps": [
755
765
  "children"
756
766
  ],
@@ -761,7 +771,7 @@
761
771
  }
762
772
  ],
763
773
  "variantAxes": [
764
- "variant"
774
+ "tone"
765
775
  ],
766
776
  "componentProperties": [
767
777
  {
@@ -810,7 +820,40 @@
810
820
  "tier": "primitive",
811
821
  "docExempt": false,
812
822
  "sourcePath": "src/app/components/Alert.tsx",
813
- "figmaLink": "TODO:hds-master:Alert"
823
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=33-34",
824
+ "props": {
825
+ "children": {
826
+ "type": "ReactNode"
827
+ },
828
+ "title": {
829
+ "type": "string",
830
+ "optional": true
831
+ },
832
+ "tone": {
833
+ "type": "enum",
834
+ "values": [
835
+ "success",
836
+ "danger",
837
+ "warning",
838
+ "info"
839
+ ],
840
+ "default": "info"
841
+ }
842
+ },
843
+ "propConstraints": {
844
+ "title": {
845
+ "type": "string"
846
+ },
847
+ "tone": {
848
+ "type": "enum",
849
+ "values": [
850
+ "success",
851
+ "danger",
852
+ "warning",
853
+ "info"
854
+ ]
855
+ }
856
+ }
814
857
  },
815
858
  "CinematicLink": {
816
859
  "category": "Branding",
@@ -850,7 +893,7 @@
850
893
  "tier": "primitive",
851
894
  "docExempt": false,
852
895
  "sourcePath": "src/app/components/CinematicLink.tsx",
853
- "figmaLink": "TODO:hds-master:CinematicLink"
896
+ "figmaLink": null
854
897
  },
855
898
  "CodeBlock": {
856
899
  "category": "Display",
@@ -859,7 +902,7 @@
859
902
  "hidden": false,
860
903
  "filePath": "src/app/components/code-block.tsx",
861
904
  "description": "CodeBlock - code display with copy button and optional collapsible toggle.",
862
- "figmaUrl": null,
905
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-154",
863
906
  "figmaId": null,
864
907
  "preview": {
865
908
  "exportName": "CodeBlock",
@@ -918,7 +961,7 @@
918
961
  "tier": "primitive",
919
962
  "docExempt": false,
920
963
  "sourcePath": "src/app/components/CodeBlock.tsx",
921
- "figmaLink": "TODO:hds-master:CodeBlock"
964
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-154"
922
965
  },
923
966
  "Container": {
924
967
  "category": "Layout",
@@ -983,7 +1026,7 @@
983
1026
  "tier": "primitive",
984
1027
  "docExempt": false,
985
1028
  "sourcePath": "src/app/components/Container.tsx",
986
- "figmaLink": "TODO:hds-master:Container"
1029
+ "figmaLink": null
987
1030
  },
988
1031
  "Disclosure": {
989
1032
  "category": "Layout",
@@ -992,7 +1035,7 @@
992
1035
  "hidden": false,
993
1036
  "filePath": "src/app/components/disclosure.tsx",
994
1037
  "description": "Disclosure - compact disclosure surface for optional explanatory content.",
995
- "figmaUrl": null,
1038
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-453",
996
1039
  "figmaId": null,
997
1040
  "preview": {
998
1041
  "exportName": "Disclosure",
@@ -1098,7 +1141,7 @@
1098
1141
  }
1099
1142
  ],
1100
1143
  "sourcePath": "src/app/components/Disclosure.tsx",
1101
- "figmaLink": "TODO:hds-master:Disclosure"
1144
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-453"
1102
1145
  },
1103
1146
  "Divider": {
1104
1147
  "category": "Layout",
@@ -1107,7 +1150,7 @@
1107
1150
  "hidden": false,
1108
1151
  "filePath": "src/app/components/divider.tsx",
1109
1152
  "description": "Divider — semantic separator between content regions.",
1110
- "figmaUrl": null,
1153
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-26",
1111
1154
  "figmaId": null,
1112
1155
  "preview": {
1113
1156
  "exportName": "Divider",
@@ -1117,18 +1160,39 @@
1117
1160
  "src/app/components/componentPreviewRegistry.tsx",
1118
1161
  "src/app/components/metadata-list.tsx",
1119
1162
  "src/app/data/hdsEditorial.tsx",
1120
- "src/stories/divider.stories.tsx"
1163
+ "src/stories/divider.stories.tsx",
1164
+ "src/stories/static-primitives.stories.tsx"
1121
1165
  ],
1122
1166
  "tokenMapping": {
1123
1167
  "Default stroke": "semantic.color.border.default",
1124
1168
  "Strong stroke": "semantic.color.border.strong",
1125
1169
  "Stroke thickness": "primitive.borderWidth.xs"
1126
1170
  },
1171
+ "allowedChildren": [],
1172
+ "requiredProps": [],
1173
+ "a11yRules": [],
1174
+ "variantAxes": [
1175
+ "orientation",
1176
+ "variant"
1177
+ ],
1178
+ "componentProperties": [],
1179
+ "states": [
1180
+ "default"
1181
+ ],
1182
+ "slots": [
1183
+ {
1184
+ "name": "line",
1185
+ "figmaSlotName": "Line",
1186
+ "tokenBinding": {
1187
+ "fill": "semantic.color.border.default"
1188
+ }
1189
+ }
1190
+ ],
1191
+ "tier": "primitive",
1192
+ "docExempt": false,
1193
+ "sourcePath": "src/app/components/Divider.tsx",
1194
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-26",
1127
1195
  "props": {
1128
- "className": {
1129
- "type": "string",
1130
- "optional": true
1131
- },
1132
1196
  "orientation": {
1133
1197
  "type": "enum",
1134
1198
  "values": [
@@ -1143,18 +1207,18 @@
1143
1207
  },
1144
1208
  "strong": {
1145
1209
  "type": "boolean",
1146
- "default": false
1210
+ "optional": true
1147
1211
  },
1148
- "style": {
1149
- "type": "CSSProperties",
1212
+ "variant": {
1213
+ "type": "enum",
1214
+ "values": [
1215
+ "strong",
1216
+ "default"
1217
+ ],
1150
1218
  "optional": true
1151
1219
  }
1152
1220
  },
1153
- "allowedChildren": [],
1154
1221
  "propConstraints": {
1155
- "className": {
1156
- "type": "string"
1157
- },
1158
1222
  "orientation": {
1159
1223
  "type": "enum",
1160
1224
  "values": [
@@ -1164,30 +1228,15 @@
1164
1228
  },
1165
1229
  "strong": {
1166
1230
  "type": "boolean"
1231
+ },
1232
+ "variant": {
1233
+ "type": "enum",
1234
+ "values": [
1235
+ "strong",
1236
+ "default"
1237
+ ]
1167
1238
  }
1168
- },
1169
- "requiredProps": [],
1170
- "a11yRules": [],
1171
- "variantAxes": [
1172
- "orientation"
1173
- ],
1174
- "componentProperties": [],
1175
- "states": [
1176
- "default"
1177
- ],
1178
- "slots": [
1179
- {
1180
- "name": "line",
1181
- "figmaSlotName": "Line",
1182
- "tokenBinding": {
1183
- "fill": "semantic.color.border.default"
1184
- }
1185
- }
1186
- ],
1187
- "tier": "primitive",
1188
- "docExempt": false,
1189
- "sourcePath": "src/app/components/Divider.tsx",
1190
- "figmaLink": "TODO:hds-master:Divider"
1239
+ }
1191
1240
  },
1192
1241
  "DocLinkCard": {
1193
1242
  "category": "Navigation",
@@ -1228,7 +1277,7 @@
1228
1277
  "hidden": false,
1229
1278
  "docExempt": false,
1230
1279
  "figmaId": null,
1231
- "figmaLink": "TODO:hds-master:DocLinkCard",
1280
+ "figmaLink": null,
1232
1281
  "consumers": [
1233
1282
  "src/app/components/componentPreviewRegistry.tsx",
1234
1283
  "src/app/components/doc-link-card.test.tsx",
@@ -1444,7 +1493,7 @@
1444
1493
  }
1445
1494
  ],
1446
1495
  "sourcePath": "src/app/components/FoundationSwatch.tsx",
1447
- "figmaLink": "TODO:hds-master:FoundationSwatch"
1496
+ "figmaLink": null
1448
1497
  },
1449
1498
  "Grid": {
1450
1499
  "category": "Layout",
@@ -1568,7 +1617,7 @@
1568
1617
  "tier": "primitive",
1569
1618
  "docExempt": false,
1570
1619
  "sourcePath": "src/app/components/Grid.tsx",
1571
- "figmaLink": "TODO:hds-master:Grid"
1620
+ "figmaLink": null
1572
1621
  },
1573
1622
  "Icon": {
1574
1623
  "category": "Display",
@@ -1722,7 +1771,7 @@
1722
1771
  "tier": "primitive",
1723
1772
  "docExempt": false,
1724
1773
  "sourcePath": "src/app/components/Icon.tsx",
1725
- "figmaLink": "TODO:hds-master:Icon"
1774
+ "figmaLink": null
1726
1775
  },
1727
1776
  "IconButton": {
1728
1777
  "category": "Actions",
@@ -1731,7 +1780,7 @@
1731
1780
  "hidden": false,
1732
1781
  "filePath": "src/app/components/icon-button.tsx",
1733
1782
  "description": "IconButton ” icon-only action trigger built on the shared Button primitive.",
1734
- "figmaUrl": null,
1783
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=40-39",
1735
1784
  "figmaId": null,
1736
1785
  "preview": {
1737
1786
  "exportName": "IconButton",
@@ -1852,7 +1901,7 @@
1852
1901
  }
1853
1902
  ],
1854
1903
  "sourcePath": "src/app/components/IconButton.tsx",
1855
- "figmaLink": "TODO:hds-master:IconButton"
1904
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=40-39"
1856
1905
  },
1857
1906
  "InlineCode": {
1858
1907
  "category": "Display",
@@ -1861,7 +1910,7 @@
1861
1910
  "hidden": false,
1862
1911
  "filePath": "src/app/components/inline-code.tsx",
1863
1912
  "description": "InlineCode — inline code chip for token paths, file paths, and code-adjacent prose.",
1864
- "figmaUrl": null,
1913
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-155",
1865
1914
  "figmaId": null,
1866
1915
  "preview": {
1867
1916
  "exportName": "InlineCode",
@@ -1907,7 +1956,7 @@
1907
1956
  "tier": "primitive",
1908
1957
  "docExempt": false,
1909
1958
  "sourcePath": "src/app/components/InlineCode.tsx",
1910
- "figmaLink": "TODO:hds-master:InlineCode"
1959
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-155"
1911
1960
  },
1912
1961
  "InlineLink": {
1913
1962
  "category": "Navigation",
@@ -1916,7 +1965,7 @@
1916
1965
  "hidden": false,
1917
1966
  "filePath": "src/app/components/inline-link.tsx",
1918
1967
  "description": "InlineLink ” inline navigation and external-link primitive for body copy.",
1919
- "figmaUrl": null,
1968
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-161",
1920
1969
  "figmaId": null,
1921
1970
  "preview": {
1922
1971
  "exportName": "InlineLink",
@@ -1966,7 +2015,7 @@
1966
2015
  "tier": "primitive",
1967
2016
  "docExempt": false,
1968
2017
  "sourcePath": "src/app/components/InlineLink.tsx",
1969
- "figmaLink": "TODO:hds-master:InlineLink"
2018
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-161"
1970
2019
  },
1971
2020
  "Input": {
1972
2021
  "category": "Inputs",
@@ -1974,8 +2023,8 @@
1974
2023
  "governedCategory": true,
1975
2024
  "hidden": false,
1976
2025
  "filePath": "src/app/components/input.tsx",
1977
- "description": "Input — text field primitive (shadcn baseline). shadcn-baseline implementation (8s-5): cva-driven sizing/state composed against role-token Tailwind utilities (bg-background / border-input / focus-visible:ring-ring / placeholder:text-muted-foreground / etc.) wired by 8e-2 + 8s-1. Border swaps to border-destructive on error and the focus ring follows. Theme is handled entirely by CSS custom properties. The label/helper/error wrapper is deliberately retained on this primitive so existing call sites keep working unchanged. A future 8t pass may extract those slots into an HdsField pattern (see orchestration agentNote). Variants: size — sm (32px) / md (40px, default) / lg (48px) textStyle — body (default) / mono Derived state (data-state): default | focus | filled | error | disabled | loading loading swaps the trailing area for a spinner and sets aria-busy; disabled is implied. demoState (frozen, via DemoStateContext) is honored so matrix cells still freeze visually.",
1978
- "figmaUrl": null,
2026
+ "description": "Input — text field primitive with label, helper, and error slots.",
2027
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=38-20",
1979
2028
  "figmaId": null,
1980
2029
  "preview": {
1981
2030
  "exportName": "Input",
@@ -1983,13 +2032,17 @@
1983
2032
  },
1984
2033
  "consumers": [
1985
2034
  "src/app/components/componentPreviewRegistry.tsx",
2035
+ "src/app/components/form.tsx",
2036
+ "src/app/components/segmented-control.tsx",
1986
2037
  "src/app/components/stepper-field.tsx",
2038
+ "src/app/components/textarea.tsx",
2039
+ "src/app/components/time-input.tsx",
1987
2040
  "src/app/data/hdsEditorial.tsx",
1988
2041
  "src/app/design-system/generated-token-descriptions.ts",
1989
- "src/app/pages/docs/patterns/_template.tsx",
1990
- "src/app/pages/docs/patterns/HdsField.tsx",
1991
- "src/app/pages/sketches/private/CombatArenaLayout.tsx",
1992
- "src/stories/input.stories.tsx"
2042
+ "src/stories/combobox.stories.tsx",
2043
+ "src/stories/input.stories.tsx",
2044
+ "src/stories/patterns-layout.stories.tsx",
2045
+ "src/stories/textarea.stories.tsx"
1993
2046
  ],
1994
2047
  "tokenMapping": {
1995
2048
  "Surface fill": "role.background",
@@ -2074,15 +2127,8 @@
2074
2127
  "disabledText": "role.muted-foreground"
2075
2128
  },
2076
2129
  "figmaPropertyMapping": {
2077
- "type": "Type",
2078
2130
  "size": "Size",
2079
- "label": "Label",
2080
- "placeholder": "Placeholder",
2081
- "helperText": "Helper text",
2082
- "error": "Error",
2083
- "errorMessage": "Error message",
2084
- "disabled": "Disabled",
2085
- "loading": "Loading"
2131
+ "label": "Label"
2086
2132
  },
2087
2133
  "states": [
2088
2134
  "default",
@@ -2162,38 +2208,6 @@
2162
2208
  "sourceProp": "label",
2163
2209
  "boundTo": "characters",
2164
2210
  "targetSelector": "Label"
2165
- },
2166
- {
2167
- "name": "Placeholder",
2168
- "type": "TEXT",
2169
- "defaultValue": "Placeholder",
2170
- "sourceProp": "placeholder",
2171
- "boundTo": "characters",
2172
- "targetSelector": "Placeholder"
2173
- },
2174
- {
2175
- "name": "Helper text",
2176
- "type": "TEXT",
2177
- "defaultValue": "Helper text",
2178
- "sourceProp": "helperText",
2179
- "boundTo": "characters",
2180
- "targetSelector": "Helper"
2181
- },
2182
- {
2183
- "name": "Error",
2184
- "type": "BOOLEAN",
2185
- "defaultValue": false,
2186
- "sourceProp": "error",
2187
- "boundTo": "visibility",
2188
- "targetSelector": "Error"
2189
- },
2190
- {
2191
- "name": "Error message",
2192
- "type": "TEXT",
2193
- "defaultValue": "Error message",
2194
- "sourceProp": "errorMessage",
2195
- "boundTo": "characters",
2196
- "targetSelector": "Error"
2197
2211
  }
2198
2212
  ],
2199
2213
  "slots": [
@@ -2244,7 +2258,7 @@
2244
2258
  ],
2245
2259
  "tier": "primitive",
2246
2260
  "docExempt": false,
2247
- "figmaLink": "TODO:hds-master:Input"
2261
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=38-20"
2248
2262
  },
2249
2263
  "NavGroup": {
2250
2264
  "category": "Navigation",
@@ -2253,7 +2267,7 @@
2253
2267
  "hidden": false,
2254
2268
  "filePath": "src/app/components/nav-group.tsx",
2255
2269
  "description": "NavGroup - labeled navigation group for stacks of nav items.",
2256
- "figmaUrl": null,
2270
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-304",
2257
2271
  "figmaId": null,
2258
2272
  "preview": {
2259
2273
  "exportName": "NavGroup",
@@ -2352,7 +2366,7 @@
2352
2366
  }
2353
2367
  ],
2354
2368
  "sourcePath": "src/app/components/NavGroup.tsx",
2355
- "figmaLink": "TODO:hds-master:NavGroup"
2369
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-304"
2356
2370
  },
2357
2371
  "NavItem": {
2358
2372
  "category": "Navigation",
@@ -2361,7 +2375,7 @@
2361
2375
  "hidden": false,
2362
2376
  "filePath": "src/app/components/nav-item.tsx",
2363
2377
  "description": "NavItem - navigation row primitive for sidebars, table of contents, and list navigation.",
2364
- "figmaUrl": null,
2378
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-258",
2365
2379
  "figmaId": null,
2366
2380
  "preview": {
2367
2381
  "exportName": "NavItem",
@@ -2426,7 +2440,7 @@
2426
2440
  "tier": "primitive",
2427
2441
  "docExempt": false,
2428
2442
  "sourcePath": "src/app/components/NavItem.tsx",
2429
- "figmaLink": "TODO:hds-master:NavItem"
2443
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-258"
2430
2444
  },
2431
2445
  "SegmentedControl": {
2432
2446
  "category": "Inputs",
@@ -2435,7 +2449,7 @@
2435
2449
  "hidden": false,
2436
2450
  "filePath": "src/app/components/segmented-control.tsx",
2437
2451
  "description": "SegmentedControl \" segmented selection input for compact mutually-exclusive choices. The active×hover×pressed×disabled×secondary state matrix is expressed through `cva` compound variants keyed by `active` / `interaction` (the live-or-frozen-demo hover/pressed/rest sub-state) / `variant` / `disabled`, each resolving to the same `--semantic-*` custom properties the pre-Tailwind inline styles referenced — same tokens, same pixels, just Tailwind classes instead of a `style` object. Per ADR-015 this control keeps its own hover/focus tracking (per-segment `string | null` cardinality) rather than the shared `useInteractionState` single-element machine; only the class composition changed, not the state machine feeding it.",
2438
- "figmaUrl": null,
2452
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-334",
2439
2453
  "figmaId": null,
2440
2454
  "preview": {
2441
2455
  "exportName": "SegmentedControl",
@@ -2525,7 +2539,7 @@
2525
2539
  "tier": "primitive",
2526
2540
  "docExempt": false,
2527
2541
  "sourcePath": "src/app/components/SegmentedControl.tsx",
2528
- "figmaLink": "TODO:hds-master:SegmentedControl"
2542
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-334"
2529
2543
  },
2530
2544
  "Sketch": {
2531
2545
  "category": "Layout",
@@ -2595,7 +2609,7 @@
2595
2609
  }
2596
2610
  ],
2597
2611
  "sourcePath": "src/app/components/Sketch.tsx",
2598
- "figmaLink": "TODO:hds-master:Sketch"
2612
+ "figmaLink": null
2599
2613
  },
2600
2614
  "Stack": {
2601
2615
  "category": "Layout",
@@ -2784,7 +2798,7 @@
2784
2798
  "tier": "primitive",
2785
2799
  "docExempt": false,
2786
2800
  "sourcePath": "src/app/components/Stack.tsx",
2787
- "figmaLink": "TODO:hds-master:Stack"
2801
+ "figmaLink": null
2788
2802
  },
2789
2803
  "StepperField": {
2790
2804
  "category": "Inputs",
@@ -2793,7 +2807,7 @@
2793
2807
  "hidden": false,
2794
2808
  "filePath": "src/app/components/stepper-field.tsx",
2795
2809
  "description": "StepperField ” numeric input with decrement/increment controls. Classification baseline: Material Design, Chakra UI, and Ant Design treat steppers as numeric input controls rather than page-specific controls. This lives in shared components so sketches and docs consume the same primitive.",
2796
- "figmaUrl": null,
2810
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-425",
2797
2811
  "figmaId": null,
2798
2812
  "preview": {
2799
2813
  "exportName": "StepperField",
@@ -2875,7 +2889,7 @@
2875
2889
  }
2876
2890
  ],
2877
2891
  "sourcePath": "src/app/components/StepperField.tsx",
2878
- "figmaLink": "TODO:hds-master:StepperField"
2892
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-425"
2879
2893
  },
2880
2894
  "Table": {
2881
2895
  "category": "Display",
@@ -2884,7 +2898,7 @@
2884
2898
  "hidden": false,
2885
2899
  "filePath": "src/app/components/table.tsx",
2886
2900
  "description": "Table - structured data table primitive for documentation and compact UI matrices.",
2887
- "figmaUrl": null,
2901
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-300",
2888
2902
  "figmaId": null,
2889
2903
  "preview": {
2890
2904
  "exportName": "Table",
@@ -2961,7 +2975,7 @@
2961
2975
  "tier": "primitive",
2962
2976
  "docExempt": false,
2963
2977
  "sourcePath": "src/app/components/Table.tsx",
2964
- "figmaLink": "TODO:hds-master:Table"
2978
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-300"
2965
2979
  },
2966
2980
  "Tag": {
2967
2981
  "category": "Inputs",
@@ -2970,7 +2984,7 @@
2970
2984
  "hidden": false,
2971
2985
  "filePath": "src/app/components/tag.tsx",
2972
2986
  "description": "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 the visible surface compact. Colors (background, border-color, color) live in the pill's cva variants, painted through `group-hover`/`group-active` so the pill reacts to interaction on the shared outer button (converted off the former .hds-tag-btn/.hds-tag-pill theme.css rules for #60 — same behavior, now token-driven Tailwind classes). The `active` prop (aria-pressed selected state) is not one of the variant contract's four axes — it's expressed as the pill's `selected` cva variant, carrying the same rest → hover → pressed → focus-visible state matrix the contract expects, just keyed by selection instead of tone/size/density.",
2973
- "figmaUrl": null,
2987
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=32-11",
2974
2988
  "figmaId": null,
2975
2989
  "preview": {
2976
2990
  "exportName": "Tag",
@@ -3000,6 +3014,7 @@
3000
3014
  "src/app/components/visually-hidden.tsx",
3001
3015
  "src/app/data/hdsEditorial.tsx",
3002
3016
  "src/app/design-system/generated-token-descriptions.ts",
3017
+ "src/stories/static-primitives.stories.tsx",
3003
3018
  "src/stories/tag.stories.tsx"
3004
3019
  ],
3005
3020
  "tokenMapping": {
@@ -3119,7 +3134,7 @@
3119
3134
  "tier": "primitive",
3120
3135
  "docExempt": false,
3121
3136
  "sourcePath": "src/app/components/Tag.tsx",
3122
- "figmaLink": "TODO:hds-master:Tag"
3137
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=32-11"
3123
3138
  },
3124
3139
  "Token": {
3125
3140
  "category": "Display",
@@ -3158,6 +3173,7 @@
3158
3173
  "src/stories/heading-stack.stories.tsx",
3159
3174
  "src/stories/input.stories.tsx",
3160
3175
  "src/stories/patterns-layout.stories.tsx",
3176
+ "src/stories/stacked-card-rail.stories.tsx",
3161
3177
  "src/stories/status-list-item.stories.tsx",
3162
3178
  "src/stories/table.stories.tsx",
3163
3179
  "src/stories/tabs.stories.tsx",
@@ -3277,7 +3293,7 @@
3277
3293
  "tier": "primitive",
3278
3294
  "docExempt": false,
3279
3295
  "sourcePath": "src/app/components/Token.tsx",
3280
- "figmaLink": "TODO:hds-master:Token"
3296
+ "figmaLink": null
3281
3297
  },
3282
3298
  "Surface": {
3283
3299
  "category": "Layout",
@@ -3286,7 +3302,7 @@
3286
3302
  "hidden": false,
3287
3303
  "filePath": "src/app/components/surface.tsx",
3288
3304
  "description": "Surface — governed inset surface primitive. Enforces the \"Surface Inset\" rule: backgrounds MUST have internal padding. - Default padding: px24 (cards) | px16 (items) - Default border: none (elevation model — use shadow for lift) - Fixed radius: var(--component-card-radius) - shadow prop: applies a two-layer elevation shadow for card lift Usage: <Surface>Card content</Surface> <Surface padding=\"item\">Compact item</Surface> <Surface shadow>Lifted card with elevation shadow.</Surface>",
3289
- "figmaUrl": null,
3305
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-27",
3290
3306
  "figmaId": null,
3291
3307
  "preview": {
3292
3308
  "exportName": "Surface",
@@ -3365,7 +3381,7 @@
3365
3381
  "tier": "primitive",
3366
3382
  "docExempt": true,
3367
3383
  "sourcePath": "src/app/components/Surface.tsx",
3368
- "figmaLink": "TODO:hds-master:Surface",
3384
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-27",
3369
3385
  "states": [
3370
3386
  "default"
3371
3387
  ]
@@ -3376,8 +3392,8 @@
3376
3392
  "governedCategory": true,
3377
3393
  "hidden": false,
3378
3394
  "filePath": "src/app/components/card.tsx",
3379
- "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
3380
- "figmaUrl": null,
3395
+ "description": "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.",
3396
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=39-11",
3381
3397
  "figmaId": null,
3382
3398
  "consumers": [
3383
3399
  "src/app/components/doc-link-card.tsx",
@@ -3391,7 +3407,8 @@
3391
3407
  "src/app/data/hdsEditorial.tsx",
3392
3408
  "src/app/design-system/generated-token-descriptions.ts",
3393
3409
  "src/stories/card.stories.tsx",
3394
- "src/stories/grid.stories.tsx"
3410
+ "src/stories/grid.stories.tsx",
3411
+ "src/stories/static-primitives.stories.tsx"
3395
3412
  ],
3396
3413
  "tokenMapping": {
3397
3414
  "Surface fill": "role.card",
@@ -3430,6 +3447,29 @@
3430
3447
  "type": "boolean",
3431
3448
  "default": false
3432
3449
  },
3450
+ "variant": {
3451
+ "type": "enum",
3452
+ "values": [
3453
+ "default",
3454
+ "accent"
3455
+ ],
3456
+ "default": "default"
3457
+ },
3458
+ "tone": {
3459
+ "type": "enum",
3460
+ "values": [
3461
+ "neutral",
3462
+ "danger",
3463
+ "success",
3464
+ "warning",
3465
+ "info"
3466
+ ],
3467
+ "default": "neutral"
3468
+ },
3469
+ "bordered": {
3470
+ "type": "boolean",
3471
+ "default": false
3472
+ },
3433
3473
  "className": {
3434
3474
  "type": "string",
3435
3475
  "optional": true
@@ -3447,7 +3487,9 @@
3447
3487
  },
3448
3488
  "figmaPropertyMapping": {
3449
3489
  "padding": "Padding",
3450
- "gap": "Gap"
3490
+ "gap": "Gap",
3491
+ "variant": "Variant",
3492
+ "tone": "Tone"
3451
3493
  },
3452
3494
  "states": [
3453
3495
  "default"
@@ -3455,71 +3497,30 @@
3455
3497
  "allowedChildren": [
3456
3498
  "*"
3457
3499
  ],
3458
- "propConstraints": {
3459
- "padding": {
3460
- "type": "enum",
3461
- "values": [
3462
- "component",
3463
- "item",
3464
- "none",
3465
- "px24",
3466
- "px16"
3467
- ]
3468
- },
3469
- "gap": {
3470
- "type": "enum",
3471
- "values": [
3472
- "tight",
3473
- "normal",
3474
- "inset",
3475
- "spacious"
3476
- ]
3477
- },
3478
- "noPadding": {
3479
- "type": "boolean"
3480
- },
3481
- "className": {
3482
- "type": "string"
3483
- },
3484
- "layout": {
3485
- "type": "enum",
3486
- "values": [
3487
- "VERTICAL",
3488
- "HORIZONTAL"
3489
- ]
3490
- },
3491
- "fill": {
3492
- "type": "string"
3493
- },
3494
- "stroke": {
3495
- "type": "string"
3496
- },
3497
- "radius": {
3498
- "type": "string"
3499
- }
3500
- },
3501
- "requiredProps": [
3502
- "children"
3503
- ],
3504
- "a11yRules": [],
3505
- "preview": {
3506
- "exportName": "Card",
3507
- "sizing": "panel"
3508
- },
3509
- "variantAxes": [
3510
- "padding"
3511
- ],
3512
- "componentProperties": [],
3513
- "slots": [
3514
- {
3515
- "name": "background",
3516
- "figmaSlotName": "Background",
3517
- "tokenBinding": {
3518
- "fill": "role.card",
3519
- "stroke": "role.border",
3520
- "cornerRadius": "role.radius",
3521
- "gap": "semantic.space.layout.tight"
3522
- }
3500
+ "requiredProps": [
3501
+ "children"
3502
+ ],
3503
+ "a11yRules": [],
3504
+ "preview": {
3505
+ "exportName": "Card",
3506
+ "sizing": "panel"
3507
+ },
3508
+ "variantAxes": [
3509
+ "padding",
3510
+ "variant",
3511
+ "tone"
3512
+ ],
3513
+ "componentProperties": [],
3514
+ "slots": [
3515
+ {
3516
+ "name": "background",
3517
+ "figmaSlotName": "Background",
3518
+ "tokenBinding": {
3519
+ "fill": "role.card",
3520
+ "stroke": "role.border",
3521
+ "cornerRadius": "role.radius",
3522
+ "gap": "semantic.space.layout.tight"
3523
+ }
3523
3524
  },
3524
3525
  {
3525
3526
  "name": "header",
@@ -3566,7 +3567,57 @@
3566
3567
  "Body",
3567
3568
  "Footer"
3568
3569
  ],
3569
- "figmaLink": "TODO:hds-master:Card"
3570
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=39-11",
3571
+ "propConstraints": {
3572
+ "as": {
3573
+ "type": "string"
3574
+ },
3575
+ "padding": {
3576
+ "type": "enum",
3577
+ "values": [
3578
+ "component",
3579
+ "item",
3580
+ "none",
3581
+ "px24",
3582
+ "px16"
3583
+ ]
3584
+ },
3585
+ "gap": {
3586
+ "type": "enum",
3587
+ "values": [
3588
+ "tight",
3589
+ "normal",
3590
+ "inset",
3591
+ "spacious"
3592
+ ]
3593
+ },
3594
+ "noPadding": {
3595
+ "type": "boolean"
3596
+ },
3597
+ "variant": {
3598
+ "type": "enum",
3599
+ "values": [
3600
+ "default",
3601
+ "accent"
3602
+ ]
3603
+ },
3604
+ "tone": {
3605
+ "type": "enum",
3606
+ "values": [
3607
+ "neutral",
3608
+ "danger",
3609
+ "success",
3610
+ "warning",
3611
+ "info"
3612
+ ]
3613
+ },
3614
+ "bordered": {
3615
+ "type": "boolean"
3616
+ },
3617
+ "className": {
3618
+ "type": "string"
3619
+ }
3620
+ }
3570
3621
  },
3571
3622
  "ComponentInstanceMatrix": {
3572
3623
  "category": "Utilities",
@@ -3598,7 +3649,7 @@
3598
3649
  "variantAxes": [],
3599
3650
  "componentProperties": [],
3600
3651
  "sourcePath": "src/app/components/ComponentInstanceMatrix.tsx",
3601
- "figmaLink": "TODO:hds-master:ComponentInstanceMatrix"
3652
+ "figmaLink": null
3602
3653
  },
3603
3654
  "SpecimenBlock": {
3604
3655
  "category": "Utilities",
@@ -3630,15 +3681,15 @@
3630
3681
  "variantAxes": [],
3631
3682
  "componentProperties": [],
3632
3683
  "sourcePath": "src/app/components/SpecimenBlock.tsx",
3633
- "figmaLink": "TODO:hds-master:SpecimenBlock"
3684
+ "figmaLink": null
3634
3685
  },
3635
3686
  "ActivityFeed": {
3636
- "category": "Uncategorized",
3637
- "categorySource": "missing-jsdoc",
3638
- "governedCategory": false,
3687
+ "category": "Display",
3688
+ "categorySource": "jsdoc",
3689
+ "governedCategory": true,
3639
3690
  "hidden": false,
3640
3691
  "filePath": "src/app/components/activity-feed.tsx",
3641
- "description": "ActivityFeed — chronological event log using whitespace as the sole separator between items. Use for timeline views and system audit trails; reach for Table when columnar comparison matters. Enforces 48px gap (space.12) between events and semantic typography roles throughout.",
3692
+ "description": "ActivityFeed — chronological system event log. Renders a list of activity events using white space as the sole separator. No dividers, no borders between items. 48px gap (space.12) creates the visual grouping between events; 16px gap inside each item structures the content hierarchy. Typography mapping: title → heading3 (24px/1.25) description → body (16px/1.5) timestamp → technical (12px/1.0 mono) category → ui (14px/1.5)",
3642
3693
  "figmaUrl": null,
3643
3694
  "figmaId": null,
3644
3695
  "preview": {
@@ -3706,7 +3757,7 @@
3706
3757
  }
3707
3758
  ],
3708
3759
  "sourcePath": "src/app/components/ActivityFeed.tsx",
3709
- "figmaLink": "TODO:hds-master:ActivityFeed"
3760
+ "figmaLink": null
3710
3761
  },
3711
3762
  "HeadingStack": {
3712
3763
  "category": "Typography",
@@ -3768,12 +3819,12 @@
3768
3819
  "targetSelector": "Heading"
3769
3820
  },
3770
3821
  {
3771
- "name": "Subtext",
3822
+ "name": "Subheading",
3772
3823
  "type": "TEXT",
3773
- "defaultValue": "Supporting subtext",
3774
- "sourceProp": "subtext",
3824
+ "defaultValue": "Supporting subheading",
3825
+ "sourceProp": "subheading",
3775
3826
  "boundTo": "characters",
3776
- "targetSelector": "Subtext"
3827
+ "targetSelector": "Subheading"
3777
3828
  }
3778
3829
  ],
3779
3830
  "states": [
@@ -3805,7 +3856,7 @@
3805
3856
  "tier": "primitive",
3806
3857
  "docExempt": true,
3807
3858
  "sourcePath": "src/app/components/HeadingStack.tsx",
3808
- "figmaLink": "TODO:hds-master:HeadingStack"
3859
+ "figmaLink": null
3809
3860
  },
3810
3861
  "HdsSystemDocLayout": {
3811
3862
  "category": "Uncategorized",
@@ -3975,7 +4026,7 @@
3975
4026
  "tier": "primitive",
3976
4027
  "docExempt": true,
3977
4028
  "sourcePath": "src/app/components/Text.tsx",
3978
- "figmaLink": "TODO:hds-master:Text"
4029
+ "figmaLink": null
3979
4030
  },
3980
4031
  "Dialog": {
3981
4032
  "category": "Overlays",
@@ -3984,8 +4035,8 @@
3984
4035
  "hidden": false,
3985
4036
  "docExempt": true,
3986
4037
  "filePath": "src/app/components/dialog.tsx",
3987
- "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
3988
- "figmaUrl": null,
4038
+ "description": "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.",
4039
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-27",
3989
4040
  "figmaId": null,
3990
4041
  "tier": "primitive",
3991
4042
  "preview": {
@@ -4015,7 +4066,7 @@
4015
4066
  "name": "Title",
4016
4067
  "type": "TEXT",
4017
4068
  "defaultValue": "Dialog title",
4018
- "sourceProp": "title",
4069
+ "sourceProp": "Title.children",
4019
4070
  "boundTo": "characters",
4020
4071
  "targetSelector": "Title"
4021
4072
  },
@@ -4023,15 +4074,15 @@
4023
4074
  "name": "Description",
4024
4075
  "type": "TEXT",
4025
4076
  "defaultValue": "Dialog description",
4026
- "sourceProp": "description",
4077
+ "sourceProp": "Description.children",
4027
4078
  "boundTo": "characters",
4028
4079
  "targetSelector": "Description"
4029
4080
  },
4030
4081
  {
4031
- "name": "Hide close",
4082
+ "name": "Show close",
4032
4083
  "type": "BOOLEAN",
4033
- "defaultValue": false,
4034
- "sourceProp": "hideClose",
4084
+ "defaultValue": true,
4085
+ "sourceProp": "Content.hideClose",
4035
4086
  "boundTo": "visibility",
4036
4087
  "targetSelector": "Close",
4037
4088
  "invert": true
@@ -4052,18 +4103,6 @@
4052
4103
  "type": "boolean",
4053
4104
  "default": true
4054
4105
  },
4055
- "title": {
4056
- "type": "string",
4057
- "optional": true
4058
- },
4059
- "description": {
4060
- "type": "string",
4061
- "optional": true
4062
- },
4063
- "hideClose": {
4064
- "type": "boolean",
4065
- "default": false
4066
- },
4067
4106
  "children": {
4068
4107
  "type": "ReactNode"
4069
4108
  }
@@ -4081,9 +4120,9 @@
4081
4120
  "focusRing": "role.ring"
4082
4121
  },
4083
4122
  "figmaPropertyMapping": {
4084
- "title": "Title",
4085
- "description": "Description",
4086
- "hideClose": "Hide close",
4123
+ "Title.children": "Title",
4124
+ "Description.children": "Description",
4125
+ "Content.hideClose": "Show close",
4087
4126
  "modal": "Modal"
4088
4127
  },
4089
4128
  "states": [
@@ -4148,26 +4187,6 @@
4148
4187
  "allowedChildren": [
4149
4188
  "*"
4150
4189
  ],
4151
- "propConstraints": {
4152
- "open": {
4153
- "type": "boolean"
4154
- },
4155
- "defaultOpen": {
4156
- "type": "boolean"
4157
- },
4158
- "modal": {
4159
- "type": "boolean"
4160
- },
4161
- "title": {
4162
- "type": "string"
4163
- },
4164
- "description": {
4165
- "type": "string"
4166
- },
4167
- "hideClose": {
4168
- "type": "boolean"
4169
- }
4170
- },
4171
4190
  "requiredProps": [
4172
4191
  "children"
4173
4192
  ],
@@ -4192,7 +4211,18 @@
4192
4211
  "Description",
4193
4212
  "Close"
4194
4213
  ],
4195
- "figmaLink": "TODO:hds-master:Dialog"
4214
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-27",
4215
+ "propConstraints": {
4216
+ "open": {
4217
+ "type": "boolean"
4218
+ },
4219
+ "defaultOpen": {
4220
+ "type": "boolean"
4221
+ },
4222
+ "modal": {
4223
+ "type": "boolean"
4224
+ }
4225
+ }
4196
4226
  },
4197
4227
  "StackedCardRail": {
4198
4228
  "category": "Display",
@@ -4204,13 +4234,15 @@
4204
4234
  "description": "StackedCardRail — horizontally-scrolling stacked card carousel. Scroll mechanism: vertical scroll on an absolutely-positioned inner container is mapped to horizontal scroll on a sticky inner strip via a single scroll event listener. Cards use CSS scroll-driven animation (animation-timeline: view(x …)) for the stack/unstack effect where the browser supports it; a plain horizontal rail is the graceful fallback. Browser compat note: - animation-timeline: view() — Chrome 115+, Firefox 110+ (behind flag until v114), Safari 18+ (TP only as of 2025). The @supports guard ensures the stacking animation is only applied when the feature is available; all other browsers get a clean scrollable row. - :has() selector (neighbour shift on hover) — Chrome 105+, FF 121+, Safari 15.4+. Gated with @supports selector(:has(+ *)).",
4205
4235
  "figmaUrl": null,
4206
4236
  "figmaId": null,
4207
- "figmaLink": "TODO:hds-master:StackedCardRail",
4237
+ "figmaLink": null,
4208
4238
  "tier": "pattern",
4209
4239
  "preview": {
4210
4240
  "exportName": "StackedCardRail",
4211
4241
  "sizing": "panel"
4212
4242
  },
4213
- "consumers": [],
4243
+ "consumers": [
4244
+ "src/stories/stacked-card-rail.stories.tsx"
4245
+ ],
4214
4246
  "tokenMapping": {},
4215
4247
  "variantAxes": [],
4216
4248
  "componentProperties": [],
@@ -4235,9 +4267,9 @@
4235
4267
  "docExempt": false,
4236
4268
  "filePath": "src/app/components/button.tsx",
4237
4269
  "description": "Triggers an action when activated.",
4238
- "figmaUrl": null,
4270
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=28-138",
4239
4271
  "figmaId": null,
4240
- "figmaLink": "TODO:hds-master:Button",
4272
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=28-138",
4241
4273
  "tier": "primitive",
4242
4274
  "preview": {
4243
4275
  "exportName": "Button",
@@ -4245,40 +4277,58 @@
4245
4277
  },
4246
4278
  "consumers": [
4247
4279
  "src/app/components/activity-feed.tsx",
4280
+ "src/app/components/alert-dialog.tsx",
4248
4281
  "src/app/components/animated-label.tsx",
4249
4282
  "src/app/components/api-reference.tsx",
4250
- "src/app/components/approval-card.tsx",
4251
- "src/app/components/ComponentDocPage.tsx",
4283
+ "src/app/components/button-group.test.tsx",
4284
+ "src/app/components/button-group.tsx",
4285
+ "src/app/components/card.tsx",
4252
4286
  "src/app/components/componentPreviewRegistry.tsx",
4253
4287
  "src/app/components/dialog.tsx",
4254
- "src/app/components/doc-sections.tsx",
4255
4288
  "src/app/components/error-boundary.tsx",
4256
4289
  "src/app/components/error-pattern.tsx",
4290
+ "src/app/components/form.tsx",
4257
4291
  "src/app/components/icon-button.tsx",
4258
4292
  "src/app/components/image-lightbox.tsx",
4293
+ "src/app/components/menu.tsx",
4294
+ "src/app/components/multi-selector.tsx",
4295
+ "src/app/components/pagination.tsx",
4296
+ "src/app/components/popover.tsx",
4297
+ "src/app/components/segmented-control.tsx",
4259
4298
  "src/app/components/sketch-controls.tsx",
4299
+ "src/app/components/toast.tsx",
4300
+ "src/app/components/toolbar.test.tsx",
4301
+ "src/app/components/toolbar.tsx",
4260
4302
  "src/app/components/variant-strip.tsx",
4261
4303
  "src/app/context/DemoStateContext.tsx",
4262
- "src/app/data/projects.ts",
4263
4304
  "src/app/design-system/generated-token-descriptions.ts",
4264
- "src/app/design-system/searchIndex.ts",
4265
- "src/app/lab/shadcn-spike/Button.tsx",
4266
- "src/app/lab/shadcn-spike/page.tsx",
4267
- "src/app/pages/admin/ApprovalDetail.tsx",
4268
- "src/app/pages/docs/patterns/HdsActivityFeed.tsx",
4269
- "src/app/pages/docs/patterns/HdsIconButton.tsx",
4270
- "src/app/pages/sketches/private/MetaballsLayout.tsx",
4271
- "src/app/pages/sketches/private/ShapeExplorerLayout.tsx",
4272
- "src/app/pages/sketches/private/WaveBackgroundLayout.tsx",
4305
+ "src/form/index.ts",
4306
+ "src/mui/index.ts",
4307
+ "src/stories/alert-dialog.stories.tsx",
4308
+ "src/stories/button-group.stories.tsx",
4273
4309
  "src/stories/button.stories.tsx",
4310
+ "src/stories/code-block.stories.tsx",
4311
+ "src/stories/combobox.stories.tsx",
4312
+ "src/stories/dialog.stories.tsx",
4313
+ "src/stories/form.stories.tsx",
4314
+ "src/stories/hds-tooltip.stories.tsx",
4274
4315
  "src/stories/icon-button.stories.tsx",
4316
+ "src/stories/image-lightbox.stories.tsx",
4275
4317
  "src/stories/inline-code.stories.tsx",
4318
+ "src/stories/menu.stories.tsx",
4319
+ "src/stories/nav-group.stories.tsx",
4320
+ "src/stories/patterns-layout.stories.tsx",
4321
+ "src/stories/popover.stories.tsx",
4276
4322
  "src/stories/table.stories.tsx",
4277
- "src/stories/text-lockup.stories.tsx"
4323
+ "src/stories/text-lockup.stories.tsx",
4324
+ "src/stories/toast.stories.tsx",
4325
+ "src/stories/toolbar.stories.tsx",
4326
+ "src/stories/top-nav.stories.tsx"
4278
4327
  ],
4279
4328
  "tokenMapping": {},
4280
4329
  "variantAxes": [
4281
4330
  "variant",
4331
+ "tone",
4282
4332
  "size",
4283
4333
  "state"
4284
4334
  ],
@@ -4292,7 +4342,7 @@
4292
4342
  "targetSelector": "Label"
4293
4343
  },
4294
4344
  {
4295
- "name": "Leading icon",
4345
+ "name": "Show icon",
4296
4346
  "type": "BOOLEAN",
4297
4347
  "defaultValue": false,
4298
4348
  "sourceProp": "iconLeft",
@@ -4300,21 +4350,12 @@
4300
4350
  "targetSelector": "IconLeft"
4301
4351
  },
4302
4352
  {
4303
- "name": "Trailing icon",
4353
+ "name": "Show trail icon",
4304
4354
  "type": "BOOLEAN",
4305
4355
  "defaultValue": false,
4306
4356
  "sourceProp": "iconRight",
4307
4357
  "boundTo": "visibility",
4308
4358
  "targetSelector": "IconRight"
4309
- },
4310
- {
4311
- "name": "Show label",
4312
- "type": "BOOLEAN",
4313
- "defaultValue": true,
4314
- "sourceProp": "iconOnly",
4315
- "boundTo": "visibility",
4316
- "targetSelector": "Label",
4317
- "invert": true
4318
4359
  }
4319
4360
  ],
4320
4361
  "sourcePath": "src/app/components/button.tsx",
@@ -4329,6 +4370,17 @@
4329
4370
  ],
4330
4371
  "default": "secondary"
4331
4372
  },
4373
+ "tone": {
4374
+ "type": "enum",
4375
+ "values": [
4376
+ "neutral",
4377
+ "danger",
4378
+ "success",
4379
+ "warning",
4380
+ "info"
4381
+ ],
4382
+ "default": "neutral"
4383
+ },
4332
4384
  "size": {
4333
4385
  "type": "enum",
4334
4386
  "values": [
@@ -4374,13 +4426,11 @@
4374
4426
  },
4375
4427
  "figmaPropertyMapping": {
4376
4428
  "variant": "Variant",
4429
+ "tone": "Tone",
4377
4430
  "size": "Size",
4378
- "disabled": "Disabled",
4379
- "loading": "Loading",
4380
4431
  "label": "Label",
4381
- "iconLeft": "Leading icon",
4382
- "iconRight": "Trailing icon",
4383
- "iconOnly": "Icon only"
4432
+ "iconLeft": "Show icon",
4433
+ "iconRight": "Show trail icon"
4384
4434
  },
4385
4435
  "states": [
4386
4436
  "default",
@@ -4391,6 +4441,17 @@
4391
4441
  "loading"
4392
4442
  ],
4393
4443
  "allowedChildren": [],
4444
+ "requiredProps": [],
4445
+ "a11yRules": [
4446
+ {
4447
+ "rule": "Must have accessible name via label prop or aria-label",
4448
+ "required": true
4449
+ },
4450
+ {
4451
+ "rule": "Focus ring visible in all interactive states (uses hds-focus class)",
4452
+ "required": true
4453
+ }
4454
+ ],
4394
4455
  "propConstraints": {
4395
4456
  "variant": {
4396
4457
  "type": "enum",
@@ -4400,6 +4461,16 @@
4400
4461
  "tertiary"
4401
4462
  ]
4402
4463
  },
4464
+ "tone": {
4465
+ "type": "enum",
4466
+ "values": [
4467
+ "neutral",
4468
+ "danger",
4469
+ "success",
4470
+ "warning",
4471
+ "info"
4472
+ ]
4473
+ },
4403
4474
  "size": {
4404
4475
  "type": "enum",
4405
4476
  "values": [
@@ -4420,18 +4491,7 @@
4420
4491
  "iconOnly": {
4421
4492
  "type": "boolean"
4422
4493
  }
4423
- },
4424
- "requiredProps": [],
4425
- "a11yRules": [
4426
- {
4427
- "rule": "Must have accessible name via label prop or aria-label",
4428
- "required": true
4429
- },
4430
- {
4431
- "rule": "Focus ring visible in all interactive states (uses hds-focus class)",
4432
- "required": true
4433
- }
4434
- ]
4494
+ }
4435
4495
  },
4436
4496
  "Callout": {
4437
4497
  "category": "Feedback",
@@ -4441,9 +4501,9 @@
4441
4501
  "docExempt": false,
4442
4502
  "filePath": "src/app/components/callout.tsx",
4443
4503
  "description": "Tone-driven side-rule callout for status, quotes, hypotheses.",
4444
- "figmaUrl": null,
4504
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-85",
4445
4505
  "figmaId": null,
4446
- "figmaLink": "TODO:hds-master:Callout",
4506
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-85",
4447
4507
  "tier": "primitive",
4448
4508
  "preview": {
4449
4509
  "exportName": "Callout",
@@ -4506,9 +4566,9 @@
4506
4566
  "docExempt": false,
4507
4567
  "filePath": "src/app/components/empty-state.tsx",
4508
4568
  "description": "EmptyState — consistent no-data placeholder for lists, grids, and sections. communicate \"no data yet\" with consistent muted typography instead of agents inventing one-off `<p>No items.</p>` lines. use for full-page errors (use ErrorPage) or for loading states (use a skeleton). Do NOT wrap in Surface or Card — the empty state is a typographic message, not a chrome-bearing container.",
4509
- "figmaUrl": null,
4569
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-352",
4510
4570
  "figmaId": null,
4511
- "figmaLink": "TODO:hds-master:EmptyState",
4571
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-352",
4512
4572
  "tier": "primitive",
4513
4573
  "preview": {
4514
4574
  "exportName": "EmptyState",
@@ -4550,9 +4610,9 @@
4550
4610
  "docExempt": false,
4551
4611
  "filePath": "src/app/components/field.tsx",
4552
4612
  "description": "Caption label paired with a value — used in metadata grids and read-only forms.",
4553
- "figmaUrl": null,
4613
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=85-81",
4554
4614
  "figmaId": null,
4555
- "figmaLink": "TODO:hds-master:Field",
4615
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=85-81",
4556
4616
  "tier": "primitive",
4557
4617
  "preview": {
4558
4618
  "exportName": "Field",
@@ -4634,7 +4694,7 @@
4634
4694
  "description": "Page — standard page shell. Wraps page content in Container (width constraint) and applies the canonical vertical padding so content breathes against the viewport edges on scroll. Use as the outermost element of any new page so vertical rhythm is consistent across the system without per-page reinvention. Footer: every page mounted under HDSLayout (the standard route shell) gets a shared footer rendered after this component's content, with bottom space below the footer owned by the layout shell. Page intentionally does not render its own footer — the shell is the single source of truth. Use Container directly only for full-bleed surfaces (sketches, hero sections, embedded canvases) where the page owns its own vertical padding. Usage: <Page> <Stack direction=\"column\" gap=\"spacious\">...</Stack> </Page> <Page maxWidth=\"content\" paddingY=\"compact\"> <article>...</article> </Page>",
4635
4695
  "figmaUrl": null,
4636
4696
  "figmaId": null,
4637
- "figmaLink": "TODO:hds-master:Page",
4697
+ "figmaLink": null,
4638
4698
  "tier": "primitive",
4639
4699
  "preview": {
4640
4700
  "exportName": "Page",
@@ -4701,9 +4761,9 @@
4701
4761
  "docExempt": false,
4702
4762
  "filePath": "src/app/components/stat.tsx",
4703
4763
  "description": "Headline metric — large value, uppercase caption label, optional sub-line.",
4704
- "figmaUrl": null,
4764
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-247",
4705
4765
  "figmaId": null,
4706
- "figmaLink": "TODO:hds-master:Stat",
4766
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-247",
4707
4767
  "tier": "primitive",
4708
4768
  "preview": {
4709
4769
  "exportName": "Stat",
@@ -4771,9 +4831,9 @@
4771
4831
  "docExempt": false,
4772
4832
  "filePath": "src/app/components/status-list-item.tsx",
4773
4833
  "description": "Status dot + title row with optional muted notes and trailing slot (e.g. badge).",
4774
- "figmaUrl": null,
4834
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-350",
4775
4835
  "figmaId": null,
4776
- "figmaLink": "TODO:hds-master:StatusListItem",
4836
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-350",
4777
4837
  "tier": "pattern",
4778
4838
  "preview": {
4779
4839
  "exportName": "StatusListItem",
@@ -4841,9 +4901,9 @@
4841
4901
  "docExempt": false,
4842
4902
  "filePath": "src/app/components/status-tile.tsx",
4843
4903
  "description": "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 colour belongs in the trailing slot, never as a left rule on the tile — every tile should look the same so feedback signals stay reserved for genuinely interrupting states.",
4844
- "figmaUrl": null,
4904
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-292",
4845
4905
  "figmaId": null,
4846
- "figmaLink": "TODO:hds-master:StatusTile",
4906
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-292",
4847
4907
  "tier": "pattern",
4848
4908
  "preview": {
4849
4909
  "exportName": "StatusTile",
@@ -4897,7 +4957,7 @@
4897
4957
  "description": "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.",
4898
4958
  "figmaUrl": null,
4899
4959
  "figmaId": null,
4900
- "figmaLink": "TODO:hds-master:TileGrid",
4960
+ "figmaLink": null,
4901
4961
  "tier": "primitive",
4902
4962
  "preview": {
4903
4963
  "exportName": "TileGrid",
@@ -4961,9 +5021,9 @@
4961
5021
  "governedCategory": true,
4962
5022
  "hidden": false,
4963
5023
  "docExempt": false,
4964
- "figmaUrl": null,
5024
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=31-15",
4965
5025
  "figmaId": null,
4966
- "figmaLink": "TODO:hds-master:Badge",
5026
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=31-15",
4967
5027
  "tier": "primitive",
4968
5028
  "preview": {
4969
5029
  "exportName": "Badge",
@@ -4983,12 +5043,15 @@
4983
5043
  "src/stories/component-instance-matrix.stories.tsx",
4984
5044
  "src/stories/nav-group.stories.tsx",
4985
5045
  "src/stories/patterns-layout.stories.tsx",
5046
+ "src/stories/static-primitives.stories.tsx",
4986
5047
  "src/stories/table.stories.tsx"
4987
5048
  ],
4988
5049
  "tokenMapping": {}
4989
5050
  },
4990
5051
  "TextLockup": {
4991
- "variantAxes": [],
5052
+ "variantAxes": [
5053
+ "size"
5054
+ ],
4992
5055
  "componentProperties": [
4993
5056
  {
4994
5057
  "name": "Eyebrow",
@@ -5032,7 +5095,7 @@
5032
5095
  "docExempt": false,
5033
5096
  "figmaUrl": null,
5034
5097
  "figmaId": "text-lockup-pattern",
5035
- "figmaLink": "TODO:hds-master:TextLockup",
5098
+ "figmaLink": null,
5036
5099
  "tier": "pattern",
5037
5100
  "preview": {
5038
5101
  "exportName": "TextLockup",
@@ -5054,7 +5117,7 @@
5054
5117
  "description": "AssetImg - responsive asset frame with fallback placeholder handling. Contexts: default, lightbox, and detail.",
5055
5118
  "figmaUrl": null,
5056
5119
  "figmaId": null,
5057
- "figmaLink": "TODO:hds-master:AssetImg",
5120
+ "figmaLink": null,
5058
5121
  "tier": "primitive",
5059
5122
  "preview": {
5060
5123
  "exportName": "AssetImg",
@@ -5062,10 +5125,11 @@
5062
5125
  },
5063
5126
  "consumers": [
5064
5127
  "src/app/components/componentPreviewRegistry.tsx",
5128
+ "src/app/components/hds-tooltip.tsx",
5065
5129
  "src/app/components/image-lightbox.tsx",
5066
- "src/app/components/info-page.tsx",
5067
5130
  "src/app/components/tooltip.tsx",
5068
- "src/app/data/hdsEditorial.tsx"
5131
+ "src/app/data/hdsEditorial.tsx",
5132
+ "src/stories/asset-img.stories.tsx"
5069
5133
  ],
5070
5134
  "tokenMapping": {},
5071
5135
  "variantAxes": [],
@@ -5215,10 +5279,10 @@
5215
5279
  "hidden": false,
5216
5280
  "docExempt": false,
5217
5281
  "filePath": "src/app/components/tabs.tsx",
5218
- "description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
5219
- "figmaUrl": null,
5282
+ "description": "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-level @figma would silently claim this node for all four.",
5283
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-89",
5220
5284
  "figmaId": null,
5221
- "figmaLink": "TODO:hds-master:Tabs",
5285
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-89",
5222
5286
  "tier": "primitive",
5223
5287
  "preview": {
5224
5288
  "exportName": "Tabs",
@@ -5254,7 +5318,7 @@
5254
5318
  "description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
5255
5319
  "figmaUrl": null,
5256
5320
  "figmaId": null,
5257
- "figmaLink": "TODO:hds-master:TabsContent",
5321
+ "figmaLink": null,
5258
5322
  "tier": "primitive",
5259
5323
  "preview": {
5260
5324
  "exportName": "TabsContent",
@@ -5289,7 +5353,7 @@
5289
5353
  "description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
5290
5354
  "figmaUrl": null,
5291
5355
  "figmaId": null,
5292
- "figmaLink": "TODO:hds-master:TabsList",
5356
+ "figmaLink": null,
5293
5357
  "tier": "primitive",
5294
5358
  "preview": {
5295
5359
  "exportName": "TabsList",
@@ -5324,7 +5388,7 @@
5324
5388
  "description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
5325
5389
  "figmaUrl": null,
5326
5390
  "figmaId": null,
5327
- "figmaLink": "TODO:hds-master:TabsTrigger",
5391
+ "figmaLink": null,
5328
5392
  "tier": "primitive",
5329
5393
  "preview": {
5330
5394
  "exportName": "TabsTrigger",
@@ -5356,7 +5420,7 @@
5356
5420
  "hidden": false,
5357
5421
  "filePath": "src/app/components/radio.tsx",
5358
5422
  "description": "HdsRadio — radio button with animated selection indicator.",
5359
- "figmaUrl": null,
5423
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=36-17",
5360
5424
  "figmaId": null,
5361
5425
  "preview": {
5362
5426
  "exportName": "HdsRadio",
@@ -5405,16 +5469,16 @@
5405
5469
  "componentProperties": [],
5406
5470
  "tier": "primitive",
5407
5471
  "docExempt": false,
5408
- "figmaLink": "TODO:hds-master:HdsRadio"
5472
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=36-17"
5409
5473
  },
5410
5474
  "HdsSelect": {
5411
- "category": "Uncategorized",
5412
- "categorySource": "missing-jsdoc",
5413
- "governedCategory": false,
5475
+ "category": "Inputs",
5476
+ "categorySource": "jsdoc",
5477
+ "governedCategory": true,
5414
5478
  "hidden": false,
5415
5479
  "filePath": "src/app/components/select.tsx",
5416
- "description": "Controls — shared input/control primitives.",
5417
- "figmaUrl": null,
5480
+ "description": "HdsSelect — dropdown selector built on Radix Select.",
5481
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-49",
5418
5482
  "figmaId": null,
5419
5483
  "preview": {
5420
5484
  "exportName": "HdsSelect",
@@ -5463,7 +5527,7 @@
5463
5527
  "componentProperties": [],
5464
5528
  "tier": "primitive",
5465
5529
  "docExempt": false,
5466
- "figmaLink": "TODO:hds-master:HdsSelect"
5530
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-49"
5467
5531
  },
5468
5532
  "HdsSlider": {
5469
5533
  "category": "Inputs",
@@ -5472,7 +5536,7 @@
5472
5536
  "hidden": false,
5473
5537
  "filePath": "src/app/components/slider.tsx",
5474
5538
  "description": "HdsSlider — range slider with label and value display.",
5475
- "figmaUrl": null,
5539
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-265",
5476
5540
  "figmaId": null,
5477
5541
  "preview": {
5478
5542
  "exportName": "HdsSlider",
@@ -5521,7 +5585,7 @@
5521
5585
  "componentProperties": [],
5522
5586
  "tier": "primitive",
5523
5587
  "docExempt": false,
5524
- "figmaLink": "TODO:hds-master:HdsSlider"
5588
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-265"
5525
5589
  },
5526
5590
  "HdsToggle": {
5527
5591
  "category": "Inputs",
@@ -5530,7 +5594,7 @@
5530
5594
  "hidden": false,
5531
5595
  "filePath": "src/app/components/toggle.tsx",
5532
5596
  "description": "HdsToggle — boolean on/off toggle with animated thumb.",
5533
- "figmaUrl": null,
5597
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=37-19",
5534
5598
  "figmaId": null,
5535
5599
  "preview": {
5536
5600
  "exportName": "HdsToggle",
@@ -5581,7 +5645,7 @@
5581
5645
  "componentProperties": [],
5582
5646
  "tier": "primitive",
5583
5647
  "docExempt": false,
5584
- "figmaLink": "TODO:hds-master:HdsToggle"
5648
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=37-19"
5585
5649
  },
5586
5650
  "Avatar": {
5587
5651
  "category": "Display",
@@ -5591,9 +5655,9 @@
5591
5655
  "docExempt": false,
5592
5656
  "filePath": "src/app/components/avatar.tsx",
5593
5657
  "description": "Circular avatar. Renders the image when available, else initials from `alt`.",
5594
- "figmaUrl": null,
5658
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=34-18",
5595
5659
  "figmaId": null,
5596
- "figmaLink": "TODO:hds-master:Avatar",
5660
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=34-18",
5597
5661
  "tier": "primitive",
5598
5662
  "preview": {
5599
5663
  "exportName": "Avatar",
@@ -5607,7 +5671,9 @@
5607
5671
  "src/stories/avatar.stories.tsx"
5608
5672
  ],
5609
5673
  "tokenMapping": {},
5610
- "variantAxes": [],
5674
+ "variantAxes": [
5675
+ "size"
5676
+ ],
5611
5677
  "componentProperties": [],
5612
5678
  "props": {
5613
5679
  "alt": {
@@ -5646,9 +5712,9 @@
5646
5712
  "docExempt": false,
5647
5713
  "filePath": "src/app/components/progress.tsx",
5648
5714
  "description": "Linear progress. Determinate when `value` is a number, else indeterminate.",
5649
- "figmaUrl": null,
5715
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-91",
5650
5716
  "figmaId": null,
5651
- "figmaLink": "TODO:hds-master:Progress",
5717
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-91",
5652
5718
  "tier": "primitive",
5653
5719
  "preview": {
5654
5720
  "exportName": "Progress",
@@ -5657,6 +5723,7 @@
5657
5723
  "consumers": [
5658
5724
  "src/app/components/card.tsx",
5659
5725
  "src/app/components/progress.test.tsx",
5726
+ "src/stories/card.stories.tsx",
5660
5727
  "src/stories/circular-progress.stories.tsx",
5661
5728
  "src/stories/progress.stories.tsx",
5662
5729
  "src/stories/table.stories.tsx"
@@ -5698,9 +5765,9 @@
5698
5765
  "docExempt": false,
5699
5766
  "filePath": "src/app/components/skeleton.tsx",
5700
5767
  "description": "Decorative loading placeholder. Marked aria-hidden — announce the loading state on the surrounding region (e.g. aria-busy) rather than per skeleton.",
5701
- "figmaUrl": null,
5768
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-95",
5702
5769
  "figmaId": null,
5703
- "figmaLink": "TODO:hds-master:Skeleton",
5770
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-95",
5704
5771
  "tier": "primitive",
5705
5772
  "preview": {
5706
5773
  "exportName": "Skeleton",
@@ -5749,9 +5816,9 @@
5749
5816
  "docExempt": false,
5750
5817
  "filePath": "src/app/components/spinner.tsx",
5751
5818
  "description": "Indeterminate spinner. Inherits the surrounding text color via currentColor.",
5752
- "figmaUrl": null,
5819
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-106",
5753
5820
  "figmaId": null,
5754
- "figmaLink": "TODO:hds-master:Spinner",
5821
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-106",
5755
5822
  "tier": "primitive",
5756
5823
  "preview": {
5757
5824
  "exportName": "Spinner",
@@ -5794,9 +5861,9 @@
5794
5861
  "docExempt": false,
5795
5862
  "filePath": "src/app/components/breadcrumb.tsx",
5796
5863
  "description": "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 marked aria-current=\"page\".",
5797
- "figmaUrl": null,
5864
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-159",
5798
5865
  "figmaId": null,
5799
- "figmaLink": "TODO:hds-master:Breadcrumb",
5866
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-159",
5800
5867
  "tier": "pattern",
5801
5868
  "preview": {
5802
5869
  "exportName": "Breadcrumb",
@@ -5834,9 +5901,9 @@
5834
5901
  "docExempt": false,
5835
5902
  "filePath": "src/app/components/pagination.tsx",
5836
5903
  "description": "Paged navigation with first/last anchors, sibling pages, and ellipses.",
5837
- "figmaUrl": null,
5904
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-194",
5838
5905
  "figmaId": null,
5839
- "figmaLink": "TODO:hds-master:Pagination",
5906
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-194",
5840
5907
  "tier": "pattern",
5841
5908
  "preview": {
5842
5909
  "exportName": "Pagination",
@@ -5896,11 +5963,12 @@
5896
5963
  "categorySource": "jsdoc",
5897
5964
  "governedCategory": true,
5898
5965
  "docExempt": false,
5899
- "figmaUrl": null,
5966
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=35-29",
5900
5967
  "figmaId": null,
5901
- "figmaLink": "TODO:hds-master:HdsCheckbox",
5968
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=35-29",
5902
5969
  "consumers": [
5903
5970
  "src/app/components/checkbox.test.tsx",
5971
+ "src/app/components/radio.tsx",
5904
5972
  "src/stories/checkbox.stories.tsx"
5905
5973
  ],
5906
5974
  "variantAxes": [],
@@ -5914,9 +5982,9 @@
5914
5982
  "docExempt": true,
5915
5983
  "filePath": "src/app/components/toast.tsx",
5916
5984
  "description": "Provider + viewport for the toast system. Wrap the app root once.",
5917
- "figmaUrl": null,
5985
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-367",
5918
5986
  "figmaId": null,
5919
- "figmaLink": "TODO:hds-master:ToastProvider",
5987
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-367",
5920
5988
  "tier": "pattern",
5921
5989
  "preview": {
5922
5990
  "exportName": "ToastProvider",
@@ -5954,9 +6022,9 @@
5954
6022
  "docExempt": true,
5955
6023
  "filePath": "src/app/components/combobox.tsx",
5956
6024
  "description": "Combobox — searchable single-select (Popover + filtered listbox). A select-with-search built on the HDS Popover. The trigger shows the current selection; opening reveals a search field that filters the option list. Full keyboard support (↑/↓ to move, Enter to choose, Esc/outside-click to close) and listbox/option ARIA. Controlled via `value` + `onChange`. <Combobox options={[{ value: 'us', label: 'United States' }, …]} value={country} onChange={setCountry} placeholder=\"Select a country\" />",
5957
- "figmaUrl": null,
6025
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-237",
5958
6026
  "figmaId": null,
5959
- "figmaLink": "TODO:hds-master:Combobox",
6027
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-237",
5960
6028
  "tier": "pattern",
5961
6029
  "preview": {
5962
6030
  "exportName": "Combobox",
@@ -6022,10 +6090,10 @@
6022
6090
  "hidden": false,
6023
6091
  "docExempt": true,
6024
6092
  "filePath": "src/app/components/form.tsx",
6025
- "description": "Styled `<form>` with consistent vertical field rhythm.",
6026
- "figmaUrl": null,
6093
+ "description": "Styled `<form>` with consistent vertical field rhythm. Tagged per-export: FormField and FormFieldShell share this module and have no Figma node, so a file-level @figma would claim this one for all three.",
6094
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=85-94",
6027
6095
  "figmaId": null,
6028
- "figmaLink": "TODO:hds-master:Form",
6096
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=85-94",
6029
6097
  "tier": "pattern",
6030
6098
  "preview": {
6031
6099
  "exportName": "Form",
@@ -6061,7 +6129,7 @@
6061
6129
  "description": "Label + description + error wrapper that wires the a11y relationships onto its single child control via cloneElement. Validation-library agnostic — pass `error` from whatever you use. For controls with an externally-managed callback ref (e.g. react-hook-form), use `FormFieldShell` + `useFieldWiring` instead.",
6062
6130
  "figmaUrl": null,
6063
6131
  "figmaId": null,
6064
- "figmaLink": "TODO:hds-master:FormField",
6132
+ "figmaLink": null,
6065
6133
  "tier": "pattern",
6066
6134
  "preview": {
6067
6135
  "exportName": "FormField",
@@ -6122,7 +6190,7 @@
6122
6190
  "description": "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 callback ref. Pair it with `useFieldWiring` to apply ids/aria yourself.",
6123
6191
  "figmaUrl": null,
6124
6192
  "figmaId": null,
6125
- "figmaLink": "TODO:hds-master:FormFieldShell",
6193
+ "figmaLink": null,
6126
6194
  "tier": "pattern",
6127
6195
  "preview": {
6128
6196
  "exportName": "FormFieldShell",
@@ -6178,7 +6246,7 @@
6178
6246
  "description": "Renders a `data-hds` scope wrapper that carries the four theming dials as root attributes + CSS vars, and exposes them to `useHdsTheme()`.",
6179
6247
  "figmaUrl": null,
6180
6248
  "figmaId": null,
6181
- "figmaLink": "TODO:hds-master:HdsThemeProvider",
6249
+ "figmaLink": null,
6182
6250
  "tier": "primitive",
6183
6251
  "preview": {
6184
6252
  "exportName": "HdsThemeProvider",
@@ -6250,14 +6318,13 @@
6250
6318
  "description": "Renders up to `max` overlapping avatars followed by a `+N` overflow chip.",
6251
6319
  "figmaUrl": null,
6252
6320
  "figmaId": null,
6253
- "figmaLink": "TODO:hds-master:AvatarGroup",
6321
+ "figmaLink": null,
6254
6322
  "tier": "primitive",
6255
6323
  "preview": {
6256
6324
  "exportName": "AvatarGroup",
6257
6325
  "sizing": "panel"
6258
6326
  },
6259
6327
  "consumers": [
6260
- "src/app/components/avatar-group.figma.tsx",
6261
6328
  "src/app/components/avatar-group.test.tsx",
6262
6329
  "src/stories/avatar-group.stories.tsx"
6263
6330
  ],
@@ -6294,14 +6361,13 @@
6294
6361
  "description": "A quoted passage; pass `cite` for the source URL and `attribution` for a byline.",
6295
6362
  "figmaUrl": null,
6296
6363
  "figmaId": null,
6297
- "figmaLink": "TODO:hds-master:Blockquote",
6364
+ "figmaLink": null,
6298
6365
  "tier": "primitive",
6299
6366
  "preview": {
6300
6367
  "exportName": "Blockquote",
6301
6368
  "sizing": "panel"
6302
6369
  },
6303
6370
  "consumers": [
6304
- "src/app/components/blockquote.figma.tsx",
6305
6371
  "src/app/components/blockquote.test.tsx",
6306
6372
  "src/stories/blockquote.stories.tsx"
6307
6373
  ],
@@ -6340,14 +6406,13 @@
6340
6406
  "description": "Groups Button (or button-like) children into a single attached segment.",
6341
6407
  "figmaUrl": null,
6342
6408
  "figmaId": null,
6343
- "figmaLink": "TODO:hds-master:ButtonGroup",
6409
+ "figmaLink": null,
6344
6410
  "tier": "primitive",
6345
6411
  "preview": {
6346
6412
  "exportName": "ButtonGroup",
6347
6413
  "sizing": "panel"
6348
6414
  },
6349
6415
  "consumers": [
6350
- "src/app/components/button-group.figma.tsx",
6351
6416
  "src/app/components/button-group.test.tsx",
6352
6417
  "src/stories/button-group.stories.tsx"
6353
6418
  ],
@@ -6381,14 +6446,13 @@
6381
6446
  "description": "A single-line input with optional `leading`/`trailing` adornments.",
6382
6447
  "figmaUrl": null,
6383
6448
  "figmaId": null,
6384
- "figmaLink": "TODO:hds-master:InputGroup",
6449
+ "figmaLink": null,
6385
6450
  "tier": "primitive",
6386
6451
  "preview": {
6387
6452
  "exportName": "InputGroup",
6388
6453
  "sizing": "panel"
6389
6454
  },
6390
6455
  "consumers": [
6391
- "src/app/components/input-group.figma.tsx",
6392
6456
  "src/app/components/input-group.test.tsx",
6393
6457
  "src/stories/input-group.stories.tsx"
6394
6458
  ],
@@ -6435,14 +6499,13 @@
6435
6499
  "description": "Renders a keyboard key or shortcut token, e.g. `<Kbd>⌘K</Kbd>`.",
6436
6500
  "figmaUrl": null,
6437
6501
  "figmaId": null,
6438
- "figmaLink": "TODO:hds-master:Kbd",
6502
+ "figmaLink": null,
6439
6503
  "tier": "primitive",
6440
6504
  "preview": {
6441
6505
  "exportName": "Kbd",
6442
6506
  "sizing": "panel"
6443
6507
  },
6444
6508
  "consumers": [
6445
- "src/app/components/kbd.figma.tsx",
6446
6509
  "src/app/components/kbd.test.tsx",
6447
6510
  "src/stories/kbd.stories.tsx"
6448
6511
  ],
@@ -6477,14 +6540,13 @@
6477
6540
  "description": "A small solid dot conveying a semantic status via `tone`.",
6478
6541
  "figmaUrl": null,
6479
6542
  "figmaId": null,
6480
- "figmaLink": "TODO:hds-master:StatusDot",
6543
+ "figmaLink": null,
6481
6544
  "tier": "primitive",
6482
6545
  "preview": {
6483
6546
  "exportName": "StatusDot",
6484
6547
  "sizing": "panel"
6485
6548
  },
6486
6549
  "consumers": [
6487
- "src/app/components/status-dot.figma.tsx",
6488
6550
  "src/app/components/status-dot.test.tsx",
6489
6551
  "src/stories/status-dot.stories.tsx"
6490
6552
  ],
@@ -6535,14 +6597,13 @@
6535
6597
  "description": "Presents a date/time with a machine-readable `dateTime` for accessibility.",
6536
6598
  "figmaUrl": null,
6537
6599
  "figmaId": null,
6538
- "figmaLink": "TODO:hds-master:Timestamp",
6600
+ "figmaLink": null,
6539
6601
  "tier": "primitive",
6540
6602
  "preview": {
6541
6603
  "exportName": "Timestamp",
6542
6604
  "sizing": "panel"
6543
6605
  },
6544
6606
  "consumers": [
6545
- "src/app/components/timestamp.figma.tsx",
6546
6607
  "src/app/components/timestamp.test.tsx",
6547
6608
  "src/stories/timestamp.stories.tsx"
6548
6609
  ],
@@ -6589,14 +6650,13 @@
6589
6650
  "description": "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-only control.",
6590
6651
  "figmaUrl": null,
6591
6652
  "figmaId": null,
6592
- "figmaLink": "TODO:hds-master:VisuallyHidden",
6653
+ "figmaLink": null,
6593
6654
  "tier": "primitive",
6594
6655
  "preview": {
6595
6656
  "exportName": "VisuallyHidden",
6596
6657
  "sizing": "panel"
6597
6658
  },
6598
6659
  "consumers": [
6599
- "src/app/components/visually-hidden.figma.tsx",
6600
6660
  "src/app/components/visually-hidden.test.tsx",
6601
6661
  "src/stories/visually-hidden.stories.tsx"
6602
6662
  ],
@@ -6626,14 +6686,13 @@
6626
6686
  "description": "A circular progress ring; pass `value`/`max` or set `indeterminate`.",
6627
6687
  "figmaUrl": null,
6628
6688
  "figmaId": null,
6629
- "figmaLink": "TODO:hds-master:CircularProgress",
6689
+ "figmaLink": null,
6630
6690
  "tier": "primitive",
6631
6691
  "preview": {
6632
6692
  "exportName": "CircularProgress",
6633
6693
  "sizing": "panel"
6634
6694
  },
6635
6695
  "consumers": [
6636
- "src/app/components/circular-progress.figma.tsx",
6637
6696
  "src/app/components/circular-progress.test.tsx",
6638
6697
  "src/stories/circular-progress.stories.tsx"
6639
6698
  ],
@@ -6681,10 +6740,9 @@
6681
6740
  "hidden": false,
6682
6741
  "filePath": "src/app/components/side-nav.tsx",
6683
6742
  "description": "SideNav - sidebar navigation row primitive. Two levels: root — top-level section link. Full-width row using the shared nav label type style. nested — child page link. Keeps the same full-width hit area and label type treatment, with indentation handled via inner padding only. No indicator bar (reserved for HdsTocNav). Idle text = content-secondary → primary on hover/active. Accent surface fill on active state.",
6684
- "figmaUrl": null,
6743
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-332",
6685
6744
  "figmaId": null,
6686
6745
  "consumers": [
6687
- "src/app/components/side-nav.figma.tsx",
6688
6746
  "src/app/components/side-nav.test.tsx",
6689
6747
  "src/stories/side-nav.stories.tsx"
6690
6748
  ],
@@ -6704,7 +6762,7 @@
6704
6762
  "docExempt": false,
6705
6763
  "variantAxes": [],
6706
6764
  "componentProperties": [],
6707
- "figmaLink": "TODO:hds-master:SideNav"
6765
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=86-332"
6708
6766
  },
6709
6767
  "CommandPalette": {
6710
6768
  "category": "Overlays",
@@ -6716,14 +6774,13 @@
6716
6774
  "description": "Mountable trigger + dialog. Drop into header slot; component manages its own open state and Cmd-K / Ctrl-K global keybinding.",
6717
6775
  "figmaUrl": null,
6718
6776
  "figmaId": null,
6719
- "figmaLink": "TODO:hds-master:CommandPalette",
6777
+ "figmaLink": null,
6720
6778
  "tier": "primitive",
6721
6779
  "preview": {
6722
6780
  "exportName": "CommandPalette",
6723
6781
  "sizing": "panel"
6724
6782
  },
6725
6783
  "consumers": [
6726
- "src/app/components/command-palette.figma.tsx",
6727
6784
  "src/app/data/nav-model.test.ts",
6728
6785
  "src/app/lib/hds-search.ts",
6729
6786
  "src/stories/command-palette.stories.tsx"
@@ -6754,14 +6811,13 @@
6754
6811
  "description": "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 lightbox is a transparent full-screen surface, not a centered card). Radix owns the modal a11y contract the hand-rolled version was missing: focus trap, focus restore on close, Escape, and scroll-lock. Motion is retained via `forceMount` + AnimatePresence + `asChild`: the backdrop fades and the image panel scales/translates in, exactly as before.",
6755
6812
  "figmaUrl": null,
6756
6813
  "figmaId": null,
6757
- "figmaLink": "TODO:hds-master:Lightbox",
6814
+ "figmaLink": null,
6758
6815
  "tier": "primitive",
6759
6816
  "preview": {
6760
6817
  "exportName": "Lightbox",
6761
6818
  "sizing": "panel"
6762
6819
  },
6763
6820
  "consumers": [
6764
- "src/app/components/image-lightbox.figma.tsx",
6765
6821
  "src/app/components/image-lightbox.test.tsx",
6766
6822
  "src/app/data/hdsEditorial.tsx",
6767
6823
  "src/stories/asset-img.stories.tsx",
@@ -6822,14 +6878,13 @@
6822
6878
  "description": "Renders a header/sidebar/main application frame, e.g. `<AppShell sidebar={<Nav />}>...</AppShell>`.",
6823
6879
  "figmaUrl": null,
6824
6880
  "figmaId": null,
6825
- "figmaLink": "TODO:hds-master:AppShell",
6881
+ "figmaLink": null,
6826
6882
  "tier": "template",
6827
6883
  "preview": {
6828
6884
  "exportName": "AppShell",
6829
6885
  "sizing": "panel"
6830
6886
  },
6831
6887
  "consumers": [
6832
- "src/app/components/app-shell.figma.tsx",
6833
6888
  "src/app/components/app-shell.test.tsx",
6834
6889
  "src/stories/app-shell.stories.tsx"
6835
6890
  ],
@@ -6854,14 +6909,13 @@
6854
6909
  "description": "A dashed dropzone that opens the native file picker or accepts a drag-and-drop.",
6855
6910
  "figmaUrl": null,
6856
6911
  "figmaId": null,
6857
- "figmaLink": "TODO:hds-master:FileInput",
6912
+ "figmaLink": null,
6858
6913
  "tier": "pattern",
6859
6914
  "preview": {
6860
6915
  "exportName": "FileInput",
6861
6916
  "sizing": "panel"
6862
6917
  },
6863
6918
  "consumers": [
6864
- "src/app/components/file-input.figma.tsx",
6865
6919
  "src/app/components/file-input.test.tsx",
6866
6920
  "src/stories/file-input.stories.tsx"
6867
6921
  ],
@@ -6907,14 +6961,13 @@
6907
6961
  "description": "Renders object metadata as a semantic `<dl>` of term/description pairs.",
6908
6962
  "figmaUrl": null,
6909
6963
  "figmaId": null,
6910
- "figmaLink": "TODO:hds-master:MetadataList",
6964
+ "figmaLink": null,
6911
6965
  "tier": "pattern",
6912
6966
  "preview": {
6913
6967
  "exportName": "MetadataList",
6914
6968
  "sizing": "panel"
6915
6969
  },
6916
6970
  "consumers": [
6917
- "src/app/components/metadata-list.figma.tsx",
6918
6971
  "src/app/components/metadata-list.test.tsx",
6919
6972
  "src/stories/metadata-list.stories.tsx"
6920
6973
  ],
@@ -6951,14 +7004,13 @@
6951
7004
  "description": "Renders up to `max` children followed by a `+N` overflow chip (or custom node).",
6952
7005
  "figmaUrl": null,
6953
7006
  "figmaId": null,
6954
- "figmaLink": "TODO:hds-master:OverflowList",
7007
+ "figmaLink": null,
6955
7008
  "tier": "pattern",
6956
7009
  "preview": {
6957
7010
  "exportName": "OverflowList",
6958
7011
  "sizing": "panel"
6959
7012
  },
6960
7013
  "consumers": [
6961
- "src/app/components/overflow-list.figma.tsx",
6962
7014
  "src/app/components/overflow-list.test.tsx",
6963
7015
  "src/stories/overflow-list.stories.tsx"
6964
7016
  ],
@@ -6995,14 +7047,13 @@
6995
7047
  "description": "A card-shaped single checkbox — click or activate to toggle selection.",
6996
7048
  "figmaUrl": null,
6997
7049
  "figmaId": null,
6998
- "figmaLink": "TODO:hds-master:SelectableCard",
7050
+ "figmaLink": null,
6999
7051
  "tier": "pattern",
7000
7052
  "preview": {
7001
7053
  "exportName": "SelectableCard",
7002
7054
  "sizing": "panel"
7003
7055
  },
7004
7056
  "consumers": [
7005
- "src/app/components/selectable-card.figma.tsx",
7006
7057
  "src/app/components/selectable-card.test.tsx",
7007
7058
  "src/stories/selectable-card.stories.tsx"
7008
7059
  ],
@@ -7040,14 +7091,13 @@
7040
7091
  "description": "A bordered field of Tag chips followed by a text input for adding more.",
7041
7092
  "figmaUrl": null,
7042
7093
  "figmaId": null,
7043
- "figmaLink": "TODO:hds-master:Tokenizer",
7094
+ "figmaLink": null,
7044
7095
  "tier": "pattern",
7045
7096
  "preview": {
7046
7097
  "exportName": "Tokenizer",
7047
7098
  "sizing": "panel"
7048
7099
  },
7049
7100
  "consumers": [
7050
- "src/app/components/tokenizer.figma.tsx",
7051
7101
  "src/app/components/tokenizer.test.tsx",
7052
7102
  "src/stories/tokenizer.stories.tsx"
7053
7103
  ],
@@ -7091,14 +7141,13 @@
7091
7141
  "description": "Top navigation bar with brand, nav, and trailing action slots.",
7092
7142
  "figmaUrl": null,
7093
7143
  "figmaId": null,
7094
- "figmaLink": "TODO:hds-master:TopNav",
7144
+ "figmaLink": null,
7095
7145
  "tier": "pattern",
7096
7146
  "preview": {
7097
7147
  "exportName": "TopNav",
7098
7148
  "sizing": "panel"
7099
7149
  },
7100
7150
  "consumers": [
7101
- "src/app/components/top-nav.figma.tsx",
7102
7151
  "src/app/components/top-nav.test.tsx",
7103
7152
  "src/stories/top-nav.stories.tsx"
7104
7153
  ],
@@ -7140,14 +7189,13 @@
7140
7189
  "description": "Renders children as a snap-scrolling track with Prev/Next scroll buttons.",
7141
7190
  "figmaUrl": null,
7142
7191
  "figmaId": null,
7143
- "figmaLink": "TODO:hds-master:Carousel",
7192
+ "figmaLink": null,
7144
7193
  "tier": "pattern",
7145
7194
  "preview": {
7146
7195
  "exportName": "Carousel",
7147
7196
  "sizing": "panel"
7148
7197
  },
7149
7198
  "consumers": [
7150
- "src/app/components/carousel.figma.tsx",
7151
7199
  "src/app/components/carousel.test.tsx",
7152
7200
  "src/stories/carousel.stories.tsx"
7153
7201
  ],
@@ -7184,14 +7232,13 @@
7184
7232
  "description": "Step indicator for multi-step flows. Purely presentational — no navigation.",
7185
7233
  "figmaUrl": null,
7186
7234
  "figmaId": null,
7187
- "figmaLink": "TODO:hds-master:Stepper",
7235
+ "figmaLink": null,
7188
7236
  "tier": "pattern",
7189
7237
  "preview": {
7190
7238
  "exportName": "Stepper",
7191
7239
  "sizing": "panel"
7192
7240
  },
7193
7241
  "consumers": [
7194
- "src/app/components/stepper.figma.tsx",
7195
7242
  "src/app/components/stepper.test.tsx",
7196
7243
  "src/stories/stepper.stories.tsx"
7197
7244
  ],
@@ -7231,14 +7278,13 @@
7231
7278
  "description": "Toolbar root. Groups related controls with a single roving tab-stop. Supports the native `orientation` prop (`horizontal` | `vertical`).",
7232
7279
  "figmaUrl": null,
7233
7280
  "figmaId": null,
7234
- "figmaLink": "TODO:hds-master:Toolbar",
7281
+ "figmaLink": null,
7235
7282
  "tier": "pattern",
7236
7283
  "preview": {
7237
7284
  "exportName": "Toolbar",
7238
7285
  "sizing": "panel"
7239
7286
  },
7240
7287
  "consumers": [
7241
- "src/app/components/toolbar.figma.tsx",
7242
7288
  "src/app/components/toolbar.test.tsx",
7243
7289
  "src/stories/toolbar.stories.tsx"
7244
7290
  ],
@@ -7268,14 +7314,13 @@
7268
7314
  "description": "Renders a hierarchical `role=\"tree\"` list; nodes with children get an expand/collapse toggle.",
7269
7315
  "figmaUrl": null,
7270
7316
  "figmaId": null,
7271
- "figmaLink": "TODO:hds-master:TreeList",
7317
+ "figmaLink": null,
7272
7318
  "tier": "pattern",
7273
7319
  "preview": {
7274
7320
  "exportName": "TreeList",
7275
7321
  "sizing": "panel"
7276
7322
  },
7277
7323
  "consumers": [
7278
- "src/app/components/tree-list.figma.tsx",
7279
7324
  "src/app/components/tree-list.test.tsx",
7280
7325
  "src/stories/tree-list.stories.tsx"
7281
7326
  ],
@@ -7312,14 +7357,13 @@
7312
7357
  "description": "AlertDialog root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
7313
7358
  "figmaUrl": null,
7314
7359
  "figmaId": null,
7315
- "figmaLink": "TODO:hds-master:AlertDialog",
7360
+ "figmaLink": null,
7316
7361
  "tier": "primitive",
7317
7362
  "preview": {
7318
7363
  "exportName": "AlertDialog",
7319
7364
  "sizing": "panel"
7320
7365
  },
7321
7366
  "consumers": [
7322
- "src/app/components/alert-dialog.figma.tsx",
7323
7367
  "src/app/components/alert-dialog.test.tsx",
7324
7368
  "src/stories/alert-dialog.stories.tsx"
7325
7369
  ],
@@ -7344,14 +7388,13 @@
7344
7388
  "description": "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.",
7345
7389
  "figmaUrl": null,
7346
7390
  "figmaId": null,
7347
- "figmaLink": "TODO:hds-master:AspectRatio",
7391
+ "figmaLink": null,
7348
7392
  "tier": "primitive",
7349
7393
  "preview": {
7350
7394
  "exportName": "AspectRatio",
7351
7395
  "sizing": "panel"
7352
7396
  },
7353
7397
  "consumers": [
7354
- "src/app/components/aspect-ratio.figma.tsx",
7355
7398
  "src/app/components/aspect-ratio.test.tsx",
7356
7399
  "src/app/components/frame.tsx",
7357
7400
  "src/stories/aspect-ratio.stories.tsx",
@@ -7387,14 +7430,13 @@
7387
7430
  "description": "Renders an accessible month grid; compose it inside a Popover for the date inputs.",
7388
7431
  "figmaUrl": null,
7389
7432
  "figmaId": null,
7390
- "figmaLink": "TODO:hds-master:Calendar",
7433
+ "figmaLink": null,
7391
7434
  "tier": "primitive",
7392
7435
  "preview": {
7393
7436
  "exportName": "Calendar",
7394
7437
  "sizing": "panel"
7395
7438
  },
7396
7439
  "consumers": [
7397
- "src/app/components/calendar.figma.tsx",
7398
7440
  "src/app/components/calendar.test.tsx",
7399
7441
  "src/app/components/date-input.tsx",
7400
7442
  "src/app/components/date-range-input.tsx",
@@ -7425,14 +7467,13 @@
7425
7467
  "description": "ContextMenu root + parts. Wrap the right-clickable area in `ContextMenu.Trigger`. Controlled via `onOpenChange`.",
7426
7468
  "figmaUrl": null,
7427
7469
  "figmaId": null,
7428
- "figmaLink": "TODO:hds-master:ContextMenu",
7470
+ "figmaLink": null,
7429
7471
  "tier": "primitive",
7430
7472
  "preview": {
7431
7473
  "exportName": "ContextMenu",
7432
7474
  "sizing": "panel"
7433
7475
  },
7434
7476
  "consumers": [
7435
- "src/app/components/context-menu.figma.tsx",
7436
7477
  "src/app/components/context-menu.test.tsx",
7437
7478
  "src/stories/context-menu.stories.tsx"
7438
7479
  ],
@@ -7457,14 +7498,13 @@
7457
7498
  "description": "Text field + calendar popover for picking a single date.",
7458
7499
  "figmaUrl": null,
7459
7500
  "figmaId": null,
7460
- "figmaLink": "TODO:hds-master:DateInput",
7501
+ "figmaLink": null,
7461
7502
  "tier": "pattern",
7462
7503
  "preview": {
7463
7504
  "exportName": "DateInput",
7464
7505
  "sizing": "panel"
7465
7506
  },
7466
7507
  "consumers": [
7467
- "src/app/components/date-input.figma.tsx",
7468
7508
  "src/app/components/date-input.test.tsx",
7469
7509
  "src/stories/date-input.stories.tsx"
7470
7510
  ],
@@ -7518,14 +7558,13 @@
7518
7558
  "description": "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 Combobox and Menu rather than a bespoke widget. No new primitive — built entirely on the HDS Popover + Calendar. The trigger reads like a secondary input, showing a placeholder or the formatted `from – to` range; the content is a two-month range calendar. <DateRangeInput value={range} onChange={setRange} />",
7519
7559
  "figmaUrl": null,
7520
7560
  "figmaId": null,
7521
- "figmaLink": "TODO:hds-master:DateRangeInput",
7561
+ "figmaLink": null,
7522
7562
  "tier": "pattern",
7523
7563
  "preview": {
7524
7564
  "exportName": "DateRangeInput",
7525
7565
  "sizing": "panel"
7526
7566
  },
7527
7567
  "consumers": [
7528
- "src/app/components/date-range-input.figma.tsx",
7529
7568
  "src/app/components/date-range-input.test.tsx",
7530
7569
  "src/stories/date-range-input.stories.tsx"
7531
7570
  ],
@@ -7583,14 +7622,13 @@
7583
7622
  "description": "Text date field + calendar popover, paired with a native time field, producing one Date.",
7584
7623
  "figmaUrl": null,
7585
7624
  "figmaId": null,
7586
- "figmaLink": "TODO:hds-master:DateTimeInput",
7625
+ "figmaLink": null,
7587
7626
  "tier": "pattern",
7588
7627
  "preview": {
7589
7628
  "exportName": "DateTimeInput",
7590
7629
  "sizing": "panel"
7591
7630
  },
7592
7631
  "consumers": [
7593
- "src/app/components/date-time-input.figma.tsx",
7594
7632
  "src/app/components/date-time-input.test.tsx",
7595
7633
  "src/stories/date-time-input.stories.tsx"
7596
7634
  ],
@@ -7640,14 +7678,13 @@
7640
7678
  "description": "HoverCard root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`; tune timing with `openDelay`/`closeDelay`.",
7641
7679
  "figmaUrl": null,
7642
7680
  "figmaId": null,
7643
- "figmaLink": "TODO:hds-master:HoverCard",
7681
+ "figmaLink": null,
7644
7682
  "tier": "primitive",
7645
7683
  "preview": {
7646
7684
  "exportName": "HoverCard",
7647
7685
  "sizing": "panel"
7648
7686
  },
7649
7687
  "consumers": [
7650
- "src/app/components/hover-card.figma.tsx",
7651
7688
  "src/app/components/hover-card.test.tsx",
7652
7689
  "src/stories/hover-card.stories.tsx"
7653
7690
  ],
@@ -7672,14 +7709,13 @@
7672
7709
  "description": "MultiSelector — multi-select dropdown composing the existing Popover with a checkbox option list, so choosing several values from a fixed set reads as one overlay pattern with Combobox and Menu rather than a bespoke widget. No new dependency — built entirely on the HDS Popover. The trigger reads like a secondary Button, showing a placeholder or a `${n} selected` count; the content is a token-skinned list where each row is a checkbox toggling membership in `value`. <MultiSelector options={[{ value: 'a', label: 'Apple' }, { value: 'b', label: 'Banana' }]} value={fruits} onChange={setFruits} />",
7673
7710
  "figmaUrl": null,
7674
7711
  "figmaId": null,
7675
- "figmaLink": "TODO:hds-master:MultiSelector",
7712
+ "figmaLink": null,
7676
7713
  "tier": "pattern",
7677
7714
  "preview": {
7678
7715
  "exportName": "MultiSelector",
7679
7716
  "sizing": "panel"
7680
7717
  },
7681
7718
  "consumers": [
7682
- "src/app/components/multi-selector.figma.tsx",
7683
7719
  "src/app/components/multi-selector.test.tsx",
7684
7720
  "src/stories/multi-selector.stories.tsx"
7685
7721
  ],
@@ -7726,7 +7762,7 @@
7726
7762
  "description": "A native time field skinned with HDS input chrome. Value is a `HH:mm` string.",
7727
7763
  "figmaUrl": null,
7728
7764
  "figmaId": null,
7729
- "figmaLink": "TODO:hds-master:TimeInput",
7765
+ "figmaLink": null,
7730
7766
  "tier": "primitive",
7731
7767
  "preview": {
7732
7768
  "exportName": "TimeInput",
@@ -7734,7 +7770,6 @@
7734
7770
  },
7735
7771
  "consumers": [
7736
7772
  "src/app/components/date-time-input.tsx",
7737
- "src/app/components/time-input.figma.tsx",
7738
7773
  "src/app/components/time-input.test.tsx",
7739
7774
  "src/stories/date-time-input.stories.tsx",
7740
7775
  "src/stories/time-input.stories.tsx"
@@ -7770,14 +7805,13 @@
7770
7805
  "description": "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.",
7771
7806
  "figmaUrl": null,
7772
7807
  "figmaId": null,
7773
- "figmaLink": "TODO:hds-master:ToggleButton",
7808
+ "figmaLink": null,
7774
7809
  "tier": "primitive",
7775
7810
  "preview": {
7776
7811
  "exportName": "ToggleButton",
7777
7812
  "sizing": "panel"
7778
7813
  },
7779
7814
  "consumers": [
7780
- "src/app/components/toggle-button.figma.tsx",
7781
7815
  "src/app/components/toggle-button.test.tsx",
7782
7816
  "src/stories/toggle-button.stories.tsx"
7783
7817
  ],
@@ -7824,7 +7858,7 @@
7824
7858
  "description": "Box — polymorphic layout primitive with a token-first `sx` engine. named primitive covers, without inviting ad hoc inline styles or raw hex/px values back into the system — the `sx` engine only accepts HDS token keys and a small, deliberate CSS subset. Box `sx` ONLY for genuinely one-off layout. sx colors/spacing MUST use token keys, not raw hex/px. Prefer named layout primitives over ad-hoc flex. `sx` is a deliberate SUBSET of MUI's sx — not all of CSS-in-JS is a feature: - Spacing shorthands (m/p/gap family) resolve numbers off the 4px HDS scale (`--primitive-space-<n>`) and named steps ('tight'|'normal'|'inset'|'spacious') off `--semantic-space-layout-*`. - `color`/`bgcolor`/`borderColor`/`fill`/`stroke` resolve dotted token keys ('content.primary', 'surface.raised', 'border.subtle', 'accent', 'accent.hover', 'feedback.success', …) to the matching semantic CSS var. - Responsive `{ xs, sm, md, lg, xl }` objects compile to `min-width` media queries off the HDS breakpoint scale. - `&`-prefixed keys ('&:hover', '& > *', '&[data-state=open]') nest a selector, composable with responsive values. - Everything else passes through as a plain camelCase→kebab-case CSS declaration (numbers get `px` unless in the unitless allowlist). See `box-sx.ts` for the pure resolver + hashing/injection engine.",
7825
7859
  "figmaUrl": null,
7826
7860
  "figmaId": null,
7827
- "figmaLink": "TODO:hds-master:Box",
7861
+ "figmaLink": null,
7828
7862
  "tier": "primitive",
7829
7863
  "preview": {
7830
7864
  "exportName": "Box",
@@ -7841,6 +7875,7 @@
7841
7875
  "src/app/components/frame.tsx",
7842
7876
  "src/app/components/sidebar.tsx",
7843
7877
  "src/app/components/switcher.tsx",
7878
+ "src/app/components/toggle.tsx",
7844
7879
  "src/stories/box.stories.tsx",
7845
7880
  "src/stories/patterns-layout.stories.tsx"
7846
7881
  ],
@@ -7878,7 +7913,7 @@
7878
7913
  "description": "Bleed — controlled negative-margin full-bleed within a padded container. padding\" (a full-width image inside a padded card, a divider that should touch both edges) with a single tokenized negative-margin wrapper, so agents stop hand-rolling `margin: -24px` guesses that drift from the parent's actual padding token. use a semantic space step, never raw px, and MUST match the ancestor padding it is meant to cancel out. Do NOT use Bleed to fake extra spacing — its only job is canceling a specific known padding value on a specific axis. Every Layout reference: https://every-layout.dev/layouts/the-stack/ (bleed is the inverse of a padded Center/Container — HDS names it separately since \"every-layout\" itself does not ship a dedicated Bleed recipe).",
7879
7914
  "figmaUrl": null,
7880
7915
  "figmaId": null,
7881
- "figmaLink": "TODO:hds-master:Bleed",
7916
+ "figmaLink": null,
7882
7917
  "tier": "primitive",
7883
7918
  "preview": {
7884
7919
  "exportName": "Bleed",
@@ -7944,7 +7979,7 @@
7944
7979
  "description": "Center — max-width column, auto-centered horizontally. max-width box with auto horizontal margins and, optionally, matching horizontal gutters — so agents stop hand-rolling `marginInline: auto` plus an ad hoc max-width value. use the semantic width scale ('content' | 'max'), never a raw px value. gutter, when set, MUST use a semantic space step, never raw px. Do NOT use Center for full-bleed page shells — use Container. Do NOT use Center when you need the deprecated Container padding prop — gutter replaces it. Every Layout reference: https://every-layout.dev/layouts/center/",
7945
7980
  "figmaUrl": null,
7946
7981
  "figmaId": null,
7947
- "figmaLink": "TODO:hds-master:Center",
7982
+ "figmaLink": null,
7948
7983
  "tier": "primitive",
7949
7984
  "preview": {
7950
7985
  "exportName": "Center",
@@ -8013,7 +8048,7 @@
8013
8048
  "description": "Cluster — wrapping horizontal group with even gaps. (tag rows, button groups, chip lists, filter pills) with a single flex-wrap wrapper and a tokenized gap in both axes, so agents stop hand-rolling `flexWrap` + `gap` + alignment combinations inline. horizontal groups that should wrap as a unit. Spacing MUST use semantic steps, never raw px. Do NOT use Cluster for a strict single-line row — use Stack with `direction=\"row\"` when wrapping is never desired. Do NOT use Cluster for two-dimensional grid layouts — use Grid. Every Layout reference: https://every-layout.dev/layouts/cluster/",
8014
8049
  "figmaUrl": null,
8015
8050
  "figmaId": null,
8016
- "figmaLink": "TODO:hds-master:Cluster",
8051
+ "figmaLink": null,
8017
8052
  "tier": "primitive",
8018
8053
  "preview": {
8019
8054
  "exportName": "Cluster",
@@ -8092,7 +8127,7 @@
8092
8127
  "description": "Cover — vertical shell with an auto-centered main region. centered hero/main region that absorbs the remaining space, and an optional footer\" problem via the flex auto-margin centering technique, so agents stop hand-rolling `position: absolute` centering or a fixed 50vh split. semantic space step, never raw px. minHeight is a CSS length dimension (not spacing) — defaults to '100svh' (small viewport height, safe against mobile browser chrome). Pass minHeight=\"100vh\" explicitly if you need the classic viewport unit for a target that predates svh support. Do NOT use Cover for ordinary page content flow — use Stack. Every Layout reference: https://every-layout.dev/layouts/cover/",
8093
8128
  "figmaUrl": null,
8094
8129
  "figmaId": null,
8095
- "figmaLink": "TODO:hds-master:Cover",
8130
+ "figmaLink": null,
8096
8131
  "tier": "primitive",
8097
8132
  "preview": {
8098
8133
  "exportName": "Cover",
@@ -8168,7 +8203,7 @@
8168
8203
  "description": "Frame — aspect-ratio-locked, token-clipped media box. cause layout shift while it loads, cropped to a token-governed corner radius\" — a thin, token-skinned wrapper over `AspectRatio` (`@radix-ui/react-aspect-ratio`), which already owns the ratio-lock mechanics. Frame adds the overflow-hidden clip and semantic radius that a bare media frame needs and `AspectRatio` deliberately leaves undecorated. media (image, video, embed, map tile). radius MUST use a semantic borderRadius token, never a raw px value. Do NOT reach for bare `AspectRatio` in product code just to add a border-radius by hand — use Frame. Do NOT use Frame for non-media layout — it exists purely as a media clipping frame. Every Layout reference: https://every-layout.dev/layouts/frame/",
8169
8204
  "figmaUrl": null,
8170
8205
  "figmaId": null,
8171
- "figmaLink": "TODO:hds-master:Frame",
8206
+ "figmaLink": null,
8172
8207
  "tier": "primitive",
8173
8208
  "preview": {
8174
8209
  "exportName": "Frame",
@@ -8230,7 +8265,7 @@
8230
8265
  "description": "Sidebar — fixed-width rail beside fluid content, no media query. problem with the flex-basis/flex-grow disparity technique — the rail holds `sideWidth` and the content flex-basis 0 with an overwhelming flex-grow, so the pair wraps to stacked automatically once the container can no longer fit both without squeezing content below `contentMin`. No CSS media query, no JS resize observer. EXACTLY two children — the rail and the content — passed in that order. `side` controls which one visually renders as the rail; DOM order is unchanged. gap MUST use a semantic space step, never raw px. sideWidth and contentMin are CSS length dimensions (not spacing) — a length string like '16rem' or '50%' is expected, matching the check-hardcoded-spacing gate's own dimension-prop exemption. Do NOT use Sidebar for more than two regions — use Grid. Every Layout reference: https://every-layout.dev/layouts/sidebar/",
8231
8266
  "figmaUrl": null,
8232
8267
  "figmaId": null,
8233
- "figmaLink": "TODO:hds-master:Sidebar",
8268
+ "figmaLink": null,
8234
8269
  "tier": "primitive",
8235
8270
  "preview": {
8236
8271
  "exportName": "Sidebar",
@@ -8310,7 +8345,7 @@
8310
8345
  "description": "Switcher — flips a row to a column below a width threshold, no media query. vertical stack once the container gets narrow\" without a breakpoint or a resize observer, using the flex-basis calc() technique: each item's flex-basis resolves to a huge negative or huge positive number depending on whether the container is above or below `threshold`, forcing every item onto its own line once it flips. semantic space step, never raw px. threshold is a CSS length dimension (not spacing), e.g. '30rem'. `limit` unconditionally forces the stacked (column) layout once there are more than `limit` children, regardless of container width — use it to stop a row from thinning out into an unreadable N-up strip. Do NOT use Switcher for content that should always wrap in place — use Cluster. Every Layout reference: https://every-layout.dev/layouts/the-switcher/",
8311
8346
  "figmaUrl": null,
8312
8347
  "figmaId": null,
8313
- "figmaLink": "TODO:hds-master:Switcher",
8348
+ "figmaLink": null,
8314
8349
  "tier": "primitive",
8315
8350
  "preview": {
8316
8351
  "exportName": "Switcher",
@@ -8375,7 +8410,7 @@
8375
8410
  "description": "Pin — sticky-pin an element within its scroll region. section scrolls — the dependency-free basis for pinned scroll scenes (the \"tall section + sticky child\" pattern that GSAP's `pin: true` solves imperatively). Reach for this before hand-rolling sticky positioning. Give the pinned element a TALLER scrolling parent so it has room to travel. For the scroll-scrubbed animation inside a pinned scene, use CSS `animation-timeline` (see Reveal) or `useScrollProgress` from `@hirobius/design-system/scroll`. See ADR-021.",
8376
8411
  "figmaUrl": null,
8377
8412
  "figmaId": null,
8378
- "figmaLink": "TODO:hds-master:Pin",
8413
+ "figmaLink": null,
8379
8414
  "tier": "primitive",
8380
8415
  "preview": {
8381
8416
  "exportName": "Pin",
@@ -8428,7 +8463,7 @@
8428
8463
  "description": "Reveal — reveal-on-scroll primitive via CSS scroll-driven animation. purely by scroll position (`animation-timeline: view()`) — no JS, no deps, no IntersectionObserver. Reach for this before hand-rolling reveal logic. `animation-timeline` is supported AND the user has not requested reduced motion (both fall back to visible, never stuck hidden). Pick `animation` from the fixed set — do not hand-roll keyframes. For momentum/inertia scrolling wrap the app in `SmoothScroll`; for a scroll-progress value in JS use `useScrollProgress` — both from `@hirobius/design-system/scroll`. See ADR-021.",
8429
8464
  "figmaUrl": null,
8430
8465
  "figmaId": null,
8431
- "figmaLink": "TODO:hds-master:Reveal",
8466
+ "figmaLink": null,
8432
8467
  "tier": "primitive",
8433
8468
  "preview": {
8434
8469
  "exportName": "Reveal",
@@ -8477,27 +8512,62 @@
8477
8512
  "requiredProps": [],
8478
8513
  "a11yRules": []
8479
8514
  },
8480
- "HdsPhosphor": {
8481
- "category": "Compiler",
8482
- "filePath": "scripts/hds-jsx-compiler.mjs",
8483
- "description": "Compiler-recognized icon alias stub for JSX normalization.",
8484
- "hidden": true,
8485
- "tier": "utility",
8486
- "props": {},
8487
- "allowedChildren": [
8488
- "*"
8515
+ "Textarea": {
8516
+ "category": "Inputs",
8517
+ "categorySource": "jsdoc",
8518
+ "governedCategory": true,
8519
+ "hidden": false,
8520
+ "docExempt": false,
8521
+ "filePath": "src/app/components/textarea.tsx",
8522
+ "description": "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 four states Default / Focus / Error / Disabled map to the focus-ring, `error`, and `disabled` treatments below.",
8523
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=85-14",
8524
+ "figmaId": null,
8525
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=85-14",
8526
+ "tier": "primitive",
8527
+ "preview": {
8528
+ "exportName": "Textarea",
8529
+ "sizing": "panel"
8530
+ },
8531
+ "consumers": [
8532
+ "src/stories/textarea.stories.tsx"
8489
8533
  ],
8490
- "propConstraints": {},
8491
- "requiredProps": [],
8492
- "a11yRules": []
8493
- },
8494
- "HdsFrame": {
8495
- "category": "Compiler",
8496
- "filePath": "scripts/hds-jsx-compiler.mjs",
8497
- "description": "Compiler-internal frame primitive stub for generated JSX validation.",
8498
- "hidden": true,
8499
- "tier": "utility",
8500
- "props": {},
8534
+ "tokenMapping": {},
8535
+ "variantAxes": [],
8536
+ "componentProperties": [],
8537
+ "props": {
8538
+ "className": {
8539
+ "type": "string",
8540
+ "optional": true
8541
+ },
8542
+ "disabled": {
8543
+ "type": "boolean",
8544
+ "optional": true
8545
+ },
8546
+ "error": {
8547
+ "type": "boolean",
8548
+ "optional": true
8549
+ },
8550
+ "errorMessage": {
8551
+ "type": "string",
8552
+ "optional": true
8553
+ },
8554
+ "helperText": {
8555
+ "type": "string",
8556
+ "optional": true
8557
+ },
8558
+ "label": {
8559
+ "type": "string",
8560
+ "optional": true
8561
+ },
8562
+ "resize": {
8563
+ "type": "TextareaResize",
8564
+ "default": "vertical"
8565
+ },
8566
+ "textareaClassName": {
8567
+ "type": "string",
8568
+ "optional": true
8569
+ }
8570
+ },
8501
8571
  "allowedChildren": [
8502
8572
  "*"
8503
8573
  ],
@@ -8505,12 +8575,26 @@
8505
8575
  "requiredProps": [],
8506
8576
  "a11yRules": []
8507
8577
  },
8508
- "HdsHeading": {
8509
- "category": "Compiler",
8510
- "filePath": "scripts/hds-jsx-compiler.mjs",
8511
- "description": "Compiler-recognized heading primitive stub for generated JSX validation.",
8512
- "hidden": true,
8513
- "tier": "utility",
8578
+ "CardBody": {
8579
+ "category": "Display",
8580
+ "categorySource": "jsdoc",
8581
+ "governedCategory": true,
8582
+ "hidden": false,
8583
+ "docExempt": false,
8584
+ "filePath": "src/app/components/card.tsx",
8585
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8586
+ "figmaUrl": null,
8587
+ "figmaId": null,
8588
+ "figmaLink": null,
8589
+ "tier": "primitive",
8590
+ "preview": {
8591
+ "exportName": "CardBody",
8592
+ "sizing": "panel"
8593
+ },
8594
+ "consumers": [],
8595
+ "tokenMapping": {},
8596
+ "variantAxes": [],
8597
+ "componentProperties": [],
8514
8598
  "props": {},
8515
8599
  "allowedChildren": [
8516
8600
  "*"
@@ -8519,12 +8603,26 @@
8519
8603
  "requiredProps": [],
8520
8604
  "a11yRules": []
8521
8605
  },
8522
- "HdsLabel": {
8523
- "category": "Compiler",
8524
- "filePath": "scripts/hds-jsx-compiler.mjs",
8525
- "description": "Compiler-recognized label primitive stub for generated JSX validation.",
8526
- "hidden": true,
8527
- "tier": "utility",
8606
+ "CardDescription": {
8607
+ "category": "Display",
8608
+ "categorySource": "jsdoc",
8609
+ "governedCategory": true,
8610
+ "hidden": false,
8611
+ "docExempt": false,
8612
+ "filePath": "src/app/components/card.tsx",
8613
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8614
+ "figmaUrl": null,
8615
+ "figmaId": null,
8616
+ "figmaLink": null,
8617
+ "tier": "primitive",
8618
+ "preview": {
8619
+ "exportName": "CardDescription",
8620
+ "sizing": "panel"
8621
+ },
8622
+ "consumers": [],
8623
+ "tokenMapping": {},
8624
+ "variantAxes": [],
8625
+ "componentProperties": [],
8528
8626
  "props": {},
8529
8627
  "allowedChildren": [
8530
8628
  "*"
@@ -8533,12 +8631,26 @@
8533
8631
  "requiredProps": [],
8534
8632
  "a11yRules": []
8535
8633
  },
8536
- "HdsCaption": {
8537
- "category": "Compiler",
8538
- "filePath": "scripts/hds-jsx-compiler.mjs",
8539
- "description": "Compiler-recognized caption primitive stub for generated JSX validation.",
8540
- "hidden": true,
8541
- "tier": "utility",
8634
+ "CardFooter": {
8635
+ "category": "Display",
8636
+ "categorySource": "jsdoc",
8637
+ "governedCategory": true,
8638
+ "hidden": false,
8639
+ "docExempt": false,
8640
+ "filePath": "src/app/components/card.tsx",
8641
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8642
+ "figmaUrl": null,
8643
+ "figmaId": null,
8644
+ "figmaLink": null,
8645
+ "tier": "primitive",
8646
+ "preview": {
8647
+ "exportName": "CardFooter",
8648
+ "sizing": "panel"
8649
+ },
8650
+ "consumers": [],
8651
+ "tokenMapping": {},
8652
+ "variantAxes": [],
8653
+ "componentProperties": [],
8542
8654
  "props": {},
8543
8655
  "allowedChildren": [
8544
8656
  "*"
@@ -8547,13 +8659,32 @@
8547
8659
  "requiredProps": [],
8548
8660
  "a11yRules": []
8549
8661
  },
8550
- "HdsChip": {
8551
- "category": "Compiler",
8552
- "filePath": "scripts/hds-jsx-compiler.mjs",
8553
- "description": "Compiler-recognized chip instance stub for generated JSX validation.",
8554
- "hidden": true,
8555
- "tier": "utility",
8556
- "props": {},
8662
+ "CardHeader": {
8663
+ "category": "Display",
8664
+ "categorySource": "jsdoc",
8665
+ "governedCategory": true,
8666
+ "hidden": false,
8667
+ "docExempt": false,
8668
+ "filePath": "src/app/components/card.tsx",
8669
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8670
+ "figmaUrl": null,
8671
+ "figmaId": null,
8672
+ "figmaLink": null,
8673
+ "tier": "primitive",
8674
+ "preview": {
8675
+ "exportName": "CardHeader",
8676
+ "sizing": "panel"
8677
+ },
8678
+ "consumers": [],
8679
+ "tokenMapping": {},
8680
+ "variantAxes": [],
8681
+ "componentProperties": [],
8682
+ "props": {
8683
+ "metadata": {
8684
+ "type": "ReactNode",
8685
+ "optional": true
8686
+ }
8687
+ },
8557
8688
  "allowedChildren": [
8558
8689
  "*"
8559
8690
  ],
@@ -8561,44 +8692,661 @@
8561
8692
  "requiredProps": [],
8562
8693
  "a11yRules": []
8563
8694
  },
8564
- "HdsAvatar": {
8565
- "category": "Compiler",
8566
- "filePath": "scripts/hds-jsx-compiler.mjs",
8567
- "description": "Compiler-recognized avatar instance stub for generated JSX validation.",
8568
- "hidden": true,
8569
- "tier": "utility",
8570
- "props": {},
8695
+ "CardMetric": {
8696
+ "category": "Display",
8697
+ "categorySource": "jsdoc",
8698
+ "governedCategory": true,
8699
+ "hidden": false,
8700
+ "docExempt": false,
8701
+ "filePath": "src/app/components/card.tsx",
8702
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8703
+ "figmaUrl": null,
8704
+ "figmaId": null,
8705
+ "figmaLink": null,
8706
+ "tier": "primitive",
8707
+ "preview": {
8708
+ "exportName": "CardMetric",
8709
+ "sizing": "panel"
8710
+ },
8711
+ "consumers": [],
8712
+ "tokenMapping": {},
8713
+ "variantAxes": [],
8714
+ "componentProperties": [],
8715
+ "props": {
8716
+ "label": {
8717
+ "type": "ReactNode"
8718
+ },
8719
+ "sub": {
8720
+ "type": "ReactNode",
8721
+ "optional": true
8722
+ },
8723
+ "tone": {
8724
+ "type": "enum",
8725
+ "values": [
8726
+ "neutral",
8727
+ "danger",
8728
+ "success",
8729
+ "warning",
8730
+ "info"
8731
+ ],
8732
+ "default": "neutral"
8733
+ },
8734
+ "value": {
8735
+ "type": "ReactNode"
8736
+ }
8737
+ },
8571
8738
  "allowedChildren": [
8572
8739
  "*"
8573
8740
  ],
8574
8741
  "propConstraints": {},
8575
8742
  "requiredProps": [],
8576
8743
  "a11yRules": []
8577
- }
8578
- },
8579
- "utilities": {
8580
- "HdsPhosphor": {
8581
- "category": "Compiler",
8582
- "filePath": "scripts/hds-jsx-compiler.mjs",
8583
- "description": "Compiler-recognized icon alias stub for JSX normalization.",
8584
- "hidden": true,
8585
- "props": {},
8586
- "allowedChildren": [
8587
- "*"
8588
- ],
8589
- "propConstraints": {},
8590
- "requiredProps": [],
8591
- "a11yRules": [],
8592
- "preview": {},
8593
- "tokenMapping": {},
8594
- "tier": "utility"
8595
8744
  },
8596
- "HdsFrame": {
8597
- "category": "Compiler",
8598
- "filePath": "scripts/hds-jsx-compiler.mjs",
8599
- "description": "Layout primitive — vertical or horizontal flex container on the 8px grid. Padding and gap from {0,8,16,24,32,48,64}; surfaces use semantic.color.surface.* tokens, never raw hex. Structural frames are rectilinear (no border-radius); only Card-wrapping frames pick up semantic.radius.card.",
8600
- "hidden": true,
8601
- "props": {
8745
+ "CardProgress": {
8746
+ "category": "Display",
8747
+ "categorySource": "jsdoc",
8748
+ "governedCategory": true,
8749
+ "hidden": false,
8750
+ "docExempt": false,
8751
+ "filePath": "src/app/components/card.tsx",
8752
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8753
+ "figmaUrl": null,
8754
+ "figmaId": null,
8755
+ "figmaLink": null,
8756
+ "tier": "primitive",
8757
+ "preview": {
8758
+ "exportName": "CardProgress",
8759
+ "sizing": "panel"
8760
+ },
8761
+ "consumers": [],
8762
+ "tokenMapping": {},
8763
+ "variantAxes": [],
8764
+ "componentProperties": [],
8765
+ "props": {
8766
+ "label": {
8767
+ "type": "ReactNode",
8768
+ "optional": true
8769
+ },
8770
+ "max": {
8771
+ "type": "number",
8772
+ "default": 100
8773
+ },
8774
+ "tone": {
8775
+ "type": "enum",
8776
+ "values": [
8777
+ "neutral",
8778
+ "danger",
8779
+ "success",
8780
+ "warning",
8781
+ "info"
8782
+ ],
8783
+ "default": "neutral"
8784
+ },
8785
+ "value": {
8786
+ "type": "number"
8787
+ }
8788
+ },
8789
+ "allowedChildren": [
8790
+ "*"
8791
+ ],
8792
+ "propConstraints": {},
8793
+ "requiredProps": [],
8794
+ "a11yRules": []
8795
+ },
8796
+ "CardTitle": {
8797
+ "category": "Display",
8798
+ "categorySource": "jsdoc",
8799
+ "governedCategory": true,
8800
+ "hidden": false,
8801
+ "docExempt": false,
8802
+ "filePath": "src/app/components/card.tsx",
8803
+ "description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
8804
+ "figmaUrl": null,
8805
+ "figmaId": null,
8806
+ "figmaLink": null,
8807
+ "tier": "primitive",
8808
+ "preview": {
8809
+ "exportName": "CardTitle",
8810
+ "sizing": "panel"
8811
+ },
8812
+ "consumers": [],
8813
+ "tokenMapping": {},
8814
+ "variantAxes": [],
8815
+ "componentProperties": [],
8816
+ "props": {},
8817
+ "allowedChildren": [
8818
+ "*"
8819
+ ],
8820
+ "propConstraints": {},
8821
+ "requiredProps": [],
8822
+ "a11yRules": []
8823
+ },
8824
+ "DialogClose": {
8825
+ "category": "Overlays",
8826
+ "categorySource": "jsdoc",
8827
+ "governedCategory": true,
8828
+ "hidden": false,
8829
+ "docExempt": true,
8830
+ "filePath": "src/app/components/dialog.tsx",
8831
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
8832
+ "figmaUrl": null,
8833
+ "figmaId": null,
8834
+ "figmaLink": null,
8835
+ "tier": "primitive",
8836
+ "preview": {
8837
+ "exportName": "DialogClose",
8838
+ "sizing": "panel"
8839
+ },
8840
+ "consumers": [],
8841
+ "tokenMapping": {},
8842
+ "variantAxes": [],
8843
+ "componentProperties": [],
8844
+ "props": {
8845
+ "asChild": {
8846
+ "type": "boolean",
8847
+ "optional": true
8848
+ }
8849
+ },
8850
+ "allowedChildren": [
8851
+ "*"
8852
+ ],
8853
+ "propConstraints": {},
8854
+ "requiredProps": [],
8855
+ "a11yRules": []
8856
+ },
8857
+ "DialogContent": {
8858
+ "category": "Overlays",
8859
+ "categorySource": "jsdoc",
8860
+ "governedCategory": true,
8861
+ "hidden": false,
8862
+ "docExempt": true,
8863
+ "filePath": "src/app/components/dialog.tsx",
8864
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
8865
+ "figmaUrl": null,
8866
+ "figmaId": null,
8867
+ "figmaLink": null,
8868
+ "tier": "primitive",
8869
+ "preview": {
8870
+ "exportName": "DialogContent",
8871
+ "sizing": "panel"
8872
+ },
8873
+ "consumers": [],
8874
+ "tokenMapping": {},
8875
+ "variantAxes": [],
8876
+ "componentProperties": [],
8877
+ "props": {
8878
+ "asChild": {
8879
+ "type": "boolean",
8880
+ "optional": true
8881
+ },
8882
+ "hideClose": {
8883
+ "type": "boolean",
8884
+ "default": false
8885
+ }
8886
+ },
8887
+ "allowedChildren": [
8888
+ "*"
8889
+ ],
8890
+ "propConstraints": {},
8891
+ "requiredProps": [],
8892
+ "a11yRules": []
8893
+ },
8894
+ "DialogDescription": {
8895
+ "category": "Overlays",
8896
+ "categorySource": "jsdoc",
8897
+ "governedCategory": true,
8898
+ "hidden": false,
8899
+ "docExempt": true,
8900
+ "filePath": "src/app/components/dialog.tsx",
8901
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
8902
+ "figmaUrl": null,
8903
+ "figmaId": null,
8904
+ "figmaLink": null,
8905
+ "tier": "primitive",
8906
+ "preview": {
8907
+ "exportName": "DialogDescription",
8908
+ "sizing": "panel"
8909
+ },
8910
+ "consumers": [],
8911
+ "tokenMapping": {},
8912
+ "variantAxes": [],
8913
+ "componentProperties": [],
8914
+ "props": {
8915
+ "asChild": {
8916
+ "type": "boolean",
8917
+ "optional": true
8918
+ }
8919
+ },
8920
+ "allowedChildren": [
8921
+ "*"
8922
+ ],
8923
+ "propConstraints": {},
8924
+ "requiredProps": [],
8925
+ "a11yRules": []
8926
+ },
8927
+ "DialogFooter": {
8928
+ "category": "Overlays",
8929
+ "categorySource": "jsdoc",
8930
+ "governedCategory": true,
8931
+ "hidden": false,
8932
+ "docExempt": true,
8933
+ "filePath": "src/app/components/dialog.tsx",
8934
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
8935
+ "figmaUrl": null,
8936
+ "figmaId": null,
8937
+ "figmaLink": null,
8938
+ "tier": "primitive",
8939
+ "preview": {
8940
+ "exportName": "DialogFooter",
8941
+ "sizing": "panel"
8942
+ },
8943
+ "consumers": [],
8944
+ "tokenMapping": {},
8945
+ "variantAxes": [],
8946
+ "componentProperties": [],
8947
+ "props": {},
8948
+ "allowedChildren": [
8949
+ "*"
8950
+ ],
8951
+ "propConstraints": {},
8952
+ "requiredProps": [],
8953
+ "a11yRules": []
8954
+ },
8955
+ "DialogHeader": {
8956
+ "category": "Overlays",
8957
+ "categorySource": "jsdoc",
8958
+ "governedCategory": true,
8959
+ "hidden": false,
8960
+ "docExempt": true,
8961
+ "filePath": "src/app/components/dialog.tsx",
8962
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
8963
+ "figmaUrl": null,
8964
+ "figmaId": null,
8965
+ "figmaLink": null,
8966
+ "tier": "primitive",
8967
+ "preview": {
8968
+ "exportName": "DialogHeader",
8969
+ "sizing": "panel"
8970
+ },
8971
+ "consumers": [],
8972
+ "tokenMapping": {},
8973
+ "variantAxes": [],
8974
+ "componentProperties": [],
8975
+ "props": {},
8976
+ "allowedChildren": [
8977
+ "*"
8978
+ ],
8979
+ "propConstraints": {},
8980
+ "requiredProps": [],
8981
+ "a11yRules": []
8982
+ },
8983
+ "DialogOverlay": {
8984
+ "category": "Overlays",
8985
+ "categorySource": "jsdoc",
8986
+ "governedCategory": true,
8987
+ "hidden": false,
8988
+ "docExempt": true,
8989
+ "filePath": "src/app/components/dialog.tsx",
8990
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
8991
+ "figmaUrl": null,
8992
+ "figmaId": null,
8993
+ "figmaLink": null,
8994
+ "tier": "primitive",
8995
+ "preview": {
8996
+ "exportName": "DialogOverlay",
8997
+ "sizing": "panel"
8998
+ },
8999
+ "consumers": [],
9000
+ "tokenMapping": {},
9001
+ "variantAxes": [],
9002
+ "componentProperties": [],
9003
+ "props": {
9004
+ "asChild": {
9005
+ "type": "boolean",
9006
+ "optional": true
9007
+ }
9008
+ },
9009
+ "allowedChildren": [
9010
+ "*"
9011
+ ],
9012
+ "propConstraints": {},
9013
+ "requiredProps": [],
9014
+ "a11yRules": []
9015
+ },
9016
+ "DialogPortal": {
9017
+ "category": "Overlays",
9018
+ "categorySource": "jsdoc",
9019
+ "governedCategory": true,
9020
+ "hidden": false,
9021
+ "docExempt": true,
9022
+ "filePath": "src/app/components/dialog.tsx",
9023
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
9024
+ "figmaUrl": null,
9025
+ "figmaId": null,
9026
+ "figmaLink": null,
9027
+ "tier": "primitive",
9028
+ "preview": {
9029
+ "exportName": "DialogPortal",
9030
+ "sizing": "panel"
9031
+ },
9032
+ "consumers": [],
9033
+ "tokenMapping": {},
9034
+ "variantAxes": [],
9035
+ "componentProperties": [],
9036
+ "props": {},
9037
+ "allowedChildren": [
9038
+ "*"
9039
+ ],
9040
+ "propConstraints": {},
9041
+ "requiredProps": [],
9042
+ "a11yRules": []
9043
+ },
9044
+ "DialogTitle": {
9045
+ "category": "Overlays",
9046
+ "categorySource": "jsdoc",
9047
+ "governedCategory": true,
9048
+ "hidden": false,
9049
+ "docExempt": true,
9050
+ "filePath": "src/app/components/dialog.tsx",
9051
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
9052
+ "figmaUrl": null,
9053
+ "figmaId": null,
9054
+ "figmaLink": null,
9055
+ "tier": "primitive",
9056
+ "preview": {
9057
+ "exportName": "DialogTitle",
9058
+ "sizing": "panel"
9059
+ },
9060
+ "consumers": [],
9061
+ "tokenMapping": {},
9062
+ "variantAxes": [],
9063
+ "componentProperties": [],
9064
+ "props": {
9065
+ "asChild": {
9066
+ "type": "boolean",
9067
+ "optional": true
9068
+ }
9069
+ },
9070
+ "allowedChildren": [
9071
+ "*"
9072
+ ],
9073
+ "propConstraints": {},
9074
+ "requiredProps": [],
9075
+ "a11yRules": []
9076
+ },
9077
+ "DialogTrigger": {
9078
+ "category": "Overlays",
9079
+ "categorySource": "jsdoc",
9080
+ "governedCategory": true,
9081
+ "hidden": false,
9082
+ "docExempt": true,
9083
+ "filePath": "src/app/components/dialog.tsx",
9084
+ "description": "Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\"secondary\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
9085
+ "figmaUrl": null,
9086
+ "figmaId": null,
9087
+ "figmaLink": null,
9088
+ "tier": "primitive",
9089
+ "preview": {
9090
+ "exportName": "DialogTrigger",
9091
+ "sizing": "panel"
9092
+ },
9093
+ "consumers": [],
9094
+ "tokenMapping": {},
9095
+ "variantAxes": [],
9096
+ "componentProperties": [],
9097
+ "props": {
9098
+ "asChild": {
9099
+ "type": "boolean",
9100
+ "optional": true
9101
+ }
9102
+ },
9103
+ "allowedChildren": [
9104
+ "*"
9105
+ ],
9106
+ "propConstraints": {},
9107
+ "requiredProps": [],
9108
+ "a11yRules": []
9109
+ },
9110
+ "HdsTooltip": {
9111
+ "category": "Internal",
9112
+ "categorySource": "internal-jsdoc",
9113
+ "governedCategory": true,
9114
+ "hidden": true,
9115
+ "docExempt": true,
9116
+ "filePath": "src/app/components/hds-tooltip.tsx",
9117
+ "description": "Tooltip root. Bakes in the Radix Provider so a single `<HdsTooltip>` is self-contained — no app-level provider required. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
9118
+ "figmaUrl": null,
9119
+ "figmaId": null,
9120
+ "figmaLink": null,
9121
+ "tier": "primitive",
9122
+ "preview": {
9123
+ "exportName": "HdsTooltip",
9124
+ "sizing": "panel"
9125
+ },
9126
+ "consumers": [
9127
+ "src/app/components/hover-card.tsx",
9128
+ "src/stories/hds-tooltip.stories.tsx"
9129
+ ],
9130
+ "tokenMapping": {},
9131
+ "variantAxes": [],
9132
+ "componentProperties": [],
9133
+ "props": {},
9134
+ "allowedChildren": [
9135
+ "*"
9136
+ ],
9137
+ "propConstraints": {},
9138
+ "requiredProps": [],
9139
+ "a11yRules": []
9140
+ },
9141
+ "Menu": {
9142
+ "category": "Overlays",
9143
+ "categorySource": "jsdoc",
9144
+ "governedCategory": true,
9145
+ "hidden": false,
9146
+ "docExempt": true,
9147
+ "filePath": "src/app/components/menu.tsx",
9148
+ "description": "Menu root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
9149
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-59",
9150
+ "figmaId": null,
9151
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-59",
9152
+ "tier": "primitive",
9153
+ "preview": {
9154
+ "exportName": "Menu",
9155
+ "sizing": "panel"
9156
+ },
9157
+ "consumers": [
9158
+ "src/app/components/command-palette.tsx",
9159
+ "src/app/components/context-menu.tsx",
9160
+ "src/app/components/date-range-input.tsx",
9161
+ "src/app/components/hover-card.tsx",
9162
+ "src/app/components/menu.test.tsx",
9163
+ "src/app/components/multi-selector.tsx",
9164
+ "src/app/components/shell-controls.tsx",
9165
+ "src/stories/menu.stories.tsx"
9166
+ ],
9167
+ "tokenMapping": {},
9168
+ "variantAxes": [],
9169
+ "componentProperties": [],
9170
+ "props": {},
9171
+ "allowedChildren": [
9172
+ "*"
9173
+ ],
9174
+ "propConstraints": {},
9175
+ "requiredProps": [],
9176
+ "a11yRules": []
9177
+ },
9178
+ "Popover": {
9179
+ "category": "Overlays",
9180
+ "categorySource": "jsdoc",
9181
+ "governedCategory": true,
9182
+ "hidden": false,
9183
+ "docExempt": true,
9184
+ "filePath": "src/app/components/popover.tsx",
9185
+ "description": "Popover root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
9186
+ "figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-32",
9187
+ "figmaId": null,
9188
+ "figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=93-32",
9189
+ "tier": "primitive",
9190
+ "preview": {
9191
+ "exportName": "Popover",
9192
+ "sizing": "panel"
9193
+ },
9194
+ "consumers": [
9195
+ "src/app/components/calendar.tsx",
9196
+ "src/app/components/combobox.test.tsx",
9197
+ "src/app/components/combobox.tsx",
9198
+ "src/app/components/date-input.test.tsx",
9199
+ "src/app/components/date-input.tsx",
9200
+ "src/app/components/date-range-input.test.tsx",
9201
+ "src/app/components/date-range-input.tsx",
9202
+ "src/app/components/date-time-input.test.tsx",
9203
+ "src/app/components/date-time-input.tsx",
9204
+ "src/app/components/hover-card.tsx",
9205
+ "src/app/components/menu.tsx",
9206
+ "src/app/components/multi-selector.test.tsx",
9207
+ "src/app/components/multi-selector.tsx",
9208
+ "src/app/components/popover.test.tsx",
9209
+ "src/app/design-system/generated-token-descriptions.ts",
9210
+ "src/stories/combobox.stories.tsx",
9211
+ "src/stories/date-input.stories.tsx",
9212
+ "src/stories/date-range-input.stories.tsx",
9213
+ "src/stories/date-time-input.stories.tsx",
9214
+ "src/stories/multi-selector.stories.tsx",
9215
+ "src/stories/popover.stories.tsx"
9216
+ ],
9217
+ "tokenMapping": {},
9218
+ "variantAxes": [],
9219
+ "componentProperties": [],
9220
+ "props": {},
9221
+ "allowedChildren": [
9222
+ "*"
9223
+ ],
9224
+ "propConstraints": {},
9225
+ "requiredProps": [],
9226
+ "a11yRules": []
9227
+ },
9228
+ "HdsPhosphor": {
9229
+ "category": "Compiler",
9230
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9231
+ "description": "Compiler-recognized icon alias stub for JSX normalization.",
9232
+ "hidden": true,
9233
+ "tier": "utility",
9234
+ "props": {},
9235
+ "allowedChildren": [
9236
+ "*"
9237
+ ],
9238
+ "propConstraints": {},
9239
+ "requiredProps": [],
9240
+ "a11yRules": []
9241
+ },
9242
+ "HdsFrame": {
9243
+ "category": "Compiler",
9244
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9245
+ "description": "Compiler-internal frame primitive stub for generated JSX validation.",
9246
+ "hidden": true,
9247
+ "tier": "utility",
9248
+ "props": {},
9249
+ "allowedChildren": [
9250
+ "*"
9251
+ ],
9252
+ "propConstraints": {},
9253
+ "requiredProps": [],
9254
+ "a11yRules": []
9255
+ },
9256
+ "HdsHeading": {
9257
+ "category": "Compiler",
9258
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9259
+ "description": "Compiler-recognized heading primitive stub for generated JSX validation.",
9260
+ "hidden": true,
9261
+ "tier": "utility",
9262
+ "props": {},
9263
+ "allowedChildren": [
9264
+ "*"
9265
+ ],
9266
+ "propConstraints": {},
9267
+ "requiredProps": [],
9268
+ "a11yRules": []
9269
+ },
9270
+ "HdsLabel": {
9271
+ "category": "Compiler",
9272
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9273
+ "description": "Compiler-recognized label primitive stub for generated JSX validation.",
9274
+ "hidden": true,
9275
+ "tier": "utility",
9276
+ "props": {},
9277
+ "allowedChildren": [
9278
+ "*"
9279
+ ],
9280
+ "propConstraints": {},
9281
+ "requiredProps": [],
9282
+ "a11yRules": []
9283
+ },
9284
+ "HdsCaption": {
9285
+ "category": "Compiler",
9286
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9287
+ "description": "Compiler-recognized caption primitive stub for generated JSX validation.",
9288
+ "hidden": true,
9289
+ "tier": "utility",
9290
+ "props": {},
9291
+ "allowedChildren": [
9292
+ "*"
9293
+ ],
9294
+ "propConstraints": {},
9295
+ "requiredProps": [],
9296
+ "a11yRules": []
9297
+ },
9298
+ "HdsChip": {
9299
+ "category": "Compiler",
9300
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9301
+ "description": "Compiler-recognized chip instance stub for generated JSX validation.",
9302
+ "hidden": true,
9303
+ "tier": "utility",
9304
+ "props": {},
9305
+ "allowedChildren": [
9306
+ "*"
9307
+ ],
9308
+ "propConstraints": {},
9309
+ "requiredProps": [],
9310
+ "a11yRules": []
9311
+ },
9312
+ "HdsAvatar": {
9313
+ "category": "Compiler",
9314
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9315
+ "description": "Compiler-recognized avatar instance stub for generated JSX validation.",
9316
+ "hidden": true,
9317
+ "tier": "utility",
9318
+ "props": {},
9319
+ "allowedChildren": [
9320
+ "*"
9321
+ ],
9322
+ "propConstraints": {},
9323
+ "requiredProps": [],
9324
+ "a11yRules": []
9325
+ }
9326
+ },
9327
+ "utilities": {
9328
+ "HdsPhosphor": {
9329
+ "category": "Compiler",
9330
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9331
+ "description": "Compiler-recognized icon alias stub for JSX normalization.",
9332
+ "hidden": true,
9333
+ "props": {},
9334
+ "allowedChildren": [
9335
+ "*"
9336
+ ],
9337
+ "propConstraints": {},
9338
+ "requiredProps": [],
9339
+ "a11yRules": [],
9340
+ "preview": {},
9341
+ "tokenMapping": {},
9342
+ "tier": "utility"
9343
+ },
9344
+ "HdsFrame": {
9345
+ "category": "Compiler",
9346
+ "filePath": "scripts/hds-jsx-compiler.mjs",
9347
+ "description": "Layout primitive — vertical or horizontal flex container on the 8px grid. Padding and gap from {0,8,16,24,32,48,64}; surfaces use semantic.color.surface.* tokens, never raw hex. Structural frames are rectilinear (no border-radius); only Card-wrapping frames pick up semantic.radius.card.",
9348
+ "hidden": true,
9349
+ "props": {
8602
9350
  "layout": {
8603
9351
  "type": "enum",
8604
9352
  "values": [
@@ -8883,15 +9631,15 @@
8883
9631
  },
8884
9632
  "AutoPreviewSpecimen": {
8885
9633
  "category": "Uncategorized",
8886
- "categorySource": "missing-jsdoc",
8887
- "governedCategory": false,
8888
- "hidden": false,
9634
+ "categorySource": "internal-jsdoc",
9635
+ "governedCategory": true,
9636
+ "hidden": true,
8889
9637
  "docExempt": true,
8890
9638
  "filePath": "src/app/components/componentPreviewRegistry.tsx",
8891
9639
  "description": "/** @internal @doc-exempt: demo-preview-helper — not part of @hirobius/design-system public API.",
8892
9640
  "figmaUrl": null,
8893
9641
  "figmaId": null,
8894
- "figmaLink": "TODO:hds-master:AutoPreviewSpecimen",
9642
+ "figmaLink": null,
8895
9643
  "tier": "utility",
8896
9644
  "preview": {
8897
9645
  "exportName": "AutoPreviewSpecimen",
@@ -8933,7 +9681,7 @@
8933
9681
  "docExempt": true,
8934
9682
  "variantAxes": [],
8935
9683
  "componentProperties": [],
8936
- "figmaLink": "TODO:hds-master:VariantPreviewDeck"
9684
+ "figmaLink": null
8937
9685
  },
8938
9686
  "HistoryCard": {
8939
9687
  "category": "Uncategorized",
@@ -8972,7 +9720,7 @@
8972
9720
  "tier": "utility",
8973
9721
  "docExempt": true,
8974
9722
  "sourcePath": "src/app/components/HistoryCard.tsx",
8975
- "figmaLink": "TODO:hds-master:HistoryCard"
9723
+ "figmaLink": null
8976
9724
  },
8977
9725
  "ComponentPreview": {
8978
9726
  "category": "Uncategorized",
@@ -9003,7 +9751,7 @@
9003
9751
  "docExempt": true,
9004
9752
  "variantAxes": [],
9005
9753
  "componentProperties": [],
9006
- "figmaLink": "TODO:hds-master:ComponentPreview"
9754
+ "figmaLink": null
9007
9755
  },
9008
9756
  "AnimatedLabel": {
9009
9757
  "category": "Uncategorized",
@@ -9033,7 +9781,7 @@
9033
9781
  "docExempt": true,
9034
9782
  "variantAxes": [],
9035
9783
  "componentProperties": [],
9036
- "figmaLink": "TODO:hds-master:AnimatedLabel"
9784
+ "figmaLink": null
9037
9785
  },
9038
9786
  "ControlsPanel": {
9039
9787
  "category": "Uncategorized",
@@ -9064,7 +9812,7 @@
9064
9812
  "docExempt": true,
9065
9813
  "variantAxes": [],
9066
9814
  "componentProperties": [],
9067
- "figmaLink": "TODO:hds-master:ControlsPanel"
9815
+ "figmaLink": null
9068
9816
  },
9069
9817
  "ControlsSection": {
9070
9818
  "category": "Uncategorized",
@@ -9095,7 +9843,7 @@
9095
9843
  "docExempt": true,
9096
9844
  "variantAxes": [],
9097
9845
  "componentProperties": [],
9098
- "figmaLink": "TODO:hds-master:ControlsSection"
9846
+ "figmaLink": null
9099
9847
  },
9100
9848
  "HdsMobileTopBar": {
9101
9849
  "category": "Uncategorized",
@@ -9125,7 +9873,7 @@
9125
9873
  "docExempt": true,
9126
9874
  "variantAxes": [],
9127
9875
  "componentProperties": [],
9128
- "figmaLink": "TODO:hds-master:HdsMobileTopBar"
9876
+ "figmaLink": null
9129
9877
  },
9130
9878
  "PreviewFrame": {
9131
9879
  "category": "Uncategorized",
@@ -9157,7 +9905,7 @@
9157
9905
  "docExempt": true,
9158
9906
  "variantAxes": [],
9159
9907
  "componentProperties": [],
9160
- "figmaLink": "TODO:hds-master:PreviewFrame"
9908
+ "figmaLink": null
9161
9909
  },
9162
9910
  "HdsSidebarUtilityButton": {
9163
9911
  "category": "Uncategorized",
@@ -9187,7 +9935,7 @@
9187
9935
  "docExempt": true,
9188
9936
  "variantAxes": [],
9189
9937
  "componentProperties": [],
9190
- "figmaLink": "TODO:hds-master:HdsSidebarUtilityButton"
9938
+ "figmaLink": null
9191
9939
  },
9192
9940
  "ImageLightbox": {
9193
9941
  "category": "Uncategorized",
@@ -9217,13 +9965,13 @@
9217
9965
  "docExempt": true,
9218
9966
  "variantAxes": [],
9219
9967
  "componentProperties": [],
9220
- "figmaLink": "TODO:hds-master:ImageLightbox"
9968
+ "figmaLink": null
9221
9969
  },
9222
9970
  "SketchButton": {
9223
9971
  "category": "Uncategorized",
9224
- "categorySource": "missing-jsdoc",
9225
- "governedCategory": false,
9226
- "hidden": false,
9972
+ "categorySource": "internal-jsdoc",
9973
+ "governedCategory": true,
9974
+ "hidden": true,
9227
9975
  "filePath": "src/app/components/sketch-controls.tsx",
9228
9976
  "description": "",
9229
9977
  "figmaUrl": null,
@@ -9245,13 +9993,13 @@
9245
9993
  "docExempt": true,
9246
9994
  "variantAxes": [],
9247
9995
  "componentProperties": [],
9248
- "figmaLink": "TODO:hds-master:SketchButton"
9996
+ "figmaLink": null
9249
9997
  },
9250
9998
  "SketchCheckbox": {
9251
9999
  "category": "Uncategorized",
9252
- "categorySource": "missing-jsdoc",
9253
- "governedCategory": false,
9254
- "hidden": false,
10000
+ "categorySource": "internal-jsdoc",
10001
+ "governedCategory": true,
10002
+ "hidden": true,
9255
10003
  "filePath": "src/app/components/sketch-controls.tsx",
9256
10004
  "description": "",
9257
10005
  "figmaUrl": null,
@@ -9273,13 +10021,13 @@
9273
10021
  "docExempt": true,
9274
10022
  "variantAxes": [],
9275
10023
  "componentProperties": [],
9276
- "figmaLink": "TODO:hds-master:SketchCheckbox"
10024
+ "figmaLink": null
9277
10025
  },
9278
10026
  "SketchPanelToggle": {
9279
10027
  "category": "Uncategorized",
9280
- "categorySource": "missing-jsdoc",
9281
- "governedCategory": false,
9282
- "hidden": false,
10028
+ "categorySource": "internal-jsdoc",
10029
+ "governedCategory": true,
10030
+ "hidden": true,
9283
10031
  "filePath": "src/app/components/sketch-controls.tsx",
9284
10032
  "description": "",
9285
10033
  "figmaUrl": null,
@@ -9301,13 +10049,13 @@
9301
10049
  "docExempt": true,
9302
10050
  "variantAxes": [],
9303
10051
  "componentProperties": [],
9304
- "figmaLink": "TODO:hds-master:SketchPanelToggle"
10052
+ "figmaLink": null
9305
10053
  },
9306
10054
  "SketchRange": {
9307
10055
  "category": "Uncategorized",
9308
- "categorySource": "missing-jsdoc",
9309
- "governedCategory": false,
9310
- "hidden": false,
10056
+ "categorySource": "internal-jsdoc",
10057
+ "governedCategory": true,
10058
+ "hidden": true,
9311
10059
  "filePath": "src/app/components/sketch-controls.tsx",
9312
10060
  "description": "",
9313
10061
  "figmaUrl": null,
@@ -9329,13 +10077,13 @@
9329
10077
  "docExempt": true,
9330
10078
  "variantAxes": [],
9331
10079
  "componentProperties": [],
9332
- "figmaLink": "TODO:hds-master:SketchRange"
10080
+ "figmaLink": null
9333
10081
  },
9334
10082
  "SketchTextarea": {
9335
10083
  "category": "Uncategorized",
9336
- "categorySource": "missing-jsdoc",
9337
- "governedCategory": false,
9338
- "hidden": false,
10084
+ "categorySource": "internal-jsdoc",
10085
+ "governedCategory": true,
10086
+ "hidden": true,
9339
10087
  "filePath": "src/app/components/sketch-controls.tsx",
9340
10088
  "description": "",
9341
10089
  "figmaUrl": null,
@@ -9357,7 +10105,7 @@
9357
10105
  "docExempt": true,
9358
10106
  "variantAxes": [],
9359
10107
  "componentProperties": [],
9360
- "figmaLink": "TODO:hds-master:SketchTextarea"
10108
+ "figmaLink": null
9361
10109
  },
9362
10110
  "MorphCard": {
9363
10111
  "category": "Uncategorized",
@@ -9378,7 +10126,7 @@
9378
10126
  "tokenMapping": {},
9379
10127
  "variantAxes": [],
9380
10128
  "componentProperties": [],
9381
- "figmaLink": "TODO:hds-master:MorphCard"
10129
+ "figmaLink": null
9382
10130
  },
9383
10131
  "Tooltip": {
9384
10132
  "category": "Uncategorized",
@@ -9404,7 +10152,7 @@
9404
10152
  "tokenMapping": {},
9405
10153
  "variantAxes": [],
9406
10154
  "componentProperties": [],
9407
- "figmaLink": "TODO:hds-master:Tooltip"
10155
+ "figmaLink": null
9408
10156
  },
9409
10157
  "NotFoundPattern": {
9410
10158
  "category": "Feedback",
@@ -9435,7 +10183,7 @@
9435
10183
  "componentProperties": [],
9436
10184
  "tier": "utility",
9437
10185
  "docExempt": true,
9438
- "figmaLink": "TODO:hds-master:NotFoundPattern"
10186
+ "figmaLink": null
9439
10187
  },
9440
10188
  "CascadeText": {
9441
10189
  "category": "Uncategorized",
@@ -9456,7 +10204,7 @@
9456
10204
  "tokenMapping": {},
9457
10205
  "variantAxes": [],
9458
10206
  "componentProperties": [],
9459
- "figmaLink": "TODO:hds-master:CascadeText"
10207
+ "figmaLink": null
9460
10208
  },
9461
10209
  "DocPageSpec": {
9462
10210
  "category": "Uncategorized",
@@ -9477,7 +10225,7 @@
9477
10225
  "tokenMapping": {},
9478
10226
  "variantAxes": [],
9479
10227
  "componentProperties": [],
9480
- "figmaLink": "TODO:hds-master:DocPageSpec"
10228
+ "figmaLink": null
9481
10229
  },
9482
10230
  "TokenDisplayToggle": {
9483
10231
  "category": "Uncategorized",
@@ -9500,7 +10248,7 @@
9500
10248
  "tokenMapping": {},
9501
10249
  "variantAxes": [],
9502
10250
  "componentProperties": [],
9503
- "figmaLink": "TODO:hds-master:TokenDisplayToggle"
10251
+ "figmaLink": null
9504
10252
  },
9505
10253
  "HdsLegacyTokenGovernancePanel": {
9506
10254
  "category": "Uncategorized",
@@ -9546,7 +10294,7 @@
9546
10294
  "componentProperties": [],
9547
10295
  "tier": "utility",
9548
10296
  "docExempt": false,
9549
- "figmaLink": "TODO:hds-master:HdsLegacyTokenGovernancePanel"
10297
+ "figmaLink": null
9550
10298
  },
9551
10299
  "LegacyTokenList": {
9552
10300
  "category": "Lab",
@@ -9592,7 +10340,7 @@
9592
10340
  "componentProperties": [],
9593
10341
  "tier": "utility",
9594
10342
  "docExempt": false,
9595
- "figmaLink": "TODO:hds-master:LegacyTokenList"
10343
+ "figmaLink": null
9596
10344
  },
9597
10345
  "TokenCollectionList": {
9598
10346
  "category": "Lab",
@@ -9633,7 +10381,7 @@
9633
10381
  "componentProperties": [],
9634
10382
  "tier": "utility",
9635
10383
  "docExempt": false,
9636
- "figmaLink": "TODO:hds-master:TokenCollectionList"
10384
+ "figmaLink": null
9637
10385
  },
9638
10386
  "TokenList": {
9639
10387
  "category": "Uncategorized",
@@ -9663,13 +10411,13 @@
9663
10411
  "docExempt": true,
9664
10412
  "variantAxes": [],
9665
10413
  "componentProperties": [],
9666
- "figmaLink": "TODO:hds-master:TokenList"
10414
+ "figmaLink": null
9667
10415
  },
9668
10416
  "ErrorBoundary": {
9669
10417
  "category": "Uncategorized",
9670
- "categorySource": "missing-jsdoc",
9671
- "governedCategory": false,
9672
- "hidden": false,
10418
+ "categorySource": "internal-jsdoc",
10419
+ "governedCategory": true,
10420
+ "hidden": true,
9673
10421
  "docExempt": true,
9674
10422
  "filePath": "src/app/components/error-boundary.tsx",
9675
10423
  "description": "ErrorBoundary — slot-scoped recovery surface for runtime render failures.",
@@ -9688,7 +10436,7 @@
9688
10436
  "tokenMapping": {},
9689
10437
  "variantAxes": [],
9690
10438
  "componentProperties": [],
9691
- "figmaLink": "TODO:hds-master:ErrorBoundary"
10439
+ "figmaLink": null
9692
10440
  },
9693
10441
  "ApiReference": {
9694
10442
  "category": "Utilities",
@@ -9700,7 +10448,7 @@
9700
10448
  "description": "ApiReference — collapsed <details> rendering of a component's public API. Returns `null` when: - The component is missing from the manifest (nothing to render). - The component is a template and `forceForTemplate` is not set. - The component has no props AND no slots (genuinely empty surface).",
9701
10449
  "figmaUrl": null,
9702
10450
  "figmaId": null,
9703
- "figmaLink": "TODO:hds-master:ApiReference",
10451
+ "figmaLink": null,
9704
10452
  "tier": "utility",
9705
10453
  "preview": {
9706
10454
  "exportName": "ApiReference",
@@ -9721,17 +10469,13 @@
9721
10469
  "description": "DocPageHeader — standardized header zone mounted at the top of every primitive / pattern / template doc page. Projected from the live HDS manifest; the unit `9d-9` batch refactor wires this component into the doc routes — this file only CREATES the surface. 9d-4 contract (from `docs/ai/orchestration.json`): - H1: component name - Lede: single-line summary derived from `componentSpec.description` (truncated at the first newline / sentence break for the header zone; the full description still flows into the doc body downstream). - Status badge: Stable / Beta — derived from a new optional `componentSpec.stability` field (additive, schema 9d-4). When absent, the default falls back to the unit-spec rule: primitives → 'stable'; patterns and templates → 'beta' when they lack `slots[]` or carry propConstraints warnings, otherwise 'stable'. - Tier chip: primitive / pattern / template / utility (manifest field). - Source link: GitHub blob URL projected from `componentSpec.filePath` against the repo's origin remote (hirobius/adrian-milsap, branch `main` for canonical permalinks). - Figma link: rendered when `componentSpec.figmaUrl` is non-null. Surface rules (component-zone CLAUDE.md): - Heavy prop restriction — one slot, no business logic. - Theming via CSS variables / role tokens only (no inline hex). - Composes Stack rather than re-implementing layout primitives. Anti-goals: - Not a doc-shell — `DocShell` already owns the wordmark, search, theme-toggle, and rail nav. This component lives INSIDE the content column, not the header bar. - Does not render badges as decorative stickers next to prose; they sit in a dedicated metadata row below the H1, per CLAUDE.md.",
9722
10470
  "figmaUrl": null,
9723
10471
  "figmaId": null,
9724
- "figmaLink": "TODO:hds-master:DocPageHeader",
10472
+ "figmaLink": null,
9725
10473
  "tier": "utility",
9726
10474
  "preview": {
9727
10475
  "exportName": "DocPageHeader",
9728
10476
  "sizing": "panel"
9729
10477
  },
9730
- "consumers": [
9731
- "src/app/pages/docs/patterns/_template.tsx",
9732
- "src/app/pages/docs/templates/_template.tsx",
9733
- "src/app/pages/SketchPage.tsx"
9734
- ],
10478
+ "consumers": [],
9735
10479
  "tokenMapping": {},
9736
10480
  "variantAxes": [],
9737
10481
  "componentProperties": []
@@ -9746,7 +10490,7 @@
9746
10490
  "description": "ThemeToggle — System / Light / Dark theme dropdown for the doc shell. 9d-3 baseline: a header-slot dropdown with three options: - System — follow `prefers-color-scheme`, react live to OS changes. - Light — force light mode. - Dark — force dark mode. Persistence: - Stored in localStorage under `hds-theme-mode` ('system' | 'light' | 'dark'). - Mirrored to the legacy `hds-theme` key ('light' | 'dark') so the existing ThemeContext binary toggle (if mounted) stays in sync without a hard dependency between the two. Application: - Sets `data-theme=\"light\"` or `data-theme=\"dark\"` on `<html>` so the 8e-2 `role.*` alias layer (theme-aware CSS vars) flips automatically. - Also toggles `<html>.dark` for parity with Tailwind's class-based dark variant (matching the convention already used in ThemeContext). Dependencies: - Zero new npm deps. Native button + click-outside listener. - SVG icons inlined (Sun / Moon / Monitor) — no icon-library dep added. Slot: - Renders into the `data-hds-slot=\"theme-toggle\"` zone in DocShell.",
9747
10491
  "figmaUrl": null,
9748
10492
  "figmaId": null,
9749
- "figmaLink": "TODO:hds-master:ThemeToggle",
10493
+ "figmaLink": null,
9750
10494
  "tier": "utility",
9751
10495
  "preview": {
9752
10496
  "exportName": "ThemeToggle",
@@ -9769,7 +10513,7 @@
9769
10513
  "description": "VariantStrip renders a horizontal family strip of component specimens with short labels. Designed for component docs to show all variants, sizes, or tones in a single scannable row.",
9770
10514
  "figmaUrl": null,
9771
10515
  "figmaId": null,
9772
- "figmaLink": "TODO:hds-master:VariantStrip",
10516
+ "figmaLink": null,
9773
10517
  "tier": "utility",
9774
10518
  "preview": {
9775
10519
  "exportName": "VariantStrip",
@@ -9789,7 +10533,7 @@
9789
10533
  "filePath": "src/app/components/demo-block.tsx",
9790
10534
  "figmaUrl": null,
9791
10535
  "figmaId": null,
9792
- "figmaLink": "TODO:hds-master:DemoBlock",
10536
+ "figmaLink": null,
9793
10537
  "tier": "utility",
9794
10538
  "preview": {
9795
10539
  "exportName": "DemoBlock",
@@ -9810,7 +10554,7 @@
9810
10554
  "description": "PageFooter — minimal page footer rendered by the route shell. Currently houses a binary light/dark theme toggle on the left, with the footer owning its own bottom breathing room so the toggle never pins to the viewport edge. Add elements here as the page footer grows — keeping the shape in one place so every HDSLayout-mounted page gets a consistent footer surface without per-page rendering.",
9811
10555
  "figmaUrl": null,
9812
10556
  "figmaId": null,
9813
- "figmaLink": "TODO:hds-master:PageFooter",
10557
+ "figmaLink": null,
9814
10558
  "tier": "utility",
9815
10559
  "preview": {
9816
10560
  "exportName": "PageFooter",
@@ -10129,7 +10873,7 @@
10129
10873
  "path": "primitive.color.lilac.500",
10130
10874
  "cssVar": "--primitive-color-lilac-500",
10131
10875
  "type": "color",
10132
- "description": "Lilac Bonds accent rest — AA for white text on page and card surfaces.",
10876
+ "description": "Lilac accent rest — AA for white text on page and card surfaces.",
10133
10877
  "value": "#6f3fd4"
10134
10878
  },
10135
10879
  {
@@ -10508,14 +11252,14 @@
10508
11252
  "path": "primitive.typography.size.5xl",
10509
11253
  "cssVar": "--primitive-typography-size-5xl",
10510
11254
  "type": "dimension",
10511
- "value": "80px"
11255
+ "description": "Swiss-canon display size. Static desktop value; fluid in theme.css.",
11256
+ "value": "72px"
10512
11257
  },
10513
11258
  {
10514
- "path": "primitive.typography.size.7xl",
10515
- "cssVar": "--primitive-typography-size-7xl",
11259
+ "path": "primitive.typography.size.6xl",
11260
+ "cssVar": "--primitive-typography-size-6xl",
10516
11261
  "type": "dimension",
10517
- "description": "Swiss-canon display size. Static desktop value; fluid in theme.css.",
10518
- "value": "72px"
11262
+ "value": "80px"
10519
11263
  },
10520
11264
  {
10521
11265
  "path": "primitive.typography.weight.light",
@@ -10990,12 +11734,12 @@
10990
11734
  "path": "semantic.color.surface.accent",
10991
11735
  "cssVar": "--semantic-color-surface-accent",
10992
11736
  "type": "color",
10993
- "description": "Accent-colored background",
10994
- "alias": "{primitive.color.blue.500}",
10995
- "resolvedValue": "#1E2EFD",
11737
+ "description": "Accent-colored background (neutral/monochrome; inverts to a light neutral on dark surfaces).",
11738
+ "alias": "{primitive.color.neutral.900}",
11739
+ "resolvedValue": "#111111",
10996
11740
  "dark": {
10997
- "alias": "{primitive.color.blue.500}",
10998
- "resolvedValue": "#1E2EFD"
11741
+ "alias": "{primitive.color.neutral.100}",
11742
+ "resolvedValue": "#f5f5f5"
10999
11743
  }
11000
11744
  },
11001
11745
  {
@@ -11003,11 +11747,71 @@
11003
11747
  "cssVar": "--semantic-color-surface-accentSubtle",
11004
11748
  "type": "color",
11005
11749
  "description": "Faint accent tint for hover states or highlights",
11006
- "alias": "{primitive.color.blue.50}",
11007
- "resolvedValue": "oklch(0.96 0.03 266.54)",
11750
+ "alias": "{primitive.color.neutral.100}",
11751
+ "resolvedValue": "#f5f5f5",
11008
11752
  "dark": {
11009
- "alias": "{primitive.color.blue.900}",
11010
- "resolvedValue": "oklch(0.22 0.05 266.54)"
11753
+ "alias": "{primitive.color.neutral.900}",
11754
+ "resolvedValue": "#111111"
11755
+ }
11756
+ },
11757
+ {
11758
+ "path": "semantic.color.surface.hover",
11759
+ "cssVar": "--semantic-color-surface-hover",
11760
+ "type": "color",
11761
+ "description": "Background for a hovered interactive surface (menu items, chips, tertiary buttons).",
11762
+ "alias": "{primitive.color.neutral.100}",
11763
+ "resolvedValue": "#f5f5f5",
11764
+ "dark": {
11765
+ "alias": "{primitive.color.neutral.900}",
11766
+ "resolvedValue": "#111111"
11767
+ }
11768
+ },
11769
+ {
11770
+ "path": "semantic.color.surface.pressed",
11771
+ "cssVar": "--semantic-color-surface-pressed",
11772
+ "type": "color",
11773
+ "description": "Background for an actively pressed interactive surface.",
11774
+ "alias": "{primitive.color.neutral.50}",
11775
+ "resolvedValue": "#fafafa",
11776
+ "dark": {
11777
+ "alias": "{primitive.color.neutral.950}",
11778
+ "resolvedValue": "#0a0a0a"
11779
+ }
11780
+ },
11781
+ {
11782
+ "path": "semantic.color.surface.selected",
11783
+ "cssVar": "--semantic-color-surface-selected",
11784
+ "type": "color",
11785
+ "description": "Background for a persistently selected item (active tab, checked row).",
11786
+ "alias": "{primitive.color.neutral.200}",
11787
+ "resolvedValue": "#e5e5e5",
11788
+ "dark": {
11789
+ "alias": "{primitive.color.neutral.800}",
11790
+ "resolvedValue": "#262626"
11791
+ }
11792
+ },
11793
+ {
11794
+ "path": "semantic.color.surface.muted",
11795
+ "cssVar": "--semantic-color-surface-muted",
11796
+ "type": "color",
11797
+ "description": "Muted background for low-emphasis content blocks.",
11798
+ "alias": "{primitive.color.neutral.100}",
11799
+ "resolvedValue": "#f5f5f5",
11800
+ "dark": {
11801
+ "alias": "{primitive.color.neutral.900}",
11802
+ "resolvedValue": "#111111"
11803
+ }
11804
+ },
11805
+ {
11806
+ "path": "semantic.color.surface.sunken",
11807
+ "cssVar": "--semantic-color-surface-sunken",
11808
+ "type": "color",
11809
+ "description": "Recessed background for inset wells (inputs, code blocks, nested panels).",
11810
+ "alias": "{primitive.color.neutral.200}",
11811
+ "resolvedValue": "#e5e5e5",
11812
+ "dark": {
11813
+ "alias": "{primitive.color.neutral.850}",
11814
+ "resolvedValue": "#1a1a1a"
11011
11815
  }
11012
11816
  },
11013
11817
  {
@@ -11058,22 +11862,60 @@
11058
11862
  "path": "semantic.color.content.accent",
11059
11863
  "cssVar": "--semantic-color-content-accent",
11060
11864
  "type": "color",
11061
- "alias": "{primitive.color.blue.500}",
11062
- "resolvedValue": "#1E2EFD",
11865
+ "description": "Accent-intent text/icon color (monochrome). Pair with underline/weight for link affordance.",
11866
+ "alias": "{primitive.color.neutral.900}",
11867
+ "resolvedValue": "#111111",
11063
11868
  "dark": {
11064
- "alias": "{primitive.color.blue.300}",
11065
- "resolvedValue": "oklch(0.70 0.2903 266.54)"
11869
+ "alias": "{primitive.color.neutral.100}",
11870
+ "resolvedValue": "#f5f5f5"
11066
11871
  }
11067
11872
  },
11068
11873
  {
11069
11874
  "path": "semantic.color.content.onAccent",
11070
11875
  "cssVar": "--semantic-color-content-onAccent",
11071
11876
  "type": "color",
11877
+ "description": "Text/icon color on accent fills. Flips to a dark neutral in dark mode, where accent fills are light.",
11072
11878
  "alias": "{primitive.color.neutral.white}",
11073
11879
  "resolvedValue": "#ffffff",
11074
11880
  "dark": {
11075
- "alias": "{primitive.color.neutral.white}",
11076
- "resolvedValue": "#ffffff"
11881
+ "alias": "{primitive.color.neutral.900}",
11882
+ "resolvedValue": "#111111"
11883
+ }
11884
+ },
11885
+ {
11886
+ "path": "semantic.color.content.success",
11887
+ "cssVar": "--semantic-color-content-success",
11888
+ "type": "color",
11889
+ "description": "Success-toned text/icon color, independent of feedback banners.",
11890
+ "alias": "{primitive.color.green.700}",
11891
+ "resolvedValue": "#047857",
11892
+ "dark": {
11893
+ "alias": "{primitive.color.green.400}",
11894
+ "resolvedValue": "#34d399"
11895
+ }
11896
+ },
11897
+ {
11898
+ "path": "semantic.color.content.warning",
11899
+ "cssVar": "--semantic-color-content-warning",
11900
+ "type": "color",
11901
+ "description": "Warning-toned text/icon color, independent of feedback banners.",
11902
+ "alias": "{primitive.color.amber.800}",
11903
+ "resolvedValue": "#92400e",
11904
+ "dark": {
11905
+ "alias": "{primitive.color.amber.400}",
11906
+ "resolvedValue": "#fbbf24"
11907
+ }
11908
+ },
11909
+ {
11910
+ "path": "semantic.color.content.danger",
11911
+ "cssVar": "--semantic-color-content-danger",
11912
+ "type": "color",
11913
+ "description": "Danger-toned text/icon color, independent of feedback banners.",
11914
+ "alias": "{primitive.color.red.700}",
11915
+ "resolvedValue": "#b91c1c",
11916
+ "dark": {
11917
+ "alias": "{primitive.color.red.400}",
11918
+ "resolvedValue": "#f87171"
11077
11919
  }
11078
11920
  },
11079
11921
  {
@@ -11087,6 +11929,18 @@
11087
11929
  "resolvedValue": "#404040"
11088
11930
  }
11089
11931
  },
11932
+ {
11933
+ "path": "semantic.color.border.interactive",
11934
+ "cssVar": "--semantic-color-border-interactive",
11935
+ "type": "color",
11936
+ "description": "Border for interactive control boundaries (inputs, selects, secondary buttons); meets the WCAG 1.4.11 3:1 non-text contrast floor.",
11937
+ "alias": "{primitive.color.neutral.500}",
11938
+ "resolvedValue": "#737373",
11939
+ "dark": {
11940
+ "alias": "{primitive.color.neutral.500}",
11941
+ "resolvedValue": "#737373"
11942
+ }
11943
+ },
11090
11944
  {
11091
11945
  "path": "semantic.color.border.subdued",
11092
11946
  "cssVar": "--semantic-color-border-subdued",
@@ -11125,11 +11979,36 @@
11125
11979
  "path": "semantic.color.border.accent",
11126
11980
  "cssVar": "--semantic-color-border-accent",
11127
11981
  "type": "color",
11128
- "alias": "{primitive.color.blue.500}",
11129
- "resolvedValue": "#1E2EFD",
11982
+ "description": "Accent border (neutral/monochrome; inverts on dark surfaces).",
11983
+ "alias": "{primitive.color.neutral.900}",
11984
+ "resolvedValue": "#111111",
11985
+ "dark": {
11986
+ "alias": "{primitive.color.neutral.100}",
11987
+ "resolvedValue": "#f5f5f5"
11988
+ }
11989
+ },
11990
+ {
11991
+ "path": "semantic.color.border.success",
11992
+ "cssVar": "--semantic-color-border-success",
11993
+ "type": "color",
11994
+ "description": "Success-toned border for status outlines and success-state inputs.",
11995
+ "alias": "{primitive.color.green.400}",
11996
+ "resolvedValue": "#34d399",
11997
+ "dark": {
11998
+ "alias": "{primitive.color.green.400}",
11999
+ "resolvedValue": "#34d399"
12000
+ }
12001
+ },
12002
+ {
12003
+ "path": "semantic.color.border.warning",
12004
+ "cssVar": "--semantic-color-border-warning",
12005
+ "type": "color",
12006
+ "description": "Warning-toned border for status outlines and warning-state inputs.",
12007
+ "alias": "{primitive.color.amber.400}",
12008
+ "resolvedValue": "#fbbf24",
11130
12009
  "dark": {
11131
- "alias": "{primitive.color.blue.500}",
11132
- "resolvedValue": "#1E2EFD"
12010
+ "alias": "{primitive.color.amber.400}",
12011
+ "resolvedValue": "#fbbf24"
11133
12012
  }
11134
12013
  },
11135
12014
  {
@@ -11615,12 +12494,12 @@
11615
12494
  "path": "semantic.accent.rest",
11616
12495
  "cssVar": "--semantic-accent-rest",
11617
12496
  "type": "color",
11618
- "description": "Default accent fill for interactive elements at rest.",
11619
- "alias": "{primitive.color.blue.500}",
11620
- "resolvedValue": "#1E2EFD",
12497
+ "description": "Default accent fill for interactive elements at rest. Neutral (monochrome) accent — inverts to a light neutral on dark surfaces.",
12498
+ "alias": "{primitive.color.neutral.900}",
12499
+ "resolvedValue": "#111111",
11621
12500
  "dark": {
11622
- "alias": "{primitive.color.blue.500}",
11623
- "resolvedValue": "#1E2EFD"
12501
+ "alias": "{primitive.color.neutral.100}",
12502
+ "resolvedValue": "#f5f5f5"
11624
12503
  }
11625
12504
  },
11626
12505
  {
@@ -11628,11 +12507,11 @@
11628
12507
  "cssVar": "--semantic-accent-hover",
11629
12508
  "type": "color",
11630
12509
  "description": "Accent fill on pointer hover.",
11631
- "alias": "{primitive.color.blue.600}",
11632
- "resolvedValue": "oklch(0.45 0.2903 266.54)",
12510
+ "alias": "{primitive.color.neutral.800}",
12511
+ "resolvedValue": "#262626",
11633
12512
  "dark": {
11634
- "alias": "{primitive.color.blue.450}",
11635
- "resolvedValue": "oklch(0.56 0.29 266.60)"
12513
+ "alias": "{primitive.color.neutral.200}",
12514
+ "resolvedValue": "#e5e5e5"
11636
12515
  }
11637
12516
  },
11638
12517
  {
@@ -11640,11 +12519,11 @@
11640
12519
  "cssVar": "--semantic-accent-pressed",
11641
12520
  "type": "color",
11642
12521
  "description": "Accent fill during active press.",
11643
- "alias": "{primitive.color.blue.700}",
11644
- "resolvedValue": "oklch(0.44 0.2903 266.54)",
12522
+ "alias": "{primitive.color.neutral.950}",
12523
+ "resolvedValue": "#0a0a0a",
11645
12524
  "dark": {
11646
- "alias": "{primitive.color.blue.400}",
11647
- "resolvedValue": "oklch(0.65 0.2903 266.54)"
12525
+ "alias": "{primitive.color.neutral.300}",
12526
+ "resolvedValue": "#d4d4d4"
11648
12527
  }
11649
12528
  },
11650
12529
  {
@@ -11652,11 +12531,11 @@
11652
12531
  "cssVar": "--semantic-accent-inactive",
11653
12532
  "type": "color",
11654
12533
  "description": "Accent fill for inactive or unselected accent elements.",
11655
- "alias": "{primitive.color.blue.200}",
11656
- "resolvedValue": "oklch(0.88 0.07 266.54)",
12534
+ "alias": "{primitive.color.neutral.400}",
12535
+ "resolvedValue": "#a3a3a3",
11657
12536
  "dark": {
11658
- "alias": "{primitive.color.blue.200}",
11659
- "resolvedValue": "oklch(0.88 0.07 266.54)"
12537
+ "alias": "{primitive.color.neutral.600}",
12538
+ "resolvedValue": "#525252"
11660
12539
  }
11661
12540
  },
11662
12541
  {
@@ -11664,23 +12543,23 @@
11664
12543
  "cssVar": "--semantic-accent-disabled",
11665
12544
  "type": "color",
11666
12545
  "description": "Accent fill for disabled accent elements.",
11667
- "alias": "{primitive.color.blue.100}",
11668
- "resolvedValue": "oklch(0.92 0.04 266.54)",
12546
+ "alias": "{primitive.color.neutral.300}",
12547
+ "resolvedValue": "#d4d4d4",
11669
12548
  "dark": {
11670
- "alias": "{primitive.color.blue.100}",
11671
- "resolvedValue": "oklch(0.92 0.04 266.54)"
12549
+ "alias": "{primitive.color.neutral.700}",
12550
+ "resolvedValue": "#404040"
11672
12551
  }
11673
12552
  },
11674
12553
  {
11675
12554
  "path": "semantic.accent.content",
11676
12555
  "cssVar": "--semantic-accent-content",
11677
12556
  "type": "color",
11678
- "description": "Text and icon color on neutral surfaces with accent intent.",
11679
- "alias": "{primitive.color.blue.500}",
11680
- "resolvedValue": "#1E2EFD",
12557
+ "description": "Text and icon color on neutral surfaces with accent intent. Monochrome — pair with underline/weight for link affordance.",
12558
+ "alias": "{primitive.color.neutral.900}",
12559
+ "resolvedValue": "#111111",
11681
12560
  "dark": {
11682
- "alias": "{primitive.color.blue.300}",
11683
- "resolvedValue": "oklch(0.70 0.2903 266.54)"
12561
+ "alias": "{primitive.color.neutral.100}",
12562
+ "resolvedValue": "#f5f5f5"
11684
12563
  }
11685
12564
  },
11686
12565
  {
@@ -11688,11 +12567,11 @@
11688
12567
  "cssVar": "--semantic-accent-contentHover",
11689
12568
  "type": "color",
11690
12569
  "description": "Accent content color on pointer hover.",
11691
- "alias": "{primitive.color.blue.600}",
11692
- "resolvedValue": "oklch(0.45 0.2903 266.54)",
12570
+ "alias": "{primitive.color.neutral.700}",
12571
+ "resolvedValue": "#404040",
11693
12572
  "dark": {
11694
- "alias": "{primitive.color.blue.200}",
11695
- "resolvedValue": "oklch(0.88 0.07 266.54)"
12573
+ "alias": "{primitive.color.neutral.300}",
12574
+ "resolvedValue": "#d4d4d4"
11696
12575
  }
11697
12576
  },
11698
12577
  {
@@ -11700,20 +12579,20 @@
11700
12579
  "cssVar": "--semantic-accent-subtle",
11701
12580
  "type": "color",
11702
12581
  "description": "Low-emphasis accent tint for hover backgrounds and selection highlights.",
11703
- "alias": "{primitive.color.blue.50}",
11704
- "resolvedValue": "oklch(0.96 0.03 266.54)",
12582
+ "alias": "{primitive.color.neutral.100}",
12583
+ "resolvedValue": "#f5f5f5",
11705
12584
  "dark": {
11706
- "alias": "{primitive.color.blue.900}",
11707
- "resolvedValue": "oklch(0.22 0.05 266.54)"
12585
+ "alias": "{primitive.color.neutral.800}",
12586
+ "resolvedValue": "#262626"
11708
12587
  }
11709
12588
  },
11710
12589
  {
11711
12590
  "path": "semantic.radius.action",
11712
12591
  "cssVar": "--semantic-radius-action",
11713
12592
  "type": "dimension",
11714
- "description": "Corner radius for interactive action elements like buttons and inputs.",
11715
- "alias": "{primitive.radius.12}",
11716
- "resolvedValue": "12px"
12593
+ "description": "Corner radius for action elements (buttons, inputs, badges); Tailwind rounded-md resolves here. Override role.radius to reshape the system.",
12594
+ "alias": "{primitive.radius.8}",
12595
+ "resolvedValue": "8px"
11717
12596
  },
11718
12597
  {
11719
12598
  "path": "semantic.borderWidth.default",
@@ -11836,7 +12715,7 @@
11836
12715
  "type": "color",
11837
12716
  "description": "Nav item background fill when active or selected.",
11838
12717
  "alias": "{semantic.accent.subtle}",
11839
- "resolvedValue": "oklch(0.96 0.03 266.54)"
12718
+ "resolvedValue": "#f5f5f5"
11840
12719
  },
11841
12720
  {
11842
12721
  "path": "component.nav.borderActive",
@@ -11844,7 +12723,7 @@
11844
12723
  "type": "color",
11845
12724
  "description": "Nav item border color when active or selected.",
11846
12725
  "alias": "{semantic.color.surface.accent}",
11847
- "resolvedValue": "#1E2EFD"
12726
+ "resolvedValue": "#111111"
11848
12727
  },
11849
12728
  {
11850
12729
  "path": "component.nav.text",
@@ -11892,7 +12771,7 @@
11892
12771
  "type": "color",
11893
12772
  "description": "Base tag surface color.",
11894
12773
  "alias": "{semantic.accent.subtle}",
11895
- "resolvedValue": "oklch(0.96 0.03 266.54)"
12774
+ "resolvedValue": "#f5f5f5"
11896
12775
  },
11897
12776
  {
11898
12777
  "path": "component.tag.text",
@@ -11988,7 +12867,7 @@
11988
12867
  "type": "color",
11989
12868
  "description": "Active tag fill color.",
11990
12869
  "alias": "{semantic.accent.rest}",
11991
- "resolvedValue": "#1E2EFD"
12870
+ "resolvedValue": "#111111"
11992
12871
  },
11993
12872
  {
11994
12873
  "path": "component.tag.activeBorder",
@@ -11996,7 +12875,7 @@
11996
12875
  "type": "color",
11997
12876
  "description": "Active tag border color.",
11998
12877
  "alias": "{semantic.accent.rest}",
11999
- "resolvedValue": "#1E2EFD"
12878
+ "resolvedValue": "#111111"
12000
12879
  },
12001
12880
  {
12002
12881
  "path": "component.tag.activeHover",
@@ -12004,7 +12883,7 @@
12004
12883
  "type": "color",
12005
12884
  "description": "Active tag hover fill color.",
12006
12885
  "alias": "{semantic.accent.hover}",
12007
- "resolvedValue": "oklch(0.45 0.2903 266.54)"
12886
+ "resolvedValue": "#262626"
12008
12887
  },
12009
12888
  {
12010
12889
  "path": "component.badge.fontSize",
@@ -12088,7 +12967,7 @@
12088
12967
  "type": "color",
12089
12968
  "description": "Primary button fill.",
12090
12969
  "alias": "{semantic.color.surface.accent}",
12091
- "resolvedValue": "#1E2EFD"
12970
+ "resolvedValue": "#111111"
12092
12971
  },
12093
12972
  {
12094
12973
  "path": "component.button.bgHover",
@@ -12096,7 +12975,7 @@
12096
12975
  "type": "color",
12097
12976
  "description": "Primary button hover fill.",
12098
12977
  "alias": "{semantic.accent.hover}",
12099
- "resolvedValue": "oklch(0.45 0.2903 266.54)"
12978
+ "resolvedValue": "#262626"
12100
12979
  },
12101
12980
  {
12102
12981
  "path": "component.button.text",
@@ -12112,7 +12991,7 @@
12112
12991
  "type": "dimension",
12113
12992
  "description": "Button corner radius.",
12114
12993
  "alias": "{semantic.radius.action}",
12115
- "resolvedValue": "12px"
12994
+ "resolvedValue": "8px"
12116
12995
  },
12117
12996
  {
12118
12997
  "path": "component.button.paddingX",
@@ -12292,7 +13171,7 @@
12292
13171
  "type": "color",
12293
13172
  "description": "Disabled primary button fill.",
12294
13173
  "alias": "{semantic.color.surface.accentSubtle}",
12295
- "resolvedValue": "oklch(0.96 0.03 266.54)"
13174
+ "resolvedValue": "#f5f5f5"
12296
13175
  },
12297
13176
  {
12298
13177
  "path": "component.button.secondary.bg.rest",
@@ -12323,24 +13202,24 @@
12323
13202
  "cssVar": "--component-button-secondary-border-rest",
12324
13203
  "type": "color",
12325
13204
  "description": "Secondary button border.",
12326
- "alias": "{semantic.color.border.default}",
12327
- "resolvedValue": "#e5e5e5"
13205
+ "alias": "{semantic.color.border.interactive}",
13206
+ "resolvedValue": "#737373"
12328
13207
  },
12329
13208
  {
12330
13209
  "path": "component.button.secondary.border.hover",
12331
13210
  "cssVar": "--component-button-secondary-border-hover",
12332
13211
  "type": "color",
12333
13212
  "description": "Secondary button hover border.",
12334
- "alias": "{semantic.color.border.default}",
12335
- "resolvedValue": "#e5e5e5"
13213
+ "alias": "{semantic.color.border.interactive}",
13214
+ "resolvedValue": "#737373"
12336
13215
  },
12337
13216
  {
12338
13217
  "path": "component.button.secondary.border.pressed",
12339
13218
  "cssVar": "--component-button-secondary-border-pressed",
12340
13219
  "type": "color",
12341
13220
  "description": "Secondary button pressed border.",
12342
- "alias": "{semantic.color.border.default}",
12343
- "resolvedValue": "#e5e5e5"
13221
+ "alias": "{semantic.color.border.interactive}",
13222
+ "resolvedValue": "#737373"
12344
13223
  },
12345
13224
  {
12346
13225
  "path": "component.button.secondary.border.disabled",
@@ -12376,8 +13255,8 @@
12376
13255
  "path": "component.input.border",
12377
13256
  "cssVar": "--component-input-border",
12378
13257
  "type": "color",
12379
- "alias": "{semantic.color.border.default}",
12380
- "resolvedValue": "#e5e5e5"
13258
+ "alias": "{semantic.color.border.interactive}",
13259
+ "resolvedValue": "#737373"
12381
13260
  },
12382
13261
  {
12383
13262
  "path": "component.input.borderError",
@@ -12391,7 +13270,7 @@
12391
13270
  "cssVar": "--component-input-radius",
12392
13271
  "type": "dimension",
12393
13272
  "alias": "{semantic.radius.action}",
12394
- "resolvedValue": "12px"
13273
+ "resolvedValue": "8px"
12395
13274
  },
12396
13275
  {
12397
13276
  "path": "component.input.paddingX",
@@ -12506,7 +13385,7 @@
12506
13385
  "type": "color",
12507
13386
  "description": "Primary action surface. shadcn role: primary.",
12508
13387
  "alias": "{semantic.color.surface.accent}",
12509
- "resolvedValue": "#1E2EFD"
13388
+ "resolvedValue": "#111111"
12510
13389
  },
12511
13390
  {
12512
13391
  "path": "role.primary-foreground",
@@ -12554,7 +13433,7 @@
12554
13433
  "type": "color",
12555
13434
  "description": "Hover/active tinted bg. shadcn role: accent.",
12556
13435
  "alias": "{semantic.color.surface.accentSubtle}",
12557
- "resolvedValue": "oklch(0.96 0.03 266.54)"
13436
+ "resolvedValue": "#f5f5f5"
12558
13437
  },
12559
13438
  {
12560
13439
  "path": "role.accent-foreground",
@@ -12562,7 +13441,7 @@
12562
13441
  "type": "color",
12563
13442
  "description": "Text on accent surface. shadcn role: accent-foreground.",
12564
13443
  "alias": "{semantic.color.content.accent}",
12565
- "resolvedValue": "#1E2EFD"
13444
+ "resolvedValue": "#111111"
12566
13445
  },
12567
13446
  {
12568
13447
  "path": "role.destructive",
@@ -12593,8 +13472,8 @@
12593
13472
  "cssVar": "--role-input",
12594
13473
  "type": "color",
12595
13474
  "description": "Input field border. shadcn role: input.",
12596
- "alias": "{semantic.color.border.default}",
12597
- "resolvedValue": "#e5e5e5"
13475
+ "alias": "{semantic.color.border.interactive}",
13476
+ "resolvedValue": "#737373"
12598
13477
  },
12599
13478
  {
12600
13479
  "path": "role.ring",
@@ -12602,7 +13481,7 @@
12602
13481
  "type": "color",
12603
13482
  "description": "Focus ring color. shadcn role: ring.",
12604
13483
  "alias": "{semantic.color.border.accent}",
12605
- "resolvedValue": "#1E2EFD"
13484
+ "resolvedValue": "#111111"
12606
13485
  },
12607
13486
  {
12608
13487
  "path": "role.radius",
@@ -12610,7 +13489,7 @@
12610
13489
  "type": "dimension",
12611
13490
  "description": "Default border radius. shadcn role: radius.",
12612
13491
  "alias": "{semantic.radius.action}",
12613
- "resolvedValue": "12px"
13492
+ "resolvedValue": "8px"
12614
13493
  }
12615
13494
  ]
12616
13495
  }