@hirobius/design-system 0.15.0 → 0.16.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.
@@ -108,7 +108,6 @@
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-2xs: 10px;
112
111
  --primitive-typography-size-xs: 13px;
113
112
  --primitive-typography-size-sm: 15px;
114
113
  --primitive-typography-size-base: 17px;
@@ -119,10 +118,8 @@
119
118
  --primitive-typography-size-4xl: 48px;
120
119
  --primitive-typography-size-5xl: 72px;
121
120
  --primitive-typography-size-6xl: 80px;
122
- --primitive-typography-weight-light: 300;
123
121
  --primitive-typography-weight-regular: 400;
124
122
  --primitive-typography-weight-medium: 500;
125
- --primitive-typography-weight-semibold: 600;
126
123
  --primitive-typography-weight-bold: 700;
127
124
  --primitive-typography-lineHeight-compact: 0.95;
128
125
  --primitive-typography-lineHeight-none: 1;
@@ -130,11 +127,8 @@
130
127
  --primitive-typography-lineHeight-snug: 1.375;
131
128
  --primitive-typography-lineHeight-normal: 1.5;
132
129
  --primitive-typography-lineHeight-relaxed: 1.625;
133
- --primitive-typography-letterSpacing-tighter: -0.02em;
134
130
  --primitive-typography-letterSpacing-tight: -0.01em;
135
131
  --primitive-typography-letterSpacing-normal: 0em;
136
- --primitive-typography-letterSpacing-wide: 0.01em;
137
- --primitive-typography-letterSpacing-wider: 0.02em;
138
132
  --primitive-typography-letterSpacing-caps: 0.06em;
139
133
  --primitive-duration-instant: 100ms;
140
134
  --primitive-duration-short: 150ms;
@@ -163,7 +157,9 @@
163
157
  --primitive-size-80: 80px;
164
158
  --primitive-size-96: 96px;
165
159
  --primitive-size-interactive-min: 44px;
160
+ --primitive-size-interactive-minCompact: 24px;
166
161
  --primitive-size-width-96: 96px;
162
+ --primitive-size-width-280: 280px;
167
163
  --primitive-size-width-760: 760px;
168
164
  --primitive-size-width-1200: 1200px;
169
165
  --primitive-size-width-50ch: 50ch;
@@ -247,6 +243,7 @@
247
243
  --semantic-space-sidebar-gap: var(--primitive-space-4);
248
244
  --semantic-space-sidebar-sectionGap: var(--primitive-space-3);
249
245
  --semantic-space-sidebar-railPadding: var(--primitive-space-5);
246
+ --semantic-space-sidebar-railWidth: var(--primitive-size-width-280);
250
247
  --semantic-layout-width-content: var(--primitive-size-width-760);
251
248
  --semantic-layout-width-max: var(--primitive-size-width-1200);
252
249
  --semantic-layout-container-maxWidth: var(--primitive-size-width-1200);
@@ -505,4 +502,59 @@
505
502
  --semantic-accent-subtle: var(--primitive-color-neutral-800);
506
503
  --component-badge-bg: var(--semantic-color-feedback-bg-info);
507
504
  --component-button-primary-textDisabled: var(--semantic-color-content-disabled);
