@hirobius/design-system 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +25 -69
  2. package/dist/chunks/LanguageContext-CH_bwzCq.js +83 -0
  3. package/dist/chunks/TokenDisplayContext-evZi_214.js +18 -0
  4. package/dist/chunks/activity-feed-C8_e-Btq.js +19955 -0
  5. package/dist/contexts.js +17 -16
  6. package/dist/hirobius-ui.js +3652 -23311
  7. package/dist/manifest.js +5 -5
  8. package/dist/patterns.js +423 -0
  9. package/dist/static.css +4 -4
  10. package/dist/styles.css +1 -1
  11. package/dist/tokens.css +1 -1
  12. package/dist/tokens.js +34 -13
  13. package/dist/types/src/app/components/activity-feed.d.ts +6 -4
  14. package/dist/types/src/app/components/app-shell.d.ts +6 -4
  15. package/dist/types/src/app/components/asset-img.d.ts +3 -1
  16. package/dist/types/src/app/components/avatar-group.d.ts +3 -3
  17. package/dist/types/src/app/components/avatar.d.ts +3 -3
  18. package/dist/types/src/app/components/badge.d.ts +3 -3
  19. package/dist/types/src/app/components/blockquote.d.ts +3 -3
  20. package/dist/types/src/app/components/breadcrumb.d.ts +3 -3
  21. package/dist/types/src/app/components/button-group.d.ts +3 -3
  22. package/dist/types/src/app/components/button.d.ts +6 -6
  23. package/dist/types/src/app/components/calendar.d.ts +3 -1
  24. package/dist/types/src/app/components/callout.d.ts +4 -4
  25. package/dist/types/src/app/components/card.d.ts +5 -5
  26. package/dist/types/src/app/components/carousel.d.ts +6 -4
  27. package/dist/types/src/app/components/checkbox.d.ts +3 -3
  28. package/dist/types/src/app/components/circular-progress.d.ts +3 -3
  29. package/dist/types/src/app/components/code-block.d.ts +20 -18
  30. package/dist/types/src/app/components/command-palette.d.ts +9 -9
  31. package/dist/types/src/app/components/component-instance-matrix.d.ts +1 -1
  32. package/dist/types/src/app/components/disclosure.d.ts +3 -3
  33. package/dist/types/src/app/components/divider.d.ts +4 -4
  34. package/dist/types/src/app/components/doc-link-card.d.ts +6 -4
  35. package/dist/types/src/app/components/error-pattern.d.ts +3 -1
  36. package/dist/types/src/app/components/field.d.ts +4 -4
  37. package/dist/types/src/app/components/file-input.d.ts +7 -5
  38. package/dist/types/src/app/components/hds-tooltip.d.ts +11 -11
  39. package/dist/types/src/app/components/heading-stack.d.ts +6 -6
  40. package/dist/types/src/app/components/hover-card.d.ts +1 -1
  41. package/dist/types/src/app/components/image-lightbox.d.ts +2 -0
  42. package/dist/types/src/app/components/inline-code.d.ts +3 -3
  43. package/dist/types/src/app/components/input-group.d.ts +3 -3
  44. package/dist/types/src/app/components/input.d.ts +5 -5
  45. package/dist/types/src/app/components/kbd.d.ts +3 -3
  46. package/dist/types/src/app/components/metadata-list.d.ts +3 -3
  47. package/dist/types/src/app/components/nav-group.d.ts +3 -3
  48. package/dist/types/src/app/components/nav-item.d.ts +10 -8
  49. package/dist/types/src/app/components/overflow-list.d.ts +3 -1
  50. package/dist/types/src/app/components/page.d.ts +3 -1
  51. package/dist/types/src/app/components/progress.d.ts +3 -3
  52. package/dist/types/src/app/components/radio.d.ts +3 -3
  53. package/dist/types/src/app/components/reveal.d.ts +3 -1
  54. package/dist/types/src/app/components/segmented-control.d.ts +31 -31
  55. package/dist/types/src/app/components/select.d.ts +3 -3
  56. package/dist/types/src/app/components/selectable-card.d.ts +3 -3
  57. package/dist/types/src/app/components/side-nav.d.ts +6 -4
  58. package/dist/types/src/app/components/skeleton.d.ts +3 -3
  59. package/dist/types/src/app/components/slider.d.ts +3 -3
  60. package/dist/types/src/app/components/spinner.d.ts +3 -3
  61. package/dist/types/src/app/components/stacked-card-rail.d.ts +32 -0
  62. package/dist/types/src/app/components/stat.d.ts +3 -3
  63. package/dist/types/src/app/components/status-dot.d.ts +4 -4
  64. package/dist/types/src/app/components/status-list-item.d.ts +3 -3
  65. package/dist/types/src/app/components/stepper.d.ts +6 -4
  66. package/dist/types/src/app/components/surface.d.ts +4 -4
  67. package/dist/types/src/app/components/table.d.ts +22 -11
  68. package/dist/types/src/app/components/tag.d.ts +4 -4
  69. package/dist/types/src/app/components/text.d.ts +3 -3
  70. package/dist/types/src/app/components/textarea.d.ts +4 -4
  71. package/dist/types/src/app/components/time-input.d.ts +3 -3
  72. package/dist/types/src/app/components/toast.d.ts +3 -3
  73. package/dist/types/src/app/components/toggle-button.d.ts +4 -4
  74. package/dist/types/src/app/components/toggle.d.ts +3 -3
  75. package/dist/types/src/app/components/token.d.ts +16 -16
  76. package/dist/types/src/app/components/toolbar.d.ts +1 -1
  77. package/dist/types/src/app/components/tooltip.d.ts +2 -2
  78. package/dist/types/src/app/components/top-nav.d.ts +3 -1
  79. package/dist/types/src/app/components/tree-list.d.ts +3 -1
  80. package/dist/types/src/app/design-system/generated-token-refs.d.ts +36 -0
  81. package/dist/types/src/app/design-system/generated-token-values.d.ts +10 -10
  82. package/dist/types/src/app/design-system/tokens.d.ts +16 -0
  83. package/dist/types/src/index.d.ts +193 -8
  84. package/dist/types/src/patterns.d.ts +37 -0
  85. package/dist/variables.css +42 -22
  86. package/hirobius.tokens.json +178 -57
  87. package/package.json +12 -9
  88. package/public/hds-manifest.json +473 -445
  89. package/dist/chunks/TokenDisplayContext-B3gxyQN7.js +0 -96
