@hirobius/design-system 0.22.0 → 0.23.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 +11 -1
- package/CHANGELOG.md +74 -0
- package/CONSUMING.md +2 -2
- package/DESIGN.md +24 -24
- package/NOTICE.md +1 -1
- package/README.md +20 -12
- package/UPGRADING.md +22 -1
- package/dist/chunks/{empty-state-DNoThgfV.js → empty-state-ChC_xZfg.js} +109 -92
- package/dist/chunks/{form-By82qZcC.js → form-zCZ_B83I.js} +16 -16
- package/dist/css-contract.json +1 -0
- package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/dist/fonts.css +5 -5
- package/dist/form.js +1 -1
- package/dist/hirobius-ui.js +1254 -1181
- package/dist/manifest.js +5 -4
- package/dist/patterns.js +164 -162
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/dist/tokens.js +14 -1
- package/dist/types/src/app/components/asset-img.d.ts +1 -0
- package/dist/types/src/app/components/button.d.ts +1 -1
- package/dist/types/src/app/components/callout.d.ts +2 -1
- package/dist/types/src/app/components/card.d.ts +5 -3
- package/dist/types/src/app/components/code-block.d.ts +1 -0
- package/dist/types/src/app/components/combobox.d.ts +1 -1
- 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/divider.d.ts +1 -1
- package/dist/types/src/app/components/form-actions.d.ts +1 -0
- package/dist/types/src/app/components/form.d.ts +1 -0
- package/dist/types/src/app/components/grid.d.ts +1 -1
- package/dist/types/src/app/components/icon.d.ts +1 -1
- package/dist/types/src/app/components/metric-tiles.d.ts +2 -0
- package/dist/types/src/app/components/page-header.d.ts +1 -0
- package/dist/types/src/app/components/page.d.ts +1 -0
- package/dist/types/src/app/components/reveal.d.ts +1 -0
- package/dist/types/src/app/components/stack.d.ts +1 -1
- package/dist/types/src/app/components/tabs.d.ts +3 -1
- package/dist/types/src/app/context/hds-theme.d.ts +1 -1
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +13 -0
- package/dist/types/src/app/design-system/generated-token-values.d.ts +14 -1
- package/dist/types/src/app/hooks/useInteractionState.d.ts +7 -1
- package/dist/types/src/index.d.ts +47 -0
- package/dist/variables.css +33 -22
- package/docs/CONSUMING.md +2 -2
- package/hirobius.tokens.json +87 -40
- package/llms.txt +29 -7
- package/package.json +7 -6
- package/public/hds-manifest.json +257 -99
- package/public/llms/components.txt +1 -1
- package/public/llms-full.txt +54 -32
- package/public/llms.txt +29 -7
- package/src/app/data/component-api.json +51 -18
- package/upgrade/index.json +8 -1
- package/upgrade/releases/0.23.0.json +259 -0
- package/upgrade/schema.json +114 -1
- package/dist/fonts/geist-mono-400.woff2 +0 -0
|
@@ -108,7 +108,7 @@ Triggers an action when activated.
|
|
|
108
108
|
- variant: "primary" | "secondary" | "tertiary" | null
|
|
109
109
|
|
|
110
110
|
### Callout
|
|
111
|
-
Tone-driven
|
|
111
|
+
Tone-driven tinted callout for notes, quotes, hypotheses — the same feedback fill language as Alert, without Alert's icon or status role.
|
|
112
112
|
- italic: boolean = false
|
|
113
113
|
- tone: 'accent' | 'info' | 'success' | 'warning' | 'danger' = info
|
|
114
114
|
|
package/public/llms-full.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hirobius Design System
|
|
2
2
|
|
|
3
|
-
Generated: 2026-10-
|
|
3
|
+
Generated: 2026-10-09T14:36:17.779Z
|
|
4
4
|
Primary sources: `public/hds-manifest.json`, `src/app/data/component-api.json`, `hirobius.tokens.json`
|
|
5
5
|
|
|
6
6
|
## Agents Using The Package: Start Here
|
|
@@ -9,6 +9,16 @@ Primary sources: `public/hds-manifest.json`, `src/app/data/component-api.json`,
|
|
|
9
9
|
- MCP server `hds` ships in the package: run `npx hds-mcp` (stdio). Tools: `list_core`, `search_components`, `get_component`, `search_tokens`; each answer is under 2 KB.
|
|
10
10
|
- Lint before you finish: `import hds from '@hirobius/design-system/eslint-plugin'` and spread `hds.configs.recommended` into `eslint.config.mjs`.
|
|
11
11
|
|
|
12
|
+
## Voice
|
|
13
|
+
|
|
14
|
+
How these docs speak. Every page, and every agent writing for HDS, follows it. Source: `content/docs/voice.mdx` (published at `/docs/voice`).
|
|
15
|
+
|
|
16
|
+
- Use plain words a reader already knows. Name a thing by what it does, not by how it is built.
|
|
17
|
+
- Keep sentences short, one idea each.
|
|
18
|
+
- Tell the reader what to do. Leave out brand adjectives.
|
|
19
|
+
- Keep maintainer references off public pages: issue and ADR numbers, script names, internal counts.
|
|
20
|
+
- Don't use: "systems-first".
|
|
21
|
+
|
|
12
22
|
## Pick By Need
|
|
13
23
|
|
|
14
24
|
One answer per need. Use the components after the arrow; what follows "Not:" is what agents reached for instead, which is the wrong answer for that need even where it has a purpose of its own. Generated from `mcp/guide.mjs`, the same list as `AGENTS.md`.
|
|
@@ -149,42 +159,54 @@ One line per component that declares when to use it (`@usage` / `@useInstead` in
|
|
|
149
159
|
|
|
150
160
|
Alert: [core] Show a persistent inline message with a severity, next to the content it concerns. Use instead: ToastProvider, Badge
|
|
151
161
|
AlertDialog: Confirm a destructive or irreversible action (delete, archive, remove) before it runs, with Cancel and Action buttons. Use instead: Dialog, ToastProvider
|
|
162
|
+
AssetImg: Show an image that scales to its frame, with a placeholder if it fails to load.
|
|
152
163
|
Avatar: [core] Show a person or entity as an image with an initials fallback. Use instead: Icon, Badge
|
|
153
164
|
Badge: [core] Label a status, state or count with a compact neutral or semantic chip, or a dot. Use instead: Tag, Alert
|
|
154
165
|
Box: [core] Build one-off layout that no named layout primitive covers, using token keys through `sx`. Use instead: Stack, Grid, Container
|
|
155
166
|
Breadcrumb: [core] Show where the current page sits in a hierarchy and link back up it. Use instead: Tabs, Pagination
|
|
156
|
-
Button: [core]
|
|
167
|
+
Button: [core] Run an action, such as submit, save or open a dialog. For an icon-only control pass iconOnly, iconLeft and label; for an on/off toggle pass pressed. Use instead: InlineLink
|
|
157
168
|
Card: [core] Group related content on a raised surface with header, body, footer and metric slots, or as one selectable option. Use instead: Surface, Card.Metric
|
|
158
169
|
CardMetric: Show one headline figure (a KPI, a count, a total) with its label inside a Card. Use instead: MetricTiles
|
|
159
170
|
Checkbox: [core] Let people tick one or more independent options, or a parent choice that is partly selected. Use instead: Toggle, Radio
|
|
171
|
+
CodeBlock: Show a code sample with a copy button, optionally collapsed.
|
|
160
172
|
Combobox: [core] Pick one value, or several with `multiple`, from a long list of options, with a search field that filters as you type. Use instead: Select, Menu
|
|
161
173
|
Container: [core] Constrain a page region to the content or maximum width and centre it. Use instead: Stack, Grid, Box
|
|
174
|
+
DataTableSection: Put a heading and toolbar above a Table.
|
|
175
|
+
DestructiveSection: Put a dangerous action, such as delete, in its own section with a warning and a confirm step.
|
|
162
176
|
Dialog: [core] Interrupt the page with a modal that needs a decision or focused input before people continue. Use instead: Tooltip, Alert, ToastProvider, AlertDialog
|
|
163
177
|
Disclosure: [core] Hide optional explanatory content behind a heading that people can expand. Use instead: Tabs
|
|
164
|
-
Divider: [core] Separate two
|
|
178
|
+
Divider: [core] Separate two blocks of content with a thin line. Use instead: Stack, Surface
|
|
165
179
|
EmptyState: [core] Say that a list, grid or section has no data yet, with a title and an optional description. Use instead: Skeleton, Alert
|
|
180
|
+
ErrorPattern: Show an error with a short message and a Back button, in place or as a full page.
|
|
166
181
|
Field: [core] Show a labelled read-only value, such as a name and its value in a detail view. Use instead: Input, Card.Metric
|
|
167
|
-
|
|
182
|
+
Form: Wrap form fields so they stack with even spacing.
|
|
183
|
+
FormActions: Lay out a form's buttons in a fixed order: danger on the left, then secondary, then primary on the right.
|
|
184
|
+
Grid: [core] Lay out content in columns that adapt to the screen width, or line up nested content with subgrid. Use instead: Stack, Box
|
|
168
185
|
HdsRouterProvider: [core] Wrap the app root once so HDS links and navigation use your client router; with no provider they stay plain anchors.
|
|
169
186
|
HdsThemeProvider: [core] Wrap an app or region once to set theme, density and other root attributes for everything inside it. Use instead: Surface
|
|
170
|
-
Icon: [core]
|
|
187
|
+
Icon: [core] Show a Lucide icon at a set size and color. Use instead: Button, Avatar
|
|
171
188
|
InlineLink: [core] Link to a route or external URL from inside body copy. Use instead: Button, Text
|
|
172
189
|
Input: [core] Collect a single line of text, a number, an email, a password, a date or a time, with label, helper and error slots. Use instead: Textarea, Select, Combobox
|
|
173
190
|
Kbd: [core] Show a keyboard key or shortcut hint inline, as a native kbd element. Use instead: Text
|
|
174
191
|
Menu: [core] Offer a list of actions from a trigger, closed until opened. Use instead: Select
|
|
192
|
+
MetricTile: Show one key number with its label, inside a MetricTiles row.
|
|
193
|
+
MetricTiles: Show a row of key numbers, one tile each.
|
|
194
|
+
Page: Wrap a screen in the standard width and padding.
|
|
195
|
+
PageHeader: Open a screen with its title, plus optional breadcrumb, status and actions.
|
|
175
196
|
Pagination: [core] Move between pages of a long result set, with truncated page numbers. Use instead: Breadcrumb
|
|
176
197
|
Popover: [core] Anchor interactive content, such as a short form, a filter set or a picker, to a trigger people click to open. Use instead: Tooltip, Menu, Dialog
|
|
177
198
|
Progress: [core] Show how far a task has got, as a bar or ring that is determinate or indeterminate. Use instead: Spinner, Skeleton
|
|
178
199
|
Radio: [core] Choose exactly one option from a small set that should stay visible together. Use instead: Checkbox, Select, SegmentedControl
|
|
200
|
+
Reveal: Fade content in as it scrolls into view.
|
|
179
201
|
SegmentedControl: [core] Switch between two to five mutually exclusive views or modes in a compact row. Use instead: Radio, Tabs, Select
|
|
180
202
|
Select: [core] Choose one value from a short list of options in a form field. Use instead: Menu, Combobox
|
|
181
203
|
Skeleton: [core] Reserve the shape of content that is still loading, so the layout does not jump. Use instead: Progress, Spinner
|
|
182
204
|
Slider: [core] Pick a number within a known range by dragging, when the exact value matters less than the position. Use instead: Input
|
|
183
205
|
Spinner: [core] Show that something is loading when the wait is short or has no measurable end. Use instead: Progress, Skeleton
|
|
184
|
-
Stack: [core] Space a row or column
|
|
206
|
+
Stack: [core] Space items in a row or column with even gaps. Use instead: Grid, Surface
|
|
185
207
|
Stat: Show one headline figure inline, inside prose or a dense list, with its label and an optional sub-line. Use instead: MetricTiles, Card.Metric, StatusTile
|
|
186
208
|
StatusTile: Show a titled status block with optional notes and a trailing badge or affordance. Use instead: MetricTiles, Card.Metric, StatusListItem
|
|
187
|
-
Surface: [core]
|
|
209
|
+
Surface: [core] Give a block of content a background and padding, with no header or footer. Use instead: Card, Stack
|
|
188
210
|
Table: [core] Show rows of structured data in aligned columns, with optional sorting. Use instead: Field, Stack
|
|
189
211
|
Tabs: [core] Switch between panels of related content in the same place, one visible at a time. Use instead: SegmentedControl, Disclosure
|
|
190
212
|
Tag: [core] Show an interactive filter or category chip that people can toggle. Use instead: Badge
|
|
@@ -379,14 +401,14 @@ A machine- and human-readable specification of the Hirobius Design System for AI
|
|
|
379
401
|
|
|
380
402
|
## Overview
|
|
381
403
|
|
|
382
|
-
Hirobius is a clean, systems-first visual language that bridges digital precision and physical fabrication through a high-contrast monochromatic palette and a single accent that each tenant sets —
|
|
404
|
+
Hirobius is a clean, systems-first visual language that bridges digital precision and physical fabrication through a high-contrast monochromatic neutral palette and a single accent that each tenant sets — a bright apple green by default. Its personality is disciplined, tactile, and quietly technical: structure is explicit, motion is purposeful, and visual noise is stripped away. Whitespace is treated as material, not leftover space, so every screen should feel deliberate, breathable, and exact.
|
|
383
405
|
|
|
384
406
|
## Colors
|
|
385
407
|
|
|
386
408
|
<!-- auto:start:colors -->
|
|
387
409
|
**One accent — one neutral system.**
|
|
388
410
|
|
|
389
|
-
- **Accent** (`#
|
|
411
|
+
- **Accent** (`#66B239`): CTAs, active states, selected focus rings, and the single brand accent. `semantic.accent.rest` — a per-tenant knob, not a fixed hue (#208).
|
|
390
412
|
- **Neutral**: backgrounds, surfaces, borders, text. True monochromatic — `primitive.color.neutral.50` through `950`. Use `semantic.color.surface.*`, `semantic.color.content.*`, `semantic.color.border.*`; never reach directly for primitives in components.
|
|
391
413
|
- **Feedback — Error** (`#B91C1C`): destructive confirms, error banners, validation failures. `semantic.color.feedback.error`.
|
|
392
414
|
- **Feedback — Success** (`#047857`): positive confirmations, completed states. `semantic.color.feedback.success`.
|
|
@@ -403,7 +425,7 @@ HDS ships three typefaces — each with a distinct and exclusive role:
|
|
|
403
425
|
|
|
404
426
|
- **Display / Heading font**: Satoshi. Bound exclusively to the `display` and `title` styles. Never used for body copy or UI labels.
|
|
405
427
|
- **Body / UI font**: Satoshi. All prose, labels, small text, captions, and UI copy.
|
|
406
|
-
- **Mono font**:
|
|
428
|
+
- **Mono font**: IBM Plex Mono. Reserved for tokens, code, technical callouts, and metric readouts.
|
|
407
429
|
|
|
408
430
|
Weights declared: `400` regular, `500` medium, `700` bold. Heading styles (display · title) use `700` bold; body, UI, and caption use `400` regular / `500` medium.
|
|
409
431
|
|
|
@@ -465,14 +487,14 @@ Depth is communicated through 4 elevation roles bundled by `semantic.elevation.*
|
|
|
465
487
|
|
|
466
488
|
### Elevation roles
|
|
467
489
|
|
|
468
|
-
| Surface | Role token | Background | Shadow | Border
|
|
469
|
-
| -------------------------------------- | ----------------------------- | ----------------- | ----------------- |
|
|
470
|
-
| Card / panel resting | `semantic.elevation.flat` | `surface.page` | none | `
|
|
471
|
-
| Card / panel lifted (interactive only) | `semantic.elevation.raised` | `surface.raised` | `shadow.subtle` | none
|
|
472
|
-
| Popover / dropdown / tooltip | `semantic.elevation.floating` | `surface.raised` | `shadow.floating` | none
|
|
473
|
-
| Dialog / sheet / modal | `semantic.elevation.overlay` | `surface.overlay` | `shadow.overlay` | none
|
|
490
|
+
| Surface | Role token | Background | Shadow | Border |
|
|
491
|
+
| -------------------------------------- | ----------------------------- | ----------------- | ----------------- | -------------------------------------------------------- |
|
|
492
|
+
| Card / panel resting | `semantic.elevation.flat` | `surface.page` | none | none by default; opt-in 1px (`bordered`/`tone`/`accent`) |
|
|
493
|
+
| Card / panel lifted (interactive only) | `semantic.elevation.raised` | `surface.raised` | `shadow.subtle` | none |
|
|
494
|
+
| Popover / dropdown / tooltip | `semantic.elevation.floating` | `surface.raised` | `shadow.floating` | none |
|
|
495
|
+
| Dialog / sheet / modal | `semantic.elevation.overlay` | `surface.overlay` | `shadow.overlay` | none |
|
|
474
496
|
|
|
475
|
-
Cards default to `flat`. They lift to `raised` only on interactive hover or when explicitly elevated above siblings. Never combine `raised` with a border — depth is one mechanism (border OR shadow), not both stacked.
|
|
497
|
+
Cards default to `flat`. They lift to `raised` only on interactive hover or when explicitly elevated above siblings. Never combine `raised` with a border — depth is one mechanism (border OR shadow), not both stacked. The default `Card` variant is **borderless** (12d-3 outline rule: repeated outlined cards crowd a layout, so the edge is not the default) — a resting 1px border is **opt-in** via `bordered`, a feedback `tone`, or the `accent` variant (`border.default` / feedback color / `border.accent` respectively). Rely on whitespace, dividers, and rails for grouping; reach for `bordered` only for a genuinely discrete standalone object.
|
|
476
498
|
|
|
477
499
|
Overlays (Dialog, AlertDialog, Menu, Popover, Select, Tooltip) portal into the nearest `data-hds` scope, so they inherit its theme (for example `<div data-hds data-theme="dark">`); pass `container` on the Content part to override.
|
|
478
500
|
|
|
@@ -515,9 +537,9 @@ Default most interactive feedback to `productive` (150ms, decelerate). Reserve `
|
|
|
515
537
|
| --- | --- | --- | --- |
|
|
516
538
|
| **Buttons** (`Button`) | `8px` (`semantic.radius.action`) | default · hover · focus · active · disabled · loading | Three variants: primary (accent-filled), secondary (outline), tertiary (ghost). Primary uses `semantic.accent.*` ramp per state. Pressed is a 5% `semantic.color.state.pressed.overlay` wash over the fill (`role.pressed-overlay`: black in light, white in dark), not a brightness filter. Icon-only buttons (`iconOnly`) follow the same token surface. Icon-only actions use `Button iconOnly` with a `label` and an `Icon` from `@hirobius/design-system/icons` in `iconLeft`. |
|
|
517
539
|
| **Inputs** (`Input`) | `8px` (`semantic.radius.action`) | default · focus · filled · error · disabled · loading | Border-driven treatment; no filled background by default. Focus uses `semantic.color.border.accent` plus a 2px outline offset. Error swaps to `component.input.borderError`. |
|
|
518
|
-
| **Cards** (`Card`) | `12px` (`rounded-lg`, role radius + 4px) | default · hover (optional parallax) · pressed (when interactive) | Cards default to `elevation.flat` (1px border `
|
|
540
|
+
| **Cards** (`Card`) | `12px` (`rounded-lg`, role radius + 4px) | default · hover (optional parallax) · pressed (when interactive) | Cards default to `elevation.flat` (borderless by default; an opt-in 1px border via `bordered`/`tone`/`accent`, no shadow). Interactive cards lift to `elevation.raised` (shadow.subtle, no border) on hover. Bind via `semantic.elevation.{role}` — never raw box-shadow values. Radius: `rounded-lg` (role radius + 4 px, follows the tenant knob) — never a hard-coded value. Padding: `var(--semantic-space-surface-padding)`. Title: `heading3`. Meta: `caption` + `var(--semantic-color-content-secondary)`. Hover (interactive): `scale(1.02)` transform + lift to raised. Never: gradients, glow, frosted glass, tinted surfaces, decorative overlays, or inner shadows. |
|
|
519
541
|
| **Badges** (`Badge`) | `8px` (`primitive.radius.4`) | neutral · accent · feedback (error/success/warning/info) | Single-line status markers. Feedback colors come from `semantic.color.feedback.*`. Never used as decorative chrome. |
|
|
520
|
-
| **Alerts** (`Alert`) | `8px` (via `hds.borderRadius.4`) | info · success · warning · error | Inline banner pattern with icon + message + optional action. Tone is carried by left-border
|
|
542
|
+
| **Alerts** (`Alert`) | `8px` (via `hds.borderRadius.4`) | info · success · warning · error | Inline banner pattern with icon + message + optional action. Tone is carried by a tinted feedback fill (`bg-feedback-bg-*`, matching Badge), NOT a left-border stripe. Callout shares this fill language and differs only by role (no icon, no status role, optional italic). |
|
|
521
543
|
| **Disclosures** (`Disclosure`) | `8px` (`hds.borderRadius.action`) | collapsed · expanded · hover · focus | Accordion primitive. Expansion uses `semantic.motion.productive`; no spring bounce. Dividers follow `semantic.color.border.subtle`. |
|
|
522
544
|
| **Toggles** (`Toggle`) | `full` (pill track + circular thumb) | off · on · focus · disabled | Accent-filled track in the on state; neutral track otherwise. Track + thumb transitions share `semantic.motion.productive`. |
|
|
523
545
|
| **Segmented Control** (`SegmentedControl`) | Outer `12px` · inner segments `8px` | rest · hover · selected · disabled | Selected segment fills with the accent; unselected segments are transparent. Use for 2–5 mutually exclusive options; beyond that, prefer `Select`. |
|
|
@@ -529,16 +551,16 @@ See `public/hds-manifest.json` and `src/app/data/component-api.json` for the ful
|
|
|
529
551
|
|
|
530
552
|
Every HDS card surface must conform to this anatomy exactly. No creative interpretation is permitted on any of these properties.
|
|
531
553
|
|
|
532
|
-
| Property | Required value
|
|
533
|
-
| ------------------------ |
|
|
534
|
-
| Background | `var(--semantic-color-surface-raised)`
|
|
535
|
-
| Border | `1px solid
|
|
536
|
-
| Border radius | `rounded-lg` (`role.radius` + 4 px: 12 px by default, follows the tenant)
|
|
537
|
-
| Padding | `var(--semantic-space-component-padding)` or `<HdsSurface padding="component">`
|
|
538
|
-
| Shadow | Resting cards: none (`elevation.flat`). Interactive lifted state: `shadow.subtle` via `elevation.raised`
|
|
539
|
-
| Title | `hds.typeStyles.title` / `<Text variant="title">`
|
|
540
|
-
| Subtitle / meta | `hds.typeStyles.caption` + `var(--semantic-color-content-secondary)`
|
|
541
|
-
| Hover (interactive only) | `transform: scale(1.02)`
|
|
554
|
+
| Property | Required value | Forbidden |
|
|
555
|
+
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
556
|
+
| Background | `var(--semantic-color-surface-raised)` | Any gradient, tinted fill, or custom color |
|
|
557
|
+
| Border | Default variant: **borderless**. Opt-in (`bordered`/`tone`/`accent`): 1px solid the matching token (`border.default` / feedback color / `border.accent`). Never border + shadow together. | `box-shadow` as an elevation substitute; a border on the default variant (use `bordered`) |
|
|
558
|
+
| Border radius | `rounded-lg` (`role.radius` + 4 px: 12 px by default, follows the tenant) | `var(--component-card-radius)`, `rounded-full`, or any hard-coded value |
|
|
559
|
+
| Padding | `var(--semantic-space-component-padding)` or `<HdsSurface padding="component">` | Raw pixel values or ad hoc insets |
|
|
560
|
+
| Shadow | Resting cards: none (`elevation.flat`). Interactive lifted state: `shadow.subtle` via `elevation.raised` | Raw `box-shadow` values, `drop-shadow`, glow, or any depth effect not bound to a role token |
|
|
561
|
+
| Title | `hds.typeStyles.title` / `<Text variant="title">` | Any other type style for the primary card heading |
|
|
562
|
+
| Subtitle / meta | `hds.typeStyles.caption` + `var(--semantic-color-content-secondary)` | Primary content color or body size for secondary text |
|
|
563
|
+
| Hover (interactive only) | `transform: scale(1.02)` | Background fill change, border color shift, or opacity fade on hover |
|
|
542
564
|
|
|
543
565
|
Never use on any card surface: gradient backgrounds, glow effects, frosted glass (`backdrop-filter: blur`), decorative overlays, gradient borders, colored or tinted backgrounds, inner shadows, patterned fills, shimmer or noise effects.
|
|
544
566
|
|
|
@@ -582,7 +604,7 @@ Three more needs are props on an existing component, not components of their own
|
|
|
582
604
|
## Do's and Don'ts
|
|
583
605
|
|
|
584
606
|
- Don't invent new corner behavior for interactive controls; buttons, inputs, disclosures, and similar action surfaces should follow the shared action radius (`semantic.radius.action`).
|
|
585
|
-
- Don't introduce additional accent hues; Hirobius uses exactly one accent, resolved from `semantic.accent.rest`, over a true monochromatic neutral system. The accent is a per-tenant knob (#208) and defaults to
|
|
607
|
+
- Don't introduce additional accent hues; Hirobius uses exactly one accent, resolved from `semantic.accent.rest`, over a true monochromatic neutral system. The accent is a per-tenant knob (#208) and defaults to a bright apple green — read the token, never assume a hue.
|
|
586
608
|
- Don't tint neutrals warm or cool; greys should remain genuinely neutral and high-contrast.
|
|
587
609
|
- Don't reach for shadow values directly — bind to a `semantic.elevation.*` role so surface + shadow + border stay paired. Cards default to `flat` (border, no shadow). Popovers/tooltips/dropdowns use `floating`. Dialogs/sheets use `overlay`.
|
|
588
610
|
- Don't hardcode colors, spacing, radius, or typography values when governed tokens already exist.
|
|
@@ -601,7 +623,7 @@ Unresolved rules that the live repo cannot yet answer confidently are tracked in
|
|
|
601
623
|
<!-- auto:start:build-meta -->
|
|
602
624
|
---
|
|
603
625
|
|
|
604
|
-
> Generated from `hirobius.tokens.json` (
|
|
626
|
+
> Generated from `hirobius.tokens.json` (400 tokens) and `public/hds-manifest.json` by `scripts/build-design-md.mjs`.
|
|
605
627
|
> Hand-edit `DESIGN.source.md`; this file (`DESIGN.md`) is overwritten by `pnpm tokens`.
|
|
606
628
|
<!-- auto:end:build-meta -->
|
|
607
629
|
|
|
@@ -699,7 +721,7 @@ Triggers an action when activated.
|
|
|
699
721
|
- variant: "primary" | "secondary" | "tertiary" | null
|
|
700
722
|
|
|
701
723
|
### Callout
|
|
702
|
-
Tone-driven
|
|
724
|
+
Tone-driven tinted callout for notes, quotes, hypotheses — the same feedback fill language as Alert, without Alert's icon or status role.
|
|
703
725
|
- italic: boolean = false
|
|
704
726
|
- tone: 'accent' | 'info' | 'success' | 'warning' | 'danger' = info
|
|
705
727
|
|
package/public/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hirobius Design System
|
|
2
2
|
|
|
3
|
-
Generated: 2026-10-
|
|
3
|
+
Generated: 2026-10-09T13:43:23.079Z
|
|
4
4
|
Primary sources: `public/hds-manifest.json`, `src/app/data/component-api.json`, `hirobius.tokens.json`
|
|
5
5
|
|
|
6
6
|
## Agents Using The Package: Start Here
|
|
@@ -9,6 +9,16 @@ Primary sources: `public/hds-manifest.json`, `src/app/data/component-api.json`,
|
|
|
9
9
|
- MCP server `hds` ships in the package: run `npx hds-mcp` (stdio). Tools: `list_core`, `search_components`, `get_component`, `search_tokens`; each answer is under 2 KB.
|
|
10
10
|
- Lint before you finish: `import hds from '@hirobius/design-system/eslint-plugin'` and spread `hds.configs.recommended` into `eslint.config.mjs`.
|
|
11
11
|
|
|
12
|
+
## Voice
|
|
13
|
+
|
|
14
|
+
How these docs speak. Every page, and every agent writing for HDS, follows it. Source: `content/docs/voice.mdx` (published at `/docs/voice`).
|
|
15
|
+
|
|
16
|
+
- Use plain words a reader already knows. Name a thing by what it does, not by how it is built.
|
|
17
|
+
- Keep sentences short, one idea each.
|
|
18
|
+
- Tell the reader what to do. Leave out brand adjectives.
|
|
19
|
+
- Keep maintainer references off public pages: issue and ADR numbers, script names, internal counts.
|
|
20
|
+
- Don't use: "systems-first".
|
|
21
|
+
|
|
12
22
|
## Pick By Need
|
|
13
23
|
|
|
14
24
|
One answer per need. Use the components after the arrow; what follows "Not:" is what agents reached for instead, which is the wrong answer for that need even where it has a purpose of its own. Generated from `mcp/guide.mjs`, the same list as `AGENTS.md`.
|
|
@@ -149,42 +159,54 @@ One line per component that declares when to use it (`@usage` / `@useInstead` in
|
|
|
149
159
|
|
|
150
160
|
Alert: [core] Show a persistent inline message with a severity, next to the content it concerns. Use instead: ToastProvider, Badge
|
|
151
161
|
AlertDialog: Confirm a destructive or irreversible action (delete, archive, remove) before it runs, with Cancel and Action buttons. Use instead: Dialog, ToastProvider
|
|
162
|
+
AssetImg: Show an image that scales to its frame, with a placeholder if it fails to load.
|
|
152
163
|
Avatar: [core] Show a person or entity as an image with an initials fallback. Use instead: Icon, Badge
|
|
153
164
|
Badge: [core] Label a status, state or count with a compact neutral or semantic chip, or a dot. Use instead: Tag, Alert
|
|
154
165
|
Box: [core] Build one-off layout that no named layout primitive covers, using token keys through `sx`. Use instead: Stack, Grid, Container
|
|
155
166
|
Breadcrumb: [core] Show where the current page sits in a hierarchy and link back up it. Use instead: Tabs, Pagination
|
|
156
|
-
Button: [core]
|
|
167
|
+
Button: [core] Run an action, such as submit, save or open a dialog. For an icon-only control pass iconOnly, iconLeft and label; for an on/off toggle pass pressed. Use instead: InlineLink
|
|
157
168
|
Card: [core] Group related content on a raised surface with header, body, footer and metric slots, or as one selectable option. Use instead: Surface, Card.Metric
|
|
158
169
|
CardMetric: Show one headline figure (a KPI, a count, a total) with its label inside a Card. Use instead: MetricTiles
|
|
159
170
|
Checkbox: [core] Let people tick one or more independent options, or a parent choice that is partly selected. Use instead: Toggle, Radio
|
|
171
|
+
CodeBlock: Show a code sample with a copy button, optionally collapsed.
|
|
160
172
|
Combobox: [core] Pick one value, or several with `multiple`, from a long list of options, with a search field that filters as you type. Use instead: Select, Menu
|
|
161
173
|
Container: [core] Constrain a page region to the content or maximum width and centre it. Use instead: Stack, Grid, Box
|
|
174
|
+
DataTableSection: Put a heading and toolbar above a Table.
|
|
175
|
+
DestructiveSection: Put a dangerous action, such as delete, in its own section with a warning and a confirm step.
|
|
162
176
|
Dialog: [core] Interrupt the page with a modal that needs a decision or focused input before people continue. Use instead: Tooltip, Alert, ToastProvider, AlertDialog
|
|
163
177
|
Disclosure: [core] Hide optional explanatory content behind a heading that people can expand. Use instead: Tabs
|
|
164
|
-
Divider: [core] Separate two
|
|
178
|
+
Divider: [core] Separate two blocks of content with a thin line. Use instead: Stack, Surface
|
|
165
179
|
EmptyState: [core] Say that a list, grid or section has no data yet, with a title and an optional description. Use instead: Skeleton, Alert
|
|
180
|
+
ErrorPattern: Show an error with a short message and a Back button, in place or as a full page.
|
|
166
181
|
Field: [core] Show a labelled read-only value, such as a name and its value in a detail view. Use instead: Input, Card.Metric
|
|
167
|
-
|
|
182
|
+
Form: Wrap form fields so they stack with even spacing.
|
|
183
|
+
FormActions: Lay out a form's buttons in a fixed order: danger on the left, then secondary, then primary on the right.
|
|
184
|
+
Grid: [core] Lay out content in columns that adapt to the screen width, or line up nested content with subgrid. Use instead: Stack, Box
|
|
168
185
|
HdsRouterProvider: [core] Wrap the app root once so HDS links and navigation use your client router; with no provider they stay plain anchors.
|
|
169
186
|
HdsThemeProvider: [core] Wrap an app or region once to set theme, density and other root attributes for everything inside it. Use instead: Surface
|
|
170
|
-
Icon: [core]
|
|
187
|
+
Icon: [core] Show a Lucide icon at a set size and color. Use instead: Button, Avatar
|
|
171
188
|
InlineLink: [core] Link to a route or external URL from inside body copy. Use instead: Button, Text
|
|
172
189
|
Input: [core] Collect a single line of text, a number, an email, a password, a date or a time, with label, helper and error slots. Use instead: Textarea, Select, Combobox
|
|
173
190
|
Kbd: [core] Show a keyboard key or shortcut hint inline, as a native kbd element. Use instead: Text
|
|
174
191
|
Menu: [core] Offer a list of actions from a trigger, closed until opened. Use instead: Select
|
|
192
|
+
MetricTile: Show one key number with its label, inside a MetricTiles row.
|
|
193
|
+
MetricTiles: Show a row of key numbers, one tile each.
|
|
194
|
+
Page: Wrap a screen in the standard width and padding.
|
|
195
|
+
PageHeader: Open a screen with its title, plus optional breadcrumb, status and actions.
|
|
175
196
|
Pagination: [core] Move between pages of a long result set, with truncated page numbers. Use instead: Breadcrumb
|
|
176
197
|
Popover: [core] Anchor interactive content, such as a short form, a filter set or a picker, to a trigger people click to open. Use instead: Tooltip, Menu, Dialog
|
|
177
198
|
Progress: [core] Show how far a task has got, as a bar or ring that is determinate or indeterminate. Use instead: Spinner, Skeleton
|
|
178
199
|
Radio: [core] Choose exactly one option from a small set that should stay visible together. Use instead: Checkbox, Select, SegmentedControl
|
|
200
|
+
Reveal: Fade content in as it scrolls into view.
|
|
179
201
|
SegmentedControl: [core] Switch between two to five mutually exclusive views or modes in a compact row. Use instead: Radio, Tabs, Select
|
|
180
202
|
Select: [core] Choose one value from a short list of options in a form field. Use instead: Menu, Combobox
|
|
181
203
|
Skeleton: [core] Reserve the shape of content that is still loading, so the layout does not jump. Use instead: Progress, Spinner
|
|
182
204
|
Slider: [core] Pick a number within a known range by dragging, when the exact value matters less than the position. Use instead: Input
|
|
183
205
|
Spinner: [core] Show that something is loading when the wait is short or has no measurable end. Use instead: Progress, Skeleton
|
|
184
|
-
Stack: [core] Space a row or column
|
|
206
|
+
Stack: [core] Space items in a row or column with even gaps. Use instead: Grid, Surface
|
|
185
207
|
Stat: Show one headline figure inline, inside prose or a dense list, with its label and an optional sub-line. Use instead: MetricTiles, Card.Metric, StatusTile
|
|
186
208
|
StatusTile: Show a titled status block with optional notes and a trailing badge or affordance. Use instead: MetricTiles, Card.Metric, StatusListItem
|
|
187
|
-
Surface: [core]
|
|
209
|
+
Surface: [core] Give a block of content a background and padding, with no header or footer. Use instead: Card, Stack
|
|
188
210
|
Table: [core] Show rows of structured data in aligned columns, with optional sorting. Use instead: Field, Stack
|
|
189
211
|
Tabs: [core] Switch between panels of related content in the same place, one visible at a time. Use instead: SegmentedControl, Disclosure
|
|
190
212
|
Tag: [core] Show an interactive filter or category chip that people can toggle. Use instead: Badge
|