505
+ --semantic-elevation-flat-surface: var(--semantic-color-surface-page);
506
+ --semantic-elevation-flat-border: var(--semantic-color-border-subtle);
507
+ --semantic-elevation-raised-surface: var(--semantic-color-surface-raised);
508
+ --semantic-elevation-floating-surface: var(--semantic-color-surface-raised);
509
+ --semantic-elevation-overlay-surface: var(--semantic-color-surface-overlay);
510
+ --component-nav-bg: var(--semantic-color-surface-page);
511
+ --component-nav-bgActive: var(--semantic-accent-subtle);
512
+ --component-nav-borderActive: var(--semantic-color-surface-accent);
513
+ --component-nav-text: var(--semantic-color-content-secondary);
514
+ --component-nav-textActive: var(--semantic-color-content-primary);
515
+ --component-tag-background: var(--semantic-accent-subtle);
516
+ --component-tag-text: var(--semantic-color-content-primary);
517
+ --component-tag-border: var(--semantic-color-border-default);
518
+ --component-tag-activeText: var(--semantic-color-content-onAccent);
519
+ --component-tag-activeBackground: var(--semantic-accent-rest);
520
+ --component-tag-activeBorder: var(--semantic-accent-rest);
521
+ --component-tag-activeHover: var(--semantic-accent-hover);
522
+ --component-badge-text: var(--semantic-color-content-primary);
523
+ --component-button-bg: var(--semantic-color-surface-accent);
524
+ --component-button-bgHover: var(--semantic-accent-hover);
525
+ --component-button-text: var(--semantic-color-content-onAccent);
526
+ --component-button-primary-bgDisabled: var(--semantic-color-surface-accentSubtle);
527
+ --component-button-secondary-bg-rest: var(--semantic-color-surface-page);
528
+ --component-button-secondary-bg-hover: var(--semantic-color-surface-raised);
529
+ --component-button-secondary-bg-pressed: var(--semantic-color-surface-overlay);
530
+ --component-button-secondary-border-rest: var(--semantic-color-border-interactive);
531
+ --component-button-secondary-border-hover: var(--semantic-color-border-interactive);
532
+ --component-button-secondary-border-pressed: var(--semantic-color-border-interactive);
533
+ --component-button-secondary-border-disabled: var(--semantic-color-border-subdued);
534
+ --component-button-secondary-text: var(--semantic-color-content-primary);
535
+ --component-input-bg: var(--semantic-color-surface-raised);
536
+ --component-input-text: var(--semantic-color-content-primary);
537
+ --component-input-border: var(--semantic-color-border-interactive);
538
+ --component-input-borderError: var(--semantic-color-feedback-error);
539
+ --component-card-bg: var(--semantic-color-surface-raised);
540
+ --component-card-border: var(--semantic-color-border-default);
541
+ --role-background: var(--semantic-color-surface-page);
542
+ --role-foreground: var(--semantic-color-content-primary);
543
+ --role-card: var(--semantic-color-surface-raised);
544
+ --role-card-foreground: var(--semantic-color-content-primary);
545
+ --role-popover: var(--semantic-color-surface-overlay);
546
+ --role-popover-foreground: var(--semantic-color-content-primary);
547
+ --role-primary: var(--semantic-color-surface-accent);
548
+ --role-primary-foreground: var(--semantic-color-content-onAccent);
549
+ --role-secondary: var(--semantic-color-surface-raised);
550
+ --role-secondary-foreground: var(--semantic-color-content-primary);
551
+ --role-muted: var(--semantic-color-surface-overlay);
552
+ --role-muted-foreground: var(--semantic-color-content-secondary);
553
+ --role-accent: var(--semantic-color-surface-accentSubtle);
554
+ --role-accent-foreground: var(--semantic-color-content-accent);
555
+ --role-destructive: var(--semantic-color-feedback-error);
556
+ --role-destructive-foreground: var(--semantic-color-content-inverse);
557
+ --role-border: var(--semantic-color-border-default);
558
+ --role-input: var(--semantic-color-border-interactive);
559
+ --role-ring: var(--semantic-color-border-accent);
508
560
  }
@@ -495,12 +495,6 @@
495
495
  },
