@hirobius/design-system 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +4 -4
  2. package/dist/chunks/TokenDisplayContext-B3gxyQN7.js +1 -0
  3. package/dist/chunks/form-DnGRy27o.js +1 -0
  4. package/dist/contexts.js +1 -0
  5. package/dist/form.js +1 -0
  6. package/dist/hirobius-ui.js +5884 -4425
  7. package/dist/manifest.js +8 -8
  8. package/dist/scroll.js +1 -0
  9. package/dist/styles.css +1 -1
  10. package/dist/tokens.css +1 -1
  11. package/dist/tokens.js +40 -22
  12. package/dist/types/src/app/components/alert.d.ts +1 -1
  13. package/dist/types/src/app/components/asset-img.d.ts +1 -1
  14. package/dist/types/src/app/components/bleed.d.ts +1 -1
  15. package/dist/types/src/app/components/card.d.ts +3 -3
  16. package/dist/types/src/app/components/center.d.ts +1 -1
  17. package/dist/types/src/app/components/checkbox.d.ts +1 -2
  18. package/dist/types/src/app/components/cinematic-link.d.ts +8 -3
  19. package/dist/types/src/app/components/cluster.d.ts +1 -1
  20. package/dist/types/src/app/components/code-block.d.ts +1 -1
  21. package/dist/types/src/app/components/component-instance-matrix.d.ts +7 -1
  22. package/dist/types/src/app/components/container.d.ts +1 -1
  23. package/dist/types/src/app/components/cover.d.ts +1 -1
  24. package/dist/types/src/app/components/disclosure.d.ts +1 -1
  25. package/dist/types/src/app/components/doc-link-card.d.ts +1 -1
  26. package/dist/types/src/app/components/error-boundary.d.ts +1 -1
  27. package/dist/types/src/app/components/error-pattern.d.ts +1 -2
  28. package/dist/types/src/app/components/foundation-swatch.d.ts +6 -0
  29. package/dist/types/src/app/components/frame.d.ts +1 -1
  30. package/dist/types/src/app/components/grid.d.ts +2 -2
  31. package/dist/types/src/app/components/heading-stack.d.ts +1 -1
  32. package/dist/types/src/app/components/icon-button.d.ts +1 -2
  33. package/dist/types/src/app/components/image-lightbox.d.ts +1 -2
  34. package/dist/types/src/app/components/inline-code.d.ts +1 -1
  35. package/dist/types/src/app/components/inline-link.d.ts +1 -2
  36. package/dist/types/src/app/components/nav-group.d.ts +1 -1
  37. package/dist/types/src/app/components/nav-item.d.ts +1 -1
  38. package/dist/types/src/app/components/page.d.ts +1 -1
  39. package/dist/types/src/app/components/pin.d.ts +1 -2
  40. package/dist/types/src/app/components/radio.d.ts +1 -2
  41. package/dist/types/src/app/components/reveal.d.ts +1 -2
  42. package/dist/types/src/app/components/segmented-control.d.ts +1 -1
  43. package/dist/types/src/app/components/select.d.ts +29 -0
  44. package/dist/types/src/app/components/sidebar.d.ts +1 -1
  45. package/dist/types/src/app/components/sketch.d.ts +6 -0
  46. package/dist/types/src/app/components/slider.d.ts +1 -2
  47. package/dist/types/src/app/components/stack.d.ts +1 -1
  48. package/dist/types/src/app/components/stepper-field.d.ts +1 -2
  49. package/dist/types/src/app/components/surface.d.ts +1 -1
  50. package/dist/types/src/app/components/switcher.d.ts +1 -1
  51. package/dist/types/src/app/components/toggle.d.ts +1 -2
  52. package/dist/types/src/app/components/token.d.ts +8 -2
  53. package/dist/types/src/app/design-system/generated-token-refs.d.ts +3 -6
  54. package/dist/types/src/app/design-system/generated-token-values.d.ts +2 -6
  55. package/dist/types/src/app/design-system/tokens.d.ts +0 -5
  56. package/dist/types/src/app/layouts/CaseStudyLayout.d.ts +2 -3
  57. package/dist/types/src/app/layouts/DocLayout.d.ts +0 -2
  58. package/dist/types/src/app/layouts/HdsDocsShell.d.ts +72 -0
  59. package/dist/types/src/app/layouts/HdsSystemDocLayout.d.ts +8 -1
  60. package/dist/types/src/index.d.ts +23 -31
  61. package/dist/variables.css +58 -6
  62. package/hirobius.tokens.json +21 -31
  63. package/package.json +34 -22
  64. package/public/hds-manifest.json +1466 -179
  65. /package/dist/types/src/app/components/{lab/tokenUtils.d.ts → tokenUtils.d.ts} +0 -0
