@hirobius/design-system 0.21.0 → 0.23.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/AGENTS.md +13 -1
- package/CHANGELOG.md +1043 -0
- package/CONSUMING.md +25 -11
- package/DESIGN.md +24 -24
- package/MIGRATIONS.md +603 -0
- package/NOTICE.md +1 -1
- package/README.md +22 -12
- package/UPGRADING.md +243 -0
- package/codemods/hds-prefix.mjs +28 -13
- package/codemods/jsx-fold.mjs +28 -13
- package/codemods/lib/atomic-write.mjs +28 -0
- package/codemods/lib/installed-version.mjs +354 -0
- package/codemods/lib/project.mjs +395 -0
- package/codemods/lib/record.mjs +110 -0
- package/codemods/lib/scan.mjs +323 -0
- package/codemods/lib/semver.mjs +57 -0
- package/codemods/not-found-pattern.mjs +3 -3
- package/codemods/patterns-subpath.mjs +28 -12
- package/codemods/registry.mjs +67 -0
- package/codemods/tile-grid.mjs +3 -3
- package/codemods/upgrade.mjs +909 -0
- package/dist/chunks/{empty-state-DNoThgfV.js → empty-state-ChC_xZfg.js} +109 -92
- package/dist/chunks/{form-By82qZcC.js → form-zCZ_B83I.js} +16 -16
- package/dist/css-contract.json +1 -0
- package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/dist/fonts.css +5 -5
- package/dist/form.js +1 -1
- package/dist/hirobius-ui.js +1254 -1181
- package/dist/manifest.js +6 -5
- package/dist/patterns.js +164 -162
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/dist/tokens.js +14 -1
- package/dist/types/src/app/components/alert-dialog.d.ts +1 -1
- package/dist/types/src/app/components/alert.d.ts +1 -1
- package/dist/types/src/app/components/asset-img.d.ts +2 -1
- package/dist/types/src/app/components/avatar-group.d.ts +1 -1
- package/dist/types/src/app/components/avatar.d.ts +1 -1
- package/dist/types/src/app/components/badge.d.ts +1 -1
- package/dist/types/src/app/components/blockquote.d.ts +1 -1
- package/dist/types/src/app/components/breadcrumb.d.ts +1 -1
- package/dist/types/src/app/components/button.d.ts +2 -2
- package/dist/types/src/app/components/callout.d.ts +3 -2
- package/dist/types/src/app/components/card.d.ts +6 -4
- package/dist/types/src/app/components/checkbox.d.ts +1 -1
- package/dist/types/src/app/components/code-block.d.ts +2 -1
- package/dist/types/src/app/components/combobox.d.ts +2 -2
- package/dist/types/src/app/components/data-table-section.d.ts +2 -1
- package/dist/types/src/app/components/destructive-section.d.ts +2 -1
- package/dist/types/src/app/components/dialog.d.ts +1 -1
- package/dist/types/src/app/components/disclosure.d.ts +1 -1
- package/dist/types/src/app/components/divider.d.ts +2 -2
- package/dist/types/src/app/components/empty-state.d.ts +1 -1
- package/dist/types/src/app/components/field.d.ts +1 -1
- package/dist/types/src/app/components/form-actions.d.ts +2 -1
- package/dist/types/src/app/components/form.d.ts +2 -1
- package/dist/types/src/app/components/grid.d.ts +1 -1
- package/dist/types/src/app/components/hds-tooltip.d.ts +1 -1
- package/dist/types/src/app/components/icon.d.ts +2 -2
- package/dist/types/src/app/components/inline-link.d.ts +1 -1
- package/dist/types/src/app/components/input.d.ts +1 -1
- package/dist/types/src/app/components/kbd.d.ts +1 -1
- package/dist/types/src/app/components/menu.d.ts +1 -1
- package/dist/types/src/app/components/metadata-list.d.ts +1 -1
- package/dist/types/src/app/components/metric-tiles.d.ts +3 -1
- package/dist/types/src/app/components/page-header.d.ts +1 -0
- package/dist/types/src/app/components/page.d.ts +1 -0
- package/dist/types/src/app/components/pagination.d.ts +1 -1
- package/dist/types/src/app/components/popover.d.ts +1 -1
- package/dist/types/src/app/components/progress.d.ts +1 -1
- package/dist/types/src/app/components/radio.d.ts +1 -1
- package/dist/types/src/app/components/reveal.d.ts +1 -0
- package/dist/types/src/app/components/select.d.ts +1 -1
- package/dist/types/src/app/components/skeleton.d.ts +1 -1
- package/dist/types/src/app/components/slider.d.ts +1 -1
- package/dist/types/src/app/components/spinner.d.ts +1 -1
- package/dist/types/src/app/components/stack.d.ts +1 -1
- package/dist/types/src/app/components/stat.d.ts +1 -1
- package/dist/types/src/app/components/status-list-item.d.ts +1 -1
- package/dist/types/src/app/components/status-tile.d.ts +1 -1
- package/dist/types/src/app/components/table.d.ts +1 -1
- package/dist/types/src/app/components/tabs.d.ts +4 -2
- package/dist/types/src/app/components/tag.d.ts +1 -1
- package/dist/types/src/app/components/text.d.ts +1 -1
- package/dist/types/src/app/components/textarea.d.ts +1 -1
- package/dist/types/src/app/components/timestamp.d.ts +1 -1
- package/dist/types/src/app/components/toast.d.ts +1 -1
- package/dist/types/src/app/components/toggle.d.ts +1 -1
- package/dist/types/src/app/context/hds-theme.d.ts +1 -1
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +13 -0
- package/dist/types/src/app/design-system/generated-token-values.d.ts +14 -1
- package/dist/types/src/app/hooks/useInteractionState.d.ts +7 -1
- package/dist/types/src/index.d.ts +126 -32
- package/dist/variables.css +33 -22
- package/docs/CONSUMING.md +2 -2
- package/hirobius.tokens.json +173 -79
- package/llms.txt +29 -7
- package/mcp/catalog.mjs +10 -7
- package/mcp/core-set.mjs +66 -0
- package/mcp/guide.mjs +9 -52
- package/package.json +28 -11
- package/public/hds-manifest.json +365 -207
- package/public/llms/components.txt +1 -1
- package/public/llms-full.txt +54 -32
- package/public/llms.txt +29 -7
- package/src/app/data/component-api.json +104 -71
- package/upgrade/index.json +215 -0
- package/upgrade/releases/0.17.0.json +962 -0
- package/upgrade/releases/0.18.0.json +8 -0
- package/upgrade/releases/0.19.0.json +233 -0
- package/upgrade/releases/0.19.1.json +8 -0
- package/upgrade/releases/0.20.0.json +5108 -0
- package/upgrade/releases/0.21.0.json +538 -0
- package/upgrade/releases/0.22.0.json +94 -0
- package/upgrade/releases/0.23.0.json +259 -0
- package/upgrade/schema.json +1102 -0
- package/dist/fonts/geist-mono-400.woff2 +0 -0
package/public/hds-manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "Hirobius Design System",
|
|
3
3
|
"description": "Three-tier design token system for Adrian Milsap's portfolio site. Tokens flow primitive → semantic → component. All visual decisions trace back to hirobius.tokens.json.",
|
|
4
4
|
"version": "1",
|
|
5
|
-
"generated": "2026-10-
|
|
5
|
+
"generated": "2026-10-09T05:30:51.055Z",
|
|
6
6
|
"source": "hirobius.tokens.json",
|
|
7
7
|
"format": "W3C DTCG 2025.10",
|
|
8
8
|
"docs": "https://hirobius-design-system.vercel.app/",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"consumeTypography": "hds.typeStyles.h1 (inline style object) — never Tailwind font classes"
|
|
29
29
|
},
|
|
30
30
|
"brand": {
|
|
31
|
-
"primaryColor": "#
|
|
31
|
+
"primaryColor": "#66b239",
|
|
32
32
|
"primaryColorToken": "semantic.accent.rest",
|
|
33
33
|
"font": "Satoshi variable 100–900, self-hosted",
|
|
34
34
|
"spacingBase": "4px",
|
|
@@ -391,7 +391,7 @@
|
|
|
391
391
|
"hidden": false,
|
|
392
392
|
"filePath": "src/app/components/alert.tsx",
|
|
393
393
|
"description": "Alert - compact feedback surface with contextual severity.",
|
|
394
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
394
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=33-34",
|
|
395
395
|
"figmaId": null,
|
|
396
396
|
"preview": {
|
|
397
397
|
"exportName": "Alert",
|
|
@@ -399,6 +399,7 @@
|
|
|
399
399
|
},
|
|
400
400
|
"consumers": [
|
|
401
401
|
"src/app/components/badge.tsx",
|
|
402
|
+
"src/app/components/callout.tsx",
|
|
402
403
|
"src/app/components/dialog.tsx",
|
|
403
404
|
"src/app/components/empty-state.tsx",
|
|
404
405
|
"src/app/components/toast.tsx",
|
|
@@ -479,7 +480,7 @@
|
|
|
479
480
|
"tier": "primitive",
|
|
480
481
|
"docExempt": false,
|
|
481
482
|
"sourcePath": "src/app/components/Alert.tsx",
|
|
482
|
-
"figmaLink": "https://www.figma.com/design/
|
|
483
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=33-34",
|
|
483
484
|
"props": {
|
|
484
485
|
"children": {
|
|
485
486
|
"type": "ReactNode"
|
|
@@ -547,7 +548,7 @@
|
|
|
547
548
|
"hidden": false,
|
|
548
549
|
"filePath": "src/app/components/code-block.tsx",
|
|
549
550
|
"description": "CodeBlock - code display with copy button and optional collapsible toggle.",
|
|
550
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
551
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-154",
|
|
551
552
|
"figmaId": null,
|
|
552
553
|
"preview": {
|
|
553
554
|
"exportName": "CodeBlock",
|
|
@@ -612,7 +613,7 @@
|
|
|
612
613
|
"tier": "primitive",
|
|
613
614
|
"docExempt": false,
|
|
614
615
|
"sourcePath": "src/app/components/CodeBlock.tsx",
|
|
615
|
-
"figmaLink": "https://www.figma.com/design/
|
|
616
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-154",
|
|
616
617
|
"storyFiles": [
|
|
617
618
|
"src/stories/code-block.stories.tsx"
|
|
618
619
|
],
|
|
@@ -622,7 +623,10 @@
|
|
|
622
623
|
"primitives-code-block--default",
|
|
623
624
|
"primitives-code-block--inline",
|
|
624
625
|
"primitives-code-block--json-highlighting"
|
|
625
|
-
]
|
|
626
|
+
],
|
|
627
|
+
"usage": {
|
|
628
|
+
"when": "Show a code sample with a copy button, optionally collapsed."
|
|
629
|
+
}
|
|
626
630
|
},
|
|
627
631
|
"Container": {
|
|
628
632
|
"category": "Layout",
|
|
@@ -721,7 +725,7 @@
|
|
|
721
725
|
"hidden": false,
|
|
722
726
|
"filePath": "src/app/components/disclosure.tsx",
|
|
723
727
|
"description": "Disclosure - compact disclosure surface for optional explanatory content.",
|
|
724
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
728
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-453",
|
|
725
729
|
"figmaId": null,
|
|
726
730
|
"preview": {
|
|
727
731
|
"exportName": "Disclosure",
|
|
@@ -825,7 +829,7 @@
|
|
|
825
829
|
}
|
|
826
830
|
],
|
|
827
831
|
"sourcePath": "src/app/components/Disclosure.tsx",
|
|
828
|
-
"figmaLink": "https://www.figma.com/design/
|
|
832
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-453",
|
|
829
833
|
"storyFiles": [
|
|
830
834
|
"src/stories/disclosure.stories.tsx"
|
|
831
835
|
],
|
|
@@ -854,7 +858,7 @@
|
|
|
854
858
|
"hidden": false,
|
|
855
859
|
"filePath": "src/app/components/divider.tsx",
|
|
856
860
|
"description": "Divider — semantic separator between content regions.",
|
|
857
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
861
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-26",
|
|
858
862
|
"figmaId": null,
|
|
859
863
|
"preview": {
|
|
860
864
|
"exportName": "Divider",
|
|
@@ -893,7 +897,7 @@
|
|
|
893
897
|
"tier": "primitive",
|
|
894
898
|
"docExempt": false,
|
|
895
899
|
"sourcePath": "src/app/components/Divider.tsx",
|
|
896
|
-
"figmaLink": "https://www.figma.com/design/
|
|
900
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-26",
|
|
897
901
|
"props": {
|
|
898
902
|
"orientation": {
|
|
899
903
|
"type": "enum",
|
|
@@ -951,7 +955,7 @@
|
|
|
951
955
|
"primitives-divider--with-spacing"
|
|
952
956
|
],
|
|
953
957
|
"usage": {
|
|
954
|
-
"when": "Separate two
|
|
958
|
+
"when": "Separate two blocks of content with a thin line.",
|
|
955
959
|
"whenNot": "Spacing alone would do, or the separation needs a container.",
|
|
956
960
|
"useInstead": [
|
|
957
961
|
{
|
|
@@ -1059,7 +1063,10 @@
|
|
|
1059
1063
|
"feedback-error-pattern--not-found",
|
|
1060
1064
|
"feedback-error-pattern--server-error",
|
|
1061
1065
|
"feedback-error-pattern--unauthorized"
|
|
1062
|
-
]
|
|
1066
|
+
],
|
|
1067
|
+
"usage": {
|
|
1068
|
+
"when": "Show an error with a short message and a Back button, in place or as a full page."
|
|
1069
|
+
}
|
|
1063
1070
|
},
|
|
1064
1071
|
"Grid": {
|
|
1065
1072
|
"category": "Layout",
|
|
@@ -1234,7 +1241,7 @@
|
|
|
1234
1241
|
"primitives-grid--two-column"
|
|
1235
1242
|
],
|
|
1236
1243
|
"usage": {
|
|
1237
|
-
"when": "Lay out content in
|
|
1244
|
+
"when": "Lay out content in columns that adapt to the screen width, or line up nested content with subgrid.",
|
|
1238
1245
|
"whenNot": "A single row or column, or styling a surface.",
|
|
1239
1246
|
"useInstead": [
|
|
1240
1247
|
{
|
|
@@ -1257,7 +1264,7 @@
|
|
|
1257
1264
|
"hidden": false,
|
|
1258
1265
|
"filePath": "src/app/components/icon.tsx",
|
|
1259
1266
|
"description": "Icon — semantic icon wrapper for Lucide icons.",
|
|
1260
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
1267
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=27-2",
|
|
1261
1268
|
"figmaId": null,
|
|
1262
1269
|
"preview": {
|
|
1263
1270
|
"exportName": "Icon",
|
|
@@ -1393,7 +1400,7 @@
|
|
|
1393
1400
|
"tier": "primitive",
|
|
1394
1401
|
"docExempt": false,
|
|
1395
1402
|
"sourcePath": "src/app/components/Icon.tsx",
|
|
1396
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
1403
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=27-2",
|
|
1397
1404
|
"storyFiles": [
|
|
1398
1405
|
"src/stories/icon.stories.tsx"
|
|
1399
1406
|
],
|
|
@@ -1406,7 +1413,7 @@
|
|
|
1406
1413
|
"primitives-icon--size-gallery"
|
|
1407
1414
|
],
|
|
1408
1415
|
"usage": {
|
|
1409
|
-
"when": "
|
|
1416
|
+
"when": "Show a Lucide icon at a set size and color.",
|
|
1410
1417
|
"whenNot": "A control someone can activate, or a picture that carries content.",
|
|
1411
1418
|
"useInstead": [
|
|
1412
1419
|
{
|
|
@@ -1428,7 +1435,7 @@
|
|
|
1428
1435
|
"hidden": false,
|
|
1429
1436
|
"filePath": "src/app/components/inline-code.tsx",
|
|
1430
1437
|
"description": "InlineCode — inline code chip for token paths, file paths, and code-adjacent prose.",
|
|
1431
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
1438
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-155",
|
|
1432
1439
|
"figmaId": null,
|
|
1433
1440
|
"preview": {
|
|
1434
1441
|
"exportName": "InlineCode",
|
|
@@ -1484,7 +1491,7 @@
|
|
|
1484
1491
|
"tier": "primitive",
|
|
1485
1492
|
"docExempt": false,
|
|
1486
1493
|
"sourcePath": "src/app/components/InlineCode.tsx",
|
|
1487
|
-
"figmaLink": "https://www.figma.com/design/
|
|
1494
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-155",
|
|
1488
1495
|
"storyFiles": [
|
|
1489
1496
|
"src/stories/inline-code.stories.tsx"
|
|
1490
1497
|
],
|
|
@@ -1505,7 +1512,7 @@
|
|
|
1505
1512
|
"hidden": false,
|
|
1506
1513
|
"filePath": "src/app/components/inline-link.tsx",
|
|
1507
1514
|
"description": "InlineLink ” inline navigation and external-link primitive for body copy.",
|
|
1508
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
1515
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-161",
|
|
1509
1516
|
"figmaId": null,
|
|
1510
1517
|
"preview": {
|
|
1511
1518
|
"exportName": "InlineLink",
|
|
@@ -1513,6 +1520,7 @@
|
|
|
1513
1520
|
},
|
|
1514
1521
|
"consumers": [
|
|
1515
1522
|
"src/app/components/button.tsx",
|
|
1523
|
+
"src/app/components/inline-link.test.tsx",
|
|
1516
1524
|
"src/app/components/text.tsx",
|
|
1517
1525
|
"src/stories/inline-link.stories.tsx",
|
|
1518
1526
|
"src/stories/lib/usage-description.test.ts"
|
|
@@ -1561,7 +1569,7 @@
|
|
|
1561
1569
|
"tier": "primitive",
|
|
1562
1570
|
"docExempt": false,
|
|
1563
1571
|
"sourcePath": "src/app/components/InlineLink.tsx",
|
|
1564
|
-
"figmaLink": "https://www.figma.com/design/
|
|
1572
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-161",
|
|
1565
1573
|
"storyFiles": [
|
|
1566
1574
|
"src/stories/inline-link.stories.tsx"
|
|
1567
1575
|
],
|
|
@@ -1594,7 +1602,7 @@
|
|
|
1594
1602
|
"hidden": false,
|
|
1595
1603
|
"filePath": "src/app/components/input.tsx",
|
|
1596
1604
|
"description": "Input — text field primitive with label, helper, and error slots.",
|
|
1597
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
1605
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=38-20",
|
|
1598
1606
|
"figmaId": null,
|
|
1599
1607
|
"preview": {
|
|
1600
1608
|
"exportName": "Input",
|
|
@@ -1846,7 +1854,7 @@
|
|
|
1846
1854
|
],
|
|
1847
1855
|
"tier": "primitive",
|
|
1848
1856
|
"docExempt": false,
|
|
1849
|
-
"figmaLink": "https://www.figma.com/design/
|
|
1857
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=38-20",
|
|
1850
1858
|
"storyFiles": [
|
|
1851
1859
|
"src/stories/input.stories.tsx"
|
|
1852
1860
|
],
|
|
@@ -1888,7 +1896,7 @@
|
|
|
1888
1896
|
"hidden": false,
|
|
1889
1897
|
"filePath": "src/app/components/segmented-control.tsx",
|
|
1890
1898
|
"description": "SegmentedControl \" segmented selection input for compact mutually-exclusive choices. The active×hover×pressed×disabled×secondary state matrix is expressed through `cva` compound variants keyed by `active` / `interaction` (the live-or-frozen-demo hover/pressed/rest sub-state) / `variant` / `disabled`, each resolving to the same `--semantic-*` custom properties the pre-Tailwind inline styles referenced — same tokens, same pixels, just Tailwind classes instead of a `style` object. Per ADR-015 this control keeps its own hover/focus tracking (per-segment `string | null` cardinality) rather than the shared `useInteractionState` single-element machine; only the class composition changed, not the state machine feeding it.",
|
|
1891
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
1899
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-334",
|
|
1892
1900
|
"figmaId": null,
|
|
1893
1901
|
"preview": {
|
|
1894
1902
|
"exportName": "SegmentedControl",
|
|
@@ -2004,7 +2012,7 @@
|
|
|
2004
2012
|
"tier": "primitive",
|
|
2005
2013
|
"docExempt": false,
|
|
2006
2014
|
"sourcePath": "src/app/components/SegmentedControl.tsx",
|
|
2007
|
-
"figmaLink": "https://www.figma.com/design/
|
|
2015
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-334",
|
|
2008
2016
|
"storyFiles": [
|
|
2009
2017
|
"src/stories/segmented-control.stories.tsx"
|
|
2010
2018
|
],
|
|
@@ -2208,7 +2216,7 @@
|
|
|
2208
2216
|
"primitives-stack--tight-gap"
|
|
2209
2217
|
],
|
|
2210
2218
|
"usage": {
|
|
2211
|
-
"when": "Space a row or column
|
|
2219
|
+
"when": "Space items in a row or column with even gaps.",
|
|
2212
2220
|
"whenNot": "Multi-column layout, or giving content a background or padding.",
|
|
2213
2221
|
"useInstead": [
|
|
2214
2222
|
{
|
|
@@ -2231,7 +2239,7 @@
|
|
|
2231
2239
|
"hidden": false,
|
|
2232
2240
|
"filePath": "src/app/components/table.tsx",
|
|
2233
2241
|
"description": "Table - structured data table primitive for documentation and compact UI matrices.",
|
|
2234
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
2242
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-300",
|
|
2235
2243
|
"figmaId": null,
|
|
2236
2244
|
"preview": {
|
|
2237
2245
|
"exportName": "Table",
|
|
@@ -2327,7 +2335,7 @@
|
|
|
2327
2335
|
"tier": "primitive",
|
|
2328
2336
|
"docExempt": false,
|
|
2329
2337
|
"sourcePath": "src/app/components/Table.tsx",
|
|
2330
|
-
"figmaLink": "https://www.figma.com/design/
|
|
2338
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-300",
|
|
2331
2339
|
"storyFiles": [
|
|
2332
2340
|
"src/stories/table.stories.tsx"
|
|
2333
2341
|
],
|
|
@@ -2364,7 +2372,7 @@
|
|
|
2364
2372
|
"hidden": false,
|
|
2365
2373
|
"filePath": "src/app/components/tag.tsx",
|
|
2366
2374
|
"description": "Tag — interactive filter and category chip. The outer <button> carries the accessible 44px hit target directly via the size token while the inner pill keeps the visible surface compact. Colors (background, border-color, color) live in the pill's cva variants, painted through `group-hover`/`group-active` so the pill reacts to interaction on the shared outer button (converted off the former .hds-tag-btn/.hds-tag-pill theme.css rules for #60 — same behavior, now token-driven Tailwind classes). The `active` prop (aria-pressed selected state) is not one of the variant contract's four axes — it's expressed as the pill's `selected` cva variant, carrying the same rest → hover → pressed → focus-visible state matrix the contract expects, just keyed by selection instead of tone/size/density.",
|
|
2367
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
2375
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=32-11",
|
|
2368
2376
|
"figmaId": null,
|
|
2369
2377
|
"preview": {
|
|
2370
2378
|
"exportName": "Tag",
|
|
@@ -2480,7 +2488,7 @@
|
|
|
2480
2488
|
"tier": "primitive",
|
|
2481
2489
|
"docExempt": false,
|
|
2482
2490
|
"sourcePath": "src/app/components/Tag.tsx",
|
|
2483
|
-
"figmaLink": "https://www.figma.com/design/
|
|
2491
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=32-11",
|
|
2484
2492
|
"storyFiles": [
|
|
2485
2493
|
"src/stories/tag.stories.tsx"
|
|
2486
2494
|
],
|
|
@@ -2511,7 +2519,7 @@
|
|
|
2511
2519
|
"hidden": false,
|
|
2512
2520
|
"filePath": "src/app/components/surface.tsx",
|
|
2513
2521
|
"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>",
|
|
2514
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
2522
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-27",
|
|
2515
2523
|
"figmaId": null,
|
|
2516
2524
|
"preview": {
|
|
2517
2525
|
"exportName": "Surface",
|
|
@@ -2606,7 +2614,7 @@
|
|
|
2606
2614
|
"tier": "primitive",
|
|
2607
2615
|
"docExempt": true,
|
|
2608
2616
|
"sourcePath": "src/app/components/Surface.tsx",
|
|
2609
|
-
"figmaLink": "https://www.figma.com/design/
|
|
2617
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=89-27",
|
|
2610
2618
|
"states": [
|
|
2611
2619
|
"default"
|
|
2612
2620
|
],
|
|
@@ -2621,7 +2629,7 @@
|
|
|
2621
2629
|
"primitives-surface--with-shadow"
|
|
2622
2630
|
],
|
|
2623
2631
|
"usage": {
|
|
2624
|
-
"when": "
|
|
2632
|
+
"when": "Give a block of content a background and padding, with no header or footer.",
|
|
2625
2633
|
"whenNot": "Page layout, section spacing, width constraints, or content that needs slots.",
|
|
2626
2634
|
"useInstead": [
|
|
2627
2635
|
{
|
|
@@ -2644,7 +2652,7 @@
|
|
|
2644
2652
|
"hidden": false,
|
|
2645
2653
|
"filePath": "src/app/components/card.tsx",
|
|
2646
2654
|
"description": "Tagged per-export, not on the file block: this module exports eight components and a file-level @figma would hand all eight this one node.",
|
|
2647
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
2655
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=39-11",
|
|
2648
2656
|
"figmaId": null,
|
|
2649
2657
|
"consumers": [
|
|
2650
2658
|
"src/app/components/box-sx.test.ts",
|
|
@@ -2654,6 +2662,7 @@
|
|
|
2654
2662
|
"src/app/components/destructive-section.tsx",
|
|
2655
2663
|
"src/app/components/empty-state.tsx",
|
|
2656
2664
|
"src/app/components/field.tsx",
|
|
2665
|
+
"src/app/components/focus-visible.test.tsx",
|
|
2657
2666
|
"src/app/components/grid.tsx",
|
|
2658
2667
|
"src/app/components/metadata-list.tsx",
|
|
2659
2668
|
"src/app/components/metric-tiles.tsx",
|
|
@@ -2818,7 +2827,7 @@
|
|
|
2818
2827
|
"Body",
|
|
2819
2828
|
"Footer"
|
|
2820
2829
|
],
|
|
2821
|
-
"figmaLink": "https://www.figma.com/design/
|
|
2830
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=39-11",
|
|
2822
2831
|
"propConstraints": {
|
|
2823
2832
|
"bordered": {
|
|
2824
2833
|
"type": "boolean"
|
|
@@ -2916,7 +2925,7 @@
|
|
|
2916
2925
|
"a11yRules": [],
|
|
2917
2926
|
"categorySource": "jsdoc",
|
|
2918
2927
|
"governedCategory": true,
|
|
2919
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
2928
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2022-31",
|
|
2920
2929
|
"figmaId": null,
|
|
2921
2930
|
"preview": {
|
|
2922
2931
|
"exportName": "Text",
|
|
@@ -2953,7 +2962,7 @@
|
|
|
2953
2962
|
"tier": "primitive",
|
|
2954
2963
|
"docExempt": true,
|
|
2955
2964
|
"sourcePath": "src/app/components/Text.tsx",
|
|
2956
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
2965
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2022-31",
|
|
2957
2966
|
"storyFiles": [
|
|
2958
2967
|
"src/stories/text.stories.tsx"
|
|
2959
2968
|
],
|
|
@@ -2992,7 +3001,7 @@
|
|
|
2992
3001
|
"docExempt": true,
|
|
2993
3002
|
"filePath": "src/app/components/dialog.tsx",
|
|
2994
3003
|
"description": "Tagged per-export, not on the file block: this module exports ten components and a file-level @figma would hand all ten this one node.",
|
|
2995
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
3004
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-27",
|
|
2996
3005
|
"figmaId": null,
|
|
2997
3006
|
"tier": "primitive",
|
|
2998
3007
|
"preview": {
|
|
@@ -3179,7 +3188,7 @@
|
|
|
3179
3188
|
"Description",
|
|
3180
3189
|
"Close"
|
|
3181
3190
|
],
|
|
3182
|
-
"figmaLink": "https://www.figma.com/design/
|
|
3191
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-27",
|
|
3183
3192
|
"propConstraints": {
|
|
3184
3193
|
"defaultOpen": {
|
|
3185
3194
|
"type": "boolean"
|
|
@@ -3251,9 +3260,9 @@
|
|
|
3251
3260
|
"docExempt": false,
|
|
3252
3261
|
"filePath": "src/app/components/button.tsx",
|
|
3253
3262
|
"description": "Triggers an action when activated.",
|
|
3254
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
3263
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=28-138",
|
|
3255
3264
|
"figmaId": null,
|
|
3256
|
-
"figmaLink": "https://www.figma.com/design/
|
|
3265
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=28-138",
|
|
3257
3266
|
"tier": "primitive",
|
|
3258
3267
|
"preview": {
|
|
3259
3268
|
"exportName": "Button",
|
|
@@ -3518,7 +3527,7 @@
|
|
|
3518
3527
|
"primitives-button--tone-matrix"
|
|
3519
3528
|
],
|
|
3520
3529
|
"usage": {
|
|
3521
|
-
"when": "
|
|
3530
|
+
"when": "Run an action, such as submit, save or open a dialog. For an icon-only control pass iconOnly, iconLeft and label; for an on/off toggle pass pressed.",
|
|
3522
3531
|
"whenNot": "Navigating to another page, where a link is the correct element.",
|
|
3523
3532
|
"useInstead": [
|
|
3524
3533
|
{
|
|
@@ -3536,10 +3545,10 @@
|
|
|
3536
3545
|
"hidden": false,
|
|
3537
3546
|
"docExempt": false,
|
|
3538
3547
|
"filePath": "src/app/components/callout.tsx",
|
|
3539
|
-
"description": "Tone-driven
|
|
3540
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
3548
|
+
"description": "Tone-driven tinted callout for notes, quotes, hypotheses — the same feedback fill language as Alert, without Alert's icon or status role.",
|
|
3549
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-85",
|
|
3541
3550
|
"figmaId": null,
|
|
3542
|
-
"figmaLink": "https://www.figma.com/design/
|
|
3551
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-85",
|
|
3543
3552
|
"tier": "primitive",
|
|
3544
3553
|
"preview": {
|
|
3545
3554
|
"exportName": "Callout",
|
|
@@ -3614,9 +3623,9 @@
|
|
|
3614
3623
|
"docExempt": false,
|
|
3615
3624
|
"filePath": "src/app/components/empty-state.tsx",
|
|
3616
3625
|
"description": "EmptyState — consistent no-data placeholder for lists, grids, and sections.",
|
|
3617
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
3626
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-352",
|
|
3618
3627
|
"figmaId": null,
|
|
3619
|
-
"figmaLink": "https://www.figma.com/design/
|
|
3628
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-352",
|
|
3620
3629
|
"tier": "primitive",
|
|
3621
3630
|
"preview": {
|
|
3622
3631
|
"exportName": "EmptyState",
|
|
@@ -3684,9 +3693,9 @@
|
|
|
3684
3693
|
"docExempt": false,
|
|
3685
3694
|
"filePath": "src/app/components/field.tsx",
|
|
3686
3695
|
"description": "Caption label paired with a value — used in metadata grids and read-only forms.",
|
|
3687
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
3696
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=85-81",
|
|
3688
3697
|
"figmaId": null,
|
|
3689
|
-
"figmaLink": "https://www.figma.com/design/
|
|
3698
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=85-81",
|
|
3690
3699
|
"tier": "primitive",
|
|
3691
3700
|
"preview": {
|
|
3692
3701
|
"exportName": "Field",
|
|
@@ -3876,7 +3885,10 @@
|
|
|
3876
3885
|
"patterns-layout--detail-page",
|
|
3877
3886
|
"patterns-layout--empty-state-screen",
|
|
3878
3887
|
"patterns-layout--form-screen"
|
|
3879
|
-
]
|
|
3888
|
+
],
|
|
3889
|
+
"usage": {
|
|
3890
|
+
"when": "Wrap a screen in the standard width and padding."
|
|
3891
|
+
}
|
|
3880
3892
|
},
|
|
3881
3893
|
"Stat": {
|
|
3882
3894
|
"category": "Display",
|
|
@@ -3886,9 +3898,9 @@
|
|
|
3886
3898
|
"docExempt": false,
|
|
3887
3899
|
"filePath": "src/app/components/stat.tsx",
|
|
3888
3900
|
"description": "Headline metric — large value, caption label, optional sub-line.",
|
|
3889
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
3901
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-247",
|
|
3890
3902
|
"figmaId": null,
|
|
3891
|
-
"figmaLink": "https://www.figma.com/design/
|
|
3903
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-247",
|
|
3892
3904
|
"tier": "primitive",
|
|
3893
3905
|
"preview": {
|
|
3894
3906
|
"exportName": "Stat",
|
|
@@ -3989,9 +4001,9 @@
|
|
|
3989
4001
|
"docExempt": false,
|
|
3990
4002
|
"filePath": "src/app/components/status-list-item.tsx",
|
|
3991
4003
|
"description": "Status dot + title row with optional muted notes and trailing slot (e.g. badge).",
|
|
3992
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4004
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-350",
|
|
3993
4005
|
"figmaId": null,
|
|
3994
|
-
"figmaLink": "https://www.figma.com/design/
|
|
4006
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-350",
|
|
3995
4007
|
"tier": "pattern",
|
|
3996
4008
|
"preview": {
|
|
3997
4009
|
"exportName": "StatusListItem",
|
|
@@ -4071,9 +4083,9 @@
|
|
|
4071
4083
|
"docExempt": false,
|
|
4072
4084
|
"filePath": "src/app/components/status-tile.tsx",
|
|
4073
4085
|
"description": "Block-layout sibling of StatusListItem. Renders a raised surface tile with title, optional muted notes, and a trailing slot for a badge or affordance. Status colour belongs in the trailing slot, never as a left rule on the tile — every tile should look the same so feedback signals stay reserved for genuinely interrupting states.",
|
|
4074
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4086
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-292",
|
|
4075
4087
|
"figmaId": null,
|
|
4076
|
-
"figmaLink": "https://www.figma.com/design/
|
|
4088
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-292",
|
|
4077
4089
|
"tier": "pattern",
|
|
4078
4090
|
"preview": {
|
|
4079
4091
|
"exportName": "StatusTile",
|
|
@@ -4240,9 +4252,9 @@
|
|
|
4240
4252
|
"governedCategory": true,
|
|
4241
4253
|
"hidden": false,
|
|
4242
4254
|
"docExempt": false,
|
|
4243
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4255
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=31-15",
|
|
4244
4256
|
"figmaId": null,
|
|
4245
|
-
"figmaLink": "https://www.figma.com/design/
|
|
4257
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=31-15",
|
|
4246
4258
|
"tier": "primitive",
|
|
4247
4259
|
"preview": {
|
|
4248
4260
|
"exportName": "Badge",
|
|
@@ -4308,9 +4320,9 @@
|
|
|
4308
4320
|
"docExempt": false,
|
|
4309
4321
|
"filePath": "src/app/components/asset-img.tsx",
|
|
4310
4322
|
"description": "AssetImg - responsive asset frame with fallback placeholder handling. Contexts: default, lightbox, and detail.",
|
|
4311
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
4323
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2041-67",
|
|
4312
4324
|
"figmaId": null,
|
|
4313
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
4325
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2041-67",
|
|
4314
4326
|
"tier": "primitive",
|
|
4315
4327
|
"preview": {
|
|
4316
4328
|
"exportName": "AssetImg",
|
|
@@ -4472,7 +4484,10 @@
|
|
|
4472
4484
|
"primitives-asset-img--lightbox-context",
|
|
4473
4485
|
"primitives-asset-img--placeholder-fallback",
|
|
4474
4486
|
"primitives-asset-img--with-title"
|
|
4475
|
-
]
|
|
4487
|
+
],
|
|
4488
|
+
"usage": {
|
|
4489
|
+
"when": "Show an image that scales to its frame, with a placeholder if it fails to load."
|
|
4490
|
+
}
|
|
4476
4491
|
},
|
|
4477
4492
|
"Tabs": {
|
|
4478
4493
|
"category": "Navigation",
|
|
@@ -4482,9 +4497,9 @@
|
|
|
4482
4497
|
"docExempt": false,
|
|
4483
4498
|
"filePath": "src/app/components/tabs.tsx",
|
|
4484
4499
|
"description": "The tab set itself. Tagged here rather than in the file block because TabsList and TabsContent share this module and have no Figma node of their own — a file-level @figma would silently claim this node for all four.",
|
|
4485
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4500
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=86-89",
|
|
4486
4501
|
"figmaId": null,
|
|
4487
|
-
"figmaLink": "https://www.figma.com/design/
|
|
4502
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=86-89",
|
|
4488
4503
|
"tier": "primitive",
|
|
4489
4504
|
"preview": {
|
|
4490
4505
|
"exportName": "Tabs",
|
|
@@ -4494,6 +4509,7 @@
|
|
|
4494
4509
|
"src/app/components/breadcrumb.tsx",
|
|
4495
4510
|
"src/app/components/disclosure.tsx",
|
|
4496
4511
|
"src/app/components/segmented-control.tsx",
|
|
4512
|
+
"src/app/components/tabs.test.tsx",
|
|
4497
4513
|
"src/stories/combobox.stories.tsx",
|
|
4498
4514
|
"src/stories/patterns-client-detail.stories.tsx",
|
|
4499
4515
|
"src/stories/tabs.stories.tsx"
|
|
@@ -4577,7 +4593,7 @@
|
|
|
4577
4593
|
"hidden": false,
|
|
4578
4594
|
"docExempt": false,
|
|
4579
4595
|
"filePath": "src/app/components/tabs.tsx",
|
|
4580
|
-
"description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
|
|
4596
|
+
"description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE). The trigger's focus ring is `ring-inset` because `overflow-x-auto` clips anything drawn outside the list box (an outer ring was cut on the first/last tab).",
|
|
4581
4597
|
"figmaUrl": null,
|
|
4582
4598
|
"figmaId": null,
|
|
4583
4599
|
"figmaLink": null,
|
|
@@ -4587,6 +4603,7 @@
|
|
|
4587
4603
|
"sizing": "panel"
|
|
4588
4604
|
},
|
|
4589
4605
|
"consumers": [
|
|
4606
|
+
"src/app/components/tabs.test.tsx",
|
|
4590
4607
|
"src/stories/patterns-client-detail.stories.tsx",
|
|
4591
4608
|
"src/stories/tabs.stories.tsx"
|
|
4592
4609
|
],
|
|
@@ -4629,7 +4646,7 @@
|
|
|
4629
4646
|
"hidden": false,
|
|
4630
4647
|
"docExempt": false,
|
|
4631
4648
|
"filePath": "src/app/components/tabs.tsx",
|
|
4632
|
-
"description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
|
|
4649
|
+
"description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE). The trigger's focus ring is `ring-inset` because `overflow-x-auto` clips anything drawn outside the list box (an outer ring was cut on the first/last tab).",
|
|
4633
4650
|
"figmaUrl": null,
|
|
4634
4651
|
"figmaId": null,
|
|
4635
4652
|
"figmaLink": null,
|
|
@@ -4639,6 +4656,7 @@
|
|
|
4639
4656
|
"sizing": "panel"
|
|
4640
4657
|
},
|
|
4641
4658
|
"consumers": [
|
|
4659
|
+
"src/app/components/tabs.test.tsx",
|
|
4642
4660
|
"src/stories/patterns-client-detail.stories.tsx",
|
|
4643
4661
|
"src/stories/tabs.stories.tsx"
|
|
4644
4662
|
],
|
|
@@ -4678,7 +4696,7 @@
|
|
|
4678
4696
|
"hidden": false,
|
|
4679
4697
|
"docExempt": false,
|
|
4680
4698
|
"filePath": "src/app/components/tabs.tsx",
|
|
4681
|
-
"description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE).",
|
|
4699
|
+
"description": "Tabs — Radix-backed underline tabs (Root, List, Trigger, Content). Underline pattern math: - TabsList carries `border-b border-border/40` (the divider, half-strength so it anchors the strip without competing with content). - TabsTrigger has `border-b-2 border-transparent -mb-px` at rest. The `-mb-px` offsets the trigger DOWN by 1px so the trigger sits on top of the list divider; the active 2px bottom border visually REPLACES that 1px segment instead of stacking on it. - Active state pairs the underline with a soft `bg-accent/5` tint that extends down into TabsContent — the active tab visually \"claims\" its content panel (folder-tab affordance, modern-soft). Overflow: TabsList is horizontally scrollable (`overflow-x-auto whitespace-nowrap`) for cases like /ops/atlas with 8 tabs at narrow viewports. Scrollbar chrome is hidden cross-browser (-webkit / firefox / IE). The trigger's focus ring is `ring-inset` because `overflow-x-auto` clips anything drawn outside the list box (an outer ring was cut on the first/last tab).",
|
|
4682
4700
|
"figmaUrl": null,
|
|
4683
4701
|
"figmaId": null,
|
|
4684
4702
|
"figmaLink": null,
|
|
@@ -4688,6 +4706,7 @@
|
|
|
4688
4706
|
"sizing": "panel"
|
|
4689
4707
|
},
|
|
4690
4708
|
"consumers": [
|
|
4709
|
+
"src/app/components/tabs.test.tsx",
|
|
4691
4710
|
"src/stories/patterns-client-detail.stories.tsx",
|
|
4692
4711
|
"src/stories/tabs.stories.tsx"
|
|
4693
4712
|
],
|
|
@@ -4726,7 +4745,7 @@
|
|
|
4726
4745
|
"hidden": false,
|
|
4727
4746
|
"filePath": "src/app/components/radio.tsx",
|
|
4728
4747
|
"description": "Radio — radio button with animated selection indicator.",
|
|
4729
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4748
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=36-17",
|
|
4730
4749
|
"figmaId": null,
|
|
4731
4750
|
"preview": {
|
|
4732
4751
|
"exportName": "Radio",
|
|
@@ -4734,6 +4753,7 @@
|
|
|
4734
4753
|
},
|
|
4735
4754
|
"consumers": [
|
|
4736
4755
|
"src/app/components/checkbox.tsx",
|
|
4756
|
+
"src/app/components/focus-visible.test.tsx",
|
|
4737
4757
|
"src/app/components/radio.test.tsx",
|
|
4738
4758
|
"src/app/components/segmented-control.tsx",
|
|
4739
4759
|
"src/app/components/toggle.tsx",
|
|
@@ -4776,7 +4796,7 @@
|
|
|
4776
4796
|
"componentProperties": [],
|
|
4777
4797
|
"tier": "primitive",
|
|
4778
4798
|
"docExempt": false,
|
|
4779
|
-
"figmaLink": "https://www.figma.com/design/
|
|
4799
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=36-17",
|
|
4780
4800
|
"storyFiles": [
|
|
4781
4801
|
"src/stories/radio.stories.tsx"
|
|
4782
4802
|
],
|
|
@@ -4814,7 +4834,7 @@
|
|
|
4814
4834
|
"hidden": false,
|
|
4815
4835
|
"filePath": "src/app/components/select.tsx",
|
|
4816
4836
|
"description": "Select — dropdown selector built on Radix Select (ADR-001 Radix convention). Radix owns the listbox a11y contract: managed focus + active-descendant, typeahead, full keyboard (Home/End/PageUp-Down/wrap), Popper collision/flip positioning, and dismissal. The HDS surface is styled with the token-backed Tailwind idiom used by tabs.tsx / command-palette.tsx; `ref` targets the trigger button.",
|
|
4817
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4837
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-49",
|
|
4818
4838
|
"figmaId": null,
|
|
4819
4839
|
"preview": {
|
|
4820
4840
|
"exportName": "Select",
|
|
@@ -4891,7 +4911,7 @@
|
|
|
4891
4911
|
"componentProperties": [],
|
|
4892
4912
|
"tier": "primitive",
|
|
4893
4913
|
"docExempt": false,
|
|
4894
|
-
"figmaLink": "https://www.figma.com/design/
|
|
4914
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-49",
|
|
4895
4915
|
"storyFiles": [
|
|
4896
4916
|
"src/stories/select.stories.tsx"
|
|
4897
4917
|
],
|
|
@@ -4953,7 +4973,7 @@
|
|
|
4953
4973
|
"hidden": false,
|
|
4954
4974
|
"filePath": "src/app/components/slider.tsx",
|
|
4955
4975
|
"description": "Slider — range slider with label and value display.",
|
|
4956
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
4976
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-265",
|
|
4957
4977
|
"figmaId": null,
|
|
4958
4978
|
"preview": {
|
|
4959
4979
|
"exportName": "Slider",
|
|
@@ -5000,7 +5020,7 @@
|
|
|
5000
5020
|
"componentProperties": [],
|
|
5001
5021
|
"tier": "primitive",
|
|
5002
5022
|
"docExempt": false,
|
|
5003
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5023
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-265",
|
|
5004
5024
|
"storyFiles": [
|
|
5005
5025
|
"src/stories/slider.stories.tsx"
|
|
5006
5026
|
],
|
|
@@ -5029,7 +5049,7 @@
|
|
|
5029
5049
|
"hidden": false,
|
|
5030
5050
|
"filePath": "src/app/components/toggle.tsx",
|
|
5031
5051
|
"description": "Toggle — boolean on/off toggle with animated thumb.",
|
|
5032
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5052
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=37-19",
|
|
5033
5053
|
"figmaId": null,
|
|
5034
5054
|
"preview": {
|
|
5035
5055
|
"exportName": "Toggle",
|
|
@@ -5037,6 +5057,7 @@
|
|
|
5037
5057
|
},
|
|
5038
5058
|
"consumers": [
|
|
5039
5059
|
"src/app/components/checkbox.tsx",
|
|
5060
|
+
"src/app/components/focus-visible.test.tsx",
|
|
5040
5061
|
"src/app/components/radio.tsx",
|
|
5041
5062
|
"src/app/components/toggle.test.tsx",
|
|
5042
5063
|
"src/app/hooks/useInteractionState.test.ts",
|
|
@@ -5076,7 +5097,7 @@
|
|
|
5076
5097
|
"componentProperties": [],
|
|
5077
5098
|
"tier": "primitive",
|
|
5078
5099
|
"docExempt": false,
|
|
5079
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5100
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=37-19",
|
|
5080
5101
|
"storyFiles": [
|
|
5081
5102
|
"src/stories/toggle.stories.tsx"
|
|
5082
5103
|
],
|
|
@@ -5111,9 +5132,9 @@
|
|
|
5111
5132
|
"docExempt": false,
|
|
5112
5133
|
"filePath": "src/app/components/avatar.tsx",
|
|
5113
5134
|
"description": "Circular avatar. Renders the image when available, else initials from `alt`.",
|
|
5114
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5135
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=34-18",
|
|
5115
5136
|
"figmaId": null,
|
|
5116
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5137
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=34-18",
|
|
5117
5138
|
"tier": "primitive",
|
|
5118
5139
|
"preview": {
|
|
5119
5140
|
"exportName": "Avatar",
|
|
@@ -5196,9 +5217,9 @@
|
|
|
5196
5217
|
"docExempt": false,
|
|
5197
5218
|
"filePath": "src/app/components/progress.tsx",
|
|
5198
5219
|
"description": "Linear bar or circular ring. Determinate when `value` is a number, else indeterminate.",
|
|
5199
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5220
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-91",
|
|
5200
5221
|
"figmaId": null,
|
|
5201
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5222
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-91",
|
|
5202
5223
|
"tier": "primitive",
|
|
5203
5224
|
"preview": {
|
|
5204
5225
|
"exportName": "Progress",
|
|
@@ -5301,9 +5322,9 @@
|
|
|
5301
5322
|
"docExempt": false,
|
|
5302
5323
|
"filePath": "src/app/components/skeleton.tsx",
|
|
5303
5324
|
"description": "Decorative loading placeholder. Marked aria-hidden — announce the loading state on the surrounding region (e.g. aria-busy) rather than per skeleton.",
|
|
5304
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5325
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-95",
|
|
5305
5326
|
"figmaId": null,
|
|
5306
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5327
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-95",
|
|
5307
5328
|
"tier": "primitive",
|
|
5308
5329
|
"preview": {
|
|
5309
5330
|
"exportName": "Skeleton",
|
|
@@ -5380,9 +5401,9 @@
|
|
|
5380
5401
|
"docExempt": false,
|
|
5381
5402
|
"filePath": "src/app/components/spinner.tsx",
|
|
5382
5403
|
"description": "Indeterminate spinner. Inherits the surrounding text color via currentColor.",
|
|
5383
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5404
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-106",
|
|
5384
5405
|
"figmaId": null,
|
|
5385
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5406
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=88-106",
|
|
5386
5407
|
"tier": "primitive",
|
|
5387
5408
|
"preview": {
|
|
5388
5409
|
"exportName": "Spinner",
|
|
@@ -5453,9 +5474,9 @@
|
|
|
5453
5474
|
"docExempt": false,
|
|
5454
5475
|
"filePath": "src/app/components/breadcrumb.tsx",
|
|
5455
5476
|
"description": "Breadcrumb trail. Links route through the HDS router seam (plain anchors with no router, client-side nav when a router adapter is provided). The final item is marked aria-current=\"page\".",
|
|
5456
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5477
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=86-159",
|
|
5457
5478
|
"figmaId": null,
|
|
5458
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5479
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=86-159",
|
|
5459
5480
|
"tier": "pattern",
|
|
5460
5481
|
"preview": {
|
|
5461
5482
|
"exportName": "Breadcrumb",
|
|
@@ -5522,9 +5543,9 @@
|
|
|
5522
5543
|
"docExempt": false,
|
|
5523
5544
|
"filePath": "src/app/components/pagination.tsx",
|
|
5524
5545
|
"description": "Paged navigation with first/last anchors, sibling pages, and ellipses.",
|
|
5525
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5546
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=86-194",
|
|
5526
5547
|
"figmaId": null,
|
|
5527
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5548
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=86-194",
|
|
5528
5549
|
"tier": "pattern",
|
|
5529
5550
|
"preview": {
|
|
5530
5551
|
"exportName": "Pagination",
|
|
@@ -5594,9 +5615,9 @@
|
|
|
5594
5615
|
"docExempt": true,
|
|
5595
5616
|
"filePath": "src/app/components/toast.tsx",
|
|
5596
5617
|
"description": "Provider + viewport for the toast system. Wrap the app root once.",
|
|
5597
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5618
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-367",
|
|
5598
5619
|
"figmaId": null,
|
|
5599
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5620
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-367",
|
|
5600
5621
|
"tier": "pattern",
|
|
5601
5622
|
"preview": {
|
|
5602
5623
|
"exportName": "ToastProvider",
|
|
@@ -5666,9 +5687,9 @@
|
|
|
5666
5687
|
"docExempt": true,
|
|
5667
5688
|
"filePath": "src/app/components/combobox.tsx",
|
|
5668
5689
|
"description": "Combobox — searchable single- or multi-select (Popover + filtered listbox). A select-with-search built on the HDS Popover. The trigger shows the current selection (with `multiple`, a count and a removable chip per value); opening reveals a search field that filters the option list. Full keyboard support (↑/↓ to move, Enter to choose, Esc/outside-click to close) and listbox/option ARIA. Controlled via `value` + `onChange`. <Combobox options={[{ value: 'us', label: 'United States' }, …]} value={country} onChange={setCountry} placeholder=\"Select a country\" />",
|
|
5669
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5690
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-237",
|
|
5670
5691
|
"figmaId": null,
|
|
5671
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5692
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=82-237",
|
|
5672
5693
|
"tier": "pattern",
|
|
5673
5694
|
"preview": {
|
|
5674
5695
|
"exportName": "Combobox",
|
|
@@ -5780,7 +5801,7 @@
|
|
|
5780
5801
|
},
|
|
5781
5802
|
{
|
|
5782
5803
|
"keys": "ArrowDown/ArrowUp",
|
|
5783
|
-
"effect": "Moves the active option and wraps at the ends."
|
|
5804
|
+
"effect": "Moves the active option, skipping disabled ones, and wraps at the ends."
|
|
5784
5805
|
},
|
|
5785
5806
|
{
|
|
5786
5807
|
"keys": "Character",
|
|
@@ -5809,9 +5830,9 @@
|
|
|
5809
5830
|
"docExempt": true,
|
|
5810
5831
|
"filePath": "src/app/components/form.tsx",
|
|
5811
5832
|
"description": "Styled `<form>` with consistent vertical field rhythm. Tagged per-export: FormField and FormFieldShell share this module and have no Figma node, so a file-level @figma would claim this one for all three.",
|
|
5812
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
5833
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=85-94",
|
|
5813
5834
|
"figmaId": null,
|
|
5814
|
-
"figmaLink": "https://www.figma.com/design/
|
|
5835
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=85-94",
|
|
5815
5836
|
"tier": "pattern",
|
|
5816
5837
|
"preview": {
|
|
5817
5838
|
"exportName": "Form",
|
|
@@ -5845,7 +5866,10 @@
|
|
|
5845
5866
|
"patterns-form--default",
|
|
5846
5867
|
"patterns-form--with-description",
|
|
5847
5868
|
"patterns-form--with-error"
|
|
5848
|
-
]
|
|
5869
|
+
],
|
|
5870
|
+
"usage": {
|
|
5871
|
+
"when": "Wrap form fields so they stack with even spacing."
|
|
5872
|
+
}
|
|
5849
5873
|
},
|
|
5850
5874
|
"FormField": {
|
|
5851
5875
|
"category": "Inputs",
|
|
@@ -6084,9 +6108,9 @@
|
|
|
6084
6108
|
"docExempt": false,
|
|
6085
6109
|
"filePath": "src/app/components/avatar-group.tsx",
|
|
6086
6110
|
"description": "Renders up to `max` overlapping avatars followed by a `+N` overflow chip.",
|
|
6087
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6111
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2030-63",
|
|
6088
6112
|
"figmaId": null,
|
|
6089
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6113
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2030-63",
|
|
6090
6114
|
"tier": "primitive",
|
|
6091
6115
|
"preview": {
|
|
6092
6116
|
"exportName": "AvatarGroup",
|
|
@@ -6140,9 +6164,9 @@
|
|
|
6140
6164
|
"docExempt": false,
|
|
6141
6165
|
"filePath": "src/app/components/blockquote.tsx",
|
|
6142
6166
|
"description": "A quoted passage; pass `cite` for the source URL and `attribution` for a byline.",
|
|
6143
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6167
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2024-18",
|
|
6144
6168
|
"figmaId": null,
|
|
6145
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6169
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2024-18",
|
|
6146
6170
|
"tier": "primitive",
|
|
6147
6171
|
"preview": {
|
|
6148
6172
|
"exportName": "Blockquote",
|
|
@@ -6193,9 +6217,9 @@
|
|
|
6193
6217
|
"docExempt": false,
|
|
6194
6218
|
"filePath": "src/app/components/kbd.tsx",
|
|
6195
6219
|
"description": "Renders a keyboard key or shortcut token, e.g. `<Kbd>⌘K</Kbd>`.",
|
|
6196
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6220
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2026-9",
|
|
6197
6221
|
"figmaId": null,
|
|
6198
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6222
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2026-9",
|
|
6199
6223
|
"tier": "primitive",
|
|
6200
6224
|
"preview": {
|
|
6201
6225
|
"exportName": "Kbd",
|
|
@@ -6254,9 +6278,9 @@
|
|
|
6254
6278
|
"docExempt": false,
|
|
6255
6279
|
"filePath": "src/app/components/timestamp.tsx",
|
|
6256
6280
|
"description": "Presents a date/time with a machine-readable `dateTime` for accessibility.",
|
|
6257
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6281
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2031-11",
|
|
6258
6282
|
"figmaId": null,
|
|
6259
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6283
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2031-11",
|
|
6260
6284
|
"tier": "primitive",
|
|
6261
6285
|
"preview": {
|
|
6262
6286
|
"exportName": "Timestamp",
|
|
@@ -6367,9 +6391,9 @@
|
|
|
6367
6391
|
"docExempt": false,
|
|
6368
6392
|
"filePath": "src/app/components/metadata-list.tsx",
|
|
6369
6393
|
"description": "Renders object metadata as a semantic `<dl>` of term/description pairs.",
|
|
6370
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6394
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2041-47",
|
|
6371
6395
|
"figmaId": null,
|
|
6372
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6396
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2041-47",
|
|
6373
6397
|
"tier": "pattern",
|
|
6374
6398
|
"preview": {
|
|
6375
6399
|
"exportName": "MetadataList",
|
|
@@ -6430,9 +6454,9 @@
|
|
|
6430
6454
|
"docExempt": true,
|
|
6431
6455
|
"filePath": "src/app/components/alert-dialog.tsx",
|
|
6432
6456
|
"description": "AlertDialog root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
|
|
6433
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6457
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2035-24",
|
|
6434
6458
|
"figmaId": null,
|
|
6435
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
6459
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2035-24",
|
|
6436
6460
|
"tier": "primitive",
|
|
6437
6461
|
"preview": {
|
|
6438
6462
|
"exportName": "AlertDialog",
|
|
@@ -6877,6 +6901,9 @@
|
|
|
6877
6901
|
"primitives-reveal--animations",
|
|
6878
6902
|
"primitives-reveal--scale-reveal-scene"
|
|
6879
6903
|
],
|
|
6904
|
+
"usage": {
|
|
6905
|
+
"when": "Fade content in as it scrolls into view."
|
|
6906
|
+
},
|
|
6880
6907
|
"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."
|
|
6881
6908
|
},
|
|
6882
6909
|
"Textarea": {
|
|
@@ -6887,9 +6914,9 @@
|
|
|
6887
6914
|
"docExempt": false,
|
|
6888
6915
|
"filePath": "src/app/components/textarea.tsx",
|
|
6889
6916
|
"description": "Textarea — multi-line text field primitive with label, helper, and error slots. Mirrors Input's shell + token skin as a native `<textarea>`. Figma parity: the four states Default / Focus / Error / Disabled map to the focus-ring, `error`, and `disabled` treatments below.",
|
|
6890
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
6917
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=85-14",
|
|
6891
6918
|
"figmaId": null,
|
|
6892
|
-
"figmaLink": "https://www.figma.com/design/
|
|
6919
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=85-14",
|
|
6893
6920
|
"tier": "primitive",
|
|
6894
6921
|
"preview": {
|
|
6895
6922
|
"exportName": "Textarea",
|
|
@@ -6899,6 +6926,7 @@
|
|
|
6899
6926
|
"src/app/components/form-control.ts",
|
|
6900
6927
|
"src/app/components/input.tsx",
|
|
6901
6928
|
"src/app/components/select.tsx",
|
|
6929
|
+
"src/app/components/textarea.test.tsx",
|
|
6902
6930
|
"src/stories/patterns-client-detail.stories.tsx",
|
|
6903
6931
|
"src/stories/textarea.stories.tsx"
|
|
6904
6932
|
],
|
|
@@ -6974,7 +7002,7 @@
|
|
|
6974
7002
|
"hidden": false,
|
|
6975
7003
|
"docExempt": false,
|
|
6976
7004
|
"filePath": "src/app/components/card.tsx",
|
|
6977
|
-
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`.
|
|
7005
|
+
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. The default variant is BORDERLESS at rest (12d-3 outline rule) — depth comes from whitespace/dividers, not an edge. A resting 1px border is opt-in via `bordered` (border.default), a feedback `tone`, or `accent` (border.accent). Elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
|
|
6978
7006
|
"figmaUrl": null,
|
|
6979
7007
|
"figmaId": null,
|
|
6980
7008
|
"figmaLink": null,
|
|
@@ -7021,7 +7049,7 @@
|
|
|
7021
7049
|
"hidden": false,
|
|
7022
7050
|
"docExempt": false,
|
|
7023
7051
|
"filePath": "src/app/components/card.tsx",
|
|
7024
|
-
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`.
|
|
7052
|
+
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. The default variant is BORDERLESS at rest (12d-3 outline rule) — depth comes from whitespace/dividers, not an edge. A resting 1px border is opt-in via `bordered` (border.default), a feedback `tone`, or `accent` (border.accent). Elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
|
|
7025
7053
|
"figmaUrl": null,
|
|
7026
7054
|
"figmaId": null,
|
|
7027
7055
|
"figmaLink": null,
|
|
@@ -7068,7 +7096,7 @@
|
|
|
7068
7096
|
"hidden": false,
|
|
7069
7097
|
"docExempt": false,
|
|
7070
7098
|
"filePath": "src/app/components/card.tsx",
|
|
7071
|
-
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`.
|
|
7099
|
+
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. The default variant is BORDERLESS at rest (12d-3 outline rule) — depth comes from whitespace/dividers, not an edge. A resting 1px border is opt-in via `bordered` (border.default), a feedback `tone`, or `accent` (border.accent). Elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
|
|
7072
7100
|
"figmaUrl": null,
|
|
7073
7101
|
"figmaId": null,
|
|
7074
7102
|
"figmaLink": null,
|
|
@@ -7115,7 +7143,7 @@
|
|
|
7115
7143
|
"hidden": false,
|
|
7116
7144
|
"docExempt": false,
|
|
7117
7145
|
"filePath": "src/app/components/card.tsx",
|
|
7118
|
-
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`.
|
|
7146
|
+
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. The default variant is BORDERLESS at rest (12d-3 outline rule) — depth comes from whitespace/dividers, not an edge. A resting 1px border is opt-in via `bordered` (border.default), a feedback `tone`, or `accent` (border.accent). Elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
|
|
7119
7147
|
"figmaUrl": null,
|
|
7120
7148
|
"figmaId": null,
|
|
7121
7149
|
"figmaLink": null,
|
|
@@ -7246,7 +7274,7 @@
|
|
|
7246
7274
|
"hidden": false,
|
|
7247
7275
|
"docExempt": false,
|
|
7248
7276
|
"filePath": "src/app/components/card.tsx",
|
|
7249
|
-
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`.
|
|
7277
|
+
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. The default variant is BORDERLESS at rest (12d-3 outline rule) — depth comes from whitespace/dividers, not an edge. A resting 1px border is opt-in via `bordered` (border.default), a feedback `tone`, or `accent` (border.accent). Elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
|
|
7250
7278
|
"figmaUrl": null,
|
|
7251
7279
|
"figmaId": null,
|
|
7252
7280
|
"figmaLink": null,
|
|
@@ -7316,7 +7344,7 @@
|
|
|
7316
7344
|
"hidden": false,
|
|
7317
7345
|
"docExempt": false,
|
|
7318
7346
|
"filePath": "src/app/components/card.tsx",
|
|
7319
|
-
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`.
|
|
7347
|
+
"description": "Card — surface container with slot anatomy (12d-card-anatomy). Slot anatomy (DESIGN.md §\"Card Anatomy\"). Status, progress, and metadata are layout-bearing — they live in slots, never inline next to prose. <Card variant=\"accent\"> <Card.Header metadata={<Badge tone=\"warning\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\"5 / 12 tasks\" /> <Card.Metric label=\"Retainer\" value=\"$3,500\" sub=\"Active\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label + big value (title) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. `variant`: 'default' (borderless) | 'accent' (2px accent border) — the structural axis, for highlighted entries like \"recommended package\". `tone`: neutral | danger | success | warning | info — the fixed feedback axis (#60 variant contract), for status-driven cards where the border IS the signal. `variant`/`tone` together replace hand-rolled `pkgHighlight`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + `padding=\"none\"`. The default variant is BORDERLESS at rest (12d-3 outline rule) — depth comes from whitespace/dividers, not an edge. A resting 1px border is opt-in via `bordered` (border.default), a feedback `tone`, or `accent` (border.accent). Elevation tokens are not bound by default — pass `className=\"shadow-...\"` for a hover/floating treatment on interactive cards.",
|
|
7320
7348
|
"figmaUrl": null,
|
|
7321
7349
|
"figmaId": null,
|
|
7322
7350
|
"figmaLink": null,
|
|
@@ -7807,7 +7835,7 @@
|
|
|
7807
7835
|
"docExempt": true,
|
|
7808
7836
|
"filePath": "src/app/components/hds-tooltip.tsx",
|
|
7809
7837
|
"description": "Tooltip root. Bakes in the Radix Provider so a single `<Tooltip>` is self-contained — no app-level provider required. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
|
|
7810
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
7838
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-15",
|
|
7811
7839
|
"figmaId": null,
|
|
7812
7840
|
"tier": "primitive",
|
|
7813
7841
|
"preview": {
|
|
@@ -7826,7 +7854,7 @@
|
|
|
7826
7854
|
"tokenMapping": {},
|
|
7827
7855
|
"variantAxes": [],
|
|
7828
7856
|
"componentProperties": [],
|
|
7829
|
-
"figmaLink": "https://www.figma.com/design/
|
|
7857
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-15",
|
|
7830
7858
|
"props": {
|
|
7831
7859
|
"children": {
|
|
7832
7860
|
"type": "React.ReactNode",
|
|
@@ -7904,9 +7932,9 @@
|
|
|
7904
7932
|
"docExempt": true,
|
|
7905
7933
|
"filePath": "src/app/components/menu.tsx",
|
|
7906
7934
|
"description": "Menu root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
|
|
7907
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
7935
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-59",
|
|
7908
7936
|
"figmaId": null,
|
|
7909
|
-
"figmaLink": "https://www.figma.com/design/
|
|
7937
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-59",
|
|
7910
7938
|
"tier": "primitive",
|
|
7911
7939
|
"preview": {
|
|
7912
7940
|
"exportName": "Menu",
|
|
@@ -8028,9 +8056,9 @@
|
|
|
8028
8056
|
"docExempt": true,
|
|
8029
8057
|
"filePath": "src/app/components/popover.tsx",
|
|
8030
8058
|
"description": "Popover root + parts. Controlled via `open`/`onOpenChange`, or uncontrolled with `defaultOpen`.",
|
|
8031
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
8059
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-32",
|
|
8032
8060
|
"figmaId": null,
|
|
8033
|
-
"figmaLink": "https://www.figma.com/design/
|
|
8061
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=93-32",
|
|
8034
8062
|
"tier": "primitive",
|
|
8035
8063
|
"preview": {
|
|
8036
8064
|
"exportName": "Popover",
|
|
@@ -8130,9 +8158,9 @@
|
|
|
8130
8158
|
"docExempt": false,
|
|
8131
8159
|
"filePath": "src/app/components/checkbox.tsx",
|
|
8132
8160
|
"description": "Checkbox — custom-drawn checkbox with check / indeterminate glyph.",
|
|
8133
|
-
"figmaUrl": "https://www.figma.com/design/
|
|
8161
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=35-29",
|
|
8134
8162
|
"figmaId": null,
|
|
8135
|
-
"figmaLink": "https://www.figma.com/design/
|
|
8163
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=35-29",
|
|
8136
8164
|
"tier": "primitive",
|
|
8137
8165
|
"preview": {
|
|
8138
8166
|
"exportName": "Checkbox",
|
|
@@ -8140,6 +8168,7 @@
|
|
|
8140
8168
|
},
|
|
8141
8169
|
"consumers": [
|
|
8142
8170
|
"src/app/components/checkbox.test.tsx",
|
|
8171
|
+
"src/app/components/focus-visible.test.tsx",
|
|
8143
8172
|
"src/app/components/radio.tsx",
|
|
8144
8173
|
"src/app/components/toggle.tsx",
|
|
8145
8174
|
"src/stories/checkbox.stories.tsx"
|
|
@@ -8203,9 +8232,9 @@
|
|
|
8203
8232
|
"docExempt": false,
|
|
8204
8233
|
"filePath": "src/app/components/form-actions.tsx",
|
|
8205
8234
|
"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.",
|
|
8206
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8235
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2075-87",
|
|
8207
8236
|
"figmaId": null,
|
|
8208
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8237
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2075-87",
|
|
8209
8238
|
"tier": "pattern",
|
|
8210
8239
|
"preview": {
|
|
8211
8240
|
"exportName": "FormActions",
|
|
@@ -8250,7 +8279,10 @@
|
|
|
8250
8279
|
"patterns-formactions--sticky",
|
|
8251
8280
|
"patterns-formactions--with-destructive",
|
|
8252
8281
|
"patterns-formactions--with-secondary"
|
|
8253
|
-
]
|
|
8282
|
+
],
|
|
8283
|
+
"usage": {
|
|
8284
|
+
"when": "Lay out a form's buttons in a fixed order: danger on the left, then secondary, then primary on the right."
|
|
8285
|
+
}
|
|
8254
8286
|
},
|
|
8255
8287
|
"MetricTile": {
|
|
8256
8288
|
"category": "Display",
|
|
@@ -8260,9 +8292,9 @@
|
|
|
8260
8292
|
"docExempt": false,
|
|
8261
8293
|
"filePath": "src/app/components/metric-tiles.tsx",
|
|
8262
8294
|
"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`.",
|
|
8263
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8295
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2075-114",
|
|
8264
8296
|
"figmaId": null,
|
|
8265
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8297
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2075-114",
|
|
8266
8298
|
"tier": "pattern",
|
|
8267
8299
|
"preview": {
|
|
8268
8300
|
"exportName": "MetricTile",
|
|
@@ -8318,7 +8350,10 @@
|
|
|
8318
8350
|
"patterns-metrictiles--sub-line-optional",
|
|
8319
8351
|
"patterns-metrictiles--three-tiles",
|
|
8320
8352
|
"patterns-metrictiles--tones"
|
|
8321
|
-
]
|
|
8353
|
+
],
|
|
8354
|
+
"usage": {
|
|
8355
|
+
"when": "Show one key number with its label, inside a MetricTiles row."
|
|
8356
|
+
}
|
|
8322
8357
|
},
|
|
8323
8358
|
"MetricTiles": {
|
|
8324
8359
|
"category": "Display",
|
|
@@ -8370,7 +8405,10 @@
|
|
|
8370
8405
|
"patterns-metrictiles--sub-line-optional",
|
|
8371
8406
|
"patterns-metrictiles--three-tiles",
|
|
8372
8407
|
"patterns-metrictiles--tones"
|
|
8373
|
-
]
|
|
8408
|
+
],
|
|
8409
|
+
"usage": {
|
|
8410
|
+
"when": "Show a row of key numbers, one tile each."
|
|
8411
|
+
}
|
|
8374
8412
|
},
|
|
8375
8413
|
"PageHeader": {
|
|
8376
8414
|
"category": "Layout",
|
|
@@ -8437,7 +8475,10 @@
|
|
|
8437
8475
|
"patterns-pageheader--nested-level",
|
|
8438
8476
|
"patterns-pageheader--title-only",
|
|
8439
8477
|
"patterns-pageheader--with-actions"
|
|
8440
|
-
]
|
|
8478
|
+
],
|
|
8479
|
+
"usage": {
|
|
8480
|
+
"when": "Open a screen with its title, plus optional breadcrumb, status and actions."
|
|
8481
|
+
}
|
|
8441
8482
|
},
|
|
8442
8483
|
"DataTableSection": {
|
|
8443
8484
|
"category": "Display",
|
|
@@ -8447,9 +8488,9 @@
|
|
|
8447
8488
|
"docExempt": false,
|
|
8448
8489
|
"filePath": "src/app/components/data-table-section.tsx",
|
|
8449
8490
|
"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`.",
|
|
8450
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8491
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2075-268",
|
|
8451
8492
|
"figmaId": null,
|
|
8452
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8493
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2075-268",
|
|
8453
8494
|
"tier": "pattern",
|
|
8454
8495
|
"preview": {
|
|
8455
8496
|
"exportName": "DataTableSection",
|
|
@@ -8509,7 +8550,10 @@
|
|
|
8509
8550
|
"patterns-datatablesection--empty",
|
|
8510
8551
|
"patterns-datatablesection--phone-390",
|
|
8511
8552
|
"patterns-datatablesection--without-row-actions"
|
|
8512
|
-
]
|
|
8553
|
+
],
|
|
8554
|
+
"usage": {
|
|
8555
|
+
"when": "Put a heading and toolbar above a Table."
|
|
8556
|
+
}
|
|
8513
8557
|
},
|
|
8514
8558
|
"DestructiveSection": {
|
|
8515
8559
|
"category": "Actions",
|
|
@@ -8519,9 +8563,9 @@
|
|
|
8519
8563
|
"docExempt": false,
|
|
8520
8564
|
"filePath": "src/app/components/destructive-section.tsx",
|
|
8521
8565
|
"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.",
|
|
8522
|
-
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8566
|
+
"figmaUrl": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2076-3",
|
|
8523
8567
|
"figmaId": null,
|
|
8524
|
-
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components
|
|
8568
|
+
"figmaLink": "https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components?node-id=2076-3",
|
|
8525
8569
|
"tier": "pattern",
|
|
8526
8570
|
"preview": {
|
|
8527
8571
|
"exportName": "DestructiveSection",
|
|
@@ -8578,7 +8622,10 @@
|
|
|
8578
8622
|
"patterns-destructivesection--default",
|
|
8579
8623
|
"patterns-destructivesection--phone",
|
|
8580
8624
|
"patterns-destructivesection--separate-button-label"
|
|
8581
|
-
]
|
|
8625
|
+
],
|
|
8626
|
+
"usage": {
|
|
8627
|
+
"when": "Put a dangerous action, such as delete, in its own section with a warning and a confirm step."
|
|
8628
|
+
}
|
|
8582
8629
|
},
|
|
8583
8630
|
"HdsRouterProvider": {
|
|
8584
8631
|
"category": "Theming",
|
|
@@ -9334,6 +9381,83 @@
|
|
|
9334
9381
|
"description": "Specific value within the green range at a defined lightness step.",
|
|
9335
9382
|
"value": "#022c22"
|
|
9336
9383
|
},
|
|
9384
|
+
{
|
|
9385
|
+
"path": "primitive.color.apple.50",
|
|
9386
|
+
"cssVar": "--primitive-color-apple-50",
|
|
9387
|
+
"type": "color",
|
|
9388
|
+
"description": "Apple-green accent tint — faintest step.",
|
|
9389
|
+
"value": "#f2faeb"
|
|
9390
|
+
},
|
|
9391
|
+
{
|
|
9392
|
+
"path": "primitive.color.apple.100",
|
|
9393
|
+
"cssVar": "--primitive-color-apple-100",
|
|
9394
|
+
"type": "color",
|
|
9395
|
+
"description": "Apple-green accent — very light tint.",
|
|
9396
|
+
"value": "#e2f3cf"
|
|
9397
|
+
},
|
|
9398
|
+
{
|
|
9399
|
+
"path": "primitive.color.apple.200",
|
|
9400
|
+
"cssVar": "--primitive-color-apple-200",
|
|
9401
|
+
"type": "color",
|
|
9402
|
+
"description": "Apple-green accent — light tint.",
|
|
9403
|
+
"value": "#c7e7a4"
|
|
9404
|
+
},
|
|
9405
|
+
{
|
|
9406
|
+
"path": "primitive.color.apple.300",
|
|
9407
|
+
"cssVar": "--primitive-color-apple-300",
|
|
9408
|
+
"type": "color",
|
|
9409
|
+
"description": "Apple-green accent — soft mid-light step.",
|
|
9410
|
+
"value": "#a6d873"
|
|
9411
|
+
},
|
|
9412
|
+
{
|
|
9413
|
+
"path": "primitive.color.apple.400",
|
|
9414
|
+
"cssVar": "--primitive-color-apple-400",
|
|
9415
|
+
"type": "color",
|
|
9416
|
+
"description": "Apple-green accent — bright step; dark-mode rest accent.",
|
|
9417
|
+
"value": "#85c84c"
|
|
9418
|
+
},
|
|
9419
|
+
{
|
|
9420
|
+
"path": "primitive.color.apple.500",
|
|
9421
|
+
"cssVar": "--primitive-color-apple-500",
|
|
9422
|
+
"type": "color",
|
|
9423
|
+
"description": "Apple-green accent rest — bright, rich apple green; AA for dark (neutral.900) text as a fill.",
|
|
9424
|
+
"value": "#66b239"
|
|
9425
|
+
},
|
|
9426
|
+
{
|
|
9427
|
+
"path": "primitive.color.apple.600",
|
|
9428
|
+
"cssVar": "--primitive-color-apple-600",
|
|
9429
|
+
"type": "color",
|
|
9430
|
+
"description": "Apple-green accent — hover / border step.",
|
|
9431
|
+
"value": "#54922d"
|
|
9432
|
+
},
|
|
9433
|
+
{
|
|
9434
|
+
"path": "primitive.color.apple.700",
|
|
9435
|
+
"cssVar": "--primitive-color-apple-700",
|
|
9436
|
+
"type": "color",
|
|
9437
|
+
"description": "Apple-green accent — pressed and accent-intent text (AA for text on page and card surfaces).",
|
|
9438
|
+
"value": "#416f20"
|
|
9439
|
+
},
|
|
9440
|
+
{
|
|
9441
|
+
"path": "primitive.color.apple.800",
|
|
9442
|
+
"cssVar": "--primitive-color-apple-800",
|
|
9443
|
+
"type": "color",
|
|
9444
|
+
"description": "Apple-green accent — deep step.",
|
|
9445
|
+
"value": "#34571b"
|
|
9446
|
+
},
|
|
9447
|
+
{
|
|
9448
|
+
"path": "primitive.color.apple.900",
|
|
9449
|
+
"cssVar": "--primitive-color-apple-900",
|
|
9450
|
+
"type": "color",
|
|
9451
|
+
"description": "Apple-green accent — darkest usable step.",
|
|
9452
|
+
"value": "#2b4518"
|
|
9453
|
+
},
|
|
9454
|
+
{
|
|
9455
|
+
"path": "primitive.color.apple.950",
|
|
9456
|
+
"cssVar": "--primitive-color-apple-950",
|
|
9457
|
+
"type": "color",
|
|
9458
|
+
"description": "Apple-green accent — near-black green substrate.",
|
|
9459
|
+
"value": "#16250c"
|
|
9460
|
+
},
|
|
9337
9461
|
{
|
|
9338
9462
|
"path": "primitive.color.violet.50",
|
|
9339
9463
|
"cssVar": "--primitive-color-violet-50",
|
|
@@ -9726,8 +9850,8 @@
|
|
|
9726
9850
|
"path": "primitive.typography.family.mono",
|
|
9727
9851
|
"cssVar": "--primitive-typography-family-mono",
|
|
9728
9852
|
"type": "fontFamily",
|
|
9729
|
-
"description": "Monospace face:
|
|
9730
|
-
"value": "\"
|
|
9853
|
+
"description": "Monospace face: IBM Plex Mono. Falls back to Courier New, monospace.",
|
|
9854
|
+
"value": "\"IBM Plex Mono\", \"Courier New\", monospace"
|
|
9731
9855
|
},
|
|
9732
9856
|
{
|
|
9733
9857
|
"path": "primitive.typography.size.xs",
|
|
@@ -10303,12 +10427,12 @@
|
|
|
10303
10427
|
"path": "semantic.color.surface.accent",
|
|
10304
10428
|
"cssVar": "--semantic-color-surface-accent",
|
|
10305
10429
|
"type": "color",
|
|
10306
|
-
"description": "Accent-colored background
|
|
10307
|
-
"alias": "{primitive.color.
|
|
10308
|
-
"resolvedValue": "#
|
|
10430
|
+
"description": "Accent-colored background — bright apple green (stays green on dark surfaces; pair with content.onAccent dark text).",
|
|
10431
|
+
"alias": "{primitive.color.apple.500}",
|
|
10432
|
+
"resolvedValue": "#66b239",
|
|
10309
10433
|
"dark": {
|
|
10310
|
-
"alias": "{primitive.color.
|
|
10311
|
-
"resolvedValue": "#
|
|
10434
|
+
"alias": "{primitive.color.apple.400}",
|
|
10435
|
+
"resolvedValue": "#85c84c"
|
|
10312
10436
|
}
|
|
10313
10437
|
},
|
|
10314
10438
|
{
|
|
@@ -10316,11 +10440,11 @@
|
|
|
10316
10440
|
"cssVar": "--semantic-color-surface-accentSubtle",
|
|
10317
10441
|
"type": "color",
|
|
10318
10442
|
"description": "Faint accent tint for hover states or highlights",
|
|
10319
|
-
"alias": "{primitive.color.
|
|
10320
|
-
"resolvedValue": "#
|
|
10443
|
+
"alias": "{primitive.color.apple.50}",
|
|
10444
|
+
"resolvedValue": "#f2faeb",
|
|
10321
10445
|
"dark": {
|
|
10322
|
-
"alias": "{primitive.color.
|
|
10323
|
-
"resolvedValue": "#
|
|
10446
|
+
"alias": "{primitive.color.apple.900}",
|
|
10447
|
+
"resolvedValue": "#2b4518"
|
|
10324
10448
|
}
|
|
10325
10449
|
},
|
|
10326
10450
|
{
|
|
@@ -10431,21 +10555,21 @@
|
|
|
10431
10555
|
"path": "semantic.color.content.accent",
|
|
10432
10556
|
"cssVar": "--semantic-color-content-accent",
|
|
10433
10557
|
"type": "color",
|
|
10434
|
-
"description": "Accent-intent text/icon color
|
|
10435
|
-
"alias": "{primitive.color.
|
|
10436
|
-
"resolvedValue": "#
|
|
10558
|
+
"description": "Accent-intent text/icon color — a dark apple green legible on page and card surfaces. Pair with underline/weight for link affordance.",
|
|
10559
|
+
"alias": "{primitive.color.apple.700}",
|
|
10560
|
+
"resolvedValue": "#416f20",
|
|
10437
10561
|
"dark": {
|
|
10438
|
-
"alias": "{primitive.color.
|
|
10439
|
-
"resolvedValue": "#
|
|
10562
|
+
"alias": "{primitive.color.apple.400}",
|
|
10563
|
+
"resolvedValue": "#85c84c"
|
|
10440
10564
|
}
|
|
10441
10565
|
},
|
|
10442
10566
|
{
|
|
10443
10567
|
"path": "semantic.color.content.onAccent",
|
|
10444
10568
|
"cssVar": "--semantic-color-content-onAccent",
|
|
10445
10569
|
"type": "color",
|
|
10446
|
-
"description": "Text/icon color on accent fills
|
|
10447
|
-
"alias": "{primitive.color.neutral.
|
|
10448
|
-
"resolvedValue": "#
|
|
10570
|
+
"description": "Text/icon color on accent fills — a dark neutral, since the brand accent fill is a bright apple green in both light and dark mode.",
|
|
10571
|
+
"alias": "{primitive.color.neutral.900}",
|
|
10572
|
+
"resolvedValue": "#111111",
|
|
10449
10573
|
"dark": {
|
|
10450
10574
|
"alias": "{primitive.color.neutral.900}",
|
|
10451
10575
|
"resolvedValue": "#111111"
|
|
@@ -10548,12 +10672,12 @@
|
|
|
10548
10672
|
"path": "semantic.color.border.accent",
|
|
10549
10673
|
"cssVar": "--semantic-color-border-accent",
|
|
10550
10674
|
"type": "color",
|
|
10551
|
-
"description": "Accent border
|
|
10552
|
-
"alias": "{primitive.color.
|
|
10553
|
-
"resolvedValue": "#
|
|
10675
|
+
"description": "Accent border — apple green, dark enough to read as a boundary on page and card surfaces.",
|
|
10676
|
+
"alias": "{primitive.color.apple.600}",
|
|
10677
|
+
"resolvedValue": "#54922d",
|
|
10554
10678
|
"dark": {
|
|
10555
|
-
"alias": "{primitive.color.
|
|
10556
|
-
"resolvedValue": "#
|
|
10679
|
+
"alias": "{primitive.color.apple.400}",
|
|
10680
|
+
"resolvedValue": "#85c84c"
|
|
10557
10681
|
}
|
|
10558
10682
|
},
|
|
10559
10683
|
{
|
|
@@ -11055,7 +11179,7 @@
|
|
|
11055
11179
|
"type": "typography",
|
|
11056
11180
|
"description": "Code and ids. 13px / 1.5 / 400. The mono companion, role 6 of 6.",
|
|
11057
11181
|
"composite": {
|
|
11058
|
-
"fontFamily": "\"
|
|
11182
|
+
"fontFamily": "\"IBM Plex Mono\", \"Courier New\", monospace",
|
|
11059
11183
|
"fontSize": "13px",
|
|
11060
11184
|
"fontWeight": "400",
|
|
11061
11185
|
"letterSpacing": "0em",
|
|
@@ -11151,12 +11275,12 @@
|
|
|
11151
11275
|
"path": "semantic.accent.rest",
|
|
11152
11276
|
"cssVar": "--semantic-accent-rest",
|
|
11153
11277
|
"type": "color",
|
|
11154
|
-
"description": "Default accent fill for interactive elements at rest
|
|
11155
|
-
"alias": "{primitive.color.
|
|
11156
|
-
"resolvedValue": "#
|
|
11278
|
+
"description": "Default accent fill for interactive elements at rest — bright apple green. Pair with content.onAccent (a dark neutral).",
|
|
11279
|
+
"alias": "{primitive.color.apple.500}",
|
|
11280
|
+
"resolvedValue": "#66b239",
|
|
11157
11281
|
"dark": {
|
|
11158
|
-
"alias": "{primitive.color.
|
|
11159
|
-
"resolvedValue": "#
|
|
11282
|
+
"alias": "{primitive.color.apple.400}",
|
|
11283
|
+
"resolvedValue": "#85c84c"
|
|
11160
11284
|
}
|
|
11161
11285
|
},
|
|
11162
11286
|
{
|
|
@@ -11164,11 +11288,11 @@
|
|
|
11164
11288
|
"cssVar": "--semantic-accent-hover",
|
|
11165
11289
|
"type": "color",
|
|
11166
11290
|
"description": "Accent fill on pointer hover.",
|
|
11167
|
-
"alias": "{primitive.color.
|
|
11168
|
-
"resolvedValue": "#
|
|
11291
|
+
"alias": "{primitive.color.apple.600}",
|
|
11292
|
+
"resolvedValue": "#54922d",
|
|
11169
11293
|
"dark": {
|
|
11170
|
-
"alias": "{primitive.color.
|
|
11171
|
-
"resolvedValue": "#
|
|
11294
|
+
"alias": "{primitive.color.apple.500}",
|
|
11295
|
+
"resolvedValue": "#66b239"
|
|
11172
11296
|
}
|
|
11173
11297
|
},
|
|
11174
11298
|
{
|
|
@@ -11176,11 +11300,11 @@
|
|
|
11176
11300
|
"cssVar": "--semantic-accent-pressed",
|
|
11177
11301
|
"type": "color",
|
|
11178
11302
|
"description": "Accent fill during active press.",
|
|
11179
|
-
"alias": "{primitive.color.
|
|
11180
|
-
"resolvedValue": "#
|
|
11303
|
+
"alias": "{primitive.color.apple.700}",
|
|
11304
|
+
"resolvedValue": "#416f20",
|
|
11181
11305
|
"dark": {
|
|
11182
|
-
"alias": "{primitive.color.
|
|
11183
|
-
"resolvedValue": "#
|
|
11306
|
+
"alias": "{primitive.color.apple.600}",
|
|
11307
|
+
"resolvedValue": "#54922d"
|
|
11184
11308
|
}
|
|
11185
11309
|
},
|
|
11186
11310
|
{
|
|
@@ -11211,12 +11335,12 @@
|
|
|
11211
11335
|
"path": "semantic.accent.content",
|
|
11212
11336
|
"cssVar": "--semantic-accent-content",
|
|
11213
11337
|
"type": "color",
|
|
11214
|
-
"description": "
|
|
11215
|
-
"alias": "{primitive.color.
|
|
11216
|
-
"resolvedValue": "#
|
|
11338
|
+
"description": "Accent-intent text/icon color on neutral surfaces (a dark apple green) — pair with underline/weight for link affordance.",
|
|
11339
|
+
"alias": "{primitive.color.apple.700}",
|
|
11340
|
+
"resolvedValue": "#416f20",
|
|
11217
11341
|
"dark": {
|
|
11218
|
-
"alias": "{primitive.color.
|
|
11219
|
-
"resolvedValue": "#
|
|
11342
|
+
"alias": "{primitive.color.apple.400}",
|
|
11343
|
+
"resolvedValue": "#85c84c"
|
|
11220
11344
|
}
|
|
11221
11345
|
},
|
|
11222
11346
|
{
|
|
@@ -11224,11 +11348,11 @@
|
|
|
11224
11348
|
"cssVar": "--semantic-accent-contentHover",
|
|
11225
11349
|
"type": "color",
|
|
11226
11350
|
"description": "Accent content color on pointer hover.",
|
|
11227
|
-
"alias": "{primitive.color.
|
|
11228
|
-
"resolvedValue": "#
|
|
11351
|
+
"alias": "{primitive.color.apple.800}",
|
|
11352
|
+
"resolvedValue": "#34571b",
|
|
11229
11353
|
"dark": {
|
|
11230
|
-
"alias": "{primitive.color.
|
|
11231
|
-
"resolvedValue": "#
|
|
11354
|
+
"alias": "{primitive.color.apple.300}",
|
|
11355
|
+
"resolvedValue": "#a6d873"
|
|
11232
11356
|
}
|
|
11233
11357
|
},
|
|
11234
11358
|
{
|
|
@@ -11236,11 +11360,11 @@
|
|
|
11236
11360
|
"cssVar": "--semantic-accent-subtle",
|
|
11237
11361
|
"type": "color",
|
|
11238
11362
|
"description": "Low-emphasis accent tint for hover backgrounds and selection highlights.",
|
|
11239
|
-
"alias": "{primitive.color.
|
|
11240
|
-
"resolvedValue": "#
|
|
11363
|
+
"alias": "{primitive.color.apple.50}",
|
|
11364
|
+
"resolvedValue": "#f2faeb",
|
|
11241
11365
|
"dark": {
|
|
11242
|
-
"alias": "{primitive.color.
|
|
11243
|
-
"resolvedValue": "#
|
|
11366
|
+
"alias": "{primitive.color.apple.900}",
|
|
11367
|
+
"resolvedValue": "#2b4518"
|
|
11244
11368
|
}
|
|
11245
11369
|
},
|
|
11246
11370
|
{
|
|
@@ -11476,7 +11600,7 @@
|
|
|
11476
11600
|
"type": "color",
|
|
11477
11601
|
"description": "Nav item background fill when active or selected.",
|
|
11478
11602
|
"alias": "{semantic.accent.subtle}",
|
|
11479
|
-
"resolvedValue": "#
|
|
11603
|
+
"resolvedValue": "#f2faeb"
|
|
11480
11604
|
},
|
|
11481
11605
|
{
|
|
11482
11606
|
"path": "component.nav.borderActive",
|
|
@@ -11484,7 +11608,7 @@
|
|
|
11484
11608
|
"type": "color",
|
|
11485
11609
|
"description": "Nav item border color when active or selected.",
|
|
11486
11610
|
"alias": "{semantic.color.surface.accent}",
|
|
11487
|
-
"resolvedValue": "#
|
|
11611
|
+
"resolvedValue": "#66b239"
|
|
11488
11612
|
},
|
|
11489
11613
|
{
|
|
11490
11614
|
"path": "component.nav.text",
|
|
@@ -11532,7 +11656,7 @@
|
|
|
11532
11656
|
"type": "color",
|
|
11533
11657
|
"description": "Base tag surface color.",
|
|
11534
11658
|
"alias": "{semantic.accent.subtle}",
|
|
11535
|
-
"resolvedValue": "#
|
|
11659
|
+
"resolvedValue": "#f2faeb"
|
|
11536
11660
|
},
|
|
11537
11661
|
{
|
|
11538
11662
|
"path": "component.tag.text",
|
|
@@ -11577,10 +11701,10 @@
|
|
|
11577
11701
|
{
|
|
11578
11702
|
"path": "component.tag.lineHeight",
|
|
11579
11703
|
"cssVar": "--component-tag-lineHeight",
|
|
11580
|
-
"type": "
|
|
11704
|
+
"type": "number",
|
|
11581
11705
|
"description": "Readable label rhythm for tags.",
|
|
11582
11706
|
"alias": "{primitive.typography.lineHeight.normal}",
|
|
11583
|
-
"resolvedValue": "
|
|
11707
|
+
"resolvedValue": "1.5"
|
|
11584
11708
|
},
|
|
11585
11709
|
{
|
|
11586
11710
|
"path": "component.tag.minWidth",
|
|
@@ -11620,7 +11744,7 @@
|
|
|
11620
11744
|
"type": "color",
|
|
11621
11745
|
"description": "Text color when the tag is active.",
|
|
11622
11746
|
"alias": "{semantic.color.content.onAccent}",
|
|
11623
|
-
"resolvedValue": "#
|
|
11747
|
+
"resolvedValue": "#111111"
|
|
11624
11748
|
},
|
|
11625
11749
|
{
|
|
11626
11750
|
"path": "component.tag.activeBackground",
|
|
@@ -11628,7 +11752,7 @@
|
|
|
11628
11752
|
"type": "color",
|
|
11629
11753
|
"description": "Active tag fill color.",
|
|
11630
11754
|
"alias": "{semantic.accent.rest}",
|
|
11631
|
-
"resolvedValue": "#
|
|
11755
|
+
"resolvedValue": "#66b239"
|
|
11632
11756
|
},
|
|
11633
11757
|
{
|
|
11634
11758
|
"path": "component.tag.activeBorder",
|
|
@@ -11636,7 +11760,7 @@
|
|
|
11636
11760
|
"type": "color",
|
|
11637
11761
|
"description": "Active tag border color.",
|
|
11638
11762
|
"alias": "{semantic.accent.rest}",
|
|
11639
|
-
"resolvedValue": "#
|
|
11763
|
+
"resolvedValue": "#66b239"
|
|
11640
11764
|
},
|
|
11641
11765
|
{
|
|
11642
11766
|
"path": "component.tag.activeHover",
|
|
@@ -11644,7 +11768,7 @@
|
|
|
11644
11768
|
"type": "color",
|
|
11645
11769
|
"description": "Active tag hover fill color.",
|
|
11646
11770
|
"alias": "{semantic.accent.hover}",
|
|
11647
|
-
"resolvedValue": "#
|
|
11771
|
+
"resolvedValue": "#54922d"
|
|
11648
11772
|
},
|
|
11649
11773
|
{
|
|
11650
11774
|
"path": "component.badge.fontSize",
|
|
@@ -11728,7 +11852,7 @@
|
|
|
11728
11852
|
"type": "color",
|
|
11729
11853
|
"description": "Primary button fill.",
|
|
11730
11854
|
"alias": "{semantic.color.surface.accent}",
|
|
11731
|
-
"resolvedValue": "#
|
|
11855
|
+
"resolvedValue": "#66b239"
|
|
11732
11856
|
},
|
|
11733
11857
|
{
|
|
11734
11858
|
"path": "component.button.bgHover",
|
|
@@ -11736,7 +11860,7 @@
|
|
|
11736
11860
|
"type": "color",
|
|
11737
11861
|
"description": "Primary button hover fill.",
|
|
11738
11862
|
"alias": "{semantic.accent.hover}",
|
|
11739
|
-
"resolvedValue": "#
|
|
11863
|
+
"resolvedValue": "#54922d"
|
|
11740
11864
|
},
|
|
11741
11865
|
{
|
|
11742
11866
|
"path": "component.button.text",
|
|
@@ -11744,7 +11868,7 @@
|
|
|
11744
11868
|
"type": "color",
|
|
11745
11869
|
"description": "Primary button text color.",
|
|
11746
11870
|
"alias": "{semantic.color.content.onAccent}",
|
|
11747
|
-
"resolvedValue": "#
|
|
11871
|
+
"resolvedValue": "#111111"
|
|
11748
11872
|
},
|
|
11749
11873
|
{
|
|
11750
11874
|
"path": "component.button.radius",
|
|
@@ -11920,7 +12044,7 @@
|
|
|
11920
12044
|
"type": "color",
|
|
11921
12045
|
"description": "Disabled primary button text color.",
|
|
11922
12046
|
"alias": "{semantic.color.content.onAccent}",
|
|
11923
|
-
"resolvedValue": "#
|
|
12047
|
+
"resolvedValue": "#111111",
|
|
11924
12048
|
"dark": {
|
|
11925
12049
|
"alias": "{semantic.color.content.disabled}",
|
|
11926
12050
|
"resolvedValue": "#d4d4d4"
|
|
@@ -11932,7 +12056,7 @@
|
|
|
11932
12056
|
"type": "color",
|
|
11933
12057
|
"description": "Disabled primary button fill.",
|
|
11934
12058
|
"alias": "{semantic.color.surface.accentSubtle}",
|
|
11935
|
-
"resolvedValue": "#
|
|
12059
|
+
"resolvedValue": "#f2faeb"
|
|
11936
12060
|
},
|
|
11937
12061
|
{
|
|
11938
12062
|
"path": "component.button.secondary.bg.rest",
|
|
@@ -12162,7 +12286,7 @@
|
|
|
12162
12286
|
"type": "color",
|
|
12163
12287
|
"description": "Primary action surface. shadcn role: primary.",
|
|
12164
12288
|
"alias": "{semantic.color.surface.accent}",
|
|
12165
|
-
"resolvedValue": "#
|
|
12289
|
+
"resolvedValue": "#66b239"
|
|
12166
12290
|
},
|
|
12167
12291
|
{
|
|
12168
12292
|
"path": "role.primary-foreground",
|
|
@@ -12170,7 +12294,7 @@
|
|
|
12170
12294
|
"type": "color",
|
|
12171
12295
|
"description": "Text/icons on primary surface. shadcn role: primary-foreground.",
|
|
12172
12296
|
"alias": "{semantic.color.content.onAccent}",
|
|
12173
|
-
"resolvedValue": "#
|
|
12297
|
+
"resolvedValue": "#111111"
|
|
12174
12298
|
},
|
|
12175
12299
|
{
|
|
12176
12300
|
"path": "role.secondary",
|
|
@@ -12210,7 +12334,7 @@
|
|
|
12210
12334
|
"type": "color",
|
|
12211
12335
|
"description": "Hover/active tinted bg. shadcn role: accent.",
|
|
12212
12336
|
"alias": "{semantic.color.surface.accentSubtle}",
|
|
12213
|
-
"resolvedValue": "#
|
|
12337
|
+
"resolvedValue": "#f2faeb"
|
|
12214
12338
|
},
|
|
12215
12339
|
{
|
|
12216
12340
|
"path": "role.accent-foreground",
|
|
@@ -12218,7 +12342,7 @@
|
|
|
12218
12342
|
"type": "color",
|
|
12219
12343
|
"description": "Text on accent surface. shadcn role: accent-foreground.",
|
|
12220
12344
|
"alias": "{semantic.color.content.accent}",
|
|
12221
|
-
"resolvedValue": "#
|
|
12345
|
+
"resolvedValue": "#416f20"
|
|
12222
12346
|
},
|
|
12223
12347
|
{
|
|
12224
12348
|
"path": "role.destructive",
|
|
@@ -12258,7 +12382,7 @@
|
|
|
12258
12382
|
"type": "color",
|
|
12259
12383
|
"description": "Focus ring color. shadcn role: ring.",
|
|
12260
12384
|
"alias": "{semantic.color.border.accent}",
|
|
12261
|
-
"resolvedValue": "#
|
|
12385
|
+
"resolvedValue": "#54922d"
|
|
12262
12386
|
},
|
|
12263
12387
|
{
|
|
12264
12388
|
"path": "role.radius",
|
|
@@ -12269,5 +12393,39 @@
|
|
|
12269
12393
|
"resolvedValue": "8px"
|
|
12270
12394
|
}
|
|
12271
12395
|
]
|
|
12272
|
-
}
|
|
12396
|
+
},
|
|
12397
|
+
"publicClasses": [
|
|
12398
|
+
"hds-alert",
|
|
12399
|
+
"hds-alert--danger",
|
|
12400
|
+
"hds-alert--info",
|
|
12401
|
+
"hds-alert--success",
|
|
12402
|
+
"hds-alert--warning",
|
|
12403
|
+
"hds-alert--with-title",
|
|
12404
|
+
"hds-alert__body",
|
|
12405
|
+
"hds-alert__icon",
|
|
12406
|
+
"hds-alert__title",
|
|
12407
|
+
"hds-badge",
|
|
12408
|
+
"hds-badge--danger",
|
|
12409
|
+
"hds-badge--in-progress",
|
|
12410
|
+
"hds-badge--info",
|
|
12411
|
+
"hds-badge--neutral",
|
|
12412
|
+
"hds-badge--success",
|
|
12413
|
+
"hds-badge--warning",
|
|
12414
|
+
"hds-card",
|
|
12415
|
+
"hds-card--accent",
|
|
12416
|
+
"hds-card--bordered",
|
|
12417
|
+
"hds-card--danger",
|
|
12418
|
+
"hds-card--info",
|
|
12419
|
+
"hds-card--no-padding",
|
|
12420
|
+
"hds-card--success",
|
|
12421
|
+
"hds-card--warning",
|
|
12422
|
+
"hds-divider",
|
|
12423
|
+
"hds-divider--horizontal",
|
|
12424
|
+
"hds-divider--strong",
|
|
12425
|
+
"hds-divider--vertical",
|
|
12426
|
+
"hds-focus",
|
|
12427
|
+
"hds-tag",
|
|
12428
|
+
"hds-tag--active",
|
|
12429
|
+
"hds-tag__pill"
|
|
12430
|
+
]
|
|
12273
12431
|
}
|