496
496
  "size": {
497
497
  "$type": "dimension",
498
- "2xs": {
499
- "$value": {
500
- "value": 10,
501
- "unit": "px"
502
- }
503
- },
504
498
  "xs": {
505
499
  "$value": {
506
500
  "value": 13,
@@ -565,19 +559,12 @@
565
559
  },
566
560
  "weight": {
567
561
  "$type": "fontWeight",
568
- "light": {
569
- "$value": 300,
570
- "$description": "Swiss-canon heading weight. Display and h1/h2 composites only."
571
- },
572
562
  "regular": {
573
563
  "$value": 400
574
564
  },
575
565
  "medium": {
576
566
  "$value": 500
577
567
  },
578
- "semibold": {
579
- "$value": 600
580
- },
581
568
  "bold": {
582
569
  "$value": 700
583
570
  }
@@ -607,12 +594,6 @@
607
594
  },
608
595
  "letterSpacing": {
609
596
  "$type": "dimension",
610
- "tighter": {
611
- "$value": {
612
- "value": -0.02,
613
- "unit": "em"
614
- }
615
- },
616
597
  "tight": {
617
598
  "$value": {
618
599
  "value": -0.01,
@@ -625,18 +606,6 @@
625
606
  "unit": "em"
626
607
  }
627
608
  },
628
- "wide": {
629
- "$value": {
630
- "value": 0.01,
631
- "unit": "em"
632
- }
633
- },
634
- "wider": {
635
- "$value": {
636
- "value": 0.02,
637
- "unit": "em"
638
- }
639
- },
640
609
  "caps": {
641
610
  "$value": {
642
611
  "value": 0.06,
@@ -862,6 +831,14 @@
862
831
  "unit": "px"
863
832
  },
864
833
  "$description": "Minimum interactive hit target size."
834
+ },
835
+ "minCompact": {
836
+ "$type": "dimension",
837
+ "$value": {
838
+ "value": 24,
839
+ "unit": "px"
840
+ },
841
+ "$description": "WCAG 2.2 AA (2.5.8) minimum target size for a compact inline control, such as a tokenizer chip's remove button, where the 44px AAA floor (2.5.5) does not apply."
865
842
  }
866
843
  },
867
844
  "width": {
@@ -893,6 +870,14 @@
893
870
  "value": 50,
894
871
  "unit": "ch"
895
872
  }
873
+ },
874
+ "280": {
875
+ "$type": "dimension",
876
+ "$value": {
877
+ "value": 280,
878
+ "unit": "px"
879
+ },
880
+ "$description": "Docs-shell rail width (hds#280). Our own number, not HeroUI's 268px — wide enough for the longest top-level nav label at the default type ramp with room to spare."
896
881
  }
897
882
  }
898
883
  },
@@ -1530,6 +1515,11 @@
1530
1515
  "railPadding": {
1531
1516
  "$value": "{primitive.space.5}",
1532
1517
  "$description": "20px outer padding for sidebar and TOC rails."
1518
+ },
1519
+ "railWidth": {
1520
+ "$type": "dimension",
1521
+ "$value": "{primitive.size.width.280}",
1522
+ "$description": "Docs-shell left nav rail and right TOC rail width (hds#280). Both rails share one width token; default 0 below their breakpoint (see HdsDocsShell)."
1533
1523
  }
1534
1524
  }
1535
1525
  },
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "license": "SEE LICENSE IN NOTICE.md",
21
21
  "private": false,
22
- "version": "0.15.0",
22
+ "version": "0.16.0",
23
23
  "engines": {
24
24
  "node": ">=20",
25
25
  "pnpm": ">=8"
@@ -227,10 +227,10 @@
227
227
  },