@@ -108,16 +108,16 @@
108
108
  --primitive-typography-family-primary: Satoshi, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
109
109
  --primitive-typography-family-display: Satoshi, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
110
110
  --primitive-typography-family-mono: "Geist Mono", "Courier New", monospace;
111
- --primitive-typography-size-xs: 13px;
112
- --primitive-typography-size-sm: 15px;
113
- --primitive-typography-size-base: 17px;
114
- --primitive-typography-size-lg: 20px;
115
- --primitive-typography-size-xl: 24px;
116
- --primitive-typography-size-2xl: 30px;
117
- --primitive-typography-size-3xl: 36px;
118
- --primitive-typography-size-4xl: 48px;
119
- --primitive-typography-size-5xl: 72px;
120
- --primitive-typography-size-6xl: 80px;
111
+ --primitive-typography-size-xs: 12px;
112
+ --primitive-typography-size-sm: 14px;
113
+ --primitive-typography-size-base: 16px;
114
+ --primitive-typography-size-lg: 18px;
115
+ --primitive-typography-size-xl: 20px;
116
+ --primitive-typography-size-2xl: 24px;
117
+ --primitive-typography-size-3xl: 30px;
118
+ --primitive-typography-size-4xl: 36px;
119
+ --primitive-typography-size-5xl: 48px;
120
+ --primitive-typography-size-6xl: 60px;
121
121
  --primitive-typography-weight-regular: 400;
122
122
  --primitive-typography-weight-medium: 500;
123
123
  --primitive-typography-weight-bold: 700;
@@ -187,6 +187,7 @@
187
187
  /* semantic.motion.exit */
188
188
  --hds-motion-exit-duration: var(--primitive-duration-instant);
189
189
  --hds-motion-exit-easing: var(--primitive-easing-accelerate);
190
+ --semantic-motion-distance: var(--primitive-space-6);
190
191
  --semantic-color-surface-page: var(--primitive-color-neutral-white);
191
192
  --semantic-color-surface-raised: var(--primitive-color-neutral-50);
192
193
  --semantic-color-surface-overlay: var(--primitive-color-neutral-100);
@@ -225,15 +226,22 @@
225
226
  --semantic-color-feedback-bg-warning: var(--primitive-color-amber-50);
226
227
  --semantic-color-feedback-bg-info: var(--primitive-color-blue-50);
227
228
  --semantic-color-feedback-bg-inProgress: var(--primitive-color-violet-50);
229
+ --semantic-space-scale-xs: var(--primitive-space-2);
230
+ --semantic-space-scale-sm: var(--primitive-space-4);
231
+ --semantic-space-scale-md: var(--primitive-space-6);
232
+ --semantic-space-scale-lg: var(--primitive-space-8);
233
+ --semantic-space-scale-xl: var(--primitive-space-12);
234
+ --semantic-space-surface-padding: var(--semantic-space-scale-md);
235
+ --semantic-space-region-gutter: var(--semantic-space-scale-md);
228
236
  --semantic-space-subgrid-hairline: var(--primitive-space-px1);
229
237
  --semantic-space-subgrid-xs: var(--primitive-space-px2);
230
238
  --semantic-space-subgrid-gap: var(--primitive-space-1);
231
239
  --semantic-space-component-gap: var(--primitive-space-2);
232
240
  --semantic-space-component-medium: var(--primitive-space-3);
233
- --semantic-space-component-padding: var(--primitive-space-6);
241
+ --semantic-space-component-padding: var(--semantic-space-surface-padding);
234
242
  --semantic-space-layout-tight: var(--primitive-space-4);
235
243
  --semantic-space-layout-normal: var(--primitive-space-6);
236
- --semantic-space-layout-gutter: var(--primitive-space-6);
244
+ --semantic-space-layout-gutter: var(--semantic-space-region-gutter);
237
245
  --semantic-space-layout-inset: var(--primitive-space-8);
238
246
  --semantic-space-layout-spacious: var(--primitive-space-12);