package/dist/tokens.js CHANGED
@@ -125,7 +125,6 @@ const a = {
125
125
  mono: ["Geist Mono", "Courier New", "monospace"]
126
126
  },
127
127
  size: {
128
- "2xs": "10px",
129
128
  xs: "13px",
130
129
  sm: "15px",
131
130
  base: "17px",
@@ -138,10 +137,8 @@ const a = {
138
137
  "6xl": "80px"
139
138
  },
140
139
  weight: {
141
- light: "300",
142
140
  regular: "400",
143
141
  medium: "500",
144
- semibold: "600",
145
142
  bold: "700"
146
143
  },
147
144
  lineHeight: {
@@ -153,11 +150,8 @@ const a = {
153
150
  relaxed: "1.625"
154
151
  },
155
152
  letterSpacing: {
156
- tighter: "-0.02em",
157
153
  tight: "-0.01em",
158
154
  normal: "0em",
159
- wide: "0.01em",
160
- wider: "0.02em",
161
155
  caps: "0.06em"
162
156
  }
163
157
  },
@@ -197,10 +191,12 @@ const a = {
197
191
  80: "80px",
198
192
  96: "96px",
199
193
  interactive: {
200
- min: "44px"
194
+ min: "44px",
195
+ minCompact: "24px"
201
196
  },
202
197
  width: {
203
198
  96: "96px",
199
+ 280: "280px",
204
200
  760: "760px",
205
201
  1200: "1200px",
206
202
  "50ch": "50ch"
@@ -399,8 +395,14 @@ const o = "var(--primitive-typography-family-primary)", n = "var(--primitive-typ
399
395
  brandRGB: "30,46,253",
400
396
  white: "var(--primitive-color-neutral-white)",
401
397
  surface: {
402
- page: { dark: "var(--semantic-color-surface-page)", light: "var(--semantic-color-surface-page)" },
403
- raised: { dark: "var(--semantic-color-surface-raised)", light: "var(--semantic-color-surface-raised)" }
398
+ page: {
399
+ dark: "var(--semantic-color-surface-page)",
400
+ light: "var(--semantic-color-surface-page)"
401
+ },
402
+ raised: {
403
+ dark: "var(--semantic-color-surface-raised)",
404
+ light: "var(--semantic-color-surface-raised)"
405
+ }
404
406
  },
405
407
  blue: {
406
408
  50: "var(--primitive-color-blue-50)",
@@ -416,17 +418,28 @@ const o = "var(--primitive-typography-family-primary)", n = "var(--primitive-typ
416
418
  900: "var(--primitive-color-blue-900)"
417
419
  },
418
420
  feedback: {
419
- success: { dark: a.primitive.color.green[400], light: a.primitive.color.green[700] },
420
- warning: { dark: a.primitive.color.amber[400], light: a.primitive.color.amber[800] },
421
- error: { dark: a.primitive.color.red[400], light: a.primitive.color.red[700] },
422
- info: { dark: a.primitive.color.blue[300], light: a.primitive.color.blue[500] }
421
+ success: {
422
+ dark: a.primitive.color.green[400],
423
+ light: a.primitive.color.green[700]
424
+ },
425
+ warning: {
426
+ dark: a.primitive.color.amber[400],
427
+ light: a.primitive.color.amber[800]
428
+ },
429
+ error: {
430
+ dark: a.primitive.color.red[400],
431
+ light: a.primitive.color.red[700]
432
+ },
433
+ info: {
434
+ dark: a.primitive.color.blue[300],
435
+ light: a.primitive.color.blue[500]
436
+ }
423
437
  }
424
438
  },
425
439
  // ── Typography ───────────────────────────────────────────────────────────────
426
440
  fontFamily: o,
427
441
  monoFamily: n,
428
442
  fontSize: {
429
- "2xs": "var(--primitive-typography-size-2xs)",
430
443
  xs: "var(--primitive-typography-size-xs)",
431
444
  sm: "var(--primitive-typography-size-sm)",
432
445
  base: "var(--primitive-typography-size-base)",
@@ -440,7 +453,6 @@ const o = "var(--primitive-typography-family-primary)", n = "var(--primitive-typ
440
453
  fontWeight: {
441
454
  regular: "var(--primitive-typography-weight-regular)",
442
455
  medium: "var(--primitive-typography-weight-medium)",
443
- semibold: "var(--primitive-typography-weight-semibold)",
444
456
  bold: "var(--primitive-typography-weight-bold)"
445
457
  },
446
458
  lineHeight: {
@@ -452,11 +464,8 @@ const o = "var(--primitive-typography-family-primary)", n = "var(--primitive-typ
452
464
  relaxed: "var(--primitive-typography-lineHeight-relaxed)"
453
465
  },
454
466
  letterSpacing: {
455
- tighter: "var(--primitive-typography-letterSpacing-tighter)",
456
467
  tight: "var(--primitive-typography-letterSpacing-tight)",
457
- normal: "var(--primitive-typography-letterSpacing-normal)",
458
- wide: "var(--primitive-typography-letterSpacing-wide)",
459
- wider: "var(--primitive-typography-letterSpacing-wider)"
468
+ normal: "var(--primitive-typography-letterSpacing-normal)"
460
469
  },
461
470
  semantic: {
462
471
  color: {
@@ -547,12 +556,21 @@ const o = "var(--primitive-typography-family-primary)", n = "var(--primitive-typ
547
556
  labelTechnical: i.semantic.typography.mono
548
557
  },
549
558
  // ── Icons ────────────────────────────────────────────────────────────────────
559
+ // Sized off primitive.size, NOT the type ramp. An icon is geometry: it sits
560
+ // beside text, it does not scale with it. These were pointed at
561
+ // typography.size.base/lg/xl, which happened to read 16/20/24 — so the
562
+ // coupling was invisible until the ramp moved. Rescaling the ramp (hds#283)
563
+ // would have silently shrunk every medium icon 20→18 and every large 24→20,
564
+ // for no typographic reason, and no gate would have said a word.
565
+ //
566
+ // component.button.size.*.iconSize already referenced primitive.size; this
567
+ // brings the global bridge in line with what the component tokens do.
550
568
  iconSize: {
551
- small: "var(--primitive-typography-size-base)",
569
+ small: "var(--primitive-size-16)",
552
570
  // 16px — default icon size
553
- medium: "var(--primitive-typography-size-lg)",
571
+ medium: "var(--primitive-size-20)",
554
572
  // 20px — prominent icons
555
- large: "var(--primitive-typography-size-xl)"
573
+ large: "var(--primitive-size-24)"
556
574
  // 24px — hero / large empty states
557
575
  },
558
576
  // ── Density-aware spacing ────────────────────────────────────────────────────
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
  type AlertTone = 'success' | 'danger' | 'warning' | 'info';
9
- interface AlertProps {
9
+ export interface AlertProps {
10
10
  /** Feedback tone that controls icon, border, and surface treatment. */
11
11
  tone?: AlertTone;
12
12
  /** Optional heading shown above the body copy. */
@@ -7,7 +7,7 @@
7
7
  import { CSSProperties } from 'react';
8
8
  import type React from 'react';
9
9
  type AssetImgContext = 'default' | 'lightbox' | 'detail';
10
- interface AssetImgProps {
10
+ export interface AssetImgProps {
11
11
  /** Image source path. */
12
12
  src: string;
13
13
  /** Accessible alt text. */
@@ -20,7 +20,7 @@
20
20
  import React from 'react';
21
21
  type LayoutGap = 'tight' | 'normal' | 'inset' | 'spacious';
22
22
  type BleedAxis = 'x' | 'y' | 'both';
23
- interface BleedProps {
23
+ export interface BleedProps {
24
24
  /** Bleed content. */
25
25
  children: React.ReactNode;
26
26
  /** Semantic space step to negate. Defaults to 'normal'. */
@@ -89,7 +89,7 @@ interface CardComponent extends React.ForwardRefExoticComponent<CardProps & Reac
89
89
  Progress: typeof CardProgress;
90
90
  Metric: typeof CardMetric;
91
91
  }
92
- interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
92
+ export interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
93
93
  /** Top-of-card metadata zone — status badges, tags, eyebrow labels.
94
94
  * Accepts <Badge>, <Tag>, or compound nodes. NEVER pass raw spans
95
95
  * with status colors here; use the proper primitive so tone, padding,
@@ -104,7 +104,7 @@ declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HT
104
104
  declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
105
105
  declare const CardBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
106
106
  declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
107
- interface CardProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'aria-valuemin' | 'aria-valuemax' | 'aria-valuenow'> {
107
+ export interface CardProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'aria-valuemin' | 'aria-valuemax' | 'aria-valuenow'> {
108
108
  /** Current value (0..max). */
109
109
  value: number;
110
110
  /** Maximum value. Defaults to 100. */
@@ -118,7 +118,7 @@ interface CardProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, '
118
118
  tone?: CardTone;
119
119
  }
120
120
  declare const CardProgress: React.ForwardRefExoticComponent<CardProgressProps & React.RefAttributes<HTMLDivElement>>;
121
- interface CardMetricProps extends React.HTMLAttributes<HTMLDivElement> {
121
+ export interface CardMetricProps extends React.HTMLAttributes<HTMLDivElement> {
122
122
  /** Uppercase eyebrow label (e.g. "Retainer", "Open tasks"). */
123
123
  label: React.ReactNode;
124
124
  /** Big value (e.g. "$3,500", "12", "67%"). Rendered at h2 weight. */
@@ -17,7 +17,7 @@
17
17
  import React from 'react';
18
18
  type CenterMaxWidth = 'content' | 'max';
19
19
  type LayoutGap = 'tight' | 'normal' | 'inset' | 'spacious';
20
- interface CenterProps {
20
+ export interface CenterProps {
21
21
  /** Center content. */
22
22
  children: React.ReactNode;
23
23
  /** Max width: 'content' (760px prose) | 'max' (1200px full layouts). Defaults to 'content'. */
@@ -7,7 +7,7 @@
7
7
  import type { InputHTMLAttributes } from 'react';
8
8
  /** HdsCheckbox — custom-drawn checkbox with check / indeterminate glyph. */
9
9
  export type HdsCheckboxDemoState = 'rest' | 'hover' | 'focused' | 'pressed' | 'disabled';
10
- interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'onChange'> {
10
+ export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'onChange'> {
11
11
  /** Checkbox label displayed next to the control. */
12
12
  label: string;
13
13
  /** Current checked state. */
@@ -18,4 +18,3 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'typ
18
18
  indeterminate?: boolean;
19
19
  }
20
20
  export declare const HdsCheckbox: import("react").ForwardRefExoticComponent<CheckboxProps & import("react").RefAttributes<HTMLInputElement>>;
21
- export {};
@@ -4,10 +4,15 @@
4
4
  * @tier primitive
5
5
  */
6
6
  import React from 'react';
7
- interface CinematicLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {
7
+ export interface CinematicLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {
8
8
  href: string;
9
9
  children: string;
10
10
  }
11
- /** @public */
11
+ /**
12
+ * CinematicLink - cinematic editorial link treatment for portfolio surfaces.
13
+ *
14
+ * @public
15
+ * @deprecated CinematicLink is an HDS docs/lab internal (editorial link treatment for portfolio/case-study specimen surfaces), not a consumer-facing HDS surface. It will be retiered to `utility` (dropped from the published barrel) at the named major.
16
+ * @removeIn 1.0.0
17
+ */
12
18
  export declare function CinematicLink({ href, children, style, className, ...rest }: CinematicLinkProps): import("react/jsx-runtime").JSX.Element;
13
- export {};
@@ -18,7 +18,7 @@ import React from 'react';
18
18
  type LayoutGap = 'tight' | 'normal' | 'inset' | 'spacious';
19
19
  type ClusterAlign = 'start' | 'center' | 'end' | 'stretch';
20
20
  type ClusterJustify = 'start' | 'center' | 'end' | 'space-between';
21
- interface ClusterProps {
21
+ export interface ClusterProps {
22
22
  /** Cluster content — items that wrap as a unit. */
23
23
  children: React.ReactNode;
24
24
  /** Gap token applied to both axes (row and column). Defaults to 'tight'. */
@@ -21,7 +21,7 @@ declare const blockCodeTextVariants: (props?: import("class-variance-authority/d
21
21
  declare const prePanelVariants: (props?: {
22
22
  panelBackground?: boolean;
23
23
  } & import("class-variance-authority/dist/types").ClassProp) => string;
24
- interface CodeBlockProps {
24
+ export interface CodeBlockProps {
25
25
  /** Code string displayed in the block. */
26
26
  code: string;
27
27
  /** Visual presentation mode for block snippets vs inline single-line code. */
@@ -6,7 +6,13 @@
6
6
  * @doc-exempt: specimen matrix helper used by docs pages, not a consumer-facing HDS surface.
7
7
  */
8
8
  import React from 'react';
9
- /** @public */
9
+ /**
10
+ * ComponentInstanceMatrix — responsive specimen matrix for variant and state parity.
11
+ *
12
+ * @public
13
+ * @deprecated ComponentInstanceMatrix is an HDS docs/lab internal (specimen matrix helper for the component doc pages), not a consumer-facing HDS surface. It will be retiered to `utility` (dropped from the published barrel) at the named major.
14
+ * @removeIn 1.0.0
15
+ */
10
16
  export declare function ComponentInstanceMatrix({ componentName, dimensionX, dimensionY, title, isMobile: _isMobile, rowLabelWidth: _rowLabelWidth, rowLabelTone, freezeRowState, renderInstance, }: {
11
17
  componentName: string;
12
18
  dimensionX: string;
@@ -24,7 +24,7 @@
24
24
  */
25
25
  import type { ReactNode, CSSProperties } from 'react';
26
26
  type MaxWidthOption = 'content' | 'max';
27
- interface ContainerProps {
27
+ export interface ContainerProps {
28
28
  /** Container content. */
29
29
  children: ReactNode;
30
30
  /** Max width: 'content' (760px for prose) | 'max' (1200px for full layouts). Defaults to 'max'. */
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import React from 'react';
20
20
  type LayoutGap = 'tight' | 'normal' | 'inset' | 'spacious';
21
- interface CoverProps {
21
+ export interface CoverProps {
22
22
  /** The centered main region — takes the remaining space via auto margins. Also available as `centerSlot`. */
23
23
  children?: React.ReactNode;
24
24
  /** Alias for `children` — the centered main region. If both are set, `centerSlot` wins. */
@@ -9,7 +9,7 @@ type DisclosureVariant = 'panel' | 'nav' | 'card';
9
9
  declare const disclosureTriggerVariants: (props?: {
10
10
  variant?: "nav" | "panel" | "card";
11
11
  } & import("class-variance-authority/dist/types").ClassProp) => string;
12
- type DisclosureProps = {
12
+ export type DisclosureProps = {
13
13
  /** Summary label rendered in the disclosure trigger. Accepts a string or ReactNode for icon+label combos. */
14
14
  label: ReactNode;
15
15
  /** Whether the disclosure starts in the open state. */
@@ -1,5 +1,5 @@
1
1
  import { type LucideIcon } from 'lucide-react';
2
- interface DocLinkCardProps {
2
+ export interface DocLinkCardProps {
3
3
  /** Primary title displayed in the card. */
4
4
  title: string;
5
5
  /** Supporting body copy shown below the title. */
@@ -6,7 +6,7 @@
6
6
  * @doc-exempt: runtime safety infra, not an LLM-facing layout primitive
7
7
  */
8
8
  import { Component, type ErrorInfo, type ReactNode } from 'react';
9
- interface ErrorBoundaryProps {
9
+ export interface ErrorBoundaryProps {
10
10
  children: ReactNode;
11
11
  slotLabel?: string;
12
12
  minHeight?: string;
@@ -1,4 +1,4 @@
1
- type ErrorPatternProps = {
1
+ export type ErrorPatternProps = {
2
2
  /** Large recovery headline rendered through the animated cascade treatment. */
3
3
  displayText?: string;
4
4
  /** Supporting message explaining the recovery state to the user. */
@@ -6,4 +6,3 @@ type ErrorPatternProps = {
6
6
  };
7
7
  /** @public */
8
8
  export declare function ErrorPattern({ displayText, message, }: ErrorPatternProps): import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -35,5 +35,11 @@ export type FoundationSwatchProps = {
35
35
  /** Explicit color value (hex or CSS var name) to pin the token chip's swatch square, overriding auto-resolution from tokenPath. */
36
36
  swatchVar?: string;
37
37
  };
38
+ /**
39
+ * FoundationSwatch - governed foundation specimen for color and semantic role previews.
40
+ *
41
+ * @deprecated FoundationSwatch is an HDS docs/lab internal (foundation specimen preview for the token/foundation doc pages), not a consumer-facing HDS surface. It will be retiered to `utility` (dropped from the published barrel) at the named major.
42
+ * @removeIn 1.0.0
43
+ */
38
44
  export declare function FoundationSwatch({ label, hidePreviewLabel, tokenPath, tokenDisplayPreset, previewPosition, background, value, details, foreground, specimen, note, bordered, swatchVar, }: FoundationSwatchProps): import("react/jsx-runtime").JSX.Element;
39
45
  export {};
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import React from 'react';
21
21
  type FrameRadius = 'none' | 'sm' | 'md' | 'full';
22
- interface FrameProps {
22
+ export interface FrameProps {
23
23
  /** Media rendered inside the locked-ratio, clipped frame. */
24
24
  children: React.ReactNode;
25
25
  /** Desired width-to-height ratio, e.g. `16 / 9`. Defaults to `16 / 9`. */
@@ -27,7 +27,7 @@
27
27
  import React, { type ReactNode, type CSSProperties } from 'react';
28
28
  type SemanticGap = 'tight' | 'normal' | 'inset' | 'spacious';
29
29
  type GridLayout = 'fixed' | 'auto-fit';
30
- interface GridProps {
30
+ export interface GridProps {
31
31
  /** Grid content. */
32
32
  children: ReactNode;
33
33
  /** Grid layout mode: 'fixed' (responsive) or 'auto-fit' (card wrapping). Defaults to 'fixed'. */
@@ -45,7 +45,7 @@ interface GridProps {
45
45
  /** Element rendered as the outer wrapper. Defaults to 'div'. */
46
46
  as?: React.ElementType;
47
47
  }
48
- interface GridItemProps {
48
+ export interface GridItemProps {
49
49
  children: ReactNode;
50
50
  /** Number of columns this item spans (out of the grid's column count). */
51
51
  colSpan?: number;
@@ -30,7 +30,7 @@ type HdsHeadingLevel = NonNullable<HeadingStackLevelVariantProps['level']>;
30
30
  type HdsHeadingGap = NonNullable<HeadingStackGapVariantProps['gap']>;
31
31
  type HdsHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
32
32
  type HdsSupportingTag = 'p' | 'div' | 'span';
33
- interface HeadingStackProps {
33
+ export interface HeadingStackProps {
34
34
  /** The heading content (string). */
35
35
  heading: string;
36
36
  /** The supporting copy rendered beneath the heading. */
@@ -1,7 +1,7 @@
1
1
  import type { LucideIcon } from 'lucide-react';
2
2
  import { ButtonProps } from './button.js';
3
3
  import { IconSize } from './icon.js';
4
- interface IconButtonProps extends Omit<ButtonProps, 'iconOnly' | 'children' | 'size'> {
4
+ export interface IconButtonProps extends Omit<ButtonProps, 'iconOnly' | 'children' | 'size'> {
5
5
  /** Lucide icon rendered inside the button. */
6
6
  icon: LucideIcon;
7
7
  /** Size token for the button itself. */
@@ -20,4 +20,3 @@ interface IconButtonProps extends Omit<ButtonProps, 'iconOnly' | 'children' | 's
20
20
  */
21
21
  /** @public */
22
22
  export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
23
- export {};
@@ -1,4 +1,4 @@
1
- interface LightboxProps {
1
+ export interface LightboxProps {
2
2
  open: boolean;
3
3
  onClose: () => void;
4
4
  src: string;
@@ -10,4 +10,3 @@ interface LightboxProps {
10
10
  captionLabel?: string;
11
11
  }
12
12
  export declare function Lightbox({ open, onClose, src, alt, naturalWidth, naturalHeight, caption, captionHref, captionLabel, }: LightboxProps): import("react/jsx-runtime").JSX.Element;
13
- export {};
@@ -4,7 +4,7 @@ declare const inlineCodeVariants: (props?: {
4
4
  density?: "compact" | "comfortable";
5
5
  } & import("class-variance-authority/dist/types").ClassProp) => string;
6
6
  type InlineCodeVariantProps = VariantProps<typeof inlineCodeVariants>;
7
- type InlineCodeProps = {
7
+ export type InlineCodeProps = {
8
8
  children: ReactNode;
9
9
  style?: CSSProperties;
10
10
  /** Layout density. `compact` tightens vertical rhythm for dense body copy and table prose. Defaults to `comfortable`. */
@@ -5,7 +5,7 @@
5
5
  * @figma https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=89-161
6
6
  */
7
7
  import React from 'react';
8
- interface InlineLinkProps {
8
+ export interface InlineLinkProps {
9
9
  /** Destination route or URL. */
10
10
  href: string;
11
11
  /** Inline label or content to render inside the link. */
@@ -15,4 +15,3 @@ interface InlineLinkProps {
15
15
  }
16
16
  /** @public */
17
17
  export declare function InlineLink({ href, children, externalIcon }: InlineLinkProps): import("react/jsx-runtime").JSX.Element;
18
- export {};
@@ -10,7 +10,7 @@ type NavGroupVariant = 'side' | 'toc';
10
10
  declare const navGroupLabelVariants: (props?: {
11
11
  variant?: "side" | "toc";
12
12
  } & import("class-variance-authority/dist/types").ClassProp) => string;
13
- type NavGroupProps = {
13
+ export type NavGroupProps = {
14
14
  label?: string;
15
15
  variant?: NavGroupVariant;
16
16
  level?: NavLevel;
@@ -11,7 +11,7 @@ declare const navIndicatorVariants: (props?: {
11
11
  type NavItemVariantProps = VariantProps<typeof navItemVariants>;
12
12
  type NavVariant = NonNullable<NavItemVariantProps['variant']>;
13
13
  type NavNativeProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children' | 'onClick'>;
14
- interface NavProps extends NavNativeProps {
14
+ export interface NavProps extends NavNativeProps {
15
15
  /** Visual layout variant for side nav or table of contents usage. */
16
16
  variant?: NavVariant;
17
17
  /** Text label displayed inside the navigation row. */
@@ -28,7 +28,7 @@
28
28
  import type { ReactNode, CSSProperties } from 'react';
29
29
  type MaxWidth = 'content' | 'max';
30
30
  type PaddingY = 'default' | 'compact' | 'none';
31
- interface PageProps {
31
+ export interface PageProps {
32
32
  children: ReactNode;
33
33
  /** Max width: 'content' (760px for prose) | 'max' (1200px). Defaults to 'max'. */
34
34
  maxWidth?: MaxWidth;
@@ -13,7 +13,7 @@
13
13
  * `@hirobius/design-system/scroll`. See ADR-021.
14
14
  */
15
15
  import React from 'react';
16
- interface PinProps {
16
+ export interface PinProps {
17
17
  /** Content pinned within the scroll region. */
18
18
  children: React.ReactNode;
19
19
  /** Sticky offset from the top of the scroll region (CSS length). Defaults to '0'. */
@@ -27,4 +27,3 @@ interface PinProps {
27
27
  }
28
28
  /** @public */
29
29
  export declare const Pin: React.ForwardRefExoticComponent<PinProps & React.RefAttributes<HTMLDivElement>>;
30
- export {};
@@ -7,7 +7,7 @@
7
7
  import type { InputHTMLAttributes } from 'react';
8
8
  /** HdsRadio — radio button with animated selection indicator. */
9
9
  export type HdsRadioDemoState = 'rest' | 'hover' | 'focused' | 'pressed' | 'disabled';
10
- interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'onChange'> {
10
+ export interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'onChange'> {
11
11
  /** Radio label displayed next to the control. */
12
12
  label: string;
13
13
  /** Current checked state. */
@@ -16,4 +16,3 @@ interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'
16
16
  onChange: (v: boolean) => void;
17
17
  }
18
18
  export declare const HdsRadio: import("react").ForwardRefExoticComponent<RadioProps & import("react").RefAttributes<HTMLInputElement>>;
19
- export {};
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import React from 'react';
16
16
  export type RevealAnimation = 'fade' | 'fade-up' | 'fade-down' | 'scale';
17
- interface RevealProps {
17
+ export interface RevealProps {
18
18
  /** Content revealed as it scrolls into view. */
19
19
  children: React.ReactNode;
20
20
  /** Entrance animation. Defaults to 'fade-up'. */
@@ -28,4 +28,3 @@ interface RevealProps {
28
28
  }
29
29
  /** @public */
30
30
  export declare const Reveal: React.ForwardRefExoticComponent<RevealProps & React.RefAttributes<HTMLDivElement>>;
31
- export {};
@@ -39,7 +39,7 @@ interface HdsSegmentedOption {
39
39
  /** Optional supporting description shown below the label. */
40
40
  description?: string;
41
41
  }
42
- interface SegmentedControlProps {
42
+ export interface SegmentedControlProps {
43
43
  /** Accessible label for the control. */
44
44
  label?: string;
45
45
  /** Accessible label when no visible label should be rendered. */
@@ -0,0 +1,29 @@
1
+ /**
2
+ * HdsSelect — dropdown selector built on Radix Select.
3
+ * @category Inputs
4
+ * @tier primitive
5
+ * @figma https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-49
6
+ */
7
+ /**
8
+ * HdsSelect — dropdown selector built on Radix Select (ADR-001 Radix convention).
9
+ * Radix owns the listbox a11y contract: managed focus + active-descendant, typeahead,
10
+ * full keyboard (Home/End/PageUp-Down/wrap), Popper collision/flip positioning, and
11
+ * dismissal. The HDS surface is styled with the token-backed Tailwind idiom used by
12
+ * tabs.tsx / command-palette.tsx; `ref` targets the trigger button.
13
+ */
14
+ export interface SelectProps {
15
+ /** Select label rendered above the control. */
16
+ label: string;
17
+ /** Controls whether the label is rendered. */
18
+ showLabel?: boolean;
19
+ /** Select options displayed in the dropdown. */
20
+ options: {
21
+ value: string;
22
+ label: string;
23
+ }[];
24
+ /** Currently selected value. */
25
+ value: string;
26
+ /** Called when the user picks a different option. */
27
+ onChange: (v: string) => void;
28
+ }
29
+ export declare const HdsSelect: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -22,7 +22,7 @@
22
22
  import React from 'react';
23
23
  type SidebarSide = 'start' | 'end';
24
24
  type LayoutGap = 'tight' | 'normal' | 'inset' | 'spacious';
25
- interface SidebarProps {
25
+ export interface SidebarProps {
26
26
  /** Exactly two children: the rail first, the fluid content second (DOM order — `side` only changes visual order). */
27
27
  children: [React.ReactNode, React.ReactNode];
28
28
  /** Which visual edge the rail renders on. Defaults to 'start'. */
@@ -10,4 +10,10 @@ export interface SketchProps {
10
10
  children: ReactNode;
11
11
  controls?: ReactNode;
12
12
  }
13
+ /**
14
+ * Sketch — shared shell for generative canvases and WebGL sketches.
15
+ *
16
+ * @deprecated Sketch is an HDS docs/lab internal (shell for generative canvas/WebGL specimen pages), not a consumer-facing HDS surface. It will be retiered to `utility` (dropped from the published barrel) at the named major.
17
+ * @removeIn 1.0.0
18
+ */
13
19
  export declare function Sketch({ title, children, controls }: SketchProps): import("react/jsx-runtime").JSX.Element;
@@ -5,7 +5,7 @@
5
5
  * @figma https://www.figma.com/design/c8MaVgwxOlxm4wr8wnH0Z4/HDS-Tokens-Components?node-id=82-265
6
6
  */
7
7
  /** HdsSlider — range slider with label and value display. */
8
- interface SliderProps {
8
+ export interface SliderProps {
9
9
  /** Slider label. */
10
10
  label: string;
11
11
  /** Minimum value in the range. */
@@ -20,4 +20,3 @@ interface SliderProps {
20
20
  onChange: (v: number) => void;
21
21
  }
22
22
  export declare const HdsSlider: import("react").ForwardRefExoticComponent<SliderProps & import("react").RefAttributes<HTMLInputElement>>;
23
- export {};
@@ -14,7 +14,7 @@ type SectionGap = 'stack';
14
14
  type GapOption = SemanticGap | ComponentGap | SubgridGap | SectionGap | keyof typeof hds.space;
15
15
  type FlexAlign = 'start' | 'center' | 'end' | 'stretch';
16
16
  type FlexJustify = 'start' | 'center' | 'end' | 'space-between';
17
- interface StackProps {
17
+ export interface StackProps {
18
18
  /** Stack content rendered inside the flex wrapper. */
19
19
  children: React.ReactNode;
20
20
  /** Flex direction for the stack. */
@@ -1,4 +1,4 @@
1
- interface StepperFieldProps {
1
+ export interface StepperFieldProps {
2
2
  label: string;
3
3
  value: number;
4
4
  min: number;
@@ -10,4 +10,3 @@ interface StepperFieldProps {
10
10
  }
11
11
  /** @public */
12
12
  export declare function StepperField({ label, value, min, max, step, onChange, inputStep, precision, }: StepperFieldProps): import("react/jsx-runtime").JSX.Element;
13
- export {};
@@ -6,7 +6,7 @@ declare const surfaceVariants: (props?: {
6
6
  shadow?: boolean;
7
7
  } & import("class-variance-authority/dist/types").ClassProp) => string;
8
8
  type SurfaceVariantProps = VariantProps<typeof surfaceVariants>;
9
- interface SurfaceProps extends Omit<HTMLAttributes<HTMLDivElement>, 'style' | 'className'>, Omit<SurfaceVariantProps, 'shadow'> {
9
+ export interface SurfaceProps extends Omit<HTMLAttributes<HTMLDivElement>, 'style' | 'className'>, Omit<SurfaceVariantProps, 'shadow'> {
10
10
  /** Surface content. */
11
11
  children?: ReactNode;
12
12
  /** Padding: 'component' (24px, default) | 'item' (16px) | primitive px values | 'none' (0px). */