228
228
  "scripts": {
229
229
  "_comment:a11y-high-value": "The following check:* validators are high-value accessibility checks that catch real violations (check:focus found 1 missing focus class). Kept dormant/manual-only to avoid pre-commit performance regression. Candidates to wire into pretest after CI stability review.",
230
+ "_comment:editorconfig-version": "check:mojibake routes through scripts/lib/mojibake.mjs, which pins EC_VERSION=v3.7.0. The editorconfig-checker@6.1.x npm wrapper expects binary v3.7.0 but downloads the latest Go release (v3.8.0, 2026-06-25), so a fresh install fails with a version mismatch (binary != config). Pinning the download to the wrapper's expected version keeps CI + pre-commit green. Bump both together when upgrading the npm package. The wrapper also SKIPS gracefully (like check:secrets) when the binary download is network-blocked (remote agent sessions), so hooks no longer need --no-verify (#18/#52); the gate still enforces wherever the binary is present.",
230
231
  "_comment:link-integrity": "check:doc-refs and check:routes both validate internal link integrity (different surfaces: doc refs vs route links). Kept dormant/manual-only to prevent pre-commit cascade.",
231
232
  "_comment:security-baseline": "check:security validates OWASP baseline patterns. Dormant/manual-only — candidate for integration into security-focused CI lane, not pretest.",
232
233
  "_comment:token-integrity": "check:css-values, check:token-structure validate token system correctness. Dormant/manual-only due to overlapping scope with check:fast and existing token validators.",
233
- "_comment:editorconfig-version": "check:mojibake routes through scripts/lib/mojibake.mjs, which pins EC_VERSION=v3.7.0. The editorconfig-checker@6.1.x npm wrapper expects binary v3.7.0 but downloads the latest Go release (v3.8.0, 2026-06-25), so a fresh install fails with a version mismatch (binary != config). Pinning the download to the wrapper's expected version keeps CI + pre-commit green. Bump both together when upgrading the npm package. The wrapper also SKIPS gracefully (like check:secrets) when the binary download is network-blocked (remote agent sessions), so hooks no longer need --no-verify (#18/#52); the gate still enforces wherever the binary is present.",
234
234
  "api:check": "node scripts/audit-component-integrity.mjs --api",
235
235
  "api:update": "node scripts/audit-component-integrity.mjs --api --update-baseline",
236
236
  "audit:bundle": "node scripts/audit-bundle.mjs",
@@ -238,6 +238,7 @@
238
238
  "audit:sbom": "node scripts/audit-sbom.mjs",
239
239
  "audit:sidecar": "node scripts/generate-security-posture.mjs",
240
240
  "audit:style-dictionary": "bash scripts/poc/style-dictionary-poc/run.sh",
241
+ "build-storybook": "storybook build",
241
242
  "build:lib": "vite build -c vite.config.lib.ts && pnpm build:types && node scripts/build-vars-css.mjs && node scripts/embed-fonts.mjs && node scripts/build-styles-css.mjs && node scripts/build-static-css.mjs",
242
243
  "build:types": "tsc -p tsconfig.dts.json && node scripts/strip-dts-side-effects.mjs && node scripts/add-dts-extensions.mjs",
243
244
  "catalog": "node scripts/generate-visual-catalog.mjs",
@@ -245,12 +246,6 @@
245
246
  "changeset": "changeset",
246
247
  "changeset:add": "changeset",
247
248
  "changeset:version": "changeset version",
248
- "storybook": "storybook dev -p 6006",
249
- "build-storybook": "storybook build",
250
- "storybook:deploy": "node scripts/deploy-storybook.mjs",
251
- "chromatic": "chromatic --exit-zero-on-changes",
252
- "readme:counts": "node scripts/build-readme-counts.mjs",
253
- "release": "pnpm build:lib && pnpm smoke:consumer --skip-build && changeset publish",
254
249
  "check": "pnpm check:full",
255
250
  "check:a11y": "pnpm lint --rule '{\"jsx-a11y/alt-text\":\"error\",\"jsx-a11y/img-redundant-alt\":\"error\"}'",
256
251
  "check:attributions": "node scripts/check-attributions.mjs",
@@ -265,14 +260,15 @@
265
260
  "check:doc-refs": "node scripts/check-link-integrity.mjs --doc-refs-only",
266
261
  "check:docs": "node scripts/audit-component-integrity.mjs --docs && node scripts/check-token-descriptions.mjs --no-missing --quality",
267
262
  "check:exemptions": "node scripts/check-exemptions.mjs",
268
- "check:figma-mapping": "node scripts/check-figma-mapping.mjs",
269
263
  "check:fast": "node scripts/validate-manifest.mjs && node scripts/check-manifest-drift.mjs && node scripts/build-tokens.mjs && node scripts/verify-tokens.mjs && node scripts/audit-tokens.mjs --full && pnpm typecheck && node scripts/check-css-integrity.mjs && node scripts/audit-component-integrity.mjs --tokens && pnpm check:docs && node scripts/check-ref-forwarding.mjs && node scripts/check-hardcoded-spacing.mjs && node scripts/check-dimensions.mjs && node scripts/check-hardcoded-breakpoints.mjs && node scripts/check-typography-discipline.mjs && pnpm check:mojibake && node scripts/check-style-discipline.mjs --style-props-only && node scripts/check-tier-bypass.mjs && node scripts/check-link-integrity.mjs --doc-refs-only && node scripts/check-brand.mjs && node scripts/check-registry.mjs && node scripts/check-template-source-of-truth.mjs",
264
+ "check:figma-coverage": "node scripts/check-figma-coverage.mjs",
265
+ "check:figma-drift": "node scripts/check-figma-drift.mjs",
266
+ "check:figma-mapping": "node scripts/check-figma-mapping.mjs",
270
267
  "check:focus": "node scripts/check-focus-states.mjs",
271
268
  "check:font-files": "node scripts/check-typography-discipline.mjs --font-files-only",
272
269
  "check:fonts": "node scripts/check-typography-discipline.mjs --fonts-only",
273
270
  "check:forbidden-overrides": "node scripts/audit-tokens.mjs --forbidden",
274
271
  "check:format": "pnpm exec lint-staged",
275
- "check:figma-drift": "node scripts/check-figma-drift.mjs",
276
272
  "check:full": "node scripts/validate-manifest.mjs && node scripts/check-manifest-drift.mjs && node scripts/build-tokens.mjs && node scripts/verify-tokens.mjs && node scripts/audit-tokens.mjs --full && pnpm typecheck && node scripts/check-css-integrity.mjs && node scripts/audit-component-integrity.mjs --tokens && pnpm check:docs && node scripts/check-contrast.mjs && node scripts/check-focus-states.mjs && node scripts/check-reduced-motion.mjs && node scripts/check-ref-forwarding.mjs && node scripts/check-hardcoded-spacing.mjs && node scripts/check-dimensions.mjs && node scripts/check-hardcoded-breakpoints.mjs && node scripts/check-unresponsive-grids.mjs && node scripts/check-motion.mjs && node scripts/check-typography-discipline.mjs && pnpm check:mojibake && node scripts/check-style-discipline.mjs && node scripts/check-hardcoded-colors.mjs && node scripts/check-tier-bypass.mjs && node scripts/check-token-structure.mjs && node scripts/check-security-baseline.mjs && node scripts/check-attributions.mjs && node scripts/check-exemptions.mjs && node scripts/check-brand.mjs && node scripts/check-registry.mjs && node scripts/audit-component-integrity.mjs --api && node scripts/check-token-descriptions.mjs --no-missing && node scripts/check-token-renames.mjs && node scripts/check-tailwind-token-coverage.mjs",
277
273
  "check:ghost-tokens": "node scripts/audit-tokens.mjs --full",
278
274
  "check:grids": "node scripts/check-unresponsive-grids.mjs",
@@ -289,13 +285,19 @@
289
285
  "check:refs": "node scripts/check-ref-forwarding.mjs",
290
286
  "check:registry": "node scripts/check-registry.mjs",
291
287
  "check:release": "pnpm check:full && node scripts/check-style-discipline.mjs && pnpm build:lib && pnpm check:size",
288
+ "check:rendered-geometry": "node scripts/check-rendered-geometry.mjs",
289
+ "check:rendered-geometry:update": "node scripts/check-rendered-geometry.mjs --update-baseline",
292
290
  "check:routes": "node scripts/check-link-integrity.mjs --route-links-only",
293
291
  "check:secrets": "node scripts/check-secrets.mjs",
294
292
  "check:security": "node scripts/check-security-baseline.mjs",
295
293
  "check:semantic-report": "node scripts/audit-tokens.mjs --report-only",
296
294
  "check:size": "pnpm build:lib && size-limit",
297
295
  "check:spacing": "node scripts/check-hardcoded-spacing.mjs",
296
+ "check:story-coverage": "node scripts/check-story-coverage.mjs",
298
297
  "check:style-props": "node scripts/check-style-discipline.mjs --style-props-only",
298
+ "check:sync-map": "node scripts/check-sync-map.mjs",
299
+ "check:status-claims": "node scripts/check-status-claims.mjs --check",
300
+ "check:record-freshness": "node scripts/check-record-freshness.mjs",
299
301
  "check:tailwind": "pnpm lint --rule '{\"tailwindcss/no-custom-classname\":\"error\"}'",
300
302
  "check:tailwind-arbitrary": "pnpm lint --rule '{\"tailwindcss/no-arbitrary-value\":\"error\"}'",
301
303
  "check:tailwind-token-coverage": "node scripts/check-tailwind-token-coverage.mjs",
@@ -306,22 +308,31 @@
306
308
  "check:token-structure": "node scripts/check-token-structure.mjs",
307
309
  "check:tokens": "node scripts/check-hardcoded-colors.mjs && pnpm lint --rule '{\"tailwindcss/no-custom-classname\":\"error\"}' && node scripts/audit-tokens.mjs --forbidden && node scripts/check-tier-bypass.mjs && node scripts/check-hardcoded-spacing.mjs && node scripts/check-typography-discipline.mjs --fonts-only",
308
310
  "check:type-coverage": "pnpm exec type-coverage --at-least 99.9",
311
+ "chromatic": "chromatic --exit-zero-on-changes",
309
312
  "closure:plan": "node scripts/run-gates.mjs --channel pre-commit --emit-inventory docs/guardrails/full-strictness-inventory.json && node scripts/generate-closure-plan.mjs",
310
313
  "closure:plan:check": "node scripts/generate-closure-plan.mjs --check",
311
314
  "docs:api": "node scripts/generate-component-api.mjs",
312
315
  "docs:changelogs": "node scripts/generate-component-changelogs.mjs",
316
+ "docs:component": "node scripts/generate-component-page.mjs",
313
317
  "docs:llms": "node scripts/generate-llms-txt.mjs",
318
+ "docs:site": "node scripts/generate-component-page.mjs --all --clean",
319
+ "docs:site:inline": "node scripts/generate-component-page.mjs --all --clean --inline",
320
+ "docs:site:shots": "node scripts/generate-component-page.mjs --all --clean --shots",
314
321
  "figma-variables": "node scripts/build-figma-variables.mjs",
315
322
  "figma:connect:check": "node scripts/check-code-connect.mjs",
316
323
  "figma:connect:generate": "node scripts/generate-code-connect.mjs",
317
324
  "figma:connect:parse": "figma connect parse --exit-on-unreadable-files --skip-update-check",
318
- "figma:links": "node scripts/figma-links.mjs",
319
325
  "figma:disposition": "node scripts/figma-disposition.mjs",
326
+ "figma:inventory": "node scripts/figma-inventory.mjs",
327
+ "figma:links": "node scripts/figma-links.mjs",
320
328
  "figma:model": "node scripts/build-figma-model.mjs",
321
329
  "figma:native-import": "node scripts/build-figma-native-import.mjs",
322
330
  "figma:push": "node scripts/figma-push.mjs",
323
331
  "figma:snapshot": "node scripts/figma-snapshot.mjs",
332
+ "figma:staging-inventory": "node scripts/generate-staging-inventory.mjs",
333
+ "guardrail:sweep": "node scripts/guardrail-sweep.mjs",
324
334
  "harvest:design-md": "node scripts/harvest-design-md.mjs",
335
+ "hds:new": "node scripts/scaffold-component.mjs",
325
336
  "heal": "node scripts/self-heal.mjs",
326
337
  "heal:smoke": "node scripts/self-heal.mjs --smoke",
327
338
  "health-commit": "pnpm check:semantic-report && node scripts/print-health-commit.mjs",
@@ -332,15 +343,23 @@
332
343
  "llms:generate": "node scripts/generate-llms-txt.mjs",
333
344
  "manifest:generate": "node scripts/generate-manifest.mjs && node scripts/generate-component-api.mjs && node scripts/enrich-manifest.mjs",
334
345
  "manifest:project": "node scripts/generate-manifest-projection.mjs",
346
+ "prebuild-storybook": "node scripts/generate-component-api.mjs",
335
347
  "prebuild:lib": "node scripts/generate-component-api.mjs",
336
- "pretest": "node scripts/validate-manifest.mjs && node scripts/check-manifest-drift.mjs && node scripts/check-manifest-schema-semver.mjs && node scripts/audit-component-integrity.mjs --completeness && node scripts/check-source-canon.mjs && node scripts/check-binding-drift.mjs && node scripts/check-registry.mjs && node scripts/check-tenant-tokens.mjs && node scripts/check-props-exports.mjs && knip --no-exit-code",
348
+ "prestorybook": "node scripts/generate-component-api.mjs",
349
+ "pretest": "node scripts/validate-manifest.mjs && node scripts/check-manifest-drift.mjs && node scripts/check-manifest-schema-semver.mjs && node scripts/audit-component-integrity.mjs --completeness && node scripts/check-source-canon.mjs && node scripts/check-binding-drift.mjs && node scripts/check-registry.mjs && node scripts/check-tenant-tokens.mjs && node scripts/check-props-exports.mjs && knip --no-exit-code && node scripts/check-dark-alias-flip.mjs && node scripts/generate-staging-inventory.mjs --check",
350
+ "pretypecheck": "node scripts/audit-tokens.mjs --report-only",
351
+ "preview:build": "vite build --config preview/vite.config.mjs",
337
352
  "promote": "node scripts/promote.mjs",
338
- "hds:new": "node scripts/scaffold-component.mjs",
353
+ "readme:counts": "node scripts/build-readme-counts.mjs",
354
+ "release": "pnpm build:lib && pnpm smoke:consumer --skip-build && changeset publish",
339
355
  "scaffold:component": "node scripts/scaffold-component.mjs",
340
356
  "scaffold:tenant": "node scripts/scaffold-tenant.mjs",
341
357
  "size-limit": "size-limit --config .size-limit.cjs",
342
358
  "smoke:consumer": "node scripts/smoke-consumer.mjs && node scripts/check-published-types.mjs && node scripts/check-rsc-directives.mjs",
359
+ "storybook": "storybook dev -p 6006",
360
+ "storybook:deploy": "node scripts/deploy-storybook.mjs",
343
361
  "sync": "node scripts/build-tokens.mjs && node scripts/audit-tokens.mjs --forbidden && node scripts/build-handoff.mjs && node scripts/build-design-md.mjs && node scripts/build-figma-variables.mjs",
362
+ "sync-map": "node scripts/check-sync-map.mjs --gaps",
344
363
  "sync:health": "node scripts/generate-manifest.mjs && node scripts/generate-component-api.mjs && node scripts/enrich-manifest.mjs && node scripts/build-tokens.mjs && node scripts/audit-tokens.mjs --report-only && node scripts/build-design-md.mjs",
345
364
  "test": "vitest run --passWithNoTests",
346
365
  "test:a11y": "echo 'RETIRED (#161): the Playwright browser suite drove the docs SPA deleted in #90 — see tests-archive/README.md. Storybook is the verification surface.' && exit 1",
@@ -364,13 +383,6 @@
364
383
  "validate:manifest": "node scripts/validate-manifest.mjs",
365
384
  "visual-ingest": "node scripts/visual-ingest.mjs",
366
385
  "watch:guardrails": "nodemon --watch CLAUDE.md --watch .cursorrules --watch eslint.config.js --watch .github/workflows -e md,json,js,yml,yaml --exec \"node scripts/audit-guardrails.js\"",
367
- "watch:metrics": "nodemon --watch src/app/components --watch src/app/pages --watch src/app/design-system --watch src/app/styles -e tsx,ts,css --exec \"node scripts/audit-tokens.mjs --full && node scripts/generate-manifest.mjs\"",
368
- "prebuild-storybook": "node scripts/generate-component-api.mjs",
369
- "prestorybook": "node scripts/generate-component-api.mjs",
370
- "pretypecheck": "node scripts/audit-tokens.mjs --report-only",
371
- "preview:build": "vite build --config preview/vite.config.mjs",
372
- "figma:inventory": "node scripts/figma-inventory.mjs",
373
- "check:figma-coverage": "node scripts/check-figma-coverage.mjs",
374
- "guardrail:sweep": "node scripts/guardrail-sweep.mjs"
386
+ "watch:metrics": "nodemon --watch src/app/components --watch src/app/pages --watch src/app/design-system --watch src/app/styles -e tsx,ts,css --exec \"node scripts/audit-tokens.mjs --full && node scripts/generate-manifest.mjs\""
375
387
  }
376
388
  }