@hirobius/design-system 0.8.1 → 0.10.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/README.md +34 -40
- package/dist/hirobius-ui.js +150 -131
- package/dist/manifest.js +3 -3
- package/dist/mui.js +26 -0
- package/dist/styles.css +5 -0
- package/dist/tokens.css +1 -1
- package/dist/tokens.js +6 -0
- package/dist/types/src/app/components/badge.d.ts +1 -1
- package/dist/types/src/app/components/button.d.ts +1 -0
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +8 -0
- package/dist/types/src/app/design-system/generated-token-values.d.ts +6 -0
- package/dist/types/src/index.d.ts +43 -0
- package/dist/types/src/mui/index.d.ts +64 -0
- package/dist/variables.css +8 -0
- package/hirobius.tokens.json +43 -0
- package/package.json +8 -11
- package/public/hds-manifest.json +53 -1
- package/protocol/envelope.mjs +0 -201
- package/protocol/figma-snapshot.schema.json +0 -190
package/dist/hirobius-ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var
|
|
2
|
-
var zt = (t, e, r) => e in t ?
|
|
1
|
+
var Tt = Object.defineProperty;
|
|
2
|
+
var zt = (t, e, r) => e in t ? Tt(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
|
|
3
3
|
var We = (t, e, r) => zt(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
4
|
import { jsx as a, jsxs as h, Fragment as Be } from "react/jsx-runtime";
|
|
5
5
|
import * as $ from "react";
|
|
@@ -376,7 +376,7 @@ function di({
|
|
|
376
376
|
context: v = "default",
|
|
377
377
|
loading: k = "lazy"
|
|
378
378
|
}) {
|
|
379
|
-
const [D, C] = W(!1), S = n && typeof n == "object" ? n : {}, [z, L] = W(!1), [
|
|
379
|
+
const [D, C] = W(!1), S = n && typeof n == "object" ? n : {}, [z, L] = W(!1), [P, x] = W(!1), [q, H] = W(0), [E, N] = W(0), _ = v === "default" && y && !!l;
|
|
380
380
|
if (!D)
|
|
381
381
|
return _ ? /* @__PURE__ */ h(
|
|
382
382
|
"div",
|
|
@@ -394,15 +394,15 @@ function di({
|
|
|
394
394
|
tabIndex: 0,
|
|
395
395
|
"aria-label": e,
|
|
396
396
|
onClick: l,
|
|
397
|
-
onKeyDown: (
|
|
398
|
-
(
|
|
397
|
+
onKeyDown: (T) => {
|
|
398
|
+
(T.key === "Enter" || T.key === " ") && l && (T.preventDefault(), l(T));
|
|
399
399
|
},
|
|
400
400
|
onMouseEnter: () => L(!0),
|
|
401
|
-
onMouseMove: (
|
|
402
|
-
H(
|
|
401
|
+
onMouseMove: (T) => {
|
|
402
|
+
H(T.clientX), N(T.clientY), u == null || u(T);
|
|
403
403
|
},
|
|
404
|
-
onMouseLeave: (
|
|
405
|
-
L(!1), g == null || g(
|
|
404
|
+
onMouseLeave: (T) => {
|
|
405
|
+
L(!1), g == null || g(T);
|
|
406
406
|
},
|
|
407
407
|
onMouseDown: m,
|
|
408
408
|
onMouseUp: f,
|
|
@@ -424,7 +424,7 @@ function di({
|
|
|
424
424
|
Ue,
|
|
425
425
|
{
|
|
426
426
|
mode: "centered",
|
|
427
|
-
visible:
|
|
427
|
+
visible: P && !z,
|
|
428
428
|
label: b
|
|
429
429
|
}
|
|
430
430
|
),
|
|
@@ -452,8 +452,8 @@ function di({
|
|
|
452
452
|
className: o,
|
|
453
453
|
draggable: s,
|
|
454
454
|
onClick: l,
|
|
455
|
-
onKeyDown: l ? (
|
|
456
|
-
|
|
455
|
+
onKeyDown: l ? (T) => {
|
|
456
|
+
T.key === "Enter" && l(T);
|
|
457
457
|
} : void 0,
|
|
458
458
|
onMouseDown: m,
|
|
459
459
|
onMouseMove: u,
|
|
@@ -488,15 +488,15 @@ function di({
|
|
|
488
488
|
flexShrink: 0
|
|
489
489
|
};
|
|
490
490
|
else {
|
|
491
|
-
let
|
|
491
|
+
let T, j;
|
|
492
492
|
if (n.maxHeight && !n.width) {
|
|
493
493
|
const U = parseInt(n.maxHeight) || pe;
|
|
494
|
-
j = U,
|
|
494
|
+
j = U, T = Math.round(U * A);
|
|
495
495
|
} else if (n.maxWidth && !n.height) {
|
|
496
496
|
const U = parseInt(n.maxWidth) || pe;
|
|
497
|
-
|
|
498
|
-
} else n.width === "100%" ? (
|
|
499
|
-
Z =
|
|
497
|
+
T = U, j = Math.round(U / A);
|
|
498
|
+
} else n.width === "100%" ? (T = 0, j = 0) : Y ? (T = pe, j = Math.round(pe / A)) : (j = pe, T = Math.round(pe * A));
|
|
499
|
+
Z = T === 0 ? { width: "100%", aspectRatio: `${A}`, display: "block" } : { width: T, height: j, display: "block", flexShrink: 0 };
|
|
500
500
|
}
|
|
501
501
|
return /* @__PURE__ */ a(
|
|
502
502
|
"div",
|
|
@@ -516,8 +516,8 @@ function di({
|
|
|
516
516
|
role: l ? "button" : void 0,
|
|
517
517
|
tabIndex: l ? 0 : void 0,
|
|
518
518
|
onClick: l,
|
|
519
|
-
onKeyDown: l ? (
|
|
520
|
-
(
|
|
519
|
+
onKeyDown: l ? (T) => {
|
|
520
|
+
(T.key === "Enter" || T.key === " ") && l(T);
|
|
521
521
|
} : void 0,
|
|
522
522
|
"aria-label": e,
|
|
523
523
|
children: r && /* @__PURE__ */ a(
|
|
@@ -584,7 +584,8 @@ const hr = $.forwardRef(function({ className: e, size: r, src: n, alt: o, initia
|
|
|
584
584
|
info: "bg-feedback-bg-info text-feedback-info",
|
|
585
585
|
success: "bg-feedback-bg-success text-feedback-success",
|
|
586
586
|
danger: "bg-feedback-bg-danger text-feedback-danger",
|
|
587
|
-
warning: "bg-feedback-bg-warning text-feedback-warning"
|
|
587
|
+
warning: "bg-feedback-bg-warning text-feedback-warning",
|
|
588
|
+
inProgress: "bg-feedback-bg-inProgress text-feedback-inProgress"
|
|
588
589
|
}
|
|
589
590
|
},
|
|
590
591
|
defaultVariants: { tone: "neutral" }
|
|
@@ -609,6 +610,20 @@ const hr = $.forwardRef(function({ className: e, size: r, src: n, alt: o, initia
|
|
|
609
610
|
secondary: "border border-input bg-background text-foreground hover:bg-accent hover:border-ring",
|
|
610
611
|
tertiary: "text-foreground hover:bg-accent"
|
|
611
612
|
},
|
|
613
|
+
// Semantic action color. `neutral` (default) keeps the variant's own
|
|
614
|
+
// colors; the status tones apply a token-driven tonal fill (tinted
|
|
615
|
+
// surface + matching feedback text) that clears AA in BOTH light and dark
|
|
616
|
+
// because the fg/bg feedback token pair flips together per theme. `!`
|
|
617
|
+
// (important) lets the tone override whichever `variant` colors are set,
|
|
618
|
+
// so `tone` composes with any variant. Drives the destructive/status
|
|
619
|
+
// actions consumers previously kept on MUI.
|
|
620
|
+
tone: {
|
|
621
|
+
neutral: "",
|
|
622
|
+
danger: "!border-transparent !bg-feedback-bg-danger !text-feedback-danger hover:!brightness-95 dark:hover:!brightness-110",
|
|
623
|
+
success: "!border-transparent !bg-feedback-bg-success !text-feedback-success hover:!brightness-95 dark:hover:!brightness-110",
|
|
624
|
+
warning: "!border-transparent !bg-feedback-bg-warning !text-feedback-warning hover:!brightness-95 dark:hover:!brightness-110",
|
|
625
|
+
info: "!border-transparent !bg-feedback-bg-info !text-feedback-info hover:!brightness-95 dark:hover:!brightness-110"
|
|
626
|
+
},
|
|
612
627
|
size: {
|
|
613
628
|
sm: "h-8 px-3 text-xs [&_svg]:size-3.5",
|
|
614
629
|
md: "h-10 px-4 py-2 text-sm [&_svg]:size-4",
|
|
@@ -626,6 +641,7 @@ const hr = $.forwardRef(function({ className: e, size: r, src: n, alt: o, initia
|
|
|
626
641
|
],
|
|
627
642
|
defaultVariants: {
|
|
628
643
|
variant: "secondary",
|
|
644
|
+
tone: "neutral",
|
|
629
645
|
size: "md",
|
|
630
646
|
iconOnly: !1
|
|
631
647
|
}
|
|
@@ -633,48 +649,51 @@ const hr = $.forwardRef(function({ className: e, size: r, src: n, alt: o, initia
|
|
|
633
649
|
), Ce = $.forwardRef(function({
|
|
634
650
|
className: e,
|
|
635
651
|
variant: r,
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
652
|
+
tone: n,
|
|
653
|
+
size: o,
|
|
654
|
+
iconOnly: s = !1,
|
|
655
|
+
asChild: d = !1,
|
|
656
|
+
label: c,
|
|
657
|
+
loading: p = !1,
|
|
658
|
+
iconLeft: l,
|
|
659
|
+
iconRight: m,
|
|
660
|
+
disabled: u,
|
|
661
|
+
children: f,
|
|
662
|
+
type: g = "button",
|
|
663
|
+
...y
|
|
664
|
+
}, b) {
|
|
665
|
+
const v = u || p, k = f ?? c;
|
|
666
|
+
return d ? /* @__PURE__ */ a(
|
|
650
667
|
_t,
|
|
651
668
|
{
|
|
652
|
-
ref:
|
|
653
|
-
className: w(Xe({ variant: r,
|
|
654
|
-
"aria-disabled":
|
|
655
|
-
"aria-busy":
|
|
656
|
-
"data-state":
|
|
669
|
+
ref: b,
|
|
670
|
+
className: w(Xe({ variant: r, tone: n, size: o, iconOnly: s, className: e })),
|
|
671
|
+
"aria-disabled": v || void 0,
|
|
672
|
+
"aria-busy": p || void 0,
|
|
673
|
+
"data-state": p ? "loading" : void 0,
|
|
657
674
|
"data-variant": r ?? void 0,
|
|
658
|
-
"data-
|
|
659
|
-
|
|
660
|
-
|
|
675
|
+
"data-tone": n ?? void 0,
|
|
676
|
+
"data-size": o ?? void 0,
|
|
677
|
+
...y,
|
|
678
|
+
children: f
|
|
661
679
|
}
|
|
662
680
|
) : /* @__PURE__ */ h(
|
|
663
681
|
"button",
|
|
664
682
|
{
|
|
665
|
-
ref:
|
|
666
|
-
type:
|
|
667
|
-
disabled:
|
|
668
|
-
"aria-busy":
|
|
669
|
-
"data-state":
|
|
683
|
+
ref: b,
|
|
684
|
+
type: g,
|
|
685
|
+
disabled: v,
|
|
686
|
+
"aria-busy": p || void 0,
|
|
687
|
+
"data-state": p ? "loading" : void 0,
|
|
670
688
|
"data-variant": r ?? void 0,
|
|
671
|
-
"data-
|
|
672
|
-
|
|
673
|
-
|
|
689
|
+
"data-tone": n ?? void 0,
|
|
690
|
+
"data-size": o ?? void 0,
|
|
691
|
+
className: w(Xe({ variant: r, tone: n, size: o, iconOnly: s, className: e })),
|
|
692
|
+
...y,
|
|
674
693
|
children: [
|
|
675
|
-
|
|
676
|
-
!
|
|
677
|
-
!
|
|
694
|
+
p ? /* @__PURE__ */ a(pt, { className: "animate-spin", "aria-hidden": "true" }) : l,
|
|
695
|
+
!s && k,
|
|
696
|
+
!p && !s && m
|
|
678
697
|
]
|
|
679
698
|
}
|
|
680
699
|
);
|
|
@@ -869,9 +888,9 @@ const Si = {
|
|
|
869
888
|
function({ className: e, children: r, ...n }, o) {
|
|
870
889
|
return /* @__PURE__ */ a(M, { ref: o, variant: "heading3", className: e, ...n, children: r });
|
|
871
890
|
}
|
|
872
|
-
),
|
|
891
|
+
), Pi = $.forwardRef(function({ className: e, children: r, ...n }, o) {
|
|
873
892
|
return /* @__PURE__ */ a(M, { ref: o, variant: "caption", className: w("text-muted-foreground", e), ...n, children: r });
|
|
874
|
-
}),
|
|
893
|
+
}), Ti = $.forwardRef(
|
|
875
894
|
function({ className: e, ...r }, n) {
|
|
876
895
|
return /* @__PURE__ */ a("div", { ref: n, className: w("p-6 pt-0", e), ...r });
|
|
877
896
|
}
|
|
@@ -981,8 +1000,8 @@ const Si = {
|
|
|
981
1000
|
}), ce = ki;
|
|
982
1001
|
ce.Header = Ci;
|
|
983
1002
|
ce.Title = Li;
|
|
984
|
-
ce.Description =
|
|
985
|
-
ce.Body =
|
|
1003
|
+
ce.Description = Pi;
|
|
1004
|
+
ce.Body = Ti;
|
|
986
1005
|
ce.Footer = zi;
|
|
987
1006
|
ce.Progress = qi;
|
|
988
1007
|
ce.Metric = Ii;
|
|
@@ -1448,7 +1467,7 @@ function Ze(t, e) {
|
|
|
1448
1467
|
(o, s) => o.kind === "plain" ? /* @__PURE__ */ a("span", { children: o.value }, s) : /* @__PURE__ */ a("span", { style: { color: Ai(o.kind) }, children: o.value }, s)
|
|
1449
1468
|
);
|
|
1450
1469
|
}
|
|
1451
|
-
const Mi = /* @__PURE__ */ JSON.parse(`{"Alert":{"filePath":"src/app/components/alert.tsx","description":"Alert - compact feedback surface with contextual severity.","category":"Feedback","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"Main alert message content."},{"name":"title","type":"string","required":false,"description":"Optional heading shown above the body copy."},{"name":"tone","type":"'success' | 'danger' | 'warning' | 'info'","default":"info","required":false,"description":"Feedback tone that controls icon, border, and surface treatment."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":72,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":72,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":86,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":95,"sourceSnippet":"...hds.typeStyles.caption,"}]},"Avatar":{"filePath":"src/app/components/avatar.tsx","description":"Circular avatar. Renders the image when available, else initials from \`alt\`.","category":"Display","hidden":false,"props":[{"name":"alt","type":"string","required":true,"description":"Required descriptive alt / accessible name (e.g. the person's name)."},{"name":"initials","type":"string","required":false,"description":"Explicit initials. Falls back to the first letters derived from \`alt\`."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":""},{"name":"src","type":"string","required":false,"description":"Image source. When absent or it fails to load, the initials fallback shows."}],"observedTokens":[]},"Badge":{"filePath":"src/app/components/badge.tsx","description":"Compact metadata/status chip. Tone is the only styling input.","category":"Feedback","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"span","required":false,"description":"Element rendered as the badge wrapper. Defaults to 'span'."},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"info\\" | \\"neutral\\"","required":false,"description":""}],"observedTokens":[]},"Breadcrumb":{"filePath":"src/app/components/breadcrumb.tsx","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\\".","category":"Navigation","hidden":false,"props":[{"name":"items","type":"BreadcrumbItem[]","required":true,"description":"Ordered trail from root → current. The last item renders as the current page."},{"name":"label","type":"string","default":"Breadcrumb","required":false,"description":"Accessible label for the nav landmark."}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":56,"sourceSnippet":"style={hds.typeStyles.ui}"}]},"Callout":{"filePath":"src/app/components/callout.tsx","description":"Tone-driven side-rule callout for status, quotes, hypotheses.","category":"Feedback","hidden":false,"props":[{"name":"italic","type":"boolean","default":"false","required":false,"description":"Italicize the body content (quote / pull-quote pattern)."},{"name":"tone","type":"'accent' | 'info' | 'success' | 'warning' | 'danger'","default":"info","required":false,"description":"Tone — drives the left rule color and bg tint."}],"observedTokens":[]},"Card":{"filePath":"src/app/components/card.tsx","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 tone=\\"accent\\"> <Card.Header metadata={<Badge tone=\\"warning\\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\\"5 / 12 tasks\\" /> <Card.Metric label=\\"Retainer\\" value=\\"$3,500\\" sub=\\"Active\\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. Tone prop: 'default' (neutral border) | 'accent' (border-accent + raised bg) for highlighted variants like \\"recommended package\\", or feedback tones for status-driven cards. Tone replaces hand-rolled \`pkgHighlight\`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + \`padding=\\"none\\"\`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass \`className=\\"shadow-...\\"\` for a hover/floating treatment on interactive cards.","category":"Display","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","required":false,"description":"Render-as element for the root wrapper."},{"name":"bordered","type":"boolean","default":"false","required":false,"description":"Opt in to a neutral 1px border on the default tone. Use for genuinely discrete standalone records in sparse layouts where containment helps legibility. Default false — repeated cards in grids should stay borderless and rely on whitespace, rails, or section dividers."},{"name":"gap","type":"GapOption","default":"tight","required":false,"description":"Legacy gap prop for the root flex container."},{"name":"noPadding","type":"boolean","default":"false","required":false,"description":"Legacy convenience flag that removes inner padding."},{"name":"padding","type":"PaddingOption","default":"component","required":false,"description":"Legacy padding prop for raw-children cards. Use \`none\` when composing parts."},{"name":"tone","type":"'default' | 'accent' | 'success' | 'warning' | 'danger'","default":"default","required":false,"description":"Visual tone — controls border color/weight. Default is BORDERLESS; \`accent\` for highlighted entries (e.g. recommended package); semantic tones for status-driven cards (border IS the signal). For a neutral-bordered card without semantic meaning, pass \`bordered\` instead of overloading tone."}],"observedTokens":[{"raw":"hds.space","sourceLine":52,"sourceSnippet":"type GapOption = 'tight' | 'normal' | 'inset' | 'spacious' | keyof typeof hds.space;"},{"raw":"hds.borderRadius[2]","tokenPath":"primitive.radius.2","sourceLine":308,"sourceSnippet":"borderRadius: hds.borderRadius[2],"},{"raw":"hds.motion.expressive.duration","tokenPath":"primitive.duration.medium","sourceLine":319,"sourceSnippet":"transition: \`width \${hds.motion.expressive.duration}s ease-out\`,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":327,"sourceSnippet":"...hds.typeStyles.caption,"},{"raw":"hds.typeStyles.eyebrow","sourceLine":368,"sourceSnippet":"...hds.typeStyles.eyebrow,"},{"raw":"hds.typeStyles.h2","tokenPath":"semantic.typography.h2","sourceLine":378,"sourceSnippet":"...hds.typeStyles.h2,"}]},"CinematicLink":{"filePath":"src/app/components/cinematic-link.tsx","description":"CinematicLink - cinematic editorial link treatment for portfolio surfaces.","category":"Branding","hidden":false,"props":[{"name":"href","type":"string","required":true,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":24,"sourceSnippet":"...hds.typeStyles.ui,"}]},"CodeBlock":{"filePath":"src/app/components/code-block.tsx","description":"CodeBlock - code display with copy button and optional collapsible toggle.","category":"Display","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":"Optional class hook for layout-specific styling."},{"name":"code","type":"string","required":true,"description":"Code string displayed in the block."},{"name":"collapsible","type":"boolean","default":"false","required":false,"description":"When true (block variant only), code is hidden behind a \\"Show code\\" toggle. Off by default to preserve backward compatibility for existing consumers."},{"name":"defaultExpanded","type":"boolean","default":"false","required":false,"description":"When \`collapsible\`, controls the initial state. Defaults to collapsed."},{"name":"filename","type":"string","required":false,"description":"Optional filename label shown in the header."},{"name":"language","type":"string","required":false,"description":"Optional language label shown in the header (also drives syntax coloring)."},{"name":"truncateFromStart","type":"boolean","default":"false","required":false,"description":"When true, inline code truncates from the start rather than the end."},{"name":"variant","type":"\\"inline\\" | \\"block\\"","default":"block","required":false,"description":"Visual presentation mode for block snippets vs inline single-line code."}],"observedTokens":[{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":18,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.size[32]","tokenPath":"primitive.size.32","sourceLine":21,"sourceSnippet":"minHeight: hds.size[32],"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":22,"sourceSnippet":"border: \`\${hds.borderWidth.default} solid var(--semantic-color-border-default)\`,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":24,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":28,"sourceSnippet":"paddingLeft: hds.semantic.space.component.gap,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":43,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, color \${hds.motion.productive.duration}s ease, transform \${hds.motion.productive.duration}s ease\`,"},{"raw":"hds.semantic.space.component.padding","tokenPath":"semantic.space.component.padding","sourceLine":49,"sourceSnippet":"paddingLeft: hds.semantic.space.component.padding,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":85,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.section.stack","tokenPath":"semantic.space.section.stack","sourceLine":236,"sourceSnippet":"padding: hds.semantic.space.section.stack,"}]},"Combobox":{"filePath":"src/app/components/combobox.tsx","description":"Combobox — searchable single-select (Popover + filtered listbox). A select-with-search built on the HDS Popover. The trigger shows the current selection; opening reveals a search field that filters the option list. Full keyboard support (↑/↓ to move, Enter to choose, Esc/outside-click to close) and listbox/option ARIA. Controlled via \`value\` + \`onChange\`. <Combobox options={[{ value: 'us', label: 'United States' }, …]} value={country} onChange={setCountry} placeholder=\\"Select a country\\" />","category":"Inputs","hidden":false,"props":[{"name":"aria-label","type":"string","required":false,"description":"Accessible label for the trigger (when not labelled by a <Field>)."},{"name":"className","type":"string","required":false,"description":""},{"name":"disabled","type":"boolean","default":"false","required":false,"description":""},{"name":"emptyMessage","type":"string","default":"No results","required":false,"description":"Shown when the filter matches no options."},{"name":"onChange","type":"(value: string) => void","required":true,"description":"Fired with the chosen option's value."},{"name":"options","type":"ComboboxOption[]","required":true,"description":"Selectable options."},{"name":"placeholder","type":"string","default":"Select…","required":false,"description":"Trigger text when nothing is selected."},{"name":"searchPlaceholder","type":"string","default":"Search…","required":false,"description":"Placeholder for the search field."},{"name":"value","type":"string","required":true,"description":"Currently selected value, or null when nothing is chosen."}],"observedTokens":[]},"ComponentInstanceMatrix":{"filePath":"src/app/components/component-instance-matrix.tsx","description":"ComponentInstanceMatrix — responsive specimen matrix for variant and state parity.","category":"Utilities","hidden":false,"props":[{"name":"componentName","type":"string","required":true,"description":""},{"name":"dimensionX","type":"string","required":true,"description":""},{"name":"dimensionY","type":"string","required":true,"description":""},{"name":"freezeRowState","type":"boolean","default":"false","required":false,"description":"Wrap each row's rendered instance in FreezeState so the visual state is frozen."},{"name":"isMobile","type":"boolean","required":true,"description":""},{"name":"renderInstance","type":"(rowKey: string, columnKey: string) => ReactNode","required":true,"description":""},{"name":"rowLabelTone","type":"\\"primary\\" | \\"secondary\\"","default":"primary","required":false,"description":""},{"name":"rowLabelWidth","type":"number","default":"120","required":false,"description":""},{"name":"title","type":"string","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":128,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":141,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.layout.gap","tokenPath":"semantic.space.layout.gap","sourceLine":144,"sourceSnippet":"paddingBottom: hds.semantic.space.layout.gap,"}]},"Container":{"filePath":"src/app/components/container.tsx","description":"Container — semantic width-constrained layout. Centers content horizontally and applies semantic max-width constraints. - maxWidth options: 'content' (760px prose) | 'max' (1200px full layout) - No arbitrary pixel values allowed Usage: <Container maxWidth=\\"max\\"> <div>...</div> </Container>","category":"Layout","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"Container content."},{"name":"className","type":"string","required":false,"description":"Optional class hook."},{"name":"maxWidth","type":"'content' | 'max'","default":"max","required":false,"description":"Max width: 'content' (760px for prose) | 'max' (1200px for full layouts). Defaults to 'max'."},{"name":"padding","type":"string","default":"var(--semantic-space-component-padding)","required":false,"description":"Deprecated. Container no longer owns internal padding."},{"name":"style","type":"CSSProperties","required":false,"description":"Optional inline styles for layout-specific adjustments."}],"observedTokens":[]},"Dialog":{"filePath":"src/app/components/dialog.tsx","description":"Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\\"secondary\\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass \`hideClose\` to opt out for fully-custom layouts.","category":"Overlays","hidden":false,"props":[{"name":"children","type":"ReactNode","required":false,"description":"Children — typically \`Dialog.Trigger\` and \`Dialog.Content\`."},{"name":"defaultOpen","type":"boolean","required":false,"description":"Initial open state for uncontrolled usage."},{"name":"modal","type":"boolean","required":false,"description":"When true (default), traps focus and locks scroll while open."},{"name":"open","type":"boolean","required":false,"description":"Controlled open state."}],"observedTokens":[]},"Disclosure":{"filePath":"src/app/components/disclosure.tsx","description":"Disclosure - compact disclosure surface for optional explanatory content.","category":"Layout","hidden":false,"props":[{"name":"accent","type":"boolean","default":"false","required":false,"description":"Keeps the disclosure visually highlighted even when closed."},{"name":"children","type":"ReactNode","required":true,"description":"Content revealed when the disclosure is expanded."},{"name":"className","type":"string","required":false,"description":"Optional className passthrough for the trigger."},{"name":"contentStyle","type":"CSSProperties","required":false,"description":"Optional inner content style overrides."},{"name":"defaultOpen","type":"boolean","default":"false","required":false,"description":"Whether the disclosure starts in the open state."},{"name":"label","type":"ReactNode","required":true,"description":"Summary label rendered in the disclosure trigger. Accepts a string or ReactNode for icon+label combos."},{"name":"onOpenChange","type":"(open: boolean) => void","required":false,"description":"Called whenever the disclosure toggles."},{"name":"open","type":"boolean","required":false,"description":"Controlled open state."},{"name":"triggerStyle","type":"CSSProperties","required":false,"description":"Optional trigger style overrides."},{"name":"variant","type":"'panel' | 'nav' | 'card'","default":"panel","required":false,"description":"Visual treatment for docs panels, nav groups, or summary cards."}],"observedTokens":[{"raw":"hds.semantic.space.sidebar.gap","tokenPath":"semantic.space.sidebar.gap","sourceLine":88,"sourceSnippet":"gap: hds.semantic.space.sidebar.gap,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":93,"sourceSnippet":"\`border-color \${hds.motion.productive.duration}s \${hds.motion.productive.easing}\`,"},{"raw":"hds.motion.productive.easing","sourceLine":93,"sourceSnippet":"\`border-color \${hds.motion.productive.duration}s \${hds.motion.productive.easing}\`,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":107,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":112,"sourceSnippet":"columnGap: hds.semantic.space.component.gap,"},{"raw":"hds.semantic.space.sidebar.sectionGap","tokenPath":"semantic.space.sidebar.sectionGap","sourceLine":127,"sourceSnippet":"? hds.semantic.space.sidebar.sectionGap"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":134,"sourceSnippet":"...(variant === 'nav' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":134,"sourceSnippet":"...(variant === 'nav' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":167,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.iconSize.small","tokenPath":"primitive.typography.size.base","sourceLine":183,"sourceSnippet":"width: hds.iconSize.small,"}]},"Divider":{"filePath":"src/app/components/divider.tsx","description":"Divider — semantic separator between content regions.","category":"Layout","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":"Optional class hook for parent-level styling."},{"name":"orientation","type":"\\"horizontal\\" | \\"vertical\\"","default":"horizontal","required":false,"description":"Divider orientation."},{"name":"spacing","type":"string | number","required":false,"description":"Perpendicular spacing around the divider."},{"name":"strong","type":"boolean","default":"false","required":false,"description":"Increase the stroke weight for stronger separation."},{"name":"style","type":"CSSProperties","required":false,"description":"Optional inline styles for one-off layout adjustments."}],"observedTokens":[{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":53,"sourceSnippet":"borderTop: \`\${hds.borderWidth.default} solid \${borderColor}\`,"}]},"DocLinkCard":{"filePath":"src/app/components/doc-link-card.tsx","description":"DocLinkCard - navigation card for editorial and documentation cross-links.","category":"Navigation","hidden":false,"props":[{"name":"accent","type":"boolean","default":"false","required":false,"description":"Tint the card surface for emphasis."},{"name":"affordance","type":"\\"up-right\\" | \\"right\\" | \\"left\\"","default":"up-right","required":false,"description":"Directional affordance for the header icon."},{"name":"description","type":"string","required":false,"description":"Supporting body copy shown below the title."},{"name":"disabled","type":"boolean","default":"false","required":false,"description":"Disable navigation and reduce contrast."},{"name":"href","type":"string","required":true,"description":"Destination route or URL."},{"name":"icon","type":"LucideIcon","required":true,"description":"Icon rendered in the card header."},{"name":"meta","type":"string","required":false,"description":"Optional metadata label rendered above the title."},{"name":"metaStyle","type":"\\"caption\\" | \\"ui\\"","default":"caption","required":false,"description":"Typography style used for the meta label."},{"name":"title","type":"string","required":true,"description":"Primary title displayed in the card."},{"name":"variant","type":"\\"feature\\" | \\"pager\\"","default":"feature","required":false,"description":"Card layout variant."}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":14,"sourceSnippet":"const bodyTextStyle = hds.typeStyles.ui;"},{"raw":"hds.semantic.space.layout.gap","tokenPath":"semantic.space.layout.gap","sourceLine":41,"sourceSnippet":"padding: hds.semantic.space.layout.gap,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":42,"sourceSnippet":"gap: hds.semantic.space.component.gap,"},{"raw":"hds.typeStyles.heading3","tokenPath":"semantic.typography.h3","sourceLine":43,"sourceSnippet":"titleStyle: { ...hds.typeStyles.heading3, color: 'var(--semantic-color-content-primary)' },"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":45,"sourceSnippet":"iconGap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":81,"sourceSnippet":"const metaTextStyle = metaStyle === 'ui' ? hds.typeStyles.ui : hds.typeStyles.caption;"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":85,"sourceSnippet":"duration: hds.motion.productive.duration,"},{"raw":"hds.motion.productive.easing","sourceLine":86,"sourceSnippet":"ease: hds.motion.productive.easing,"}]},"EmptyState":{"filePath":"src/app/components/empty-state.tsx","description":"EmptyState — consistent no-data placeholder for lists, grids, and sections. communicate \\"no data yet\\" with consistent muted typography instead of agents inventing one-off \`<p>No items.</p>\` lines. use for full-page errors (use ErrorPage) or for loading states (use a skeleton). Do NOT wrap in Surface or Card — the empty state is a typographic message, not a chrome-bearing container.","category":"Display","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":"Escape hatch for layout adjustments — token-only, no business logic."},{"name":"description","type":"ReactNode","required":false,"description":"Optional supporting line."},{"name":"title","type":"ReactNode","required":true,"description":"Primary message. Sentence-case, no trailing period required."}],"observedTokens":[]},"Field":{"filePath":"src/app/components/field.tsx","description":"Caption label paired with a value — used in metadata grids and read-only forms.","category":"Display","hidden":false,"props":[{"name":"label","type":"string","required":true,"description":""},{"name":"mono","type":"boolean","default":"false","required":false,"description":""},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"default\\"","default":"default","required":false,"description":""},{"name":"value","type":"ReactNode","required":false,"description":""}],"observedTokens":[]},"Form":{"filePath":"src/app/components/form.tsx","description":"Styled \`<form>\` with consistent vertical field rhythm.","category":"Inputs","hidden":false,"props":[],"observedTokens":[]},"FormField":{"filePath":"src/app/components/form.tsx","description":"Label + description + error wrapper that wires the a11y relationships onto its single child control via cloneElement. Validation-library agnostic — pass \`error\` from whatever you use. For controls with an externally-managed callback ref (e.g. react-hook-form), use \`FormFieldShell\` + \`useFieldWiring\` instead.","category":"Inputs","hidden":false,"props":[{"name":"children","type":"ReactElement<any, string | JSXElementConstructor<any>>","required":true,"description":"The single form control (native input, Select, Combobox, …)."},{"name":"className","type":"string","required":false,"description":""},{"name":"description","type":"string","required":false,"description":"Helper text below the control; linked via aria-describedby."},{"name":"error","type":"string","required":false,"description":"Error message; when set, marks the control aria-invalid and links it."},{"name":"htmlFor","type":"string","required":false,"description":"Explicit control id. Defaults to a generated id."},{"name":"label","type":"string","required":true,"description":"Field label, associated to the control via htmlFor/id."},{"name":"required","type":"boolean","default":"false","required":false,"description":"Adds a required marker and sets \`required\` on the control."}],"observedTokens":[]},"FormFieldShell":{"filePath":"src/app/components/form.tsx","description":"Presentational label + control slot + helper/error markup. Renders \`children\` verbatim — it does NOT clone — so it is safe to use with controls that own a callback ref. Pair it with \`useFieldWiring\` to apply ids/aria yourself.","category":"Inputs","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"The already-rendered control (already carrying its own id/aria props)."},{"name":"className","type":"string","required":false,"description":""},{"name":"controlId","type":"string","required":true,"description":"Id of the control rendered as \`children\` (drives the label's htmlFor)."},{"name":"description","type":"string","required":false,"description":""},{"name":"error","type":"string","required":false,"description":""},{"name":"label","type":"string","required":true,"description":""},{"name":"required","type":"boolean","default":"false","required":false,"description":""}],"observedTokens":[]},"FoundationSwatch":{"filePath":"src/app/components/foundation-swatch.tsx","description":"FoundationSwatch - governed foundation specimen for color and semantic role previews.","category":"Utilities","hidden":false,"props":[{"name":"background","type":"string","required":true,"description":"Background fill or tone shown by the specimen."},{"name":"bordered","type":"boolean","default":"false","required":false,"description":"Whether to show a bordered specimen surface."},{"name":"details","type":"string[]","required":false,"description":"Optional supporting lines shown inside the specimen."},{"name":"foreground","type":"string","default":"var(--semantic-color-content-primary)","required":false,"description":"Foreground color used for text inside the specimen."},{"name":"hidePreviewLabel","type":"boolean","default":"false","required":false,"description":"Whether to hide the preview label inside the swatch specimen."},{"name":"label","type":"string","required":true,"description":"Primary label rendered inside or below the swatch."},{"name":"note","type":"ReactNode","required":false,"description":"Optional note rendered below card-style swatches."},{"name":"previewPosition","type":"'bottom-left' | 'top-left' | 'center'","default":"center","required":false,"description":"Placement of the specimen content inside the swatch surface."},{"name":"specimen","type":"ReactNode","required":false,"description":"Custom specimen content rendered inside card-style swatches."},{"name":"swatchVar","type":"string","required":false,"description":"Explicit color value (hex or CSS var name) to pin the token chip's swatch square, overriding auto-resolution from tokenPath."},{"name":"tokenDisplayPreset","type":"'depth1' | 'depth2' | 'full'","default":"depth2","required":false,"description":"Shorthand preset for how the token path renders inside the specimen."},{"name":"tokenPath","type":"string","required":false,"description":"Optional token path rendered as a condensed node inside the swatch surface."},{"name":"value","type":"string","required":false,"description":"Optional text/value line shown inside the specimen."}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":70,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":79,"sourceSnippet":"...hds.typeStyles.caption,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":149,"sourceSnippet":"? hds.semantic.space.component.gap"}]},"Grid":{"filePath":"src/app/components/grid.tsx","description":"Grid — responsive grid composition primitive. Enforces semantic gap and column values. No arbitrary CSS grid. - layout='fixed': responsive base (collapses via CSS at tablet/mobile). \`columns\` sets desktop count (default 12). Tablet/mobile clamp to min(8, cols) and min(4, cols) respectively. - layout='auto-fit': responsive card wrapping via auto-fit. - subgrid=true: sets gridTemplateColumns:'subgrid' for nested alignment. Usage (default responsive 12-col): <Grid> <Grid.Item colSpan={6}>…</Grid.Item> <Grid.Item colSpan={6}>…</Grid.Item> </Grid> Usage (responsive auto-fit): <Grid layout=\\"auto-fit\\"> <Card /> <Card /> </Grid>","category":"Layout","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"div","required":false,"description":"Element rendered as the outer wrapper. Defaults to 'div'."},{"name":"children","type":"ReactNode","required":true,"description":"Grid content."},{"name":"className","type":"string","required":false,"description":"Escape hatch: only use when tokenized props cannot express the required wrapper class."},{"name":"columns","type":"number","default":"12","required":false,"description":"Desktop column count for layout='fixed'. Tablet clamps to min(8,n), mobile to min(4,n). Defaults to 12."},{"name":"gap","type":"'tight' | 'normal' | 'inset' | 'spacious'","default":"inset","required":false,"description":"Gap between grid items: semantic only. Defaults to 'inset' (32px)."},{"name":"layout","type":"'fixed' | 'auto-fit'","default":"fixed","required":false,"description":"Grid layout mode: 'fixed' (responsive) or 'auto-fit' (card wrapping). Defaults to 'fixed'."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch: only use for narrow layout adjustments that do not belong in the primitive API."},{"name":"subgrid","type":"boolean","default":"false","required":false,"description":"If true, sets gridTemplateColumns:'subgrid' for nested grid alignment."}],"observedTokens":[{"raw":"hds.breakpoints.sm","sourceLine":94,"sourceSnippet":"if (width <= hds.breakpoints.sm) {"},{"raw":"hds.breakpoints.lg","sourceLine":98,"sourceSnippet":"if (width <= hds.breakpoints.lg) {"}]},"HdsCheckbox":{"filePath":"src/app/components/checkbox.tsx","description":"HdsCheckbox — custom-drawn checkbox with check / indeterminate glyph.","category":"Inputs","hidden":false,"props":[{"name":"checked","type":"boolean","required":true,"description":"Current checked state."},{"name":"indeterminate","type":"boolean","default":"false","required":false,"description":"Mixed state — visually a dash; supersedes the check glyph."},{"name":"label","type":"string","required":true,"description":"Checkbox label displayed next to the control."},{"name":"onChange","type":"(v: boolean) => void","required":true,"description":"Called when the checkbox changes."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":68,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":68,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":78,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":81,"sourceSnippet":"paddingLeft: hds.semantic.space.component.gap,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":83,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.size[20]","tokenPath":"primitive.size.20","sourceLine":127,"sourceSnippet":"width: hds.size[20],"},{"raw":"hds.borderRadius[4]","tokenPath":"primitive.radius.4","sourceLine":129,"sourceSnippet":"borderRadius: hds.borderRadius[4],"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":130,"sourceSnippet":"border: \`\${hds.borderWidth.sm} solid \${borderColor}\`,"},{"raw":"hds.space.px1","tokenPath":"primitive.space.px1","sourceLine":147,"sourceSnippet":"animate={{ x: isPressed ? hds.space.px1 : 0 }}"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":150,"sourceSnippet":"...hds.typeStyles.ui,"}]},"HdsRadio":{"filePath":"src/app/components/radio.tsx","description":"HdsRadio — radio button with animated selection indicator.","category":"Inputs","hidden":false,"props":[{"name":"checked","type":"boolean","required":true,"description":"Current checked state."},{"name":"label","type":"string","required":true,"description":"Radio label displayed next to the control."},{"name":"onChange","type":"(v: boolean) => void","required":true,"description":"Called when the radio changes."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":58,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":58,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.expressive.duration","tokenPath":"primitive.duration.medium","sourceLine":126,"sourceSnippet":"duration: hds.motion.expressive.duration,"},{"raw":"hds.size[8]","tokenPath":"primitive.size.8","sourceLine":130,"sourceSnippet":"width: hds.size[8],"},{"raw":"hds.borderRadius.full","tokenPath":"primitive.radius.full","sourceLine":132,"sourceSnippet":"borderRadius: hds.borderRadius.full,"},{"raw":"hds.space.px1","tokenPath":"primitive.space.px1","sourceLine":142,"sourceSnippet":"x: isPressed ? hds.space.px1 : 0,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":149,"sourceSnippet":"...hds.typeStyles.ui,"}]},"HdsSlider":{"filePath":"src/app/components/slider.tsx","description":"HdsSlider — range slider with label and value display.","category":"Inputs","hidden":false,"props":[{"name":"label","type":"string","required":true,"description":"Slider label."},{"name":"max","type":"number","required":true,"description":"Maximum value in the range."},{"name":"min","type":"number","required":true,"description":"Minimum value in the range."},{"name":"onChange","type":"(v: number) => void","required":true,"description":"Called when the slider value changes."},{"name":"step","type":"number","default":"1","required":false,"description":"Step increment for the range input."},{"name":"value","type":"number","required":true,"description":"Current slider value."}],"observedTokens":[{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":39,"sourceSnippet":"style={{ display: 'flex', flexDirection: 'column', gap: hds.semantic.space.component.gap }}"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":51,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.space.px2","tokenPath":"primitive.space.px2","sourceLine":60,"sourceSnippet":"initial={{ opacity: 0.72, y: hds.space.px2 }}"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":63,"sourceSnippet":"duration: hds.motion.productive.duration,"},{"raw":"hds.motion.productive.easing","sourceLine":64,"sourceSnippet":"ease: hds.motion.productive.easing,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":66,"sourceSnippet":"style={{ ...hds.typeStyles.technical, flexShrink: 0 }}"},{"raw":"hds.size[20]","tokenPath":"primitive.size.20","sourceLine":74,"sourceSnippet":"height: hds.size[20],"},{"raw":"hds.size[8]","tokenPath":"primitive.size.8","sourceLine":86,"sourceSnippet":"height: hds.size[8],"},{"raw":"hds.motion.expressive.duration","tokenPath":"primitive.duration.medium","sourceLine":98,"sourceSnippet":"duration: hds.motion.expressive.duration,"},{"raw":"hds.borderRadius.full","tokenPath":"primitive.radius.full","sourceLine":103,"sourceSnippet":"borderRadius: hds.borderRadius.full,"},{"raw":"hds.zIndex.focus","sourceLine":131,"sourceSnippet":"zIndex: hds.zIndex.focus,"}]},"HdsToggle":{"filePath":"src/app/components/toggle.tsx","description":"HdsToggle — boolean on/off toggle with animated thumb.","category":"Inputs","hidden":false,"props":[{"name":"checked","type":"boolean","required":true,"description":"Current checked state."},{"name":"label","type":"string","required":true,"description":"Toggle label displayed next to the control."},{"name":"onChange","type":"(v: boolean) => void","required":true,"description":"Called when the toggle changes."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":44,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":44,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.space.px1","tokenPath":"primitive.space.px1","sourceLine":51,"sourceSnippet":"y: isPressed ? hds.space.px1 : 0,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":56,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":59,"sourceSnippet":"paddingLeft: hds.semantic.space.component.gap,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":61,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":70,"sourceSnippet":"? \`\${hds.borderWidth.sm} solid var(--semantic-color-border-accent)\`"},{"raw":"hds.size[16]","tokenPath":"primitive.size.16","sourceLine":102,"sourceSnippet":"width: hds.size[16],"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":120,"sourceSnippet":"...hds.typeStyles.ui,"}]},"HeadingStack":{"filePath":"src/app/components/heading-stack.tsx","description":"HeadingStack — enforced vertical rhythm for heading + subheading pairs. Automatically handles gap and secondary color, preventing manual stacking. - Heading level: 'heading1' | 'heading2' | 'heading3' - Gap: px4 (tight) | px8 (default) - Subheading color: always var(--semantic-color-content-secondary) GUARDRAIL: Never manually stack headings using Stack. Always use HeadingStack. Usage: <HeadingStack level=\\"heading1\\" heading=\\"Main Title\\" subheading=\\"Subtitle text\\" /> <HeadingStack level=\\"heading2\\" heading=\\"Section\\" subheading=\\"Description\\" gap=\\"px4\\" />","category":"Typography","hidden":false,"props":[{"name":"as","type":"ElementType","default":"div","required":false,"description":"Override the root semantic wrapper while preserving the governed layout styles."},{"name":"gap","type":"'px4' | 'px8'","default":"px8","required":false,"description":"Gap between heading and subheading: px4 (tight) | px8 (default)."},{"name":"heading","type":"string","required":true,"description":"The heading content (string)."},{"name":"headingAs","type":"'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'","required":false,"description":"Override the heading tag without altering the applied typography style."},{"name":"level","type":"'heading1' | 'heading2' | 'heading3'","required":true,"description":"Semantic heading level: heading1 | heading2 | heading3."},{"name":"subheading","type":"string","required":true,"description":"The supporting copy rendered beneath the heading."},{"name":"subheadingAs","type":"'p' | 'div' | 'span'","default":"p","required":false,"description":"Override the supporting-copy tag."}],"observedTokens":[{"raw":"hds.space","sourceLine":97,"sourceSnippet":"gap: hds.space[gap],"}]},"Icon":{"filePath":"src/app/components/icon.tsx","description":"Icon — semantic icon wrapper for Lucide icons.","category":"Display","hidden":false,"props":[{"name":"aria-hidden","type":"boolean | \\"true\\" | \\"false\\"","default":"true","required":false,"description":"\`aria-hidden\` defaults to true because HDS icons are decorative by default."},{"name":"className","type":"string","required":false,"description":"Optional class hook for layout or utility styling (rotation, transition, etc.)."},{"name":"color","type":"string","default":"currentColor","required":false,"description":"CSS color value or token, such as \`var(--semantic-color-content-secondary)\`."},{"name":"icon","type":"LucideIcon","required":true,"description":"Lucide icon component to render."},{"name":"size","type":"IconSize","default":"small","required":false,"description":"Size token from \`hds.iconSize\`."},{"name":"style","type":"CSSProperties","required":false,"description":"Optional inline styles for rare rotation, transition, or layout tweaks."},{"name":"weight","type":"\\"fill\\" | \\"bold\\" | \\"thin\\" | \\"light\\" | \\"regular\\" | \\"duotone\\"","required":false,"description":"Stroke weight shim for backward compatibility with former Phosphor weight prop. Maps to Lucide's \`strokeWidth\` (thin=1, light=1.5, regular=2, bold=2.5)."}],"observedTokens":[{"raw":"hds.iconSize","sourceLine":11,"sourceSnippet":"export type IconSize = keyof typeof hds.iconSize | number | string;"}]},"IconButton":{"filePath":"src/app/components/icon-button.tsx","description":"IconButton ” icon-only action trigger built on the shared Button primitive.","category":"Actions","hidden":false,"props":[{"name":"aria-label","type":"string","required":false,"description":"Accessible label fallback for backward compatibility."},{"name":"asChild","type":"boolean","required":false,"description":"Render the button chrome onto a single child element for link semantics."},{"name":"disabled","type":"boolean","required":false,"description":"Disable interaction. Mirrors the native HTML attribute."},{"name":"icon","type":"LucideIcon","required":true,"description":"Lucide icon rendered inside the button."},{"name":"iconColor","type":"string","required":false,"description":"Override the inner icon color."},{"name":"iconLeft","type":"ReactNode","required":false,"description":"Leading icon rendered before the label."},{"name":"iconRight","type":"ReactNode","required":false,"description":"Trailing icon rendered after the label."},{"name":"iconSize","type":"IconSize","required":false,"description":"Override the inner icon size; defaults to the matching button ramp size."},{"name":"label","type":"string","required":false,"description":"Accessible label for the icon button."},{"name":"loading","type":"boolean","required":false,"description":"Show a busy indicator and disable interaction."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":"Size token for the button itself."},{"name":"variant","type":"\\"primary\\" | \\"secondary\\" | \\"tertiary\\"","required":false,"description":""}],"observedTokens":[]},"InlineCode":{"filePath":"src/app/components/inline-code.tsx","description":"InlineCode — inline code chip for token paths, file paths, and code-adjacent prose.","category":"Display","hidden":false,"props":[{"name":"compact","type":"boolean","default":"false","required":false,"description":"Compact mode is tuned for dense body copy and table prose."},{"name":"copyable","type":"boolean","default":"false","required":false,"description":"Show a copy-to-clipboard button. children must be a string when true."},{"name":"style","type":"CSSProperties","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":37,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.borderRadius[0]","tokenPath":"primitive.radius.0","sourceLine":41,"sourceSnippet":"borderRadius: hds.borderRadius[0],"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":42,"sourceSnippet":"paddingTop: compact ? hds.semantic.space.subgrid.hairline : hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":42,"sourceSnippet":"paddingTop: compact ? hds.semantic.space.subgrid.hairline : hds.semantic.space.subgrid.gap,"}]},"InlineLink":{"filePath":"src/app/components/inline-link.tsx","description":"InlineLink ” inline navigation and external-link primitive for body copy.","category":"Navigation","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"Inline label or content to render inside the link."},{"name":"externalIcon","type":"boolean","default":"true","required":false,"description":"Append the external-link icon for non-internal URLs."},{"name":"href","type":"string","required":true,"description":"Destination route or URL."}],"observedTokens":[{"raw":"hds.semantic.space.subgrid.xs","tokenPath":"semantic.space.subgrid.xs","sourceLine":59,"sourceSnippet":"marginLeft: hds.semantic.space.subgrid.xs,"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":60,"sourceSnippet":"marginBottom: hds.semantic.space.subgrid.hairline,"}]},"NavGroup":{"filePath":"src/app/components/nav-group.tsx","description":"NavGroup - labeled navigation group for stacks of nav items.","category":"Navigation","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":""},{"name":"collapsible","type":"boolean","default":"false","required":false,"description":""},{"name":"contentStyle","type":"CSSProperties","required":false,"description":""},{"name":"getExact","type":"(item: NavItem) => boolean","required":false,"description":""},{"name":"items","type":"NavItem[]","required":false,"description":""},{"name":"label","type":"string","required":false,"description":""},{"name":"level","type":"NavLevel","default":"section","required":false,"description":""},{"name":"onNavigate","type":"() => void","required":false,"description":""},{"name":"style","type":"CSSProperties","required":false,"description":""},{"name":"variant","type":"\\"side\\" | \\"toc\\"","default":"side","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":73,"sourceSnippet":"...(variant === 'side' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":73,"sourceSnippet":"...(variant === 'side' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.semantic.space.sidebar.sectionGap","tokenPath":"semantic.space.sidebar.sectionGap","sourceLine":79,"sourceSnippet":"variant === 'toc' ? hds.semantic.space.sidebar.sectionGap : getNavLevelLeadingPadding(level),"},{"raw":"hds.semantic.space.sidebar.gap","tokenPath":"semantic.space.sidebar.gap","sourceLine":81,"sourceSnippet":"variant === 'toc' ? hds.semantic.space.sidebar.gap : 'var(--component-nav-paddingX)',"}]},"NavItem":{"filePath":"src/app/components/nav-item.tsx","description":"NavItem - navigation row primitive for sidebars, table of contents, and list navigation.","category":"Navigation","hidden":false,"props":[{"name":"active","type":"boolean","default":"false","required":false,"description":"Marks the item as the current route."},{"name":"disabled","type":"boolean","default":"false","required":false,"description":"Disables interaction and muted the nav row."},{"name":"label","type":"string","required":true,"description":"Text label displayed inside the navigation row."},{"name":"level","type":"NavLevel","default":"root","required":false,"description":"Visual hierarchy level for the navigation row."},{"name":"onNavigate","type":"(event: MouseEvent<HTMLAnchorElement, MouseEvent>) => void","required":false,"description":"Navigation callback fired before the browser follows the link."},{"name":"variant","type":"'side' | 'toc'","default":"side","required":false,"description":"Visual layout variant for side nav or table of contents usage."}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":84,"sourceSnippet":"typeStyle: hds.typeStyles.ui,"},{"raw":"hds.semantic.space.sidebar.railPadding","tokenPath":"semantic.space.sidebar.railPadding","sourceLine":85,"sourceSnippet":"leadingPaddingX: hds.semantic.space.sidebar.railPadding,"},{"raw":"hds.semantic.space.sidebar.sectionGap","tokenPath":"semantic.space.sidebar.sectionGap","sourceLine":92,"sourceSnippet":"leadingPaddingX: hds.semantic.space.sidebar.sectionGap,"},{"raw":"hds.semantic.space.sidebar.gap","tokenPath":"semantic.space.sidebar.gap","sourceLine":93,"sourceSnippet":"trailingPaddingX: hds.semantic.space.sidebar.gap,"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":188,"sourceSnippet":"outline: showFocus ? \`\${hds.borderWidth.sm} solid var(--semantic-color-border-accent)\` : 'none',"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":192,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, color \${hds.motion.productive.duration}s ease\`,"}]},"Page":{"filePath":"src/app/components/page.tsx","description":"Page — standard page shell. Wraps page content in Container (width constraint) and applies the canonical vertical padding so content breathes against the viewport edges on scroll. Use as the outermost element of any new page so vertical rhythm is consistent across the system without per-page reinvention. Footer: every page mounted under HDSLayout (the standard route shell) gets a shared footer rendered after this component's content, with bottom space below the footer owned by the layout shell. Page intentionally does not render its own footer — the shell is the single source of truth. Use Container directly only for full-bleed surfaces (sketches, hero sections, embedded canvases) where the page owns its own vertical padding. Usage: <Page> <Stack direction=\\"column\\" gap=\\"spacious\\">...</Stack> </Page> <Page maxWidth=\\"content\\" paddingY=\\"compact\\"> <article>...</article> </Page>","category":"Layout","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":""},{"name":"maxWidth","type":"'content' | 'max'","default":"max","required":false,"description":"Max width: 'content' (760px for prose) | 'max' (1200px). Defaults to 'max'."},{"name":"paddingY","type":"'default' | 'compact' | 'none'","default":"default","required":false,"description":"Vertical padding token: 'default' (48/64) | 'compact' (24/32) | 'none'. Defaults to 'default'."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch for narrow page-specific adjustments."}],"observedTokens":[{"raw":"hds.space.px48","tokenPath":"primitive.space.px48","sourceLine":37,"sourceSnippet":"default: { top: hds.space.px48, bottom: hds.space.px64 },"},{"raw":"hds.space.px64","tokenPath":"primitive.space.px64","sourceLine":37,"sourceSnippet":"default: { top: hds.space.px48, bottom: hds.space.px64 },"},{"raw":"hds.space.px24","tokenPath":"primitive.space.px24","sourceLine":38,"sourceSnippet":"compact: { top: hds.space.px24, bottom: hds.space.px32 },"},{"raw":"hds.space.px32","tokenPath":"primitive.space.px32","sourceLine":38,"sourceSnippet":"compact: { top: hds.space.px24, bottom: hds.space.px32 },"}]},"Pagination":{"filePath":"src/app/components/pagination.tsx","description":"Paged navigation with first/last anchors, sibling pages, and ellipses.","category":"Navigation","hidden":false,"props":[{"name":"count","type":"number","required":true,"description":"Total number of pages."},{"name":"label","type":"string","default":"Pagination","required":false,"description":"Accessible label for the nav landmark."},{"name":"onPageChange","type":"(page: number) => void","required":true,"description":"Fired with the next page when a control is activated."},{"name":"page","type":"number","required":true,"description":"Current page (1-based)."},{"name":"siblingCount","type":"number","default":"1","required":false,"description":"Pages shown either side of the current page before truncating."}],"observedTokens":[]},"Progress":{"filePath":"src/app/components/progress.tsx","description":"Linear progress. Determinate when \`value\` is a number, else indeterminate.","category":"Feedback","hidden":false,"props":[{"name":"label","type":"string","default":"Progress","required":false,"description":"Accessible label for the progress bar."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":""},{"name":"value","type":"number","default":"null","required":false,"description":"Completion 0–100. Omit (or pass null) for an indeterminate bar that animates until the work completes."}],"observedTokens":[]},"SegmentedControl":{"filePath":"src/app/components/segmented-control.tsx","description":"SegmentedControl \\" segmented selection input for compact mutually-exclusive choices.","category":"Inputs","hidden":false,"props":[{"name":"aria-label","type":"string","required":false,"description":"Accessible label when no visible label should be rendered."},{"name":"fullWidth","type":"boolean","default":"false","required":false,"description":"Whether the control should stretch to the width of its container."},{"name":"label","type":"string","required":false,"description":"Accessible label for the control."},{"name":"onChange","type":"(value: string) => void","required":true,"description":"Called when the user selects a different option."},{"name":"options","type":"HdsSegmentedOption[]","required":true,"description":"Option set rendered inside the segmented rail."},{"name":"railPadding","type":"Padding<string | number>","required":false,"description":"Padding inside the rail container."},{"name":"segmentPaddingX","type":"PaddingLeft<string | number>","required":false,"description":"Horizontal padding inside each segment."},{"name":"size","type":"\\"sm\\" | \\"md\\"","default":"md","required":false,"description":"Size on the sm/md ramp shared with Button/Input."},{"name":"value","type":"string","required":true,"description":"Currently selected value."},{"name":"variant","type":"\\"primary\\" | \\"secondary\\"","default":"primary","required":false,"description":"Visual treatment for the rail and active segment."}],"observedTokens":[{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":17,"sourceSnippet":"gap: hds.semantic.space.component.gap,"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":26,"sourceSnippet":"border: \`\${hds.borderWidth.default} solid var(--semantic-color-border-default)\`,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":31,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.layout.gap","tokenPath":"semantic.space.layout.gap","sourceLine":94,"sourceSnippet":"(isCompact ? hds.semantic.space.component.gap : hds.semantic.space.layout.gap);"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":108,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":175,"sourceSnippet":"duration: hds.motion.productive.duration,"},{"raw":"hds.motion.productive.easing","sourceLine":176,"sourceSnippet":"ease: hds.motion.productive.easing,"},{"raw":"hds.zIndex.base","sourceLine":183,"sourceSnippet":"zIndex: active ? 1 : hds.zIndex.base,"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":191,"sourceSnippet":"gap: hds.semantic.space.subgrid.hairline,"},{"raw":"hds.size[32]","tokenPath":"primitive.size.32","sourceLine":192,"sourceSnippet":"minHeight: isCompact ? hds.size[32] : hds.size[48],"},{"raw":"hds.size[48]","tokenPath":"primitive.size.48","sourceLine":192,"sourceSnippet":"minHeight: isCompact ? hds.size[32] : hds.size[48],"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":200,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":216,"sourceSnippet":"? \`\${hds.borderWidth.sm} solid \${isSecondary ? 'var(--semantic-color-border-default)' : 'var(--semantic-color-border-accent)'}\`"},{"raw":"hds.zIndex.focus","sourceLine":265,"sourceSnippet":"zIndex: hds.zIndex.focus,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":277,"sourceSnippet":"...hds.typeStyles.caption,"}]},"Skeleton":{"filePath":"src/app/components/skeleton.tsx","description":"Decorative loading placeholder. Marked aria-hidden — announce the loading state on the surrounding region (e.g. aria-busy) rather than per skeleton.","category":"Feedback","hidden":false,"props":[{"name":"height","type":"string | number","required":false,"description":"Explicit height (number → px, or any CSS length). For \`text\`, defaults to 1em."},{"name":"variant","type":"\\"text\\" | \\"rectangular\\" | \\"circular\\"","default":"rectangular","required":false,"description":""},{"name":"width","type":"string | number","required":false,"description":"Explicit width (number → px, or any CSS length)."}],"observedTokens":[]},"Sketch":{"filePath":"src/app/components/sketch.tsx","description":"Sketch — shared shell for generative canvases and WebGL sketches.","category":"Layout","hidden":false,"props":[{"name":"controls","type":"ReactNode","required":false,"description":""},{"name":"title","type":"string","required":true,"description":""}],"observedTokens":[{"raw":"hds.semantic.space.component.padding","tokenPath":"semantic.space.component.padding","sourceLine":21,"sourceSnippet":"padding: hds.semantic.space.component.padding,"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":22,"sourceSnippet":"borderBottom: \`\${hds.borderWidth.default} solid var(--semantic-color-border-default)\`,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":27,"sourceSnippet":"...hds.typeStyles.ui,"}]},"SpecimenBlock":{"filePath":"src/app/components/specimen-block.tsx","description":"SpecimenBlock — shared component-doc specimen block with preview, variant deck, and optional matrix.","category":"Utilities","hidden":false,"props":[{"name":"componentName","type":"string","required":true,"description":""},{"name":"demo","type":"ReactNode","required":false,"description":""},{"name":"filePath","type":"string","required":false,"description":""},{"name":"hideHero","type":"boolean","default":"false","required":false,"description":""},{"name":"hideHeroLabel","type":"boolean","default":"false","required":false,"description":""},{"name":"hideVariantDeck","type":"boolean","default":"false","required":false,"description":""},{"name":"matrix","type":"ReactNode","required":false,"description":""}],"observedTokens":[{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":50,"sourceSnippet":"<div style={{ marginTop: hideHero ? 0 : \`calc(\${hds.semantic.space.component.gap} * 2)\` }}>"}]},"Spinner":{"filePath":"src/app/components/spinner.tsx","description":"Indeterminate spinner. Inherits the surrounding text color via currentColor.","category":"Feedback","hidden":false,"props":[{"name":"label","type":"string","default":"Loading","required":false,"description":"Accessible label announced to assistive tech. Defaults to \\"Loading\\"."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":""}],"observedTokens":[]},"Stack":{"filePath":"src/app/components/stack.tsx","description":"Stack — one-dimensional layout primitive.","category":"Layout","hidden":false,"props":[{"name":"align","type":"'start' | 'center' | 'end' | 'stretch'","required":false,"description":"Cross-axis alignment: start | center | end | stretch."},{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"div","required":false,"description":"Element rendered as the outer wrapper."},{"name":"children","type":"ReactNode","required":true,"description":"Stack content rendered inside the flex wrapper."},{"name":"className","type":"string","required":false,"description":"Escape hatch: only use when tokenized props cannot express the required wrapper class."},{"name":"direction","type":"\\"row\\" | \\"column\\"","default":"column","required":false,"description":"Flex direction for the stack."},{"name":"gap","type":"GapOption","default":"tight","required":false,"description":"Gap token: semantic (tight, normal, inset, spacious) or primitive (px4, px8, etc). Defaults to 'tight' (16px)."},{"name":"justify","type":"'start' | 'center' | 'end' | 'space-between'","required":false,"description":"Main-axis distribution: start | center | end | space-between."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch: only use for narrow layout adjustments that do not belong in the primitive API."},{"name":"wrap","type":"FlexWrap","required":false,"description":"Whether children may wrap."}],"observedTokens":[{"raw":"hds.space","sourceLine":16,"sourceSnippet":"type GapOption = SemanticGap | ComponentGap | SubgridGap | SectionGap | keyof typeof hds.space;"}]},"Stat":{"filePath":"src/app/components/stat.tsx","description":"Headline metric — large value, uppercase caption label, optional sub-line.","category":"Display","hidden":false,"props":[{"name":"label","type":"string","required":true,"description":""},{"name":"sub","type":"ReactNode","required":false,"description":""},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"default\\"","default":"default","required":false,"description":""},{"name":"value","type":"ReactNode","required":true,"description":""}],"observedTokens":[]},"StatusListItem":{"filePath":"src/app/components/status-list-item.tsx","description":"Status dot + title row with optional muted notes and trailing slot (e.g. badge).","category":"Display","hidden":false,"props":[{"name":"notes","type":"ReactNode[]","required":false,"description":""},{"name":"title","type":"ReactNode","required":true,"description":""},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"info\\" | \\"neutral\\"","default":"neutral","required":false,"description":""},{"name":"trailing","type":"ReactNode","required":false,"description":""}],"observedTokens":[]},"StatusTile":{"filePath":"src/app/components/status-tile.tsx","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.","category":"Display","hidden":false,"props":[{"name":"notes","type":"ReactNode[]","required":false,"description":""},{"name":"title","type":"ReactNode","required":true,"description":""},{"name":"tone","type":"'success' | 'warning' | 'danger' | 'info' | 'neutral'","default":"neutral","required":false,"description":"Tone metadata kept for downstream consumers (e.g., the trailing badge). The tile itself does not paint a tone-bearing rule."},{"name":"trailing","type":"ReactNode","required":false,"description":""}],"observedTokens":[]},"StepperField":{"filePath":"src/app/components/stepper-field.tsx","description":"StepperField ” numeric input with decrement/increment controls. Classification baseline: Material Design, Chakra UI, and Ant Design treat steppers as numeric input controls rather than page-specific controls. This lives in shared components so sketches and docs consume the same primitive.","category":"Inputs","hidden":false,"props":[{"name":"inputStep","type":"number","required":false,"description":""},{"name":"label","type":"string","required":true,"description":""},{"name":"max","type":"number","required":true,"description":""},{"name":"min","type":"number","required":true,"description":""},{"name":"onChange","type":"(value: number) => void","required":true,"description":""},{"name":"precision","type":"number","required":false,"description":""},{"name":"step","type":"number","required":true,"description":""},{"name":"value","type":"number","required":true,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":92,"sourceSnippet":"<label className=\\"text-secondary\\" style={{ ...hds.typeStyles.caption }}>"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":95,"sourceSnippet":"<div style={{ display: 'flex', alignItems: 'center', gap: hds.semantic.space.component.gap }}>"},{"raw":"hds.size[96]","tokenPath":"primitive.size.96","sourceLine":122,"sourceSnippet":"width: hds.size[96],"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":129,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, border-color \${hds.motion.productive.duration}s ease\`,"}]},"Surface":{"filePath":"src/app/components/surface.tsx","description":"Surface — governed inset surface primitive. Enforces the \\"Surface Inset\\" rule: backgrounds MUST have internal padding. - Default padding: px24 (cards) | px16 (items) - Default border: none (elevation model — use shadow for lift) - Fixed radius: var(--component-card-radius) - shadow prop: applies a two-layer elevation shadow for card lift Usage: <Surface>Card content</Surface> <Surface padding=\\"item\\">Compact item</Surface> <Surface shadow>Lifted card with elevation shadow.</Surface>","category":"Layout","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"div","required":false,"description":"Element rendered as the outer wrapper. Defaults to 'div'."},{"name":"children","type":"ReactNode","required":false,"description":"Surface content."},{"name":"className","type":"string","required":false,"description":"Escape hatch: only use when tokenized props cannot express the required wrapper class."},{"name":"overflow","type":"Overflow","required":false,"description":"Override CSS overflow."},{"name":"padding","type":"PaddingOption","default":"component","required":false,"description":"Padding: 'component' (24px, default) | 'item' (16px) | primitive px values | 'none' (0px)."},{"name":"shadow","type":"boolean","default":"false","required":false,"description":"Apply the two-layer card elevation shadow for lift."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch: only use for narrow layout adjustments that do not belong in the primitive API."},{"name":"theme","type":"\\"light\\" | \\"dark\\"","required":false,"description":"Force a theme regardless of context: 'dark' | 'light'. Defaults to context value."}],"observedTokens":[]},"Table":{"filePath":"src/app/components/table.tsx","description":"Table - structured data table primitive for documentation and compact UI matrices.","category":"Display","hidden":false,"props":[{"name":"caption","type":"ReactNode","required":false,"description":""},{"name":"captionAction","type":"ReactNode","required":false,"description":"Optional action rendered to the right of the caption."},{"name":"columns","type":"TableColumn[]","required":true,"description":""},{"name":"density","type":"'compact' | 'comfortable'","default":"comfortable","required":false,"description":""},{"name":"description","type":"ReactNode","required":false,"description":""},{"name":"flush","type":"boolean","default":"false","required":false,"description":""},{"name":"minWidth","type":"string | number","required":false,"description":""},{"name":"rows","type":"TableRow[]","required":true,"description":""},{"name":"stickyHeader","type":"boolean","default":"false","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":19,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.component.padding","tokenPath":"semantic.space.component.padding","sourceLine":26,"sourceSnippet":"paddingRight: hds.semantic.space.component.padding,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":96,"sourceSnippet":"label: hds.typeStyles.ui,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":99,"sourceSnippet":"...hds.typeStyles.caption,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":117,"sourceSnippet":"paddingY: hds.semantic.space.component.gap,"},{"raw":"hds.size[40]","tokenPath":"primitive.size.40","sourceLine":118,"sourceSnippet":"minHeight: hds.size[40],"},{"raw":"hds.space.px12","tokenPath":"primitive.space.px12","sourceLine":123,"sourceSnippet":"paddingY: hds.space.px12,"},{"raw":"hds.size[48]","tokenPath":"primitive.size.48","sourceLine":124,"sourceSnippet":"minHeight: hds.size[48],"},{"raw":"hds.zIndex.overlay","sourceLine":219,"sourceSnippet":"style={makeHeaderCellStyle({ justifyContent: cellJustifyContent(column.align), textAlign: alignToTextAlign(column.align), paddingY: metrics.paddingY, minHeight: metrics.minHeight, stickyHeader: Boolean(stickyHeader), zIndex: hds.zIndex.overlay })}"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":229,"sourceSnippet":"style={makeDataCellStyle({ justifyContent: cellJustifyContent(cell.align), minHeight: metrics.minHeight, paddingY: metrics.paddingY, borderBottom: rowIndex < rows.length - 1 ? \`\${hds.borderWidth.default} solid var(--semantic-color-border-subdued)\` : 'none', textAlign: alignToTextAlign(cell.align), slotStyle: SLOT_STYLES[cell.slot] })}"}]},"Tabs":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"TabsContent":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"TabsList":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"TabsTrigger":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"Tag":{"filePath":"src/app/components/tag.tsx","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) are owned by .hds-tag-btn / .hds-tag-pill in theme.css so :hover transitions work — inline styles beat :hover selectors and would silently break the effect. Active state: brand fill via [data-active=\\"true\\"] in theme.css. Hover states: inactive → subtle tint + brand border; active → brand-hover fill.","category":"Inputs","hidden":false,"props":[{"name":"active","type":"boolean","default":"false","required":false,"description":"Whether the tag is active."},{"name":"aria-label","type":"string","required":false,"description":"Accessible label when the visible text is abbreviated."},{"name":"children","type":"ReactNode","required":true,"description":"Tag content displayed inside the pill."},{"name":"className","type":"string","required":false,"description":"Optional class hook for parent-level styling."},{"name":"onClick","type":"() => void","required":false,"description":"Click handler for toggling the tag."},{"name":"title","type":"string","required":false,"description":"Native tooltip for explicit file/path affordance."}],"observedTokens":[{"raw":"hds.size.interactive.min","tokenPath":"primitive.size.interactive.min","sourceLine":49,"sourceSnippet":"minWidth: hds.size.interactive.min,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":50,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, color \${hds.motion.productive.duration}s ease, transform \${hds.motion.productive.duration}s ease\`,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":54,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":67,"sourceSnippet":"borderRadius: hds.borderRadius.action,"}]},"Text":{"filePath":"src/app/components/text.tsx","description":"Text — polymorphic typography primitive spanning the full HDS type ramp.","category":"Typography","hidden":false,"props":[{"name":"as","type":"\\"symbol\\" | \\"object\\" | \\"title\\" | \\"slot\\" | \\"style\\" | \\"search\\" | \\"article\\" | \\"button\\" | \\"dialog\\" | \\"figure\\" | \\"form\\" | \\"img\\" | \\"link\\" | \\"main\\" | \\"menu\\" | \\"menuitem\\" | \\"option\\" | \\"switch\\" | ... 161 more ... | FunctionComponent<...>","default":"defaultTagMap[variant]","required":false,"description":""},{"name":"className","type":"string","required":false,"description":""},{"name":"style","type":"CSSProperties","required":false,"description":""},{"name":"variant","type":"TextVariant","required":true,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.display","tokenPath":"semantic.typography.display","sourceLine":38,"sourceSnippet":"display: hds.typeStyles.display,"},{"raw":"hds.typeStyles.heading1","tokenPath":"semantic.typography.h1","sourceLine":39,"sourceSnippet":"heading1: hds.typeStyles.heading1,"},{"raw":"hds.typeStyles.heading2","tokenPath":"semantic.typography.h2","sourceLine":40,"sourceSnippet":"heading2: hds.typeStyles.heading2,"},{"raw":"hds.typeStyles.heading3","tokenPath":"semantic.typography.h3","sourceLine":41,"sourceSnippet":"heading3: hds.typeStyles.heading3,"},{"raw":"hds.typeStyles.body","tokenPath":"semantic.typography.body","sourceLine":42,"sourceSnippet":"body: hds.typeStyles.body,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":43,"sourceSnippet":"ui: hds.typeStyles.ui,"},{"raw":"hds.typeStyles.eyebrow","sourceLine":44,"sourceSnippet":"eyebrow: hds.typeStyles.eyebrow,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":45,"sourceSnippet":"caption: hds.typeStyles.caption,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":46,"sourceSnippet":"technical: hds.typeStyles.technical,"},{"raw":"hds.typeStyles.badge","tokenPath":"semantic.typography.caption","sourceLine":47,"sourceSnippet":"badge: hds.typeStyles.badge,"},{"raw":"hds.typeStyles.small","tokenPath":"semantic.typography.small","sourceLine":51,"sourceSnippet":"docSmall: hds.typeStyles.small,"},{"raw":"hds.typeStyles.mono","tokenPath":"semantic.typography.mono","sourceLine":52,"sourceSnippet":"docCode: hds.typeStyles.mono,"}]},"TextLockup":{"filePath":"src/app/components/text-lockup.tsx","description":"TextLockup - governed title-and-description pairing primitive.","category":"Display","hidden":false,"props":[{"name":"align","type":"'left' | 'center'","default":"left","required":false,"description":"Horizontal alignment for the text pair."},{"name":"as","type":"ElementType","default":"div","required":false,"description":"Override the semantic wrapper while preserving the governed layout styles."},{"name":"description","type":"ReactNode","required":false,"description":"Supporting body copy paired with the title."},{"name":"descriptionAs","type":"'div' | 'p' | 'span'","default":"div","required":false,"description":"Override the description tag without altering the visual type ramp."},{"name":"eyebrow","type":"string","required":false,"description":"Optional overline or category cue displayed above the title."},{"name":"id","type":"string","required":false,"description":"When provided on the \`numbered\` size, renders a copy-anchor action next to the title on hover. Should match the section's DOM id."},{"name":"size","type":"'hero' | 'heroXl' | 'section' | 'metric' | 'detail' | 'numbered'","required":true,"description":"Preset controlling title and body type pairing."},{"name":"title","type":"string","required":true,"description":"Primary heading copy rendered by the lockup."},{"name":"titleAs","type":"'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span'","required":false,"description":"Override the title tag without altering the visual type ramp."}],"observedTokens":[{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":22,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.typeStyles","sourceLine":62,"sourceSnippet":"// deliberate metric deviations) — the redundant \`...hds.typeStyles.*\` spreads"},{"raw":"hds.layout.proseMaxWidth","tokenPath":"semantic.layout.prose.maxWidth","sourceLine":74,"sourceSnippet":"maxWidth: hds.layout.proseMaxWidth,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":94,"sourceSnippet":"gap: hds.semantic.space.component.gap,"}]},"TileGrid":{"filePath":"src/app/components/tile-grid.tsx","description":"Auto-fill responsive grid for status/micro tiles. Wraps tile children in a one-line grid declaration so pages don't repeat the auto-fill minmax recipe.","category":"Layout","hidden":false,"props":[{"name":"gap","type":"\\"sm\\" | \\"md\\" | \\"xs\\"","default":"sm","required":false,"description":"Gap token between tiles. Defaults to 'sm' (12px)."},{"name":"minTileWidth","type":"string","default":"260px","required":false,"description":"Minimum tile width before the grid wraps. Defaults to 260px."}],"observedTokens":[]},"ToastProvider":{"filePath":"src/app/components/toast.tsx","description":"Provider + viewport for the toast system. Wrap the app root once.","category":"Feedback","hidden":false,"props":[{"name":"duration","type":"number","default":"5000","required":false,"description":"Default auto-dismiss in ms (Radix default is 5000)."},{"name":"swipeDirection","type":"SwipeDirection","default":"right","required":false,"description":"Swipe-to-dismiss direction."}],"observedTokens":[]},"Token":{"filePath":"src/app/components/token.tsx","description":"Token - reflective token specimen for unified node-based token views.","category":"Display","hidden":false,"props":[{"name":"accentColor","type":"string","required":true,"description":""},{"name":"aria-label","type":"string","required":false,"description":""},{"name":"className","type":"string","required":false,"description":""},{"name":"description","type":"ReactNode","required":false,"description":""},{"name":"fullWidth","type":"boolean","required":false,"description":""},{"name":"isSelected","type":"boolean","required":false,"description":""},{"name":"isSourceNode","type":"boolean","required":false,"description":""},{"name":"label","type":"string","required":true,"description":""},{"name":"leadingSlot","type":"ReactNode","required":false,"description":"Optional left-side slot for compact node content, e.g. curve previews."},{"name":"nodeRef","type":"(el: HTMLElement) => void","required":false,"description":""},{"name":"nowrap","type":"boolean","required":false,"description":""},{"name":"onClick","type":"(() => void) | (() => void)","required":false,"description":""},{"name":"pathDisplayDepth","type":"number","required":false,"description":""},{"name":"pathDisplayLeadingDot","type":"boolean","required":false,"description":""},{"name":"pathDisplayMode","type":"\\"full\\" | \\"compressed\\"","required":false,"description":""},{"name":"rawValue","type":"ReactNode","required":false,"description":""},{"name":"swatchVar","type":"string","required":false,"description":""},{"name":"tokenPath","type":"string","required":false,"description":"Optional explicit token path for deep-linking node instances. Falls back to children when omitted."},{"name":"truncateFromStart","type":"boolean","required":false,"description":"When true, overflow ellipsis appears at the start (left) instead of the end."},{"name":"value","type":"string","required":true,"description":""},{"name":"variant","type":"\\"node\\" | \\"diagram\\"","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":71,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":80,"sourceSnippet":"const tokenSwatchTextGap = hds.semantic.space.subgrid.gap;"},{"raw":"hds.borderRadius[2]","tokenPath":"primitive.radius.2","sourceLine":84,"sourceSnippet":"borderRadius: hds.borderRadius[2],"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":87,"sourceSnippet":"marginLeft: \`calc(\${hds.semantic.space.subgrid.hairline} * -1)\`,"}]}}`), ji = {
|
|
1470
|
+
const Mi = /* @__PURE__ */ JSON.parse(`{"Alert":{"filePath":"src/app/components/alert.tsx","description":"Alert - compact feedback surface with contextual severity.","category":"Feedback","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"Main alert message content."},{"name":"title","type":"string","required":false,"description":"Optional heading shown above the body copy."},{"name":"tone","type":"'success' | 'danger' | 'warning' | 'info'","default":"info","required":false,"description":"Feedback tone that controls icon, border, and surface treatment."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":72,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":72,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":86,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":95,"sourceSnippet":"...hds.typeStyles.caption,"}]},"Avatar":{"filePath":"src/app/components/avatar.tsx","description":"Circular avatar. Renders the image when available, else initials from \`alt\`.","category":"Display","hidden":false,"props":[{"name":"alt","type":"string","required":true,"description":"Required descriptive alt / accessible name (e.g. the person's name)."},{"name":"initials","type":"string","required":false,"description":"Explicit initials. Falls back to the first letters derived from \`alt\`."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":""},{"name":"src","type":"string","required":false,"description":"Image source. When absent or it fails to load, the initials fallback shows."}],"observedTokens":[]},"Badge":{"filePath":"src/app/components/badge.tsx","description":"Compact metadata/status chip. Tone is the only styling input.","category":"Feedback","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"span","required":false,"description":"Element rendered as the badge wrapper. Defaults to 'span'."},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"info\\" | \\"neutral\\" | \\"inProgress\\"","required":false,"description":""}],"observedTokens":[]},"Breadcrumb":{"filePath":"src/app/components/breadcrumb.tsx","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\\".","category":"Navigation","hidden":false,"props":[{"name":"items","type":"BreadcrumbItem[]","required":true,"description":"Ordered trail from root → current. The last item renders as the current page."},{"name":"label","type":"string","default":"Breadcrumb","required":false,"description":"Accessible label for the nav landmark."}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":56,"sourceSnippet":"style={hds.typeStyles.ui}"}]},"Callout":{"filePath":"src/app/components/callout.tsx","description":"Tone-driven side-rule callout for status, quotes, hypotheses.","category":"Feedback","hidden":false,"props":[{"name":"italic","type":"boolean","default":"false","required":false,"description":"Italicize the body content (quote / pull-quote pattern)."},{"name":"tone","type":"'accent' | 'info' | 'success' | 'warning' | 'danger'","default":"info","required":false,"description":"Tone — drives the left rule color and bg tint."}],"observedTokens":[]},"Card":{"filePath":"src/app/components/card.tsx","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 tone=\\"accent\\"> <Card.Header metadata={<Badge tone=\\"warning\\">in-progress</Badge>}> <Card.Title>Discovery phase</Card.Title> <Card.Description>Stakeholder interviews and audit prep.</Card.Description> </Card.Header> <Card.Progress value={42} max={100} label=\\"5 / 12 tasks\\" /> <Card.Metric label=\\"Retainer\\" value=\\"$3,500\\" sub=\\"Active\\" /> <Card.Body>…</Card.Body> <Card.Footer>…</Card.Footer> </Card> Slot reservations: - Header: title (h3) + optional description (caption) + optional metadata zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans). - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its spacing — never crowds adjacent prose. - Metric: single label-uppercase + big value (h2) + optional sub-line. Reserved vertical block. Use multiple side-by-side via flex/grid container. - Body: prose, lists, structured content. NO inline status, progress, or thin colored bars. Group sections via separate <Card.Body> blocks. - Footer: actions, secondary metadata, timestamps. Tone prop: 'default' (neutral border) | 'accent' (border-accent + raised bg) for highlighted variants like \\"recommended package\\", or feedback tones for status-driven cards. Tone replaces hand-rolled \`pkgHighlight\`-style overrides. Legacy props (padding / gap / noPadding / as / style) are retained. Existing callers that pass raw children continue to work; new callers should prefer compound parts + \`padding=\\"none\\"\`. Depth comes from semantic.color.border.default (role.border) at rest; elevation tokens are not bound by default — pass \`className=\\"shadow-...\\"\` for a hover/floating treatment on interactive cards.","category":"Display","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","required":false,"description":"Render-as element for the root wrapper."},{"name":"bordered","type":"boolean","default":"false","required":false,"description":"Opt in to a neutral 1px border on the default tone. Use for genuinely discrete standalone records in sparse layouts where containment helps legibility. Default false — repeated cards in grids should stay borderless and rely on whitespace, rails, or section dividers."},{"name":"gap","type":"GapOption","default":"tight","required":false,"description":"Legacy gap prop for the root flex container."},{"name":"noPadding","type":"boolean","default":"false","required":false,"description":"Legacy convenience flag that removes inner padding."},{"name":"padding","type":"PaddingOption","default":"component","required":false,"description":"Legacy padding prop for raw-children cards. Use \`none\` when composing parts."},{"name":"tone","type":"'default' | 'accent' | 'success' | 'warning' | 'danger'","default":"default","required":false,"description":"Visual tone — controls border color/weight. Default is BORDERLESS; \`accent\` for highlighted entries (e.g. recommended package); semantic tones for status-driven cards (border IS the signal). For a neutral-bordered card without semantic meaning, pass \`bordered\` instead of overloading tone."}],"observedTokens":[{"raw":"hds.space","sourceLine":52,"sourceSnippet":"type GapOption = 'tight' | 'normal' | 'inset' | 'spacious' | keyof typeof hds.space;"},{"raw":"hds.borderRadius[2]","tokenPath":"primitive.radius.2","sourceLine":308,"sourceSnippet":"borderRadius: hds.borderRadius[2],"},{"raw":"hds.motion.expressive.duration","tokenPath":"primitive.duration.medium","sourceLine":319,"sourceSnippet":"transition: \`width \${hds.motion.expressive.duration}s ease-out\`,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":327,"sourceSnippet":"...hds.typeStyles.caption,"},{"raw":"hds.typeStyles.eyebrow","sourceLine":368,"sourceSnippet":"...hds.typeStyles.eyebrow,"},{"raw":"hds.typeStyles.h2","tokenPath":"semantic.typography.h2","sourceLine":378,"sourceSnippet":"...hds.typeStyles.h2,"}]},"CinematicLink":{"filePath":"src/app/components/cinematic-link.tsx","description":"CinematicLink - cinematic editorial link treatment for portfolio surfaces.","category":"Branding","hidden":false,"props":[{"name":"href","type":"string","required":true,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":24,"sourceSnippet":"...hds.typeStyles.ui,"}]},"CodeBlock":{"filePath":"src/app/components/code-block.tsx","description":"CodeBlock - code display with copy button and optional collapsible toggle.","category":"Display","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":"Optional class hook for layout-specific styling."},{"name":"code","type":"string","required":true,"description":"Code string displayed in the block."},{"name":"collapsible","type":"boolean","default":"false","required":false,"description":"When true (block variant only), code is hidden behind a \\"Show code\\" toggle. Off by default to preserve backward compatibility for existing consumers."},{"name":"defaultExpanded","type":"boolean","default":"false","required":false,"description":"When \`collapsible\`, controls the initial state. Defaults to collapsed."},{"name":"filename","type":"string","required":false,"description":"Optional filename label shown in the header."},{"name":"language","type":"string","required":false,"description":"Optional language label shown in the header (also drives syntax coloring)."},{"name":"truncateFromStart","type":"boolean","default":"false","required":false,"description":"When true, inline code truncates from the start rather than the end."},{"name":"variant","type":"\\"inline\\" | \\"block\\"","default":"block","required":false,"description":"Visual presentation mode for block snippets vs inline single-line code."}],"observedTokens":[{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":18,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.size[32]","tokenPath":"primitive.size.32","sourceLine":21,"sourceSnippet":"minHeight: hds.size[32],"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":22,"sourceSnippet":"border: \`\${hds.borderWidth.default} solid var(--semantic-color-border-default)\`,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":24,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":28,"sourceSnippet":"paddingLeft: hds.semantic.space.component.gap,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":43,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, color \${hds.motion.productive.duration}s ease, transform \${hds.motion.productive.duration}s ease\`,"},{"raw":"hds.semantic.space.component.padding","tokenPath":"semantic.space.component.padding","sourceLine":49,"sourceSnippet":"paddingLeft: hds.semantic.space.component.padding,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":85,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.section.stack","tokenPath":"semantic.space.section.stack","sourceLine":236,"sourceSnippet":"padding: hds.semantic.space.section.stack,"}]},"Combobox":{"filePath":"src/app/components/combobox.tsx","description":"Combobox — searchable single-select (Popover + filtered listbox). A select-with-search built on the HDS Popover. The trigger shows the current selection; opening reveals a search field that filters the option list. Full keyboard support (↑/↓ to move, Enter to choose, Esc/outside-click to close) and listbox/option ARIA. Controlled via \`value\` + \`onChange\`. <Combobox options={[{ value: 'us', label: 'United States' }, …]} value={country} onChange={setCountry} placeholder=\\"Select a country\\" />","category":"Inputs","hidden":false,"props":[{"name":"aria-label","type":"string","required":false,"description":"Accessible label for the trigger (when not labelled by a <Field>)."},{"name":"className","type":"string","required":false,"description":""},{"name":"disabled","type":"boolean","default":"false","required":false,"description":""},{"name":"emptyMessage","type":"string","default":"No results","required":false,"description":"Shown when the filter matches no options."},{"name":"onChange","type":"(value: string) => void","required":true,"description":"Fired with the chosen option's value."},{"name":"options","type":"ComboboxOption[]","required":true,"description":"Selectable options."},{"name":"placeholder","type":"string","default":"Select…","required":false,"description":"Trigger text when nothing is selected."},{"name":"searchPlaceholder","type":"string","default":"Search…","required":false,"description":"Placeholder for the search field."},{"name":"value","type":"string","required":true,"description":"Currently selected value, or null when nothing is chosen."}],"observedTokens":[]},"ComponentInstanceMatrix":{"filePath":"src/app/components/component-instance-matrix.tsx","description":"ComponentInstanceMatrix — responsive specimen matrix for variant and state parity.","category":"Utilities","hidden":false,"props":[{"name":"componentName","type":"string","required":true,"description":""},{"name":"dimensionX","type":"string","required":true,"description":""},{"name":"dimensionY","type":"string","required":true,"description":""},{"name":"freezeRowState","type":"boolean","default":"false","required":false,"description":"Wrap each row's rendered instance in FreezeState so the visual state is frozen."},{"name":"isMobile","type":"boolean","required":true,"description":""},{"name":"renderInstance","type":"(rowKey: string, columnKey: string) => ReactNode","required":true,"description":""},{"name":"rowLabelTone","type":"\\"primary\\" | \\"secondary\\"","default":"primary","required":false,"description":""},{"name":"rowLabelWidth","type":"number","default":"120","required":false,"description":""},{"name":"title","type":"string","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":128,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":141,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.layout.gap","tokenPath":"semantic.space.layout.gap","sourceLine":144,"sourceSnippet":"paddingBottom: hds.semantic.space.layout.gap,"}]},"Container":{"filePath":"src/app/components/container.tsx","description":"Container — semantic width-constrained layout. Centers content horizontally and applies semantic max-width constraints. - maxWidth options: 'content' (760px prose) | 'max' (1200px full layout) - No arbitrary pixel values allowed Usage: <Container maxWidth=\\"max\\"> <div>...</div> </Container>","category":"Layout","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"Container content."},{"name":"className","type":"string","required":false,"description":"Optional class hook."},{"name":"maxWidth","type":"'content' | 'max'","default":"max","required":false,"description":"Max width: 'content' (760px for prose) | 'max' (1200px for full layouts). Defaults to 'max'."},{"name":"padding","type":"string","default":"var(--semantic-space-component-padding)","required":false,"description":"Deprecated. Container no longer owns internal padding."},{"name":"style","type":"CSSProperties","required":false,"description":"Optional inline styles for layout-specific adjustments."}],"observedTokens":[]},"Dialog":{"filePath":"src/app/components/dialog.tsx","description":"Dialog — modal dialog (shadcn baseline, compound parts). shadcn-baseline implementation (8s-7): Radix Dialog primitive (@radix-ui/react-dialog) themed with role tokens. Provides focus trap, scroll lock, ESC-to-close, backdrop scrim, and portal mounting out of the box. <Dialog> <Dialog.Trigger asChild> <Button>Open</Button> </Dialog.Trigger> <Dialog.Content> <Dialog.Header> <Dialog.Title>Confirm</Dialog.Title> <Dialog.Description>Are you sure?</Dialog.Description> </Dialog.Header> <Dialog.Footer> <Dialog.Close asChild> <Button variant=\\"secondary\\">Cancel</Button> </Dialog.Close> </Dialog.Footer> </Dialog.Content> </Dialog> Surface uses role.popover (semantic.color.surface.overlay) + shadow-overlay (semantic.shadow.overlay from 8e-1). The scrim is a foreground/80 wash so it picks up the theme without a hardcoded black. The close affordance is rendered as an absolutely-positioned X inside Content; pass \`hideClose\` to opt out for fully-custom layouts.","category":"Overlays","hidden":false,"props":[{"name":"children","type":"ReactNode","required":false,"description":"Children — typically \`Dialog.Trigger\` and \`Dialog.Content\`."},{"name":"defaultOpen","type":"boolean","required":false,"description":"Initial open state for uncontrolled usage."},{"name":"modal","type":"boolean","required":false,"description":"When true (default), traps focus and locks scroll while open."},{"name":"open","type":"boolean","required":false,"description":"Controlled open state."}],"observedTokens":[]},"Disclosure":{"filePath":"src/app/components/disclosure.tsx","description":"Disclosure - compact disclosure surface for optional explanatory content.","category":"Layout","hidden":false,"props":[{"name":"accent","type":"boolean","default":"false","required":false,"description":"Keeps the disclosure visually highlighted even when closed."},{"name":"children","type":"ReactNode","required":true,"description":"Content revealed when the disclosure is expanded."},{"name":"className","type":"string","required":false,"description":"Optional className passthrough for the trigger."},{"name":"contentStyle","type":"CSSProperties","required":false,"description":"Optional inner content style overrides."},{"name":"defaultOpen","type":"boolean","default":"false","required":false,"description":"Whether the disclosure starts in the open state."},{"name":"label","type":"ReactNode","required":true,"description":"Summary label rendered in the disclosure trigger. Accepts a string or ReactNode for icon+label combos."},{"name":"onOpenChange","type":"(open: boolean) => void","required":false,"description":"Called whenever the disclosure toggles."},{"name":"open","type":"boolean","required":false,"description":"Controlled open state."},{"name":"triggerStyle","type":"CSSProperties","required":false,"description":"Optional trigger style overrides."},{"name":"variant","type":"'panel' | 'nav' | 'card'","default":"panel","required":false,"description":"Visual treatment for docs panels, nav groups, or summary cards."}],"observedTokens":[{"raw":"hds.semantic.space.sidebar.gap","tokenPath":"semantic.space.sidebar.gap","sourceLine":88,"sourceSnippet":"gap: hds.semantic.space.sidebar.gap,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":93,"sourceSnippet":"\`border-color \${hds.motion.productive.duration}s \${hds.motion.productive.easing}\`,"},{"raw":"hds.motion.productive.easing","sourceLine":93,"sourceSnippet":"\`border-color \${hds.motion.productive.duration}s \${hds.motion.productive.easing}\`,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":107,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":112,"sourceSnippet":"columnGap: hds.semantic.space.component.gap,"},{"raw":"hds.semantic.space.sidebar.sectionGap","tokenPath":"semantic.space.sidebar.sectionGap","sourceLine":127,"sourceSnippet":"? hds.semantic.space.sidebar.sectionGap"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":134,"sourceSnippet":"...(variant === 'nav' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":134,"sourceSnippet":"...(variant === 'nav' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":167,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.iconSize.small","tokenPath":"primitive.typography.size.base","sourceLine":183,"sourceSnippet":"width: hds.iconSize.small,"}]},"Divider":{"filePath":"src/app/components/divider.tsx","description":"Divider — semantic separator between content regions.","category":"Layout","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":"Optional class hook for parent-level styling."},{"name":"orientation","type":"\\"horizontal\\" | \\"vertical\\"","default":"horizontal","required":false,"description":"Divider orientation."},{"name":"spacing","type":"string | number","required":false,"description":"Perpendicular spacing around the divider."},{"name":"strong","type":"boolean","default":"false","required":false,"description":"Increase the stroke weight for stronger separation."},{"name":"style","type":"CSSProperties","required":false,"description":"Optional inline styles for one-off layout adjustments."}],"observedTokens":[{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":53,"sourceSnippet":"borderTop: \`\${hds.borderWidth.default} solid \${borderColor}\`,"}]},"DocLinkCard":{"filePath":"src/app/components/doc-link-card.tsx","description":"DocLinkCard - navigation card for editorial and documentation cross-links.","category":"Navigation","hidden":false,"props":[{"name":"accent","type":"boolean","default":"false","required":false,"description":"Tint the card surface for emphasis."},{"name":"affordance","type":"\\"up-right\\" | \\"right\\" | \\"left\\"","default":"up-right","required":false,"description":"Directional affordance for the header icon."},{"name":"description","type":"string","required":false,"description":"Supporting body copy shown below the title."},{"name":"disabled","type":"boolean","default":"false","required":false,"description":"Disable navigation and reduce contrast."},{"name":"href","type":"string","required":true,"description":"Destination route or URL."},{"name":"icon","type":"LucideIcon","required":true,"description":"Icon rendered in the card header."},{"name":"meta","type":"string","required":false,"description":"Optional metadata label rendered above the title."},{"name":"metaStyle","type":"\\"caption\\" | \\"ui\\"","default":"caption","required":false,"description":"Typography style used for the meta label."},{"name":"title","type":"string","required":true,"description":"Primary title displayed in the card."},{"name":"variant","type":"\\"feature\\" | \\"pager\\"","default":"feature","required":false,"description":"Card layout variant."}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":14,"sourceSnippet":"const bodyTextStyle = hds.typeStyles.ui;"},{"raw":"hds.semantic.space.layout.gap","tokenPath":"semantic.space.layout.gap","sourceLine":41,"sourceSnippet":"padding: hds.semantic.space.layout.gap,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":42,"sourceSnippet":"gap: hds.semantic.space.component.gap,"},{"raw":"hds.typeStyles.heading3","tokenPath":"semantic.typography.h3","sourceLine":43,"sourceSnippet":"titleStyle: { ...hds.typeStyles.heading3, color: 'var(--semantic-color-content-primary)' },"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":45,"sourceSnippet":"iconGap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":81,"sourceSnippet":"const metaTextStyle = metaStyle === 'ui' ? hds.typeStyles.ui : hds.typeStyles.caption;"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":85,"sourceSnippet":"duration: hds.motion.productive.duration,"},{"raw":"hds.motion.productive.easing","sourceLine":86,"sourceSnippet":"ease: hds.motion.productive.easing,"}]},"EmptyState":{"filePath":"src/app/components/empty-state.tsx","description":"EmptyState — consistent no-data placeholder for lists, grids, and sections. communicate \\"no data yet\\" with consistent muted typography instead of agents inventing one-off \`<p>No items.</p>\` lines. use for full-page errors (use ErrorPage) or for loading states (use a skeleton). Do NOT wrap in Surface or Card — the empty state is a typographic message, not a chrome-bearing container.","category":"Display","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":"Escape hatch for layout adjustments — token-only, no business logic."},{"name":"description","type":"ReactNode","required":false,"description":"Optional supporting line."},{"name":"title","type":"ReactNode","required":true,"description":"Primary message. Sentence-case, no trailing period required."}],"observedTokens":[]},"Field":{"filePath":"src/app/components/field.tsx","description":"Caption label paired with a value — used in metadata grids and read-only forms.","category":"Display","hidden":false,"props":[{"name":"label","type":"string","required":true,"description":""},{"name":"mono","type":"boolean","default":"false","required":false,"description":""},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"default\\"","default":"default","required":false,"description":""},{"name":"value","type":"ReactNode","required":false,"description":""}],"observedTokens":[]},"Form":{"filePath":"src/app/components/form.tsx","description":"Styled \`<form>\` with consistent vertical field rhythm.","category":"Inputs","hidden":false,"props":[],"observedTokens":[]},"FormField":{"filePath":"src/app/components/form.tsx","description":"Label + description + error wrapper that wires the a11y relationships onto its single child control via cloneElement. Validation-library agnostic — pass \`error\` from whatever you use. For controls with an externally-managed callback ref (e.g. react-hook-form), use \`FormFieldShell\` + \`useFieldWiring\` instead.","category":"Inputs","hidden":false,"props":[{"name":"children","type":"ReactElement<any, string | JSXElementConstructor<any>>","required":true,"description":"The single form control (native input, Select, Combobox, …)."},{"name":"className","type":"string","required":false,"description":""},{"name":"description","type":"string","required":false,"description":"Helper text below the control; linked via aria-describedby."},{"name":"error","type":"string","required":false,"description":"Error message; when set, marks the control aria-invalid and links it."},{"name":"htmlFor","type":"string","required":false,"description":"Explicit control id. Defaults to a generated id."},{"name":"label","type":"string","required":true,"description":"Field label, associated to the control via htmlFor/id."},{"name":"required","type":"boolean","default":"false","required":false,"description":"Adds a required marker and sets \`required\` on the control."}],"observedTokens":[]},"FormFieldShell":{"filePath":"src/app/components/form.tsx","description":"Presentational label + control slot + helper/error markup. Renders \`children\` verbatim — it does NOT clone — so it is safe to use with controls that own a callback ref. Pair it with \`useFieldWiring\` to apply ids/aria yourself.","category":"Inputs","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"The already-rendered control (already carrying its own id/aria props)."},{"name":"className","type":"string","required":false,"description":""},{"name":"controlId","type":"string","required":true,"description":"Id of the control rendered as \`children\` (drives the label's htmlFor)."},{"name":"description","type":"string","required":false,"description":""},{"name":"error","type":"string","required":false,"description":""},{"name":"label","type":"string","required":true,"description":""},{"name":"required","type":"boolean","default":"false","required":false,"description":""}],"observedTokens":[]},"FoundationSwatch":{"filePath":"src/app/components/foundation-swatch.tsx","description":"FoundationSwatch - governed foundation specimen for color and semantic role previews.","category":"Utilities","hidden":false,"props":[{"name":"background","type":"string","required":true,"description":"Background fill or tone shown by the specimen."},{"name":"bordered","type":"boolean","default":"false","required":false,"description":"Whether to show a bordered specimen surface."},{"name":"details","type":"string[]","required":false,"description":"Optional supporting lines shown inside the specimen."},{"name":"foreground","type":"string","default":"var(--semantic-color-content-primary)","required":false,"description":"Foreground color used for text inside the specimen."},{"name":"hidePreviewLabel","type":"boolean","default":"false","required":false,"description":"Whether to hide the preview label inside the swatch specimen."},{"name":"label","type":"string","required":true,"description":"Primary label rendered inside or below the swatch."},{"name":"note","type":"ReactNode","required":false,"description":"Optional note rendered below card-style swatches."},{"name":"previewPosition","type":"'bottom-left' | 'top-left' | 'center'","default":"center","required":false,"description":"Placement of the specimen content inside the swatch surface."},{"name":"specimen","type":"ReactNode","required":false,"description":"Custom specimen content rendered inside card-style swatches."},{"name":"swatchVar","type":"string","required":false,"description":"Explicit color value (hex or CSS var name) to pin the token chip's swatch square, overriding auto-resolution from tokenPath."},{"name":"tokenDisplayPreset","type":"'depth1' | 'depth2' | 'full'","default":"depth2","required":false,"description":"Shorthand preset for how the token path renders inside the specimen."},{"name":"tokenPath","type":"string","required":false,"description":"Optional token path rendered as a condensed node inside the swatch surface."},{"name":"value","type":"string","required":false,"description":"Optional text/value line shown inside the specimen."}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":70,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":79,"sourceSnippet":"...hds.typeStyles.caption,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":149,"sourceSnippet":"? hds.semantic.space.component.gap"}]},"Grid":{"filePath":"src/app/components/grid.tsx","description":"Grid — responsive grid composition primitive. Enforces semantic gap and column values. No arbitrary CSS grid. - layout='fixed': responsive base (collapses via CSS at tablet/mobile). \`columns\` sets desktop count (default 12). Tablet/mobile clamp to min(8, cols) and min(4, cols) respectively. - layout='auto-fit': responsive card wrapping via auto-fit. - subgrid=true: sets gridTemplateColumns:'subgrid' for nested alignment. Usage (default responsive 12-col): <Grid> <Grid.Item colSpan={6}>…</Grid.Item> <Grid.Item colSpan={6}>…</Grid.Item> </Grid> Usage (responsive auto-fit): <Grid layout=\\"auto-fit\\"> <Card /> <Card /> </Grid>","category":"Layout","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"div","required":false,"description":"Element rendered as the outer wrapper. Defaults to 'div'."},{"name":"children","type":"ReactNode","required":true,"description":"Grid content."},{"name":"className","type":"string","required":false,"description":"Escape hatch: only use when tokenized props cannot express the required wrapper class."},{"name":"columns","type":"number","default":"12","required":false,"description":"Desktop column count for layout='fixed'. Tablet clamps to min(8,n), mobile to min(4,n). Defaults to 12."},{"name":"gap","type":"'tight' | 'normal' | 'inset' | 'spacious'","default":"inset","required":false,"description":"Gap between grid items: semantic only. Defaults to 'inset' (32px)."},{"name":"layout","type":"'fixed' | 'auto-fit'","default":"fixed","required":false,"description":"Grid layout mode: 'fixed' (responsive) or 'auto-fit' (card wrapping). Defaults to 'fixed'."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch: only use for narrow layout adjustments that do not belong in the primitive API."},{"name":"subgrid","type":"boolean","default":"false","required":false,"description":"If true, sets gridTemplateColumns:'subgrid' for nested grid alignment."}],"observedTokens":[{"raw":"hds.breakpoints.sm","sourceLine":94,"sourceSnippet":"if (width <= hds.breakpoints.sm) {"},{"raw":"hds.breakpoints.lg","sourceLine":98,"sourceSnippet":"if (width <= hds.breakpoints.lg) {"}]},"HdsCheckbox":{"filePath":"src/app/components/checkbox.tsx","description":"HdsCheckbox — custom-drawn checkbox with check / indeterminate glyph.","category":"Inputs","hidden":false,"props":[{"name":"checked","type":"boolean","required":true,"description":"Current checked state."},{"name":"indeterminate","type":"boolean","default":"false","required":false,"description":"Mixed state — visually a dash; supersedes the check glyph."},{"name":"label","type":"string","required":true,"description":"Checkbox label displayed next to the control."},{"name":"onChange","type":"(v: boolean) => void","required":true,"description":"Called when the checkbox changes."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":68,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":68,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":78,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":81,"sourceSnippet":"paddingLeft: hds.semantic.space.component.gap,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":83,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.size[20]","tokenPath":"primitive.size.20","sourceLine":127,"sourceSnippet":"width: hds.size[20],"},{"raw":"hds.borderRadius[4]","tokenPath":"primitive.radius.4","sourceLine":129,"sourceSnippet":"borderRadius: hds.borderRadius[4],"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":130,"sourceSnippet":"border: \`\${hds.borderWidth.sm} solid \${borderColor}\`,"},{"raw":"hds.space.px1","tokenPath":"primitive.space.px1","sourceLine":147,"sourceSnippet":"animate={{ x: isPressed ? hds.space.px1 : 0 }}"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":150,"sourceSnippet":"...hds.typeStyles.ui,"}]},"HdsRadio":{"filePath":"src/app/components/radio.tsx","description":"HdsRadio — radio button with animated selection indicator.","category":"Inputs","hidden":false,"props":[{"name":"checked","type":"boolean","required":true,"description":"Current checked state."},{"name":"label","type":"string","required":true,"description":"Radio label displayed next to the control."},{"name":"onChange","type":"(v: boolean) => void","required":true,"description":"Called when the radio changes."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":58,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":58,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.expressive.duration","tokenPath":"primitive.duration.medium","sourceLine":126,"sourceSnippet":"duration: hds.motion.expressive.duration,"},{"raw":"hds.size[8]","tokenPath":"primitive.size.8","sourceLine":130,"sourceSnippet":"width: hds.size[8],"},{"raw":"hds.borderRadius.full","tokenPath":"primitive.radius.full","sourceLine":132,"sourceSnippet":"borderRadius: hds.borderRadius.full,"},{"raw":"hds.space.px1","tokenPath":"primitive.space.px1","sourceLine":142,"sourceSnippet":"x: isPressed ? hds.space.px1 : 0,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":149,"sourceSnippet":"...hds.typeStyles.ui,"}]},"HdsSlider":{"filePath":"src/app/components/slider.tsx","description":"HdsSlider — range slider with label and value display.","category":"Inputs","hidden":false,"props":[{"name":"label","type":"string","required":true,"description":"Slider label."},{"name":"max","type":"number","required":true,"description":"Maximum value in the range."},{"name":"min","type":"number","required":true,"description":"Minimum value in the range."},{"name":"onChange","type":"(v: number) => void","required":true,"description":"Called when the slider value changes."},{"name":"step","type":"number","default":"1","required":false,"description":"Step increment for the range input."},{"name":"value","type":"number","required":true,"description":"Current slider value."}],"observedTokens":[{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":39,"sourceSnippet":"style={{ display: 'flex', flexDirection: 'column', gap: hds.semantic.space.component.gap }}"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":51,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.space.px2","tokenPath":"primitive.space.px2","sourceLine":60,"sourceSnippet":"initial={{ opacity: 0.72, y: hds.space.px2 }}"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":63,"sourceSnippet":"duration: hds.motion.productive.duration,"},{"raw":"hds.motion.productive.easing","sourceLine":64,"sourceSnippet":"ease: hds.motion.productive.easing,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":66,"sourceSnippet":"style={{ ...hds.typeStyles.technical, flexShrink: 0 }}"},{"raw":"hds.size[20]","tokenPath":"primitive.size.20","sourceLine":74,"sourceSnippet":"height: hds.size[20],"},{"raw":"hds.size[8]","tokenPath":"primitive.size.8","sourceLine":86,"sourceSnippet":"height: hds.size[8],"},{"raw":"hds.motion.expressive.duration","tokenPath":"primitive.duration.medium","sourceLine":98,"sourceSnippet":"duration: hds.motion.expressive.duration,"},{"raw":"hds.borderRadius.full","tokenPath":"primitive.radius.full","sourceLine":103,"sourceSnippet":"borderRadius: hds.borderRadius.full,"},{"raw":"hds.zIndex.focus","sourceLine":131,"sourceSnippet":"zIndex: hds.zIndex.focus,"}]},"HdsToggle":{"filePath":"src/app/components/toggle.tsx","description":"HdsToggle — boolean on/off toggle with animated thumb.","category":"Inputs","hidden":false,"props":[{"name":"checked","type":"boolean","required":true,"description":"Current checked state."},{"name":"label","type":"string","required":true,"description":"Toggle label displayed next to the control."},{"name":"onChange","type":"(v: boolean) => void","required":true,"description":"Called when the toggle changes."}],"observedTokens":[{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":44,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.motion.productive.easing","sourceLine":44,"sourceSnippet":"transition={{ duration: hds.motion.productive.duration, ease: hds.motion.productive.easing }}"},{"raw":"hds.space.px1","tokenPath":"primitive.space.px1","sourceLine":51,"sourceSnippet":"y: isPressed ? hds.space.px1 : 0,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":56,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":59,"sourceSnippet":"paddingLeft: hds.semantic.space.component.gap,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":61,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":70,"sourceSnippet":"? \`\${hds.borderWidth.sm} solid var(--semantic-color-border-accent)\`"},{"raw":"hds.size[16]","tokenPath":"primitive.size.16","sourceLine":102,"sourceSnippet":"width: hds.size[16],"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":120,"sourceSnippet":"...hds.typeStyles.ui,"}]},"HeadingStack":{"filePath":"src/app/components/heading-stack.tsx","description":"HeadingStack — enforced vertical rhythm for heading + subheading pairs. Automatically handles gap and secondary color, preventing manual stacking. - Heading level: 'heading1' | 'heading2' | 'heading3' - Gap: px4 (tight) | px8 (default) - Subheading color: always var(--semantic-color-content-secondary) GUARDRAIL: Never manually stack headings using Stack. Always use HeadingStack. Usage: <HeadingStack level=\\"heading1\\" heading=\\"Main Title\\" subheading=\\"Subtitle text\\" /> <HeadingStack level=\\"heading2\\" heading=\\"Section\\" subheading=\\"Description\\" gap=\\"px4\\" />","category":"Typography","hidden":false,"props":[{"name":"as","type":"ElementType","default":"div","required":false,"description":"Override the root semantic wrapper while preserving the governed layout styles."},{"name":"gap","type":"'px4' | 'px8'","default":"px8","required":false,"description":"Gap between heading and subheading: px4 (tight) | px8 (default)."},{"name":"heading","type":"string","required":true,"description":"The heading content (string)."},{"name":"headingAs","type":"'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'","required":false,"description":"Override the heading tag without altering the applied typography style."},{"name":"level","type":"'heading1' | 'heading2' | 'heading3'","required":true,"description":"Semantic heading level: heading1 | heading2 | heading3."},{"name":"subheading","type":"string","required":true,"description":"The supporting copy rendered beneath the heading."},{"name":"subheadingAs","type":"'p' | 'div' | 'span'","default":"p","required":false,"description":"Override the supporting-copy tag."}],"observedTokens":[{"raw":"hds.space","sourceLine":97,"sourceSnippet":"gap: hds.space[gap],"}]},"Icon":{"filePath":"src/app/components/icon.tsx","description":"Icon — semantic icon wrapper for Lucide icons.","category":"Display","hidden":false,"props":[{"name":"aria-hidden","type":"boolean | \\"true\\" | \\"false\\"","default":"true","required":false,"description":"\`aria-hidden\` defaults to true because HDS icons are decorative by default."},{"name":"className","type":"string","required":false,"description":"Optional class hook for layout or utility styling (rotation, transition, etc.)."},{"name":"color","type":"string","default":"currentColor","required":false,"description":"CSS color value or token, such as \`var(--semantic-color-content-secondary)\`."},{"name":"icon","type":"LucideIcon","required":true,"description":"Lucide icon component to render."},{"name":"size","type":"IconSize","default":"small","required":false,"description":"Size token from \`hds.iconSize\`."},{"name":"style","type":"CSSProperties","required":false,"description":"Optional inline styles for rare rotation, transition, or layout tweaks."},{"name":"weight","type":"\\"fill\\" | \\"bold\\" | \\"thin\\" | \\"light\\" | \\"regular\\" | \\"duotone\\"","required":false,"description":"Stroke weight shim for backward compatibility with former Phosphor weight prop. Maps to Lucide's \`strokeWidth\` (thin=1, light=1.5, regular=2, bold=2.5)."}],"observedTokens":[{"raw":"hds.iconSize","sourceLine":11,"sourceSnippet":"export type IconSize = keyof typeof hds.iconSize | number | string;"}]},"IconButton":{"filePath":"src/app/components/icon-button.tsx","description":"IconButton ” icon-only action trigger built on the shared Button primitive.","category":"Actions","hidden":false,"props":[{"name":"aria-label","type":"string","required":false,"description":"Accessible label fallback for backward compatibility."},{"name":"asChild","type":"boolean","required":false,"description":"Render the button chrome onto a single child element for link semantics."},{"name":"disabled","type":"boolean","required":false,"description":"Disable interaction. Mirrors the native HTML attribute."},{"name":"icon","type":"LucideIcon","required":true,"description":"Lucide icon rendered inside the button."},{"name":"iconColor","type":"string","required":false,"description":"Override the inner icon color."},{"name":"iconLeft","type":"ReactNode","required":false,"description":"Leading icon rendered before the label."},{"name":"iconRight","type":"ReactNode","required":false,"description":"Trailing icon rendered after the label."},{"name":"iconSize","type":"IconSize","required":false,"description":"Override the inner icon size; defaults to the matching button ramp size."},{"name":"label","type":"string","required":false,"description":"Accessible label for the icon button."},{"name":"loading","type":"boolean","required":false,"description":"Show a busy indicator and disable interaction."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":"Size token for the button itself."},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"info\\" | \\"neutral\\"","required":false,"description":""},{"name":"variant","type":"\\"primary\\" | \\"secondary\\" | \\"tertiary\\"","required":false,"description":""}],"observedTokens":[]},"InlineCode":{"filePath":"src/app/components/inline-code.tsx","description":"InlineCode — inline code chip for token paths, file paths, and code-adjacent prose.","category":"Display","hidden":false,"props":[{"name":"compact","type":"boolean","default":"false","required":false,"description":"Compact mode is tuned for dense body copy and table prose."},{"name":"copyable","type":"boolean","default":"false","required":false,"description":"Show a copy-to-clipboard button. children must be a string when true."},{"name":"style","type":"CSSProperties","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":37,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.borderRadius[0]","tokenPath":"primitive.radius.0","sourceLine":41,"sourceSnippet":"borderRadius: hds.borderRadius[0],"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":42,"sourceSnippet":"paddingTop: compact ? hds.semantic.space.subgrid.hairline : hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":42,"sourceSnippet":"paddingTop: compact ? hds.semantic.space.subgrid.hairline : hds.semantic.space.subgrid.gap,"}]},"InlineLink":{"filePath":"src/app/components/inline-link.tsx","description":"InlineLink ” inline navigation and external-link primitive for body copy.","category":"Navigation","hidden":false,"props":[{"name":"children","type":"ReactNode","required":true,"description":"Inline label or content to render inside the link."},{"name":"externalIcon","type":"boolean","default":"true","required":false,"description":"Append the external-link icon for non-internal URLs."},{"name":"href","type":"string","required":true,"description":"Destination route or URL."}],"observedTokens":[{"raw":"hds.semantic.space.subgrid.xs","tokenPath":"semantic.space.subgrid.xs","sourceLine":59,"sourceSnippet":"marginLeft: hds.semantic.space.subgrid.xs,"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":60,"sourceSnippet":"marginBottom: hds.semantic.space.subgrid.hairline,"}]},"NavGroup":{"filePath":"src/app/components/nav-group.tsx","description":"NavGroup - labeled navigation group for stacks of nav items.","category":"Navigation","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":""},{"name":"collapsible","type":"boolean","default":"false","required":false,"description":""},{"name":"contentStyle","type":"CSSProperties","required":false,"description":""},{"name":"getExact","type":"(item: NavItem) => boolean","required":false,"description":""},{"name":"items","type":"NavItem[]","required":false,"description":""},{"name":"label","type":"string","required":false,"description":""},{"name":"level","type":"NavLevel","default":"section","required":false,"description":""},{"name":"onNavigate","type":"() => void","required":false,"description":""},{"name":"style","type":"CSSProperties","required":false,"description":""},{"name":"variant","type":"\\"side\\" | \\"toc\\"","default":"side","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":73,"sourceSnippet":"...(variant === 'side' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":73,"sourceSnippet":"...(variant === 'side' ? hds.typeStyles.ui : hds.typeStyles.caption),"},{"raw":"hds.semantic.space.sidebar.sectionGap","tokenPath":"semantic.space.sidebar.sectionGap","sourceLine":79,"sourceSnippet":"variant === 'toc' ? hds.semantic.space.sidebar.sectionGap : getNavLevelLeadingPadding(level),"},{"raw":"hds.semantic.space.sidebar.gap","tokenPath":"semantic.space.sidebar.gap","sourceLine":81,"sourceSnippet":"variant === 'toc' ? hds.semantic.space.sidebar.gap : 'var(--component-nav-paddingX)',"}]},"NavItem":{"filePath":"src/app/components/nav-item.tsx","description":"NavItem - navigation row primitive for sidebars, table of contents, and list navigation.","category":"Navigation","hidden":false,"props":[{"name":"active","type":"boolean","default":"false","required":false,"description":"Marks the item as the current route."},{"name":"disabled","type":"boolean","default":"false","required":false,"description":"Disables interaction and muted the nav row."},{"name":"label","type":"string","required":true,"description":"Text label displayed inside the navigation row."},{"name":"level","type":"NavLevel","default":"root","required":false,"description":"Visual hierarchy level for the navigation row."},{"name":"onNavigate","type":"(event: MouseEvent<HTMLAnchorElement, MouseEvent>) => void","required":false,"description":"Navigation callback fired before the browser follows the link."},{"name":"variant","type":"'side' | 'toc'","default":"side","required":false,"description":"Visual layout variant for side nav or table of contents usage."}],"observedTokens":[{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":84,"sourceSnippet":"typeStyle: hds.typeStyles.ui,"},{"raw":"hds.semantic.space.sidebar.railPadding","tokenPath":"semantic.space.sidebar.railPadding","sourceLine":85,"sourceSnippet":"leadingPaddingX: hds.semantic.space.sidebar.railPadding,"},{"raw":"hds.semantic.space.sidebar.sectionGap","tokenPath":"semantic.space.sidebar.sectionGap","sourceLine":92,"sourceSnippet":"leadingPaddingX: hds.semantic.space.sidebar.sectionGap,"},{"raw":"hds.semantic.space.sidebar.gap","tokenPath":"semantic.space.sidebar.gap","sourceLine":93,"sourceSnippet":"trailingPaddingX: hds.semantic.space.sidebar.gap,"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":188,"sourceSnippet":"outline: showFocus ? \`\${hds.borderWidth.sm} solid var(--semantic-color-border-accent)\` : 'none',"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":192,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, color \${hds.motion.productive.duration}s ease\`,"}]},"Page":{"filePath":"src/app/components/page.tsx","description":"Page — standard page shell. Wraps page content in Container (width constraint) and applies the canonical vertical padding so content breathes against the viewport edges on scroll. Use as the outermost element of any new page so vertical rhythm is consistent across the system without per-page reinvention. Footer: every page mounted under HDSLayout (the standard route shell) gets a shared footer rendered after this component's content, with bottom space below the footer owned by the layout shell. Page intentionally does not render its own footer — the shell is the single source of truth. Use Container directly only for full-bleed surfaces (sketches, hero sections, embedded canvases) where the page owns its own vertical padding. Usage: <Page> <Stack direction=\\"column\\" gap=\\"spacious\\">...</Stack> </Page> <Page maxWidth=\\"content\\" paddingY=\\"compact\\"> <article>...</article> </Page>","category":"Layout","hidden":false,"props":[{"name":"className","type":"string","required":false,"description":""},{"name":"maxWidth","type":"'content' | 'max'","default":"max","required":false,"description":"Max width: 'content' (760px for prose) | 'max' (1200px). Defaults to 'max'."},{"name":"paddingY","type":"'default' | 'compact' | 'none'","default":"default","required":false,"description":"Vertical padding token: 'default' (48/64) | 'compact' (24/32) | 'none'. Defaults to 'default'."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch for narrow page-specific adjustments."}],"observedTokens":[{"raw":"hds.space.px48","tokenPath":"primitive.space.px48","sourceLine":37,"sourceSnippet":"default: { top: hds.space.px48, bottom: hds.space.px64 },"},{"raw":"hds.space.px64","tokenPath":"primitive.space.px64","sourceLine":37,"sourceSnippet":"default: { top: hds.space.px48, bottom: hds.space.px64 },"},{"raw":"hds.space.px24","tokenPath":"primitive.space.px24","sourceLine":38,"sourceSnippet":"compact: { top: hds.space.px24, bottom: hds.space.px32 },"},{"raw":"hds.space.px32","tokenPath":"primitive.space.px32","sourceLine":38,"sourceSnippet":"compact: { top: hds.space.px24, bottom: hds.space.px32 },"}]},"Pagination":{"filePath":"src/app/components/pagination.tsx","description":"Paged navigation with first/last anchors, sibling pages, and ellipses.","category":"Navigation","hidden":false,"props":[{"name":"count","type":"number","required":true,"description":"Total number of pages."},{"name":"label","type":"string","default":"Pagination","required":false,"description":"Accessible label for the nav landmark."},{"name":"onPageChange","type":"(page: number) => void","required":true,"description":"Fired with the next page when a control is activated."},{"name":"page","type":"number","required":true,"description":"Current page (1-based)."},{"name":"siblingCount","type":"number","default":"1","required":false,"description":"Pages shown either side of the current page before truncating."}],"observedTokens":[]},"Progress":{"filePath":"src/app/components/progress.tsx","description":"Linear progress. Determinate when \`value\` is a number, else indeterminate.","category":"Feedback","hidden":false,"props":[{"name":"label","type":"string","default":"Progress","required":false,"description":"Accessible label for the progress bar."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":""},{"name":"value","type":"number","default":"null","required":false,"description":"Completion 0–100. Omit (or pass null) for an indeterminate bar that animates until the work completes."}],"observedTokens":[]},"SegmentedControl":{"filePath":"src/app/components/segmented-control.tsx","description":"SegmentedControl \\" segmented selection input for compact mutually-exclusive choices.","category":"Inputs","hidden":false,"props":[{"name":"aria-label","type":"string","required":false,"description":"Accessible label when no visible label should be rendered."},{"name":"fullWidth","type":"boolean","default":"false","required":false,"description":"Whether the control should stretch to the width of its container."},{"name":"label","type":"string","required":false,"description":"Accessible label for the control."},{"name":"onChange","type":"(value: string) => void","required":true,"description":"Called when the user selects a different option."},{"name":"options","type":"HdsSegmentedOption[]","required":true,"description":"Option set rendered inside the segmented rail."},{"name":"railPadding","type":"Padding<string | number>","required":false,"description":"Padding inside the rail container."},{"name":"segmentPaddingX","type":"PaddingLeft<string | number>","required":false,"description":"Horizontal padding inside each segment."},{"name":"size","type":"\\"sm\\" | \\"md\\"","default":"md","required":false,"description":"Size on the sm/md ramp shared with Button/Input."},{"name":"value","type":"string","required":true,"description":"Currently selected value."},{"name":"variant","type":"\\"primary\\" | \\"secondary\\"","default":"primary","required":false,"description":"Visual treatment for the rail and active segment."}],"observedTokens":[{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":17,"sourceSnippet":"gap: hds.semantic.space.component.gap,"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":26,"sourceSnippet":"border: \`\${hds.borderWidth.default} solid var(--semantic-color-border-default)\`,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":31,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.semantic.space.layout.gap","tokenPath":"semantic.space.layout.gap","sourceLine":94,"sourceSnippet":"(isCompact ? hds.semantic.space.component.gap : hds.semantic.space.layout.gap);"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":108,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":175,"sourceSnippet":"duration: hds.motion.productive.duration,"},{"raw":"hds.motion.productive.easing","sourceLine":176,"sourceSnippet":"ease: hds.motion.productive.easing,"},{"raw":"hds.zIndex.base","sourceLine":183,"sourceSnippet":"zIndex: active ? 1 : hds.zIndex.base,"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":191,"sourceSnippet":"gap: hds.semantic.space.subgrid.hairline,"},{"raw":"hds.size[32]","tokenPath":"primitive.size.32","sourceLine":192,"sourceSnippet":"minHeight: isCompact ? hds.size[32] : hds.size[48],"},{"raw":"hds.size[48]","tokenPath":"primitive.size.48","sourceLine":192,"sourceSnippet":"minHeight: isCompact ? hds.size[32] : hds.size[48],"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":200,"sourceSnippet":"borderRadius: hds.borderRadius.action,"},{"raw":"hds.borderWidth.sm","tokenPath":"primitive.borderWidth.sm","sourceLine":216,"sourceSnippet":"? \`\${hds.borderWidth.sm} solid \${isSecondary ? 'var(--semantic-color-border-default)' : 'var(--semantic-color-border-accent)'}\`"},{"raw":"hds.zIndex.focus","sourceLine":265,"sourceSnippet":"zIndex: hds.zIndex.focus,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":277,"sourceSnippet":"...hds.typeStyles.caption,"}]},"Skeleton":{"filePath":"src/app/components/skeleton.tsx","description":"Decorative loading placeholder. Marked aria-hidden — announce the loading state on the surrounding region (e.g. aria-busy) rather than per skeleton.","category":"Feedback","hidden":false,"props":[{"name":"height","type":"string | number","required":false,"description":"Explicit height (number → px, or any CSS length). For \`text\`, defaults to 1em."},{"name":"variant","type":"\\"text\\" | \\"rectangular\\" | \\"circular\\"","default":"rectangular","required":false,"description":""},{"name":"width","type":"string | number","required":false,"description":"Explicit width (number → px, or any CSS length)."}],"observedTokens":[]},"Sketch":{"filePath":"src/app/components/sketch.tsx","description":"Sketch — shared shell for generative canvases and WebGL sketches.","category":"Layout","hidden":false,"props":[{"name":"controls","type":"ReactNode","required":false,"description":""},{"name":"title","type":"string","required":true,"description":""}],"observedTokens":[{"raw":"hds.semantic.space.component.padding","tokenPath":"semantic.space.component.padding","sourceLine":21,"sourceSnippet":"padding: hds.semantic.space.component.padding,"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":22,"sourceSnippet":"borderBottom: \`\${hds.borderWidth.default} solid var(--semantic-color-border-default)\`,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":27,"sourceSnippet":"...hds.typeStyles.ui,"}]},"SpecimenBlock":{"filePath":"src/app/components/specimen-block.tsx","description":"SpecimenBlock — shared component-doc specimen block with preview, variant deck, and optional matrix.","category":"Utilities","hidden":false,"props":[{"name":"componentName","type":"string","required":true,"description":""},{"name":"demo","type":"ReactNode","required":false,"description":""},{"name":"filePath","type":"string","required":false,"description":""},{"name":"hideHero","type":"boolean","default":"false","required":false,"description":""},{"name":"hideHeroLabel","type":"boolean","default":"false","required":false,"description":""},{"name":"hideVariantDeck","type":"boolean","default":"false","required":false,"description":""},{"name":"matrix","type":"ReactNode","required":false,"description":""}],"observedTokens":[{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":50,"sourceSnippet":"<div style={{ marginTop: hideHero ? 0 : \`calc(\${hds.semantic.space.component.gap} * 2)\` }}>"}]},"Spinner":{"filePath":"src/app/components/spinner.tsx","description":"Indeterminate spinner. Inherits the surrounding text color via currentColor.","category":"Feedback","hidden":false,"props":[{"name":"label","type":"string","default":"Loading","required":false,"description":"Accessible label announced to assistive tech. Defaults to \\"Loading\\"."},{"name":"size","type":"\\"sm\\" | \\"md\\" | \\"lg\\"","required":false,"description":""}],"observedTokens":[]},"Stack":{"filePath":"src/app/components/stack.tsx","description":"Stack — one-dimensional layout primitive.","category":"Layout","hidden":false,"props":[{"name":"align","type":"'start' | 'center' | 'end' | 'stretch'","required":false,"description":"Cross-axis alignment: start | center | end | stretch."},{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"div","required":false,"description":"Element rendered as the outer wrapper."},{"name":"children","type":"ReactNode","required":true,"description":"Stack content rendered inside the flex wrapper."},{"name":"className","type":"string","required":false,"description":"Escape hatch: only use when tokenized props cannot express the required wrapper class."},{"name":"direction","type":"\\"row\\" | \\"column\\"","default":"column","required":false,"description":"Flex direction for the stack."},{"name":"gap","type":"GapOption","default":"tight","required":false,"description":"Gap token: semantic (tight, normal, inset, spacious) or primitive (px4, px8, etc). Defaults to 'tight' (16px)."},{"name":"justify","type":"'start' | 'center' | 'end' | 'space-between'","required":false,"description":"Main-axis distribution: start | center | end | space-between."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch: only use for narrow layout adjustments that do not belong in the primitive API."},{"name":"wrap","type":"FlexWrap","required":false,"description":"Whether children may wrap."}],"observedTokens":[{"raw":"hds.space","sourceLine":16,"sourceSnippet":"type GapOption = SemanticGap | ComponentGap | SubgridGap | SectionGap | keyof typeof hds.space;"}]},"Stat":{"filePath":"src/app/components/stat.tsx","description":"Headline metric — large value, uppercase caption label, optional sub-line.","category":"Display","hidden":false,"props":[{"name":"label","type":"string","required":true,"description":""},{"name":"sub","type":"ReactNode","required":false,"description":""},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"default\\"","default":"default","required":false,"description":""},{"name":"value","type":"ReactNode","required":true,"description":""}],"observedTokens":[]},"StatusListItem":{"filePath":"src/app/components/status-list-item.tsx","description":"Status dot + title row with optional muted notes and trailing slot (e.g. badge).","category":"Display","hidden":false,"props":[{"name":"notes","type":"ReactNode[]","required":false,"description":""},{"name":"title","type":"ReactNode","required":true,"description":""},{"name":"tone","type":"\\"success\\" | \\"danger\\" | \\"warning\\" | \\"info\\" | \\"neutral\\"","default":"neutral","required":false,"description":""},{"name":"trailing","type":"ReactNode","required":false,"description":""}],"observedTokens":[]},"StatusTile":{"filePath":"src/app/components/status-tile.tsx","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.","category":"Display","hidden":false,"props":[{"name":"notes","type":"ReactNode[]","required":false,"description":""},{"name":"title","type":"ReactNode","required":true,"description":""},{"name":"tone","type":"'success' | 'warning' | 'danger' | 'info' | 'neutral'","default":"neutral","required":false,"description":"Tone metadata kept for downstream consumers (e.g., the trailing badge). The tile itself does not paint a tone-bearing rule."},{"name":"trailing","type":"ReactNode","required":false,"description":""}],"observedTokens":[]},"StepperField":{"filePath":"src/app/components/stepper-field.tsx","description":"StepperField ” numeric input with decrement/increment controls. Classification baseline: Material Design, Chakra UI, and Ant Design treat steppers as numeric input controls rather than page-specific controls. This lives in shared components so sketches and docs consume the same primitive.","category":"Inputs","hidden":false,"props":[{"name":"inputStep","type":"number","required":false,"description":""},{"name":"label","type":"string","required":true,"description":""},{"name":"max","type":"number","required":true,"description":""},{"name":"min","type":"number","required":true,"description":""},{"name":"onChange","type":"(value: number) => void","required":true,"description":""},{"name":"precision","type":"number","required":false,"description":""},{"name":"step","type":"number","required":true,"description":""},{"name":"value","type":"number","required":true,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":92,"sourceSnippet":"<label className=\\"text-secondary\\" style={{ ...hds.typeStyles.caption }}>"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":95,"sourceSnippet":"<div style={{ display: 'flex', alignItems: 'center', gap: hds.semantic.space.component.gap }}>"},{"raw":"hds.size[96]","tokenPath":"primitive.size.96","sourceLine":122,"sourceSnippet":"width: hds.size[96],"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":129,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, border-color \${hds.motion.productive.duration}s ease\`,"}]},"Surface":{"filePath":"src/app/components/surface.tsx","description":"Surface — governed inset surface primitive. Enforces the \\"Surface Inset\\" rule: backgrounds MUST have internal padding. - Default padding: px24 (cards) | px16 (items) - Default border: none (elevation model — use shadow for lift) - Fixed radius: var(--component-card-radius) - shadow prop: applies a two-layer elevation shadow for card lift Usage: <Surface>Card content</Surface> <Surface padding=\\"item\\">Compact item</Surface> <Surface shadow>Lifted card with elevation shadow.</Surface>","category":"Layout","hidden":false,"props":[{"name":"as","type":"ElementType<any, keyof IntrinsicElements>","default":"div","required":false,"description":"Element rendered as the outer wrapper. Defaults to 'div'."},{"name":"children","type":"ReactNode","required":false,"description":"Surface content."},{"name":"className","type":"string","required":false,"description":"Escape hatch: only use when tokenized props cannot express the required wrapper class."},{"name":"overflow","type":"Overflow","required":false,"description":"Override CSS overflow."},{"name":"padding","type":"PaddingOption","default":"component","required":false,"description":"Padding: 'component' (24px, default) | 'item' (16px) | primitive px values | 'none' (0px)."},{"name":"shadow","type":"boolean","default":"false","required":false,"description":"Apply the two-layer card elevation shadow for lift."},{"name":"style","type":"CSSProperties","required":false,"description":"Escape hatch: only use for narrow layout adjustments that do not belong in the primitive API."},{"name":"theme","type":"\\"light\\" | \\"dark\\"","required":false,"description":"Force a theme regardless of context: 'dark' | 'light'. Defaults to context value."}],"observedTokens":[]},"Table":{"filePath":"src/app/components/table.tsx","description":"Table - structured data table primitive for documentation and compact UI matrices.","category":"Display","hidden":false,"props":[{"name":"caption","type":"ReactNode","required":false,"description":""},{"name":"captionAction","type":"ReactNode","required":false,"description":"Optional action rendered to the right of the caption."},{"name":"columns","type":"TableColumn[]","required":true,"description":""},{"name":"density","type":"'compact' | 'comfortable'","default":"comfortable","required":false,"description":""},{"name":"description","type":"ReactNode","required":false,"description":""},{"name":"flush","type":"boolean","default":"false","required":false,"description":""},{"name":"minWidth","type":"string | number","required":false,"description":""},{"name":"rows","type":"TableRow[]","required":true,"description":""},{"name":"stickyHeader","type":"boolean","default":"false","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":19,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.component.padding","tokenPath":"semantic.space.component.padding","sourceLine":26,"sourceSnippet":"paddingRight: hds.semantic.space.component.padding,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":96,"sourceSnippet":"label: hds.typeStyles.ui,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":99,"sourceSnippet":"...hds.typeStyles.caption,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":117,"sourceSnippet":"paddingY: hds.semantic.space.component.gap,"},{"raw":"hds.size[40]","tokenPath":"primitive.size.40","sourceLine":118,"sourceSnippet":"minHeight: hds.size[40],"},{"raw":"hds.space.px12","tokenPath":"primitive.space.px12","sourceLine":123,"sourceSnippet":"paddingY: hds.space.px12,"},{"raw":"hds.size[48]","tokenPath":"primitive.size.48","sourceLine":124,"sourceSnippet":"minHeight: hds.size[48],"},{"raw":"hds.zIndex.overlay","sourceLine":219,"sourceSnippet":"style={makeHeaderCellStyle({ justifyContent: cellJustifyContent(column.align), textAlign: alignToTextAlign(column.align), paddingY: metrics.paddingY, minHeight: metrics.minHeight, stickyHeader: Boolean(stickyHeader), zIndex: hds.zIndex.overlay })}"},{"raw":"hds.borderWidth.default","tokenPath":"semantic.borderWidth.default","sourceLine":229,"sourceSnippet":"style={makeDataCellStyle({ justifyContent: cellJustifyContent(cell.align), minHeight: metrics.minHeight, paddingY: metrics.paddingY, borderBottom: rowIndex < rows.length - 1 ? \`\${hds.borderWidth.default} solid var(--semantic-color-border-subdued)\` : 'none', textAlign: alignToTextAlign(cell.align), slotStyle: SLOT_STYLES[cell.slot] })}"}]},"Tabs":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"TabsContent":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"TabsList":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"TabsTrigger":{"filePath":"src/app/components/tabs.tsx","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).","category":"Navigation","hidden":false,"props":[{"name":"asChild","type":"boolean","required":false,"description":""}],"observedTokens":[]},"Tag":{"filePath":"src/app/components/tag.tsx","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) are owned by .hds-tag-btn / .hds-tag-pill in theme.css so :hover transitions work — inline styles beat :hover selectors and would silently break the effect. Active state: brand fill via [data-active=\\"true\\"] in theme.css. Hover states: inactive → subtle tint + brand border; active → brand-hover fill.","category":"Inputs","hidden":false,"props":[{"name":"active","type":"boolean","default":"false","required":false,"description":"Whether the tag is active."},{"name":"aria-label","type":"string","required":false,"description":"Accessible label when the visible text is abbreviated."},{"name":"children","type":"ReactNode","required":true,"description":"Tag content displayed inside the pill."},{"name":"className","type":"string","required":false,"description":"Optional class hook for parent-level styling."},{"name":"onClick","type":"() => void","required":false,"description":"Click handler for toggling the tag."},{"name":"title","type":"string","required":false,"description":"Native tooltip for explicit file/path affordance."}],"observedTokens":[{"raw":"hds.size.interactive.min","tokenPath":"primitive.size.interactive.min","sourceLine":49,"sourceSnippet":"minWidth: hds.size.interactive.min,"},{"raw":"hds.motion.productive.duration","tokenPath":"primitive.duration.short","sourceLine":50,"sourceSnippet":"transition: \`background-color \${hds.motion.productive.duration}s ease, color \${hds.motion.productive.duration}s ease, transform \${hds.motion.productive.duration}s ease\`,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":54,"sourceSnippet":"...hds.typeStyles.ui,"},{"raw":"hds.borderRadius.action","tokenPath":"semantic.radius.action","sourceLine":67,"sourceSnippet":"borderRadius: hds.borderRadius.action,"}]},"Text":{"filePath":"src/app/components/text.tsx","description":"Text — polymorphic typography primitive spanning the full HDS type ramp.","category":"Typography","hidden":false,"props":[{"name":"as","type":"\\"symbol\\" | \\"object\\" | \\"title\\" | \\"slot\\" | \\"style\\" | \\"search\\" | \\"article\\" | \\"button\\" | \\"dialog\\" | \\"figure\\" | \\"form\\" | \\"img\\" | \\"link\\" | \\"main\\" | \\"menu\\" | \\"menuitem\\" | \\"option\\" | \\"switch\\" | ... 161 more ... | FunctionComponent<...>","default":"defaultTagMap[variant]","required":false,"description":""},{"name":"className","type":"string","required":false,"description":""},{"name":"style","type":"CSSProperties","required":false,"description":""},{"name":"variant","type":"TextVariant","required":true,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.display","tokenPath":"semantic.typography.display","sourceLine":38,"sourceSnippet":"display: hds.typeStyles.display,"},{"raw":"hds.typeStyles.heading1","tokenPath":"semantic.typography.h1","sourceLine":39,"sourceSnippet":"heading1: hds.typeStyles.heading1,"},{"raw":"hds.typeStyles.heading2","tokenPath":"semantic.typography.h2","sourceLine":40,"sourceSnippet":"heading2: hds.typeStyles.heading2,"},{"raw":"hds.typeStyles.heading3","tokenPath":"semantic.typography.h3","sourceLine":41,"sourceSnippet":"heading3: hds.typeStyles.heading3,"},{"raw":"hds.typeStyles.body","tokenPath":"semantic.typography.body","sourceLine":42,"sourceSnippet":"body: hds.typeStyles.body,"},{"raw":"hds.typeStyles.ui","tokenPath":"semantic.typography.small","sourceLine":43,"sourceSnippet":"ui: hds.typeStyles.ui,"},{"raw":"hds.typeStyles.eyebrow","sourceLine":44,"sourceSnippet":"eyebrow: hds.typeStyles.eyebrow,"},{"raw":"hds.typeStyles.caption","tokenPath":"semantic.typography.caption","sourceLine":45,"sourceSnippet":"caption: hds.typeStyles.caption,"},{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":46,"sourceSnippet":"technical: hds.typeStyles.technical,"},{"raw":"hds.typeStyles.badge","tokenPath":"semantic.typography.caption","sourceLine":47,"sourceSnippet":"badge: hds.typeStyles.badge,"},{"raw":"hds.typeStyles.small","tokenPath":"semantic.typography.small","sourceLine":51,"sourceSnippet":"docSmall: hds.typeStyles.small,"},{"raw":"hds.typeStyles.mono","tokenPath":"semantic.typography.mono","sourceLine":52,"sourceSnippet":"docCode: hds.typeStyles.mono,"}]},"TextLockup":{"filePath":"src/app/components/text-lockup.tsx","description":"TextLockup - governed title-and-description pairing primitive.","category":"Display","hidden":false,"props":[{"name":"align","type":"'left' | 'center'","default":"left","required":false,"description":"Horizontal alignment for the text pair."},{"name":"as","type":"ElementType","default":"div","required":false,"description":"Override the semantic wrapper while preserving the governed layout styles."},{"name":"description","type":"ReactNode","required":false,"description":"Supporting body copy paired with the title."},{"name":"descriptionAs","type":"'div' | 'p' | 'span'","default":"div","required":false,"description":"Override the description tag without altering the visual type ramp."},{"name":"eyebrow","type":"string","required":false,"description":"Optional overline or category cue displayed above the title."},{"name":"id","type":"string","required":false,"description":"When provided on the \`numbered\` size, renders a copy-anchor action next to the title on hover. Should match the section's DOM id."},{"name":"size","type":"'hero' | 'heroXl' | 'section' | 'metric' | 'detail' | 'numbered'","required":true,"description":"Preset controlling title and body type pairing."},{"name":"title","type":"string","required":true,"description":"Primary heading copy rendered by the lockup."},{"name":"titleAs","type":"'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span'","required":false,"description":"Override the title tag without altering the visual type ramp."}],"observedTokens":[{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":22,"sourceSnippet":"gap: hds.semantic.space.subgrid.gap,"},{"raw":"hds.typeStyles","sourceLine":62,"sourceSnippet":"// deliberate metric deviations) — the redundant \`...hds.typeStyles.*\` spreads"},{"raw":"hds.layout.proseMaxWidth","tokenPath":"semantic.layout.prose.maxWidth","sourceLine":74,"sourceSnippet":"maxWidth: hds.layout.proseMaxWidth,"},{"raw":"hds.semantic.space.component.gap","tokenPath":"semantic.space.component.gap","sourceLine":94,"sourceSnippet":"gap: hds.semantic.space.component.gap,"}]},"TileGrid":{"filePath":"src/app/components/tile-grid.tsx","description":"Auto-fill responsive grid for status/micro tiles. Wraps tile children in a one-line grid declaration so pages don't repeat the auto-fill minmax recipe.","category":"Layout","hidden":false,"props":[{"name":"gap","type":"\\"sm\\" | \\"md\\" | \\"xs\\"","default":"sm","required":false,"description":"Gap token between tiles. Defaults to 'sm' (12px)."},{"name":"minTileWidth","type":"string","default":"260px","required":false,"description":"Minimum tile width before the grid wraps. Defaults to 260px."}],"observedTokens":[]},"ToastProvider":{"filePath":"src/app/components/toast.tsx","description":"Provider + viewport for the toast system. Wrap the app root once.","category":"Feedback","hidden":false,"props":[{"name":"duration","type":"number","default":"5000","required":false,"description":"Default auto-dismiss in ms (Radix default is 5000)."},{"name":"swipeDirection","type":"SwipeDirection","default":"right","required":false,"description":"Swipe-to-dismiss direction."}],"observedTokens":[]},"Token":{"filePath":"src/app/components/token.tsx","description":"Token - reflective token specimen for unified node-based token views.","category":"Display","hidden":false,"props":[{"name":"accentColor","type":"string","required":true,"description":""},{"name":"aria-label","type":"string","required":false,"description":""},{"name":"className","type":"string","required":false,"description":""},{"name":"description","type":"ReactNode","required":false,"description":""},{"name":"fullWidth","type":"boolean","required":false,"description":""},{"name":"isSelected","type":"boolean","required":false,"description":""},{"name":"isSourceNode","type":"boolean","required":false,"description":""},{"name":"label","type":"string","required":true,"description":""},{"name":"leadingSlot","type":"ReactNode","required":false,"description":"Optional left-side slot for compact node content, e.g. curve previews."},{"name":"nodeRef","type":"(el: HTMLElement) => void","required":false,"description":""},{"name":"nowrap","type":"boolean","required":false,"description":""},{"name":"onClick","type":"(() => void) | (() => void)","required":false,"description":""},{"name":"pathDisplayDepth","type":"number","required":false,"description":""},{"name":"pathDisplayLeadingDot","type":"boolean","required":false,"description":""},{"name":"pathDisplayMode","type":"\\"full\\" | \\"compressed\\"","required":false,"description":""},{"name":"rawValue","type":"ReactNode","required":false,"description":""},{"name":"swatchVar","type":"string","required":false,"description":""},{"name":"tokenPath","type":"string","required":false,"description":"Optional explicit token path for deep-linking node instances. Falls back to children when omitted."},{"name":"truncateFromStart","type":"boolean","required":false,"description":"When true, overflow ellipsis appears at the start (left) instead of the end."},{"name":"value","type":"string","required":true,"description":""},{"name":"variant","type":"\\"node\\" | \\"diagram\\"","required":false,"description":""}],"observedTokens":[{"raw":"hds.typeStyles.technical","tokenPath":"semantic.typography.mono","sourceLine":71,"sourceSnippet":"...hds.typeStyles.technical,"},{"raw":"hds.semantic.space.subgrid.gap","tokenPath":"semantic.space.subgrid.gap","sourceLine":80,"sourceSnippet":"const tokenSwatchTextGap = hds.semantic.space.subgrid.gap;"},{"raw":"hds.borderRadius[2]","tokenPath":"primitive.radius.2","sourceLine":84,"sourceSnippet":"borderRadius: hds.borderRadius[2],"},{"raw":"hds.semantic.space.subgrid.hairline","tokenPath":"semantic.space.subgrid.hairline","sourceLine":87,"sourceSnippet":"marginLeft: \`calc(\${hds.semantic.space.subgrid.hairline} * -1)\`,"}]}}`), ji = {
|
|
1452
1471
|
components: Mi
|
|
1453
1472
|
}, Gi = ji, Vi = {
|
|
1454
1473
|
demoState: [
|
|
@@ -1820,7 +1839,7 @@ function kr({
|
|
|
1820
1839
|
}
|
|
1821
1840
|
S.start(D ? { y: -3 } : { y: 0 }, Y);
|
|
1822
1841
|
}, [l, S, D, z, c]);
|
|
1823
|
-
const
|
|
1842
|
+
const P = {
|
|
1824
1843
|
display: "flex",
|
|
1825
1844
|
flexDirection: u ? "row-reverse" : "row",
|
|
1826
1845
|
justifyContent: "space-between",
|
|
@@ -1899,7 +1918,7 @@ function kr({
|
|
|
1899
1918
|
}
|
|
1900
1919
|
) })
|
|
1901
1920
|
] }) : /* @__PURE__ */ h("div", { style: q, children: [
|
|
1902
|
-
/* @__PURE__ */ h("div", { style:
|
|
1921
|
+
/* @__PURE__ */ h("div", { style: P, children: [
|
|
1903
1922
|
o ? /* @__PURE__ */ a(
|
|
1904
1923
|
"p",
|
|
1905
1924
|
{
|
|
@@ -2118,7 +2137,7 @@ const La = {
|
|
|
2118
2137
|
}
|
|
2119
2138
|
);
|
|
2120
2139
|
});
|
|
2121
|
-
function
|
|
2140
|
+
function Pr({ children: t, style: e, compact: r = !1, copyable: n = !1 }) {
|
|
2122
2141
|
const [o, s] = W(!1);
|
|
2123
2142
|
function d() {
|
|
2124
2143
|
typeof t == "string" && navigator.clipboard.writeText(t).then(() => {
|
|
@@ -2174,7 +2193,7 @@ function Tr({ children: t, style: e, compact: r = !1, copyable: n = !1 }) {
|
|
|
2174
2193
|
}
|
|
2175
2194
|
) : c;
|
|
2176
2195
|
}
|
|
2177
|
-
function
|
|
2196
|
+
function Pa({ href: t, children: e, externalIcon: r = !0 }) {
|
|
2178
2197
|
const { LinkComponent: n } = fe();
|
|
2179
2198
|
return t.startsWith("/") ? /* @__PURE__ */ a(n, { to: t, className: "hds-link", children: e }) : /* @__PURE__ */ h("a", { href: t, target: "_blank", rel: "noopener noreferrer", className: "hds-focus hds-link", children: [
|
|
2180
2199
|
e,
|
|
@@ -2195,7 +2214,7 @@ function Ta({ href: t, children: e, externalIcon: r = !0 }) {
|
|
|
2195
2214
|
)
|
|
2196
2215
|
] });
|
|
2197
2216
|
}
|
|
2198
|
-
const
|
|
2217
|
+
const Ta = K(
|
|
2199
2218
|
"flex w-full rounded-md border bg-background text-foreground ring-offset-background transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:bg-muted disabled:text-muted-foreground disabled:opacity-70",
|
|
2200
2219
|
{
|
|
2201
2220
|
variants: {
|
|
@@ -2262,8 +2281,8 @@ const Pa = K(
|
|
|
2262
2281
|
onChange: b,
|
|
2263
2282
|
...v
|
|
2264
2283
|
}, k) {
|
|
2265
|
-
const D = $.useId(), C = o ?? D, S = $.useRef(null), L = ye(),
|
|
2266
|
-
function
|
|
2284
|
+
const D = $.useId(), C = o ?? D, S = $.useRef(null), L = ye(), P = !!l || L === "error", x = f || L === "loading", q = !!u || x || L === "disabled", H = d ? `${C}-hint` : void 0, E = P && (m || L === "error") ? `${C}-error` : void 0, N = [H, E].filter(Boolean).join(" ") || void 0, [_, A] = $.useState(() => typeof v.defaultValue == "string" ? v.defaultValue : typeof v.defaultValue == "number" ? String(v.defaultValue) : ""), Y = typeof v.value == "string" ? v.value : typeof v.value == "number" ? String(v.value) : void 0, Z = Y ?? _, T = za[r], j = !!c, U = !!p, Le = e !== "number" && Z.length > 0 && !q && !x, Re = x || U || Le;
|
|
2285
|
+
function Pe(G) {
|
|
2267
2286
|
if (S.current = G, typeof k == "function") {
|
|
2268
2287
|
k(G);
|
|
2269
2288
|
return;
|
|
@@ -2280,7 +2299,7 @@ const Pa = K(
|
|
|
2280
2299
|
)) == null ? void 0 : R.set;
|
|
2281
2300
|
de == null || de.call(G, ""), G.dispatchEvent(new Event("input", { bubbles: !0 })), G.focus();
|
|
2282
2301
|
}
|
|
2283
|
-
const Ie = L || (x ? "loading" : q ? "disabled" :
|
|
2302
|
+
const Ie = L || (x ? "loading" : q ? "disabled" : P ? "error" : Z.length > 0 ? "filled" : "default"), Te = j ? T.leadPad : T.restPad, Ne = Re ? T.trailPad : T.restPad;
|
|
2284
2303
|
return /* @__PURE__ */ h("div", { className: w("flex flex-col gap-1.5", g), children: [
|
|
2285
2304
|
s && /* @__PURE__ */ a("label", { htmlFor: C, className: "text-xs font-medium text-muted-foreground", children: s }),
|
|
2286
2305
|
/* @__PURE__ */ h("div", { className: "relative w-full", children: [
|
|
@@ -2290,8 +2309,8 @@ const Pa = K(
|
|
|
2290
2309
|
"aria-hidden": "true",
|
|
2291
2310
|
className: w(
|
|
2292
2311
|
"pointer-events-none absolute left-0 flex items-center text-muted-foreground",
|
|
2293
|
-
|
|
2294
|
-
|
|
2312
|
+
T.inset,
|
|
2313
|
+
T.iconWrap
|
|
2295
2314
|
),
|
|
2296
2315
|
children: c
|
|
2297
2316
|
}
|
|
@@ -2299,7 +2318,7 @@ const Pa = K(
|
|
|
2299
2318
|
/* @__PURE__ */ a(
|
|
2300
2319
|
"input",
|
|
2301
2320
|
{
|
|
2302
|
-
ref:
|
|
2321
|
+
ref: Pe,
|
|
2303
2322
|
id: C,
|
|
2304
2323
|
type: e,
|
|
2305
2324
|
disabled: q,
|
|
@@ -2307,13 +2326,13 @@ const Pa = K(
|
|
|
2307
2326
|
"aria-busy": x || void 0,
|
|
2308
2327
|
"aria-describedby": N,
|
|
2309
2328
|
"aria-errormessage": E,
|
|
2310
|
-
"aria-invalid":
|
|
2329
|
+
"aria-invalid": P || void 0,
|
|
2311
2330
|
"data-state": Ie,
|
|
2312
2331
|
"data-size": r,
|
|
2313
2332
|
"data-search-input": e === "search" ? "true" : void 0,
|
|
2314
2333
|
className: w(
|
|
2315
|
-
|
|
2316
|
-
|
|
2334
|
+
Ta({ size: r, textStyle: n, invalid: P }),
|
|
2335
|
+
Te,
|
|
2317
2336
|
Ne,
|
|
2318
2337
|
y
|
|
2319
2338
|
),
|
|
@@ -2329,9 +2348,9 @@ const Pa = K(
|
|
|
2329
2348
|
"aria-hidden": "true",
|
|
2330
2349
|
className: w(
|
|
2331
2350
|
"pointer-events-none absolute right-0 flex items-center text-muted-foreground",
|
|
2332
|
-
|
|
2351
|
+
T.inset
|
|
2333
2352
|
),
|
|
2334
|
-
children: /* @__PURE__ */ a(pt, { className: w("animate-spin",
|
|
2353
|
+
children: /* @__PURE__ */ a(pt, { className: w("animate-spin", T.iconClass) })
|
|
2335
2354
|
}
|
|
2336
2355
|
),
|
|
2337
2356
|
!x && U && /* @__PURE__ */ a(
|
|
@@ -2340,8 +2359,8 @@ const Pa = K(
|
|
|
2340
2359
|
"aria-hidden": "true",
|
|
2341
2360
|
className: w(
|
|
2342
2361
|
"pointer-events-none absolute right-0 flex items-center text-muted-foreground",
|
|
2343
|
-
|
|
2344
|
-
|
|
2362
|
+
T.inset,
|
|
2363
|
+
T.iconWrap
|
|
2345
2364
|
),
|
|
2346
2365
|
children: p
|
|
2347
2366
|
}
|
|
@@ -2354,14 +2373,14 @@ const Pa = K(
|
|
|
2354
2373
|
"aria-label": e === "search" ? "Clear search" : "Clear input",
|
|
2355
2374
|
className: w(
|
|
2356
2375
|
"absolute right-0 flex items-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm",
|
|
2357
|
-
|
|
2376
|
+
T.inset
|
|
2358
2377
|
),
|
|
2359
|
-
children: /* @__PURE__ */ a(Me, { className:
|
|
2378
|
+
children: /* @__PURE__ */ a(Me, { className: T.iconClass, "aria-hidden": "true" })
|
|
2360
2379
|
}
|
|
2361
2380
|
)
|
|
2362
2381
|
] }),
|
|
2363
2382
|
d && !E && /* @__PURE__ */ a("span", { id: H, className: "text-xs text-muted-foreground", children: d }),
|
|
2364
|
-
|
|
2383
|
+
P && (m || L === "error") && /* @__PURE__ */ a("span", { id: E, role: "alert", className: "text-xs text-destructive", children: m || "Field error" })
|
|
2365
2384
|
] });
|
|
2366
2385
|
});
|
|
2367
2386
|
function Ge({
|
|
@@ -2393,7 +2412,7 @@ function Ge({
|
|
|
2393
2412
|
function qa(t, e) {
|
|
2394
2413
|
typeof t == "function" ? t(e) : t && (t.current = e);
|
|
2395
2414
|
}
|
|
2396
|
-
const
|
|
2415
|
+
const Tr = Q(function({ label: e, checked: r, onChange: n, indeterminate: o = !1, onFocus: s, onBlur: d, disabled: c, ...p }, l) {
|
|
2397
2416
|
const m = he(null), u = ye(), { isHover: f, isFocused: g, isPressed: y, isDisabled: b, handlers: v } = Ge({
|
|
2398
2417
|
disabled: c,
|
|
2399
2418
|
frozenState: u
|
|
@@ -2933,7 +2952,7 @@ function tt({
|
|
|
2933
2952
|
onBlur: b,
|
|
2934
2953
|
...v
|
|
2935
2954
|
}) {
|
|
2936
|
-
const { isRtl: k } = gt(), { navigate: D } = fe(), [C, S] = W(!1), [z, L] = W(!1), { isFocusVisible:
|
|
2955
|
+
const { isRtl: k } = gt(), { navigate: D } = fe(), [C, S] = W(!1), [z, L] = W(!1), { isFocusVisible: P, onFocus: x, clearFocusVisible: q } = Ra(), H = ye(), E = H, N = Aa[t], A = o ? "disabled" : n ? "active" : (E === "focused" ? "focus" : E) ?? (z ? "pressed" : P ? "focus" : C ? "hover" : "default"), Y = A === "hover", Z = A === "focus", T = A === "pressed", j = n || A === "active", U = A === "disabled" ? "transparent" : j || T ? X.indicator.active : Y ? X.indicator.hover : X.indicator.idle, Le = A === "disabled" ? X.background.disabled : j ? X.background.active : T ? X.background.pressed : Y ? X.background.hover : X.background.idle, Re = t === "side" ? "var(--semantic-color-content-secondary)" : X.text.idle, Pe = A === "disabled" ? X.text.disabled : j || T ? X.text.active : Y ? "var(--semantic-color-content-primary)" : Re, ve = t === "side" ? bt(s) : "0px", Ie = {
|
|
2937
2956
|
...N.typeStyle,
|
|
2938
2957
|
position: "relative",
|
|
2939
2958
|
display: "flex",
|
|
@@ -2950,7 +2969,7 @@ function tt({
|
|
|
2950
2969
|
paddingRight: k ? N.leadingPaddingX : N.trailingPaddingX,
|
|
2951
2970
|
textDecoration: "none",
|
|
2952
2971
|
textAlign: k ? "right" : "left",
|
|
2953
|
-
color:
|
|
2972
|
+
color: Pe,
|
|
2954
2973
|
backgroundColor: Le,
|
|
2955
2974
|
outline: Z ? `${i.borderWidth.sm} solid var(--semantic-color-border-accent)` : "none",
|
|
2956
2975
|
outlineOffset: Z ? "2px" : void 0,
|
|
@@ -2958,7 +2977,7 @@ function tt({
|
|
|
2958
2977
|
pointerEvents: H !== null ? "none" : void 0,
|
|
2959
2978
|
transition: `background-color ${i.motion.productive.duration}s ease, color ${i.motion.productive.duration}s ease`,
|
|
2960
2979
|
...p
|
|
2961
|
-
},
|
|
2980
|
+
}, Te = c ? `hds-focus ${c}` : "hds-focus", Ne = typeof r == "string" && r.startsWith("/"), G = {
|
|
2962
2981
|
style: Ie,
|
|
2963
2982
|
"data-disabled": o ? "true" : void 0,
|
|
2964
2983
|
"data-level": s,
|
|
@@ -3004,7 +3023,7 @@ function tt({
|
|
|
3004
3023
|
{
|
|
3005
3024
|
style: {
|
|
3006
3025
|
...N.typeStyle,
|
|
3007
|
-
color:
|
|
3026
|
+
color: Pe
|
|
3008
3027
|
},
|
|
3009
3028
|
children: e
|
|
3010
3029
|
}
|
|
@@ -3013,7 +3032,7 @@ function tt({
|
|
|
3013
3032
|
return r ? /* @__PURE__ */ a(
|
|
3014
3033
|
"a",
|
|
3015
3034
|
{
|
|
3016
|
-
className:
|
|
3035
|
+
className: Te,
|
|
3017
3036
|
href: o ? void 0 : r,
|
|
3018
3037
|
"aria-disabled": o || void 0,
|
|
3019
3038
|
"aria-current": j ? v["aria-current"] ?? (t === "toc" ? "location" : "page") : void 0,
|
|
@@ -3034,7 +3053,7 @@ function tt({
|
|
|
3034
3053
|
) : /* @__PURE__ */ a(
|
|
3035
3054
|
"button",
|
|
3036
3055
|
{
|
|
3037
|
-
className:
|
|
3056
|
+
className: Te,
|
|
3038
3057
|
type: "button",
|
|
3039
3058
|
disabled: o,
|
|
3040
3059
|
"aria-disabled": o || void 0,
|
|
@@ -3199,8 +3218,8 @@ const Rr = $.forwardRef(function({ className: e, size: r, value: n = null, label
|
|
|
3199
3218
|
role: "radiogroup",
|
|
3200
3219
|
"aria-label": z,
|
|
3201
3220
|
value: o,
|
|
3202
|
-
onValueChange: (
|
|
3203
|
-
|
|
3221
|
+
onValueChange: (P) => {
|
|
3222
|
+
P && !D && s(P);
|
|
3204
3223
|
},
|
|
3205
3224
|
disabled: D,
|
|
3206
3225
|
style: {
|
|
@@ -3209,21 +3228,21 @@ const Rr = $.forwardRef(function({ className: e, size: r, value: n = null, label
|
|
|
3209
3228
|
padding: l ?? "4px",
|
|
3210
3229
|
background: S ? "var(--semantic-color-surface-page)" : "var(--semantic-color-surface-raised)"
|
|
3211
3230
|
},
|
|
3212
|
-
children: n.map((
|
|
3213
|
-
const x =
|
|
3231
|
+
children: n.map((P) => {
|
|
3232
|
+
const x = P.value === o, q = k ? k === "hover" && x : f === P.value, H = k === "pressed" && x, E = k ? k === "focused" && x : y === P.value, N = D;
|
|
3214
3233
|
return /* @__PURE__ */ a(
|
|
3215
3234
|
_e.Item,
|
|
3216
3235
|
{
|
|
3217
3236
|
asChild: !0,
|
|
3218
|
-
value:
|
|
3237
|
+
value: P.value,
|
|
3219
3238
|
disabled: N,
|
|
3220
3239
|
children: /* @__PURE__ */ h(
|
|
3221
3240
|
B.button,
|
|
3222
3241
|
{
|
|
3223
3242
|
type: "button",
|
|
3224
|
-
onHoverStart: () => !k && g(
|
|
3243
|
+
onHoverStart: () => !k && g(P.value),
|
|
3225
3244
|
onHoverEnd: () => !k && g(null),
|
|
3226
|
-
onFocus: () => !k && b(
|
|
3245
|
+
onFocus: () => !k && b(P.value),
|
|
3227
3246
|
onBlur: () => !k && b(null),
|
|
3228
3247
|
className: "hds-focus",
|
|
3229
3248
|
animate: S ? {
|
|
@@ -3289,10 +3308,10 @@ const Rr = $.forwardRef(function({ className: e, size: r, value: n = null, label
|
|
|
3289
3308
|
...i.typeStyles.ui,
|
|
3290
3309
|
color: "currentColor"
|
|
3291
3310
|
},
|
|
3292
|
-
children:
|
|
3311
|
+
children: P.label
|
|
3293
3312
|
}
|
|
3294
3313
|
),
|
|
3295
|
-
|
|
3314
|
+
P.description && /* @__PURE__ */ a(
|
|
3296
3315
|
"span",
|
|
3297
3316
|
{
|
|
3298
3317
|
style: {
|
|
@@ -3301,14 +3320,14 @@ const Rr = $.forwardRef(function({ className: e, size: r, value: n = null, label
|
|
|
3301
3320
|
...i.typeStyles.caption,
|
|
3302
3321
|
color: N ? "var(--semantic-color-content-disabled)" : x && !(q || H) ? S ? "var(--semantic-color-content-secondary)" : "var(--semantic-color-content-onAccent)" : "var(--semantic-color-content-secondary)"
|
|
3303
3322
|
},
|
|
3304
|
-
children:
|
|
3323
|
+
children: P.description
|
|
3305
3324
|
}
|
|
3306
3325
|
)
|
|
3307
3326
|
]
|
|
3308
3327
|
}
|
|
3309
3328
|
)
|
|
3310
3329
|
},
|
|
3311
|
-
|
|
3330
|
+
P.value
|
|
3312
3331
|
);
|
|
3313
3332
|
})
|
|
3314
3333
|
}
|
|
@@ -3521,7 +3540,7 @@ const Va = {
|
|
|
3521
3540
|
children: /* @__PURE__ */ a("span", { className: "hds-tag-pill", style: _a, children: e })
|
|
3522
3541
|
}
|
|
3523
3542
|
);
|
|
3524
|
-
}), Ya = "https://www.designtokens.org/schemas/2025.10/format.json", Ua = "Adrian Milsap hirobius design tokens - W3C DTCG 2025.10 compliant, Figma SDS architecture", Xa = /* @__PURE__ */ JSON.parse('{"$description":"Base values used as inputs to derived token layers.","color":{"$type":"color","neutral":{"50":{"$value":"#fafafa","$description":"Specific value within the neutral range at a defined lightness step."},"100":{"$value":"#f5f5f5","$description":"Specific value within the neutral range at a defined lightness step."},"200":{"$value":"#e5e5e5","$description":"Specific value within the neutral range at a defined lightness step."},"300":{"$value":"#d4d4d4","$description":"Specific value within the neutral range at a defined lightness step."},"400":{"$value":"#a3a3a3","$description":"Specific value within the neutral range at a defined lightness step."},"500":{"$value":"#737373","$description":"Specific value within the neutral range at a defined lightness step."},"600":{"$value":"#525252","$description":"Specific value within the neutral range at a defined lightness step."},"700":{"$value":"#404040","$description":"Specific value within the neutral range at a defined lightness step."},"800":{"$value":"#262626","$description":"Specific value within the neutral range at a defined lightness step."},"850":{"$value":"#1a1a1a","$description":"Specific value within the neutral range at a defined lightness step."},"900":{"$value":"#111111","$description":"Specific value within the neutral range at a defined lightness step."},"950":{"$value":"#0a0a0a","$description":"Specific value within the neutral range at a defined lightness step."},"$description":"Discrete values within the neutral range at defined lightness steps.","white":{"$value":"#ffffff","$description":"Specific value within the neutral range at a defined lightness step."},"black":{"$value":"#000000","$description":"Specific value within the neutral range at a defined lightness step."}},"blue":{"50":{"$value":"oklch(0.96 0.03 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"100":{"$value":"oklch(0.92 0.04 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"200":{"$value":"oklch(0.88 0.07 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"300":{"$value":"oklch(0.70 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"400":{"$value":"oklch(0.65 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"450":{"$value":"oklch(0.56 0.29 266.60)","$description":"Specific value within the blue range at a defined lightness step."},"500":{"$value":"#1E2EFD","$description":"Specific value within the blue range at a defined lightness step."},"600":{"$value":"oklch(0.45 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"700":{"$value":"oklch(0.44 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"800":{"$value":"oklch(0.30 0.07 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"900":{"$value":"oklch(0.22 0.05 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"$description":"Discrete values within the blue range at defined lightness steps."},"red":{"50":{"$value":"#fef2f2","$description":"Specific value within the red range at a defined lightness step."},"400":{"$value":"#f87171","$description":"Specific value within the red range at a defined lightness step."},"700":{"$value":"#b91c1c","$description":"Specific value within the red range at a defined lightness step."},"950":{"$value":"#450a0a","$description":"Specific value within the red range at a defined lightness step."},"$description":"Discrete values within the red range at defined lightness steps."},"green":{"50":{"$value":"#ecfdf5","$description":"Specific value within the green range at a defined lightness step."},"400":{"$value":"#34d399","$description":"Specific value within the green range at a defined lightness step."},"700":{"$value":"#047857","$description":"Specific value within the green range at a defined lightness step."},"950":{"$value":"#022c22","$description":"Specific value within the green range at a defined lightness step."},"$description":"Discrete values within the green range at defined lightness steps."},"amber":{"50":{"$value":"#fffbeb","$description":"Specific value within the amber range at a defined lightness step."},"400":{"$value":"#fbbf24","$description":"Specific value within the amber range at a defined lightness step."},"800":{"$value":"#92400e","$description":"Specific value within the amber range at a defined lightness step."},"950":{"$value":"#451a03","$description":"Specific value within the amber range at a defined lightness step."},"$description":"Discrete values within the amber range at defined lightness steps."},"stone":{"100":{"$value":"#F5EFE7","$description":"Stone 100 — near-white warm tint; accent-subtle surface."},"400":{"$value":"#D0B492","$description":"Stone 400 — light warm tone; dark-mode pressed accent."},"450":{"$value":"#BC9D7E","$description":"Stone 450 — medium warm tone; dark-mode hover accent."},"500":{"$value":"#A8896A","$description":"Stone 500 — mid warm tone; dark-mode rest accent."},"600":{"$value":"#8B6F47","$description":"Stone 600 — primary warm stone; light-mode rest accent and CTA surface."},"700":{"$value":"#75593A","$description":"Stone 700 — darker warm stone; light-mode hover accent."},"800":{"$value":"#5C432A","$description":"Stone 800 — deep warm stone; light-mode pressed accent."},"950":{"$value":"#3A2E1F","$description":"Stone 950 — near-black warm tone; dark-mode subtle accent surface."},"$description":"Warm stone/brown palette for Concrete Creations brand accent ramp. PLACEHOLDER values pending final brand identity work."},"projectBrand":{"microsoftGameDev":{"100":{"$value":"#E5E5FC","$description":"Light support tone for the Microsoft Game Dev project brand."},"500":{"$value":"#6d31fb","$description":"Primary accent tone for the Microsoft Game Dev project brand."},"900":{"$value":"oklch(0.22 0.16 304)","$description":"Dark support tone for the Microsoft Game Dev project brand."},"$description":"Project-specific brand colors used in portfolio contexts."},"$description":"Project-specific brand color families reserved for portfolio surfaces."}},"space":{"0":{"$value":{"value":0,"unit":"px"}},"1":{"$value":{"value":4,"unit":"px"}},"2":{"$value":{"value":8,"unit":"px"}},"3":{"$value":{"value":12,"unit":"px"}},"4":{"$value":{"value":16,"unit":"px"}},"5":{"$value":{"value":20,"unit":"px"}},"6":{"$value":{"value":24,"unit":"px"}},"7":{"$value":{"value":28,"unit":"px"}},"8":{"$value":{"value":32,"unit":"px"}},"10":{"$value":{"value":40,"unit":"px"}},"12":{"$value":{"value":48,"unit":"px"}},"16":{"$value":{"value":64,"unit":"px"}},"20":{"$value":{"value":80,"unit":"px"}},"24":{"$value":{"value":96,"unit":"px"}},"32":{"$value":{"value":128,"unit":"px"}},"$type":"dimension","$description":"Dimensional increments within the 4px base-unit spatial system.","px1":{"$value":{"value":1,"unit":"px"}},"px2":{"$value":{"value":2,"unit":"px"}},"px6":{"$value":{"value":6,"unit":"px"}},"px10":{"$value":{"value":10,"unit":"px"}}},"blur":{"8":{"$value":{"value":8,"unit":"px"},"$description":"8px blur step."},"16":{"$value":{"value":16,"unit":"px"},"$description":"Fullscreen backdrop blur for portfolio lightbox overlays."},"$type":"dimension","$description":"Backdrop blur strengths for frosted overlays and fullscreen media treatments."},"radius":{"0":{"$value":{"value":0,"unit":"px"}},"2":{"$value":{"value":2,"unit":"px"}},"4":{"$value":{"value":4,"unit":"px"}},"8":{"$value":{"value":8,"unit":"px"}},"12":{"$value":{"value":12,"unit":"px"}},"$type":"dimension","full":{"$value":{"value":9999,"unit":"px"}}},"typography":{"family":{"$type":"fontFamily","primary":{"$value":["Satoshi","system-ui","-apple-system","BlinkMacSystemFont","Segoe UI","sans-serif"],"$description":"Self-hosted Satoshi (ITF) body typeface; falls back to system-ui sans-serif stack."},"display":{"$value":["Clash Display","system-ui","-apple-system","BlinkMacSystemFont","Segoe UI","sans-serif"],"$description":"Display face: Clash Display ITF, bound to display/h1/h2/h3 composites."},"mono":{"$value":["Geist Mono","Courier New","monospace"],"$description":"Monospace face: Geist Mono. Falls back to Courier New, monospace."}},"size":{"$type":"dimension","2xs":{"$value":{"value":10,"unit":"px"}},"xs":{"$value":{"value":13,"unit":"px"}},"sm":{"$value":{"value":15,"unit":"px"}},"base":{"$value":{"value":17,"unit":"px"}},"lg":{"$value":{"value":20,"unit":"px"}},"xl":{"$value":{"value":24,"unit":"px"}},"2xl":{"$value":{"value":30,"unit":"px"}},"3xl":{"$value":{"value":36,"unit":"px"}},"4xl":{"$value":{"value":48,"unit":"px"}},"5xl":{"$value":{"value":80,"unit":"px"}},"7xl":{"$value":{"value":72,"unit":"px"},"$description":"Swiss-canon display size. Static desktop value; fluid in theme.css."}},"weight":{"$type":"fontWeight","light":{"$value":300,"$description":"Swiss-canon heading weight. Display and h1/h2 composites only."},"regular":{"$value":400},"medium":{"$value":500},"semibold":{"$value":600},"bold":{"$value":700}},"lineHeight":{"$type":"number","compact":{"$value":0.95},"none":{"$value":1},"tight":{"$value":1.25},"snug":{"$value":1.375,"$description":"Swiss-canon snug rhythm (10t-5). Used by h2/h3 composites for tight-but-readable heading lines."},"normal":{"$value":1.5},"relaxed":{"$value":1.625,"$description":"Swiss-canon relaxed rhythm (10t-5). Used by body/small/mono composites for long-form prose comfort."}},"letterSpacing":{"$type":"dimension","tighter":{"$value":{"value":-0.02,"unit":"em"}},"tight":{"$value":{"value":-0.01,"unit":"em"}},"normal":{"$value":{"value":0,"unit":"em"}},"wide":{"$value":{"value":0.01,"unit":"em"}},"wider":{"$value":{"value":0.02,"unit":"em"}},"caps":{"$value":{"value":0.06,"unit":"em"},"$description":"All-caps tracking for eyebrow / kicker labels. Always pairs with text-transform: uppercase."}}},"duration":{"$type":"duration","instant":{"$value":{"value":100,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."},"short":{"$value":{"value":150,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."},"medium":{"$value":{"value":250,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."},"long":{"$value":{"value":400,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."}},"easing":{"$type":"cubicBezier","emphasized":{"$value":[0.4,0,0.2,1],"$description":"Cubic bezier with balanced input and output tangents."},"decelerate":{"$value":[0,0,0.2,1],"$description":"Cubic bezier with steep initial gain and constrained tail velocity."},"accelerate":{"$value":[0.4,0,1,1],"$description":"Cubic bezier with restrained initial gain and steep terminal velocity."},"elastic":{"$type":"spring","$value":{"type":"spring","stiffness":300,"damping":20,"mass":1},"$description":"Spring response defined by stiffness, damping, and mass parameters."}},"shadow":{"color":{"$type":"color","$value":"220 13% 18%","$description":"HSL channels for shadow-color alpha compositing. Light: cool neutral; dark: black.","$extensions":{"com.figma.variables":{"modes":{"Light":"220 13% 18%","Dark":"0 0% 0%"}}}}},"breakpoint":{"$description":"Discrete viewport thresholds expressed as dimensions.","xs":{"$type":"dimension","$value":{"value":375,"unit":"px"}},"sm":{"$type":"dimension","$value":{"value":640,"unit":"px"}},"md":{"$type":"dimension","$value":{"value":768,"unit":"px"}},"lg":{"$type":"dimension","$value":{"value":1024,"unit":"px"}},"xl":{"$type":"dimension","$value":{"value":1280,"unit":"px"}}},"size":{"8":{"$type":"dimension","$value":{"value":8,"unit":"px"},"$description":"8px size step."},"10":{"$type":"dimension","$value":{"value":10,"unit":"px"},"$description":"10px size step."},"12":{"$type":"dimension","$value":{"value":12,"unit":"px"},"$description":"12px size step."},"16":{"$type":"dimension","$value":{"value":16,"unit":"px"},"$description":"16px size step."},"20":{"$type":"dimension","$value":{"value":20,"unit":"px"},"$description":"20px size step."},"24":{"$type":"dimension","$value":{"value":24,"unit":"px"},"$description":"24px size step."},"32":{"$type":"dimension","$value":{"value":32,"unit":"px"},"$description":"32px size step."},"40":{"$type":"dimension","$value":{"value":40,"unit":"px"},"$description":"40px size step."},"48":{"$type":"dimension","$value":{"value":48,"unit":"px"},"$description":"48px size step."},"64":{"$type":"dimension","$value":{"value":64,"unit":"px"},"$description":"64px size step."},"80":{"$type":"dimension","$value":{"value":80,"unit":"px"},"$description":"80px size step."},"96":{"$type":"dimension","$value":{"value":96,"unit":"px"},"$description":"96px size step."},"$description":"Unaliased dimensional values.","interactive":{"$description":"Interactive control size minimums.","min":{"$type":"dimension","$value":{"value":44,"unit":"px"},"$description":"Minimum interactive hit target size."}},"width":{"96":{"$type":"dimension","$value":{"value":96,"unit":"px"},"$description":"96px width step."},"760":{"$type":"dimension","$value":{"value":760,"unit":"px"}},"1200":{"$type":"dimension","$value":{"value":1200,"unit":"px"}},"50ch":{"$type":"dimension","$value":{"value":50,"unit":"ch"}}}},"grid":{"columns":{"1":{"$type":"number","$value":1},"2":{"$type":"number","$value":2},"3":{"$type":"number","$value":3}}},"zIndex":{"0":{"$type":"number","$value":0},"10":{"$type":"number","$value":10},"100":{"$type":"number","$value":100},"1000":{"$type":"number","$value":1000},"$description":"Discrete stacking levels along the z axis."},"borderWidth":{"$type":"dimension","xs":{"$value":{"value":1,"unit":"px"}},"sm":{"$value":{"value":2,"unit":"px"}},"md":{"$value":{"value":4,"unit":"px"}}}}'), Ka = /* @__PURE__ */ JSON.parse('{"motion":{"$type":"motion","productive":{"$value":{"duration":"{primitive.duration.short}","easing":"{primitive.easing.decelerate}"},"$description":"For micro-interactions and status changes. No deformation."},"expressive":{"$value":{"duration":"{primitive.duration.medium}","easing":"{primitive.easing.elastic}"},"$description":"For teaching moments and significant UI entries. Includes physics-based squish."},"spatial":{"$value":{"duration":"{primitive.duration.long}","easing":"{primitive.easing.emphasized}"},"$description":"For elements traveling long distances across the viewport."},"exit":{"$value":{"duration":"{primitive.duration.instant}","easing":"{primitive.easing.accelerate}"},"$description":"For elements being removed from the DOM."}},"color":{"$type":"color","surface":{"page":{"$value":"{primitive.color.neutral.white}","$description":"Main page background","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.white}","Dark":"{primitive.color.neutral.black}"}}}},"raised":{"$value":"{primitive.color.neutral.50}","$description":"Subtle elevated surface (cards, sections)","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.50}","Dark":"{primitive.color.neutral.950}"}}}},"overlay":{"$value":"{primitive.color.neutral.100}","$description":"Deeper surface layer","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.100}","Dark":"{primitive.color.neutral.850}"}}}},"inverse":{"$value":"{primitive.color.neutral.black}","$description":"Inverted background for contrast sections","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.black}","Dark":"{primitive.color.neutral.white}"}}}},"accent":{"$value":"{primitive.color.blue.500}","$description":"Accent-colored background","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.500}"}}}},"accentSubtle":{"$value":"{primitive.color.blue.50}","$description":"Faint accent tint for hover states or highlights","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.50}","Dark":"{primitive.color.blue.900}"}}}}},"content":{"primary":{"$value":"{primitive.color.neutral.900}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.900}","Dark":"{primitive.color.neutral.100}"}}}},"secondary":{"$value":"{primitive.color.neutral.600}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.600}","Dark":"{primitive.color.neutral.400}"}}}},"disabled":{"$value":"{primitive.color.neutral.300}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.300}","Dark":"{primitive.color.neutral.600}"}}}},"inverse":{"$value":"{primitive.color.neutral.100}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.100}","Dark":"{primitive.color.neutral.900}"}}}},"accent":{"$value":"{primitive.color.blue.500}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.300}"}}}},"onAccent":{"$value":"{primitive.color.neutral.white}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.white}","Dark":"{primitive.color.neutral.white}"}}}}},"border":{"default":{"$value":"{primitive.color.neutral.200}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.200}","Dark":"{primitive.color.neutral.700}"}}}},"subdued":{"$value":"{primitive.color.neutral.200}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.200}","Dark":"{primitive.color.neutral.800}"}}}},"subtle":{"$value":"{primitive.color.neutral.100}","$description":"Lowest-contrast border for resting hairline edges on flat surfaces.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.100}","Dark":"{primitive.color.neutral.850}"}}}},"strong":{"$value":"{primitive.color.neutral.300}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.300}","Dark":"{primitive.color.neutral.600}"}}}},"accent":{"$value":"{primitive.color.blue.500}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.500}"}}}}},"feedback":{"error":{"$type":"color","$value":"{primitive.color.red.700}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.red.700}","Dark":"{primitive.color.red.400}"}}}},"success":{"$type":"color","$value":"{primitive.color.green.700}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.green.700}","Dark":"{primitive.color.green.400}"}}}},"warning":{"$type":"color","$value":"{primitive.color.amber.800}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.amber.800}","Dark":"{primitive.color.amber.400}"}}}},"info":{"$type":"color","$value":"{primitive.color.blue.500}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.300}"}}}},"bg":{"error":{"$type":"color","$value":"{primitive.color.red.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.red.50}","Dark":"{primitive.color.red.950}"}}}},"success":{"$type":"color","$value":"{primitive.color.green.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.green.50}","Dark":"{primitive.color.green.950}"}}}},"warning":{"$type":"color","$value":"{primitive.color.amber.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.amber.50}","Dark":"{primitive.color.amber.950}"}}}},"info":{"$type":"color","$value":"{primitive.color.blue.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.50}","Dark":"{primitive.color.blue.900}"}}}}}}},"space":{"$type":"dimension","$description":"Semantic spacing tiers: subgrid, component, layout, section.","subgrid":{"hairline":{"$value":"{primitive.space.px1}","$description":"1px border offset and hairline spacing."},"xs":{"$value":"{primitive.space.px2}","$description":"2px vertical rhythm nudge and baseline adjustment."},"gap":{"$value":"{primitive.space.1}","$description":"4px cap-height and inline cluster spacing."}},"component":{"gap":{"$value":"{primitive.space.2}","$description":"8px label↔input rhythm and closely coupled control spacing."},"medium":{"$value":"{primitive.space.3}","$description":"12px adjacent form fields and medium intra-component gaps."},"padding":{"$value":"{primitive.space.6}","$description":"24px default inset for cards, forms, panels, and grouped surfaces."}},"layout":{"tight":{"$value":"{primitive.space.4}","$description":"16px default HdsStack gap and inter-component spacing."},"normal":{"$value":"{primitive.space.6}","$description":"24px column gutters and sidebar gutter spacing."},"gutter":{"$value":"{primitive.space.6}","$description":"24px column and region gutters (alias for layout.normal)."},"inset":{"$value":"{primitive.space.8}","$description":"32px major block separation and inset inter-component gaps."},"spacious":{"$value":"{primitive.space.12}","$description":"48px section break and whitespace separator between major content blocks."}},"section":{"stack":{"$value":"{primitive.space.20}","$description":"80px vertical rhythm between page sections and major editorial blocks."},"inset":{"$value":"{primitive.space.24}","$description":"96px hero and landing-page inset padding."},"heroMax":{"$value":"{primitive.space.32}","$description":"128px maximum hero region padding for extra-large displays."}},"sidebar":{"indent":{"$value":"{primitive.space.3}","$description":"12px indent level for nested sidebar and TOC groups."},"gap":{"$value":"{primitive.space.4}","$description":"16px vertical spacing between items in sidebar and TOC stacks."},"sectionGap":{"$value":"{primitive.space.3}","$description":"12px spacing between sidebar sections and grouped rail blocks."},"railPadding":{"$value":"{primitive.space.5}","$description":"20px outer padding for sidebar and TOC rails."}}},"layout":{"width":{"content":{"$type":"dimension","$value":"{primitive.size.width.760}","$description":"Max width for prose/content (760px). Use with HdsContainer for centered text blocks."},"max":{"$type":"dimension","$value":"{primitive.size.width.1200}","$description":"Max width for full-layout containers (1200px). Use with HdsContainer for page layouts."}},"container":{"maxWidth":{"$type":"dimension","$value":"{primitive.size.width.1200}"}},"content":{"maxWidth":{"$type":"dimension","$value":"{primitive.size.width.760}"}},"prose":{"maxWidth":{"$type":"dimension","$value":"{primitive.size.width.50ch}"}},"section":{"paddingY":{"$type":"dimension","$value":"{primitive.space.20}"}},"grid":{"gap":{"$type":"dimension","$value":"{primitive.space.8}"},"columns":{"mobile":{"$type":"number","$value":"{primitive.grid.columns.1}"},"tablet":{"$type":"number","$value":"{primitive.grid.columns.2}"},"desktop":{"$type":"number","$value":"{primitive.grid.columns.3}"}}}},"typography":{"$type":"typography","$description":"8-style Swiss-canon type ramp: display, h1–h3, body, small, caption, mono.","display":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.7xl}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.tight}","lineHeight":"{primitive.typography.lineHeight.none}"},"$description":"Display headline. 72px / Clash Display 500 / leading-none.","$extensions":{"com.figma.variables":{"fontSize":"clamp(40px, 8vw, 72px)","note":"Figma stores the 72px desktop-max static value. Browser CSS overrides with fluid scaling (40px min → 72px max). See src/styles/theme.css."}}},"h1":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.4xl}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.tight}","lineHeight":"{primitive.typography.lineHeight.tight}"},"$description":"Primary section headings (h1). 48px / Clash Display medium 500 / leading-tight.","$extensions":{"com.figma.variables":{"fontSize":"clamp(32px, 6vw, 48px)","note":"Figma stores the 48px desktop-max static value. Browser CSS overrides with fluid scaling (32px min → 48px max). See src/styles/theme.css."}}},"h2":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.2xl}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.tight}","lineHeight":"42px"},"$description":"Secondary section headings (h2). Clash Display medium, 30px, line-height 42px.","$extensions":{"com.figma.variables":{"fontSize":"clamp(24px, 3.5vw, 30px)","note":"Figma stores the 30px desktop-max static value. Browser CSS overrides with fluid scaling (24px min → 30px max). See src/styles/theme.css."}}},"h3":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.lg}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"28px"},"$description":"Component and card headers (h3). 20px / Clash Display medium 500 / leading-snug.","$extensions":{"com.figma.variables":{"fontSize":"clamp(18px, 2vw, 20px)","note":"Figma stores the 20px desktop-max static value. Browser CSS overrides with fluid scaling (18px min → 20px max). See src/styles/theme.css."}}},"body":{"$value":{"fontFamily":"{primitive.typography.family.primary}","fontSize":"{primitive.typography.size.base}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"28px","maxWidth":{"value":60,"unit":"ch"}},"$description":"Body prose. Satoshi medium, 17px, line-height 28px, max 60ch measure."},"ui":{"$value":{"fontFamily":"{primitive.typography.family.primary}","fontSize":"{primitive.typography.size.sm}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"24px","maxWidth":{"value":60,"unit":"ch"}},"$description":"UI text for nav, labels, captions. Satoshi medium, 15px, line-height 24px."},"eyebrow":{"$value":{"fontFamily":"{primitive.typography.family.primary}","fontSize":"{primitive.typography.size.xs}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.caps}","lineHeight":"20px","textTransform":"uppercase"},"$description":"Eyebrow / kicker label. Satoshi medium, 13px, caps tracking, uppercase."},"mono":{"$value":{"fontFamily":"{primitive.typography.family.mono}","fontSize":"{primitive.typography.size.xs}","fontWeight":"{primitive.typography.weight.regular}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"20px","maxWidth":{"value":60,"unit":"ch"}},"$description":"Monospace for code, token names, shortcuts. Geist Mono regular, 13px."},"lineHeight":{"none":{"$type":"number","$value":"{primitive.typography.lineHeight.none}","$description":"Semantic alias for leading-none (1). Display text and badge spans."}}},"docs":{"$description":"Doc-page spacing scale: section, paragraph, inline rhythm.","space":{"$type":"dimension","section":{"$value":"{primitive.space.12}","$description":"48px between H2 sections — generous section break for doc pages."},"paragraph":{"$value":"{primitive.space.6}","$description":"24px between paragraphs — comfortable prose rhythm for long-form doc content."},"inline":{"$value":"{primitive.space.2}","$description":"8px inline cluster spacing — gap between metadata badges, inline icons, doc-page chips."}}},"accent":{"$type":"color","rest":{"$value":"{primitive.color.blue.500}","$description":"Default accent fill for interactive elements at rest.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.500}"}}}},"hover":{"$value":"{primitive.color.blue.600}","$description":"Accent fill on pointer hover.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.600}","Dark":"{primitive.color.blue.450}"}}}},"pressed":{"$value":"{primitive.color.blue.700}","$description":"Accent fill during active press.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.700}","Dark":"{primitive.color.blue.400}"}}}},"inactive":{"$value":"{primitive.color.blue.200}","$description":"Accent fill for inactive or unselected accent elements.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.200}","Dark":"{primitive.color.blue.200}"}}}},"disabled":{"$value":"{primitive.color.blue.100}","$description":"Accent fill for disabled accent elements.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.100}","Dark":"{primitive.color.blue.100}"}}}},"content":{"$value":"{primitive.color.blue.500}","$description":"Text and icon color on neutral surfaces with accent intent.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.300}"}}}},"contentHover":{"$value":"{primitive.color.blue.600}","$description":"Accent content color on pointer hover.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.600}","Dark":"{primitive.color.blue.200}"}}}},"subtle":{"$value":"{primitive.color.blue.50}","$description":"Low-emphasis accent tint for hover backgrounds and selection highlights.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.50}","Dark":"{primitive.color.blue.900}"}}}}},"radius":{"action":{"$type":"dimension","$value":"{primitive.radius.12}","$description":"Corner radius for interactive action elements like buttons and inputs."}},"borderWidth":{"default":{"$type":"dimension","$value":"{primitive.borderWidth.xs}","$description":"Default hairline border weight for surfaces and inputs."},"emphasis":{"$type":"dimension","$value":"{primitive.borderWidth.sm}","$description":"Stronger border weight for focus rings and active indicators."}},"shadow":{"$type":"shadow","subtle":{"$value":"0 1px 2px hsl(var(--primitive-shadow-color) / 0.04), 0 1px 1px hsl(var(--primitive-shadow-color) / 0.06)","$description":"Resting elevation shadow for raised surfaces (cards, inline panels)."},"floating":{"$value":"0 4px 6px hsl(var(--primitive-shadow-color) / 0.05), 0 10px 15px hsl(var(--primitive-shadow-color) / 0.08)","$description":"Hover/floating elevation for menus, popovers, and tooltips."},"overlay":{"$value":"0 10px 15px hsl(var(--primitive-shadow-color) / 0.08), 0 25px 50px hsl(var(--primitive-shadow-color) / 0.12)","$description":"Modal/dialog elevation for full-screen overlays."}},"elevation":{"$type":"elevation","flat":{"$value":{"surface":"{semantic.color.surface.page}","shadow":null,"border":"{semantic.color.border.subtle}"},"$description":"Flat surface (no shadow, hairline border) for embedded panels."},"raised":{"$value":{"surface":"{semantic.color.surface.raised}","shadow":"{semantic.shadow.subtle}","border":null},"$description":"Resting card / panel elevation."},"floating":{"$value":{"surface":"{semantic.color.surface.raised}","shadow":"{semantic.shadow.floating}","border":null},"$description":"Hover, menu, and popover elevation."},"overlay":{"$value":{"surface":"{semantic.color.surface.overlay}","shadow":"{semantic.shadow.overlay}","border":null},"$description":"Modal, dialog, and drawer elevation."}}}'), Za = { nav: { bg: { $type: "color", $value: "{semantic.color.surface.page}", $description: "Nav bar background fill." }, bgActive: { $type: "color", $value: "{semantic.accent.subtle}", $description: "Nav item background fill when active or selected." }, borderActive: { $type: "color", $value: "{semantic.color.surface.accent}", $description: "Nav item border color when active or selected." }, text: { $type: "color", $value: "{semantic.color.content.secondary}", $description: "Nav item text color at rest." }, textActive: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Nav item text color when active or selected." }, height: { $type: "dimension", $value: "{primitive.space.16}", $description: "Nav bar height." }, paddingX: { $type: "dimension", $value: "{primitive.space.6}", $description: "Horizontal padding inside nav items." }, paddingY: { $type: "dimension", $value: "{primitive.space.2}", $description: "Vertical padding inside nav items." } }, tag: { background: { $type: "color", $value: "{semantic.accent.subtle}", $description: "Base tag surface color." }, text: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Default tag text color." }, border: { $type: "color", $value: "{semantic.color.border.default}", $description: "Default tag border color." }, radius: { $type: "dimension", $value: "{primitive.radius.full}", $description: "Pill radius for the tag surface." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.xs}", $description: "Tag type size." }, fontWeight: { $type: "fontWeight", $value: "{primitive.typography.weight.medium}", $description: "Tag label weight." }, lineHeight: { $type: "dimension", $value: "{primitive.typography.lineHeight.normal}", $description: "Readable label rhythm for tags." }, minWidth: { $type: "dimension", $value: "{primitive.size.48}", $description: "Minimum tag width." }, minHeight: { $type: "dimension", $value: "{primitive.space.6}", $description: "Minimum tag height." }, paddingX: { $type: "dimension", $value: "{primitive.space.3}", $description: "Horizontal padding inside the pill." }, paddingY: { $type: "dimension", $value: "{primitive.space.2}", $description: "Vertical padding inside the pill." }, activeText: { $type: "color", $value: "{semantic.color.content.onAccent}", $description: "Text color when the tag is active." }, activeBackground: { $type: "color", $value: "{semantic.accent.rest}", $description: "Active tag fill color." }, activeBorder: { $type: "color", $value: "{semantic.accent.rest}", $description: "Active tag border color." }, activeHover: { $type: "color", $value: "{semantic.accent.hover}", $description: "Active tag hover fill color." } }, badge: { fontSize: { $type: "dimension", $value: "{primitive.typography.size.xs}", $description: "Badge type size." }, fontWeight: { $type: "fontWeight", $value: "{primitive.typography.weight.medium}", $description: "Badge label weight." }, text: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Badge text color." }, bg: { $type: "color", $value: "{semantic.color.feedback.bg.info}", $extensions: { "com.figma.variables": { modes: { Light: "{semantic.color.feedback.bg.info}", Dark: "{semantic.color.feedback.bg.info}" } } }, $description: "Badge background color." }, radius: { $type: "dimension", $value: "{primitive.radius.4}", $description: "Small rounded radius for badges." }, height: { $type: "dimension", $value: "{primitive.size.20}", $description: "Badge height." }, minWidth: { $type: "dimension", $value: "{primitive.size.20}", $description: "Badge minimum width." }, paddingY: { $type: "dimension", $value: "{primitive.space.px2}", $description: "Vertical padding inside the badge." }, paddingX: { $type: "dimension", $value: "{primitive.space.px6}", $description: "Horizontal padding inside the badge." } }, button: { bg: { $type: "color", $value: "{semantic.color.surface.accent}", $description: "Primary button fill." }, bgHover: { $type: "color", $value: "{semantic.accent.hover}", $description: "Primary button hover fill." }, text: { $type: "color", $value: "{semantic.color.content.onAccent}", $description: "Primary button text color." }, radius: { $type: "dimension", $value: "{semantic.radius.action}", $description: "Button corner radius." }, paddingX: { $type: "dimension", $value: "{primitive.space.4}", $description: "Horizontal button padding." }, paddingY: { $type: "dimension", $value: "{primitive.space.3}", $description: "Vertical button padding." }, size: { sm: { paddingX: { $type: "dimension", $value: "{primitive.space.2}", $description: "Small button horizontal padding (8px)." }, paddingY: { $type: "dimension", $value: "{primitive.space.1}", $description: "Small button vertical padding (4px)." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.xs}", $description: "Small button label size (13px)." }, iconSize: { $type: "dimension", $value: "{primitive.size.12}", $description: "Small button icon slot size (12px)." }, height: { $type: "dimension", $value: "{primitive.space.7}", $description: "Small button height (28px)." }, itemSpacing: { $type: "dimension", $value: "{primitive.space.1}", $description: "Small button icon-to-label gap (4px)." } }, md: { paddingX: { $type: "dimension", $value: "{primitive.space.4}", $description: "Medium button horizontal padding (16px)." }, paddingY: { $type: "dimension", $value: "{primitive.space.3}", $description: "Medium button vertical padding (12px)." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.sm}", $description: "Medium button label size (15px)." }, iconSize: { $type: "dimension", $value: "{primitive.size.16}", $description: "Medium button icon slot size (16px)." }, height: { $type: "dimension", $value: "{primitive.size.40}", $description: "Medium button height (40px)." }, itemSpacing: { $type: "dimension", $value: "{primitive.space.2}", $description: "Medium button icon-to-label gap (8px)." } }, lg: { paddingX: { $type: "dimension", $value: "{primitive.space.6}", $description: "Large button horizontal padding (24px)." }, paddingY: { $type: "dimension", $value: "{primitive.space.4}", $description: "Large button vertical padding (16px)." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.base}", $description: "Large button label size (17px)." }, iconSize: { $type: "dimension", $value: "{primitive.size.20}", $description: "Large button icon slot size (20px)." }, height: { $type: "dimension", $value: "{primitive.size.48}", $description: "Large button height (48px)." }, itemSpacing: { $type: "dimension", $value: "{primitive.space.2}", $description: "Large button icon-to-label gap (8px)." } } }, primary: { textDisabled: { $type: "color", $value: "{semantic.color.content.onAccent}", $extensions: { "com.figma.variables": { modes: { Light: "{semantic.color.content.onAccent}", Dark: "{semantic.color.content.disabled}" } } }, $description: "Disabled primary button text color." }, bgDisabled: { $type: "color", $value: "{semantic.color.surface.accentSubtle}", $description: "Disabled primary button fill." } }, secondary: { bg: { rest: { $type: "color", $value: "{semantic.color.surface.page}", $description: "Secondary button fill." }, hover: { $type: "color", $value: "{semantic.color.surface.raised}", $description: "Secondary button hover fill." }, pressed: { $type: "color", $value: "{semantic.color.surface.overlay}", $description: "Secondary button pressed fill." } }, border: { rest: { $type: "color", $value: "{semantic.color.border.default}", $description: "Secondary button border." }, hover: { $type: "color", $value: "{semantic.color.border.default}", $description: "Secondary button hover border." }, pressed: { $type: "color", $value: "{semantic.color.border.default}", $description: "Secondary button pressed border." }, disabled: { $type: "color", $value: "{semantic.color.border.subdued}", $description: "Secondary button disabled border." } }, text: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Secondary button text color." } } }, input: { bg: { $type: "color", $value: "{semantic.color.surface.raised}" }, text: { $type: "color", $value: "{semantic.color.content.primary}" }, border: { $type: "color", $value: "{semantic.color.border.default}" }, borderError: { $type: "color", $value: "{semantic.color.feedback.error}" }, radius: { $type: "dimension", $value: "{semantic.radius.action}" }, paddingX: { $type: "dimension", $value: "{primitive.space.4}" }, paddingY: { $type: "dimension", $value: "{primitive.space.3}" } }, card: { bg: { $type: "color", $value: "{semantic.color.surface.raised}" }, border: { $type: "color", $value: "{semantic.color.border.default}" }, radius: { $type: "dimension", $value: "{primitive.radius.8}" }, padding: { $type: "dimension", $value: "{primitive.space.6}" }, gap: { $type: "dimension", $value: "{primitive.space.2}" } }, lightbox: { backdrop: { blur: { $type: "dimension", $value: "{primitive.blur.16}", $description: "Backdrop blur applied behind fullscreen image lightboxes." } } } }, Ja = { $description: "Shadcn-style role aliases mapping to semantic tokens. Compiled to --role-* CSS vars.", background: { $type: "color", $value: "{semantic.color.surface.page}", $description: "Page background. shadcn role: background." }, foreground: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Default text on background. shadcn role: foreground." }, card: { $type: "color", $value: "{semantic.color.surface.raised}", $description: "Card surface. shadcn role: card." }, "card-foreground": { $type: "color", $value: "{semantic.color.content.primary}", $description: "Text on card. shadcn role: card-foreground." }, popover: { $type: "color", $value: "{semantic.color.surface.overlay}", $description: "Popover/menu surface. shadcn role: popover." }, "popover-foreground": { $type: "color", $value: "{semantic.color.content.primary}", $description: "Text on popover. shadcn role: popover-foreground." }, primary: { $type: "color", $value: "{semantic.color.surface.accent}", $description: "Primary action surface. shadcn role: primary." }, "primary-foreground": { $type: "color", $value: "{semantic.color.content.onAccent}", $description: "Text/icons on primary surface. shadcn role: primary-foreground." }, secondary: { $type: "color", $value: "{semantic.color.surface.raised}", $description: "Secondary action surface. shadcn role: secondary." }, "secondary-foreground": { $type: "color", $value: "{semantic.color.content.primary}", $description: "Text on secondary surface. shadcn role: secondary-foreground." }, muted: { $type: "color", $value: "{semantic.color.surface.overlay}", $description: "Muted/quiet bg (skeletons, disabled inputs). shadcn role: muted." }, "muted-foreground": { $type: "color", $value: "{semantic.color.content.secondary}", $description: "Muted text. shadcn role: muted-foreground." }, accent: { $type: "color", $value: "{semantic.color.surface.accentSubtle}", $description: "Hover/active tinted bg. shadcn role: accent." }, "accent-foreground": { $type: "color", $value: "{semantic.color.content.accent}", $description: "Text on accent surface. shadcn role: accent-foreground." }, destructive: { $type: "color", $value: "{semantic.color.feedback.error}", $description: "Destructive action surface. shadcn role: destructive." }, "destructive-foreground": { $type: "color", $value: "{semantic.color.content.inverse}", $description: "Text on destructive surface. shadcn role: destructive-foreground." }, border: { $type: "color", $value: "{semantic.color.border.default}", $description: "Default border. shadcn role: border." }, input: { $type: "color", $value: "{semantic.color.border.default}", $description: "Input field border. shadcn role: input." }, ring: { $type: "color", $value: "{semantic.color.border.accent}", $description: "Focus ring color. shadcn role: ring." }, radius: { $type: "dimension", $value: "{semantic.radius.action}", $description: "Default border radius. shadcn role: radius." } }, xt = {
|
|
3543
|
+
}), Ya = "https://www.designtokens.org/schemas/2025.10/format.json", Ua = "Adrian Milsap hirobius design tokens - W3C DTCG 2025.10 compliant, Figma SDS architecture", Xa = /* @__PURE__ */ JSON.parse('{"$description":"Base values used as inputs to derived token layers.","color":{"$type":"color","neutral":{"50":{"$value":"#fafafa","$description":"Specific value within the neutral range at a defined lightness step."},"100":{"$value":"#f5f5f5","$description":"Specific value within the neutral range at a defined lightness step."},"200":{"$value":"#e5e5e5","$description":"Specific value within the neutral range at a defined lightness step."},"300":{"$value":"#d4d4d4","$description":"Specific value within the neutral range at a defined lightness step."},"400":{"$value":"#a3a3a3","$description":"Specific value within the neutral range at a defined lightness step."},"500":{"$value":"#737373","$description":"Specific value within the neutral range at a defined lightness step."},"600":{"$value":"#525252","$description":"Specific value within the neutral range at a defined lightness step."},"700":{"$value":"#404040","$description":"Specific value within the neutral range at a defined lightness step."},"800":{"$value":"#262626","$description":"Specific value within the neutral range at a defined lightness step."},"850":{"$value":"#1a1a1a","$description":"Specific value within the neutral range at a defined lightness step."},"900":{"$value":"#111111","$description":"Specific value within the neutral range at a defined lightness step."},"950":{"$value":"#0a0a0a","$description":"Specific value within the neutral range at a defined lightness step."},"$description":"Discrete values within the neutral range at defined lightness steps.","white":{"$value":"#ffffff","$description":"Specific value within the neutral range at a defined lightness step."},"black":{"$value":"#000000","$description":"Specific value within the neutral range at a defined lightness step."}},"blue":{"50":{"$value":"oklch(0.96 0.03 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"100":{"$value":"oklch(0.92 0.04 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"200":{"$value":"oklch(0.88 0.07 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"300":{"$value":"oklch(0.70 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"400":{"$value":"oklch(0.65 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"450":{"$value":"oklch(0.56 0.29 266.60)","$description":"Specific value within the blue range at a defined lightness step."},"500":{"$value":"#1E2EFD","$description":"Specific value within the blue range at a defined lightness step."},"600":{"$value":"oklch(0.45 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"700":{"$value":"oklch(0.44 0.2903 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"800":{"$value":"oklch(0.30 0.07 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"900":{"$value":"oklch(0.22 0.05 266.54)","$description":"Specific value within the blue range at a defined lightness step."},"$description":"Discrete values within the blue range at defined lightness steps."},"red":{"50":{"$value":"#fef2f2","$description":"Specific value within the red range at a defined lightness step."},"400":{"$value":"#f87171","$description":"Specific value within the red range at a defined lightness step."},"700":{"$value":"#b91c1c","$description":"Specific value within the red range at a defined lightness step."},"950":{"$value":"#450a0a","$description":"Specific value within the red range at a defined lightness step."},"$description":"Discrete values within the red range at defined lightness steps."},"green":{"50":{"$value":"#ecfdf5","$description":"Specific value within the green range at a defined lightness step."},"400":{"$value":"#34d399","$description":"Specific value within the green range at a defined lightness step."},"700":{"$value":"#047857","$description":"Specific value within the green range at a defined lightness step."},"950":{"$value":"#022c22","$description":"Specific value within the green range at a defined lightness step."},"$description":"Discrete values within the green range at defined lightness steps."},"violet":{"50":{"$value":"#f5f3ff","$description":"Specific value within the violet range at a defined lightness step."},"400":{"$value":"#a78bfa","$description":"Specific value within the violet range at a defined lightness step."},"700":{"$value":"#6d28d9","$description":"Specific value within the violet range at a defined lightness step."},"950":{"$value":"#2e1065","$description":"Specific value within the violet range at a defined lightness step."},"$description":"Discrete values within the violet range at defined lightness steps."},"amber":{"50":{"$value":"#fffbeb","$description":"Specific value within the amber range at a defined lightness step."},"400":{"$value":"#fbbf24","$description":"Specific value within the amber range at a defined lightness step."},"800":{"$value":"#92400e","$description":"Specific value within the amber range at a defined lightness step."},"950":{"$value":"#451a03","$description":"Specific value within the amber range at a defined lightness step."},"$description":"Discrete values within the amber range at defined lightness steps."},"stone":{"100":{"$value":"#F5EFE7","$description":"Stone 100 — near-white warm tint; accent-subtle surface."},"400":{"$value":"#D0B492","$description":"Stone 400 — light warm tone; dark-mode pressed accent."},"450":{"$value":"#BC9D7E","$description":"Stone 450 — medium warm tone; dark-mode hover accent."},"500":{"$value":"#A8896A","$description":"Stone 500 — mid warm tone; dark-mode rest accent."},"600":{"$value":"#8B6F47","$description":"Stone 600 — primary warm stone; light-mode rest accent and CTA surface."},"700":{"$value":"#75593A","$description":"Stone 700 — darker warm stone; light-mode hover accent."},"800":{"$value":"#5C432A","$description":"Stone 800 — deep warm stone; light-mode pressed accent."},"950":{"$value":"#3A2E1F","$description":"Stone 950 — near-black warm tone; dark-mode subtle accent surface."},"$description":"Warm stone/brown palette for Concrete Creations brand accent ramp. PLACEHOLDER values pending final brand identity work."},"projectBrand":{"microsoftGameDev":{"100":{"$value":"#E5E5FC","$description":"Light support tone for the Microsoft Game Dev project brand."},"500":{"$value":"#6d31fb","$description":"Primary accent tone for the Microsoft Game Dev project brand."},"900":{"$value":"oklch(0.22 0.16 304)","$description":"Dark support tone for the Microsoft Game Dev project brand."},"$description":"Project-specific brand colors used in portfolio contexts."},"$description":"Project-specific brand color families reserved for portfolio surfaces."}},"space":{"0":{"$value":{"value":0,"unit":"px"}},"1":{"$value":{"value":4,"unit":"px"}},"2":{"$value":{"value":8,"unit":"px"}},"3":{"$value":{"value":12,"unit":"px"}},"4":{"$value":{"value":16,"unit":"px"}},"5":{"$value":{"value":20,"unit":"px"}},"6":{"$value":{"value":24,"unit":"px"}},"7":{"$value":{"value":28,"unit":"px"}},"8":{"$value":{"value":32,"unit":"px"}},"10":{"$value":{"value":40,"unit":"px"}},"12":{"$value":{"value":48,"unit":"px"}},"16":{"$value":{"value":64,"unit":"px"}},"20":{"$value":{"value":80,"unit":"px"}},"24":{"$value":{"value":96,"unit":"px"}},"32":{"$value":{"value":128,"unit":"px"}},"$type":"dimension","$description":"Dimensional increments within the 4px base-unit spatial system.","px1":{"$value":{"value":1,"unit":"px"}},"px2":{"$value":{"value":2,"unit":"px"}},"px6":{"$value":{"value":6,"unit":"px"}},"px10":{"$value":{"value":10,"unit":"px"}}},"blur":{"8":{"$value":{"value":8,"unit":"px"},"$description":"8px blur step."},"16":{"$value":{"value":16,"unit":"px"},"$description":"Fullscreen backdrop blur for portfolio lightbox overlays."},"$type":"dimension","$description":"Backdrop blur strengths for frosted overlays and fullscreen media treatments."},"radius":{"0":{"$value":{"value":0,"unit":"px"}},"2":{"$value":{"value":2,"unit":"px"}},"4":{"$value":{"value":4,"unit":"px"}},"8":{"$value":{"value":8,"unit":"px"}},"12":{"$value":{"value":12,"unit":"px"}},"$type":"dimension","full":{"$value":{"value":9999,"unit":"px"}}},"typography":{"family":{"$type":"fontFamily","primary":{"$value":["Satoshi","system-ui","-apple-system","BlinkMacSystemFont","Segoe UI","sans-serif"],"$description":"Self-hosted Satoshi (ITF) body typeface; falls back to system-ui sans-serif stack."},"display":{"$value":["Clash Display","system-ui","-apple-system","BlinkMacSystemFont","Segoe UI","sans-serif"],"$description":"Display face: Clash Display ITF, bound to display/h1/h2/h3 composites."},"mono":{"$value":["Geist Mono","Courier New","monospace"],"$description":"Monospace face: Geist Mono. Falls back to Courier New, monospace."}},"size":{"$type":"dimension","2xs":{"$value":{"value":10,"unit":"px"}},"xs":{"$value":{"value":13,"unit":"px"}},"sm":{"$value":{"value":15,"unit":"px"}},"base":{"$value":{"value":17,"unit":"px"}},"lg":{"$value":{"value":20,"unit":"px"}},"xl":{"$value":{"value":24,"unit":"px"}},"2xl":{"$value":{"value":30,"unit":"px"}},"3xl":{"$value":{"value":36,"unit":"px"}},"4xl":{"$value":{"value":48,"unit":"px"}},"5xl":{"$value":{"value":80,"unit":"px"}},"7xl":{"$value":{"value":72,"unit":"px"},"$description":"Swiss-canon display size. Static desktop value; fluid in theme.css."}},"weight":{"$type":"fontWeight","light":{"$value":300,"$description":"Swiss-canon heading weight. Display and h1/h2 composites only."},"regular":{"$value":400},"medium":{"$value":500},"semibold":{"$value":600},"bold":{"$value":700}},"lineHeight":{"$type":"number","compact":{"$value":0.95},"none":{"$value":1},"tight":{"$value":1.25},"snug":{"$value":1.375,"$description":"Swiss-canon snug rhythm (10t-5). Used by h2/h3 composites for tight-but-readable heading lines."},"normal":{"$value":1.5},"relaxed":{"$value":1.625,"$description":"Swiss-canon relaxed rhythm (10t-5). Used by body/small/mono composites for long-form prose comfort."}},"letterSpacing":{"$type":"dimension","tighter":{"$value":{"value":-0.02,"unit":"em"}},"tight":{"$value":{"value":-0.01,"unit":"em"}},"normal":{"$value":{"value":0,"unit":"em"}},"wide":{"$value":{"value":0.01,"unit":"em"}},"wider":{"$value":{"value":0.02,"unit":"em"}},"caps":{"$value":{"value":0.06,"unit":"em"},"$description":"All-caps tracking for eyebrow / kicker labels. Always pairs with text-transform: uppercase."}}},"duration":{"$type":"duration","instant":{"$value":{"value":100,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."},"short":{"$value":{"value":150,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."},"medium":{"$value":{"value":250,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."},"long":{"$value":{"value":400,"unit":"ms"},"$description":"Fixed elapsed time interval in milliseconds."}},"easing":{"$type":"cubicBezier","emphasized":{"$value":[0.4,0,0.2,1],"$description":"Cubic bezier with balanced input and output tangents."},"decelerate":{"$value":[0,0,0.2,1],"$description":"Cubic bezier with steep initial gain and constrained tail velocity."},"accelerate":{"$value":[0.4,0,1,1],"$description":"Cubic bezier with restrained initial gain and steep terminal velocity."},"elastic":{"$type":"spring","$value":{"type":"spring","stiffness":300,"damping":20,"mass":1},"$description":"Spring response defined by stiffness, damping, and mass parameters."}},"shadow":{"color":{"$type":"color","$value":"220 13% 18%","$description":"HSL channels for shadow-color alpha compositing. Light: cool neutral; dark: black.","$extensions":{"com.figma.variables":{"modes":{"Light":"220 13% 18%","Dark":"0 0% 0%"}}}}},"breakpoint":{"$description":"Discrete viewport thresholds expressed as dimensions.","xs":{"$type":"dimension","$value":{"value":375,"unit":"px"}},"sm":{"$type":"dimension","$value":{"value":640,"unit":"px"}},"md":{"$type":"dimension","$value":{"value":768,"unit":"px"}},"lg":{"$type":"dimension","$value":{"value":1024,"unit":"px"}},"xl":{"$type":"dimension","$value":{"value":1280,"unit":"px"}}},"size":{"8":{"$type":"dimension","$value":{"value":8,"unit":"px"},"$description":"8px size step."},"10":{"$type":"dimension","$value":{"value":10,"unit":"px"},"$description":"10px size step."},"12":{"$type":"dimension","$value":{"value":12,"unit":"px"},"$description":"12px size step."},"16":{"$type":"dimension","$value":{"value":16,"unit":"px"},"$description":"16px size step."},"20":{"$type":"dimension","$value":{"value":20,"unit":"px"},"$description":"20px size step."},"24":{"$type":"dimension","$value":{"value":24,"unit":"px"},"$description":"24px size step."},"32":{"$type":"dimension","$value":{"value":32,"unit":"px"},"$description":"32px size step."},"40":{"$type":"dimension","$value":{"value":40,"unit":"px"},"$description":"40px size step."},"48":{"$type":"dimension","$value":{"value":48,"unit":"px"},"$description":"48px size step."},"64":{"$type":"dimension","$value":{"value":64,"unit":"px"},"$description":"64px size step."},"80":{"$type":"dimension","$value":{"value":80,"unit":"px"},"$description":"80px size step."},"96":{"$type":"dimension","$value":{"value":96,"unit":"px"},"$description":"96px size step."},"$description":"Unaliased dimensional values.","interactive":{"$description":"Interactive control size minimums.","min":{"$type":"dimension","$value":{"value":44,"unit":"px"},"$description":"Minimum interactive hit target size."}},"width":{"96":{"$type":"dimension","$value":{"value":96,"unit":"px"},"$description":"96px width step."},"760":{"$type":"dimension","$value":{"value":760,"unit":"px"}},"1200":{"$type":"dimension","$value":{"value":1200,"unit":"px"}},"50ch":{"$type":"dimension","$value":{"value":50,"unit":"ch"}}}},"grid":{"columns":{"1":{"$type":"number","$value":1},"2":{"$type":"number","$value":2},"3":{"$type":"number","$value":3}}},"zIndex":{"0":{"$type":"number","$value":0},"10":{"$type":"number","$value":10},"100":{"$type":"number","$value":100},"1000":{"$type":"number","$value":1000},"$description":"Discrete stacking levels along the z axis."},"borderWidth":{"$type":"dimension","xs":{"$value":{"value":1,"unit":"px"}},"sm":{"$value":{"value":2,"unit":"px"}},"md":{"$value":{"value":4,"unit":"px"}}}}'), Ka = /* @__PURE__ */ JSON.parse('{"motion":{"$type":"motion","productive":{"$value":{"duration":"{primitive.duration.short}","easing":"{primitive.easing.decelerate}"},"$description":"For micro-interactions and status changes. No deformation."},"expressive":{"$value":{"duration":"{primitive.duration.medium}","easing":"{primitive.easing.elastic}"},"$description":"For teaching moments and significant UI entries. Includes physics-based squish."},"spatial":{"$value":{"duration":"{primitive.duration.long}","easing":"{primitive.easing.emphasized}"},"$description":"For elements traveling long distances across the viewport."},"exit":{"$value":{"duration":"{primitive.duration.instant}","easing":"{primitive.easing.accelerate}"},"$description":"For elements being removed from the DOM."}},"color":{"$type":"color","surface":{"page":{"$value":"{primitive.color.neutral.white}","$description":"Main page background","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.white}","Dark":"{primitive.color.neutral.black}"}}}},"raised":{"$value":"{primitive.color.neutral.50}","$description":"Subtle elevated surface (cards, sections)","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.50}","Dark":"{primitive.color.neutral.950}"}}}},"overlay":{"$value":"{primitive.color.neutral.100}","$description":"Deeper surface layer","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.100}","Dark":"{primitive.color.neutral.850}"}}}},"inverse":{"$value":"{primitive.color.neutral.black}","$description":"Inverted background for contrast sections","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.black}","Dark":"{primitive.color.neutral.white}"}}}},"accent":{"$value":"{primitive.color.blue.500}","$description":"Accent-colored background","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.500}"}}}},"accentSubtle":{"$value":"{primitive.color.blue.50}","$description":"Faint accent tint for hover states or highlights","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.50}","Dark":"{primitive.color.blue.900}"}}}}},"content":{"primary":{"$value":"{primitive.color.neutral.900}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.900}","Dark":"{primitive.color.neutral.100}"}}}},"secondary":{"$value":"{primitive.color.neutral.600}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.600}","Dark":"{primitive.color.neutral.400}"}}}},"disabled":{"$value":"{primitive.color.neutral.300}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.300}","Dark":"{primitive.color.neutral.600}"}}}},"inverse":{"$value":"{primitive.color.neutral.100}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.100}","Dark":"{primitive.color.neutral.900}"}}}},"accent":{"$value":"{primitive.color.blue.500}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.300}"}}}},"onAccent":{"$value":"{primitive.color.neutral.white}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.white}","Dark":"{primitive.color.neutral.white}"}}}}},"border":{"default":{"$value":"{primitive.color.neutral.200}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.200}","Dark":"{primitive.color.neutral.700}"}}}},"subdued":{"$value":"{primitive.color.neutral.200}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.200}","Dark":"{primitive.color.neutral.800}"}}}},"subtle":{"$value":"{primitive.color.neutral.100}","$description":"Lowest-contrast border for resting hairline edges on flat surfaces.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.100}","Dark":"{primitive.color.neutral.850}"}}}},"strong":{"$value":"{primitive.color.neutral.300}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.neutral.300}","Dark":"{primitive.color.neutral.600}"}}}},"accent":{"$value":"{primitive.color.blue.500}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.500}"}}}}},"feedback":{"error":{"$type":"color","$value":"{primitive.color.red.700}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.red.700}","Dark":"{primitive.color.red.400}"}}}},"success":{"$type":"color","$value":"{primitive.color.green.700}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.green.700}","Dark":"{primitive.color.green.400}"}}}},"warning":{"$type":"color","$value":"{primitive.color.amber.800}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.amber.800}","Dark":"{primitive.color.amber.400}"}}}},"info":{"$type":"color","$value":"{primitive.color.blue.500}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.300}"}}}},"inProgress":{"$type":"color","$value":"{primitive.color.violet.700}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.violet.700}","Dark":"{primitive.color.violet.400}"}}}},"bg":{"error":{"$type":"color","$value":"{primitive.color.red.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.red.50}","Dark":"{primitive.color.red.950}"}}}},"success":{"$type":"color","$value":"{primitive.color.green.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.green.50}","Dark":"{primitive.color.green.950}"}}}},"warning":{"$type":"color","$value":"{primitive.color.amber.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.amber.50}","Dark":"{primitive.color.amber.950}"}}}},"info":{"$type":"color","$value":"{primitive.color.blue.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.50}","Dark":"{primitive.color.blue.900}"}}}},"inProgress":{"$type":"color","$value":"{primitive.color.violet.50}","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.violet.50}","Dark":"{primitive.color.violet.950}"}}}}}}},"space":{"$type":"dimension","$description":"Semantic spacing tiers: subgrid, component, layout, section.","subgrid":{"hairline":{"$value":"{primitive.space.px1}","$description":"1px border offset and hairline spacing."},"xs":{"$value":"{primitive.space.px2}","$description":"2px vertical rhythm nudge and baseline adjustment."},"gap":{"$value":"{primitive.space.1}","$description":"4px cap-height and inline cluster spacing."}},"component":{"gap":{"$value":"{primitive.space.2}","$description":"8px label↔input rhythm and closely coupled control spacing."},"medium":{"$value":"{primitive.space.3}","$description":"12px adjacent form fields and medium intra-component gaps."},"padding":{"$value":"{primitive.space.6}","$description":"24px default inset for cards, forms, panels, and grouped surfaces."}},"layout":{"tight":{"$value":"{primitive.space.4}","$description":"16px default HdsStack gap and inter-component spacing."},"normal":{"$value":"{primitive.space.6}","$description":"24px column gutters and sidebar gutter spacing."},"gutter":{"$value":"{primitive.space.6}","$description":"24px column and region gutters (alias for layout.normal)."},"inset":{"$value":"{primitive.space.8}","$description":"32px major block separation and inset inter-component gaps."},"spacious":{"$value":"{primitive.space.12}","$description":"48px section break and whitespace separator between major content blocks."}},"section":{"stack":{"$value":"{primitive.space.20}","$description":"80px vertical rhythm between page sections and major editorial blocks."},"inset":{"$value":"{primitive.space.24}","$description":"96px hero and landing-page inset padding."},"heroMax":{"$value":"{primitive.space.32}","$description":"128px maximum hero region padding for extra-large displays."}},"sidebar":{"indent":{"$value":"{primitive.space.3}","$description":"12px indent level for nested sidebar and TOC groups."},"gap":{"$value":"{primitive.space.4}","$description":"16px vertical spacing between items in sidebar and TOC stacks."},"sectionGap":{"$value":"{primitive.space.3}","$description":"12px spacing between sidebar sections and grouped rail blocks."},"railPadding":{"$value":"{primitive.space.5}","$description":"20px outer padding for sidebar and TOC rails."}}},"layout":{"width":{"content":{"$type":"dimension","$value":"{primitive.size.width.760}","$description":"Max width for prose/content (760px). Use with HdsContainer for centered text blocks."},"max":{"$type":"dimension","$value":"{primitive.size.width.1200}","$description":"Max width for full-layout containers (1200px). Use with HdsContainer for page layouts."}},"container":{"maxWidth":{"$type":"dimension","$value":"{primitive.size.width.1200}"}},"content":{"maxWidth":{"$type":"dimension","$value":"{primitive.size.width.760}"}},"prose":{"maxWidth":{"$type":"dimension","$value":"{primitive.size.width.50ch}"}},"section":{"paddingY":{"$type":"dimension","$value":"{primitive.space.20}"}},"grid":{"gap":{"$type":"dimension","$value":"{primitive.space.8}"},"columns":{"mobile":{"$type":"number","$value":"{primitive.grid.columns.1}"},"tablet":{"$type":"number","$value":"{primitive.grid.columns.2}"},"desktop":{"$type":"number","$value":"{primitive.grid.columns.3}"}}}},"typography":{"$type":"typography","$description":"8-style Swiss-canon type ramp: display, h1–h3, body, small, caption, mono.","display":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.7xl}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.tight}","lineHeight":"{primitive.typography.lineHeight.none}"},"$description":"Display headline. 72px / Clash Display 500 / leading-none.","$extensions":{"com.figma.variables":{"fontSize":"clamp(40px, 8vw, 72px)","note":"Figma stores the 72px desktop-max static value. Browser CSS overrides with fluid scaling (40px min → 72px max). See src/styles/theme.css."}}},"h1":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.4xl}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.tight}","lineHeight":"{primitive.typography.lineHeight.tight}"},"$description":"Primary section headings (h1). 48px / Clash Display medium 500 / leading-tight.","$extensions":{"com.figma.variables":{"fontSize":"clamp(32px, 6vw, 48px)","note":"Figma stores the 48px desktop-max static value. Browser CSS overrides with fluid scaling (32px min → 48px max). See src/styles/theme.css."}}},"h2":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.2xl}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.tight}","lineHeight":"42px"},"$description":"Secondary section headings (h2). Clash Display medium, 30px, line-height 42px.","$extensions":{"com.figma.variables":{"fontSize":"clamp(24px, 3.5vw, 30px)","note":"Figma stores the 30px desktop-max static value. Browser CSS overrides with fluid scaling (24px min → 30px max). See src/styles/theme.css."}}},"h3":{"$value":{"fontFamily":"{primitive.typography.family.display}","fontSize":"{primitive.typography.size.lg}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"28px"},"$description":"Component and card headers (h3). 20px / Clash Display medium 500 / leading-snug.","$extensions":{"com.figma.variables":{"fontSize":"clamp(18px, 2vw, 20px)","note":"Figma stores the 20px desktop-max static value. Browser CSS overrides with fluid scaling (18px min → 20px max). See src/styles/theme.css."}}},"body":{"$value":{"fontFamily":"{primitive.typography.family.primary}","fontSize":"{primitive.typography.size.base}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"28px","maxWidth":{"value":60,"unit":"ch"}},"$description":"Body prose. Satoshi medium, 17px, line-height 28px, max 60ch measure."},"ui":{"$value":{"fontFamily":"{primitive.typography.family.primary}","fontSize":"{primitive.typography.size.sm}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"24px","maxWidth":{"value":60,"unit":"ch"}},"$description":"UI text for nav, labels, captions. Satoshi medium, 15px, line-height 24px."},"eyebrow":{"$value":{"fontFamily":"{primitive.typography.family.primary}","fontSize":"{primitive.typography.size.xs}","fontWeight":"{primitive.typography.weight.medium}","letterSpacing":"{primitive.typography.letterSpacing.caps}","lineHeight":"20px","textTransform":"uppercase"},"$description":"Eyebrow / kicker label. Satoshi medium, 13px, caps tracking, uppercase."},"mono":{"$value":{"fontFamily":"{primitive.typography.family.mono}","fontSize":"{primitive.typography.size.xs}","fontWeight":"{primitive.typography.weight.regular}","letterSpacing":"{primitive.typography.letterSpacing.normal}","lineHeight":"20px","maxWidth":{"value":60,"unit":"ch"}},"$description":"Monospace for code, token names, shortcuts. Geist Mono regular, 13px."},"lineHeight":{"none":{"$type":"number","$value":"{primitive.typography.lineHeight.none}","$description":"Semantic alias for leading-none (1). Display text and badge spans."}}},"docs":{"$description":"Doc-page spacing scale: section, paragraph, inline rhythm.","space":{"$type":"dimension","section":{"$value":"{primitive.space.12}","$description":"48px between H2 sections — generous section break for doc pages."},"paragraph":{"$value":"{primitive.space.6}","$description":"24px between paragraphs — comfortable prose rhythm for long-form doc content."},"inline":{"$value":"{primitive.space.2}","$description":"8px inline cluster spacing — gap between metadata badges, inline icons, doc-page chips."}}},"accent":{"$type":"color","rest":{"$value":"{primitive.color.blue.500}","$description":"Default accent fill for interactive elements at rest.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.500}"}}}},"hover":{"$value":"{primitive.color.blue.600}","$description":"Accent fill on pointer hover.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.600}","Dark":"{primitive.color.blue.450}"}}}},"pressed":{"$value":"{primitive.color.blue.700}","$description":"Accent fill during active press.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.700}","Dark":"{primitive.color.blue.400}"}}}},"inactive":{"$value":"{primitive.color.blue.200}","$description":"Accent fill for inactive or unselected accent elements.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.200}","Dark":"{primitive.color.blue.200}"}}}},"disabled":{"$value":"{primitive.color.blue.100}","$description":"Accent fill for disabled accent elements.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.100}","Dark":"{primitive.color.blue.100}"}}}},"content":{"$value":"{primitive.color.blue.500}","$description":"Text and icon color on neutral surfaces with accent intent.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.500}","Dark":"{primitive.color.blue.300}"}}}},"contentHover":{"$value":"{primitive.color.blue.600}","$description":"Accent content color on pointer hover.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.600}","Dark":"{primitive.color.blue.200}"}}}},"subtle":{"$value":"{primitive.color.blue.50}","$description":"Low-emphasis accent tint for hover backgrounds and selection highlights.","$extensions":{"com.figma.variables":{"modes":{"Light":"{primitive.color.blue.50}","Dark":"{primitive.color.blue.900}"}}}}},"radius":{"action":{"$type":"dimension","$value":"{primitive.radius.12}","$description":"Corner radius for interactive action elements like buttons and inputs."}},"borderWidth":{"default":{"$type":"dimension","$value":"{primitive.borderWidth.xs}","$description":"Default hairline border weight for surfaces and inputs."},"emphasis":{"$type":"dimension","$value":"{primitive.borderWidth.sm}","$description":"Stronger border weight for focus rings and active indicators."}},"shadow":{"$type":"shadow","subtle":{"$value":"0 1px 2px hsl(var(--primitive-shadow-color) / 0.04), 0 1px 1px hsl(var(--primitive-shadow-color) / 0.06)","$description":"Resting elevation shadow for raised surfaces (cards, inline panels)."},"floating":{"$value":"0 4px 6px hsl(var(--primitive-shadow-color) / 0.05), 0 10px 15px hsl(var(--primitive-shadow-color) / 0.08)","$description":"Hover/floating elevation for menus, popovers, and tooltips."},"overlay":{"$value":"0 10px 15px hsl(var(--primitive-shadow-color) / 0.08), 0 25px 50px hsl(var(--primitive-shadow-color) / 0.12)","$description":"Modal/dialog elevation for full-screen overlays."}},"elevation":{"$type":"elevation","flat":{"$value":{"surface":"{semantic.color.surface.page}","shadow":null,"border":"{semantic.color.border.subtle}"},"$description":"Flat surface (no shadow, hairline border) for embedded panels."},"raised":{"$value":{"surface":"{semantic.color.surface.raised}","shadow":"{semantic.shadow.subtle}","border":null},"$description":"Resting card / panel elevation."},"floating":{"$value":{"surface":"{semantic.color.surface.raised}","shadow":"{semantic.shadow.floating}","border":null},"$description":"Hover, menu, and popover elevation."},"overlay":{"$value":{"surface":"{semantic.color.surface.overlay}","shadow":"{semantic.shadow.overlay}","border":null},"$description":"Modal, dialog, and drawer elevation."}}}'), Za = { nav: { bg: { $type: "color", $value: "{semantic.color.surface.page}", $description: "Nav bar background fill." }, bgActive: { $type: "color", $value: "{semantic.accent.subtle}", $description: "Nav item background fill when active or selected." }, borderActive: { $type: "color", $value: "{semantic.color.surface.accent}", $description: "Nav item border color when active or selected." }, text: { $type: "color", $value: "{semantic.color.content.secondary}", $description: "Nav item text color at rest." }, textActive: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Nav item text color when active or selected." }, height: { $type: "dimension", $value: "{primitive.space.16}", $description: "Nav bar height." }, paddingX: { $type: "dimension", $value: "{primitive.space.6}", $description: "Horizontal padding inside nav items." }, paddingY: { $type: "dimension", $value: "{primitive.space.2}", $description: "Vertical padding inside nav items." } }, tag: { background: { $type: "color", $value: "{semantic.accent.subtle}", $description: "Base tag surface color." }, text: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Default tag text color." }, border: { $type: "color", $value: "{semantic.color.border.default}", $description: "Default tag border color." }, radius: { $type: "dimension", $value: "{primitive.radius.full}", $description: "Pill radius for the tag surface." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.xs}", $description: "Tag type size." }, fontWeight: { $type: "fontWeight", $value: "{primitive.typography.weight.medium}", $description: "Tag label weight." }, lineHeight: { $type: "dimension", $value: "{primitive.typography.lineHeight.normal}", $description: "Readable label rhythm for tags." }, minWidth: { $type: "dimension", $value: "{primitive.size.48}", $description: "Minimum tag width." }, minHeight: { $type: "dimension", $value: "{primitive.space.6}", $description: "Minimum tag height." }, paddingX: { $type: "dimension", $value: "{primitive.space.3}", $description: "Horizontal padding inside the pill." }, paddingY: { $type: "dimension", $value: "{primitive.space.2}", $description: "Vertical padding inside the pill." }, activeText: { $type: "color", $value: "{semantic.color.content.onAccent}", $description: "Text color when the tag is active." }, activeBackground: { $type: "color", $value: "{semantic.accent.rest}", $description: "Active tag fill color." }, activeBorder: { $type: "color", $value: "{semantic.accent.rest}", $description: "Active tag border color." }, activeHover: { $type: "color", $value: "{semantic.accent.hover}", $description: "Active tag hover fill color." } }, badge: { fontSize: { $type: "dimension", $value: "{primitive.typography.size.xs}", $description: "Badge type size." }, fontWeight: { $type: "fontWeight", $value: "{primitive.typography.weight.medium}", $description: "Badge label weight." }, text: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Badge text color." }, bg: { $type: "color", $value: "{semantic.color.feedback.bg.info}", $extensions: { "com.figma.variables": { modes: { Light: "{semantic.color.feedback.bg.info}", Dark: "{semantic.color.feedback.bg.info}" } } }, $description: "Badge background color." }, radius: { $type: "dimension", $value: "{primitive.radius.4}", $description: "Small rounded radius for badges." }, height: { $type: "dimension", $value: "{primitive.size.20}", $description: "Badge height." }, minWidth: { $type: "dimension", $value: "{primitive.size.20}", $description: "Badge minimum width." }, paddingY: { $type: "dimension", $value: "{primitive.space.px2}", $description: "Vertical padding inside the badge." }, paddingX: { $type: "dimension", $value: "{primitive.space.px6}", $description: "Horizontal padding inside the badge." } }, button: { bg: { $type: "color", $value: "{semantic.color.surface.accent}", $description: "Primary button fill." }, bgHover: { $type: "color", $value: "{semantic.accent.hover}", $description: "Primary button hover fill." }, text: { $type: "color", $value: "{semantic.color.content.onAccent}", $description: "Primary button text color." }, radius: { $type: "dimension", $value: "{semantic.radius.action}", $description: "Button corner radius." }, paddingX: { $type: "dimension", $value: "{primitive.space.4}", $description: "Horizontal button padding." }, paddingY: { $type: "dimension", $value: "{primitive.space.3}", $description: "Vertical button padding." }, size: { sm: { paddingX: { $type: "dimension", $value: "{primitive.space.2}", $description: "Small button horizontal padding (8px)." }, paddingY: { $type: "dimension", $value: "{primitive.space.1}", $description: "Small button vertical padding (4px)." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.xs}", $description: "Small button label size (13px)." }, iconSize: { $type: "dimension", $value: "{primitive.size.12}", $description: "Small button icon slot size (12px)." }, height: { $type: "dimension", $value: "{primitive.space.7}", $description: "Small button height (28px)." }, itemSpacing: { $type: "dimension", $value: "{primitive.space.1}", $description: "Small button icon-to-label gap (4px)." } }, md: { paddingX: { $type: "dimension", $value: "{primitive.space.4}", $description: "Medium button horizontal padding (16px)." }, paddingY: { $type: "dimension", $value: "{primitive.space.3}", $description: "Medium button vertical padding (12px)." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.sm}", $description: "Medium button label size (15px)." }, iconSize: { $type: "dimension", $value: "{primitive.size.16}", $description: "Medium button icon slot size (16px)." }, height: { $type: "dimension", $value: "{primitive.size.40}", $description: "Medium button height (40px)." }, itemSpacing: { $type: "dimension", $value: "{primitive.space.2}", $description: "Medium button icon-to-label gap (8px)." } }, lg: { paddingX: { $type: "dimension", $value: "{primitive.space.6}", $description: "Large button horizontal padding (24px)." }, paddingY: { $type: "dimension", $value: "{primitive.space.4}", $description: "Large button vertical padding (16px)." }, fontSize: { $type: "dimension", $value: "{primitive.typography.size.base}", $description: "Large button label size (17px)." }, iconSize: { $type: "dimension", $value: "{primitive.size.20}", $description: "Large button icon slot size (20px)." }, height: { $type: "dimension", $value: "{primitive.size.48}", $description: "Large button height (48px)." }, itemSpacing: { $type: "dimension", $value: "{primitive.space.2}", $description: "Large button icon-to-label gap (8px)." } } }, primary: { textDisabled: { $type: "color", $value: "{semantic.color.content.onAccent}", $extensions: { "com.figma.variables": { modes: { Light: "{semantic.color.content.onAccent}", Dark: "{semantic.color.content.disabled}" } } }, $description: "Disabled primary button text color." }, bgDisabled: { $type: "color", $value: "{semantic.color.surface.accentSubtle}", $description: "Disabled primary button fill." } }, secondary: { bg: { rest: { $type: "color", $value: "{semantic.color.surface.page}", $description: "Secondary button fill." }, hover: { $type: "color", $value: "{semantic.color.surface.raised}", $description: "Secondary button hover fill." }, pressed: { $type: "color", $value: "{semantic.color.surface.overlay}", $description: "Secondary button pressed fill." } }, border: { rest: { $type: "color", $value: "{semantic.color.border.default}", $description: "Secondary button border." }, hover: { $type: "color", $value: "{semantic.color.border.default}", $description: "Secondary button hover border." }, pressed: { $type: "color", $value: "{semantic.color.border.default}", $description: "Secondary button pressed border." }, disabled: { $type: "color", $value: "{semantic.color.border.subdued}", $description: "Secondary button disabled border." } }, text: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Secondary button text color." } } }, input: { bg: { $type: "color", $value: "{semantic.color.surface.raised}" }, text: { $type: "color", $value: "{semantic.color.content.primary}" }, border: { $type: "color", $value: "{semantic.color.border.default}" }, borderError: { $type: "color", $value: "{semantic.color.feedback.error}" }, radius: { $type: "dimension", $value: "{semantic.radius.action}" }, paddingX: { $type: "dimension", $value: "{primitive.space.4}" }, paddingY: { $type: "dimension", $value: "{primitive.space.3}" } }, card: { bg: { $type: "color", $value: "{semantic.color.surface.raised}" }, border: { $type: "color", $value: "{semantic.color.border.default}" }, radius: { $type: "dimension", $value: "{primitive.radius.8}" }, padding: { $type: "dimension", $value: "{primitive.space.6}" }, gap: { $type: "dimension", $value: "{primitive.space.2}" } }, lightbox: { backdrop: { blur: { $type: "dimension", $value: "{primitive.blur.16}", $description: "Backdrop blur applied behind fullscreen image lightboxes." } } } }, Ja = { $description: "Shadcn-style role aliases mapping to semantic tokens. Compiled to --role-* CSS vars.", background: { $type: "color", $value: "{semantic.color.surface.page}", $description: "Page background. shadcn role: background." }, foreground: { $type: "color", $value: "{semantic.color.content.primary}", $description: "Default text on background. shadcn role: foreground." }, card: { $type: "color", $value: "{semantic.color.surface.raised}", $description: "Card surface. shadcn role: card." }, "card-foreground": { $type: "color", $value: "{semantic.color.content.primary}", $description: "Text on card. shadcn role: card-foreground." }, popover: { $type: "color", $value: "{semantic.color.surface.overlay}", $description: "Popover/menu surface. shadcn role: popover." }, "popover-foreground": { $type: "color", $value: "{semantic.color.content.primary}", $description: "Text on popover. shadcn role: popover-foreground." }, primary: { $type: "color", $value: "{semantic.color.surface.accent}", $description: "Primary action surface. shadcn role: primary." }, "primary-foreground": { $type: "color", $value: "{semantic.color.content.onAccent}", $description: "Text/icons on primary surface. shadcn role: primary-foreground." }, secondary: { $type: "color", $value: "{semantic.color.surface.raised}", $description: "Secondary action surface. shadcn role: secondary." }, "secondary-foreground": { $type: "color", $value: "{semantic.color.content.primary}", $description: "Text on secondary surface. shadcn role: secondary-foreground." }, muted: { $type: "color", $value: "{semantic.color.surface.overlay}", $description: "Muted/quiet bg (skeletons, disabled inputs). shadcn role: muted." }, "muted-foreground": { $type: "color", $value: "{semantic.color.content.secondary}", $description: "Muted text. shadcn role: muted-foreground." }, accent: { $type: "color", $value: "{semantic.color.surface.accentSubtle}", $description: "Hover/active tinted bg. shadcn role: accent." }, "accent-foreground": { $type: "color", $value: "{semantic.color.content.accent}", $description: "Text on accent surface. shadcn role: accent-foreground." }, destructive: { $type: "color", $value: "{semantic.color.feedback.error}", $description: "Destructive action surface. shadcn role: destructive." }, "destructive-foreground": { $type: "color", $value: "{semantic.color.content.inverse}", $description: "Text on destructive surface. shadcn role: destructive-foreground." }, border: { $type: "color", $value: "{semantic.color.border.default}", $description: "Default border. shadcn role: border." }, input: { $type: "color", $value: "{semantic.color.border.default}", $description: "Input field border. shadcn role: input." }, ring: { $type: "color", $value: "{semantic.color.border.accent}", $description: "Focus ring color. shadcn role: ring." }, radius: { $type: "dimension", $value: "{semantic.radius.action}", $description: "Default border radius. shadcn role: radius." } }, xt = {
|
|
3525
3544
|
$schema: Ya,
|
|
3526
3545
|
$description: Ua,
|
|
3527
3546
|
primitive: Xa,
|
|
@@ -3851,7 +3870,7 @@ function $t({
|
|
|
3851
3870
|
pathDisplayMode: p,
|
|
3852
3871
|
pathDisplayDepth: l,
|
|
3853
3872
|
pathDisplayLeadingDot: m
|
|
3854
|
-
}) : t, L = !!o || C,
|
|
3873
|
+
}) : t, L = !!o || C, P = s ?? bn(S);
|
|
3855
3874
|
return /* @__PURE__ */ a(
|
|
3856
3875
|
$n,
|
|
3857
3876
|
{
|
|
@@ -3881,9 +3900,9 @@ function $t({
|
|
|
3881
3900
|
Sn,
|
|
3882
3901
|
{
|
|
3883
3902
|
label: z,
|
|
3884
|
-
swatchVar:
|
|
3903
|
+
swatchVar: P,
|
|
3885
3904
|
leadingSlot: d,
|
|
3886
|
-
isColorValue: !!
|
|
3905
|
+
isColorValue: !!P,
|
|
3887
3906
|
isSelected: n,
|
|
3888
3907
|
nowrap: g,
|
|
3889
3908
|
isSourceNode: y,
|
|
@@ -4034,18 +4053,18 @@ class $e extends Dt {
|
|
|
4034
4053
|
) : /* @__PURE__ */ a(ct, { children: r }, d);
|
|
4035
4054
|
}
|
|
4036
4055
|
}
|
|
4037
|
-
const
|
|
4056
|
+
const Pn = {
|
|
4038
4057
|
minHeight: "100vh",
|
|
4039
4058
|
display: "flex",
|
|
4040
4059
|
alignItems: "center",
|
|
4041
4060
|
justifyContent: "center",
|
|
4042
4061
|
fontFamily: i.fontFamily
|
|
4043
4062
|
};
|
|
4044
|
-
function
|
|
4063
|
+
function Tn({
|
|
4045
4064
|
displayText: t = "Oops",
|
|
4046
4065
|
message: e = "Something went wrong"
|
|
4047
4066
|
}) {
|
|
4048
|
-
return /* @__PURE__ */ a("div", { style:
|
|
4067
|
+
return /* @__PURE__ */ a("div", { style: Pn, "data-role": "error-recovery", children: /* @__PURE__ */ a(ee, { padding: "component", children: /* @__PURE__ */ a(
|
|
4049
4068
|
B.div,
|
|
4050
4069
|
{
|
|
4051
4070
|
initial: { opacity: 0, y: 2 },
|
|
@@ -4087,7 +4106,7 @@ function Pn({
|
|
|
4087
4106
|
) }) });
|
|
4088
4107
|
}
|
|
4089
4108
|
function Fr() {
|
|
4090
|
-
return /* @__PURE__ */ a(
|
|
4109
|
+
return /* @__PURE__ */ a(Tn, { displayText: "404", message: "Page not found" });
|
|
4091
4110
|
}
|
|
4092
4111
|
const Or = De.Root;
|
|
4093
4112
|
function Mr({
|
|
@@ -4381,7 +4400,7 @@ const Ur = $.forwardRef(function({ items: e, label: r = "Breadcrumb", className:
|
|
|
4381
4400
|
}
|
|
4382
4401
|
}
|
|
4383
4402
|
}
|
|
4384
|
-
const
|
|
4403
|
+
const P = S[b] ? `${k}-opt-${S[b].value}` : void 0;
|
|
4385
4404
|
return /* @__PURE__ */ h(
|
|
4386
4405
|
re,
|
|
4387
4406
|
{
|
|
@@ -4431,7 +4450,7 @@ const Ur = $.forwardRef(function({ items: e, label: r = "Breadcrumb", className:
|
|
|
4431
4450
|
"aria-expanded": !0,
|
|
4432
4451
|
"aria-controls": D,
|
|
4433
4452
|
"aria-autocomplete": "list",
|
|
4434
|
-
"aria-activedescendant":
|
|
4453
|
+
"aria-activedescendant": P,
|
|
4435
4454
|
"aria-label": s,
|
|
4436
4455
|
placeholder: s,
|
|
4437
4456
|
onChange: (x) => {
|
|
@@ -4511,7 +4530,7 @@ const Ur = $.forwardRef(function({ items: e, label: r = "Breadcrumb", className:
|
|
|
4511
4530
|
`box-shadow ${i.motion.productive.duration}s ${i.motion.productive.easing}`,
|
|
4512
4531
|
`color ${i.motion.productive.duration}s ${i.motion.productive.easing}`
|
|
4513
4532
|
].join(", ")
|
|
4514
|
-
},
|
|
4533
|
+
}, P = {
|
|
4515
4534
|
panel: {
|
|
4516
4535
|
minWidth: 0
|
|
4517
4536
|
},
|
|
@@ -4552,7 +4571,7 @@ const Ur = $.forwardRef(function({ items: e, label: r = "Breadcrumb", className:
|
|
|
4552
4571
|
className: z,
|
|
4553
4572
|
style: {
|
|
4554
4573
|
...L,
|
|
4555
|
-
...
|
|
4574
|
+
...P[s],
|
|
4556
4575
|
...p
|
|
4557
4576
|
},
|
|
4558
4577
|
children: [
|
|
@@ -4760,7 +4779,7 @@ function Zr({
|
|
|
4760
4779
|
style: l,
|
|
4761
4780
|
contentStyle: m
|
|
4762
4781
|
}) {
|
|
4763
|
-
const { currentPath: u } = fe(), f = n ?? [], g = s && u === "/", y = s && f.some((
|
|
4782
|
+
const { currentPath: u } = fe(), f = n ?? [], g = s && u === "/", y = s && f.some((P) => On(u, P.path, c == null ? void 0 : c(P))), [b, v] = W(() => s ? g ? !1 : y : !0);
|
|
4764
4783
|
oe(() => {
|
|
4765
4784
|
if (s) {
|
|
4766
4785
|
if (g) {
|
|
@@ -4789,17 +4808,17 @@ function Zr({
|
|
|
4789
4808
|
},
|
|
4790
4809
|
children: [
|
|
4791
4810
|
t ? /* @__PURE__ */ a("p", { style: { ...D, margin: 0 }, children: t }) : null,
|
|
4792
|
-
/* @__PURE__ */ a("nav", { children: o ?? f.map((
|
|
4811
|
+
/* @__PURE__ */ a("nav", { children: o ?? f.map((P) => /* @__PURE__ */ a(
|
|
4793
4812
|
tt,
|
|
4794
4813
|
{
|
|
4795
4814
|
variant: C,
|
|
4796
|
-
label:
|
|
4797
|
-
href:
|
|
4815
|
+
label: P.label,
|
|
4816
|
+
href: P.path,
|
|
4798
4817
|
level: S,
|
|
4799
|
-
disabled:
|
|
4818
|
+
disabled: P.disabled,
|
|
4800
4819
|
onNavigate: d
|
|
4801
4820
|
},
|
|
4802
|
-
|
|
4821
|
+
P.path
|
|
4803
4822
|
)) })
|
|
4804
4823
|
]
|
|
4805
4824
|
}
|
|
@@ -4818,17 +4837,17 @@ function Zr({
|
|
|
4818
4837
|
marginTop: 0
|
|
4819
4838
|
},
|
|
4820
4839
|
contentStyle: m,
|
|
4821
|
-
children: o ?? f.map((
|
|
4840
|
+
children: o ?? f.map((P) => /* @__PURE__ */ a(
|
|
4822
4841
|
tt,
|
|
4823
4842
|
{
|
|
4824
4843
|
variant: C,
|
|
4825
|
-
label:
|
|
4826
|
-
href:
|
|
4844
|
+
label: P.label,
|
|
4845
|
+
href: P.path,
|
|
4827
4846
|
level: S,
|
|
4828
|
-
disabled:
|
|
4847
|
+
disabled: P.disabled,
|
|
4829
4848
|
onNavigate: d
|
|
4830
4849
|
},
|
|
4831
|
-
|
|
4850
|
+
P.path
|
|
4832
4851
|
))
|
|
4833
4852
|
}
|
|
4834
4853
|
) : L;
|
|
@@ -5286,7 +5305,7 @@ const Xn = Rt(null);
|
|
|
5286
5305
|
function Kn() {
|
|
5287
5306
|
return qt(Xn);
|
|
5288
5307
|
}
|
|
5289
|
-
const
|
|
5308
|
+
const Pt = i.space.px40, Zn = {
|
|
5290
5309
|
content: "var(--semantic-layout-width-content)",
|
|
5291
5310
|
max: "var(--semantic-layout-width-max)"
|
|
5292
5311
|
}, Jn = {
|
|
@@ -5295,7 +5314,7 @@ const Tt = i.space.px40, Zn = {
|
|
|
5295
5314
|
marginLeft: "auto",
|
|
5296
5315
|
marginRight: "auto",
|
|
5297
5316
|
marginTop: 0,
|
|
5298
|
-
paddingTop:
|
|
5317
|
+
paddingTop: Pt,
|
|
5299
5318
|
boxSizing: "border-box"
|
|
5300
5319
|
}
|
|
5301
5320
|
};
|
|
@@ -5329,7 +5348,7 @@ function Qn({
|
|
|
5329
5348
|
}
|
|
5330
5349
|
const er = {
|
|
5331
5350
|
pageWrapper: {
|
|
5332
|
-
paddingTop:
|
|
5351
|
+
paddingTop: Pt,
|
|
5333
5352
|
width: "100%",
|
|
5334
5353
|
maxWidth: "var(--semantic-layout-width-content)",
|
|
5335
5354
|
marginLeft: "auto",
|
|
@@ -5480,7 +5499,7 @@ function ro({ isDark: t }) {
|
|
|
5480
5499
|
children: [
|
|
5481
5500
|
"Product Designer focused on design and visual systems at scale. I build modular libraries, frameworks and visual languages that drive efficiency and consistency across complex ecosystems. Currently building",
|
|
5482
5501
|
" ",
|
|
5483
|
-
/* @__PURE__ */ a(
|
|
5502
|
+
/* @__PURE__ */ a(Pa, { href: "/case-studies/hirobius", children: "Hirobius" }),
|
|
5484
5503
|
", a code-first design system that powers this site."
|
|
5485
5504
|
]
|
|
5486
5505
|
}
|
|
@@ -5515,8 +5534,8 @@ export {
|
|
|
5515
5534
|
Ce as Button,
|
|
5516
5535
|
fr as Callout,
|
|
5517
5536
|
ce as Card,
|
|
5518
|
-
|
|
5519
|
-
|
|
5537
|
+
Ti as CardBody,
|
|
5538
|
+
Pi as CardDescription,
|
|
5520
5539
|
zi as CardFooter,
|
|
5521
5540
|
Ci as CardHeader,
|
|
5522
5541
|
Ii as CardMetric,
|
|
@@ -5543,14 +5562,14 @@ export {
|
|
|
5543
5562
|
kr as DocLinkCard,
|
|
5544
5563
|
Br as EmptyState,
|
|
5545
5564
|
$e as ErrorBoundary,
|
|
5546
|
-
|
|
5565
|
+
Tn as ErrorPattern,
|
|
5547
5566
|
yr as Field,
|
|
5548
5567
|
mo as Form,
|
|
5549
5568
|
ho as FormField,
|
|
5550
5569
|
go as FormFieldShell,
|
|
5551
5570
|
Kr as FoundationSwatch,
|
|
5552
5571
|
ii as Grid,
|
|
5553
|
-
|
|
5572
|
+
Tr as HdsCheckbox,
|
|
5554
5573
|
zr as HdsRadio,
|
|
5555
5574
|
po as HdsRouterProvider,
|
|
5556
5575
|
Dr as HdsSlider,
|
|
@@ -5561,8 +5580,8 @@ export {
|
|
|
5561
5580
|
I as Icon,
|
|
5562
5581
|
ke as IconButton,
|
|
5563
5582
|
ro as InfoPage,
|
|
5564
|
-
|
|
5565
|
-
|
|
5583
|
+
Pr as InlineCode,
|
|
5584
|
+
Pa as InlineLink,
|
|
5566
5585
|
Da as Input,
|
|
5567
5586
|
V as Menu,
|
|
5568
5587
|
Zr as NavGroup,
|
|
@@ -5598,7 +5617,7 @@ export {
|
|
|
5598
5617
|
w as cn,
|
|
5599
5618
|
Nn as defaultActivityEvents,
|
|
5600
5619
|
i as hds,
|
|
5601
|
-
|
|
5620
|
+
Ta as inputVariants,
|
|
5602
5621
|
Mn as paginationRange,
|
|
5603
5622
|
Ea as progressTrackVariants,
|
|
5604
5623
|
Ba as skeletonVariants,
|