239
247
  --semantic-space-section-stack: var(--primitive-space-20);
@@ -256,25 +264,25 @@
256
264
  --semantic-layout-grid-columns-desktop: var(--primitive-grid-columns-3);
257
265
  /* semantic.typography.display */
258
266
  --semantic-typography-display-font-family: var(--primitive-typography-family-display);
259
- --semantic-typography-display-font-size: var(--primitive-typography-size-5xl);
267
+ --semantic-typography-display-font-size: var(--primitive-typography-size-6xl);
260
268
  --semantic-typography-display-font-weight: var(--primitive-typography-weight-bold);
261
269
  --semantic-typography-display-letter-spacing: var(--primitive-typography-letterSpacing-tight);
262
270
  --semantic-typography-display-line-height: var(--primitive-typography-lineHeight-none);
263
271
  /* semantic.typography.h1 */
264
272
  --semantic-typography-h1-font-family: var(--primitive-typography-family-display);
265
- --semantic-typography-h1-font-size: var(--primitive-typography-size-4xl);
273
+ --semantic-typography-h1-font-size: var(--primitive-typography-size-5xl);
266
274
  --semantic-typography-h1-font-weight: var(--primitive-typography-weight-bold);
267
275
  --semantic-typography-h1-letter-spacing: var(--primitive-typography-letterSpacing-tight);
268
276
  --semantic-typography-h1-line-height: var(--primitive-typography-lineHeight-tight);
269
277
  /* semantic.typography.h2 */
270
278
  --semantic-typography-h2-font-family: var(--primitive-typography-family-display);
271
- --semantic-typography-h2-font-size: var(--primitive-typography-size-2xl);
279
+ --semantic-typography-h2-font-size: var(--primitive-typography-size-3xl);
272
280
  --semantic-typography-h2-font-weight: var(--primitive-typography-weight-bold);
273
281
  --semantic-typography-h2-letter-spacing: var(--primitive-typography-letterSpacing-tight);
274
- --semantic-typography-h2-line-height: 42px;
282
+ --semantic-typography-h2-line-height: 40px;
275
283
  /* semantic.typography.h3 */
276
284
  --semantic-typography-h3-font-family: var(--primitive-typography-family-display);
277
- --semantic-typography-h3-font-size: var(--primitive-typography-size-lg);
285
+ --semantic-typography-h3-font-size: var(--primitive-typography-size-xl);
278
286
  --semantic-typography-h3-font-weight: var(--primitive-typography-weight-bold);
279
287
  --semantic-typography-h3-letter-spacing: var(--primitive-typography-letterSpacing-normal);
280
288
  --semantic-typography-h3-line-height: 28px;
@@ -283,18 +291,18 @@
283
291
  --semantic-typography-body-font-size: var(--primitive-typography-size-base);
284
292
  --semantic-typography-body-font-weight: var(--primitive-typography-weight-medium);
285
293
  --semantic-typography-body-letter-spacing: var(--primitive-typography-letterSpacing-normal);
286
- --semantic-typography-body-line-height: 28px;
294
+ --semantic-typography-body-line-height: 24px;
287
295
  --semantic-typography-body-max-width: 60ch;
288
296
  /* semantic.typography.ui */
289
297
  --semantic-typography-ui-font-family: var(--primitive-typography-family-primary);
290
298
  --semantic-typography-ui-font-size: var(--primitive-typography-size-sm);
291
299
  --semantic-typography-ui-font-weight: var(--primitive-typography-weight-medium);
292
300
  --semantic-typography-ui-letter-spacing: var(--primitive-typography-letterSpacing-normal);
293
- --semantic-typography-ui-line-height: 24px;
301
+ --semantic-typography-ui-line-height: 20px;
294
302
  --semantic-typography-ui-max-width: 60ch;
295
303
  /* semantic.typography.caption */
296
304
  --semantic-typography-caption-font-family: var(--primitive-typography-family-primary);
297
- --semantic-typography-caption-font-size: 12px;
305
+ --semantic-typography-caption-font-size: var(--primitive-typography-size-xs);
298
306
  --semantic-typography-caption-font-weight: var(--primitive-typography-weight-medium);
299
307
  --semantic-typography-caption-letter-spacing: var(--primitive-typography-letterSpacing-normal);
300
308
  --semantic-typography-caption-line-height: 16px;
@@ -303,11 +311,11 @@
303
311
  --semantic-typography-eyebrow-font-size: var(--primitive-typography-size-xs);
304
312
  --semantic-typography-eyebrow-font-weight: var(--primitive-typography-weight-medium);
305
313
  --semantic-typography-eyebrow-letter-spacing: var(--primitive-typography-letterSpacing-caps);
306
- --semantic-typography-eyebrow-line-height: 20px;
314
+ --semantic-typography-eyebrow-line-height: 16px;
307
315
  --semantic-typography-eyebrow-text-transform: uppercase;
308
316
  /* semantic.typography.mono */
309
317
  --semantic-typography-mono-font-family: var(--primitive-typography-family-mono);
310
- --semantic-typography-mono-font-size: var(--primitive-typography-size-xs);
318
+ --semantic-typography-mono-font-size: var(--primitive-typography-size-sm);
311
319
  --semantic-typography-mono-font-weight: var(--primitive-typography-weight-regular);
