@hirobius/design-system 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +123 -0
- package/CONSUMING.md +4 -2
- package/DESIGN.md +28 -17
- package/NOTICE.md +1 -1
- package/README.md +37 -5
- package/dist/chunks/empty-state-DNoThgfV.js +1227 -0
- package/dist/chunks/form-By82qZcC.js +66 -0
- package/dist/fonts/geist-mono-400.woff2 +0 -0
- package/dist/fonts/satoshi-400.woff2 +0 -0
- package/dist/fonts/satoshi-500.woff2 +0 -0
- package/dist/fonts/satoshi-700.woff2 +0 -0
- package/dist/fonts.css +53 -0
- package/dist/form.js +1 -1
- package/dist/hirobius-ui.js +876 -877
- package/dist/manifest.js +1 -1
- package/dist/patterns.js +189 -170
- package/dist/styles.css +2 -2
- package/dist/tokens.css +1 -1
- package/dist/tokens.js +136 -57
- package/dist/types/src/app/components/alert-dialog.d.ts +5 -0
- package/dist/types/src/app/components/asset-img.d.ts +1 -0
- package/dist/types/src/app/components/avatar-group.d.ts +1 -0
- package/dist/types/src/app/components/badge.d.ts +1 -1
- package/dist/types/src/app/components/blockquote.d.ts +1 -0
- package/dist/types/src/app/components/button.d.ts +2 -0
- package/dist/types/src/app/components/card.d.ts +3 -2
- package/dist/types/src/app/components/data-table-section.d.ts +1 -0
- package/dist/types/src/app/components/destructive-section.d.ts +1 -0
- package/dist/types/src/app/components/dialog.d.ts +1 -0
- package/dist/types/src/app/components/error-pattern.d.ts +6 -1
- package/dist/types/src/app/components/form-actions.d.ts +1 -0
- package/dist/types/src/app/components/form-control.d.ts +10 -0
- package/dist/types/src/app/components/grid.d.ts +5 -0
- package/dist/types/src/app/components/icon.d.ts +1 -0
- package/dist/types/src/app/components/kbd.d.ts +1 -0
- package/dist/types/src/app/components/metadata-list.d.ts +1 -0
- package/dist/types/src/app/components/metric-tiles.d.ts +1 -0
- package/dist/types/src/app/components/progress.d.ts +1 -1
- package/dist/types/src/app/components/skeleton.d.ts +1 -1
- package/dist/types/src/app/components/stat.d.ts +4 -3
- package/dist/types/src/app/components/status-tile.d.ts +3 -2
- package/dist/types/src/app/components/table.d.ts +5 -0
- package/dist/types/src/app/components/text.d.ts +53 -6
- package/dist/types/src/app/components/timestamp.d.ts +1 -0
- package/dist/types/src/app/data/manifest-types.d.ts +4 -0
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +37 -28
- package/dist/types/src/app/design-system/generated-token-values.d.ts +3 -0
- package/dist/types/src/app/design-system/tokens.d.ts +117 -15
- package/dist/types/src/index.d.ts +43 -40
- package/dist/variables.css +41 -33
- package/docs/CONSUMING.md +63 -39
- package/hirobius.tokens.json +77 -73
- package/llms.txt +158 -50
- package/mcp/catalog.mjs +366 -0
- package/mcp/guide.mjs +315 -0
- package/mcp/hds-mcp.mjs +49 -0
- package/mcp/server.mjs +94 -0
- package/package.json +35 -9
- package/public/hds-manifest.json +348 -254
- package/public/llms/components.txt +4 -3
- package/public/llms/layout.txt +1 -1
- package/public/llms-full.txt +190 -70
- package/public/llms.txt +158 -50
- package/scripts/eslint-plugin-hds/index.d.mts +29 -0
- package/scripts/eslint-plugin-hds/index.mjs +55 -0
- package/scripts/eslint-plugin-hds/package.json +30 -0
- package/scripts/eslint-plugin-hds/rules/no-raw-controls.mjs +47 -0
- package/scripts/eslint-plugin-hds/rules/no-raw-hex.mjs +70 -0
- package/scripts/eslint-plugin-hds/rules/no-raw-px-spacing.mjs +125 -0
- package/scripts/eslint-plugin-hds/rules/prefer-hds-layout-primitive.mjs +54 -0
- package/scripts/eslint-plugin-hds/rules/sx-token-first.mjs +111 -0
- package/scripts/eslint-plugin-hds/rules/utils.mjs +66 -0
- package/src/app/data/component-api.json +114 -53
- package/dist/chunks/empty-state-BBqhCx0S.js +0 -1217
- package/dist/chunks/form-COP3vK9_.js +0 -66
- package/dist/types/src/app/components/status-dot.d.ts +0 -39
package/dist/tokens.js
CHANGED
|
@@ -134,7 +134,8 @@ const a = {
|
|
|
134
134
|
"3xl": "30px",
|
|
135
135
|
"4xl": "36px",
|
|
136
136
|
"5xl": "48px",
|
|
137
|
-
"6xl": "60px"
|
|
137
|
+
"6xl": "60px",
|
|
138
|
+
code: "13px"
|
|
138
139
|
},
|
|
139
140
|
weight: {
|
|
140
141
|
regular: "400",
|
|
@@ -147,7 +148,9 @@ const a = {
|
|
|
147
148
|
tight: "1.25",
|
|
148
149
|
snug: "1.375",
|
|
149
150
|
normal: "1.5",
|
|
150
|
-
relaxed: "1.625"
|
|
151
|
+
relaxed: "1.625",
|
|
152
|
+
display: "1.05",
|
|
153
|
+
body: "1.6"
|
|
151
154
|
},
|
|
152
155
|
letterSpacing: {
|
|
153
156
|
tight: "-0.01em",
|
|
@@ -258,26 +261,12 @@ const a = {
|
|
|
258
261
|
letterSpacing: "var(--semantic-typography-display-letter-spacing)",
|
|
259
262
|
lineHeight: "var(--semantic-typography-display-line-height)"
|
|
260
263
|
},
|
|
261
|
-
|
|
262
|
-
fontFamily: "var(--semantic-typography-
|
|
263
|
-
fontSize: "var(--semantic-typography-
|
|
264
|
-
fontWeight: "var(--semantic-typography-
|
|
265
|
-
letterSpacing: "var(--semantic-typography-
|
|
266
|
-
lineHeight: "var(--semantic-typography-
|
|
267
|
-
},
|
|
268
|
-
h2: {
|
|
269
|
-
fontFamily: "var(--semantic-typography-h2-font-family)",
|
|
270
|
-
fontSize: "var(--semantic-typography-h2-font-size)",
|
|
271
|
-
fontWeight: "var(--semantic-typography-h2-font-weight)",
|
|
272
|
-
letterSpacing: "var(--semantic-typography-h2-letter-spacing)",
|
|
273
|
-
lineHeight: "var(--semantic-typography-h2-line-height)"
|
|
274
|
-
},
|
|
275
|
-
h3: {
|
|
276
|
-
fontFamily: "var(--semantic-typography-h3-font-family)",
|
|
277
|
-
fontSize: "var(--semantic-typography-h3-font-size)",
|
|
278
|
-
fontWeight: "var(--semantic-typography-h3-font-weight)",
|
|
279
|
-
letterSpacing: "var(--semantic-typography-h3-letter-spacing)",
|
|
280
|
-
lineHeight: "var(--semantic-typography-h3-line-height)"
|
|
264
|
+
title: {
|
|
265
|
+
fontFamily: "var(--semantic-typography-title-font-family)",
|
|
266
|
+
fontSize: "var(--semantic-typography-title-font-size)",
|
|
267
|
+
fontWeight: "var(--semantic-typography-title-font-weight)",
|
|
268
|
+
letterSpacing: "var(--semantic-typography-title-letter-spacing)",
|
|
269
|
+
lineHeight: "var(--semantic-typography-title-line-height)"
|
|
281
270
|
},
|
|
282
271
|
body: {
|
|
283
272
|
fontFamily: "var(--semantic-typography-body-font-family)",
|
|
@@ -302,14 +291,6 @@ const a = {
|
|
|
302
291
|
letterSpacing: "var(--semantic-typography-caption-letter-spacing)",
|
|
303
292
|
lineHeight: "var(--semantic-typography-caption-line-height)"
|
|
304
293
|
},
|
|
305
|
-
eyebrow: {
|
|
306
|
-
fontFamily: "var(--semantic-typography-eyebrow-font-family)",
|
|
307
|
-
fontSize: "var(--semantic-typography-eyebrow-font-size)",
|
|
308
|
-
fontWeight: "var(--semantic-typography-eyebrow-font-weight)",
|
|
309
|
-
letterSpacing: "var(--semantic-typography-eyebrow-letter-spacing)",
|
|
310
|
-
lineHeight: "var(--semantic-typography-eyebrow-line-height)",
|
|
311
|
-
textTransform: "var(--semantic-typography-eyebrow-text-transform)"
|
|
312
|
-
},
|
|
313
294
|
mono: {
|
|
314
295
|
fontFamily: "var(--semantic-typography-mono-font-family)",
|
|
315
296
|
fontSize: "var(--semantic-typography-mono-font-size)",
|
|
@@ -538,52 +519,150 @@ const o = "var(--primitive-typography-family-primary)", n = "var(--primitive-typ
|
|
|
538
519
|
}
|
|
539
520
|
},
|
|
540
521
|
typography: {
|
|
522
|
+
/** @deprecated hds#483 — use `typeStyles.ui`.
|
|
523
|
+
* @removeIn 1.0.0 */
|
|
541
524
|
label: i.semantic.typography.ui,
|
|
525
|
+
/** @deprecated hds#483 — use `typeStyles.ui`.
|
|
526
|
+
* @removeIn 1.0.0 */
|
|
542
527
|
labelDescriptive: i.semantic.typography.ui,
|
|
528
|
+
/** @deprecated hds#483 — use `typeStyles.mono`.
|
|
529
|
+
* @removeIn 1.0.0 */
|
|
543
530
|
labelTechnical: i.semantic.typography.mono
|
|
544
531
|
}
|
|
545
532
|
},
|
|
546
533
|
// Each style object spreads directly into a React inline style prop.
|
|
547
534
|
// CSS vars resolve at paint time — no hardcoded pixel values.
|
|
548
535
|
typeStyles: {
|
|
549
|
-
// ──
|
|
550
|
-
//
|
|
551
|
-
//
|
|
552
|
-
// never re-apply textTransform inline. Casing changes are eyebrow-only.
|
|
536
|
+
// ── The 5-role ramp plus mono (hds#483) ───────────────────────────────────
|
|
537
|
+
// display 48 / title 24 / body 16 / ui 14 / caption 12 / mono 13. body, ui
|
|
538
|
+
// and mono carry maxWidth: 60ch. Casing is never changed inline.
|
|
553
539
|
display: i.semantic.typography.display,
|
|
554
|
-
|
|
555
|
-
h2: i.semantic.typography.h2,
|
|
556
|
-
h3: i.semantic.typography.h3,
|
|
540
|
+
title: i.semantic.typography.title,
|
|
557
541
|
body: i.semantic.typography.body,
|
|
558
542
|
ui: i.semantic.typography.ui,
|
|
559
|
-
eyebrow: i.semantic.typography.eyebrow,
|
|
560
|
-
mono: i.semantic.typography.mono,
|
|
561
|
-
// ── Migration aliases → canonical composites ──────────────────────────────
|
|
562
|
-
// Pre-2026-05-04 names map to the new roles. small → ui; the eyebrow-pattern
|
|
563
|
-
// callsites migrate explicitly to typeStyles.eyebrow as part of the
|
|
564
|
-
// ops-dashboard sweep. caption now resolves to its own 12/16 composite
|
|
565
|
-
// (semantic.typography.caption, matching Figma) rather than aliasing ui.
|
|
566
|
-
small: i.semantic.typography.ui,
|
|
567
543
|
caption: i.semantic.typography.caption,
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
544
|
+
mono: i.semantic.typography.mono,
|
|
545
|
+
// ── Deprecated aliases → the six roles ────────────────────────────────────
|
|
546
|
+
// Every pre-cut name still resolves, to the role it now points at.
|
|
547
|
+
/**
|
|
548
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
549
|
+
* @removeIn 1.0.0
|
|
550
|
+
*/
|
|
551
|
+
h1: i.semantic.typography.title,
|
|
552
|
+
/**
|
|
553
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
554
|
+
* @removeIn 1.0.0
|
|
555
|
+
*/
|
|
556
|
+
h2: i.semantic.typography.title,
|
|
557
|
+
/**
|
|
558
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
559
|
+
* @removeIn 1.0.0
|
|
560
|
+
*/
|
|
561
|
+
h3: i.semantic.typography.title,
|
|
562
|
+
/**
|
|
563
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
564
|
+
* @removeIn 1.0.0
|
|
565
|
+
*/
|
|
566
|
+
heading1: i.semantic.typography.title,
|
|
567
|
+
/**
|
|
568
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
569
|
+
* @removeIn 1.0.0
|
|
570
|
+
*/
|
|
571
|
+
heading2: i.semantic.typography.title,
|
|
572
|
+
/**
|
|
573
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
574
|
+
* @removeIn 1.0.0
|
|
575
|
+
*/
|
|
576
|
+
heading3: i.semantic.typography.title,
|
|
577
|
+
/**
|
|
578
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
579
|
+
* @removeIn 1.0.0
|
|
580
|
+
*/
|
|
581
|
+
headingHero: i.semantic.typography.title,
|
|
582
|
+
/**
|
|
583
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
584
|
+
* @removeIn 1.0.0
|
|
585
|
+
*/
|
|
586
|
+
headingSection: i.semantic.typography.title,
|
|
587
|
+
/**
|
|
588
|
+
* @deprecated hds#483 — use `typeStyles.title`.
|
|
589
|
+
* @removeIn 1.0.0
|
|
590
|
+
*/
|
|
591
|
+
display2: i.semantic.typography.title,
|
|
592
|
+
/**
|
|
593
|
+
* @deprecated hds#483 — use `typeStyles.display`.
|
|
594
|
+
* @removeIn 1.0.0
|
|
595
|
+
*/
|
|
574
596
|
displayXl: i.semantic.typography.display,
|
|
597
|
+
/**
|
|
598
|
+
* @deprecated hds#483 — use `typeStyles.display`.
|
|
599
|
+
* @removeIn 1.0.0
|
|
600
|
+
*/
|
|
575
601
|
display1: i.semantic.typography.display,
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
602
|
+
/**
|
|
603
|
+
* @deprecated hds#483 — use `typeStyles.body`.
|
|
604
|
+
* @removeIn 1.0.0
|
|
605
|
+
*/
|
|
580
606
|
body2: i.semantic.typography.body,
|
|
607
|
+
/**
|
|
608
|
+
* @deprecated hds#483 — use `typeStyles.body`.
|
|
609
|
+
* @removeIn 1.0.0
|
|
610
|
+
*/
|
|
581
611
|
bodyLarge: i.semantic.typography.body,
|
|
612
|
+
/**
|
|
613
|
+
* @deprecated hds#483 — use `typeStyles.ui`.
|
|
614
|
+
* @removeIn 1.0.0
|
|
615
|
+
*/
|
|
616
|
+
small: i.semantic.typography.ui,
|
|
617
|
+
/**
|
|
618
|
+
* @deprecated hds#483 — use `typeStyles.ui`.
|
|
619
|
+
* @removeIn 1.0.0
|
|
620
|
+
*/
|
|
582
621
|
bodySmall: i.semantic.typography.ui,
|
|
583
|
-
|
|
584
|
-
|
|
622
|
+
/**
|
|
623
|
+
* @deprecated hds#483 — use `typeStyles.ui`.
|
|
624
|
+
* @removeIn 1.0.0
|
|
625
|
+
*/
|
|
585
626
|
label: i.semantic.typography.ui,
|
|
627
|
+
/**
|
|
628
|
+
* @deprecated hds#483 — use `typeStyles.ui`.
|
|
629
|
+
* @removeIn 1.0.0
|
|
630
|
+
*/
|
|
586
631
|
labelDescriptive: i.semantic.typography.ui,
|
|
632
|
+
/**
|
|
633
|
+
* @deprecated hds#483 — use `typeStyles.caption`.
|
|
634
|
+
* @removeIn 1.0.0
|
|
635
|
+
*/
|
|
636
|
+
eyebrow: i.semantic.typography.caption,
|
|
637
|
+
/**
|
|
638
|
+
* @deprecated hds#483 — use `typeStyles.caption`.
|
|
639
|
+
* @removeIn 1.0.0
|
|
640
|
+
*/
|
|
641
|
+
badge: i.semantic.typography.caption,
|
|
642
|
+
/**
|
|
643
|
+
* @deprecated hds#483 — use `typeStyles.caption`.
|
|
644
|
+
* @removeIn 1.0.0
|
|
645
|
+
*/
|
|
646
|
+
micro: i.semantic.typography.caption,
|
|
647
|
+
/**
|
|
648
|
+
* @deprecated hds#483 — use `typeStyles.mono`.
|
|
649
|
+
* @removeIn 1.0.0
|
|
650
|
+
*/
|
|
651
|
+
technical: i.semantic.typography.mono,
|
|
652
|
+
/**
|
|
653
|
+
* @deprecated hds#483 — use `typeStyles.mono`.
|
|
654
|
+
* @removeIn 1.0.0
|
|
655
|
+
*/
|
|
656
|
+
monoXs: i.semantic.typography.mono,
|
|
657
|
+
/**
|
|
658
|
+
* @deprecated hds#483 — use `typeStyles.mono`.
|
|
659
|
+
* @removeIn 1.0.0
|
|
660
|
+
*/
|
|
661
|
+
monoSm: i.semantic.typography.mono,
|
|
662
|
+
/**
|
|
663
|
+
* @deprecated hds#483 — use `typeStyles.mono`.
|
|
664
|
+
* @removeIn 1.0.0
|
|
665
|
+
*/
|
|
587
666
|
labelTechnical: i.semantic.typography.mono
|
|
588
667
|
},
|
|
589
668
|
// ── Icons ────────────────────────────────────────────────────────────────────
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* AlertDialog — modal confirmation dialog on Radix AlertDialog.
|
|
3
3
|
* @category Overlays
|
|
4
4
|
* @tier primitive
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2035-24
|
|
5
6
|
* @doc-exempt: no Overlays doc page yet — add demo when the overlays page is created
|
|
6
7
|
*
|
|
7
8
|
* Radix AlertDialog (@radix-ui/react-alert-dialog) themed with the overlay role
|
|
@@ -58,6 +59,10 @@ interface AlertDialogComponent extends React.FC<React.ComponentProps<typeof Aler
|
|
|
58
59
|
/**
|
|
59
60
|
* AlertDialog root + parts. Controlled via `open`/`onOpenChange`, or
|
|
60
61
|
* uncontrolled with `defaultOpen`.
|
|
62
|
+
* @usage Confirm a destructive or irreversible action (delete, archive, remove) before it runs, with Cancel and Action buttons.
|
|
63
|
+
* @whenNot A modal that collects input or shows content, or a confirmation after the action is done.
|
|
64
|
+
* @useInstead Dialog a modal with a form or other content
|
|
65
|
+
* @useInstead ToastProvider a brief confirmation after the action
|
|
61
66
|
* @public
|
|
62
67
|
*/
|
|
63
68
|
export declare const AlertDialog: AlertDialogComponent;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Contexts: default, lightbox, and detail.
|
|
4
4
|
* @category Display
|
|
5
5
|
* @tier primitive
|
|
6
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2041-67
|
|
6
7
|
*/
|
|
7
8
|
import { CSSProperties } from 'react';
|
|
8
9
|
import type React from 'react';
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* AvatarGroup — an overlapping cluster of Avatars with an overflow count.
|
|
3
3
|
* @category Display
|
|
4
4
|
* @tier primitive
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2030-63
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
import { type VariantProps } from 'class-variance-authority';
|
|
@@ -22,7 +22,7 @@ export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>,
|
|
|
22
22
|
dot?: boolean;
|
|
23
23
|
/** Dot diameter; used only with `dot`. */
|
|
24
24
|
size?: 'sm' | 'md' | 'lg';
|
|
25
|
-
/** Names
|
|
25
|
+
/** Names a `dot` badge: role="img" with this aria-label. Without it the dot is aria-hidden. A text badge ignores it: put the text in `children`. */
|
|
26
26
|
label?: string;
|
|
27
27
|
}
|
|
28
28
|
/** Compact metadata/status chip. Tone is the only styling input. */
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Blockquote — quoted passage with an optional attribution.
|
|
3
3
|
* @category Typography
|
|
4
4
|
* @tier primitive
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2024-18
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
import { type VariantProps } from 'class-variance-authority';
|
|
@@ -40,6 +40,8 @@ declare const buttonVariants: (props?: ({
|
|
|
40
40
|
type ButtonVariantProps = VariantProps<typeof buttonVariants>;
|
|
41
41
|
/** @public */
|
|
42
42
|
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'disabled'>, Omit<ButtonVariantProps, 'iconOnly'> {
|
|
43
|
+
/** Visual treatment: `primary`, `secondary` or `tertiary`. Defaults to `secondary` (an outline), so pass `primary` for the main action. */
|
|
44
|
+
variant?: ButtonVariantProps['variant'];
|
|
43
45
|
/** Render the button chrome onto a single child element for link semantics. */
|
|
44
46
|
asChild?: boolean;
|
|
45
47
|
/** Optional accessible label used when children are not suitable as the name. */
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* zone (right-aligned, holds <Badge> / <Tag> for status, never raw spans).
|
|
23
23
|
* - Progress: full-width 4px bar in a reserved 16px vertical rail. Owns its
|
|
24
24
|
* spacing — never crowds adjacent prose.
|
|
25
|
-
* - Metric: single label
|
|
25
|
+
* - Metric: single label + big value (title) + optional sub-line.
|
|
26
26
|
* Reserved vertical block. Use multiple side-by-side via flex/grid container.
|
|
27
27
|
* - Body: prose, lists, structured content. NO inline status, progress, or
|
|
28
28
|
* thin colored bars. Group sections via separate <Card.Body> blocks.
|
|
@@ -130,9 +130,10 @@ export interface CardMetricProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
130
130
|
tone?: CardTone;
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
|
-
* Card.Metric — one
|
|
133
|
+
* Card.Metric — one label, a large value and an optional sub-line inside a Card.
|
|
134
134
|
* @usage Show one headline figure (a KPI, a count, a total) with its label inside a Card.
|
|
135
135
|
* @whenNot A metric outside a Card, or several figures that share one label.
|
|
136
|
+
* @useInstead MetricTiles a row of headline numbers with no enclosing Card
|
|
136
137
|
*/
|
|
137
138
|
declare const CardMetric: React.ForwardRefExoticComponent<CardMetricProps & React.RefAttributes<HTMLDivElement>>;
|
|
138
139
|
/**
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* DataTableSection - a titled table with a toolbar, row actions and an empty state.
|
|
3
3
|
* @category Display
|
|
4
4
|
* @tier pattern
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2075-268
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
import { type TableColumn } from './table.js';
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* DestructiveSection - the one place a screen puts an irreversible action.
|
|
3
3
|
* @category Actions
|
|
4
4
|
* @tier pattern
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2076-3
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
/** @public */
|
|
@@ -84,6 +84,7 @@ interface DialogComponent extends React.FC<DialogProps> {
|
|
|
84
84
|
* @useInstead Tooltip a short hint on hover or focus
|
|
85
85
|
* @useInstead Alert a message that needs no reply
|
|
86
86
|
* @useInstead ToastProvider a brief confirmation
|
|
87
|
+
* @useInstead AlertDialog confirming a destructive or irreversible action
|
|
87
88
|
* @slot trigger The element that opens the dialog (Dialog.Trigger).
|
|
88
89
|
* @slot overlay The scrim that dims the page behind the dialog (Dialog.Overlay).
|
|
89
90
|
* @slot surface The modal surface (Dialog.Content).
|
|
@@ -3,8 +3,13 @@ export type ErrorPatternProps = {
|
|
|
3
3
|
displayText?: string;
|
|
4
4
|
/** Supporting message explaining the recovery state to the user. */
|
|
5
5
|
message?: string;
|
|
6
|
+
/**
|
|
7
|
+
* Fill the viewport height and centre the surface in it, for a routed error page.
|
|
8
|
+
* Off by default: the pattern then fits its container and never exceeds it.
|
|
9
|
+
*/
|
|
10
|
+
fullPage?: boolean;
|
|
6
11
|
};
|
|
7
12
|
/**
|
|
8
13
|
* @public
|
|
9
14
|
*/
|
|
10
|
-
export declare function ErrorPattern({ displayText, message, }: ErrorPatternProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function ErrorPattern({ displayText, message, fullPage, }: ErrorPatternProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* FormActions - the footer row of a form: primary right-most, secondary to its left.
|
|
3
3
|
* @category Actions
|
|
4
4
|
* @tier pattern
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2075-87
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
/** @public */
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared width contract for text-entry form controls (Input, Textarea, Select,
|
|
3
|
+
* Combobox, Slider): they fill their container up to a maximum, so a field in
|
|
4
|
+
* a wide Surface does not stretch to 1152px (hds#522).
|
|
5
|
+
*
|
|
6
|
+
* The cap is 40rem by default. Override it per tree or per control by setting
|
|
7
|
+
* the `--hds-form-control-max-width` custom property (any CSS length, or
|
|
8
|
+
* `none`), or pass `className="max-w-none"` where the control takes one.
|
|
9
|
+
*/
|
|
10
|
+
export declare const FORM_CONTROL_WIDTH = "w-full max-w-[var(--hds-form-control-max-width,40rem)]";
|
|
@@ -50,6 +50,11 @@ export interface GridProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
50
50
|
style?: CSSProperties;
|
|
51
51
|
/** Escape hatch: only use when tokenized props cannot express the required wrapper class. */
|
|
52
52
|
className?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Cross-axis alignment of items in a row. Defaults to 'start': items hug their
|
|
55
|
+
* own height. Pass 'stretch' where a row of tiles must share one height.
|
|
56
|
+
*/
|
|
57
|
+
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
53
58
|
/** Element rendered as the outer wrapper. Defaults to 'div'. */
|
|
54
59
|
as?: React.ElementType;
|
|
55
60
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Icon — semantic icon wrapper for Lucide icons.
|
|
3
3
|
* @category Display
|
|
4
4
|
* @tier primitive
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=27-2
|
|
5
6
|
* @usage Draw a Lucide glyph at a size and colour from the design tokens.
|
|
6
7
|
* @whenNot A control someone can activate, or a picture that carries content.
|
|
7
8
|
* @useInstead Button a clickable control, with iconOnly for an icon-only one
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Kbd — inline keyboard key / shortcut hint rendered as a native <kbd>.
|
|
3
3
|
* @category Display
|
|
4
4
|
* @tier primitive
|
|
5
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2026-9
|
|
5
6
|
* @usage Show a keyboard key or shortcut hint inline, as a native kbd element.
|
|
6
7
|
* @whenNot Code samples, or a control that runs the shortcut.
|
|
7
8
|
* @useInstead Text inline code and other typography
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Owner, Updated…). The idiomatic replacement for badge-stickers-on-prose.
|
|
4
4
|
* @category Display
|
|
5
5
|
* @tier pattern
|
|
6
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2041-47
|
|
6
7
|
* @public
|
|
7
8
|
*/
|
|
8
9
|
import * as React from 'react';
|
|
@@ -22,6 +22,7 @@ export interface MetricTileProps extends Omit<React.HTMLAttributes<HTMLDivElemen
|
|
|
22
22
|
* surface at one fixed min-height. Wraps `Card.Metric` (the sibling with the
|
|
23
23
|
* eyebrow / h2 / caption scale) and adds the surface and the fixed height, so a
|
|
24
24
|
* tile needs no enclosing `Card`.
|
|
25
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2075-114
|
|
25
26
|
*/
|
|
26
27
|
export declare const MetricTile: React.ForwardRefExoticComponent<MetricTileProps & React.RefAttributes<HTMLDivElement>>;
|
|
27
28
|
/** @public */
|
|
@@ -15,7 +15,7 @@ declare const progressTrackVariants: (props?: ({
|
|
|
15
15
|
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
16
16
|
declare const PROGRESS_TONES: {
|
|
17
17
|
readonly neutral: {
|
|
18
|
-
readonly bar: "bg-
|
|
18
|
+
readonly bar: "bg-primary";
|
|
19
19
|
readonly ring: "text-primary";
|
|
20
20
|
};
|
|
21
21
|
readonly danger: {
|
|
@@ -18,7 +18,7 @@ type SkeletonVariantProps = VariantProps<typeof skeletonVariants>;
|
|
|
18
18
|
export interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, SkeletonVariantProps {
|
|
19
19
|
/** Explicit width (number → px, or any CSS length). */
|
|
20
20
|
width?: number | string;
|
|
21
|
-
/** Explicit height (number → px, or any CSS length). For `text`, defaults to 1em. */
|
|
21
|
+
/** Explicit height (number → px, or any CSS length). For `text`, defaults to 1em; for `rectangular`, 5rem. */
|
|
22
22
|
height?: number | string;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
@@ -16,9 +16,10 @@ export interface StatProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'c
|
|
|
16
16
|
sub?: React.ReactNode;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Headline metric — large value,
|
|
20
|
-
* @usage Show one
|
|
21
|
-
* @whenNot A figure inside a Card, or a status with a trailing badge.
|
|
19
|
+
* Headline metric — large value, caption label, optional sub-line.
|
|
20
|
+
* @usage Show one headline figure inline, inside prose or a dense list, with its label and an optional sub-line.
|
|
21
|
+
* @whenNot A row of headline numbers on a screen, a figure inside a Card, or a status with a trailing badge.
|
|
22
|
+
* @useInstead MetricTiles a row of headline numbers (one MetricTile per number)
|
|
22
23
|
* @useInstead Card.Metric a figure inside a Card (hds#254 folds Stat into the Card slot)
|
|
23
24
|
* @useInstead StatusTile a titled status with notes and a trailing badge
|
|
24
25
|
*/
|
|
@@ -20,8 +20,9 @@ export interface StatusTileProps extends Omit<React.HTMLAttributes<HTMLDivElemen
|
|
|
20
20
|
* — every tile should look the same so feedback signals stay reserved for
|
|
21
21
|
* genuinely interrupting states.
|
|
22
22
|
* @usage Show a titled status block with optional notes and a trailing badge or affordance.
|
|
23
|
-
* @whenNot A
|
|
24
|
-
* @useInstead
|
|
23
|
+
* @whenNot A headline number (never a value), or a row inside a list.
|
|
24
|
+
* @useInstead MetricTiles a row of headline numbers
|
|
25
|
+
* @useInstead Card.Metric a headline figure inside a Card (hds#254 folds StatusTile into the Card slot)
|
|
25
26
|
* @useInstead StatusListItem a status row inside a list
|
|
26
27
|
*/
|
|
27
28
|
export declare const StatusTile: React.ForwardRefExoticComponent<StatusTileProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -75,6 +75,11 @@ export declare function Table({ columns, rows, caption, captionAction, descripti
|
|
|
75
75
|
* default, compact inside `[data-density="compact"]`); pass a value to fix it.
|
|
76
76
|
*/
|
|
77
77
|
density?: TableDensity;
|
|
78
|
+
/**
|
|
79
|
+
* Drop the scroll region's own inset. On by default: every cell already carries the
|
|
80
|
+
* surface inset, so a padded region doubled it (48px at the edges, hds#522). Pass
|
|
81
|
+
* `flush={false}` to restore the extra region padding.
|
|
82
|
+
*/
|
|
78
83
|
flush?: boolean;
|
|
79
84
|
stickyHeader?: boolean;
|
|
80
85
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @category Typography
|
|
5
5
|
* @tier primitive
|
|
6
|
+
* @figma https://www.figma.com/design/2VgBbVpKiDnu0aftJEVyBQ/HDS-Tokens-Components-Copy?node-id=2022-31
|
|
6
7
|
* @usage Set any text on the type ramp, with the element chosen by `as`.
|
|
7
8
|
* @whenNot Navigation links, or a keyboard hint.
|
|
8
9
|
* @useInstead InlineLink a link inside body copy
|
|
@@ -10,12 +11,58 @@
|
|
|
10
11
|
* @doc-exempt: typography primitive is documented through the Typography ramp page (TypographyPage), not as a standalone component card
|
|
11
12
|
*/
|
|
12
13
|
import { type CSSProperties, type ElementType, type HTMLAttributes, type ReactNode } from 'react';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
/** The six roles of the type ramp, plus the deprecated names that still resolve. */
|
|
15
|
+
export type TextVariant = 'display' | 'title' | 'body' | 'ui' | 'caption' | 'mono'
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated hds#483 — use `title`.
|
|
18
|
+
* @removeIn 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
| 'heading1'
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated hds#483 — use `title`.
|
|
23
|
+
* @removeIn 1.0.0
|
|
24
|
+
*/
|
|
25
|
+
| 'heading2'
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated hds#483 — use `title`.
|
|
28
|
+
* @removeIn 1.0.0
|
|
29
|
+
*/
|
|
30
|
+
| 'heading3'
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated hds#483 — use `mono`.
|
|
33
|
+
* @removeIn 1.0.0
|
|
34
|
+
*/
|
|
35
|
+
| 'technical'
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated hds#483 — use `caption`.
|
|
38
|
+
* @removeIn 1.0.0
|
|
39
|
+
*/
|
|
40
|
+
| 'eyebrow'
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated hds#483 — use `caption`.
|
|
43
|
+
* @removeIn 1.0.0
|
|
44
|
+
*/
|
|
45
|
+
| 'badge'
|
|
46
|
+
/**
|
|
47
|
+
* @deprecated hds#483 — use `body`.
|
|
48
|
+
* @removeIn 1.0.0
|
|
49
|
+
*/
|
|
50
|
+
| 'docLede'
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated hds#483 — use `body`.
|
|
53
|
+
* @removeIn 1.0.0
|
|
54
|
+
*/
|
|
55
|
+
| 'docBody'
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated hds#483 — use `ui`.
|
|
58
|
+
* @removeIn 1.0.0
|
|
59
|
+
*/
|
|
60
|
+
| 'docSmall'
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated hds#483 — use `mono`.
|
|
63
|
+
* @removeIn 1.0.0
|
|
64
|
+
*/
|
|
65
|
+
| 'docCode';
|
|
19
66
|
type TextTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div';
|
|
20
67
|
/** @public */
|
|
21
68
|
export type TextProps = {
|
|
@@ -78,6 +78,8 @@ export type ManifestComponentSpec = {
|
|
|
78
78
|
hidden?: boolean;
|
|
79
79
|
docExempt?: boolean;
|
|
80
80
|
tier?: string;
|
|
81
|
+
/** In the ratified core set (hds#254, ADR-031). Present only as `true`; independent of `tier`. */
|
|
82
|
+
core?: true;
|
|
81
83
|
stability?: 'stable' | 'beta';
|
|
82
84
|
consumers?: string[];
|
|
83
85
|
tokenMapping?: Record<string, string>;
|
|
@@ -129,6 +131,8 @@ export type ManifestApiComponent = {
|
|
|
129
131
|
hidden?: boolean;
|
|
130
132
|
figmaUrl?: string | null;
|
|
131
133
|
description?: string;
|
|
134
|
+
/** In the ratified core set (hds#254, ADR-031). Present only as `true`. */
|
|
135
|
+
core?: true;
|
|
132
136
|
usage?: ManifestUsage;
|
|
133
137
|
keyboard?: ManifestKeyboardEntry[];
|
|
134
138
|
aiRules?: string;
|