@hirobius/design-system 0.17.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONSUMING.md +150 -0
- package/DESIGN.md +220 -0
- package/README.md +30 -2
- package/codemods/patterns-subpath.mjs +254 -0
- package/codemods/patterns-subpath.names.json +26 -0
- package/dist/chunks/{activity-feed-C8_e-Btq.js → activity-feed-DIMeUJpW.js} +4907 -2912
- package/dist/chunks/{form-DnGRy27o.js → form-BvNNnJ0t.js} +2 -2
- package/dist/form.js +5 -5
- package/dist/hirobius-ui.js +1986 -2529
- package/dist/icons.js +53 -0
- package/dist/manifest.js +15 -14
- package/dist/patterns.js +292 -101
- package/dist/static.css +3 -3
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/dist/types/src/app/components/alert-dialog.d.ts +9 -1
- package/dist/types/src/app/components/alert.d.ts +4 -0
- package/dist/types/src/app/components/avatar.d.ts +4 -0
- package/dist/types/src/app/components/badge.d.ts +4 -0
- package/dist/types/src/app/components/box.d.ts +5 -0
- package/dist/types/src/app/components/breadcrumb.d.ts +4 -0
- package/dist/types/src/app/components/button-group.d.ts +4 -0
- package/dist/types/src/app/components/button.d.ts +3 -0
- package/dist/types/src/app/components/card.d.ts +9 -0
- package/dist/types/src/app/components/checkbox.d.ts +4 -0
- package/dist/types/src/app/components/combobox.d.ts +10 -0
- package/dist/types/src/app/components/command-palette.d.ts +3 -1
- package/dist/types/src/app/components/container.d.ts +5 -0
- package/dist/types/src/app/components/context-menu.d.ts +25 -2
- package/dist/types/src/app/components/data-table-section.d.ts +45 -0
- package/dist/types/src/app/components/destructive-section.d.ts +32 -0
- package/dist/types/src/app/components/dialog.d.ts +20 -2
- package/dist/types/src/app/components/disclosure.d.ts +3 -0
- package/dist/types/src/app/components/divider.d.ts +4 -0
- package/dist/types/src/app/components/empty-state.d.ts +4 -0
- package/dist/types/src/app/components/field.d.ts +4 -0
- package/dist/types/src/app/components/form-actions.d.ts +26 -0
- package/dist/types/src/app/components/grid.d.ts +4 -0
- package/dist/types/src/app/components/hds-tooltip.d.ts +14 -2
- package/dist/types/src/app/components/hover-card.d.ts +16 -1
- package/dist/types/src/app/components/icon.d.ts +4 -0
- package/dist/types/src/app/components/inline-link.d.ts +4 -0
- package/dist/types/src/app/components/input.d.ts +5 -0
- package/dist/types/src/app/components/kbd.d.ts +3 -0
- package/dist/types/src/app/components/menu.d.ts +26 -2
- package/dist/types/src/app/components/metric-tiles.d.ts +40 -0
- package/dist/types/src/app/components/page-header.d.ts +34 -0
- package/dist/types/src/app/components/pagination.d.ts +3 -0
- package/dist/types/src/app/components/popover.d.ts +14 -2
- package/dist/types/src/app/components/progress.d.ts +4 -0
- package/dist/types/src/app/components/radio.d.ts +5 -0
- package/dist/types/src/app/components/select.d.ts +16 -0
- package/dist/types/src/app/components/skeleton.d.ts +4 -0
- package/dist/types/src/app/components/slider.d.ts +3 -0
- package/dist/types/src/app/components/spinner.d.ts +4 -0
- package/dist/types/src/app/components/stack.d.ts +4 -0
- package/dist/types/src/app/components/stat.d.ts +4 -0
- package/dist/types/src/app/components/status-tile.d.ts +4 -0
- package/dist/types/src/app/components/table.d.ts +36 -4
- package/dist/types/src/app/components/tabs.d.ts +4 -0
- package/dist/types/src/app/components/tag.d.ts +3 -0
- package/dist/types/src/app/components/text.d.ts +4 -0
- package/dist/types/src/app/components/textarea.d.ts +3 -0
- package/dist/types/src/app/components/toast.d.ts +4 -0
- package/dist/types/src/app/components/toggle.d.ts +4 -0
- package/dist/types/src/app/components/tooltip.d.ts +1 -1
- package/dist/types/src/app/components/visually-hidden.d.ts +3 -0
- package/dist/types/src/app/context/hds-portal.d.ts +52 -0
- package/dist/types/src/app/context/hds-theme.d.ts +10 -0
- package/dist/types/src/app/data/manifest-types.d.ts +27 -0
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +2 -0
- package/dist/types/src/icons.d.ts +13 -0
- package/dist/types/src/index.d.ts +20 -1
- package/dist/types/src/patterns.d.ts +5 -0
- package/dist/variables.css +4 -0
- package/docs/CONSUMING.md +758 -0
- package/hirobius.tokens.json +17 -0
- package/llms.txt +261 -0
- package/package.json +30 -6
- package/public/hds-manifest.json +1545 -89
- package/public/llms/components.txt +1090 -0
- package/public/llms/layout.txt +54 -0
- package/public/llms/scroll.txt +22 -0
- package/public/llms/tokens.txt +32 -0
- package/public/llms-full.txt +1561 -0
- package/public/llms.txt +261 -0
- package/src/app/data/component-api.json +6156 -0
package/public/hds-manifest.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
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-09-
|
|
5
|
+
"generated": "2026-09-30T12:27:39.299Z",
|
|
6
6
|
"source": "hirobius.tokens.json",
|
|
7
7
|
"format": "W3C DTCG 2025.10",
|
|
8
|
-
"docs": "https://
|
|
9
|
-
"llmsTxt": "https://
|
|
8
|
+
"docs": "https://hirobius-design-system.vercel.app/",
|
|
9
|
+
"llmsTxt": "https://hirobius-design-system.vercel.app/llms.txt",
|
|
10
10
|
"systemSpecs": {
|
|
11
11
|
"engine": "React + TypeScript",
|
|
12
12
|
"icons": "Lucide React",
|
|
@@ -75,9 +75,11 @@
|
|
|
75
75
|
"Container",
|
|
76
76
|
"ContextMenu",
|
|
77
77
|
"Cover",
|
|
78
|
+
"DataTableSection",
|
|
78
79
|
"DateInput",
|
|
79
80
|
"DateRangeInput",
|
|
80
81
|
"DateTimeInput",
|
|
82
|
+
"DestructiveSection",
|
|
81
83
|
"Dialog",
|
|
82
84
|
"DialogClose",
|
|
83
85
|
"DialogContent",
|
|
@@ -95,6 +97,7 @@
|
|
|
95
97
|
"Field",
|
|
96
98
|
"FileInput",
|
|
97
99
|
"Form",
|
|
100
|
+
"FormActions",
|
|
98
101
|
"FormField",
|
|
99
102
|
"FormFieldShell",
|
|
100
103
|
"FoundationSwatch",
|
|
@@ -114,11 +117,14 @@
|
|
|
114
117
|
"Lightbox",
|
|
115
118
|
"Menu",
|
|
116
119
|
"MetadataList",
|
|
120
|
+
"MetricTile",
|
|
121
|
+
"MetricTiles",
|
|
117
122
|
"MultiSelector",
|
|
118
123
|
"NavGroup",
|
|
119
124
|
"NavItem",
|
|
120
125
|
"OverflowList",
|
|
121
126
|
"Page",
|
|
127
|
+
"PageHeader",
|
|
122
128
|
"Pagination",
|
|
123
129
|
"Pin",
|
|
124
130
|
"Popover",
|
|
@@ -240,7 +246,68 @@
|
|
|
240
246
|
"monoSm"
|
|
241
247
|
]
|
|
242
248
|
},
|
|
243
|
-
"patternInventory": [
|
|
249
|
+
"patternInventory": [
|
|
250
|
+
"DataTableSection",
|
|
251
|
+
"DestructiveSection",
|
|
252
|
+
"FormActions",
|
|
253
|
+
"MetricTiles",
|
|
254
|
+
"PageHeader"
|
|
255
|
+
],
|
|
256
|
+
"iconSet": {
|
|
257
|
+
"subpath": "@hirobius/design-system/icons",
|
|
258
|
+
"names": [
|
|
259
|
+
"Archive",
|
|
260
|
+
"ArrowDown",
|
|
261
|
+
"ArrowLeft",
|
|
262
|
+
"ArrowRight",
|
|
263
|
+
"ArrowUp",
|
|
264
|
+
"Bell",
|
|
265
|
+
"Bookmark",
|
|
266
|
+
"Calendar",
|
|
267
|
+
"Check",
|
|
268
|
+
"ChevronDown",
|
|
269
|
+
"ChevronLeft",
|
|
270
|
+
"ChevronRight",
|
|
271
|
+
"ChevronUp",
|
|
272
|
+
"CircleAlert",
|
|
273
|
+
"CircleCheck",
|
|
274
|
+
"CircleHelp",
|
|
275
|
+
"Clock",
|
|
276
|
+
"Copy",
|
|
277
|
+
"Download",
|
|
278
|
+
"Ellipsis",
|
|
279
|
+
"EllipsisVertical",
|
|
280
|
+
"ExternalLink",
|
|
281
|
+
"Eye",
|
|
282
|
+
"EyeOff",
|
|
283
|
+
"FileText",
|
|
284
|
+
"Funnel",
|
|
285
|
+
"Heart",
|
|
286
|
+
"House",
|
|
287
|
+
"Image",
|
|
288
|
+
"Info",
|
|
289
|
+
"Link",
|
|
290
|
+
"Lock",
|
|
291
|
+
"LogIn",
|
|
292
|
+
"LogOut",
|
|
293
|
+
"Mail",
|
|
294
|
+
"Menu",
|
|
295
|
+
"Minus",
|
|
296
|
+
"Pencil",
|
|
297
|
+
"Plus",
|
|
298
|
+
"RefreshCw",
|
|
299
|
+
"Save",
|
|
300
|
+
"Search",
|
|
301
|
+
"Settings",
|
|
302
|
+
"Share",
|
|
303
|
+
"Star",
|
|
304
|
+
"Trash2",
|
|
305
|
+
"TriangleAlert",
|
|
306
|
+
"Upload",
|
|
307
|
+
"User",
|
|
308
|
+
"X"
|
|
309
|
+
]
|
|
310
|
+
},
|
|
244
311
|
"phases": [
|
|
245
312
|
{
|
|
246
313
|
"id": "foundation",
|
|
@@ -581,7 +648,7 @@
|
|
|
581
648
|
],
|
|
582
649
|
"namespaceViolations": []
|
|
583
650
|
},
|
|
584
|
-
"agentEntrypoint": "
|
|
651
|
+
"agentEntrypoint": "llms.txt",
|
|
585
652
|
"breakingChangePolicy": "Version increments on any prop rename, token path rename, or removed component. Additions are non-breaking.",
|
|
586
653
|
"componentSpecs": {
|
|
587
654
|
"CaseStudyLayout": {
|
|
@@ -691,7 +758,12 @@
|
|
|
691
758
|
"sizing": "panel"
|
|
692
759
|
},
|
|
693
760
|
"consumers": [
|
|
761
|
+
"src/app/components/badge.tsx",
|
|
762
|
+
"src/app/components/dialog.tsx",
|
|
763
|
+
"src/app/components/empty-state.tsx",
|
|
764
|
+
"src/app/components/toast.tsx",
|
|
694
765
|
"src/app/data/hdsEditorial.tsx",
|
|
766
|
+
"src/stories/alert-dialog.stories.tsx",
|
|
695
767
|
"src/stories/alert.stories.tsx",
|
|
696
768
|
"src/stories/static-primitives.stories.tsx"
|
|
697
769
|
],
|
|
@@ -812,7 +884,21 @@
|
|
|
812
884
|
"primitives-alert--success",
|
|
813
885
|
"primitives-alert--warning",
|
|
814
886
|
"primitives-alert--with-title"
|
|
815
|
-
]
|
|
887
|
+
],
|
|
888
|
+
"usage": {
|
|
889
|
+
"when": "Show a persistent inline message with a severity, next to the content it concerns.",
|
|
890
|
+
"whenNot": "A brief confirmation that should disappear on its own, or a status label.",
|
|
891
|
+
"useInstead": [
|
|
892
|
+
{
|
|
893
|
+
"component": "ToastProvider",
|
|
894
|
+
"reason": "a brief confirmation that fades away"
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
"component": "Badge",
|
|
898
|
+
"reason": "a short status label"
|
|
899
|
+
}
|
|
900
|
+
]
|
|
901
|
+
}
|
|
816
902
|
},
|
|
817
903
|
"CinematicLink": {
|
|
818
904
|
"category": "Branding",
|
|
@@ -946,7 +1032,7 @@
|
|
|
946
1032
|
"governedCategory": true,
|
|
947
1033
|
"hidden": false,
|
|
948
1034
|
"filePath": "src/app/components/container.tsx",
|
|
949
|
-
"description": "Container — semantic width-constrained layout.
|
|
1035
|
+
"description": "Container — semantic width-constrained layout. Centers content horizontally and applies semantic max-width constraints. - maxWidth options: 'content' (760px prose) | 'max' (1200px full layout) - No arbitrary pixel values allowed Usage: <Container maxWidth=\"max\"> <div>...</div> </Container>",
|
|
950
1036
|
"figmaUrl": null,
|
|
951
1037
|
"figmaId": null,
|
|
952
1038
|
"preview": {
|
|
@@ -959,6 +1045,7 @@
|
|
|
959
1045
|
"src/app/components/center.tsx",
|
|
960
1046
|
"src/app/components/page.tsx",
|
|
961
1047
|
"src/app/components/switcher.tsx",
|
|
1048
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
962
1049
|
"src/app/layouts/CaseStudyLayout.tsx",
|
|
963
1050
|
"src/app/layouts/DocLayout.tsx",
|
|
964
1051
|
"src/stories/box.stories.tsx",
|
|
@@ -1010,7 +1097,26 @@
|
|
|
1010
1097
|
"storyIds": [
|
|
1011
1098
|
"primitives-container--content-width",
|
|
1012
1099
|
"primitives-container--max-width"
|
|
1013
|
-
]
|
|
1100
|
+
],
|
|
1101
|
+
"usage": {
|
|
1102
|
+
"when": "Constrain a page region to the content or maximum width and centre it.",
|
|
1103
|
+
"whenNot": "Spacing between siblings, columns, or a surface with padding.",
|
|
1104
|
+
"useInstead": [
|
|
1105
|
+
{
|
|
1106
|
+
"component": "Stack",
|
|
1107
|
+
"reason": "spacing between siblings"
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
"component": "Grid",
|
|
1111
|
+
"reason": "columns"
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
"component": "Box",
|
|
1115
|
+
"reason": "one-off layout that no named primitive covers"
|
|
1116
|
+
}
|
|
1117
|
+
]
|
|
1118
|
+
},
|
|
1119
|
+
"aiRules": "Reach for this named layout intent before Box/sx. maxWidth MUST use the semantic width scale ('content' | 'max'), never a raw px value. Do NOT use the deprecated `padding` prop — it is a no-op; apply padding via Surface or a Stack instead. Do NOT import Container directly inside a page under src/app/pages — use Page, which wraps Container and owns vertical rhythm. Use Center instead when you also need a horizontal gutter, which Container does not support."
|
|
1014
1120
|
},
|
|
1015
1121
|
"Disclosure": {
|
|
1016
1122
|
"category": "Layout",
|
|
@@ -1027,6 +1133,7 @@
|
|
|
1027
1133
|
},
|
|
1028
1134
|
"consumers": [
|
|
1029
1135
|
"src/app/components/nav-group.tsx",
|
|
1136
|
+
"src/app/components/tabs.tsx",
|
|
1030
1137
|
"src/app/layouts/HdsDocsShell.tsx",
|
|
1031
1138
|
"src/stories/disclosure.stories.tsx",
|
|
1032
1139
|
"src/stories/nav-group.stories.tsx"
|
|
@@ -1134,7 +1241,17 @@
|
|
|
1134
1241
|
"primitives-disclosure--multiple-items",
|
|
1135
1242
|
"primitives-disclosure--open-by-default",
|
|
1136
1243
|
"primitives-disclosure--panel"
|
|
1137
|
-
]
|
|
1244
|
+
],
|
|
1245
|
+
"usage": {
|
|
1246
|
+
"when": "Hide optional explanatory content behind a heading that people can expand.",
|
|
1247
|
+
"whenNot": "Content people must see, or switching between panels.",
|
|
1248
|
+
"useInstead": [
|
|
1249
|
+
{
|
|
1250
|
+
"component": "Tabs",
|
|
1251
|
+
"reason": "switching between panels of content"
|
|
1252
|
+
}
|
|
1253
|
+
]
|
|
1254
|
+
}
|
|
1138
1255
|
},
|
|
1139
1256
|
"Divider": {
|
|
1140
1257
|
"category": "Layout",
|
|
@@ -1239,7 +1356,21 @@
|
|
|
1239
1356
|
"primitives-divider--legacy-strong-prop",
|
|
1240
1357
|
"primitives-divider--vertical",
|
|
1241
1358
|
"primitives-divider--with-spacing"
|
|
1242
|
-
]
|
|
1359
|
+
],
|
|
1360
|
+
"usage": {
|
|
1361
|
+
"when": "Separate two regions of content with a thin semantic rule.",
|
|
1362
|
+
"whenNot": "Spacing alone would do, or the separation needs a container.",
|
|
1363
|
+
"useInstead": [
|
|
1364
|
+
{
|
|
1365
|
+
"component": "Stack",
|
|
1366
|
+
"reason": "gap-based spacing between siblings"
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
"component": "Surface",
|
|
1370
|
+
"reason": "a bounded region with its own background"
|
|
1371
|
+
}
|
|
1372
|
+
]
|
|
1373
|
+
}
|
|
1243
1374
|
},
|
|
1244
1375
|
"DocLinkCard": {
|
|
1245
1376
|
"category": "Navigation",
|
|
@@ -1543,8 +1674,11 @@
|
|
|
1543
1674
|
"consumers": [
|
|
1544
1675
|
"src/app/components/box.tsx",
|
|
1545
1676
|
"src/app/components/cluster.tsx",
|
|
1677
|
+
"src/app/components/container.tsx",
|
|
1546
1678
|
"src/app/components/foundation-swatch.tsx",
|
|
1547
1679
|
"src/app/components/image-lightbox.tsx",
|
|
1680
|
+
"src/app/components/metric-tiles.test.tsx",
|
|
1681
|
+
"src/app/components/metric-tiles.tsx",
|
|
1548
1682
|
"src/app/components/segmented-control.test.tsx",
|
|
1549
1683
|
"src/app/components/sidebar.tsx",
|
|
1550
1684
|
"src/app/components/stack.tsx",
|
|
@@ -1557,7 +1691,8 @@
|
|
|
1557
1691
|
"src/stories/grid.stories.tsx",
|
|
1558
1692
|
"src/stories/patterns-layout.stories.tsx",
|
|
1559
1693
|
"src/stories/segmented-control.stories.tsx",
|
|
1560
|
-
"src/stories/surface.stories.tsx"
|
|
1694
|
+
"src/stories/surface.stories.tsx",
|
|
1695
|
+
"src/stories/tile-grid.stories.tsx"
|
|
1561
1696
|
],
|
|
1562
1697
|
"tokenMapping": {},
|
|
1563
1698
|
"props": {
|
|
@@ -1658,7 +1793,22 @@
|
|
|
1658
1793
|
"primitives-grid--auto-fit",
|
|
1659
1794
|
"primitives-grid--three-column",
|
|
1660
1795
|
"primitives-grid--two-column"
|
|
1661
|
-
]
|
|
1796
|
+
],
|
|
1797
|
+
"usage": {
|
|
1798
|
+
"when": "Lay out content in responsive columns with token-governed gaps, or align nested content with subgrid.",
|
|
1799
|
+
"whenNot": "A single row or column, or styling a surface.",
|
|
1800
|
+
"useInstead": [
|
|
1801
|
+
{
|
|
1802
|
+
"component": "Stack",
|
|
1803
|
+
"reason": "a single row or column"
|
|
1804
|
+
},
|
|
1805
|
+
{
|
|
1806
|
+
"component": "Box",
|
|
1807
|
+
"reason": "one-off layout that no named primitive covers"
|
|
1808
|
+
}
|
|
1809
|
+
]
|
|
1810
|
+
},
|
|
1811
|
+
"aiRules": "Use Grid for spatial layout, not for surface styling or content padding. Do NOT apply background, border, or internal padding directly to Grid to mimic a card. Do NOT use arbitrary CSS grid templates when fixed, auto-fit, or subgrid modes already express the layout. Do NOT use Grid for simple one-dimensional stacks where Stack is sufficient."
|
|
1662
1812
|
},
|
|
1663
1813
|
"Icon": {
|
|
1664
1814
|
"category": "Display",
|
|
@@ -1677,6 +1827,7 @@
|
|
|
1677
1827
|
"src/app/components/activity-feed.test.tsx",
|
|
1678
1828
|
"src/app/components/activity-feed.tsx",
|
|
1679
1829
|
"src/app/components/alert.tsx",
|
|
1830
|
+
"src/app/components/avatar.tsx",
|
|
1680
1831
|
"src/app/components/breadcrumb.tsx",
|
|
1681
1832
|
"src/app/components/checkbox.tsx",
|
|
1682
1833
|
"src/app/components/code-block.tsx",
|
|
@@ -1823,7 +1974,21 @@
|
|
|
1823
1974
|
"primitives-icon--semantic-color",
|
|
1824
1975
|
"primitives-icon--semantic-colors",
|
|
1825
1976
|
"primitives-icon--size-gallery"
|
|
1826
|
-
]
|
|
1977
|
+
],
|
|
1978
|
+
"usage": {
|
|
1979
|
+
"when": "Draw a Lucide glyph at a size and colour from the design tokens.",
|
|
1980
|
+
"whenNot": "A control someone can activate, or a picture that carries content.",
|
|
1981
|
+
"useInstead": [
|
|
1982
|
+
{
|
|
1983
|
+
"component": "Button",
|
|
1984
|
+
"reason": "a clickable control, with iconOnly for an icon-only one"
|
|
1985
|
+
},
|
|
1986
|
+
{
|
|
1987
|
+
"component": "Avatar",
|
|
1988
|
+
"reason": "a picture of a person or entity"
|
|
1989
|
+
}
|
|
1990
|
+
]
|
|
1991
|
+
}
|
|
1827
1992
|
},
|
|
1828
1993
|
"IconButton": {
|
|
1829
1994
|
"category": "Actions",
|
|
@@ -1839,6 +2004,8 @@
|
|
|
1839
2004
|
"sizing": "panel"
|
|
1840
2005
|
},
|
|
1841
2006
|
"consumers": [
|
|
2007
|
+
"src/app/components/button.test.tsx",
|
|
2008
|
+
"src/app/components/data-table-section.tsx",
|
|
1842
2009
|
"src/app/components/hds-tooltip.tsx",
|
|
1843
2010
|
"src/app/components/inline-code.tsx",
|
|
1844
2011
|
"src/app/components/pagination.tsx",
|
|
@@ -1846,7 +2013,10 @@
|
|
|
1846
2013
|
"src/app/data/hdsEditorial.tsx",
|
|
1847
2014
|
"src/docs-tooling/page-footer.tsx",
|
|
1848
2015
|
"src/docs-tooling/shell-controls.tsx",
|
|
1849
|
-
"src/stories/
|
|
2016
|
+
"src/stories/data-table-section.stories.tsx",
|
|
2017
|
+
"src/stories/icon-button.stories.tsx",
|
|
2018
|
+
"src/stories/lib/usage-description.test.ts",
|
|
2019
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
1850
2020
|
],
|
|
1851
2021
|
"tokenMapping": {
|
|
1852
2022
|
"Fill": "semantic.accent.rest",
|
|
@@ -1962,7 +2132,17 @@
|
|
|
1962
2132
|
"primitives-icon-button--primary",
|
|
1963
2133
|
"primitives-icon-button--size-gallery",
|
|
1964
2134
|
"primitives-icon-button--tertiary"
|
|
1965
|
-
]
|
|
2135
|
+
],
|
|
2136
|
+
"usage": {
|
|
2137
|
+
"when": "Trigger an action from a compact icon-only control, always with an accessible label.",
|
|
2138
|
+
"whenNot": "A control that needs a visible text label.",
|
|
2139
|
+
"useInstead": [
|
|
2140
|
+
{
|
|
2141
|
+
"component": "Button",
|
|
2142
|
+
"reason": "a control with a text label, or Button iconOnly (hds#254 folds IconButton into it)"
|
|
2143
|
+
}
|
|
2144
|
+
]
|
|
2145
|
+
}
|
|
1966
2146
|
},
|
|
1967
2147
|
"InlineCode": {
|
|
1968
2148
|
"category": "Display",
|
|
@@ -2044,10 +2224,13 @@
|
|
|
2044
2224
|
"sizing": "panel"
|
|
2045
2225
|
},
|
|
2046
2226
|
"consumers": [
|
|
2227
|
+
"src/app/components/button.tsx",
|
|
2047
2228
|
"src/app/components/hover-card.tsx",
|
|
2048
2229
|
"src/app/components/image-lightbox.tsx",
|
|
2230
|
+
"src/app/components/text.tsx",
|
|
2049
2231
|
"src/docs-tooling/lab/legacy-token-detail.tsx",
|
|
2050
|
-
"src/stories/inline-link.stories.tsx"
|
|
2232
|
+
"src/stories/inline-link.stories.tsx",
|
|
2233
|
+
"src/stories/lib/usage-description.test.ts"
|
|
2051
2234
|
],
|
|
2052
2235
|
"tokenMapping": {
|
|
2053
2236
|
"Link text": "semantic.color.content.accent",
|
|
@@ -2095,7 +2278,21 @@
|
|
|
2095
2278
|
"primitives-inline-link--external-no-icon",
|
|
2096
2279
|
"primitives-inline-link--in-body-copy",
|
|
2097
2280
|
"primitives-inline-link--internal-route"
|
|
2098
|
-
]
|
|
2281
|
+
],
|
|
2282
|
+
"usage": {
|
|
2283
|
+
"when": "Link to a route or external URL from inside body copy.",
|
|
2284
|
+
"whenNot": "An action that changes something, or a control that needs button styling.",
|
|
2285
|
+
"useInstead": [
|
|
2286
|
+
{
|
|
2287
|
+
"component": "Button",
|
|
2288
|
+
"reason": "an action or a link that needs button styling"
|
|
2289
|
+
},
|
|
2290
|
+
{
|
|
2291
|
+
"component": "Text",
|
|
2292
|
+
"reason": "unlinked body copy"
|
|
2293
|
+
}
|
|
2294
|
+
]
|
|
2295
|
+
}
|
|
2099
2296
|
},
|
|
2100
2297
|
"Input": {
|
|
2101
2298
|
"category": "Inputs",
|
|
@@ -2111,17 +2308,25 @@
|
|
|
2111
2308
|
"sizing": "panel"
|
|
2112
2309
|
},
|
|
2113
2310
|
"consumers": [
|
|
2311
|
+
"src/app/components/field.tsx",
|
|
2114
2312
|
"src/app/components/form.tsx",
|
|
2115
2313
|
"src/app/components/segmented-control.tsx",
|
|
2314
|
+
"src/app/components/slider.tsx",
|
|
2116
2315
|
"src/app/components/stepper-field.tsx",
|
|
2117
2316
|
"src/app/components/textarea.tsx",
|
|
2118
2317
|
"src/app/components/time-input.tsx",
|
|
2119
2318
|
"src/app/data/hdsEditorial.tsx",
|
|
2120
2319
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
2121
2320
|
"src/stories/combobox.stories.tsx",
|
|
2321
|
+
"src/stories/date-input.stories.tsx",
|
|
2322
|
+
"src/stories/date-range-input.stories.tsx",
|
|
2323
|
+
"src/stories/date-time-input.stories.tsx",
|
|
2324
|
+
"src/stories/file-input.stories.tsx",
|
|
2325
|
+
"src/stories/input-group.stories.tsx",
|
|
2122
2326
|
"src/stories/input.stories.tsx",
|
|
2123
2327
|
"src/stories/patterns-layout.stories.tsx",
|
|
2124
|
-
"src/stories/textarea.stories.tsx"
|
|
2328
|
+
"src/stories/textarea.stories.tsx",
|
|
2329
|
+
"src/stories/time-input.stories.tsx"
|
|
2125
2330
|
],
|
|
2126
2331
|
"tokenMapping": {
|
|
2127
2332
|
"Surface fill": "role.background",
|
|
@@ -2349,7 +2554,25 @@
|
|
|
2349
2554
|
"primitives-input--size-variants",
|
|
2350
2555
|
"primitives-input--with-error",
|
|
2351
2556
|
"primitives-input--with-helper"
|
|
2352
|
-
]
|
|
2557
|
+
],
|
|
2558
|
+
"usage": {
|
|
2559
|
+
"when": "Collect a single line of text, a number, an email or a password, with label, helper and error slots.",
|
|
2560
|
+
"whenNot": "Multi-line text, or choosing from a fixed list of options.",
|
|
2561
|
+
"useInstead": [
|
|
2562
|
+
{
|
|
2563
|
+
"component": "Textarea",
|
|
2564
|
+
"reason": "multi-line text"
|
|
2565
|
+
},
|
|
2566
|
+
{
|
|
2567
|
+
"component": "Select",
|
|
2568
|
+
"reason": "a short fixed list"
|
|
2569
|
+
},
|
|
2570
|
+
{
|
|
2571
|
+
"component": "Combobox",
|
|
2572
|
+
"reason": "a long fixed list that needs search"
|
|
2573
|
+
}
|
|
2574
|
+
]
|
|
2575
|
+
}
|
|
2353
2576
|
},
|
|
2354
2577
|
"NavGroup": {
|
|
2355
2578
|
"category": "Navigation",
|
|
@@ -2569,7 +2792,10 @@
|
|
|
2569
2792
|
"sizing": "panel"
|
|
2570
2793
|
},
|
|
2571
2794
|
"consumers": [
|
|
2795
|
+
"src/app/components/button-group.tsx",
|
|
2796
|
+
"src/app/components/radio.tsx",
|
|
2572
2797
|
"src/app/components/segmented-control.test.tsx",
|
|
2798
|
+
"src/app/components/tabs.tsx",
|
|
2573
2799
|
"src/app/data/hdsEditorial.tsx",
|
|
2574
2800
|
"src/app/hooks/useInteractionState.ts",
|
|
2575
2801
|
"src/docs-tooling/TokenDisplayToggle.tsx",
|
|
@@ -2660,7 +2886,25 @@
|
|
|
2660
2886
|
"primitives-segmented-control--full-width",
|
|
2661
2887
|
"primitives-segmented-control--primary",
|
|
2662
2888
|
"primitives-segmented-control--secondary"
|
|
2663
|
-
]
|
|
2889
|
+
],
|
|
2890
|
+
"usage": {
|
|
2891
|
+
"when": "Switch between two to five mutually exclusive views or modes in a compact row.",
|
|
2892
|
+
"whenNot": "A form choice that submits with the form, or more than five options.",
|
|
2893
|
+
"useInstead": [
|
|
2894
|
+
{
|
|
2895
|
+
"component": "Radio",
|
|
2896
|
+
"reason": "a form choice that submits with the form"
|
|
2897
|
+
},
|
|
2898
|
+
{
|
|
2899
|
+
"component": "Tabs",
|
|
2900
|
+
"reason": "switching between panels of content"
|
|
2901
|
+
},
|
|
2902
|
+
{
|
|
2903
|
+
"component": "Select",
|
|
2904
|
+
"reason": "more than five options"
|
|
2905
|
+
}
|
|
2906
|
+
]
|
|
2907
|
+
}
|
|
2664
2908
|
},
|
|
2665
2909
|
"Sketch": {
|
|
2666
2910
|
"category": "Layout",
|
|
@@ -2756,10 +3000,13 @@
|
|
|
2756
3000
|
"consumers": [
|
|
2757
3001
|
"src/app/components/activity-feed.tsx",
|
|
2758
3002
|
"src/app/components/box.tsx",
|
|
3003
|
+
"src/app/components/button-group.tsx",
|
|
2759
3004
|
"src/app/components/cluster.tsx",
|
|
2760
3005
|
"src/app/components/container.tsx",
|
|
2761
3006
|
"src/app/components/cover.tsx",
|
|
3007
|
+
"src/app/components/data-table-section.tsx",
|
|
2762
3008
|
"src/app/components/disclosure.tsx",
|
|
3009
|
+
"src/app/components/divider.tsx",
|
|
2763
3010
|
"src/app/components/error-boundary.tsx",
|
|
2764
3011
|
"src/app/components/error-pattern.tsx",
|
|
2765
3012
|
"src/app/components/foundation-swatch.tsx",
|
|
@@ -2767,8 +3014,11 @@
|
|
|
2767
3014
|
"src/app/components/heading-stack.tsx",
|
|
2768
3015
|
"src/app/components/image-lightbox.tsx",
|
|
2769
3016
|
"src/app/components/nav-group.tsx",
|
|
3017
|
+
"src/app/components/page-header.tsx",
|
|
2770
3018
|
"src/app/components/page.tsx",
|
|
2771
3019
|
"src/app/components/sketch.tsx",
|
|
3020
|
+
"src/app/components/surface.tsx",
|
|
3021
|
+
"src/app/components/table.tsx",
|
|
2772
3022
|
"src/app/components/tooltip.tsx",
|
|
2773
3023
|
"src/app/data/hdsEditorial.tsx",
|
|
2774
3024
|
"src/app/layouts/CaseStudyLayout.tsx",
|
|
@@ -2781,7 +3031,9 @@
|
|
|
2781
3031
|
"src/stories/box.stories.tsx",
|
|
2782
3032
|
"src/stories/code-block.stories.tsx",
|
|
2783
3033
|
"src/stories/grid.stories.tsx",
|
|
3034
|
+
"src/stories/heading-stack.stories.tsx",
|
|
2784
3035
|
"src/stories/page.stories.tsx",
|
|
3036
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
2785
3037
|
"src/stories/patterns-layout.stories.tsx",
|
|
2786
3038
|
"src/stories/stack.stories.tsx"
|
|
2787
3039
|
],
|
|
@@ -2936,7 +3188,22 @@
|
|
|
2936
3188
|
"primitives-stack--space-between",
|
|
2937
3189
|
"primitives-stack--spacious-gap",
|
|
2938
3190
|
"primitives-stack--tight-gap"
|
|
2939
|
-
]
|
|
3191
|
+
],
|
|
3192
|
+
"usage": {
|
|
3193
|
+
"when": "Space a row or column of content with token gaps and simple flex alignment.",
|
|
3194
|
+
"whenNot": "Multi-column layout, or giving content a background or padding.",
|
|
3195
|
+
"useInstead": [
|
|
3196
|
+
{
|
|
3197
|
+
"component": "Grid",
|
|
3198
|
+
"reason": "multi-column layout"
|
|
3199
|
+
},
|
|
3200
|
+
{
|
|
3201
|
+
"component": "Surface",
|
|
3202
|
+
"reason": "content that needs a background or padding"
|
|
3203
|
+
}
|
|
3204
|
+
]
|
|
3205
|
+
},
|
|
3206
|
+
"aiRules": "Use Stack for flow spacing and simple flex alignment only. Do NOT use Stack to create card chrome, internal surface padding, or page-width constraints. Do NOT apply arbitrary margins to Stack to fake spacing between children when the gap prop should own that rhythm. Do NOT use Stack for true two-dimensional layouts that require Grid."
|
|
2940
3207
|
},
|
|
2941
3208
|
"StepperField": {
|
|
2942
3209
|
"category": "Inputs",
|
|
@@ -2952,6 +3219,7 @@
|
|
|
2952
3219
|
"sizing": "panel"
|
|
2953
3220
|
},
|
|
2954
3221
|
"consumers": [
|
|
3222
|
+
"src/app/components/stepper-field.test.tsx",
|
|
2955
3223
|
"src/stories/stepper-field.stories.tsx"
|
|
2956
3224
|
],
|
|
2957
3225
|
"tokenMapping": {},
|
|
@@ -3052,10 +3320,13 @@
|
|
|
3052
3320
|
"sizing": "full"
|
|
3053
3321
|
},
|
|
3054
3322
|
"consumers": [
|
|
3323
|
+
"src/app/components/data-table-section.tsx",
|
|
3055
3324
|
"src/app/components/table.test.tsx",
|
|
3056
3325
|
"src/app/data/hdsEditorial.tsx",
|
|
3326
|
+
"src/app/data/manifest-types.ts",
|
|
3057
3327
|
"src/docs-tooling/api-reference.tsx",
|
|
3058
3328
|
"src/docs-tooling/propTableUtils.tsx",
|
|
3329
|
+
"src/stories/data-table-section.stories.tsx",
|
|
3059
3330
|
"src/stories/nav-group.stories.tsx",
|
|
3060
3331
|
"src/stories/nav-item.stories.tsx",
|
|
3061
3332
|
"src/stories/segmented-control.stories.tsx",
|
|
@@ -3131,10 +3402,25 @@
|
|
|
3131
3402
|
"primitives-table--density-comfortable",
|
|
3132
3403
|
"primitives-table--density-compact",
|
|
3133
3404
|
"primitives-table--flush",
|
|
3405
|
+
"primitives-table--follows-density-dial",
|
|
3134
3406
|
"primitives-table--sortable",
|
|
3135
3407
|
"primitives-table--with-badge-slots",
|
|
3136
3408
|
"primitives-table--with-caption"
|
|
3137
|
-
]
|
|
3409
|
+
],
|
|
3410
|
+
"usage": {
|
|
3411
|
+
"when": "Show rows of structured data in aligned columns, with optional sorting.",
|
|
3412
|
+
"whenNot": "A single record, a short list of links, or content that reflows as cards.",
|
|
3413
|
+
"useInstead": [
|
|
3414
|
+
{
|
|
3415
|
+
"component": "Field",
|
|
3416
|
+
"reason": "one record as label and value pairs"
|
|
3417
|
+
},
|
|
3418
|
+
{
|
|
3419
|
+
"component": "Stack",
|
|
3420
|
+
"reason": "a short list of items"
|
|
3421
|
+
}
|
|
3422
|
+
]
|
|
3423
|
+
}
|
|
3138
3424
|
},
|
|
3139
3425
|
"Tag": {
|
|
3140
3426
|
"category": "Inputs",
|
|
@@ -3303,7 +3589,17 @@
|
|
|
3303
3589
|
"primitives-tag--filter-row",
|
|
3304
3590
|
"primitives-tag--interactive",
|
|
3305
3591
|
"primitives-tag--state-matrix"
|
|
3306
|
-
]
|
|
3592
|
+
],
|
|
3593
|
+
"usage": {
|
|
3594
|
+
"when": "Show an interactive filter or category chip that people can toggle.",
|
|
3595
|
+
"whenNot": "A read-only status or count label.",
|
|
3596
|
+
"useInstead": [
|
|
3597
|
+
{
|
|
3598
|
+
"component": "Badge",
|
|
3599
|
+
"reason": "a read-only status or count"
|
|
3600
|
+
}
|
|
3601
|
+
]
|
|
3602
|
+
}
|
|
3307
3603
|
},
|
|
3308
3604
|
"Token": {
|
|
3309
3605
|
"category": "Display",
|
|
@@ -3480,7 +3776,7 @@
|
|
|
3480
3776
|
"governedCategory": true,
|
|
3481
3777
|
"hidden": false,
|
|
3482
3778
|
"filePath": "src/app/components/surface.tsx",
|
|
3483
|
-
"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) -
|
|
3779
|
+
"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) - Radius: `rounded-lg` (role radius + 4px), the one container radius shared with Card - 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>",
|
|
3484
3780
|
"figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-27",
|
|
3485
3781
|
"figmaId": null,
|
|
3486
3782
|
"preview": {
|
|
@@ -3488,23 +3784,28 @@
|
|
|
3488
3784
|
"sizing": "panel"
|
|
3489
3785
|
},
|
|
3490
3786
|
"consumers": [
|
|
3787
|
+
"src/app/components/card.tsx",
|
|
3491
3788
|
"src/app/components/container.tsx",
|
|
3492
3789
|
"src/app/components/dialog.tsx",
|
|
3493
3790
|
"src/app/components/disclosure.tsx",
|
|
3791
|
+
"src/app/components/divider.tsx",
|
|
3494
3792
|
"src/app/components/empty-state.tsx",
|
|
3495
3793
|
"src/app/components/error-boundary.tsx",
|
|
3496
3794
|
"src/app/components/error-pattern.tsx",
|
|
3497
3795
|
"src/app/components/foundation-swatch.tsx",
|
|
3498
3796
|
"src/app/components/image-lightbox.tsx",
|
|
3797
|
+
"src/app/components/metric-tiles.tsx",
|
|
3499
3798
|
"src/app/components/popover.tsx",
|
|
3500
3799
|
"src/app/components/sketch.tsx",
|
|
3501
3800
|
"src/app/components/slider.tsx",
|
|
3801
|
+
"src/app/components/stack.tsx",
|
|
3502
3802
|
"src/app/components/stepper-field.tsx",
|
|
3503
3803
|
"src/app/components/surface-padding.ts",
|
|
3504
3804
|
"src/app/components/table.tsx",
|
|
3505
3805
|
"src/app/components/tokenTableUtils.ts",
|
|
3506
3806
|
"src/app/components/tokenUtils.ts",
|
|
3507
3807
|
"src/app/components/tooltip.tsx",
|
|
3808
|
+
"src/app/context/hds-theme.tsx",
|
|
3508
3809
|
"src/app/data/hdsEditorial.tsx",
|
|
3509
3810
|
"src/app/layouts/CaseStudyLayout.tsx",
|
|
3510
3811
|
"src/docs-tooling/api-reference.tsx",
|
|
@@ -3573,7 +3874,22 @@
|
|
|
3573
3874
|
"primitives-surface--forced-dark",
|
|
3574
3875
|
"primitives-surface--item-padding",
|
|
3575
3876
|
"primitives-surface--with-shadow"
|
|
3576
|
-
]
|
|
3877
|
+
],
|
|
3878
|
+
"usage": {
|
|
3879
|
+
"when": "Wrap content in a padded, background-bearing inset surface with no header or footer anatomy.",
|
|
3880
|
+
"whenNot": "Page layout, section spacing, width constraints, or content that needs slots.",
|
|
3881
|
+
"useInstead": [
|
|
3882
|
+
{
|
|
3883
|
+
"component": "Card",
|
|
3884
|
+
"reason": "content that needs header, body or footer slots"
|
|
3885
|
+
},
|
|
3886
|
+
{
|
|
3887
|
+
"component": "Stack",
|
|
3888
|
+
"reason": "spacing between siblings"
|
|
3889
|
+
}
|
|
3890
|
+
]
|
|
3891
|
+
},
|
|
3892
|
+
"aiRules": "Use Surface only when content needs a background-bearing inset wrapper. Do NOT use Surface for macro page layouts, section spacing, or pure width constraints. Do NOT nest extra padded wrappers inside Surface to simulate another card. Do NOT recreate surface behavior with raw div padding, backgroundColor, or border styles elsewhere."
|
|
3577
3893
|
},
|
|
3578
3894
|
"Card": {
|
|
3579
3895
|
"category": "Display",
|
|
@@ -3585,18 +3901,30 @@
|
|
|
3585
3901
|
"figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=39-11",
|
|
3586
3902
|
"figmaId": null,
|
|
3587
3903
|
"consumers": [
|
|
3904
|
+
"src/app/components/card-progress.test.tsx",
|
|
3905
|
+
"src/app/components/destructive-section.tsx",
|
|
3588
3906
|
"src/app/components/doc-link-card.tsx",
|
|
3589
3907
|
"src/app/components/empty-state.tsx",
|
|
3908
|
+
"src/app/components/field.tsx",
|
|
3590
3909
|
"src/app/components/grid.tsx",
|
|
3591
3910
|
"src/app/components/metadata-list.tsx",
|
|
3911
|
+
"src/app/components/metric-tiles.tsx",
|
|
3592
3912
|
"src/app/components/radio.test.tsx",
|
|
3593
3913
|
"src/app/components/stacked-card-rail.tsx",
|
|
3914
|
+
"src/app/components/stat.tsx",
|
|
3915
|
+
"src/app/components/status-tile.tsx",
|
|
3594
3916
|
"src/app/components/surface-padding.ts",
|
|
3595
3917
|
"src/app/components/surface.tsx",
|
|
3596
3918
|
"src/app/data/hdsEditorial.tsx",
|
|
3597
3919
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
3598
3920
|
"src/stories/card.stories.tsx",
|
|
3921
|
+
"src/stories/doc-link-card.stories.tsx",
|
|
3599
3922
|
"src/stories/grid.stories.tsx",
|
|
3923
|
+
"src/stories/history-card.stories.tsx",
|
|
3924
|
+
"src/stories/hover-card.stories.tsx",
|
|
3925
|
+
"src/stories/metric-tiles.stories.tsx",
|
|
3926
|
+
"src/stories/selectable-card.stories.tsx",
|
|
3927
|
+
"src/stories/stacked-card-rail.stories.tsx",
|
|
3600
3928
|
"src/stories/static-primitives.stories.tsx"
|
|
3601
3929
|
],
|
|
3602
3930
|
"tokenMapping": {
|
|
@@ -3821,7 +4149,21 @@
|
|
|
3821
4149
|
"primitives-card--padding-variants",
|
|
3822
4150
|
"primitives-card--progress-slot",
|
|
3823
4151
|
"primitives-card--variant-accent"
|
|
3824
|
-
]
|
|
4152
|
+
],
|
|
4153
|
+
"usage": {
|
|
4154
|
+
"when": "Group related content on a raised surface with header, body, footer and metric slots.",
|
|
4155
|
+
"whenNot": "A bare padded background with no slot anatomy, or a single headline figure.",
|
|
4156
|
+
"useInstead": [
|
|
4157
|
+
{
|
|
4158
|
+
"component": "Surface",
|
|
4159
|
+
"reason": "a padded background without slot anatomy"
|
|
4160
|
+
},
|
|
4161
|
+
{
|
|
4162
|
+
"component": "Card.Metric",
|
|
4163
|
+
"reason": "a single headline figure"
|
|
4164
|
+
}
|
|
4165
|
+
]
|
|
4166
|
+
}
|
|
3825
4167
|
},
|
|
3826
4168
|
"ComponentInstanceMatrix": {
|
|
3827
4169
|
"category": "Utilities",
|
|
@@ -4195,17 +4537,22 @@
|
|
|
4195
4537
|
"src/app/components/alert-dialog.tsx",
|
|
4196
4538
|
"src/app/components/animated-label.tsx",
|
|
4197
4539
|
"src/app/components/card.tsx",
|
|
4540
|
+
"src/app/components/data-table-section.tsx",
|
|
4198
4541
|
"src/app/components/date-input.tsx",
|
|
4199
4542
|
"src/app/components/date-time-input.tsx",
|
|
4543
|
+
"src/app/components/destructive-section.tsx",
|
|
4200
4544
|
"src/app/components/dialog.tsx",
|
|
4201
4545
|
"src/app/components/error-pattern.tsx",
|
|
4202
4546
|
"src/app/components/foundation-swatch.tsx",
|
|
4203
4547
|
"src/app/components/hds-tooltip.tsx",
|
|
4548
|
+
"src/app/components/inline-link.tsx",
|
|
4549
|
+
"src/app/components/kbd.tsx",
|
|
4204
4550
|
"src/app/components/nav-item.tsx",
|
|
4205
4551
|
"src/app/components/table.tsx",
|
|
4206
4552
|
"src/app/components/text-lockup.tsx",
|
|
4207
4553
|
"src/app/components/tokenTableUtils.ts",
|
|
4208
4554
|
"src/app/components/toolbar.test.tsx",
|
|
4555
|
+
"src/app/components/visually-hidden.tsx",
|
|
4209
4556
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
4210
4557
|
"src/brand/overlay.ts",
|
|
4211
4558
|
"src/docs-tooling/preview-frame.tsx",
|
|
@@ -4220,6 +4567,7 @@
|
|
|
4220
4567
|
"src/stories/skeleton.stories.tsx",
|
|
4221
4568
|
"src/stories/sketch.stories.tsx",
|
|
4222
4569
|
"src/stories/surface.stories.tsx",
|
|
4570
|
+
"src/stories/text-lockup.stories.tsx",
|
|
4223
4571
|
"src/stories/text.stories.tsx",
|
|
4224
4572
|
"src/stories/toolbar.stories.tsx"
|
|
4225
4573
|
],
|
|
@@ -4246,7 +4594,21 @@
|
|
|
4246
4594
|
"primitives-text--heading-3",
|
|
4247
4595
|
"primitives-text--technical",
|
|
4248
4596
|
"primitives-text--ui"
|
|
4249
|
-
]
|
|
4597
|
+
],
|
|
4598
|
+
"usage": {
|
|
4599
|
+
"when": "Set any text on the type ramp, with the element chosen by `as`.",
|
|
4600
|
+
"whenNot": "Navigation links, or a keyboard hint.",
|
|
4601
|
+
"useInstead": [
|
|
4602
|
+
{
|
|
4603
|
+
"component": "InlineLink",
|
|
4604
|
+
"reason": "a link inside body copy"
|
|
4605
|
+
},
|
|
4606
|
+
{
|
|
4607
|
+
"component": "Kbd",
|
|
4608
|
+
"reason": "a keyboard key hint"
|
|
4609
|
+
}
|
|
4610
|
+
]
|
|
4611
|
+
}
|
|
4250
4612
|
},
|
|
4251
4613
|
"Dialog": {
|
|
4252
4614
|
"category": "Overlays",
|
|
@@ -4268,14 +4630,20 @@
|
|
|
4268
4630
|
"src/app/components/alert-dialog.tsx",
|
|
4269
4631
|
"src/app/components/command-palette.tsx",
|
|
4270
4632
|
"src/app/components/dialog.test.tsx",
|
|
4633
|
+
"src/app/components/hover-card.tsx",
|
|
4271
4634
|
"src/app/components/image-lightbox.test.tsx",
|
|
4272
4635
|
"src/app/components/image-lightbox.tsx",
|
|
4273
4636
|
"src/app/components/menu.tsx",
|
|
4274
4637
|
"src/app/components/popover.tsx",
|
|
4638
|
+
"src/app/components/toast.tsx",
|
|
4639
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
4640
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
4641
|
+
"src/stories/alert-dialog.stories.tsx",
|
|
4275
4642
|
"src/stories/alert.stories.tsx",
|
|
4276
4643
|
"src/stories/combobox.stories.tsx",
|
|
4277
4644
|
"src/stories/dialog.stories.tsx",
|
|
4278
|
-
"src/stories/table.stories.tsx"
|
|
4645
|
+
"src/stories/table.stories.tsx",
|
|
4646
|
+
"src/styles/__tests__/scrim-and-color-scheme.test.ts"
|
|
4279
4647
|
],
|
|
4280
4648
|
"tokenMapping": {},
|
|
4281
4649
|
"variantAxes": [
|
|
@@ -4402,6 +4770,11 @@
|
|
|
4402
4770
|
"tokenBinding": {
|
|
4403
4771
|
"fill": "role.muted-foreground"
|
|
4404
4772
|
}
|
|
4773
|
+
},
|
|
4774
|
+
{
|
|
4775
|
+
"name": "trigger",
|
|
4776
|
+
"description": "The element that opens the dialog (Dialog.Trigger).",
|
|
4777
|
+
"source": "jsdoc"
|
|
4405
4778
|
}
|
|
4406
4779
|
],
|
|
4407
4780
|
"allowedChildren": [
|
|
@@ -4447,10 +4820,47 @@
|
|
|
4447
4820
|
"src/stories/dialog.stories.tsx"
|
|
4448
4821
|
],
|
|
4449
4822
|
"storyIds": [
|
|
4823
|
+
"primitives-dialog--dark-scope",
|
|
4450
4824
|
"primitives-dialog--default",
|
|
4451
4825
|
"primitives-dialog--destructive",
|
|
4452
4826
|
"primitives-dialog--information",
|
|
4453
4827
|
"primitives-dialog--no-close-affordance"
|
|
4828
|
+
],
|
|
4829
|
+
"usage": {
|
|
4830
|
+
"when": "Interrupt the page with a modal that needs a decision or focused input before people continue.",
|
|
4831
|
+
"whenNot": "A preview on hover, a message that needs no reply, or content that can stay inline.",
|
|
4832
|
+
"useInstead": [
|
|
4833
|
+
{
|
|
4834
|
+
"component": "HoverCard",
|
|
4835
|
+
"reason": "a preview on hover or focus"
|
|
4836
|
+
},
|
|
4837
|
+
{
|
|
4838
|
+
"component": "Alert",
|
|
4839
|
+
"reason": "a message that needs no reply"
|
|
4840
|
+
},
|
|
4841
|
+
{
|
|
4842
|
+
"component": "ToastProvider",
|
|
4843
|
+
"reason": "a brief confirmation"
|
|
4844
|
+
}
|
|
4845
|
+
]
|
|
4846
|
+
},
|
|
4847
|
+
"keyboard": [
|
|
4848
|
+
{
|
|
4849
|
+
"keys": "Enter/Space",
|
|
4850
|
+
"effect": "Opens the dialog from the trigger and moves focus inside it."
|
|
4851
|
+
},
|
|
4852
|
+
{
|
|
4853
|
+
"keys": "Escape",
|
|
4854
|
+
"effect": "Closes the dialog and returns focus to the trigger."
|
|
4855
|
+
},
|
|
4856
|
+
{
|
|
4857
|
+
"keys": "Tab",
|
|
4858
|
+
"effect": "Cycles focus inside the open dialog."
|
|
4859
|
+
},
|
|
4860
|
+
{
|
|
4861
|
+
"keys": "Shift+Tab",
|
|
4862
|
+
"effect": "Cycles focus backwards inside the open dialog."
|
|
4863
|
+
}
|
|
4454
4864
|
]
|
|
4455
4865
|
},
|
|
4456
4866
|
"StackedCardRail": {
|
|
@@ -4470,6 +4880,7 @@
|
|
|
4470
4880
|
"sizing": "panel"
|
|
4471
4881
|
},
|
|
4472
4882
|
"consumers": [
|
|
4883
|
+
"src/app/components/stacked-card-rail.test.tsx",
|
|
4473
4884
|
"src/index.ts",
|
|
4474
4885
|
"src/stories/stacked-card-rail.stories.tsx"
|
|
4475
4886
|
],
|
|
@@ -4519,13 +4930,20 @@
|
|
|
4519
4930
|
"src/app/components/animated-label.tsx",
|
|
4520
4931
|
"src/app/components/button-group.test.tsx",
|
|
4521
4932
|
"src/app/components/button-group.tsx",
|
|
4933
|
+
"src/app/components/button.test.tsx",
|
|
4522
4934
|
"src/app/components/card.tsx",
|
|
4935
|
+
"src/app/components/command-palette.tsx",
|
|
4936
|
+
"src/app/components/data-table-section.tsx",
|
|
4937
|
+
"src/app/components/destructive-section.tsx",
|
|
4523
4938
|
"src/app/components/dialog.tsx",
|
|
4524
4939
|
"src/app/components/error-boundary.tsx",
|
|
4525
4940
|
"src/app/components/error-pattern.tsx",
|
|
4941
|
+
"src/app/components/form-actions.tsx",
|
|
4526
4942
|
"src/app/components/form.tsx",
|
|
4527
4943
|
"src/app/components/icon-button.tsx",
|
|
4944
|
+
"src/app/components/icon.tsx",
|
|
4528
4945
|
"src/app/components/image-lightbox.tsx",
|
|
4946
|
+
"src/app/components/inline-link.tsx",
|
|
4529
4947
|
"src/app/components/menu.tsx",
|
|
4530
4948
|
"src/app/components/multi-selector.tsx",
|
|
4531
4949
|
"src/app/components/pagination.tsx",
|
|
@@ -4547,19 +4965,25 @@
|
|
|
4547
4965
|
"src/stories/button.stories.tsx",
|
|
4548
4966
|
"src/stories/code-block.stories.tsx",
|
|
4549
4967
|
"src/stories/combobox.stories.tsx",
|
|
4968
|
+
"src/stories/data-table-section.stories.tsx",
|
|
4550
4969
|
"src/stories/dialog.stories.tsx",
|
|
4970
|
+
"src/stories/form-actions.stories.tsx",
|
|
4551
4971
|
"src/stories/form.stories.tsx",
|
|
4552
4972
|
"src/stories/hds-tooltip.stories.tsx",
|
|
4553
4973
|
"src/stories/icon-button.stories.tsx",
|
|
4554
4974
|
"src/stories/image-lightbox.stories.tsx",
|
|
4555
4975
|
"src/stories/inline-code.stories.tsx",
|
|
4976
|
+
"src/stories/lib/usage-description.test.ts",
|
|
4556
4977
|
"src/stories/menu.stories.tsx",
|
|
4557
4978
|
"src/stories/nav-group.stories.tsx",
|
|
4979
|
+
"src/stories/page-header.stories.tsx",
|
|
4980
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
4558
4981
|
"src/stories/patterns-layout.stories.tsx",
|
|
4559
4982
|
"src/stories/popover.stories.tsx",
|
|
4560
4983
|
"src/stories/table.stories.tsx",
|
|
4561
4984
|
"src/stories/text-lockup.stories.tsx",
|
|
4562
4985
|
"src/stories/toast.stories.tsx",
|
|
4986
|
+
"src/stories/toggle-button.stories.tsx",
|
|
4563
4987
|
"src/stories/toolbar.stories.tsx",
|
|
4564
4988
|
"src/stories/top-nav.stories.tsx"
|
|
4565
4989
|
],
|
|
@@ -4743,7 +5167,17 @@
|
|
|
4743
5167
|
"primitives-button--secondary",
|
|
4744
5168
|
"primitives-button--small",
|
|
4745
5169
|
"primitives-button--tertiary"
|
|
4746
|
-
]
|
|
5170
|
+
],
|
|
5171
|
+
"usage": {
|
|
5172
|
+
"when": "Trigger an action (submit, save, open a dialog) with a text label and optional icons; for an icon-only control pass iconOnly with iconLeft.",
|
|
5173
|
+
"whenNot": "Navigating to another page, where a link is the correct element.",
|
|
5174
|
+
"useInstead": [
|
|
5175
|
+
{
|
|
5176
|
+
"component": "InlineLink",
|
|
5177
|
+
"reason": "navigation to another page"
|
|
5178
|
+
}
|
|
5179
|
+
]
|
|
5180
|
+
}
|
|
4747
5181
|
},
|
|
4748
5182
|
"Callout": {
|
|
4749
5183
|
"category": "Feedback",
|
|
@@ -4829,7 +5263,7 @@
|
|
|
4829
5263
|
"hidden": false,
|
|
4830
5264
|
"docExempt": false,
|
|
4831
5265
|
"filePath": "src/app/components/empty-state.tsx",
|
|
4832
|
-
"description": "EmptyState — consistent no-data placeholder for lists, grids, and sections.
|
|
5266
|
+
"description": "EmptyState — consistent no-data placeholder for lists, grids, and sections.",
|
|
4833
5267
|
"figmaUrl": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-352",
|
|
4834
5268
|
"figmaId": null,
|
|
4835
5269
|
"figmaLink": "https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=88-352",
|
|
@@ -4839,7 +5273,9 @@
|
|
|
4839
5273
|
"sizing": "panel"
|
|
4840
5274
|
},
|
|
4841
5275
|
"consumers": [
|
|
5276
|
+
"src/app/components/data-table-section.tsx",
|
|
4842
5277
|
"src/docs-tooling/lab/legacy-token-detail.tsx",
|
|
5278
|
+
"src/stories/data-table-section.stories.tsx",
|
|
4843
5279
|
"src/stories/empty-state.stories.tsx",
|
|
4844
5280
|
"src/stories/patterns-layout.stories.tsx"
|
|
4845
5281
|
],
|
|
@@ -4873,7 +5309,22 @@
|
|
|
4873
5309
|
"primitives-empty-state--in-grid",
|
|
4874
5310
|
"primitives-empty-state--title-only",
|
|
4875
5311
|
"primitives-empty-state--with-description"
|
|
4876
|
-
]
|
|
5312
|
+
],
|
|
5313
|
+
"usage": {
|
|
5314
|
+
"when": "Say that a list, grid or section has no data yet, with a title and an optional description.",
|
|
5315
|
+
"whenNot": "Content that is still loading, or a full-page error.",
|
|
5316
|
+
"useInstead": [
|
|
5317
|
+
{
|
|
5318
|
+
"component": "Skeleton",
|
|
5319
|
+
"reason": "content that is still loading"
|
|
5320
|
+
},
|
|
5321
|
+
{
|
|
5322
|
+
"component": "Alert",
|
|
5323
|
+
"reason": "a message about something that went wrong"
|
|
5324
|
+
}
|
|
5325
|
+
]
|
|
5326
|
+
},
|
|
5327
|
+
"aiRules": "Use only for inline empty states inside an existing section. Do NOT 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."
|
|
4877
5328
|
},
|
|
4878
5329
|
"Field": {
|
|
4879
5330
|
"category": "Display",
|
|
@@ -4895,11 +5346,13 @@
|
|
|
4895
5346
|
"src/app/components/combobox.tsx",
|
|
4896
5347
|
"src/app/components/form.tsx",
|
|
4897
5348
|
"src/app/components/input.tsx",
|
|
5349
|
+
"src/app/components/table.tsx",
|
|
4898
5350
|
"src/app/components/textarea.tsx",
|
|
4899
5351
|
"src/form/hds-form.tsx",
|
|
4900
5352
|
"src/stories/field.stories.tsx",
|
|
4901
5353
|
"src/stories/patterns-layout.stories.tsx",
|
|
4902
|
-
"src/stories/sketch.stories.tsx"
|
|
5354
|
+
"src/stories/sketch.stories.tsx",
|
|
5355
|
+
"src/stories/stepper-field.stories.tsx"
|
|
4903
5356
|
],
|
|
4904
5357
|
"tokenMapping": {},
|
|
4905
5358
|
"variantAxes": [],
|
|
@@ -4969,7 +5422,21 @@
|
|
|
4969
5422
|
"primitives-field--success",
|
|
4970
5423
|
"primitives-field--warning",
|
|
4971
5424
|
"primitives-field--with-children"
|
|
4972
|
-
]
|
|
5425
|
+
],
|
|
5426
|
+
"usage": {
|
|
5427
|
+
"when": "Show a labelled read-only value, such as a name and its value in a detail view.",
|
|
5428
|
+
"whenNot": "Editable input, or a single headline figure.",
|
|
5429
|
+
"useInstead": [
|
|
5430
|
+
{
|
|
5431
|
+
"component": "Input",
|
|
5432
|
+
"reason": "an editable single-line value"
|
|
5433
|
+
},
|
|
5434
|
+
{
|
|
5435
|
+
"component": "Card.Metric",
|
|
5436
|
+
"reason": "a headline figure inside a Card"
|
|
5437
|
+
}
|
|
5438
|
+
]
|
|
5439
|
+
}
|
|
4973
5440
|
},
|
|
4974
5441
|
"Page": {
|
|
4975
5442
|
"category": "Layout",
|
|
@@ -4992,6 +5459,7 @@
|
|
|
4992
5459
|
"src/app/components/not-found-pattern.tsx",
|
|
4993
5460
|
"src/app/components/pagination.test.tsx",
|
|
4994
5461
|
"src/app/components/pagination.tsx",
|
|
5462
|
+
"src/app/components/surface.tsx",
|
|
4995
5463
|
"src/app/components/toast.tsx",
|
|
4996
5464
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
4997
5465
|
"src/brand/overlay.ts",
|
|
@@ -5072,6 +5540,8 @@
|
|
|
5072
5540
|
"sizing": "panel"
|
|
5073
5541
|
},
|
|
5074
5542
|
"consumers": [
|
|
5543
|
+
"src/app/components/metric-tiles.tsx",
|
|
5544
|
+
"src/stories/metric-tiles.stories.tsx",
|
|
5075
5545
|
"src/stories/stat.stories.tsx"
|
|
5076
5546
|
],
|
|
5077
5547
|
"tokenMapping": {},
|
|
@@ -5134,7 +5604,21 @@
|
|
|
5134
5604
|
"primitives-stat--success",
|
|
5135
5605
|
"primitives-stat--warning",
|
|
5136
5606
|
"primitives-stat--with-sub"
|
|
5137
|
-
]
|
|
5607
|
+
],
|
|
5608
|
+
"usage": {
|
|
5609
|
+
"when": "Show one standalone headline figure with its label and an optional sub-line.",
|
|
5610
|
+
"whenNot": "A figure inside a Card, or a status with a trailing badge.",
|
|
5611
|
+
"useInstead": [
|
|
5612
|
+
{
|
|
5613
|
+
"component": "Card.Metric",
|
|
5614
|
+
"reason": "a figure inside a Card (hds#254 folds Stat into the Card slot)"
|
|
5615
|
+
},
|
|
5616
|
+
{
|
|
5617
|
+
"component": "StatusTile",
|
|
5618
|
+
"reason": "a titled status with notes and a trailing badge"
|
|
5619
|
+
}
|
|
5620
|
+
]
|
|
5621
|
+
}
|
|
5138
5622
|
},
|
|
5139
5623
|
"StatusListItem": {
|
|
5140
5624
|
"category": "Display",
|
|
@@ -5234,6 +5718,9 @@
|
|
|
5234
5718
|
"sizing": "panel"
|
|
5235
5719
|
},
|
|
5236
5720
|
"consumers": [
|
|
5721
|
+
"src/app/components/metric-tiles.tsx",
|
|
5722
|
+
"src/app/components/stat.tsx",
|
|
5723
|
+
"src/stories/metric-tiles.stories.tsx",
|
|
5237
5724
|
"src/stories/status-list-item.stories.tsx",
|
|
5238
5725
|
"src/stories/status-tile.stories.tsx"
|
|
5239
5726
|
],
|
|
@@ -5279,7 +5766,21 @@
|
|
|
5279
5766
|
"primitives-status-tile--tile-grid",
|
|
5280
5767
|
"primitives-status-tile--warning",
|
|
5281
5768
|
"primitives-status-tile--with-trailing-badge"
|
|
5282
|
-
]
|
|
5769
|
+
],
|
|
5770
|
+
"usage": {
|
|
5771
|
+
"when": "Show a titled status block with optional notes and a trailing badge or affordance.",
|
|
5772
|
+
"whenNot": "A single headline figure, or a row inside a list.",
|
|
5773
|
+
"useInstead": [
|
|
5774
|
+
{
|
|
5775
|
+
"component": "Card.Metric",
|
|
5776
|
+
"reason": "a headline figure (hds#254 folds StatusTile into the Card slot)"
|
|
5777
|
+
},
|
|
5778
|
+
{
|
|
5779
|
+
"component": "StatusListItem",
|
|
5780
|
+
"reason": "a status row inside a list"
|
|
5781
|
+
}
|
|
5782
|
+
]
|
|
5783
|
+
}
|
|
5283
5784
|
},
|
|
5284
5785
|
"TileGrid": {
|
|
5285
5786
|
"category": "Layout",
|
|
@@ -5375,7 +5876,10 @@
|
|
|
5375
5876
|
},
|
|
5376
5877
|
"consumers": [
|
|
5377
5878
|
"src/app/components/alert.tsx",
|
|
5879
|
+
"src/app/components/avatar.tsx",
|
|
5378
5880
|
"src/app/components/card.tsx",
|
|
5881
|
+
"src/app/components/page-header.tsx",
|
|
5882
|
+
"src/app/components/tag.tsx",
|
|
5379
5883
|
"src/app/data/hdsEditorial.tsx",
|
|
5380
5884
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
5381
5885
|
"src/docs-tooling/lab/legacy-token-detail.tsx",
|
|
@@ -5384,7 +5888,10 @@
|
|
|
5384
5888
|
"src/stories/code-block.stories.tsx",
|
|
5385
5889
|
"src/stories/combobox.stories.tsx",
|
|
5386
5890
|
"src/stories/component-instance-matrix.stories.tsx",
|
|
5891
|
+
"src/stories/data-table-section.stories.tsx",
|
|
5387
5892
|
"src/stories/nav-group.stories.tsx",
|
|
5893
|
+
"src/stories/page-header.stories.tsx",
|
|
5894
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
5388
5895
|
"src/stories/patterns-layout.stories.tsx",
|
|
5389
5896
|
"src/stories/static-primitives.stories.tsx",
|
|
5390
5897
|
"src/stories/table.stories.tsx"
|
|
@@ -5400,7 +5907,21 @@
|
|
|
5400
5907
|
"primitives-badge--neutral",
|
|
5401
5908
|
"primitives-badge--success",
|
|
5402
5909
|
"primitives-badge--warning"
|
|
5403
|
-
]
|
|
5910
|
+
],
|
|
5911
|
+
"usage": {
|
|
5912
|
+
"when": "Label a status, state or count with a compact neutral or semantic chip.",
|
|
5913
|
+
"whenNot": "A chip people can toggle, or a message that needs a sentence.",
|
|
5914
|
+
"useInstead": [
|
|
5915
|
+
{
|
|
5916
|
+
"component": "Tag",
|
|
5917
|
+
"reason": "an interactive filter or category chip"
|
|
5918
|
+
},
|
|
5919
|
+
{
|
|
5920
|
+
"component": "Alert",
|
|
5921
|
+
"reason": "a message that needs a sentence"
|
|
5922
|
+
}
|
|
5923
|
+
]
|
|
5924
|
+
}
|
|
5404
5925
|
},
|
|
5405
5926
|
"TextLockup": {
|
|
5406
5927
|
"variantAxes": [
|
|
@@ -5469,7 +5990,8 @@
|
|
|
5469
5990
|
"primitives-text-lockup--numbered",
|
|
5470
5991
|
"primitives-text-lockup--section",
|
|
5471
5992
|
"primitives-text-lockup--with-eyebrow"
|
|
5472
|
-
]
|
|
5993
|
+
],
|
|
5994
|
+
"aiRules": "Use TextLockup when content is a semantic title lockup with optional eyebrow and supporting text. Do NOT use TextLockup for arbitrary prose groups, data tables, or freeform mixed layouts. Do NOT restyle the internal type pairing with custom heading stacks when an existing size already fits. Do NOT use TextLockup to replace standalone body text or labels that do not form a title-description unit."
|
|
5473
5995
|
},
|
|
5474
5996
|
"AssetImg": {
|
|
5475
5997
|
"category": "Display",
|
|
@@ -5488,6 +6010,7 @@
|
|
|
5488
6010
|
"sizing": "panel"
|
|
5489
6011
|
},
|
|
5490
6012
|
"consumers": [
|
|
6013
|
+
"src/app/components/asset-img.test.tsx",
|
|
5491
6014
|
"src/app/components/hds-tooltip.tsx",
|
|
5492
6015
|
"src/app/components/image-lightbox.tsx",
|
|
5493
6016
|
"src/app/components/tooltip.tsx",
|
|
@@ -5663,7 +6186,11 @@
|
|
|
5663
6186
|
"sizing": "panel"
|
|
5664
6187
|
},
|
|
5665
6188
|
"consumers": [
|
|
6189
|
+
"src/app/components/breadcrumb.tsx",
|
|
6190
|
+
"src/app/components/disclosure.tsx",
|
|
6191
|
+
"src/app/components/segmented-control.tsx",
|
|
5666
6192
|
"src/stories/combobox.stories.tsx",
|
|
6193
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
5667
6194
|
"src/stories/tabs.stories.tsx"
|
|
5668
6195
|
],
|
|
5669
6196
|
"tokenMapping": {},
|
|
@@ -5689,7 +6216,21 @@
|
|
|
5689
6216
|
"primitives-tabs--default",
|
|
5690
6217
|
"primitives-tabs--many-tabs",
|
|
5691
6218
|
"primitives-tabs--with-disabled-tab"
|
|
5692
|
-
]
|
|
6219
|
+
],
|
|
6220
|
+
"usage": {
|
|
6221
|
+
"when": "Switch between panels of related content in the same place, one visible at a time.",
|
|
6222
|
+
"whenNot": "A compact mode switch with no panels, or content that must all be visible.",
|
|
6223
|
+
"useInstead": [
|
|
6224
|
+
{
|
|
6225
|
+
"component": "SegmentedControl",
|
|
6226
|
+
"reason": "a compact switch with no panels"
|
|
6227
|
+
},
|
|
6228
|
+
{
|
|
6229
|
+
"component": "Disclosure",
|
|
6230
|
+
"reason": "optional content that expands in place"
|
|
6231
|
+
}
|
|
6232
|
+
]
|
|
6233
|
+
}
|
|
5693
6234
|
},
|
|
5694
6235
|
"TabsContent": {
|
|
5695
6236
|
"category": "Navigation",
|
|
@@ -5708,6 +6249,7 @@
|
|
|
5708
6249
|
"sizing": "panel"
|
|
5709
6250
|
},
|
|
5710
6251
|
"consumers": [
|
|
6252
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
5711
6253
|
"src/stories/tabs.stories.tsx"
|
|
5712
6254
|
],
|
|
5713
6255
|
"tokenMapping": {},
|
|
@@ -5752,6 +6294,7 @@
|
|
|
5752
6294
|
"sizing": "panel"
|
|
5753
6295
|
},
|
|
5754
6296
|
"consumers": [
|
|
6297
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
5755
6298
|
"src/stories/tabs.stories.tsx"
|
|
5756
6299
|
],
|
|
5757
6300
|
"tokenMapping": {},
|
|
@@ -5796,6 +6339,7 @@
|
|
|
5796
6339
|
"sizing": "panel"
|
|
5797
6340
|
},
|
|
5798
6341
|
"consumers": [
|
|
6342
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
5799
6343
|
"src/stories/tabs.stories.tsx"
|
|
5800
6344
|
],
|
|
5801
6345
|
"tokenMapping": {},
|
|
@@ -5839,6 +6383,8 @@
|
|
|
5839
6383
|
"consumers": [
|
|
5840
6384
|
"src/app/components/checkbox.tsx",
|
|
5841
6385
|
"src/app/components/radio.test.tsx",
|
|
6386
|
+
"src/app/components/segmented-control.tsx",
|
|
6387
|
+
"src/app/components/toggle.tsx",
|
|
5842
6388
|
"src/app/hooks/useInteractionState.test.ts",
|
|
5843
6389
|
"src/app/hooks/useInteractionState.ts",
|
|
5844
6390
|
"src/index.ts",
|
|
@@ -5889,7 +6435,25 @@
|
|
|
5889
6435
|
"primitives-radio--disabled-selected",
|
|
5890
6436
|
"primitives-radio--group",
|
|
5891
6437
|
"primitives-radio--selected"
|
|
5892
|
-
]
|
|
6438
|
+
],
|
|
6439
|
+
"usage": {
|
|
6440
|
+
"when": "Choose exactly one option from a small set that should stay visible together.",
|
|
6441
|
+
"whenNot": "Independent yes/no options, or a long list of options.",
|
|
6442
|
+
"useInstead": [
|
|
6443
|
+
{
|
|
6444
|
+
"component": "Checkbox",
|
|
6445
|
+
"reason": "independent options that can be ticked together"
|
|
6446
|
+
},
|
|
6447
|
+
{
|
|
6448
|
+
"component": "Select",
|
|
6449
|
+
"reason": "a long list that can collapse into a dropdown"
|
|
6450
|
+
},
|
|
6451
|
+
{
|
|
6452
|
+
"component": "SegmentedControl",
|
|
6453
|
+
"reason": "a compact switch between two to five views or modes"
|
|
6454
|
+
}
|
|
6455
|
+
]
|
|
6456
|
+
}
|
|
5893
6457
|
},
|
|
5894
6458
|
"Select": {
|
|
5895
6459
|
"category": "Inputs",
|
|
@@ -5911,9 +6475,15 @@
|
|
|
5911
6475
|
"src/app/components/date-range-input.test.tsx",
|
|
5912
6476
|
"src/app/components/date-range-input.tsx",
|
|
5913
6477
|
"src/app/components/form.tsx",
|
|
6478
|
+
"src/app/components/input.tsx",
|
|
6479
|
+
"src/app/components/menu.tsx",
|
|
5914
6480
|
"src/app/components/multi-selector.test.tsx",
|
|
5915
6481
|
"src/app/components/multi-selector.tsx",
|
|
6482
|
+
"src/app/components/radio.tsx",
|
|
6483
|
+
"src/app/components/segmented-control.tsx",
|
|
5916
6484
|
"src/app/components/select.test.tsx",
|
|
6485
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
6486
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
5917
6487
|
"src/app/data/hdsEditorial.tsx",
|
|
5918
6488
|
"src/docs-tooling/lab/legacy-token-detail.tsx",
|
|
5919
6489
|
"src/index.ts",
|
|
@@ -5964,6 +6534,50 @@
|
|
|
5964
6534
|
"storyIds": [
|
|
5965
6535
|
"primitives-select--default",
|
|
5966
6536
|
"primitives-select--no-label"
|
|
6537
|
+
],
|
|
6538
|
+
"usage": {
|
|
6539
|
+
"when": "Choose one value from a short list of options in a form field.",
|
|
6540
|
+
"whenNot": "Firing actions, or choosing from a list long enough to need search.",
|
|
6541
|
+
"useInstead": [
|
|
6542
|
+
{
|
|
6543
|
+
"component": "Menu",
|
|
6544
|
+
"reason": "firing actions from a trigger"
|
|
6545
|
+
},
|
|
6546
|
+
{
|
|
6547
|
+
"component": "Combobox",
|
|
6548
|
+
"reason": "a long list that needs search"
|
|
6549
|
+
}
|
|
6550
|
+
]
|
|
6551
|
+
},
|
|
6552
|
+
"keyboard": [
|
|
6553
|
+
{
|
|
6554
|
+
"keys": "Enter/Space/ArrowDown",
|
|
6555
|
+
"effect": "Opens the listbox from the trigger with the selected option highlighted."
|
|
6556
|
+
},
|
|
6557
|
+
{
|
|
6558
|
+
"keys": "ArrowDown/ArrowUp",
|
|
6559
|
+
"effect": "Moves the highlight."
|
|
6560
|
+
},
|
|
6561
|
+
{
|
|
6562
|
+
"keys": "Home/End",
|
|
6563
|
+
"effect": "Jumps to the first or last option."
|
|
6564
|
+
},
|
|
6565
|
+
{
|
|
6566
|
+
"keys": "Character",
|
|
6567
|
+
"effect": "Highlights the option that matches the typed letters."
|
|
6568
|
+
},
|
|
6569
|
+
{
|
|
6570
|
+
"keys": "Enter",
|
|
6571
|
+
"effect": "Commits the highlighted option and returns focus to the trigger."
|
|
6572
|
+
},
|
|
6573
|
+
{
|
|
6574
|
+
"keys": "Escape",
|
|
6575
|
+
"effect": "Closes the listbox and returns focus to the trigger."
|
|
6576
|
+
},
|
|
6577
|
+
{
|
|
6578
|
+
"keys": "Tab",
|
|
6579
|
+
"effect": "Does not leave the open listbox."
|
|
6580
|
+
}
|
|
5967
6581
|
]
|
|
5968
6582
|
},
|
|
5969
6583
|
"Slider": {
|
|
@@ -6029,7 +6643,17 @@
|
|
|
6029
6643
|
"primitives-slider--default",
|
|
6030
6644
|
"primitives-slider--stepped",
|
|
6031
6645
|
"primitives-slider--typography-controls"
|
|
6032
|
-
]
|
|
6646
|
+
],
|
|
6647
|
+
"usage": {
|
|
6648
|
+
"when": "Pick a number within a known range by dragging, when the exact value matters less than the position.",
|
|
6649
|
+
"whenNot": "A precise number the person must type or read exactly.",
|
|
6650
|
+
"useInstead": [
|
|
6651
|
+
{
|
|
6652
|
+
"component": "Input",
|
|
6653
|
+
"reason": "a precise typed value (type=\"number\")"
|
|
6654
|
+
}
|
|
6655
|
+
]
|
|
6656
|
+
}
|
|
6033
6657
|
},
|
|
6034
6658
|
"Toggle": {
|
|
6035
6659
|
"category": "Inputs",
|
|
@@ -6054,6 +6678,7 @@
|
|
|
6054
6678
|
"src/app/hooks/useInteractionState.ts",
|
|
6055
6679
|
"src/docs-tooling/shell-controls.tsx",
|
|
6056
6680
|
"src/index.ts",
|
|
6681
|
+
"src/stories/toggle-button.stories.tsx",
|
|
6057
6682
|
"src/stories/toggle.stories.tsx"
|
|
6058
6683
|
],
|
|
6059
6684
|
"tokenMapping": {
|
|
@@ -6101,7 +6726,21 @@
|
|
|
6101
6726
|
"primitives-toggle--disabled-on",
|
|
6102
6727
|
"primitives-toggle--on",
|
|
6103
6728
|
"primitives-toggle--settings-group"
|
|
6104
|
-
]
|
|
6729
|
+
],
|
|
6730
|
+
"usage": {
|
|
6731
|
+
"when": "Switch one setting on or off, with the effect applying immediately.",
|
|
6732
|
+
"whenNot": "A choice that only takes effect after submitting a form, or picking from several options.",
|
|
6733
|
+
"useInstead": [
|
|
6734
|
+
{
|
|
6735
|
+
"component": "Checkbox",
|
|
6736
|
+
"reason": "a form option confirmed on submit"
|
|
6737
|
+
},
|
|
6738
|
+
{
|
|
6739
|
+
"component": "Radio",
|
|
6740
|
+
"reason": "one choice from a set"
|
|
6741
|
+
}
|
|
6742
|
+
]
|
|
6743
|
+
}
|
|
6105
6744
|
},
|
|
6106
6745
|
"Avatar": {
|
|
6107
6746
|
"category": "Display",
|
|
@@ -6123,6 +6762,7 @@
|
|
|
6123
6762
|
"src/app/components/avatar-group.test.tsx",
|
|
6124
6763
|
"src/app/components/avatar-group.tsx",
|
|
6125
6764
|
"src/app/components/avatar.test.tsx",
|
|
6765
|
+
"src/app/components/icon.tsx",
|
|
6126
6766
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
6127
6767
|
"src/stories/avatar-group.stories.tsx",
|
|
6128
6768
|
"src/stories/avatar.stories.tsx"
|
|
@@ -6170,7 +6810,21 @@
|
|
|
6170
6810
|
"primitives-avatar--large",
|
|
6171
6811
|
"primitives-avatar--small",
|
|
6172
6812
|
"primitives-avatar--with-image"
|
|
6173
|
-
]
|
|
6813
|
+
],
|
|
6814
|
+
"usage": {
|
|
6815
|
+
"when": "Show a person or entity as an image with an initials fallback.",
|
|
6816
|
+
"whenNot": "A generic pictogram, or a status marker.",
|
|
6817
|
+
"useInstead": [
|
|
6818
|
+
{
|
|
6819
|
+
"component": "Icon",
|
|
6820
|
+
"reason": "a generic pictogram"
|
|
6821
|
+
},
|
|
6822
|
+
{
|
|
6823
|
+
"component": "Badge",
|
|
6824
|
+
"reason": "a status marker"
|
|
6825
|
+
}
|
|
6826
|
+
]
|
|
6827
|
+
}
|
|
6174
6828
|
},
|
|
6175
6829
|
"Progress": {
|
|
6176
6830
|
"category": "Feedback",
|
|
@@ -6189,8 +6843,11 @@
|
|
|
6189
6843
|
"sizing": "panel"
|
|
6190
6844
|
},
|
|
6191
6845
|
"consumers": [
|
|
6846
|
+
"src/app/components/card-progress.test.tsx",
|
|
6192
6847
|
"src/app/components/card.tsx",
|
|
6193
6848
|
"src/app/components/progress.test.tsx",
|
|
6849
|
+
"src/app/components/skeleton.tsx",
|
|
6850
|
+
"src/app/components/spinner.tsx",
|
|
6194
6851
|
"src/stories/card.stories.tsx",
|
|
6195
6852
|
"src/stories/circular-progress.stories.tsx",
|
|
6196
6853
|
"src/stories/progress.stories.tsx",
|
|
@@ -6232,7 +6889,21 @@
|
|
|
6232
6889
|
"primitives-progress--complete",
|
|
6233
6890
|
"primitives-progress--default",
|
|
6234
6891
|
"primitives-progress--indeterminate"
|
|
6235
|
-
]
|
|
6892
|
+
],
|
|
6893
|
+
"usage": {
|
|
6894
|
+
"when": "Show how far a task has got, as a bar that is determinate or indeterminate.",
|
|
6895
|
+
"whenNot": "A wait of unknown length with no bar, or content that is still loading.",
|
|
6896
|
+
"useInstead": [
|
|
6897
|
+
{
|
|
6898
|
+
"component": "Spinner",
|
|
6899
|
+
"reason": "a wait of unknown length"
|
|
6900
|
+
},
|
|
6901
|
+
{
|
|
6902
|
+
"component": "Skeleton",
|
|
6903
|
+
"reason": "placeholder shapes for loading content"
|
|
6904
|
+
}
|
|
6905
|
+
]
|
|
6906
|
+
}
|
|
6236
6907
|
},
|
|
6237
6908
|
"Skeleton": {
|
|
6238
6909
|
"category": "Feedback",
|
|
@@ -6251,7 +6922,10 @@
|
|
|
6251
6922
|
"sizing": "panel"
|
|
6252
6923
|
},
|
|
6253
6924
|
"consumers": [
|
|
6925
|
+
"src/app/components/empty-state.tsx",
|
|
6926
|
+
"src/app/components/progress.tsx",
|
|
6254
6927
|
"src/app/components/skeleton.test.tsx",
|
|
6928
|
+
"src/app/components/spinner.tsx",
|
|
6255
6929
|
"src/stories/patterns-layout.stories.tsx",
|
|
6256
6930
|
"src/stories/patterns-scroll.stories.tsx",
|
|
6257
6931
|
"src/stories/skeleton.stories.tsx"
|
|
@@ -6293,7 +6967,21 @@
|
|
|
6293
6967
|
"primitives-skeleton--circular",
|
|
6294
6968
|
"primitives-skeleton--default",
|
|
6295
6969
|
"primitives-skeleton--text"
|
|
6296
|
-
]
|
|
6970
|
+
],
|
|
6971
|
+
"usage": {
|
|
6972
|
+
"when": "Reserve the shape of content that is still loading, so the layout does not jump.",
|
|
6973
|
+
"whenNot": "A task with measurable progress, or a wait with no layout to reserve.",
|
|
6974
|
+
"useInstead": [
|
|
6975
|
+
{
|
|
6976
|
+
"component": "Progress",
|
|
6977
|
+
"reason": "a task with measurable progress"
|
|
6978
|
+
},
|
|
6979
|
+
{
|
|
6980
|
+
"component": "Spinner",
|
|
6981
|
+
"reason": "a short wait with no layout to reserve"
|
|
6982
|
+
}
|
|
6983
|
+
]
|
|
6984
|
+
}
|
|
6297
6985
|
},
|
|
6298
6986
|
"Spinner": {
|
|
6299
6987
|
"category": "Feedback",
|
|
@@ -6312,6 +7000,8 @@
|
|
|
6312
7000
|
"sizing": "panel"
|
|
6313
7001
|
},
|
|
6314
7002
|
"consumers": [
|
|
7003
|
+
"src/app/components/progress.tsx",
|
|
7004
|
+
"src/app/components/skeleton.tsx",
|
|
6315
7005
|
"src/app/components/spinner.test.tsx",
|
|
6316
7006
|
"src/stories/spinner.stories.tsx"
|
|
6317
7007
|
],
|
|
@@ -6349,7 +7039,21 @@
|
|
|
6349
7039
|
"primitives-spinner--default",
|
|
6350
7040
|
"primitives-spinner--large",
|
|
6351
7041
|
"primitives-spinner--small"
|
|
6352
|
-
]
|
|
7042
|
+
],
|
|
7043
|
+
"usage": {
|
|
7044
|
+
"when": "Show that something is loading when the wait is short or has no measurable end.",
|
|
7045
|
+
"whenNot": "A task with measurable progress, or a region whose layout is known.",
|
|
7046
|
+
"useInstead": [
|
|
7047
|
+
{
|
|
7048
|
+
"component": "Progress",
|
|
7049
|
+
"reason": "a task with measurable progress"
|
|
7050
|
+
},
|
|
7051
|
+
{
|
|
7052
|
+
"component": "Skeleton",
|
|
7053
|
+
"reason": "a region whose layout is known"
|
|
7054
|
+
}
|
|
7055
|
+
]
|
|
7056
|
+
}
|
|
6353
7057
|
},
|
|
6354
7058
|
"Breadcrumb": {
|
|
6355
7059
|
"category": "Navigation",
|
|
@@ -6369,8 +7073,12 @@
|
|
|
6369
7073
|
},
|
|
6370
7074
|
"consumers": [
|
|
6371
7075
|
"src/app/components/breadcrumb.test.tsx",
|
|
7076
|
+
"src/app/components/page-header.tsx",
|
|
7077
|
+
"src/app/components/pagination.tsx",
|
|
6372
7078
|
"src/app/components/table.tsx",
|
|
6373
|
-
"src/stories/breadcrumb.stories.tsx"
|
|
7079
|
+
"src/stories/breadcrumb.stories.tsx",
|
|
7080
|
+
"src/stories/page-header.stories.tsx",
|
|
7081
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
6374
7082
|
],
|
|
6375
7083
|
"tokenMapping": {},
|
|
6376
7084
|
"variantAxes": [],
|
|
@@ -6399,7 +7107,21 @@
|
|
|
6399
7107
|
"primitives-breadcrumb--default",
|
|
6400
7108
|
"primitives-breadcrumb--shallow-trail",
|
|
6401
7109
|
"primitives-breadcrumb--single-crumb"
|
|
6402
|
-
]
|
|
7110
|
+
],
|
|
7111
|
+
"usage": {
|
|
7112
|
+
"when": "Show where the current page sits in a hierarchy and link back up it.",
|
|
7113
|
+
"whenNot": "Switching between sibling views, or stepping through pages of results.",
|
|
7114
|
+
"useInstead": [
|
|
7115
|
+
{
|
|
7116
|
+
"component": "Tabs",
|
|
7117
|
+
"reason": "switching between sibling views"
|
|
7118
|
+
},
|
|
7119
|
+
{
|
|
7120
|
+
"component": "Pagination",
|
|
7121
|
+
"reason": "stepping through pages of results"
|
|
7122
|
+
}
|
|
7123
|
+
]
|
|
7124
|
+
}
|
|
6403
7125
|
},
|
|
6404
7126
|
"Pagination": {
|
|
6405
7127
|
"category": "Navigation",
|
|
@@ -6418,6 +7140,7 @@
|
|
|
6418
7140
|
"sizing": "panel"
|
|
6419
7141
|
},
|
|
6420
7142
|
"consumers": [
|
|
7143
|
+
"src/app/components/breadcrumb.tsx",
|
|
6421
7144
|
"src/app/components/pagination.test.tsx",
|
|
6422
7145
|
"src/stories/pagination.stories.tsx"
|
|
6423
7146
|
],
|
|
@@ -6458,7 +7181,17 @@
|
|
|
6458
7181
|
"primitives-pagination--last-page",
|
|
6459
7182
|
"primitives-pagination--middle-page",
|
|
6460
7183
|
"primitives-pagination--wide-siblings"
|
|
6461
|
-
]
|
|
7184
|
+
],
|
|
7185
|
+
"usage": {
|
|
7186
|
+
"when": "Move between pages of a long result set, with truncated page numbers.",
|
|
7187
|
+
"whenNot": "A hierarchy trail, or a short list that fits on one page.",
|
|
7188
|
+
"useInstead": [
|
|
7189
|
+
{
|
|
7190
|
+
"component": "Breadcrumb",
|
|
7191
|
+
"reason": "a hierarchy trail"
|
|
7192
|
+
}
|
|
7193
|
+
]
|
|
7194
|
+
}
|
|
6462
7195
|
},
|
|
6463
7196
|
"ToastProvider": {
|
|
6464
7197
|
"category": "Feedback",
|
|
@@ -6477,6 +7210,8 @@
|
|
|
6477
7210
|
"sizing": "panel"
|
|
6478
7211
|
},
|
|
6479
7212
|
"consumers": [
|
|
7213
|
+
"src/app/components/alert.tsx",
|
|
7214
|
+
"src/app/components/dialog.tsx",
|
|
6480
7215
|
"src/app/components/toast.test.tsx",
|
|
6481
7216
|
"src/stories/toast.stories.tsx"
|
|
6482
7217
|
],
|
|
@@ -6508,7 +7243,21 @@
|
|
|
6508
7243
|
"primitives-toast--info",
|
|
6509
7244
|
"primitives-toast--success",
|
|
6510
7245
|
"primitives-toast--warning"
|
|
6511
|
-
]
|
|
7246
|
+
],
|
|
7247
|
+
"usage": {
|
|
7248
|
+
"when": "Confirm an action with a brief message that appears and dismisses itself, through useToast.",
|
|
7249
|
+
"whenNot": "A message people must act on or that must stay next to its content.",
|
|
7250
|
+
"useInstead": [
|
|
7251
|
+
{
|
|
7252
|
+
"component": "Alert",
|
|
7253
|
+
"reason": "a message that stays next to its content"
|
|
7254
|
+
},
|
|
7255
|
+
{
|
|
7256
|
+
"component": "Dialog",
|
|
7257
|
+
"reason": "a message that needs a decision"
|
|
7258
|
+
}
|
|
7259
|
+
]
|
|
7260
|
+
}
|
|
6512
7261
|
},
|
|
6513
7262
|
"Combobox": {
|
|
6514
7263
|
"category": "Inputs",
|
|
@@ -6530,7 +7279,9 @@
|
|
|
6530
7279
|
"src/app/components/combobox.test.tsx",
|
|
6531
7280
|
"src/app/components/date-range-input.tsx",
|
|
6532
7281
|
"src/app/components/form.tsx",
|
|
7282
|
+
"src/app/components/input.tsx",
|
|
6533
7283
|
"src/app/components/multi-selector.tsx",
|
|
7284
|
+
"src/app/components/select.tsx",
|
|
6534
7285
|
"src/stories/combobox.stories.tsx",
|
|
6535
7286
|
"src/stories/popover.stories.tsx"
|
|
6536
7287
|
],
|
|
@@ -6587,6 +7338,46 @@
|
|
|
6587
7338
|
"primitives-combobox--few-options",
|
|
6588
7339
|
"primitives-combobox--pre-selected",
|
|
6589
7340
|
"primitives-combobox--with-disabled-option"
|
|
7341
|
+
],
|
|
7342
|
+
"usage": {
|
|
7343
|
+
"when": "Pick one value from a long list of options, with a search field that filters as you type.",
|
|
7344
|
+
"whenNot": "A short list that needs no search, or an action list.",
|
|
7345
|
+
"useInstead": [
|
|
7346
|
+
{
|
|
7347
|
+
"component": "Select",
|
|
7348
|
+
"reason": "a short list without search"
|
|
7349
|
+
},
|
|
7350
|
+
{
|
|
7351
|
+
"component": "Menu",
|
|
7352
|
+
"reason": "firing actions from a trigger"
|
|
7353
|
+
}
|
|
7354
|
+
]
|
|
7355
|
+
},
|
|
7356
|
+
"keyboard": [
|
|
7357
|
+
{
|
|
7358
|
+
"keys": "Enter/Space",
|
|
7359
|
+
"effect": "Opens the list from the trigger and moves focus to the search field."
|
|
7360
|
+
},
|
|
7361
|
+
{
|
|
7362
|
+
"keys": "ArrowDown/ArrowUp",
|
|
7363
|
+
"effect": "Moves the active option and wraps at the ends."
|
|
7364
|
+
},
|
|
7365
|
+
{
|
|
7366
|
+
"keys": "Character",
|
|
7367
|
+
"effect": "Filters the options to those matching the typed text."
|
|
7368
|
+
},
|
|
7369
|
+
{
|
|
7370
|
+
"keys": "Enter",
|
|
7371
|
+
"effect": "Commits the active option and closes the list."
|
|
7372
|
+
},
|
|
7373
|
+
{
|
|
7374
|
+
"keys": "Escape",
|
|
7375
|
+
"effect": "Closes the list."
|
|
7376
|
+
},
|
|
7377
|
+
{
|
|
7378
|
+
"keys": "Tab",
|
|
7379
|
+
"effect": "Stays inside the open list."
|
|
7380
|
+
}
|
|
6590
7381
|
]
|
|
6591
7382
|
},
|
|
6592
7383
|
"Form": {
|
|
@@ -6606,12 +7397,14 @@
|
|
|
6606
7397
|
"sizing": "panel"
|
|
6607
7398
|
},
|
|
6608
7399
|
"consumers": [
|
|
7400
|
+
"src/app/components/form-actions.tsx",
|
|
6609
7401
|
"src/app/components/form.test.tsx",
|
|
6610
7402
|
"src/app/data/hdsEditorial.tsx",
|
|
6611
7403
|
"src/form/hds-form.tsx",
|
|
6612
7404
|
"src/form/index.ts",
|
|
6613
7405
|
"src/form/use-hds-form.ts",
|
|
6614
7406
|
"src/index.ts",
|
|
7407
|
+
"src/stories/form-actions.stories.tsx",
|
|
6615
7408
|
"src/stories/form.stories.tsx",
|
|
6616
7409
|
"src/stories/patterns-layout.stories.tsx"
|
|
6617
7410
|
],
|
|
@@ -6788,6 +7581,9 @@
|
|
|
6788
7581
|
},
|
|
6789
7582
|
"consumers": [
|
|
6790
7583
|
"src/app/context/__tests__/context.test.tsx",
|
|
7584
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
7585
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
7586
|
+
"src/app/context/hds-portal.tsx",
|
|
6791
7587
|
"src/index.ts"
|
|
6792
7588
|
],
|
|
6793
7589
|
"tokenMapping": {},
|
|
@@ -6842,7 +7638,17 @@
|
|
|
6842
7638
|
"requiredProps": [],
|
|
6843
7639
|
"a11yRules": [],
|
|
6844
7640
|
"storyFiles": [],
|
|
6845
|
-
"storyIds": []
|
|
7641
|
+
"storyIds": [],
|
|
7642
|
+
"usage": {
|
|
7643
|
+
"when": "Wrap an app or region once to set theme, density and other root attributes for everything inside it.",
|
|
7644
|
+
"whenNot": "Styling a single component, or per-component overrides.",
|
|
7645
|
+
"useInstead": [
|
|
7646
|
+
{
|
|
7647
|
+
"component": "Surface",
|
|
7648
|
+
"reason": "a single region with its own background"
|
|
7649
|
+
}
|
|
7650
|
+
]
|
|
7651
|
+
}
|
|
6846
7652
|
},
|
|
6847
7653
|
"AvatarGroup": {
|
|
6848
7654
|
"category": "Display",
|
|
@@ -6993,7 +7799,21 @@
|
|
|
6993
7799
|
"storyIds": [
|
|
6994
7800
|
"primitives-button-group--default",
|
|
6995
7801
|
"primitives-button-group--vertical"
|
|
6996
|
-
]
|
|
7802
|
+
],
|
|
7803
|
+
"usage": {
|
|
7804
|
+
"when": "Attach related Buttons into one segmented row or column that reads as a single control.",
|
|
7805
|
+
"whenNot": "Buttons that are unrelated, or choosing one of several views.",
|
|
7806
|
+
"useInstead": [
|
|
7807
|
+
{
|
|
7808
|
+
"component": "SegmentedControl",
|
|
7809
|
+
"reason": "choosing one of several views"
|
|
7810
|
+
},
|
|
7811
|
+
{
|
|
7812
|
+
"component": "Stack",
|
|
7813
|
+
"reason": "loosely spaced buttons"
|
|
7814
|
+
}
|
|
7815
|
+
]
|
|
7816
|
+
}
|
|
6997
7817
|
},
|
|
6998
7818
|
"InputGroup": {
|
|
6999
7819
|
"category": "Inputs",
|
|
@@ -7073,6 +7893,7 @@
|
|
|
7073
7893
|
},
|
|
7074
7894
|
"consumers": [
|
|
7075
7895
|
"src/app/components/kbd.test.tsx",
|
|
7896
|
+
"src/app/components/text.tsx",
|
|
7076
7897
|
"src/stories/kbd.stories.tsx"
|
|
7077
7898
|
],
|
|
7078
7899
|
"tokenMapping": {},
|
|
@@ -7102,7 +7923,17 @@
|
|
|
7102
7923
|
"primitives-kbd--combination",
|
|
7103
7924
|
"primitives-kbd--default",
|
|
7104
7925
|
"primitives-kbd--sizes"
|
|
7105
|
-
]
|
|
7926
|
+
],
|
|
7927
|
+
"usage": {
|
|
7928
|
+
"when": "Show a keyboard key or shortcut hint inline, as a native kbd element.",
|
|
7929
|
+
"whenNot": "Code samples, or a control that runs the shortcut.",
|
|
7930
|
+
"useInstead": [
|
|
7931
|
+
{
|
|
7932
|
+
"component": "Text",
|
|
7933
|
+
"reason": "inline code and other typography"
|
|
7934
|
+
}
|
|
7935
|
+
]
|
|
7936
|
+
}
|
|
7106
7937
|
},
|
|
7107
7938
|
"StatusDot": {
|
|
7108
7939
|
"category": "Feedback",
|
|
@@ -7269,7 +8100,17 @@
|
|
|
7269
8100
|
],
|
|
7270
8101
|
"storyIds": [
|
|
7271
8102
|
"primitives-visually-hidden--default"
|
|
7272
|
-
]
|
|
8103
|
+
],
|
|
8104
|
+
"usage": {
|
|
8105
|
+
"when": "Give assistive technology a label or description that sighted people do not need to see.",
|
|
8106
|
+
"whenNot": "Text everyone should read, or hiding an element from assistive technology too.",
|
|
8107
|
+
"useInstead": [
|
|
8108
|
+
{
|
|
8109
|
+
"component": "Text",
|
|
8110
|
+
"reason": "text that everyone should read"
|
|
8111
|
+
}
|
|
8112
|
+
]
|
|
8113
|
+
}
|
|
7273
8114
|
},
|
|
7274
8115
|
"CircularProgress": {
|
|
7275
8116
|
"category": "Feedback",
|
|
@@ -7441,6 +8282,8 @@
|
|
|
7441
8282
|
},
|
|
7442
8283
|
"consumers": [
|
|
7443
8284
|
"src/app/components/image-lightbox.test.tsx",
|
|
8285
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
8286
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
7444
8287
|
"src/app/data/hdsEditorial.tsx",
|
|
7445
8288
|
"src/index.ts",
|
|
7446
8289
|
"src/stories/asset-img.stories.tsx",
|
|
@@ -7938,6 +8781,7 @@
|
|
|
7938
8781
|
"consumers": [
|
|
7939
8782
|
"src/app/components/stepper.test.tsx",
|
|
7940
8783
|
"src/index.ts",
|
|
8784
|
+
"src/stories/stepper-field.stories.tsx",
|
|
7941
8785
|
"src/stories/stepper.stories.tsx"
|
|
7942
8786
|
],
|
|
7943
8787
|
"tokenMapping": {},
|
|
@@ -7990,6 +8834,7 @@
|
|
|
7990
8834
|
"sizing": "panel"
|
|
7991
8835
|
},
|
|
7992
8836
|
"consumers": [
|
|
8837
|
+
"src/app/components/data-table-section.tsx",
|
|
7993
8838
|
"src/app/components/toolbar.test.tsx",
|
|
7994
8839
|
"src/index.ts",
|
|
7995
8840
|
"src/stories/toolbar.stories.tsx"
|
|
@@ -8085,7 +8930,12 @@
|
|
|
8085
8930
|
},
|
|
8086
8931
|
"consumers": [
|
|
8087
8932
|
"src/app/components/alert-dialog.test.tsx",
|
|
8088
|
-
"src/
|
|
8933
|
+
"src/app/components/destructive-section.tsx",
|
|
8934
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
8935
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
8936
|
+
"src/stories/alert-dialog.stories.tsx",
|
|
8937
|
+
"src/stories/destructive-section.stories.tsx",
|
|
8938
|
+
"src/styles/__tests__/scrim-and-color-scheme.test.ts"
|
|
8089
8939
|
],
|
|
8090
8940
|
"tokenMapping": {},
|
|
8091
8941
|
"variantAxes": [],
|
|
@@ -8101,6 +8951,7 @@
|
|
|
8101
8951
|
"src/stories/alert-dialog.stories.tsx"
|
|
8102
8952
|
],
|
|
8103
8953
|
"storyIds": [
|
|
8954
|
+
"primitives-alert-dialog--dark-scope",
|
|
8104
8955
|
"primitives-alert-dialog--default"
|
|
8105
8956
|
]
|
|
8106
8957
|
},
|
|
@@ -8216,6 +9067,8 @@
|
|
|
8216
9067
|
},
|
|
8217
9068
|
"consumers": [
|
|
8218
9069
|
"src/app/components/context-menu.test.tsx",
|
|
9070
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
9071
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
8219
9072
|
"src/stories/context-menu.stories.tsx"
|
|
8220
9073
|
],
|
|
8221
9074
|
"tokenMapping": {},
|
|
@@ -8233,6 +9086,54 @@
|
|
|
8233
9086
|
],
|
|
8234
9087
|
"storyIds": [
|
|
8235
9088
|
"primitives-context-menu--default"
|
|
9089
|
+
],
|
|
9090
|
+
"slots": [
|
|
9091
|
+
{
|
|
9092
|
+
"name": "trigger",
|
|
9093
|
+
"description": "The area that opens the menu on right-click (ContextMenu.Trigger).",
|
|
9094
|
+
"source": "jsdoc"
|
|
9095
|
+
},
|
|
9096
|
+
{
|
|
9097
|
+
"name": "content",
|
|
9098
|
+
"description": "The popup holding the items (ContextMenu.Content).",
|
|
9099
|
+
"source": "jsdoc"
|
|
9100
|
+
}
|
|
9101
|
+
],
|
|
9102
|
+
"usage": {
|
|
9103
|
+
"when": "Offer actions for an item on right-click, or the equivalent keyboard gesture.",
|
|
9104
|
+
"whenNot": "The only way to reach an action, or actions from a visible trigger.",
|
|
9105
|
+
"useInstead": [
|
|
9106
|
+
{
|
|
9107
|
+
"component": "Menu",
|
|
9108
|
+
"reason": "actions from a visible trigger"
|
|
9109
|
+
}
|
|
9110
|
+
]
|
|
9111
|
+
},
|
|
9112
|
+
"keyboard": [
|
|
9113
|
+
{
|
|
9114
|
+
"keys": "ArrowDown/ArrowUp",
|
|
9115
|
+
"effect": "Moves the highlight and stops at the first and last item."
|
|
9116
|
+
},
|
|
9117
|
+
{
|
|
9118
|
+
"keys": "End",
|
|
9119
|
+
"effect": "Jumps to the last item."
|
|
9120
|
+
},
|
|
9121
|
+
{
|
|
9122
|
+
"keys": "Character",
|
|
9123
|
+
"effect": "Highlights the next item that starts with the typed letter."
|
|
9124
|
+
},
|
|
9125
|
+
{
|
|
9126
|
+
"keys": "Enter",
|
|
9127
|
+
"effect": "Selects the highlighted item and closes the menu."
|
|
9128
|
+
},
|
|
9129
|
+
{
|
|
9130
|
+
"keys": "Escape",
|
|
9131
|
+
"effect": "Closes the menu without leaving focus inside the removed content."
|
|
9132
|
+
},
|
|
9133
|
+
{
|
|
9134
|
+
"keys": "Tab",
|
|
9135
|
+
"effect": "Does not leave the open menu."
|
|
9136
|
+
}
|
|
8236
9137
|
]
|
|
8237
9138
|
},
|
|
8238
9139
|
"DateInput": {
|
|
@@ -8454,7 +9355,10 @@
|
|
|
8454
9355
|
"sizing": "panel"
|
|
8455
9356
|
},
|
|
8456
9357
|
"consumers": [
|
|
9358
|
+
"src/app/components/dialog.tsx",
|
|
8457
9359
|
"src/app/components/hover-card.test.tsx",
|
|
9360
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
9361
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
8458
9362
|
"src/stories/hover-card.stories.tsx"
|
|
8459
9363
|
],
|
|
8460
9364
|
"tokenMapping": {},
|
|
@@ -8472,6 +9376,46 @@
|
|
|
8472
9376
|
],
|
|
8473
9377
|
"storyIds": [
|
|
8474
9378
|
"primitives-hover-card--default"
|
|
9379
|
+
],
|
|
9380
|
+
"slots": [
|
|
9381
|
+
{
|
|
9382
|
+
"name": "trigger",
|
|
9383
|
+
"description": "The link or element that opens the card (HoverCard.Trigger).",
|
|
9384
|
+
"source": "jsdoc"
|
|
9385
|
+
},
|
|
9386
|
+
{
|
|
9387
|
+
"name": "content",
|
|
9388
|
+
"description": "The preview (HoverCard.Content).",
|
|
9389
|
+
"source": "jsdoc"
|
|
9390
|
+
}
|
|
9391
|
+
],
|
|
9392
|
+
"usage": {
|
|
9393
|
+
"when": "Preview extra detail about a link or mention when it is hovered or focused, without navigating.",
|
|
9394
|
+
"whenNot": "Content people must reach, or a label for an interactive control.",
|
|
9395
|
+
"useInstead": [
|
|
9396
|
+
{
|
|
9397
|
+
"component": "Dialog",
|
|
9398
|
+
"reason": "content people must act on"
|
|
9399
|
+
},
|
|
9400
|
+
{
|
|
9401
|
+
"component": "Tooltip",
|
|
9402
|
+
"reason": "a short label for a control"
|
|
9403
|
+
}
|
|
9404
|
+
]
|
|
9405
|
+
},
|
|
9406
|
+
"keyboard": [
|
|
9407
|
+
{
|
|
9408
|
+
"keys": "Focus",
|
|
9409
|
+
"effect": "Opens the card when the trigger receives keyboard focus."
|
|
9410
|
+
},
|
|
9411
|
+
{
|
|
9412
|
+
"keys": "Escape",
|
|
9413
|
+
"effect": "Closes the card and keeps focus on the trigger."
|
|
9414
|
+
},
|
|
9415
|
+
{
|
|
9416
|
+
"keys": "Tab",
|
|
9417
|
+
"effect": "Moves on to the next element and closes the card."
|
|
9418
|
+
}
|
|
8475
9419
|
]
|
|
8476
9420
|
},
|
|
8477
9421
|
"MultiSelector": {
|
|
@@ -8653,7 +9597,7 @@
|
|
|
8653
9597
|
"hidden": false,
|
|
8654
9598
|
"docExempt": false,
|
|
8655
9599
|
"filePath": "src/app/components/box.tsx",
|
|
8656
|
-
"description": "Box — polymorphic layout primitive with a token-first `sx` engine.
|
|
9600
|
+
"description": "Box — polymorphic layout primitive with a token-first `sx` engine. `sx` is a deliberate SUBSET of MUI's sx — not all of CSS-in-JS is a feature: - Spacing 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.",
|
|
8657
9601
|
"figmaUrl": null,
|
|
8658
9602
|
"figmaId": null,
|
|
8659
9603
|
"figmaLink": null,
|
|
@@ -8671,6 +9615,7 @@
|
|
|
8671
9615
|
"src/app/components/container.tsx",
|
|
8672
9616
|
"src/app/components/cover.tsx",
|
|
8673
9617
|
"src/app/components/frame.tsx",
|
|
9618
|
+
"src/app/components/grid.tsx",
|
|
8674
9619
|
"src/app/components/sidebar.tsx",
|
|
8675
9620
|
"src/app/components/switcher.tsx",
|
|
8676
9621
|
"src/app/components/toggle.tsx",
|
|
@@ -8710,7 +9655,26 @@
|
|
|
8710
9655
|
"primitives-box--responsive-values",
|
|
8711
9656
|
"primitives-box--spacing-shorthands",
|
|
8712
9657
|
"primitives-box--token-colors"
|
|
8713
|
-
]
|
|
9658
|
+
],
|
|
9659
|
+
"usage": {
|
|
9660
|
+
"when": "Build one-off layout that no named layout primitive covers, using token keys through `sx`.",
|
|
9661
|
+
"whenNot": "Ordinary vertical or horizontal spacing, columns, or page-width constraint.",
|
|
9662
|
+
"useInstead": [
|
|
9663
|
+
{
|
|
9664
|
+
"component": "Stack",
|
|
9665
|
+
"reason": "a row or column of content with even gaps"
|
|
9666
|
+
},
|
|
9667
|
+
{
|
|
9668
|
+
"component": "Grid",
|
|
9669
|
+
"reason": "multi-column layout"
|
|
9670
|
+
},
|
|
9671
|
+
{
|
|
9672
|
+
"component": "Container",
|
|
9673
|
+
"reason": "a width-constrained page region"
|
|
9674
|
+
}
|
|
9675
|
+
]
|
|
9676
|
+
},
|
|
9677
|
+
"aiRules": "Reach for Stack/Grid/Container/the every-layout primitives first. Use 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."
|
|
8714
9678
|
},
|
|
8715
9679
|
"Bleed": {
|
|
8716
9680
|
"category": "Layout",
|
|
@@ -8719,7 +9683,7 @@
|
|
|
8719
9683
|
"hidden": false,
|
|
8720
9684
|
"docExempt": false,
|
|
8721
9685
|
"filePath": "src/app/components/bleed.tsx",
|
|
8722
|
-
"description": "Bleed — controlled negative-margin full-bleed within a padded container.
|
|
9686
|
+
"description": "Bleed — controlled negative-margin full-bleed within a padded container. 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).",
|
|
8723
9687
|
"figmaUrl": null,
|
|
8724
9688
|
"figmaId": null,
|
|
8725
9689
|
"figmaLink": null,
|
|
@@ -8783,7 +9747,8 @@
|
|
|
8783
9747
|
"storyIds": [
|
|
8784
9748
|
"primitives-bleed--bleed-both",
|
|
8785
9749
|
"primitives-bleed--bleed-x"
|
|
8786
|
-
]
|
|
9750
|
+
],
|
|
9751
|
+
"aiRules": "Reach for this named layout intent before Box/sx. amount MUST 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."
|
|
8787
9752
|
},
|
|
8788
9753
|
"Center": {
|
|
8789
9754
|
"category": "Layout",
|
|
@@ -8792,7 +9757,7 @@
|
|
|
8792
9757
|
"hidden": false,
|
|
8793
9758
|
"docExempt": false,
|
|
8794
9759
|
"filePath": "src/app/components/center.tsx",
|
|
8795
|
-
"description": "Center — max-width column, auto-centered horizontally.
|
|
9760
|
+
"description": "Center — max-width column, auto-centered horizontally. Every Layout reference: https://every-layout.dev/layouts/center/",
|
|
8796
9761
|
"figmaUrl": null,
|
|
8797
9762
|
"figmaId": null,
|
|
8798
9763
|
"figmaLink": null,
|
|
@@ -8860,7 +9825,8 @@
|
|
|
8860
9825
|
"primitives-center--content-width",
|
|
8861
9826
|
"primitives-center--max-width",
|
|
8862
9827
|
"primitives-center--with-gutter"
|
|
8863
|
-
]
|
|
9828
|
+
],
|
|
9829
|
+
"aiRules": "Reach for this named layout intent before Box/sx. maxWidth MUST 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."
|
|
8864
9830
|
},
|
|
8865
9831
|
"Cluster": {
|
|
8866
9832
|
"category": "Layout",
|
|
@@ -8869,7 +9835,7 @@
|
|
|
8869
9835
|
"hidden": false,
|
|
8870
9836
|
"docExempt": false,
|
|
8871
9837
|
"filePath": "src/app/components/cluster.tsx",
|
|
8872
|
-
"description": "Cluster — wrapping horizontal group with even gaps.
|
|
9838
|
+
"description": "Cluster — wrapping horizontal group with even gaps. Every Layout reference: https://every-layout.dev/layouts/cluster/",
|
|
8873
9839
|
"figmaUrl": null,
|
|
8874
9840
|
"figmaId": null,
|
|
8875
9841
|
"figmaLink": null,
|
|
@@ -8880,6 +9846,11 @@
|
|
|
8880
9846
|
},
|
|
8881
9847
|
"consumers": [
|
|
8882
9848
|
"src/app/components/cluster.test.tsx",
|
|
9849
|
+
"src/app/components/data-table-section.tsx",
|
|
9850
|
+
"src/app/components/destructive-section.tsx",
|
|
9851
|
+
"src/app/components/form-actions.test.tsx",
|
|
9852
|
+
"src/app/components/form-actions.tsx",
|
|
9853
|
+
"src/app/components/page-header.tsx",
|
|
8883
9854
|
"src/app/components/switcher.tsx",
|
|
8884
9855
|
"src/stories/cluster.stories.tsx",
|
|
8885
9856
|
"src/stories/patterns-layout.stories.tsx"
|
|
@@ -8947,7 +9918,8 @@
|
|
|
8947
9918
|
"primitives-cluster--default",
|
|
8948
9919
|
"primitives-cluster--space-between",
|
|
8949
9920
|
"primitives-cluster--spacious-gap"
|
|
8950
|
-
]
|
|
9921
|
+
],
|
|
9922
|
+
"aiRules": "Reach for this named layout intent before Box/sx. Use Cluster for 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."
|
|
8951
9923
|
},
|
|
8952
9924
|
"Cover": {
|
|
8953
9925
|
"category": "Layout",
|
|
@@ -8956,7 +9928,7 @@
|
|
|
8956
9928
|
"hidden": false,
|
|
8957
9929
|
"docExempt": false,
|
|
8958
9930
|
"filePath": "src/app/components/cover.tsx",
|
|
8959
|
-
"description": "Cover — vertical shell with an auto-centered main region.
|
|
9931
|
+
"description": "Cover — vertical shell with an auto-centered main region. Every Layout reference: https://every-layout.dev/layouts/cover/",
|
|
8960
9932
|
"figmaUrl": null,
|
|
8961
9933
|
"figmaId": null,
|
|
8962
9934
|
"figmaLink": null,
|
|
@@ -9031,7 +10003,8 @@
|
|
|
9031
10003
|
"primitives-cover--header-main-footer",
|
|
9032
10004
|
"primitives-cover--header-only",
|
|
9033
10005
|
"primitives-cover--main-only"
|
|
9034
|
-
]
|
|
10006
|
+
],
|
|
10007
|
+
"aiRules": "Reach for this named layout intent before Box/sx. gap MUST use a 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."
|
|
9035
10008
|
},
|
|
9036
10009
|
"Frame": {
|
|
9037
10010
|
"category": "Layout",
|
|
@@ -9040,7 +10013,7 @@
|
|
|
9040
10013
|
"hidden": false,
|
|
9041
10014
|
"docExempt": false,
|
|
9042
10015
|
"filePath": "src/app/components/frame.tsx",
|
|
9043
|
-
"description": "Frame — aspect-ratio-locked, token-clipped media box.
|
|
10016
|
+
"description": "Frame — aspect-ratio-locked, token-clipped media box. Every Layout reference: https://every-layout.dev/layouts/frame/",
|
|
9044
10017
|
"figmaUrl": null,
|
|
9045
10018
|
"figmaId": null,
|
|
9046
10019
|
"figmaLink": null,
|
|
@@ -9101,7 +10074,8 @@
|
|
|
9101
10074
|
"primitives-frame--no-radius",
|
|
9102
10075
|
"primitives-frame--square",
|
|
9103
10076
|
"primitives-frame--widescreen"
|
|
9104
|
-
]
|
|
10077
|
+
],
|
|
10078
|
+
"aiRules": "Reach for this named layout intent before Box/sx when framing 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."
|
|
9105
10079
|
},
|
|
9106
10080
|
"Sidebar": {
|
|
9107
10081
|
"category": "Layout",
|
|
@@ -9110,7 +10084,7 @@
|
|
|
9110
10084
|
"hidden": false,
|
|
9111
10085
|
"docExempt": false,
|
|
9112
10086
|
"filePath": "src/app/components/sidebar.tsx",
|
|
9113
|
-
"description": "Sidebar — fixed-width rail beside fluid content, no media query.
|
|
10087
|
+
"description": "Sidebar — fixed-width rail beside fluid content, no media query. Every Layout reference: https://every-layout.dev/layouts/sidebar/",
|
|
9114
10088
|
"figmaUrl": null,
|
|
9115
10089
|
"figmaId": null,
|
|
9116
10090
|
"figmaLink": null,
|
|
@@ -9189,7 +10163,8 @@
|
|
|
9189
10163
|
"primitives-sidebar--narrow-container-stacks",
|
|
9190
10164
|
"primitives-sidebar--rail-end",
|
|
9191
10165
|
"primitives-sidebar--rail-start"
|
|
9192
|
-
]
|
|
10166
|
+
],
|
|
10167
|
+
"aiRules": "Reach for this named layout intent before Box/sx. Sidebar expects 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."
|
|
9193
10168
|
},
|
|
9194
10169
|
"Switcher": {
|
|
9195
10170
|
"category": "Layout",
|
|
@@ -9198,7 +10173,7 @@
|
|
|
9198
10173
|
"hidden": false,
|
|
9199
10174
|
"docExempt": false,
|
|
9200
10175
|
"filePath": "src/app/components/switcher.tsx",
|
|
9201
|
-
"description": "Switcher — flips a row to a column below a width threshold, no media query.
|
|
10176
|
+
"description": "Switcher — flips a row to a column below a width threshold, no media query. Every Layout reference: https://every-layout.dev/layouts/the-switcher/",
|
|
9202
10177
|
"figmaUrl": null,
|
|
9203
10178
|
"figmaId": null,
|
|
9204
10179
|
"figmaLink": null,
|
|
@@ -9262,7 +10237,8 @@
|
|
|
9262
10237
|
"primitives-switcher--default",
|
|
9263
10238
|
"primitives-switcher--limit-forces-stacked",
|
|
9264
10239
|
"primitives-switcher--narrow-container-stacks"
|
|
9265
|
-
]
|
|
10240
|
+
],
|
|
10241
|
+
"aiRules": "Reach for this named layout intent before Box/sx. gap MUST use a 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."
|
|
9266
10242
|
},
|
|
9267
10243
|
"Pin": {
|
|
9268
10244
|
"category": "Layout",
|
|
@@ -9271,7 +10247,7 @@
|
|
|
9271
10247
|
"hidden": false,
|
|
9272
10248
|
"docExempt": false,
|
|
9273
10249
|
"filePath": "src/app/components/pin.tsx",
|
|
9274
|
-
"description": "Pin — sticky-pin an element within its scroll region.
|
|
10250
|
+
"description": "Pin — sticky-pin an element within its scroll region.",
|
|
9275
10251
|
"figmaUrl": null,
|
|
9276
10252
|
"figmaId": null,
|
|
9277
10253
|
"figmaLink": null,
|
|
@@ -9281,6 +10257,7 @@
|
|
|
9281
10257
|
"sizing": "panel"
|
|
9282
10258
|
},
|
|
9283
10259
|
"consumers": [
|
|
10260
|
+
"src/app/components/form-actions.tsx",
|
|
9284
10261
|
"src/app/components/pin.test.tsx",
|
|
9285
10262
|
"src/stories/patterns-scroll.stories.tsx",
|
|
9286
10263
|
"src/stories/pin.stories.tsx",
|
|
@@ -9321,7 +10298,8 @@
|
|
|
9321
10298
|
],
|
|
9322
10299
|
"storyIds": [
|
|
9323
10300
|
"primitives-pin--sidebar"
|
|
9324
|
-
]
|
|
10301
|
+
],
|
|
10302
|
+
"aiRules": "`top` is a CSS length offset (a dimension, not a spacing step). 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."
|
|
9325
10303
|
},
|
|
9326
10304
|
"Reveal": {
|
|
9327
10305
|
"category": "Motion",
|
|
@@ -9330,7 +10308,7 @@
|
|
|
9330
10308
|
"hidden": false,
|
|
9331
10309
|
"docExempt": false,
|
|
9332
10310
|
"filePath": "src/app/components/reveal.tsx",
|
|
9333
|
-
"description": "Reveal — reveal-on-scroll primitive via CSS scroll-driven animation.
|
|
10311
|
+
"description": "Reveal — reveal-on-scroll primitive via CSS scroll-driven animation.",
|
|
9334
10312
|
"figmaUrl": null,
|
|
9335
10313
|
"figmaId": null,
|
|
9336
10314
|
"figmaLink": null,
|
|
@@ -9392,7 +10370,8 @@
|
|
|
9392
10370
|
"patterns-scroll--simple-parallax",
|
|
9393
10371
|
"primitives-reveal--animations",
|
|
9394
10372
|
"primitives-reveal--scale-reveal-scene"
|
|
9395
|
-
]
|
|
10373
|
+
],
|
|
10374
|
+
"aiRules": "Content is fully visible by DEFAULT; the effect applies only where `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."
|
|
9396
10375
|
},
|
|
9397
10376
|
"Textarea": {
|
|
9398
10377
|
"category": "Inputs",
|
|
@@ -9411,6 +10390,8 @@
|
|
|
9411
10390
|
"sizing": "panel"
|
|
9412
10391
|
},
|
|
9413
10392
|
"consumers": [
|
|
10393
|
+
"src/app/components/input.tsx",
|
|
10394
|
+
"src/stories/patterns-client-detail.stories.tsx",
|
|
9414
10395
|
"src/stories/textarea.stories.tsx"
|
|
9415
10396
|
],
|
|
9416
10397
|
"tokenMapping": {},
|
|
@@ -9465,7 +10446,17 @@
|
|
|
9465
10446
|
"primitives-textarea--disabled",
|
|
9466
10447
|
"primitives-textarea--error",
|
|
9467
10448
|
"primitives-textarea--with-helper"
|
|
9468
|
-
]
|
|
10449
|
+
],
|
|
10450
|
+
"usage": {
|
|
10451
|
+
"when": "Collect multi-line free text such as a message, note or description.",
|
|
10452
|
+
"whenNot": "A single line of text, or choosing from a list.",
|
|
10453
|
+
"useInstead": [
|
|
10454
|
+
{
|
|
10455
|
+
"component": "Input",
|
|
10456
|
+
"reason": "a single line of text"
|
|
10457
|
+
}
|
|
10458
|
+
]
|
|
10459
|
+
}
|
|
9469
10460
|
},
|
|
9470
10461
|
"CardBody": {
|
|
9471
10462
|
"category": "Display",
|
|
@@ -9651,7 +10642,7 @@
|
|
|
9651
10642
|
"hidden": false,
|
|
9652
10643
|
"docExempt": false,
|
|
9653
10644
|
"filePath": "src/app/components/card.tsx",
|
|
9654
|
-
"description": "Card
|
|
10645
|
+
"description": "Card.Metric — one uppercase label, a large value and an optional sub-line inside a Card.",
|
|
9655
10646
|
"figmaUrl": null,
|
|
9656
10647
|
"figmaId": null,
|
|
9657
10648
|
"figmaLink": null,
|
|
@@ -9707,7 +10698,11 @@
|
|
|
9707
10698
|
"primitives-card--padding-variants",
|
|
9708
10699
|
"primitives-card--progress-slot",
|
|
9709
10700
|
"primitives-card--variant-accent"
|
|
9710
|
-
]
|
|
10701
|
+
],
|
|
10702
|
+
"usage": {
|
|
10703
|
+
"when": "Show one headline figure (a KPI, a count, a total) with its label inside a Card.",
|
|
10704
|
+
"whenNot": "A metric outside a Card, or several figures that share one label."
|
|
10705
|
+
}
|
|
9711
10706
|
},
|
|
9712
10707
|
"CardProgress": {
|
|
9713
10708
|
"category": "Display",
|
|
@@ -9825,7 +10820,7 @@
|
|
|
9825
10820
|
"hidden": false,
|
|
9826
10821
|
"docExempt": true,
|
|
9827
10822
|
"filePath": "src/app/components/dialog.tsx",
|
|
9828
|
-
"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
|
|
10823
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
9829
10824
|
"figmaUrl": null,
|
|
9830
10825
|
"figmaId": null,
|
|
9831
10826
|
"figmaLink": null,
|
|
@@ -9854,6 +10849,7 @@
|
|
|
9854
10849
|
"src/stories/dialog.stories.tsx"
|
|
9855
10850
|
],
|
|
9856
10851
|
"storyIds": [
|
|
10852
|
+
"primitives-dialog--dark-scope",
|
|
9857
10853
|
"primitives-dialog--default",
|
|
9858
10854
|
"primitives-dialog--destructive",
|
|
9859
10855
|
"primitives-dialog--information",
|
|
@@ -9867,7 +10863,7 @@
|
|
|
9867
10863
|
"hidden": false,
|
|
9868
10864
|
"docExempt": true,
|
|
9869
10865
|
"filePath": "src/app/components/dialog.tsx",
|
|
9870
|
-
"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
|
|
10866
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
9871
10867
|
"figmaUrl": null,
|
|
9872
10868
|
"figmaId": null,
|
|
9873
10869
|
"figmaLink": null,
|
|
@@ -9900,6 +10896,7 @@
|
|
|
9900
10896
|
"src/stories/dialog.stories.tsx"
|
|
9901
10897
|
],
|
|
9902
10898
|
"storyIds": [
|
|
10899
|
+
"primitives-dialog--dark-scope",
|
|
9903
10900
|
"primitives-dialog--default",
|
|
9904
10901
|
"primitives-dialog--destructive",
|
|
9905
10902
|
"primitives-dialog--information",
|
|
@@ -9913,7 +10910,7 @@
|
|
|
9913
10910
|
"hidden": false,
|
|
9914
10911
|
"docExempt": true,
|
|
9915
10912
|
"filePath": "src/app/components/dialog.tsx",
|
|
9916
|
-
"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
|
|
10913
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
9917
10914
|
"figmaUrl": null,
|
|
9918
10915
|
"figmaId": null,
|
|
9919
10916
|
"figmaLink": null,
|
|
@@ -9942,6 +10939,7 @@
|
|
|
9942
10939
|
"src/stories/dialog.stories.tsx"
|
|
9943
10940
|
],
|
|
9944
10941
|
"storyIds": [
|
|
10942
|
+
"primitives-dialog--dark-scope",
|
|
9945
10943
|
"primitives-dialog--default",
|
|
9946
10944
|
"primitives-dialog--destructive",
|
|
9947
10945
|
"primitives-dialog--information",
|
|
@@ -9955,7 +10953,7 @@
|
|
|
9955
10953
|
"hidden": false,
|
|
9956
10954
|
"docExempt": true,
|
|
9957
10955
|
"filePath": "src/app/components/dialog.tsx",
|
|
9958
|
-
"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
|
|
10956
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
9959
10957
|
"figmaUrl": null,
|
|
9960
10958
|
"figmaId": null,
|
|
9961
10959
|
"figmaLink": null,
|
|
@@ -9979,6 +10977,7 @@
|
|
|
9979
10977
|
"src/stories/dialog.stories.tsx"
|
|
9980
10978
|
],
|
|
9981
10979
|
"storyIds": [
|
|
10980
|
+
"primitives-dialog--dark-scope",
|
|
9982
10981
|
"primitives-dialog--default",
|
|
9983
10982
|
"primitives-dialog--destructive",
|
|
9984
10983
|
"primitives-dialog--information",
|
|
@@ -9992,7 +10991,7 @@
|
|
|
9992
10991
|
"hidden": false,
|
|
9993
10992
|
"docExempt": true,
|
|
9994
10993
|
"filePath": "src/app/components/dialog.tsx",
|
|
9995
|
-
"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
|
|
10994
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
9996
10995
|
"figmaUrl": null,
|
|
9997
10996
|
"figmaId": null,
|
|
9998
10997
|
"figmaLink": null,
|
|
@@ -10016,6 +11015,7 @@
|
|
|
10016
11015
|
"src/stories/dialog.stories.tsx"
|
|
10017
11016
|
],
|
|
10018
11017
|
"storyIds": [
|
|
11018
|
+
"primitives-dialog--dark-scope",
|
|
10019
11019
|
"primitives-dialog--default",
|
|
10020
11020
|
"primitives-dialog--destructive",
|
|
10021
11021
|
"primitives-dialog--information",
|
|
@@ -10029,7 +11029,7 @@
|
|
|
10029
11029
|
"hidden": false,
|
|
10030
11030
|
"docExempt": true,
|
|
10031
11031
|
"filePath": "src/app/components/dialog.tsx",
|
|
10032
|
-
"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
|
|
11032
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
10033
11033
|
"figmaUrl": null,
|
|
10034
11034
|
"figmaId": null,
|
|
10035
11035
|
"figmaLink": null,
|
|
@@ -10058,6 +11058,7 @@
|
|
|
10058
11058
|
"src/stories/dialog.stories.tsx"
|
|
10059
11059
|
],
|
|
10060
11060
|
"storyIds": [
|
|
11061
|
+
"primitives-dialog--dark-scope",
|
|
10061
11062
|
"primitives-dialog--default",
|
|
10062
11063
|
"primitives-dialog--destructive",
|
|
10063
11064
|
"primitives-dialog--information",
|
|
@@ -10071,7 +11072,7 @@
|
|
|
10071
11072
|
"hidden": false,
|
|
10072
11073
|
"docExempt": true,
|
|
10073
11074
|
"filePath": "src/app/components/dialog.tsx",
|
|
10074
|
-
"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
|
|
11075
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
10075
11076
|
"figmaUrl": null,
|
|
10076
11077
|
"figmaId": null,
|
|
10077
11078
|
"figmaLink": null,
|
|
@@ -10095,6 +11096,7 @@
|
|
|
10095
11096
|
"src/stories/dialog.stories.tsx"
|
|
10096
11097
|
],
|
|
10097
11098
|
"storyIds": [
|
|
11099
|
+
"primitives-dialog--dark-scope",
|
|
10098
11100
|
"primitives-dialog--default",
|
|
10099
11101
|
"primitives-dialog--destructive",
|
|
10100
11102
|
"primitives-dialog--information",
|
|
@@ -10108,7 +11110,7 @@
|
|
|
10108
11110
|
"hidden": false,
|
|
10109
11111
|
"docExempt": true,
|
|
10110
11112
|
"filePath": "src/app/components/dialog.tsx",
|
|
10111
|
-
"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
|
|
11113
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
10112
11114
|
"figmaUrl": null,
|
|
10113
11115
|
"figmaId": null,
|
|
10114
11116
|
"figmaLink": null,
|
|
@@ -10137,6 +11139,7 @@
|
|
|
10137
11139
|
"src/stories/dialog.stories.tsx"
|
|
10138
11140
|
],
|
|
10139
11141
|
"storyIds": [
|
|
11142
|
+
"primitives-dialog--dark-scope",
|
|
10140
11143
|
"primitives-dialog--default",
|
|
10141
11144
|
"primitives-dialog--destructive",
|
|
10142
11145
|
"primitives-dialog--information",
|
|
@@ -10150,7 +11153,7 @@
|
|
|
10150
11153
|
"hidden": false,
|
|
10151
11154
|
"docExempt": true,
|
|
10152
11155
|
"filePath": "src/app/components/dialog.tsx",
|
|
10153
|
-
"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
|
|
11156
|
+
"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 role.scrim (semantic.color.surface.scrim) at 60% alpha: dark in both themes, black in dark mode. The overlay portals into the nearest `data-hds` scope so it inherits the active theme; pass `container` to override. The close affordance is rendered as an absolutely-positioned X inside Content; pass `hideClose` to opt out for fully-custom layouts.",
|
|
10154
11157
|
"figmaUrl": null,
|
|
10155
11158
|
"figmaId": null,
|
|
10156
11159
|
"figmaLink": null,
|
|
@@ -10179,6 +11182,7 @@
|
|
|
10179
11182
|
"src/stories/dialog.stories.tsx"
|
|
10180
11183
|
],
|
|
10181
11184
|
"storyIds": [
|
|
11185
|
+
"primitives-dialog--dark-scope",
|
|
10182
11186
|
"primitives-dialog--default",
|
|
10183
11187
|
"primitives-dialog--destructive",
|
|
10184
11188
|
"primitives-dialog--information",
|
|
@@ -10203,6 +11207,8 @@
|
|
|
10203
11207
|
"consumers": [
|
|
10204
11208
|
"src/app/components/asset-img.tsx",
|
|
10205
11209
|
"src/app/components/hover-card.tsx",
|
|
11210
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
11211
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
10206
11212
|
"src/app/data/hdsEditorial.tsx",
|
|
10207
11213
|
"src/index.ts",
|
|
10208
11214
|
"src/stories/hds-tooltip.stories.tsx"
|
|
@@ -10243,13 +11249,19 @@
|
|
|
10243
11249
|
"sizing": "panel"
|
|
10244
11250
|
},
|
|
10245
11251
|
"consumers": [
|
|
11252
|
+
"src/app/components/combobox.tsx",
|
|
10246
11253
|
"src/app/components/command-palette.tsx",
|
|
10247
11254
|
"src/app/components/context-menu.tsx",
|
|
11255
|
+
"src/app/components/data-table-section.tsx",
|
|
10248
11256
|
"src/app/components/date-range-input.tsx",
|
|
10249
11257
|
"src/app/components/hover-card.tsx",
|
|
10250
11258
|
"src/app/components/menu.test.tsx",
|
|
10251
11259
|
"src/app/components/multi-selector.tsx",
|
|
11260
|
+
"src/app/components/select.tsx",
|
|
11261
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
11262
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
10252
11263
|
"src/docs-tooling/shell-controls.tsx",
|
|
11264
|
+
"src/stories/context-menu.stories.tsx",
|
|
10253
11265
|
"src/stories/menu.stories.tsx"
|
|
10254
11266
|
],
|
|
10255
11267
|
"tokenMapping": {},
|
|
@@ -10270,6 +11282,58 @@
|
|
|
10270
11282
|
"primitives-menu--with-checkbox-items",
|
|
10271
11283
|
"primitives-menu--with-radio-group",
|
|
10272
11284
|
"primitives-menu--with-submenu"
|
|
11285
|
+
],
|
|
11286
|
+
"slots": [
|
|
11287
|
+
{
|
|
11288
|
+
"name": "trigger",
|
|
11289
|
+
"description": "The element that opens the menu (Menu.Trigger).",
|
|
11290
|
+
"source": "jsdoc"
|
|
11291
|
+
},
|
|
11292
|
+
{
|
|
11293
|
+
"name": "content",
|
|
11294
|
+
"description": "The popup holding the items (Menu.Content).",
|
|
11295
|
+
"source": "jsdoc"
|
|
11296
|
+
}
|
|
11297
|
+
],
|
|
11298
|
+
"usage": {
|
|
11299
|
+
"when": "Offer a list of actions from a trigger, closed until opened.",
|
|
11300
|
+
"whenNot": "Choosing one value for a form field, or a set of options that must stay visible.",
|
|
11301
|
+
"useInstead": [
|
|
11302
|
+
{
|
|
11303
|
+
"component": "Select",
|
|
11304
|
+
"reason": "choosing a value for a form field"
|
|
11305
|
+
}
|
|
11306
|
+
]
|
|
11307
|
+
},
|
|
11308
|
+
"keyboard": [
|
|
11309
|
+
{
|
|
11310
|
+
"keys": "Enter/Space/ArrowDown",
|
|
11311
|
+
"effect": "Opens the menu from the trigger and highlights the first item."
|
|
11312
|
+
},
|
|
11313
|
+
{
|
|
11314
|
+
"keys": "ArrowDown/ArrowUp",
|
|
11315
|
+
"effect": "Moves the highlight; it stops at the first and last item."
|
|
11316
|
+
},
|
|
11317
|
+
{
|
|
11318
|
+
"keys": "Home/End",
|
|
11319
|
+
"effect": "Jumps to the first or last item."
|
|
11320
|
+
},
|
|
11321
|
+
{
|
|
11322
|
+
"keys": "Character",
|
|
11323
|
+
"effect": "Highlights the next item that starts with the typed letter."
|
|
11324
|
+
},
|
|
11325
|
+
{
|
|
11326
|
+
"keys": "Enter",
|
|
11327
|
+
"effect": "Selects the highlighted item and closes the menu."
|
|
11328
|
+
},
|
|
11329
|
+
{
|
|
11330
|
+
"keys": "Escape",
|
|
11331
|
+
"effect": "Closes the menu and returns focus to the trigger."
|
|
11332
|
+
},
|
|
11333
|
+
{
|
|
11334
|
+
"keys": "Tab",
|
|
11335
|
+
"effect": "Does not leave the open menu."
|
|
11336
|
+
}
|
|
10273
11337
|
]
|
|
10274
11338
|
},
|
|
10275
11339
|
"Popover": {
|
|
@@ -10303,6 +11367,8 @@
|
|
|
10303
11367
|
"src/app/components/multi-selector.test.tsx",
|
|
10304
11368
|
"src/app/components/multi-selector.tsx",
|
|
10305
11369
|
"src/app/components/popover.test.tsx",
|
|
11370
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
11371
|
+
"src/app/context/__tests__/portal-scope.test.tsx",
|
|
10306
11372
|
"src/app/design-system/generated-token-descriptions.ts",
|
|
10307
11373
|
"src/stories/combobox.stories.tsx",
|
|
10308
11374
|
"src/stories/date-input.stories.tsx",
|
|
@@ -10416,6 +11482,7 @@
|
|
|
10416
11482
|
"consumers": [
|
|
10417
11483
|
"src/app/components/checkbox.test.tsx",
|
|
10418
11484
|
"src/app/components/radio.tsx",
|
|
11485
|
+
"src/app/components/toggle.tsx",
|
|
10419
11486
|
"src/index.ts",
|
|
10420
11487
|
"src/stories/checkbox.stories.tsx"
|
|
10421
11488
|
],
|
|
@@ -10453,6 +11520,393 @@
|
|
|
10453
11520
|
"primitives-checkbox--disabled-checked",
|
|
10454
11521
|
"primitives-checkbox--group",
|
|
10455
11522
|
"primitives-checkbox--indeterminate"
|
|
11523
|
+
],
|
|
11524
|
+
"usage": {
|
|
11525
|
+
"when": "Let people tick one or more independent options, or a parent choice that is partly selected.",
|
|
11526
|
+
"whenNot": "An immediate on/off setting, or a choice of exactly one option from a set.",
|
|
11527
|
+
"useInstead": [
|
|
11528
|
+
{
|
|
11529
|
+
"component": "Toggle",
|
|
11530
|
+
"reason": "a setting that applies as soon as it flips"
|
|
11531
|
+
},
|
|
11532
|
+
{
|
|
11533
|
+
"component": "Radio",
|
|
11534
|
+
"reason": "exactly one choice from a set"
|
|
11535
|
+
}
|
|
11536
|
+
]
|
|
11537
|
+
}
|
|
11538
|
+
},
|
|
11539
|
+
"FormActions": {
|
|
11540
|
+
"category": "Actions",
|
|
11541
|
+
"categorySource": "jsdoc",
|
|
11542
|
+
"governedCategory": true,
|
|
11543
|
+
"hidden": false,
|
|
11544
|
+
"docExempt": false,
|
|
11545
|
+
"filePath": "src/app/components/form-actions.tsx",
|
|
11546
|
+
"description": "Form footer with one fixed order: destructive (far left, if any), then secondary, then primary last and right-most. Gap is the tight layout token.",
|
|
11547
|
+
"figmaUrl": null,
|
|
11548
|
+
"figmaId": null,
|
|
11549
|
+
"figmaLink": null,
|
|
11550
|
+
"tier": "pattern",
|
|
11551
|
+
"preview": {
|
|
11552
|
+
"exportName": "FormActions",
|
|
11553
|
+
"sizing": "panel"
|
|
11554
|
+
},
|
|
11555
|
+
"consumers": [
|
|
11556
|
+
"src/app/components/form-actions.test.tsx",
|
|
11557
|
+
"src/stories/form-actions.stories.tsx",
|
|
11558
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11559
|
+
],
|
|
11560
|
+
"tokenMapping": {},
|
|
11561
|
+
"variantAxes": [],
|
|
11562
|
+
"componentProperties": [],
|
|
11563
|
+
"props": {
|
|
11564
|
+
"destructive": {
|
|
11565
|
+
"type": "ReactNode",
|
|
11566
|
+
"optional": true
|
|
11567
|
+
},
|
|
11568
|
+
"primary": {
|
|
11569
|
+
"type": "ReactNode"
|
|
11570
|
+
},
|
|
11571
|
+
"secondary": {
|
|
11572
|
+
"type": "ReactNode",
|
|
11573
|
+
"optional": true
|
|
11574
|
+
},
|
|
11575
|
+
"sticky": {
|
|
11576
|
+
"type": "boolean",
|
|
11577
|
+
"default": false
|
|
11578
|
+
}
|
|
11579
|
+
},
|
|
11580
|
+
"allowedChildren": [
|
|
11581
|
+
"*"
|
|
11582
|
+
],
|
|
11583
|
+
"propConstraints": {},
|
|
11584
|
+
"requiredProps": [],
|
|
11585
|
+
"a11yRules": [],
|
|
11586
|
+
"storyFiles": [
|
|
11587
|
+
"src/stories/form-actions.stories.tsx"
|
|
11588
|
+
],
|
|
11589
|
+
"storyIds": [
|
|
11590
|
+
"patterns-formactions--primary-only",
|
|
11591
|
+
"patterns-formactions--sticky",
|
|
11592
|
+
"patterns-formactions--with-destructive",
|
|
11593
|
+
"patterns-formactions--with-secondary"
|
|
11594
|
+
]
|
|
11595
|
+
},
|
|
11596
|
+
"MetricTile": {
|
|
11597
|
+
"category": "Display",
|
|
11598
|
+
"categorySource": "jsdoc",
|
|
11599
|
+
"governedCategory": true,
|
|
11600
|
+
"hidden": false,
|
|
11601
|
+
"docExempt": false,
|
|
11602
|
+
"filePath": "src/app/components/metric-tiles.tsx",
|
|
11603
|
+
"description": "One metric tile: eyebrow label, `heading2` value, caption sub line, on a raised surface at one fixed min-height. Wraps `Card.Metric` (the sibling with the eyebrow / h2 / caption scale) and adds the surface and the fixed height, so a tile needs no enclosing `Card`.",
|
|
11604
|
+
"figmaUrl": null,
|
|
11605
|
+
"figmaId": null,
|
|
11606
|
+
"figmaLink": null,
|
|
11607
|
+
"tier": "pattern",
|
|
11608
|
+
"preview": {
|
|
11609
|
+
"exportName": "MetricTile",
|
|
11610
|
+
"sizing": "panel"
|
|
11611
|
+
},
|
|
11612
|
+
"consumers": [
|
|
11613
|
+
"src/app/components/metric-tiles.test.tsx",
|
|
11614
|
+
"src/stories/metric-tiles.stories.tsx",
|
|
11615
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11616
|
+
],
|
|
11617
|
+
"tokenMapping": {},
|
|
11618
|
+
"variantAxes": [],
|
|
11619
|
+
"componentProperties": [],
|
|
11620
|
+
"props": {
|
|
11621
|
+
"label": {
|
|
11622
|
+
"type": "ReactNode"
|
|
11623
|
+
},
|
|
11624
|
+
"sub": {
|
|
11625
|
+
"type": "ReactNode",
|
|
11626
|
+
"optional": true
|
|
11627
|
+
},
|
|
11628
|
+
"tone": {
|
|
11629
|
+
"type": "enum",
|
|
11630
|
+
"values": [
|
|
11631
|
+
"neutral",
|
|
11632
|
+
"success",
|
|
11633
|
+
"warning",
|
|
11634
|
+
"danger",
|
|
11635
|
+
"info"
|
|
11636
|
+
],
|
|
11637
|
+
"default": "neutral"
|
|
11638
|
+
},
|
|
11639
|
+
"value": {
|
|
11640
|
+
"type": "ReactNode"
|
|
11641
|
+
}
|
|
11642
|
+
},
|
|
11643
|
+
"allowedChildren": [
|
|
11644
|
+
"*"
|
|
11645
|
+
],
|
|
11646
|
+
"propConstraints": {},
|
|
11647
|
+
"requiredProps": [],
|
|
11648
|
+
"a11yRules": [],
|
|
11649
|
+
"storyFiles": [
|
|
11650
|
+
"src/stories/metric-tiles.stories.tsx"
|
|
11651
|
+
],
|
|
11652
|
+
"storyIds": [
|
|
11653
|
+
"patterns-metrictiles--four-tiles",
|
|
11654
|
+
"patterns-metrictiles--sub-line-optional",
|
|
11655
|
+
"patterns-metrictiles--three-tiles",
|
|
11656
|
+
"patterns-metrictiles--tones"
|
|
11657
|
+
]
|
|
11658
|
+
},
|
|
11659
|
+
"MetricTiles": {
|
|
11660
|
+
"category": "Display",
|
|
11661
|
+
"categorySource": "jsdoc",
|
|
11662
|
+
"governedCategory": true,
|
|
11663
|
+
"hidden": false,
|
|
11664
|
+
"docExempt": false,
|
|
11665
|
+
"filePath": "src/app/components/metric-tiles.tsx",
|
|
11666
|
+
"description": "A row of `MetricTile`s. The grid has `min(tiles, 4)` columns, so three tiles fill three columns and never leave an empty fourth. The default for any row of headline numbers on a screen; use `Stat` only for an inline number inside prose or a dense list, `Card.Metric` only inside an existing `Card`, and `StatusTile` for state with notes (never a number).",
|
|
11667
|
+
"figmaUrl": null,
|
|
11668
|
+
"figmaId": null,
|
|
11669
|
+
"figmaLink": null,
|
|
11670
|
+
"tier": "pattern",
|
|
11671
|
+
"preview": {
|
|
11672
|
+
"exportName": "MetricTiles",
|
|
11673
|
+
"sizing": "panel"
|
|
11674
|
+
},
|
|
11675
|
+
"consumers": [
|
|
11676
|
+
"src/app/components/metric-tiles.test.tsx",
|
|
11677
|
+
"src/stories/metric-tiles.stories.tsx",
|
|
11678
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11679
|
+
],
|
|
11680
|
+
"tokenMapping": {},
|
|
11681
|
+
"variantAxes": [],
|
|
11682
|
+
"componentProperties": [],
|
|
11683
|
+
"props": {
|
|
11684
|
+
"children": {
|
|
11685
|
+
"type": "ReactNode"
|
|
11686
|
+
}
|
|
11687
|
+
},
|
|
11688
|
+
"allowedChildren": [
|
|
11689
|
+
"*"
|
|
11690
|
+
],
|
|
11691
|
+
"propConstraints": {},
|
|
11692
|
+
"requiredProps": [],
|
|
11693
|
+
"a11yRules": [],
|
|
11694
|
+
"storyFiles": [
|
|
11695
|
+
"src/stories/metric-tiles.stories.tsx"
|
|
11696
|
+
],
|
|
11697
|
+
"storyIds": [
|
|
11698
|
+
"patterns-metrictiles--four-tiles",
|
|
11699
|
+
"patterns-metrictiles--sub-line-optional",
|
|
11700
|
+
"patterns-metrictiles--three-tiles",
|
|
11701
|
+
"patterns-metrictiles--tones"
|
|
11702
|
+
]
|
|
11703
|
+
},
|
|
11704
|
+
"PageHeader": {
|
|
11705
|
+
"category": "Layout",
|
|
11706
|
+
"categorySource": "jsdoc",
|
|
11707
|
+
"governedCategory": true,
|
|
11708
|
+
"hidden": false,
|
|
11709
|
+
"docExempt": false,
|
|
11710
|
+
"filePath": "src/app/components/page-header.tsx",
|
|
11711
|
+
"description": "Screen header: breadcrumb slot, the title at the one canonical page-title size (`heading2`), a status slot and an actions slot. Every screen has exactly one. `display` and `h1` type are reserved for marketing and landing surfaces. Distinct from the docs-only page header in `src/docs-tooling`.",
|
|
11712
|
+
"figmaUrl": null,
|
|
11713
|
+
"figmaId": null,
|
|
11714
|
+
"figmaLink": null,
|
|
11715
|
+
"tier": "pattern",
|
|
11716
|
+
"preview": {
|
|
11717
|
+
"exportName": "PageHeader",
|
|
11718
|
+
"sizing": "panel"
|
|
11719
|
+
},
|
|
11720
|
+
"consumers": [
|
|
11721
|
+
"src/app/components/page-header.test.tsx",
|
|
11722
|
+
"src/stories/page-header.stories.tsx",
|
|
11723
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11724
|
+
],
|
|
11725
|
+
"tokenMapping": {},
|
|
11726
|
+
"variantAxes": [],
|
|
11727
|
+
"componentProperties": [],
|
|
11728
|
+
"props": {
|
|
11729
|
+
"actions": {
|
|
11730
|
+
"type": "ReactNode",
|
|
11731
|
+
"optional": true
|
|
11732
|
+
},
|
|
11733
|
+
"breadcrumb": {
|
|
11734
|
+
"type": "ReactNode",
|
|
11735
|
+
"optional": true
|
|
11736
|
+
},
|
|
11737
|
+
"level": {
|
|
11738
|
+
"type": "PageHeaderLevel",
|
|
11739
|
+
"default": 1
|
|
11740
|
+
},
|
|
11741
|
+
"status": {
|
|
11742
|
+
"type": "ReactNode",
|
|
11743
|
+
"optional": true
|
|
11744
|
+
},
|
|
11745
|
+
"title": {
|
|
11746
|
+
"type": "ReactNode"
|
|
11747
|
+
}
|
|
11748
|
+
},
|
|
11749
|
+
"allowedChildren": [
|
|
11750
|
+
"*"
|
|
11751
|
+
],
|
|
11752
|
+
"propConstraints": {},
|
|
11753
|
+
"requiredProps": [],
|
|
11754
|
+
"a11yRules": [],
|
|
11755
|
+
"storyFiles": [
|
|
11756
|
+
"src/stories/page-header.stories.tsx",
|
|
11757
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11758
|
+
],
|
|
11759
|
+
"storyIds": [
|
|
11760
|
+
"patterns-client-detail-screen--compact",
|
|
11761
|
+
"patterns-client-detail-screen--dark",
|
|
11762
|
+
"patterns-client-detail-screen--light",
|
|
11763
|
+
"patterns-client-detail-screen--phone-390",
|
|
11764
|
+
"patterns-pageheader--default",
|
|
11765
|
+
"patterns-pageheader--long-title-wraps",
|
|
11766
|
+
"patterns-pageheader--nested-level",
|
|
11767
|
+
"patterns-pageheader--title-only",
|
|
11768
|
+
"patterns-pageheader--with-actions"
|
|
11769
|
+
]
|
|
11770
|
+
},
|
|
11771
|
+
"DataTableSection": {
|
|
11772
|
+
"category": "Display",
|
|
11773
|
+
"categorySource": "jsdoc",
|
|
11774
|
+
"governedCategory": true,
|
|
11775
|
+
"hidden": false,
|
|
11776
|
+
"docExempt": false,
|
|
11777
|
+
"filePath": "src/app/components/data-table-section.tsx",
|
|
11778
|
+
"description": "Section heading and toolbar over a `Table`. Row actions are consumer nodes in a trailing column, the table scrolls horizontally on narrow widths without a `minWidth` from the caller, and zero rows shows an `EmptyState`.",
|
|
11779
|
+
"figmaUrl": null,
|
|
11780
|
+
"figmaId": null,
|
|
11781
|
+
"figmaLink": null,
|
|
11782
|
+
"tier": "pattern",
|
|
11783
|
+
"preview": {
|
|
11784
|
+
"exportName": "DataTableSection",
|
|
11785
|
+
"sizing": "panel"
|
|
11786
|
+
},
|
|
11787
|
+
"consumers": [
|
|
11788
|
+
"src/app/components/data-table-section.test.tsx",
|
|
11789
|
+
"src/stories/data-table-section.stories.tsx",
|
|
11790
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11791
|
+
],
|
|
11792
|
+
"tokenMapping": {},
|
|
11793
|
+
"variantAxes": [],
|
|
11794
|
+
"componentProperties": [],
|
|
11795
|
+
"props": {
|
|
11796
|
+
"actionsLabel": {
|
|
11797
|
+
"type": "string",
|
|
11798
|
+
"default": "Actions"
|
|
11799
|
+
},
|
|
11800
|
+
"columns": {
|
|
11801
|
+
"type": "TableColumn[]"
|
|
11802
|
+
},
|
|
11803
|
+
"emptyDescription": {
|
|
11804
|
+
"type": "ReactNode",
|
|
11805
|
+
"optional": true
|
|
11806
|
+
},
|
|
11807
|
+
"emptyTitle": {
|
|
11808
|
+
"type": "ReactNode",
|
|
11809
|
+
"default": "Nothing here yet"
|
|
11810
|
+
},
|
|
11811
|
+
"level": {
|
|
11812
|
+
"type": "2 | 3 | 4 | 5 | 6",
|
|
11813
|
+
"default": 2
|
|
11814
|
+
},
|
|
11815
|
+
"rows": {
|
|
11816
|
+
"type": "DataTableSectionRow[]"
|
|
11817
|
+
},
|
|
11818
|
+
"title": {
|
|
11819
|
+
"type": "ReactNode"
|
|
11820
|
+
},
|
|
11821
|
+
"toolbar": {
|
|
11822
|
+
"type": "ReactNode",
|
|
11823
|
+
"optional": true
|
|
11824
|
+
}
|
|
11825
|
+
},
|
|
11826
|
+
"allowedChildren": [
|
|
11827
|
+
"*"
|
|
11828
|
+
],
|
|
11829
|
+
"propConstraints": {},
|
|
11830
|
+
"requiredProps": [],
|
|
11831
|
+
"a11yRules": [],
|
|
11832
|
+
"storyFiles": [
|
|
11833
|
+
"src/stories/data-table-section.stories.tsx"
|
|
11834
|
+
],
|
|
11835
|
+
"storyIds": [
|
|
11836
|
+
"patterns-datatablesection--dark",
|
|
11837
|
+
"patterns-datatablesection--default",
|
|
11838
|
+
"patterns-datatablesection--empty",
|
|
11839
|
+
"patterns-datatablesection--phone-390",
|
|
11840
|
+
"patterns-datatablesection--without-row-actions"
|
|
11841
|
+
]
|
|
11842
|
+
},
|
|
11843
|
+
"DestructiveSection": {
|
|
11844
|
+
"category": "Actions",
|
|
11845
|
+
"categorySource": "jsdoc",
|
|
11846
|
+
"governedCategory": true,
|
|
11847
|
+
"hidden": false,
|
|
11848
|
+
"docExempt": false,
|
|
11849
|
+
"filePath": "src/app/components/destructive-section.tsx",
|
|
11850
|
+
"description": "Titled danger zone: a title, an explanation, and one danger `Button` that opens an `AlertDialog`. Pressing the button never runs the action; only the dialog's confirm does. Place it last on the screen, below the form.",
|
|
11851
|
+
"figmaUrl": null,
|
|
11852
|
+
"figmaId": null,
|
|
11853
|
+
"figmaLink": null,
|
|
11854
|
+
"tier": "pattern",
|
|
11855
|
+
"preview": {
|
|
11856
|
+
"exportName": "DestructiveSection",
|
|
11857
|
+
"sizing": "panel"
|
|
11858
|
+
},
|
|
11859
|
+
"consumers": [
|
|
11860
|
+
"src/app/components/destructive-section.test.tsx",
|
|
11861
|
+
"src/stories/destructive-section.stories.tsx",
|
|
11862
|
+
"src/stories/patterns-client-detail.stories.tsx"
|
|
11863
|
+
],
|
|
11864
|
+
"tokenMapping": {},
|
|
11865
|
+
"variantAxes": [],
|
|
11866
|
+
"componentProperties": [],
|
|
11867
|
+
"props": {
|
|
11868
|
+
"actionLabel": {
|
|
11869
|
+
"type": "ReactNode",
|
|
11870
|
+
"optional": true
|
|
11871
|
+
},
|
|
11872
|
+
"cancelLabel": {
|
|
11873
|
+
"type": "string",
|
|
11874
|
+
"default": "Cancel"
|
|
11875
|
+
},
|
|
11876
|
+
"confirmBody": {
|
|
11877
|
+
"type": "ReactNode"
|
|
11878
|
+
},
|
|
11879
|
+
"confirmLabel": {
|
|
11880
|
+
"type": "string"
|
|
11881
|
+
},
|
|
11882
|
+
"description": {
|
|
11883
|
+
"type": "ReactNode"
|
|
11884
|
+
},
|
|
11885
|
+
"level": {
|
|
11886
|
+
"type": "2 | 3 | 4 | 5 | 6",
|
|
11887
|
+
"default": 2
|
|
11888
|
+
},
|
|
11889
|
+
"onConfirm": {
|
|
11890
|
+
"type": "() => void"
|
|
11891
|
+
},
|
|
11892
|
+
"title": {
|
|
11893
|
+
"type": "ReactNode"
|
|
11894
|
+
}
|
|
11895
|
+
},
|
|
11896
|
+
"allowedChildren": [
|
|
11897
|
+
"*"
|
|
11898
|
+
],
|
|
11899
|
+
"propConstraints": {},
|
|
11900
|
+
"requiredProps": [],
|
|
11901
|
+
"a11yRules": [],
|
|
11902
|
+
"storyFiles": [
|
|
11903
|
+
"src/stories/destructive-section.stories.tsx"
|
|
11904
|
+
],
|
|
11905
|
+
"storyIds": [
|
|
11906
|
+
"patterns-destructivesection--dark",
|
|
11907
|
+
"patterns-destructivesection--default",
|
|
11908
|
+
"patterns-destructivesection--phone",
|
|
11909
|
+
"patterns-destructivesection--separate-button-label"
|
|
10456
11910
|
]
|
|
10457
11911
|
},
|
|
10458
11912
|
"HdsPhosphor": {
|
|
@@ -11443,7 +12897,7 @@
|
|
|
11443
12897
|
"governedCategory": true,
|
|
11444
12898
|
"hidden": false,
|
|
11445
12899
|
"filePath": "src/docs-tooling/lab/legacy-token-list.tsx",
|
|
11446
|
-
"description": "LegacyTokenList - legacy token grouping list retained for lab-side maintenance workflows.
|
|
12900
|
+
"description": "LegacyTokenList - legacy token grouping list retained for lab-side maintenance workflows.",
|
|
11447
12901
|
"figmaUrl": null,
|
|
11448
12902
|
"figmaId": null,
|
|
11449
12903
|
"preview": {
|
|
@@ -11487,7 +12941,7 @@
|
|
|
11487
12941
|
"governedCategory": true,
|
|
11488
12942
|
"hidden": false,
|
|
11489
12943
|
"filePath": "src/docs-tooling/lab/token-collection-list.tsx",
|
|
11490
|
-
"description": "TokenCollectionList - grouped token inventory list for lab and explorer maintenance.
|
|
12944
|
+
"description": "TokenCollectionList - grouped token inventory list for lab and explorer maintenance.",
|
|
11491
12945
|
"figmaUrl": null,
|
|
11492
12946
|
"figmaId": null,
|
|
11493
12947
|
"preview": {
|
|
@@ -11720,7 +13174,9 @@
|
|
|
11720
13174
|
},
|
|
11721
13175
|
"consumers": [
|
|
11722
13176
|
"src/app/components/asset-img.tsx",
|
|
11723
|
-
"src/app/components/hds-tooltip.tsx"
|
|
13177
|
+
"src/app/components/hds-tooltip.tsx",
|
|
13178
|
+
"src/app/context/__tests__/portal-hydration.test.tsx",
|
|
13179
|
+
"src/app/context/__tests__/portal-scope.test.tsx"
|
|
11724
13180
|
],
|
|
11725
13181
|
"tokenMapping": {},
|
|
11726
13182
|
"variantAxes": [],
|