312
320
  --semantic-typography-mono-letter-spacing: var(--primitive-typography-letterSpacing-normal);
313
321
  --semantic-typography-mono-line-height: 20px;
@@ -325,6 +333,7 @@
325
333
  --semantic-accent-contentHover: var(--primitive-color-neutral-700);
326
334
  --semantic-accent-subtle: var(--primitive-color-neutral-100);
327
335
  --semantic-radius-action: var(--primitive-radius-8);
336
+ --semantic-radius-control: var(--primitive-radius-4);
328
337
  --semantic-borderWidth-default: var(--primitive-borderWidth-xs);
329
338
  --semantic-borderWidth-emphasis: var(--primitive-borderWidth-sm);
330
339
  --semantic-shadow-subtle: 0 1px 2px hsl(var(--primitive-shadow-color) / 0.04), 0 1px 1px hsl(var(--primitive-shadow-color) / 0.06);
@@ -346,6 +355,17 @@
346
355
  --semantic-elevation-overlay-surface: var(--semantic-color-surface-overlay);
347
356
  --semantic-elevation-overlay-shadow: var(--semantic-shadow-overlay);
348
357
  --semantic-elevation-overlay-border: transparent;
358
+ --semantic-size-control-sm: var(--primitive-size-8);
359
+ --semantic-size-control-md: var(--primitive-size-20);
360
+ --semantic-size-control-lg: var(--primitive-size-32);
361
+ --semantic-size-icon-sm: var(--primitive-size-16);
362
+ --semantic-size-icon-md: var(--primitive-size-20);
363
+ --semantic-size-icon-lg: var(--primitive-size-24);
364
+ --semantic-size-avatar: var(--primitive-size-40);
365
+ --semantic-size-row-compact: var(--primitive-size-40);
366
+ --semantic-size-row-comfortable: var(--primitive-size-48);
367
+ --semantic-zIndex-control: var(--primitive-zIndex-10);
368
+ --semantic-zIndex-sticky: var(--primitive-zIndex-100);
349
369
 
350
370
  /* ── Component ─────────────────────────────────────────────────────────── */
351
371
  --component-nav-bg: var(--semantic-color-surface-page);
@@ -497,64 +497,73 @@
497
497
  "$type": "dimension",
498
498
  "xs": {
499
499
  "$value": {
500
- "value": 13,
500
+ "value": 12,
501
501
  "unit": "px"
502
- }
502
+ },
503
+ "$description": "Tailwind 4 default text-xs (hds#283 ramp)."
503
504
  },
504
505
  "sm": {
505
506
  "$value": {
506
- "value": 15,
507
+ "value": 14,
507
508
  "unit": "px"
508
- }
509
+ },
510
+ "$description": "Tailwind 4 default text-sm (hds#283 ramp)."
509
511
  },
510
512
  "base": {
511
513
  "$value": {
512
- "value": 17,
514
+ "value": 16,
513
515
  "unit": "px"
514
- }
516
+ },
517
+ "$description": "Tailwind 4 default text-base (hds#283 ramp)."
515
518
  },
516
519
  "lg": {
517
520
  "$value": {
518
- "value": 20,
521
+ "value": 18,
519
522
  "unit": "px"
520
- }
523
+ },
524
+ "$description": "Tailwind 4 default text-lg (hds#283 ramp)."
521
525
  },
522
526
  "xl": {
523
527
  "$value": {
524
- "value": 24,
528
+ "value": 20,
525
529
  "unit": "px"
526
- }
530
+ },
531
+ "$description": "Tailwind 4 default text-xl (hds#283 ramp)."
527
532
  },
528
533
  "2xl": {
529
534
  "$value": {
530
- "value": 30,
535
+ "value": 24,
531
536
  "unit": "px"
532
- }
537
+ },
538
+ "$description": "Tailwind 4 default text-2xl (hds#283 ramp)."
533
539
  },
534
540
  "3xl": {
535
541
  "$value": {
536
- "value": 36,
542
+ "value": 30,
537
543
  "unit": "px"
538
- }
544
+ },
545
+ "$description": "Tailwind 4 default text-3xl (hds#283 ramp)."
539
546
  },
540
547
  "4xl": {
541
548
  "$value": {
542
- "value": 48,
549
+ "value": 36,
543
550
  "unit": "px"
544
- }
551
+ },
552
+ "$description": "Tailwind 4 default text-4xl (hds#283 ramp)."
545
553
  },
546
554
  "5xl": {
547
555
  "$value": {
548
- "value": 72,
556
+ "value": 48,
549
557
  "unit": "px"
550
558
  },
551
- "$description": "Swiss-canon display size. Static desktop value; fluid in theme.css."
559
+ "$description": "Tailwind 4 default text-5xl (hds#283 ramp)."
552
560
  },
553
561
  "6xl": {
554
562
  "$value": {
555
- "value": 80,
563
+ "value": 60,
556
564
  "unit": "px"
557
- }
565
+ },
566
+ "$description": "Swiss-canon display size (hds#283 ramp). Static desktop value; fluid in theme.css. Tailwind 4 default text-6xl."
558
567
  }
559
568
  },
560
569
  "weight": {
@@ -968,6 +977,11 @@
968
977
  "easing": "{primitive.easing.accelerate}"
969
978
  },
970
979
  "$description": "For elements being removed from the DOM."
980
+ },
981
+ "distance": {
982
+ "$type": "dimension",
983
+ "$value": "{primitive.space.6}",
984
+ "$description": "Travel distance for a scroll-reveal translateY offset. Coincides in value with semantic.space.scale.md today, but names a motion travel distance rather than a spacing tier (hds#242)."
971
985
  }
972
986
  },
973
987
  "color": {
@@ -1434,7 +1448,44 @@
1434
1448
  },
1435
1449
  "space": {
1436
1450
  "$type": "dimension",
1437
- "$description": "Semantic spacing tiers: subgrid, component, layout, section.",
1451
+ "$description": "Semantic spacing tiers: subgrid, component, layout, section, scale.",
1452
+ "scale": {
1453
+ "$description": "hds#206 — the canonical spacing vocabulary. One monotonic, single-family t-shirt scale (xs < sm < md < lg < xl) for the `p`/`m`/`gap` family of props on Box/Stack. Supersedes the four un-ordered gap families below (subgrid/component/layout/section) and the 24px alias triplet (layout.normal / layout.gutter / component.padding) for NEW usage; those remain live, deprecated aliases until the consumer codemod (hds#206 remaining work) migrates callers and removes them — not a breaking change yet.",
1454
+ "xs": {
1455
+ "$value": "{primitive.space.2}",
1456
+ "$description": "8px — smallest step. Same value as component.gap (deprecated alias)."
1457
+ },
1458
+ "sm": {
1459
+ "$value": "{primitive.space.4}",
1460
+ "$description": "16px — same value as layout.tight (deprecated alias)."
1461
+ },
1462
+ "md": {
1463
+ "$value": "{primitive.space.6}",
1464
+ "$description": "24px — same value as layout.normal (deprecated alias). Default of the overridable roles surface.padding and region.gutter, which replace the deprecated component.padding / layout.gutter."
1465
+ },
1466
+ "lg": {
1467
+ "$value": "{primitive.space.8}",
1468
+ "$description": "32px — same value as layout.inset (deprecated alias)."
1469
+ },
1470
+ "xl": {
1471
+ "$value": "{primitive.space.12}",
1472
+ "$description": "48px — same value as layout.spacious (deprecated alias)."
1473
+ }
1474
+ },
1475
+ "surface": {
1476
+ "$description": "hds#206 — the overridable surface inset. A named role on the t-shirt scale rather than a scale step, because tenants (per brand and density) override it at runtime; its value is always a scale step.",
1477
+ "padding": {
1478
+ "$value": "{semantic.space.scale.md}",
1479
+ "$description": "24px (scale.md) default inset for cards, forms, panels, and grouped surfaces. Tenants override it with another scale step (tenants/*/tokens.json, incl. a Compact density mode). Replaces the deprecated semantic.space.component.padding."
1480
+ }
1481
+ },
1482
+ "region": {
1483
+ "$description": "hds#206 — the overridable region gutter. A named role on the t-shirt scale rather than a scale step, because theme.css retunes it per viewport; its value is always a scale step.",
1484
+ "gutter": {
1485
+ "$value": "{semantic.space.scale.md}",
1486
+ "$description": "24px (scale.md) column and region gutters. theme.css sets it responsively to scale.lg (32px) and, below 640px, scale.sm (16px). Replaces the deprecated semantic.space.layout.gutter."
1487
+ }
1488
+ },
1438
1489
  "subgrid": {
1439
1490
  "hairline": {
1440
1491
  "$value": "{primitive.space.px1}",
@@ -1452,37 +1503,44 @@
1452
1503
  "component": {
1453
1504
  "gap": {
1454
1505
  "$value": "{primitive.space.2}",
1455
- "$description": "8px label↔input rhythm and closely coupled control spacing."
1506
+ "$description": "8px label↔input rhythm and closely coupled control spacing. DEPRECATED alias (hds#206) — use semantic.space.scale.xs; kept live, no removal yet.",
1507
+ "$deprecated": "hds#206 — use semantic.space.scale.xs"
1456
1508
  },
1457
1509
  "medium": {
1458
1510
  "$value": "{primitive.space.3}",
1459
1511
  "$description": "12px adjacent form fields and medium intra-component gaps."
1460
1512
  },
1461
1513
  "padding": {
1462
- "$value": "{primitive.space.6}",
1463
- "$description": "24px default inset for cards, forms, panels, and grouped surfaces."
1514
+ "$value": "{semantic.space.surface.padding}",
1515
+ "$description": "24px default inset for cards, forms, panels, and grouped surfaces. DEPRECATED alias (hds#206) — use semantic.space.surface.padding (tenant/density-overridable); kept live, no removal yet.",
1516
+ "$deprecated": "hds#206 — use semantic.space.surface.padding"
1464
1517
  }
1465
1518
  },
1466
1519
  "layout": {
1467
1520
  "tight": {
1468
1521
  "$value": "{primitive.space.4}",
1469
- "$description": "16px default HdsStack gap and inter-component spacing."
1522
+ "$description": "16px default HdsStack gap and inter-component spacing. DEPRECATED alias (hds#206) — use semantic.space.scale.sm; kept live, no removal yet.",
1523
+ "$deprecated": "hds#206 — use semantic.space.scale.sm"
1470
1524
  },
1471
1525
  "normal": {
1472
1526
  "$value": "{primitive.space.6}",
1473
- "$description": "24px column gutters and sidebar gutter spacing."
1527
+ "$description": "24px column gutters and sidebar gutter spacing. DEPRECATED alias (hds#206) — use semantic.space.scale.md; kept live, no removal yet.",
1528
+ "$deprecated": "hds#206 — use semantic.space.scale.md"
1474
1529
  },
1475
1530
  "gutter": {
1476
- "$value": "{primitive.space.6}",
1477
- "$description": "24px column and region gutters (alias for layout.normal)."
1531
+ "$value": "{semantic.space.region.gutter}",
1532
+ "$description": "24px column and region gutters. DEPRECATED alias (hds#206) — use semantic.space.region.gutter (responsive in theme.css); kept live, no removal yet.",
1533
+ "$deprecated": "hds#206 — use semantic.space.region.gutter"
1478
1534
  },
1479
1535
  "inset": {
1480
1536
  "$value": "{primitive.space.8}",
1481
- "$description": "32px major block separation and inset inter-component gaps."
1537
+ "$description": "32px major block separation and inset inter-component gaps. DEPRECATED alias (hds#206) — use semantic.space.scale.lg; kept live, no removal yet.",
1538
+ "$deprecated": "hds#206 — use semantic.space.scale.lg"
1482
1539
  },
1483
1540
  "spacious": {
1484
1541
  "$value": "{primitive.space.12}",
1485
- "$description": "48px section break and whitespace separator between major content blocks."
1542
+ "$description": "48px section break and whitespace separator between major content blocks. DEPRECATED alias (hds#206) — use semantic.space.scale.xl; kept live, no removal yet.",
1543
+ "$deprecated": "hds#206 — use semantic.space.scale.xl"
1486
1544
  }
1487
1545
  },
1488
1546
  "section": {
@@ -1587,28 +1645,28 @@
1587
1645
  "display": {
1588
1646
  "$value": {
1589
1647
  "fontFamily": "{primitive.typography.family.display}",
1590
- "fontSize": "{primitive.typography.size.5xl}",
1648
+ "fontSize": "{primitive.typography.size.6xl}",
1591
1649
  "fontWeight": "{primitive.typography.weight.bold}",
1592
1650
  "letterSpacing": "{primitive.typography.letterSpacing.tight}",
1593
1651
  "lineHeight": "{primitive.typography.lineHeight.none}"
1594
1652
  },
1595
- "$description": "Display headline. 72px / Satoshi bold 700 / leading-none.",
1653
+ "$description": "Display headline. 60px / Satoshi bold 700 / leading-none (hds#283: was 72px/5xl).",
1596
1654
  "$extensions": {
1597
1655
  "com.figma.variables": {
1598
- "fontSize": "clamp(40px, 8vw, 72px)",
1599
- "note": "Figma stores the 72px desktop-max static value. Browser CSS overrides with fluid scaling (40px min → 72px max). See src/styles/theme.css."
1656
+ "fontSize": "clamp(40px, 8vw, 60px)",
1657
+ "note": "Figma stores the 60px desktop-max static value. Browser CSS overrides with fluid scaling (40px min → 60px max). See src/styles/theme.css."
1600
1658
  }
1601
1659
  }
1602
1660
  },
1603
1661
  "h1": {
1604
1662
  "$value": {
1605
1663
  "fontFamily": "{primitive.typography.family.display}",
1606
- "fontSize": "{primitive.typography.size.4xl}",
1664
+ "fontSize": "{primitive.typography.size.5xl}",
1607
1665
  "fontWeight": "{primitive.typography.weight.bold}",
1608
1666
  "letterSpacing": "{primitive.typography.letterSpacing.tight}",
1609
1667
  "lineHeight": "{primitive.typography.lineHeight.tight}"
1610
1668
  },
1611
- "$description": "Primary section headings (h1). 48px / Satoshi bold 700 / leading-tight.",
1669
+ "$description": "Primary section headings (h1). 48px / Satoshi bold 700 / leading-tight (hds#283: rung renamed 4xl→5xl, px unchanged).",
1612
1670
  "$extensions": {
1613
1671
  "com.figma.variables": {
1614
1672
  "fontSize": "clamp(32px, 6vw, 48px)",
@@ -1619,12 +1677,12 @@
1619
1677
  "h2": {
1620
1678
  "$value": {
1621
1679
  "fontFamily": "{primitive.typography.family.display}",
1622
- "fontSize": "{primitive.typography.size.2xl}",
1680
+ "fontSize": "{primitive.typography.size.3xl}",
1623
1681
  "fontWeight": "{primitive.typography.weight.bold}",
1624
1682
  "letterSpacing": "{primitive.typography.letterSpacing.tight}",
1625
- "lineHeight": "42px"
1683
+ "lineHeight": "40px"
1626
1684
  },
1627
- "$description": "Secondary section headings (h2). Satoshi bold 700, 30px, line-height 42px.",
1685
+ "$description": "Secondary section headings (h2). Satoshi bold 700, 30px, line-height 40px (hds#283: rung renamed, was 42px).",
1628
1686
  "$extensions": {
1629
1687
  "com.figma.variables": {
1630
1688
  "fontSize": "clamp(24px, 3.5vw, 30px)",
@@ -1635,12 +1693,12 @@
1635
1693
  "h3": {
1636
1694
  "$value": {
1637
1695
  "fontFamily": "{primitive.typography.family.display}",
1638
- "fontSize": "{primitive.typography.size.lg}",
1696
+ "fontSize": "{primitive.typography.size.xl}",
1639
1697
  "fontWeight": "{primitive.typography.weight.bold}",
1640
1698
  "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1641
1699
  "lineHeight": "28px"
1642
1700
  },
1643
- "$description": "Component and card headers (h3). 20px / Satoshi bold 700 500 / leading-snug.",
1701
+ "$description": "Component and card headers (h3). 20px / Satoshi bold 700 500 / leading-snug (hds#283: rung renamed lg→xl, px unchanged).",
1644
1702
  "$extensions": {
1645
1703
  "com.figma.variables": {
1646
1704
  "fontSize": "clamp(18px, 2vw, 20px)",
@@ -1654,13 +1712,13 @@
1654
1712
  "fontSize": "{primitive.typography.size.base}",
1655
1713
  "fontWeight": "{primitive.typography.weight.medium}",
1656
1714
  "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1657
- "lineHeight": "28px",
1715
+ "lineHeight": "24px",
1658
1716
  "maxWidth": {
1659
1717
  "value": 60,
1660
1718
  "unit": "ch"
1661
1719
  }
1662
1720
  },
1663
- "$description": "Body prose. Satoshi medium, 17px, line-height 28px, max 60ch measure."
1721
+ "$description": "Body prose. Satoshi medium, 16px, line-height 24px, max 60ch measure (hds#283: was 17px/28px)."
1664
1722
  },
1665
1723
  "ui": {
1666
1724
  "$value": {
@@ -1668,26 +1726,23 @@
1668
1726
  "fontSize": "{primitive.typography.size.sm}",
1669
1727
  "fontWeight": "{primitive.typography.weight.medium}",
1670
1728
  "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1671
- "lineHeight": "24px",
1729
+ "lineHeight": "20px",
1672
1730
  "maxWidth": {
1673
1731
  "value": 60,
1674
1732
  "unit": "ch"
1675
1733
  }
1676
1734
  },
1677
- "$description": "UI text for nav, labels, captions. Satoshi medium, 15px, line-height 24px."
1735
+ "$description": "UI text for nav, labels, captions. Satoshi medium, 14px, line-height 20px (hds#283: was 15px/24px)."
1678
1736
  },
1679
1737
  "caption": {
1680
1738
  "$value": {
1681
1739
  "fontFamily": "{primitive.typography.family.primary}",
1682
- "fontSize": {
1683
- "value": 12,
1684
- "unit": "px"
1685
- },
1740
+ "fontSize": "{primitive.typography.size.xs}",
1686
1741
  "fontWeight": "{primitive.typography.weight.medium}",
1687
1742
  "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1688
1743
  "lineHeight": "16px"
1689
1744
  },
1690
- "$description": "Caption / helper text. Satoshi medium, 12px, line-height 16px. Matches the Figma typography/caption text style."
1745
+ "$description": "Caption / helper text. Satoshi medium, 12px, line-height 16px. Matches the Figma typography/caption text style; now sourced from primitive.xs (hds#283)."
1691
1746
  },
1692
1747
  "eyebrow": {
1693
1748
  "$value": {
@@ -1695,15 +1750,15 @@
1695
1750
  "fontSize": "{primitive.typography.size.xs}",
1696
1751
  "fontWeight": "{primitive.typography.weight.medium}",
1697
1752
  "letterSpacing": "{primitive.typography.letterSpacing.caps}",
1698
- "lineHeight": "20px",
1753
+ "lineHeight": "16px",
1699
1754
  "textTransform": "uppercase"
1700
1755
  },
1701
- "$description": "Eyebrow / kicker label. Satoshi medium, 13px, caps tracking, uppercase."
1756
+ "$description": "Eyebrow / kicker label. Satoshi medium, 12px, caps tracking, uppercase (hds#283: was 13px/20px)."
1702
1757
  },
1703
1758
  "mono": {
1704
1759
  "$value": {
1705
1760
  "fontFamily": "{primitive.typography.family.mono}",
1706
- "fontSize": "{primitive.typography.size.xs}",
1761
+ "fontSize": "{primitive.typography.size.sm}",
1707
1762
  "fontWeight": "{primitive.typography.weight.regular}",
1708
1763
  "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1709
1764
  "lineHeight": "20px",
@@ -1712,7 +1767,7 @@
1712
1767
  "unit": "ch"
1713
1768
  }
1714
1769
  },
1715
- "$description": "Monospace for code, token names, shortcuts. Geist Mono regular, 13px."
1770
+ "$description": "Monospace for code, token names, shortcuts. Geist Mono regular, 14px (hds#283: repointed xs→sm; xs alone would give 12px)."
1716
1771
  },
1717
1772
  "lineHeight": {
1718
1773
  "none": {
@@ -1844,6 +1899,11 @@
1844
1899
  "$type": "dimension",
1845
1900
  "$value": "{primitive.radius.8}",
1846
1901
  "$description": "Corner radius for action elements (buttons, inputs, badges); Tailwind rounded-md resolves here. Override role.radius to reshape the system."
1902
+ },
1903
+ "control": {
1904
+ "$type": "dimension",
1905
+ "$value": "{primitive.radius.4}",
1906
+ "$description": "Corner radius for small interactive control glyphs (e.g. checkbox glyph box) that are not fully round and not the standard action radius. Real design-scale value, distinct from semantic.radius.action (hds#242)."
1847
1907
  }
1848
1908
  },
1849
1909
  "borderWidth": {
@@ -1907,6 +1967,67 @@
1907
1967
  },
1908
1968
  "$description": "Modal, dialog, and drawer elevation."
1909
1969
  }
1970
+ },
1971
+ "size": {
1972
+ "$type": "dimension",
1973
+ "$description": "Semantic sizing roles for control glyphs, avatars, and table rows. Distinct roles may share a primitive value today by coincidence; keep them separate so one can change without dragging the other (hds#242).",
1974
+ "control": {
1975
+ "$description": "Interactive control glyph/element sizing (checkbox glyph box, radio dot, slider track/fill, code-block copy-button-matched footprint).",
1976
+ "sm": {
1977
+ "$value": "{primitive.size.8}",
1978
+ "$description": "Small control element — radio dot, slider fill bar height."
1979
+ },
1980
+ "md": {
1981
+ "$value": "{primitive.size.20}",
1982
+ "$description": "Medium control element — checkbox glyph box, slider track wrapper height."
1983
+ },
1984
+ "lg": {
1985
+ "$value": "{primitive.size.32}",
1986
+ "$description": "Large control footprint — code-block inline-wrapper min-height / copy-button-matched pre padding."
1987
+ }
1988
+ },
1989
+ "icon": {
1990
+ "$description": "Reserved icon-size role, parallel to the existing --hds-icon-* bridge (src/styles/theme.css), for future direct semantic.size.icon consumers.",
1991
+ "sm": {
1992
+ "$value": "{primitive.size.16}",
1993
+ "$description": "Small icon box — matches --hds-icon-small."
1994
+ },
1995
+ "md": {
1996
+ "$value": "{primitive.size.20}",
1997
+ "$description": "Medium icon box — matches --hds-icon-medium."
1998
+ },
1999
+ "lg": {
2000
+ "$value": "{primitive.size.24}",
2001
+ "$description": "Large icon box — matches --hds-icon-large."
2002
+ }
2003
+ },
2004
+ "avatar": {
2005
+ "$value": "{primitive.size.40}",
2006
+ "$description": "Avatar diagonal (width/height) for activity-feed and similar identity glyphs. Coincides in pixels with row.compact today; kept as a separate role per hds#242 so either can change independently."
2007
+ },
2008
+ "row": {
2009
+ "$description": "Table row minimum height by density.",
2010
+ "compact": {
2011
+ "$value": "{primitive.size.40}",
2012
+ "$description": "Compact-density row minimum height."
2013
+ },
2014
+ "comfortable": {
2015
+ "$value": "{primitive.size.48}",
2016
+ "$description": "Comfortable-density row minimum height."
2017
+ }
2018
+ }
2019
+ },
2020
+ "zIndex": {
2021
+ "$type": "number",
2022
+ "$description": "Named stacking layers, aliasing the numeric primitive.zIndex scale (hds#242).",
2023
+ "control": {
2024
+ "$value": "{primitive.zIndex.10}",
2025
+ "$description": "Raises an interactive control (e.g. a native range input) above its visual decoration for hit-testing."
2026
+ },
2027
+ "sticky": {
2028
+ "$value": "{primitive.zIndex.100}",
2029
+ "$description": "Sticky-positioned elements, such as a table header row."
2030
+ }
1910
2031
  }
1911
2032
  },
1912
2033
  "component": {
@@ -2130,7 +2251,7 @@
2130
2251
  "fontSize": {
2131
2252
  "$type": "dimension",
2132
2253
  "$value": "{primitive.typography.size.xs}",
2133
- "$description": "Small button label size (13px)."
2254
+ "$description": "Small button label size (12px, hds#283: was 13px)."
2134
2255
  },
2135
2256
  "iconSize": {
2136
2257
  "$type": "dimension",
@@ -2162,7 +2283,7 @@
2162
2283
  "fontSize": {
2163
2284
  "$type": "dimension",
2164
2285
  "$value": "{primitive.typography.size.sm}",
2165
- "$description": "Medium button label size (15px)."
2286
+ "$description": "Medium button label size (14px, hds#283: was 15px)."
2166
2287
  },
2167
2288
  "iconSize": {
2168
2289
  "$type": "dimension",
@@ -2194,7 +2315,7 @@
2194
2315
  "fontSize": {
2195
2316
  "$type": "dimension",
2196
2317
  "$value": "{primitive.typography.size.base}",
2197
- "$description": "Large button label size (17px)."
2318
+ "$description": "Large button label size (16px, hds#283: was 17px)."
2198
2319
  },
2199
2320
  "iconSize": {
2200
2321
  "$type": "dimension",