@assure-one/design-system 1.39.0 → 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -28
- package/codemods/README.md +24 -7
- package/codemods/lib/registry.mjs +27 -0
- package/codemods/lib/runner.mjs +8 -3
- package/codemods/run.mjs +27 -5
- package/codemods/transforms/cm-15-dom-selectors.mjs +16 -9
- package/dist/brand-scope-BOHId6BY.d.ts +58 -0
- package/dist/{brand-theme-B6rem2II.d.ts → brand-theme-ZYM867Jz.d.ts} +1 -1
- package/dist/chunk-2MKLYYIY.js +3754 -0
- package/dist/chunk-2MKLYYIY.js.map +1 -0
- package/dist/chunk-6S2R2VWN.js +5527 -0
- package/dist/chunk-6S2R2VWN.js.map +1 -0
- package/dist/chunk-7U3ADR2Q.js +4336 -0
- package/dist/chunk-7U3ADR2Q.js.map +1 -0
- package/dist/chunk-CPOGSNXS.js +389 -0
- package/dist/chunk-CPOGSNXS.js.map +1 -0
- package/dist/chunk-EUHGZA6Q.js +313 -0
- package/dist/chunk-EUHGZA6Q.js.map +1 -0
- package/dist/chunk-KQBYTTAN.js +1829 -0
- package/dist/chunk-KQBYTTAN.js.map +1 -0
- package/dist/chunk-X76J4QSJ.js +164 -0
- package/dist/chunk-X76J4QSJ.js.map +1 -0
- package/dist/css/components.css +1 -1
- package/dist/css/legacy-aliases.css +2 -0
- package/dist/css/tailwind.css +2 -0
- package/dist/css/tokens.css +2 -0
- package/dist/data-table-view-ep8al7P9.d.ts +1132 -0
- package/dist/{design-system-provider-BM_F1C13.d.ts → design-system-provider-CfD2g2lY.d.ts} +11 -12
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +2 -1835
- package/dist/icons/index.js.map +1 -1
- package/dist/index.d.ts +373 -388
- package/dist/index.js +8688 -24271
- package/dist/index.js.map +1 -1
- package/dist/legacy/index.d.ts +1462 -7
- package/dist/legacy/index.js +5 -1
- package/dist/legacy/index.js.map +1 -1
- package/dist/next/index.d.ts +2 -2
- package/dist/styles.css +2 -1
- package/dist/suite/index.d.ts +989 -4
- package/dist/suite/index.js +6 -1
- package/dist/suite/index.js.map +1 -1
- package/dist/testing/index.cjs +3 -2
- package/dist/testing/index.js +3 -2
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.js +3 -856
- package/dist/tokens/index.js.map +1 -1
- package/dist/{types-k_kjwipx.d.ts → types-Coqw8iaS.d.ts} +28 -1
- package/docs/components.md +54 -54
- package/docs/components.registry.json +6 -6
- package/docs/for-ai-agents.md +12 -6
- package/package.json +5 -3
- package/dist/index-BAAuIQqP.d.ts +0 -2579
- package/dist/index-DxBjmBBp.d.ts +0 -1038
package/docs/components.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- Generated by `pnpm docs:catalogue` from api/*.api.md and docs/components.registry.json. Do not edit by hand; edit the registry and regenerate. -->
|
|
4
4
|
|
|
5
|
-
Every public component of `@assure-one/design-system`, in one place: **
|
|
5
|
+
Every public component of `@assure-one/design-system`, in one place: **474 component exports** — 180 component families with 228 compound parts, and 149 icons — plus the hooks, utilities, tokens and testing helpers the package exports. The list is derived from the API reports, so a public component cannot be missing from this page (`pnpm docs:catalogue --check` runs in `pnpm test:contracts`).
|
|
6
6
|
|
|
7
7
|
**How to use this page.** Start from the ["Pick a component"](#pick-a-component) table with the UI need you have, or from ["Never hand-roll"](#never-hand-roll) with the raw element you were about to write; links land on the category section that holds the row. Every row links to the story that shows the states. The short rulebook for agents and new contributors is [`docs/for-ai-agents.md`](./for-ai-agents.md).
|
|
8
8
|
|
|
@@ -106,7 +106,7 @@ Things you press. Every clickable control is one of these; a `<button>`, `<a rol
|
|
|
106
106
|
|
|
107
107
|
| Component | Use when | Don't use when | Replaces raw HTML | Related | Links |
|
|
108
108
|
| --- | --- | --- | --- | --- | --- |
|
|
109
|
-
| **Button**<br>also: `buttonVariants`, `resolveButtonStyle`<br>since 0.0.0 | Any action the user triggers: `variant` (solid, soft, outline, ghost, link) × `intent` (brand, neutral, success, danger) × `size` (xs…xl); `loading`, `iconStart`/`iconEnd`, `asChild` for a router link. | The control is icon-only (`IconButton`), navigates (`LinkButton`), submits a form (`SubmitButton`) or is a clickable non-button surface (`Pressable`). | `<button>`, `<a role="button">`, `<div onClick>`, `<input type="button">` | [IconButton](#actions), [LinkButton](#actions), [SubmitButton](#actions), [Pressable](#actions), [PrimaryAction](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/button.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/adr/007-variant-intent-vocabulary.md) |
|
|
109
|
+
| **Button**<br>also: `buttonVariants`, `resolveButtonStyle`<br>since 0.0.0 | Any action the user triggers: `variant` (solid, soft, outline, ghost, link) × `intent` (brand, neutral, success, danger) × `size` (xs…xl); `loading`, `iconStart`/`iconEnd`, `asChild` for a router link. `type` defaults to `button` (2.0). | The control is icon-only (`IconButton`), navigates (`LinkButton`), submits a form (`SubmitButton`) or is a clickable non-button surface (`Pressable`). | `<button>`, `<a role="button">`, `<div onClick>`, `<input type="button">` | [IconButton](#actions), [LinkButton](#actions), [SubmitButton](#actions), [Pressable](#actions), [PrimaryAction](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/button.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/adr/007-variant-intent-vocabulary.md) |
|
|
110
110
|
| **IconButton** (experimental)<br>also: `iconButtonVariants`<br>since 1.35.0 | An icon-only action (close, edit, more): square control-scale geometry, a required accessible name, a tooltip by default, the Button family's variants and intents. | The action has a visible text label (`Button` with `iconStart`) or is a menu trigger that shows the chosen value. | `<button><svg/></button>` | [Button](#actions), [Tooltip](#overlays) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/icon-button.stories.tsx) |
|
|
111
111
|
| **LinkButton**<br>since 0.0.0 | Navigation that should look like a button: an `<a href>` with the Button variants, intents, sizes and icon slots. | The action does not change the URL (`Button`) or the link should read as inline text (`Text asChild` around your router link). | `<a class="btn">` | [Button](#actions), [LinkAction](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/link-button.stories.tsx) |
|
|
112
112
|
| **SubmitButton**<br>since 0.0.0 | The primary submit of a form: `type="submit"`, full width by default (`fullWidth={false}` inline), shows `pendingText` while the form's `useFormStatus` is pending. | The button is not a form submit or you need a secondary action next to the submit (`Button`). | `<button type="submit">`, `<input type="submit">` | [Button](#actions), [Field](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/submit-button.stories.tsx) |
|
|
@@ -116,10 +116,10 @@ Things you press. Every clickable control is one of these; a `<button>`, `<a rol
|
|
|
116
116
|
| **Intent actions**<br>parts: `SecondaryAction`, `DangerAction`, `LinkAction`, `IconAction`<br>since 0.3.0 | Intent-named `Button` wrappers for product code that reads by role: primary, secondary, danger, link-styled, icon-only. | You need the full variant × intent matrix or a size outside the defaults (`Button`, `IconButton`). | — | [Button](#actions), [IconButton](#actions), [LinkButton](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/intent-actions.stories.tsx) |
|
|
117
117
|
| **BulkActionBar**<br>parts: `BulkActionBarAction`, `BulkActionBarSeparator`<br>since 0.15.0 | A floating bar that appears when rows are selected: selection count, actions, separators, clear. | Actions apply to one record (row menu via `DropdownMenu`) or belong to the page (`PageHeader` actions). | — | [DataTable](#data-display), [StickyActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/bulk-action-bar.stories.tsx) |
|
|
118
118
|
| **StickyActionBar**<br>since 1.3.0 | Save / Cancel that stays visible at the bottom of a long form or settings page, with an optional hint and mobile-nav offset. | The form fits the viewport (put the `SubmitButton` at the end) or the actions belong to a dialog (`DialogFooter`). | `<div class="sticky bottom-0">` | [SubmitButton](#actions), [BulkActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/sticky-action-bar.stories.tsx) |
|
|
119
|
-
| **NewMenu** (deprecated)<br>since 1.2.0 | The "+ New" creation menu of an app: grouped actions with icons and shortcuts on a `DropdownMenu`. | The menu is contextual to one record (`DropdownMenu`) or has a single action (`Button`). | — | [DropdownMenu](#overlays), [AppHeader](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/new-menu.stories.tsx) |
|
|
119
|
+
| **NewMenu** (deprecated) (`/legacy`)<br>since 1.2.0 | The "+ New" creation menu of an app: grouped actions with icons and shortcuts on a `DropdownMenu`. | The menu is contextual to one record (`DropdownMenu`) or has a single action (`Button`). | — | [DropdownMenu](#overlays), [AppHeader](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/new-menu.stories.tsx) |
|
|
120
120
|
| **DisplayMenu**<br>since 1.25.0 | The Linear-style Display control of a list surface: filters, grouping, ordering and column visibility in one searchable menu, driven by a `sections` array. | There is one filter (`FilterChip`) or one multi-value filter (`MultiFilterPill`). | — | [Toolbar](#actions), [MultiFilterPill](#selection), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/display-menu.stories.tsx) |
|
|
121
121
|
| **Toolbar**<br>parts: `FilterChip`<br>also: `filterChipVariants`<br>since 0.3.0 | The row of controls above a list or dashboard; `FilterChip` for a single-value filter toggle inside it. Controls share one control size so the row reads as one line. | The controls belong to a table card (`DataTableToolbar`) or the filter is multi-value (`MultiFilterPill`). | `<div class="flex items-center gap-2"> above a list` | [MultiFilterPill](#selection), [DisplayMenu](#actions), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/toolbar.stories.tsx) |
|
|
122
|
-
| **SuggestionPills** (deprecated)<br>since 1.5.0 | A strip of AI quick-reply pills floated above a composer; renders nothing when empty and not loading, so mount it unconditionally. | The choices are a form value (`MultiSelectField`) or filters (`FilterChip`). | — | [MessageComposer](#forms), [AiDraftCard](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/suggestion-pills.stories.tsx) |
|
|
122
|
+
| **SuggestionPills** (deprecated) (`/legacy`)<br>since 1.5.0 | A strip of AI quick-reply pills floated above a composer; renders nothing when empty and not loading, so mount it unconditionally. | The choices are a form value (`MultiSelectField`) or filters (`FilterChip`). | — | [MessageComposer](#forms), [AiDraftCard](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/suggestion-pills.stories.tsx) |
|
|
123
123
|
|
|
124
124
|
## Forms
|
|
125
125
|
|
|
@@ -148,14 +148,14 @@ Controls that carry a value into a form. Every one binds to `Field` through `use
|
|
|
148
148
|
| **Switch**<br>since 0.0.0 | An on/off setting that takes effect immediately. | The value is submitted with the form (`Checkbox`). | `<input type="checkbox" role="switch">` | [Checkbox](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/switch.stories.tsx) |
|
|
149
149
|
| **Slider**<br>since 0.0.0 | A bounded numeric value chosen by dragging (one or two thumbs). | Exact numbers matter (`NumberInput`). | `<input type="range">` | [NumberInput](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/slider.stories.tsx) |
|
|
150
150
|
| **MultiSelectField**<br>since 0.0.0 | A visible row of pill buttons that toggle membership in a comma-separated value: a handful of options everyone should see. | Many options or search (`MultiSelect`), or the pills are filters rather than a form value (`FilterChip`). | `<input type="checkbox"> styled as pills` | [MultiSelect](#selection), [ToggleGroup](#selection), [Chip](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/multi-select-field.stories.tsx) |
|
|
151
|
-
| **Grid
|
|
152
|
-
| **Questions
|
|
151
|
+
| **Grid** (`/suite`)<br>since 1.20.0 | A matrix of typed cells (rows × columns of text, number, select, checkbox) edited as one controlled value with an accessible name per cell. | Read-only data (`Table`, `DataTable`) or a single column of fields (`Stack` of `Field`s). | `<table> of <input>s` | [Table](#data-display), [Questions](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/grid.stories.tsx) |
|
|
152
|
+
| **Questions** (`/suite`)<br>since 1.17.0 | One questionnaire question card: index, title, description, type, required flag, `chrome` card or plain. | You are laying out the whole questionnaire (`QuestionnairePanel`) or a plain form field (`Field`). | — | [QuestionnairePanel](#forms), [Field](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questions.stories.tsx) |
|
|
153
153
|
| **QuestionnairePanel**<br>since 1.17.0 | The questionnaire container of the client portal: `cards` or `navigation` variant with eyebrow and title. | A settings form (`Fieldset` inside `Card`). | — | [Questions](#forms), [Fieldset](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questionnaire-panel.stories.tsx) |
|
|
154
154
|
| **MessageComposer**<br>since 0.14.0 | The chat input of a thread: one card chrome, optional quick-reply chips, your editor as `children`, a footer with a built-in Send. | A plain multi-line field (`Textarea`) or an email signature editor (`SignatureEditor`). | — | [Textarea](#forms), [SuggestionPills](#actions), [AiDraftCard](#feedback), [MessageBubble](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/message-composer.stories.tsx) |
|
|
155
|
-
| **SignatureEditor** (deprecated)<br>since 1.5.0 | The panel chrome for editing a personal email signature: header with Add image, your editor as `children`, Save / Insert footer; drop it in a `Popover` or use standalone. | Capturing a drawn e-signature (`ProposalSignatureBlock`). | — | [MessageComposer](#forms), [Popover](#overlays) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/signature-editor.stories.tsx) |
|
|
156
|
-
| **DocumentRequestField** (deprecated)<br>since 1.4.0 | One row of a document request form: a slot for your document-type select plus description and required toggle. | A generic form field (`Field`). | — | [DocumentRequestDetail](#data-display), [Field](#forms), [Select](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-request-field.stories.tsx) |
|
|
157
|
-
| **DocumentRequestUpload** (deprecated)<br>since 1.20.0 | The client-portal upload for a requested document: drop zone, progress and states tied to the request. | A generic file field (`FileUpload`). | — | [FileUpload](#forms), [DocumentChecklist](#data-display), [DocumentRequestDetail](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-request-upload.stories.tsx) |
|
|
158
|
-
| **Proposal signing
|
|
155
|
+
| **SignatureEditor** (deprecated) (`/legacy`)<br>since 1.5.0 | The panel chrome for editing a personal email signature: header with Add image, your editor as `children`, Save / Insert footer; drop it in a `Popover` or use standalone. | Capturing a drawn e-signature (`ProposalSignatureBlock`). | — | [MessageComposer](#forms), [Popover](#overlays) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/signature-editor.stories.tsx) |
|
|
156
|
+
| **DocumentRequestField** (deprecated) (`/legacy`)<br>since 1.4.0 | One row of a document request form: a slot for your document-type select plus description and required toggle. | A generic form field (`Field`). | — | [DocumentRequestDetail](#data-display), [Field](#forms), [Select](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-request-field.stories.tsx) |
|
|
157
|
+
| **DocumentRequestUpload** (deprecated) (`/legacy`)<br>since 1.20.0 | The client-portal upload for a requested document: drop zone, progress and states tied to the request. | A generic file field (`FileUpload`). | — | [FileUpload](#forms), [DocumentChecklist](#data-display), [DocumentRequestDetail](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-request-upload.stories.tsx) |
|
|
158
|
+
| **Proposal signing** (`/suite`)<br>parts: `ProposalConsentGate` (`/suite`), `ProposalPaymentCapture` (`/suite`)<br>since 1.12.0 | The signing step of a proposal: consent gate, signature capture, payment capture. | An email signature (`SignatureEditor`). | — | [AgreementViewer](#shell-screens), [ProposalPackageCard](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/proposal-signing.stories.tsx) |
|
|
159
159
|
| **FormSection** (deprecated)<br>since 0.4.1 | Only in code that already uses it: a titled `<fieldset>` block of a settings form with description and trailing action. | New code — use `Fieldset` + `FieldsetLegend` (deprecated, removed in 3.0). | — | [Fieldset](#forms), [Field](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/form-section.stories.tsx) |
|
|
160
160
|
| **FormError / FormSuccess** (deprecated)<br>parts: `FormSuccess` (deprecated)<br>since 0.0.0 | Only in code that already uses them: the pre-Field inline error and success messages (contract C-FORM-MSG). | New code — `FieldError` and `FieldDescription` inside a `Field`, or a toast for a saved form (deprecated, removed in 3.0). | — | [Field](#forms), [ToastProvider](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/form-message.stories.tsx) |
|
|
161
161
|
|
|
@@ -171,13 +171,13 @@ Pick one or many from a set: dropdowns, comboboxes, toggle groups, chips and fil
|
|
|
171
171
|
| **Combobox** (experimental)<br>also: `DEFAULT_COMBOBOX_MESSAGES`<br>since unreleased | A searchable pick: one input, a portalled listbox, the `Option<T>` model (`{ value, label }`), async loading and empty messages, single or `multiple`. | A short static list (`Select`) or free text with suggestions that need not match (`Input` + `Popover`). | `<input list> + <datalist>`, `<select> with a search box` | [Select](#selection), [MultiSelect](#selection), [SearchSelect](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/combobox.stories.tsx) |
|
|
172
172
|
| **MultiSelect** (experimental)<br>since unreleased | Several of many options with search: `Combobox` in `multiple` mode with selected chips. | A handful of options that should all be visible (`MultiSelectField`) or one value (`Combobox`, `Select`). | `<select multiple>` | [Combobox](#selection), [MultiSelectField](#forms), [Chip](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/multi-select.stories.tsx) |
|
|
173
173
|
| **SearchSelect** (deprecated)<br>since 0.0.0 | Only in code that already uses it: the pre-Combobox searchable select with `{ id, label }` options (contract C-SEARCHSELECT). | New code — `Combobox` with `Option` (deprecated, removed in 3.0; CM-08 rewrites single-mode call sites). | — | [Combobox](#selection), [MultiSelect](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/search-select.stories.tsx) |
|
|
174
|
-
| **ClientSelect
|
|
175
|
-
| **TeamMemberSelect** (deprecated)<br>since 0.0.0 | Pick an assignee: avatar and name rows on the `Select` primitive, with an unassigned option. | Several assignees (`MultiSelect`) or any other entity (`Select`). | — | [Select](#selection), [ClientSelect](#selection), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/team-member-select.stories.tsx) |
|
|
174
|
+
| **ClientSelect** (`/suite`)<br>since 0.0.0 | Pick one client: searchable name and email rows on the `Combobox` primitive, long names truncated. | Clients fetched per keystroke (`Combobox` with async options) or any other entity (`Select`). | — | [Select](#selection), [TeamMemberSelect](#selection), [Combobox](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/client-select.stories.tsx) |
|
|
175
|
+
| **TeamMemberSelect** (deprecated) (`/legacy`)<br>since 0.0.0 | Pick an assignee: avatar and name rows on the `Select` primitive, with an unassigned option. | Several assignees (`MultiSelect`) or any other entity (`Select`). | — | [Select](#selection), [ClientSelect](#selection), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/team-member-select.stories.tsx) |
|
|
176
176
|
| **ToggleGroup**<br>parts: `ToggleGroupItem`<br>since 0.0.0 | A view or mode switch with immediate effect (list/grid, day/week), single or multiple, roving focus. | The choice is a form value (`RadioGroup`, `MultiSelectField`) or navigation between panels (`Tabs`). | `group of <button aria-pressed>` | [Tabs](#navigation), [RadioGroup](#forms), [DocumentSourceFilter](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/toggle-group.stories.tsx) |
|
|
177
177
|
| **Chip** (experimental)<br>also: `chipVariants`, `resolveChipStyle`<br>since 1.35.0 | A removable, toggleable or clickable token: applied filters, tags, selected values; `variant` × `intent` × `size`, `onRemove`, `pressed`. | A static label (`Badge`), a status (`StatusBadge`) or a file (`FileChip`, `AttachmentChip`). | `<span class="rounded-full …"><button>×</button></span>` | [DismissibleChip](#selection), [Badge](#data-display), [Toolbar](#actions), [MultiSelect](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/chip.stories.tsx) |
|
|
178
178
|
| **DismissibleChip**<br>since 0.4.0 | Only in code that already uses it: a label with a remove button. | New code — `Chip` with `onRemove` covers it with the shared variants and sizes. | — | [Chip](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/dismissible-chip.stories.tsx) |
|
|
179
179
|
| **MultiFilterPill**<br>since 0.0.0 | A toolbar filter with a multi-select dropdown and a count of applied values. | A single-value filter (`FilterChip`) or the full display menu (`DisplayMenu`). | — | [Toolbar](#actions), [DisplayMenu](#actions), [MultiSelect](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/multi-filter-pill.stories.tsx) |
|
|
180
|
-
| **DocumentSourceFilter** (deprecated)<br>since 1.12.0 | Scope a document list to a provenance bucket (all, uploaded, emailed, …) with counts: a `ToggleGroup` that reuses `DocumentSourceTag`'s glyphs. | Any other segmented filter (`ToggleGroup`). | — | [ToggleGroup](#selection), [DocumentSourceTag](#data-display), [DocumentDetailPanel](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-source-filter.stories.tsx) |
|
|
180
|
+
| **DocumentSourceFilter** (deprecated) (`/legacy`)<br>since 1.12.0 | Scope a document list to a provenance bucket (all, uploaded, emailed, …) with counts: a `ToggleGroup` that reuses `DocumentSourceTag`'s glyphs. | Any other segmented filter (`ToggleGroup`). | — | [ToggleGroup](#selection), [DocumentSourceTag](#data-display), [DocumentDetailPanel](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-source-filter.stories.tsx) |
|
|
181
181
|
|
|
182
182
|
## Feedback
|
|
183
183
|
|
|
@@ -190,17 +190,17 @@ Tell the user what is happening: status messages, progress, loading and empty st
|
|
|
190
190
|
| **Spinner**<br>also: `spinnerVariants`, `SPINNER_TONE_TO_INTENT`<br>since 0.15.0 | Indeterminate activity in a small area or inside a control; inherits `currentColor` unless an `intent` is set. | Loading content with a known shape (`Skeleton`, `LoadingRows`) or a button's own pending state (`Button loading`). | `animate-spin svg` | [Skeleton](#feedback), [LoadingRows](#feedback), [ProgressBar](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/spinner.stories.tsx) |
|
|
191
191
|
| **Skeleton**<br>parts: `SkeletonText`, `SkeletonCircle`<br>since 0.0.0 | A placeholder in the shape of the content that is loading: block, text lines, circle. | Rows of a list or table (`LoadingRows`) or an operation with no layout to reserve (`Spinner`). | `<div class="animate-pulse bg-…">` | [LoadingRows](#feedback), [Spinner](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/skeleton.stories.tsx) |
|
|
192
192
|
| **LoadingRows**<br>since 0.4.1 | N uniform skeleton rows while a list or table loads. | A single shape (`Skeleton`). | `Array.from({ length }).map(<Skeleton/>)` | [Skeleton](#feedback), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/loading-rows.stories.tsx) |
|
|
193
|
-
| **ProgressBar**<br>also: `progressBarVariants`, `PROGRESS_LEGACY_TO_INTENT`<br>since 0.0.0 | A determinate (or indeterminate) horizontal meter; `intent` sets the colour
|
|
194
|
-
| **ProgressRing**<br>also: `progressRingVariants`<br>since 0.0.0 | A circular meter for a card or tile, with the same `intent`
|
|
193
|
+
| **ProgressBar**<br>also: `progressBarVariants`, `PROGRESS_LEGACY_TO_INTENT`<br>since 0.0.0 | A determinate (or indeterminate) horizontal meter; `intent` sets the colour (default `brand`; no auto-colour by value since 2.0). | A compact circular meter (`ProgressRing`), discrete steps (`SegmentedProgress`, `Stepper`) or the suite's percent readout (`SuiteProgress`). | `<progress>`, `nested div with width:%` | [ProgressRing](#feedback), [SegmentedProgress](#feedback), [SuiteProgress](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/progress-bar.stories.tsx) |
|
|
194
|
+
| **ProgressRing**<br>also: `progressRingVariants`<br>since 0.0.0 | A circular meter for a card or tile, with the same `intent` colours (default `brand`) as `ProgressBar`. | A wide layout (`ProgressBar`) or a donut of several series (`DonutChart`). | — | [ProgressBar](#feedback), [DonutChart](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/progress-ring.stories.tsx) |
|
|
195
195
|
| **SegmentedProgress**<br>since 1.2.0 | Progress through a known number of steps as filled segments (onboarding, checklists). | The steps have names (`Stepper`) or the value is continuous (`ProgressBar`). | — | [Stepper](#navigation), [ProgressBar](#feedback), [SuiteProgress](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/segmented-progress.stories.tsx) |
|
|
196
196
|
| **SuiteProgress**<br>also: `suiteProgressFillVariants`<br>since 1.34.0 | The suite's discrete segmented meter with a percent readout, tinted per product or `intent`. | A generic segmented meter (`SegmentedProgress`) or a continuous one (`ProgressBar`). | — | [SegmentedProgress](#feedback), [ProgressBar](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/suite-progress.stories.tsx) |
|
|
197
197
|
| **EmptyState**<br>since 0.0.0 | A list or panel has nothing to show: icon, title, description and one action. | The feature does not exist yet (`ComingSoon`) or content is loading (`Skeleton`). | `centred div with an icon and grey text` | [ComingSoon](#feedback), [LoadingRows](#feedback), [ErrorState](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/empty-state.stories.tsx) |
|
|
198
198
|
| **ErrorState**<br>since 1.38.0 | A list or panel failed to load: danger icon tile, title, description and a retry button (`onRetry`). `size="compact"` inside a table. | There is simply nothing to show (`EmptyState`) or the error belongs to a form field (`FieldError`). | `centred div with a warning icon and a Try again button` | [EmptyState](#feedback), [TableError](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/error-state.stories.tsx) |
|
|
199
|
-
| **ComingSoon
|
|
200
|
-
| **AttentionItem** (deprecated)<br>since 1.2.0 | One row of an attention queue: icon, title, description, service tone and trailing action. | A notification (`NotificationPanel` items) or an activity event (`ActivityList` items). | — | [NotificationPanel](#data-display), [ActivityList](#data-display), [KpiCard](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/attention-item.stories.tsx) |
|
|
201
|
-
| **MissingDocumentsPanel** (deprecated)<br>since 1.4.0 | The firm-side panel listing documents a client has not provided, with a Request action. | The client-side checklist (`DocumentChecklist`). | — | [DocumentChecklist](#data-display), [DocumentRequestDetail](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/missing-documents-panel.stories.tsx) |
|
|
202
|
-
| **AiDraftCard** (deprecated)<br>since 1.5.0 | Present an AI-generated draft inside a composer: one `state` prop drives loading, refining, error and ready (collapsible); you pass the body and actions. | A human message (`MessageBubble`) or AI quick replies (`SuggestionPills`). | — | [MessageComposer](#forms), [SuggestionPills](#actions), [AIReceiptPanel](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/ai-draft-card.stories.tsx) |
|
|
203
|
-
| **AIReceiptPanel** (deprecated)<br>since 1.2.0 | The receipt-reading panel: idle, reading and done states with the extracted result and an Attach action. | A generic upload (`FileUpload`) or a draft message (`AiDraftCard`). | — | [AiDraftCard](#feedback), [FileUpload](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/ai-receipt-panel.stories.tsx) |
|
|
199
|
+
| **ComingSoon** (`/suite`)<br>since 0.0.0 | A placeholder for a feature that is not available yet: icon, title, description and a feature list. | The feature exists but has no data (`EmptyState`). | — | [EmptyState](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/coming-soon.stories.tsx) |
|
|
200
|
+
| **AttentionItem** (deprecated) (`/legacy`)<br>since 1.2.0 | One row of an attention queue: icon, title, description, service tone and trailing action. | A notification (`NotificationPanel` items) or an activity event (`ActivityList` items). | — | [NotificationPanel](#data-display), [ActivityList](#data-display), [KpiCard](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/attention-item.stories.tsx) |
|
|
201
|
+
| **MissingDocumentsPanel** (deprecated) (`/legacy`)<br>since 1.4.0 | The firm-side panel listing documents a client has not provided, with a Request action. | The client-side checklist (`DocumentChecklist`). | — | [DocumentChecklist](#data-display), [DocumentRequestDetail](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/missing-documents-panel.stories.tsx) |
|
|
202
|
+
| **AiDraftCard** (deprecated) (`/legacy`)<br>since 1.5.0 | Present an AI-generated draft inside a composer: one `state` prop drives loading, refining, error and ready (collapsible); you pass the body and actions. | A human message (`MessageBubble`) or AI quick replies (`SuggestionPills`). | — | [MessageComposer](#forms), [SuggestionPills](#actions), [AIReceiptPanel](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/ai-draft-card.stories.tsx) |
|
|
203
|
+
| **AIReceiptPanel** (deprecated) (`/legacy`)<br>since 1.2.0 | The receipt-reading panel: idle, reading and done states with the extracted result and an Attach action. | A generic upload (`FileUpload`) or a draft message (`AiDraftCard`). | — | [AiDraftCard](#feedback), [FileUpload](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/ai-receipt-panel.stories.tsx) |
|
|
204
204
|
|
|
205
205
|
## Overlays
|
|
206
206
|
|
|
@@ -230,13 +230,13 @@ Move between places: tabs, breadcrumbs, pagination, steppers, trees and rails.
|
|
|
230
230
|
| Component | Use when | Don't use when | Replaces raw HTML | Related | Links |
|
|
231
231
|
| --- | --- | --- | --- | --- | --- |
|
|
232
232
|
| **Tabs**<br>parts: `TabsList`, `TabsTrigger`, `TabsContent`<br>since 0.0.0 | Switch between panels of one page; roving focus, `value`/`onValueChange`. | The switch changes a mode rather than showing another panel (`ToggleGroup`), or it is the mobile app-level bar (`BottomNav`). | `<ul role="tablist">`, `buttons toggling useState panels` | [ToggleGroup](#selection), [ChannelTabs](#navigation), [BottomNav](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/tabs.stories.tsx) |
|
|
233
|
-
| **ChannelTabs** (deprecated)<br>since 1.5.0 | Pill tabs switching between communication channels on a thread, each with a toned status dot and unread count; fully controlled. | Generic panels (`Tabs`). | — | [Tabs](#navigation), [StatusDot](#data-display), [MessageBubble](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/channel-tabs.stories.tsx) |
|
|
233
|
+
| **ChannelTabs** (deprecated) (`/legacy`)<br>since 1.5.0 | Pill tabs switching between communication channels on a thread, each with a toned status dot and unread count; fully controlled. | Generic panels (`Tabs`). | — | [Tabs](#navigation), [StatusDot](#data-display), [MessageBubble](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/channel-tabs.stories.tsx) |
|
|
234
234
|
| **Breadcrumb**<br>parts: `BreadcrumbList`, `BreadcrumbItem`, `BreadcrumbLink`, `BreadcrumbPage`, `BreadcrumbSeparator`<br>since 0.0.0 | The path to the current page; `BreadcrumbPage` marks the current one, `BreadcrumbLink asChild` wraps your router link. | The page title itself (`PageHeader`) or the app-level bar (`AppHeaderBreadcrumb` inside `AppHeader`). | `<nav aria-label="breadcrumb"><ol>` | [PageHeader](#layout), [AppHeader](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/breadcrumb.stories.tsx) |
|
|
235
|
-
| **Pagination**<br>since 0.0.0 | Page controls for a paged list: current/total pages, sibling count, optional total items. | Infinite scroll. Inside a `DataTable`, `DataTablePagination` is the same component with the table defaults. | `<nav> of page number buttons` | [DataTable](#data-display), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/pagination.stories.tsx) |
|
|
235
|
+
| **Pagination**<br>since 0.0.0 | Page controls for a paged list: current/total pages, sibling count, optional total items. Renders on a single page unless `hideOnSinglePage` (2.0). | Infinite scroll. Inside a `DataTable`, `DataTablePagination` is the same component with the table defaults. | `<nav> of page number buttons` | [DataTable](#data-display), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/pagination.stories.tsx) |
|
|
236
236
|
| **Stepper**<br>since 0.0.0 | Named steps of a multi-step flow, horizontal or vertical, with the current step marked. | Unnamed progress (`SegmentedProgress`) or a timeline of past events (`EngagementTimeline`). | — | [SegmentedProgress](#feedback), [EngagementTimeline](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/stepper.stories.tsx) |
|
|
237
|
-
| **BottomNav** (deprecated)<br>since 1.2.0 | The mobile tab bar at the bottom of the app: tabs with icons and badges, controlled `value`. | Desktop navigation (`Sidebar`) or in-page panels (`Tabs`). | — | [Sidebar](#shell-screens), [Tabs](#navigation), [StickyActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/bottom-nav.stories.tsx) |
|
|
237
|
+
| **BottomNav** (deprecated) (`/legacy`)<br>since 1.2.0 | The mobile tab bar at the bottom of the app: tabs with icons and badges, controlled `value`. | Desktop navigation (`Sidebar`) or in-page panels (`Tabs`). | — | [Sidebar](#shell-screens), [Tabs](#navigation), [StickyActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/bottom-nav.stories.tsx) |
|
|
238
238
|
| **FolderTree**<br>since 1.2.0 | A collapsible tree of folders with an active node, default-open ids and selection callback. | A flat list (`ClientRailItem`) or a file list (`DocumentList`). | — | [DocumentsWorkspaceLayout](#layout), [ClientRailItem](#navigation), [Collapsible](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/folder-tree.stories.tsx) |
|
|
239
|
-
| **ClientRailItem
|
|
239
|
+
| **ClientRailItem** (`/legacy`)<br>parts: `ClientRailGroupHeader` (`/legacy`)<br>since 1.4.0 | One client row in the Documents left rail (avatar, name, counts) plus the section label above a group. | Picking a client in a form (`ClientSelect`) or the main navigation (`SidebarLink`). | — | [DocumentsWorkspaceLayout](#layout), [ClientSelect](#selection), [Sidebar](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/client-rail-item.stories.tsx) |
|
|
240
240
|
|
|
241
241
|
## Layout
|
|
242
242
|
|
|
@@ -254,15 +254,15 @@ Arrange content: stacks, surfaces, cards, separators, section and page framing.
|
|
|
254
254
|
| **ScrollArea**<br>parts: `ScrollBar`<br>since 0.0.0 | A scrollable region with styled, consistent scrollbars (panels, menus, side rails). | The document scrolls (leave it to the browser). | `<div class="overflow-auto">` | [Sheet](#overlays), [Sidebar](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/scroll-area.stories.tsx) |
|
|
255
255
|
| **Collapsible**<br>parts: `CollapsibleTrigger`, `CollapsibleContent`<br>since 0.0.0 | Show/hide one region from a trigger, animated and reduced-motion aware. | Several mutually exclusive sections (`Accordion`). | `<details>/<summary>`, `useState toggle` | [Accordion](#layout), [FolderTree](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/collapsible.stories.tsx) |
|
|
256
256
|
| **Accordion**<br>parts: `AccordionItem`, `AccordionTrigger`, `AccordionContent`<br>since 0.0.0 | A list of expandable sections, single or multiple open. | One region (`Collapsible`) or navigation between panels (`Tabs`). | `stack of <details>` | [Collapsible](#layout), [Tabs](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/accordion.stories.tsx) |
|
|
257
|
-
| **Section
|
|
258
|
-
| **SectionHeader
|
|
257
|
+
| **Section** (`/legacy`)<br>parts: `SectionHead` (`/legacy`)<br>since 0.0.0 | A max-width centred content section with the canonical `--content-pad` gutter and a `SectionHead` title row. | The page already sits in `Content` of the `Shell` and needs a page title (`PageHeader`). | `<section class="mx-auto max-w-… px-8">` | [SectionHeader](#layout), [PageHeader](#layout), [Shell](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/section.stories.tsx) |
|
|
258
|
+
| **SectionHeader** (`/legacy`)<br>since 0.0.0 | A title + description block for a marketing-style or settings section. | The top of a page (`PageHeader`) or a form group (`FieldsetLegend`). | `<h2> + <p> pair` | [PageHeader](#layout), [Heading](#typography), [Section](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/section-header.stories.tsx) |
|
|
259
259
|
| **PageHeader**<br>parts: `PageHeaderSpec`, `PageHeaderSep`<br>since 0.3.0 | The top-of-page title block: eyebrow, headline with trailing actions, description and a meta row (`PageHeaderSpec` items separated by `PageHeaderSep`). | The sticky app bar (`AppHeader`) or a section inside the page (`SectionHeader`). | `<div class="flex items-center justify-between"><h1>` | [AppHeader](#shell-screens), [SectionHeader](#layout), [Breadcrumb](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/page-header.stories.tsx) |
|
|
260
|
-
| **CategoryDivider** (deprecated)<br>parts: `CategoryTag
|
|
260
|
+
| **CategoryDivider** (deprecated) (`/legacy`)<br>parts: `CategoryTag` (`/legacy`)<br>since 1.3.0 | Separate a run of items by service line: a tone-tinted category pill, a hairline and an optional count — the one place per-service colour is allowed. | A plain rule (`Separator`) or a status (`StatusBadge`). | — | [Separator](#layout), [serviceToneStyle](#hooks-utilities) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/category-divider.stories.tsx) |
|
|
261
261
|
| **StickyStack**<br>parts: `StickyStackLayer`, `StickyStackSticky`, `StickyStackSectionHeader`<br>since 1.30.1 | Several fixed layers (app header, toolbar, section headers) that must stack without overlapping: layers are measured and sticky regions consume the offset. | One sticky element (`position: sticky` on it) or a bottom bar (`StickyActionBar`). | `hard-coded top-[56px] sticky offsets` | [AppHeader](#shell-screens), [StickyActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sticky-stack.stories.tsx) |
|
|
262
262
|
| **Detail layout**<br>parts: `DetailSpine`, `DetailSpineHeader`, `DetailSpineSection`, `DetailSpineStats`, `DetailMain`<br>since 0.3.0 | A record detail page: a sticky 320px spine (identity, key facts, stats) and a scrolling main column for tabs, sections and feeds. | A list with a selected item beside it (`MasterDetailLayout`) or a plain page (`Section`). | `<div class="grid grid-cols-[320px_1fr]">` | [MasterDetailLayout](#layout), [MetadataGrid](#data-display), [Tabs](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/detail.stories.tsx) |
|
|
263
263
|
| **MasterDetailLayout**<br>since 1.3.0 | A list on the left and the selected item's detail on the right, collapsing to one pane on small screens. | A record page with a spine (`DetailGrid`) or the three-pane documents workspace (`DocumentsWorkspaceLayout`). | — | [DetailGrid](#layout), [DocumentsWorkspaceLayout](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/master-detail-layout.stories.tsx) |
|
|
264
|
-
| **DocumentsWorkspaceLayout** (deprecated)<br>since 1.4.0 | The three-pane documents workspace: clients rail, folder tree and files area as slots. | Two panes (`MasterDetailLayout`). | — | [ClientRailItem](#navigation), [FolderTree](#navigation), [DocumentDetailPanel](#data-display), [MasterDetailLayout](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/documents-workspace-layout.stories.tsx) |
|
|
265
|
-
| **DashGrid** (deprecated)<br>since 1.2.0 | A dashboard of reorderable widgets in 2–4 columns with the order persisted under `storageKey`. | A static grid of cards (CSS grid of `Card`s). | — | [KpiCard](#data-display), [Card](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/dash-grid.stories.tsx) |
|
|
264
|
+
| **DocumentsWorkspaceLayout** (deprecated) (`/legacy`)<br>since 1.4.0 | The three-pane documents workspace: clients rail, folder tree and files area as slots. | Two panes (`MasterDetailLayout`). | — | [ClientRailItem](#navigation), [FolderTree](#navigation), [DocumentDetailPanel](#data-display), [MasterDetailLayout](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/documents-workspace-layout.stories.tsx) |
|
|
265
|
+
| **DashGrid** (deprecated) (`/legacy`)<br>since 1.2.0 | A dashboard of reorderable widgets in 2–4 columns with the order persisted under `storageKey`. | A static grid of cards (CSS grid of `Card`s). | — | [KpiCard](#data-display), [Card](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/dash-grid.stories.tsx) |
|
|
266
266
|
| **RouteTransition**<br>since 1.3.0 | Fade and slide a page panel in when `routeKey` changes; respects reduced motion. | Animating a component's own presence (the overlays already do) or a list (leave static). | — | [Shell](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/route-transition.stories.tsx) |
|
|
267
267
|
| **VisuallyHidden**<br>since 0.0.0 | Text for assistive technology that must not be seen: the name of an icon-only control you compose yourself, a live-region message. | Hiding from everyone (`hidden`) or an `IconButton` (it names itself). | `class="sr-only"` | [IconButton](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/visually-hidden.stories.tsx) |
|
|
268
268
|
|
|
@@ -276,9 +276,9 @@ Text roles. Use these instead of bare `<h*>`, `<p>`, `<code>` and `<kbd>` so typ
|
|
|
276
276
|
| **Text** (experimental)<br>since 1.33.0 | Body, caption and label text: `size` is the typography role, `color` the token, `asChild` renders your element (a link, a `<p>`). | A heading (`Heading`), an identifier or snippet (`Code`) or a control's label (`Label`). | `<p>`, `<span class="text-sm text-gray-500">` | [Heading](#typography), [Code](#typography), [Eyebrow](#typography) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/typography/text.stories.tsx) |
|
|
277
277
|
| **Code** (experimental)<br>since 1.33.0 | Monospace text: an identifier, a path, a value, a snippet (inline or block); server-safe. | A keyboard key (`Kbd`) or tabular figures in body text (`Numeric`). | `<code>`, `<pre>` | [Kbd](#typography), [Eyebrow](#typography) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/typography/code.stories.tsx) |
|
|
278
278
|
| **Kbd** (experimental)<br>since 1.33.0 | A keyboard key or shortcut, with platform spelling decided after mount (⌘ vs Ctrl). | A hint next to a control in the intent-atom style (`KbdHint`) or code (`Code`). | `<kbd>` | [Eyebrow](#typography), [KeyboardShortcutsDialog](#overlays) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/typography/kbd.stories.tsx) |
|
|
279
|
-
| **Blockquote
|
|
279
|
+
| **Blockquote** (`/legacy`)<br>since 0.0.0 | A quoted passage with the design system's rule and spacing. | A callout with an intent (`Alert`). | `<blockquote>` | [Alert](#feedback), [Text](#typography) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/blockquote.stories.tsx) |
|
|
280
280
|
| **Intent atoms**<br>parts: `MutedSpec`, `Numeric`, `KbdHint`<br>since 0.3.0 | Intent-named text atoms that bake in typography and colour tokens: `Eyebrow` (small caps label), `MutedSpec` (secondary spec text), `Numeric` (tabular figures), `KbdHint` (a key hint). | General body text with a chosen role (`Text`) or a heading (`Heading`). | — | [Text](#typography), [Kbd](#typography), [Stat](#typography) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/intent-atoms.stories.tsx) |
|
|
281
|
-
| **Stat
|
|
281
|
+
| **Stat** (`/legacy`)<br>since 0.0.0 | A large number with a caption in display type. | A dashboard tile with tone, icon and hint (`KpiCard`). | — | [KpiCard](#data-display), [Eyebrow](#typography) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/stat.stories.tsx) |
|
|
282
282
|
|
|
283
283
|
## Data display
|
|
284
284
|
|
|
@@ -294,34 +294,34 @@ Show records and status: tables, key/value grids, badges, dots, avatars, lists a
|
|
|
294
294
|
| **TableLoading** (experimental)<br>since 1.38.0 | The `<tbody aria-busy>` of a data table while its rows load: skeleton rows sized to the columns. Slots in place of `DataTableBody`. | A list outside a table (`LoadingRows`) or a single shape (`Skeleton`). | `<tbody> of hand-rolled skeleton <td>s` | [TableEmpty](#data-display), [TableError](#data-display), [DataTable](#data-display), [LoadingRows](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-states.stories.tsx) |
|
|
295
295
|
| **TableEmpty** (experimental)<br>since 1.38.0 | The `<tbody>` of a data table with no rows: one full-width row holding a compact `EmptyState`. | An empty panel outside a table (`EmptyState`). | `<tr><td colSpan> with centred grey text` | [TableLoading](#data-display), [TableError](#data-display), [EmptyState](#feedback), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-states.stories.tsx) |
|
|
296
296
|
| **TableError** (experimental)<br>since 1.38.0 | The `<tbody>` of a data table whose rows failed to load: one full-width row holding a compact `ErrorState` with retry. | An error panel outside a table (`ErrorState`). | `<tr><td colSpan> with an error message and a retry button` | [TableLoading](#data-display), [TableEmpty](#data-display), [ErrorState](#feedback), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-states.stories.tsx) |
|
|
297
|
-
| **DataTableView**<br>parts: `StagePill` (deprecated), `Assignee` (deprecated), `MoneyCell` (deprecated), `TagsCell
|
|
297
|
+
| **DataTableView**<br>parts: `StagePill` (`/legacy`) (deprecated), `Assignee` (`/legacy`) (deprecated), `MoneyCell` (`/legacy`) (deprecated), `TagsCell` (`/legacy`), `Dash` (`/legacy`) (deprecated)<br>since 1.6.0 | A list screen as configuration: `columns` + `data` (+ filters, search keys, sort); owns search/filter/sort/pagination state. Cell renderers `StagePill`, `Assignee`, `MoneyCell`, `TagsCell`, `Dash` for `column.render`. | You need custom table composition (`DataTable`). | — | [DataTable](#data-display), [DisplayMenu](#actions), [Toolbar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-view.stories.tsx) |
|
|
298
298
|
| **MetadataGrid**<br>parts: `DataItem`<br>since 0.4.1 | Label / value pairs on a detail surface as a semantic `<dl>`; `DataItem span={2}` for full-row values. | Tabular records (`Table`) or a stat tile (`KpiCard`). | `<dl>`, `two-column label/value divs` | [DetailGrid](#layout), [Table](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/metadata-grid.stories.tsx) |
|
|
299
299
|
| **KpiCard**<br>parts: `SelectableKpiCard`<br>since 0.4.1 | A single-stat dashboard tile: label, value, optional tone, icon and hint; `SelectableKpiCard` when tiles act as filters. | A number inside running content (`Stat`) or a chart (`DonutChart`). | — | [Stat](#typography), [DashGrid](#layout), [Card](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/kpi-card.stories.tsx) |
|
|
300
300
|
| **Badge**<br>also: `badgeVariants`, `resolveBadgeAppearance`<br>since 0.0.0 | A short static label or count: `variant` (solid, soft, outline) × `intent`. | A status with a shared vocabulary (`StatusBadge`), a removable token (`Chip`) or a machine-suggested intent (`IntentBadge`). | `<span class="rounded-full px-2 text-xs">` | [StatusBadge](#data-display), [Chip](#selection), [IntentBadge](#data-display), [StatusDot](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/badge.stories.tsx) |
|
|
301
301
|
| **StatusBadge**<br>also: `defineStatusMap`<br>since 1.35.0 | The presentation of a status: soft badge, indicator dot, icon; define the product's statuses once with `defineStatusMap` and spread an entry onto it. | A count or neutral label (`Badge`) or a stage pill inside `DataTableView` (`StagePill`). | — | [Badge](#data-display), [StatusDot](#data-display), [StatusPill](#data-display), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/status-badge.stories.tsx) |
|
|
302
|
-
| **StatusPill
|
|
303
|
-
| **IntentBadge** (deprecated)<br>since 1.5.0 | A dashed-outline badge for an AI-classified intent: signals machine-suggested, not yet confirmed. | Authoritative state (`StatusBadge`). | — | [StatusBadge](#data-display), [Badge](#data-display), [AiDraftCard](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/intent-badge.stories.tsx) |
|
|
302
|
+
| **StatusPill** (`/legacy`)<br>since 1.2.0 | Only in code that already uses it: the fixed-vocabulary pill (`status`, optional dot) for authoritative state. | New code — `StatusBadge` with `defineStatusMap`. | — | [StatusBadge](#data-display), [IntentBadge](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/status-pill.stories.tsx) |
|
|
303
|
+
| **IntentBadge** (deprecated) (`/legacy`)<br>since 1.5.0 | A dashed-outline badge for an AI-classified intent: signals machine-suggested, not yet confirmed. | Authoritative state (`StatusBadge`). | — | [StatusBadge](#data-display), [Badge](#data-display), [AiDraftCard](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/intent-badge.stories.tsx) |
|
|
304
304
|
| **StatusDot**<br>also: `statusDotVariants`, `STATUS_DOT_TONE_TO_INTENT`<br>since 1.3.0 | A standalone attention / unread / presence dot on non-avatar surfaces: nav rails, bells, list rows; `intent` colours it. | Next to an avatar (`Avatar` renders its own presence dot) or with a label (`StatusBadge`). | `<span class="h-2 w-2 rounded-full bg-red-500">` | [StatusBadge](#data-display), [Avatar](#data-display), [Sidebar](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/status-dot.stories.tsx) |
|
|
305
305
|
| **IconTile**<br>also: `iconTileVariants`, `ICON_TILE_TONE_TO_INTENT`<br>since 1.3.0 | The tinted rounded-square icon chip that leads a list row or card: `intent` tints the square and the glyph. | An action (`IconButton`) or a file type (`FileTypeBadge`). | `<div class="grid place-items-center rounded-lg bg-…"><svg/>` | [FileTypeBadge](#data-display), [Avatar](#data-display), [IconButton](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/icon-tile.stories.tsx) |
|
|
306
306
|
| **Avatar**<br>since 0.0.0 | A person or organisation: image with initials fallback, sizes, optional presence dot. | A file (`FileTypeBadge`) or a product mark (brand icons, `Logo`). | `<img class="rounded-full">` | [StatusDot](#data-display), [DataTableView](#data-display), [TeamMemberSelect](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/avatar.stories.tsx) |
|
|
307
307
|
| **FileTypeBadge**<br>also: `fileTypeBadgeVariants`, `fileTypeFromName`<br>since 1.3.0 | The coloured format square (PDF, IMG, DOC…) for a file; `fileTypeFromName` derives the type. | A whole file row (`AttachmentChip`, `FileChip`, `DocumentFileRow`). | — | [AttachmentChip](#data-display), [FileChip](#data-display), [IconTile](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/file-type-badge.stories.tsx) |
|
|
308
308
|
| **FileChip**<br>since 1.2.0 | A compact file token: name, meta, kind icon, one action. | A full attachment row with view/download (`AttachmentChip`) or a document in the portal (`DocumentFileRow`). | — | [AttachmentChip](#data-display), [FileTypeBadge](#data-display), [Chip](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/file-chip.stories.tsx) |
|
|
309
309
|
| **AttachmentChip**<br>also: `attachmentChipVariants`<br>since 1.3.0 | A full attachment row: `FileTypeBadge`, truncated name with meta, trailing view/download and your actions; presentational. | A compact token (`FileChip`) or an upload control (`FileUpload`). | — | [FileChip](#data-display), [FileTypeBadge](#data-display), [FileUpload](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/attachment-chip.stories.tsx) |
|
|
310
|
-
| **DocumentSourceTag** (deprecated)<br>since 1.12.0 | Where a document came from (uploaded, emailed, scanned…): glyph + label tag. | Filtering by source (`DocumentSourceFilter`). | — | [DocumentSourceFilter](#selection), [DocumentDetailPanel](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-source-tag.stories.tsx) |
|
|
310
|
+
| **DocumentSourceTag** (deprecated) (`/legacy`)<br>since 1.12.0 | Where a document came from (uploaded, emailed, scanned…): glyph + label tag. | Filtering by source (`DocumentSourceFilter`). | — | [DocumentSourceFilter](#selection), [DocumentDetailPanel](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-source-tag.stories.tsx) |
|
|
311
311
|
| **ActivityList**<br>parts: `ActivityItem`, `ActivityEventItem`<br>since 0.3.0 | An activity feed: actor/text/target rows (`ActivityItem`) and titled events with a time and coloured dot (`ActivityEventItem`). | Notifications with filters and read state (`NotificationPanel`) or a process timeline (`EngagementTimeline`). | `<ul> of hand-styled feed rows` | [NotificationPanel](#data-display), [EngagementTimeline](#data-display), [AttentionItem](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/activity-list.stories.tsx) |
|
|
312
312
|
| **NotificationPanel**<br>parts: `NotificationPanelHeader`, `NotificationFilter`, `NotificationList`, `NotificationItem`, `NotificationPanelFooter`<br>since 0.7.0 | The notifications flyout: header, filter, list of items with read state, footer actions. | A page-level activity feed (`ActivityList`). | — | [ActivityList](#data-display), [StatusDot](#data-display), [Popover](#overlays) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/notification-panel.stories.tsx) |
|
|
313
313
|
| **Kanban**<br>parts: `KanbanColumn`, `KanbanCard`<br>since 0.3.0 | A board of columns and cards for stage-based work. | The data is tabular (`DataTableView`). | — | [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/kanban.stories.tsx) |
|
|
314
|
-
| **EngagementCard** (deprecated)<br>since 1.2.0 | The client-portal card for one engagement: service, tone, title, progress and next step. | A generic card (`Card`) or a KPI (`KpiCard`). | — | [EngagementTimeline](#data-display), [Card](#layout), [serviceToneStyle](#hooks-utilities) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/engagement-card.stories.tsx) |
|
|
315
|
-
| **EngagementTimeline** (deprecated)<br>parts: `EngagementTimelineStep
|
|
314
|
+
| **EngagementCard** (deprecated) (`/legacy`)<br>since 1.2.0 | The client-portal card for one engagement: service, tone, title, progress and next step. | A generic card (`Card`) or a KPI (`KpiCard`). | — | [EngagementTimeline](#data-display), [Card](#layout), [serviceToneStyle](#hooks-utilities) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/engagement-card.stories.tsx) |
|
|
315
|
+
| **EngagementTimeline** (deprecated) (`/legacy`)<br>parts: `EngagementTimelineStep` (`/legacy`)<br>since 1.2.0 | The steps of an engagement as a toned vertical timeline. | A flow the user navigates (`Stepper`) or an activity feed (`ActivityList`). | — | [EngagementCard](#data-display), [Stepper](#navigation), [ActivityList](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/engagement-timeline.stories.tsx) |
|
|
316
316
|
| **MessageBubble**<br>parts: `MessageBubbleAction`, `MessageBubbleTombstone`<br>since 0.12.0 | One chat message in a thread, inbound or outbound, with hover actions and a tombstone for deleted messages. | An email (`EmailMessageCard`) or an AI draft (`AiDraftCard`). | — | [EmailMessageCard](#data-display), [MessageComposer](#forms), [ChannelTabs](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/message-bubble.stories.tsx) |
|
|
317
|
-
| **EmailMessageCard** (deprecated)<br>since 1.5.0 | An email in a thread as an envelope card (header, readable body, footer) with auto-clamp and show-full toggle; you sanitise the HTML. | A chat message (`MessageBubble`). | — | [MessageBubble](#data-display), [AttachmentChip](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/email-message-card.stories.tsx) |
|
|
318
|
-
| **DocumentChecklist** (deprecated)<br>since 1.21.0 | The client's view of requested documents by lifecycle: awaiting, in review, received, complete. | The firm's missing-documents view (`MissingDocumentsPanel`). | — | [MissingDocumentsPanel](#feedback), [DocumentRequestUpload](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-checklist.stories.tsx) |
|
|
319
|
-
| **DocumentDetailPanel
|
|
320
|
-
| **DocumentFileRow
|
|
321
|
-
| **DocumentRequestDetail
|
|
322
|
-
| **TimeLogger
|
|
323
|
-
| **Proposal pricing
|
|
324
|
-
| **Proposal content
|
|
317
|
+
| **EmailMessageCard** (deprecated) (`/legacy`)<br>since 1.5.0 | An email in a thread as an envelope card (header, readable body, footer) with auto-clamp and show-full toggle; you sanitise the HTML. | A chat message (`MessageBubble`). | — | [MessageBubble](#data-display), [AttachmentChip](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/email-message-card.stories.tsx) |
|
|
318
|
+
| **DocumentChecklist** (deprecated) (`/legacy`)<br>since 1.21.0 | The client's view of requested documents by lifecycle: awaiting, in review, received, complete. | The firm's missing-documents view (`MissingDocumentsPanel`). | — | [MissingDocumentsPanel](#feedback), [DocumentRequestUpload](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/document-checklist.stories.tsx) |
|
|
319
|
+
| **DocumentDetailPanel** (`/suite`)<br>parts: `DocumentDetailHeader` (`/suite`), `DocumentDetailTitle` (`/suite`), `DocumentDetailRequester` (`/suite`), `DocumentDetailMetaRow` (`/suite`), `DocumentDetailBody` (`/suite`), `DocumentDetailActions` (`/suite`), `DocumentList` (`/suite`), `DocumentListSection` (`/suite`), `DocumentRow` (`/suite`)<br>since 1.8.0 | The document detail side panel and the document list it opens from: header, title, requester, meta, body, actions; `DocumentList` sections of `DocumentRow`s. | A file outside the documents workspace (`AttachmentChip`). | — | [DocumentsWorkspaceLayout](#layout), [DocumentFileRow](#data-display), [DocumentSourceTag](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/suite/documents/document-detail-panel.stories.tsx) |
|
|
320
|
+
| **DocumentFileRow** (`/legacy`)<br>parts: `DocumentFileCard` (`/legacy`), `DocumentFileLine` (`/legacy`)<br>since 1.4.0 | A file in the documents workspace as a row, a card or a selectable line (named checkbox). | An attachment outside the workspace (`AttachmentChip`). | — | [DocumentDetailPanel](#data-display), [FileTypeBadge](#data-display), [AttachmentChip](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/document-file-row.stories.tsx) |
|
|
321
|
+
| **DocumentRequestDetail** (`/legacy`)<br>parts: `DocumentRequestCard` (`/legacy`)<br>since 1.9.0 | A document request as a card in a list and as the expanded detail. | The request form field (`DocumentRequestField`) or the client's upload (`DocumentRequestUpload`). | — | [DocumentRequestField](#forms), [DocumentRequestUpload](#forms), [MissingDocumentsPanel](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/document-request-detail.stories.tsx) |
|
|
322
|
+
| **TimeLogger** (`/legacy`)<br>parts: `TimeLoggerHeader` (`/legacy`), `TimeLoggerTimer` (`/legacy`), `TimeLoggerContextRow` (`/legacy`), `TimeLoggerField` (`/legacy`), `TimeLoggerBillable` (`/legacy`), `TimeLoggerNotes` (`/legacy`), `TimeLoggerEntryList` (`/legacy`), `TimeLoggerEntry` (`/legacy`), `TimeLoggerActions` (`/legacy`), `TimeLoggerFooter` (`/legacy`)<br>also: `formatClock`, `formatDuration`, `parseDuration`, `formatCurrency`, `useStopwatch`<br>since 0.15.0 | The compact time-entry panel: compose only the rows a surface needs (timer, context, billable, notes, entries); `useStopwatch` and the duration formatters drive it. | A single duration field (`Input` + `parseDuration`). | — | [Popover](#overlays), [NumberInput](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/time-logger.stories.tsx) |
|
|
323
|
+
| **Proposal pricing** (`/suite`)<br>parts: `ProposalServiceRow` (`/suite`), `ProposalAddOn` (`/suite`), `ProposalBillingTerms` (`/suite`), `ProposalPricingSummary` (`/suite`)<br>since 1.12.0 | The Services & Pricing blocks of a proposal preview: package card, service rows, add-ons, billing terms, summary; inherit the firm accent inside `AgreementViewer`. | Anything outside a proposal (`Card`, `MetadataGrid`). | — | [AgreementViewer](#shell-screens), [ProposalSignatureBlock](#forms), [ProposalSignerList](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/proposal-pricing.stories.tsx) |
|
|
324
|
+
| **Proposal content** (`/suite`)<br>parts: `ProposalNote` (`/suite`), `ProposalCustomPage` (`/suite`)<br>since 1.12.0 | The content blocks of a proposal: signer list, notes, custom pages. | Anything outside a proposal. | — | [AgreementViewer](#shell-screens), [ProposalPackageCard](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/proposal-content.stories.tsx) |
|
|
325
325
|
| **DataTable (compound)** (experimental)<br>since unreleased | A records table driven by `useDataTable`: the toolbar with a labelled search, filters and a column-visibility menu, the table on the `Table*` parts with sort and selection wired to the controller, bulk actions, the merged pager and the built-in loading / empty / error bodies. `classNames.search` and `--ds-data-table-search-width` size the search field. | A table with no state (the `Table` parts alone), the hand-written `DataTable*` parts a product already composes, or the config-driven convenience (`DataTableView`). | `hand-rolled toolbar + <table> + pager around per-table useState` | [useDataTable](#hooks-utilities), [Table](#data-display), [DataTable](#data-display), [DataTableView](#data-display), [Pagination](#navigation), [BulkActionBar](#actions), [TableLoading](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/patterns/data/data-table.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/data-tables.md) |
|
|
326
326
|
| **EmptyValue** (experimental)<br>since unreleased | A table or detail cell has no value: renders the em dash placeholder consistently. | The value is genuinely empty text a user typed — render it as-is. | `<span>—</span>` | — | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-view.stories.tsx) |
|
|
327
327
|
|
|
@@ -337,7 +337,7 @@ Charts, previews and brand artwork.
|
|
|
337
337
|
| **RankedBars**<br>since 1.2.0 | A ranked list of labelled values as horizontal bars. | Stacked composition (`StackedBarChart`). | — | [StackedBarChart](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/ranked-bars.stories.tsx) |
|
|
338
338
|
| **PdfPreview**<br>since 1.7.0 | Render a PDF inline with paging and zoom. | A spreadsheet (`SpreadsheetPreview`) or just a file row (`AttachmentChip`). | — | [SpreadsheetPreview](#media), [AttachmentChip](#data-display), [AspectRatio](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/pdf-preview.stories.tsx) |
|
|
339
339
|
| **SpreadsheetPreview**<br>since 1.7.0 | Render a spreadsheet's sheets and cells inline. | A PDF (`PdfPreview`) or an editable grid (`Grid`). | — | [PdfPreview](#media), [Table](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/spreadsheet-preview.stories.tsx) |
|
|
340
|
-
| **Logo
|
|
340
|
+
| **Logo** (`/suite`)<br>since 0.0.0 | The Assure suite or product wordmark: official artwork with a glyph + text fallback; `assetPath` resolves the artwork base. | A small product mark alone (brand icon family). | `<img src="/brand/….svg">` | [Sidebar](#shell-screens), [assetPath](#hooks-utilities) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/logo.stories.tsx) |
|
|
341
341
|
|
|
342
342
|
## Icons
|
|
343
343
|
|
|
@@ -358,14 +358,14 @@ Deprecated aliases (same drawing under an older name): `ArrowRightSmallIcon`, `C
|
|
|
358
358
|
|
|
359
359
|
### Brand icons
|
|
360
360
|
|
|
361
|
-
Product and third-party marks: the Assure products plus Google and Microsoft. The `BrandIcon` suffix is the contract disclosure that the drawing is a trademark.
|
|
361
|
+
Product and third-party marks: the Assure products plus Google and Microsoft. The `BrandIcon` suffix is the contract disclosure that the drawing is a trademark. 2 exports.
|
|
362
362
|
|
|
363
363
|
**Use when:** A product switcher, a sign-in provider button, a suite tile.
|
|
364
364
|
**Don't use when:** A generic glyph is meant (use the icon catalogue) or the full wordmark is wanted (`Logo`).
|
|
365
365
|
**Replaces:** `<img src="…logo.svg">`
|
|
366
366
|
**Story:** [src/primitives/logo.stories.tsx](https://github.com/Assure-One/design-system/blob/main/src/primitives/logo.stories.tsx)
|
|
367
367
|
|
|
368
|
-
`
|
|
368
|
+
`GoogleBrandIcon` · `MicrosoftBrandIcon`
|
|
369
369
|
|
|
370
370
|
### State-driven icons
|
|
371
371
|
|
|
@@ -382,12 +382,12 @@ The application frame and full-screen composites: shell, sidebar, header, brand
|
|
|
382
382
|
| --- | --- | --- | --- | --- | --- |
|
|
383
383
|
| **Shell**<br>parts: `Main`, `Content`<br>since 0.3.0 | The application frame: `Shell` holds the `Sidebar` and `Main`; `Main` holds `AppHeader` and `Content`. | A public or marketing page (`Section`). | `<div class="flex h-screen">` | [Sidebar](#shell-screens), [AppHeader](#shell-screens), [BrandScope](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/shell.stories.tsx) |
|
|
384
384
|
| **Sidebar**<br>parts: `SidebarProvider`, `SidebarTrigger`, `SidebarBrand`, `SidebarBrandText`, `SidebarSection`, `SidebarLinkGroup`, `SidebarLink`, `SidebarLinkLabel`, `SidebarLinkBadge`, `SidebarLinkAction`, `SidebarPinButton`, `SidebarUser`, `SidebarFooter`<br>also: `sidebarLinkBadgeVariants`, `useSidebarState`, `useSidebarPeekLock`<br>since 0.3.0 | The app navigation rail: expanded/collapsed/peek states from `SidebarProvider`, brand, sections, link groups with badges and actions, user and footer. | Mobile (`BottomNav`) or a rail of records (`ClientRailItem`). | `<aside> + <nav> hand-rolled` | [Shell](#shell-screens), [SidebarBrandSwitcher](#shell-screens), [BottomNav](#navigation), [SidebarDrawer](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sidebar.stories.tsx) |
|
|
385
|
-
| **SidebarBrandSwitcher
|
|
385
|
+
| **SidebarBrandSwitcher** (`/suite`)<br>parts: `SidebarBrandSwitcherTile` (`/suite`)<br>since 0.11.2 | Switch between Assure products from the sidebar brand slot: tiles for available, current and coming-soon products. | A single-product app (`SidebarBrand`). | — | [Sidebar](#shell-screens), [BrandScope](#shell-screens), [Logo](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sidebar-brand-switcher.stories.tsx) |
|
|
386
386
|
| **AppHeader**<br>parts: `AppHeaderBreadcrumb`, `AppHeaderTitle`, `AppHeaderSearch`, `AppHeaderActions`<br>since 0.3.0 | The sticky 56px top bar inside `Main`: breadcrumb, title, search and actions slots in any order. | The page's own title block (`PageHeader`). | — | [Shell](#shell-screens), [PageHeader](#layout), [NewMenu](#actions), [NotificationPanel](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/app-header.stories.tsx) |
|
|
387
387
|
| **DesignSystemProvider** (experimental)<br>also: `useDsMessages`<br>since unreleased | Mount once in the root layout to configure the whole design system: `messages` overrides for the generic strings components render, `locale` (default `en-US`, pass the one your app knows server-side), `dir`, the portal container, the router `linkComponent` and `imageComponent` for `LinkButton` and `Logo`, the tooltip provider, and opt-in `toasts` / `confirm` regions. `useDsMessages(namespace, override?)` reads the resolved strings inside your own components. | You are on Next.js — `NextDesignSystemProvider` from `/next` fills in the adapters. Theming a subtree is `ThemeScope` / `BrandScope`, not a nested provider. | `hand-rolled i18n or router context for design-system strings and links` | [ThemeScope](#shell-screens), [BrandScope](#shell-screens), [Tooltip](#overlays), [LinkButton](#actions), [Logo](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/foundation/provider/design-system-provider.stories.tsx) |
|
|
388
388
|
| **ThemeScope** (experimental)<br>since unreleased | A subtree that renders with its own colour `scheme`, `brand`, `density`, `dir` or runtime brand theme: stamps the `data-ds-*` attributes on its element and registers them so portalled overlays opened from inside (Dialog, Popover, menus) come up in the same theme; nested scopes merge. | The whole app shares one theme (set the attributes on the document root) or only the product brand changes (`BrandScope`). | `<div data-ds-scheme="dark"> whose dialogs come up in the root theme` | [BrandScope](#shell-screens), [DesignSystemProvider](#shell-screens), [Dialog](#overlays), [Popover](#overlays) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/behavior/portal.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/integration/css.md) |
|
|
389
389
|
| **BrandScope**<br>parts: `BrandScopeProvider`<br>also: `BRAND_PRODUCTS`, `brandLabel`, `brandScope`, `useBrandScope`<br>since 1.18.0 | Theme a subtree as a product: stamps `data-brand` and provides it so portalled surfaces re-stamp themselves; `brandScope(product)` for the attribute alone. | Colouring by service line (`serviceToneStyle`) or by status (`intent`). | — | [Shell](#shell-screens), [SidebarBrandSwitcher](#shell-screens) | [docs](https://github.com/Assure-One/design-system/blob/main/docs/integration/css.md) |
|
|
390
|
-
| **AgreementViewer
|
|
390
|
+
| **AgreementViewer** (`/suite`)<br>parts: `AgreementPaneHeading` (`/suite`)<br>since 1.12.0 | The client-facing agreement / proposal viewer: cover, steps, firm accent scope for the proposal blocks. | Previewing a PDF (`PdfPreview`). | — | [ProposalPackageCard](#data-display), [ProposalSignatureBlock](#forms), [ProposalSignerList](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/agreement-viewer.stories.tsx) |
|
|
391
391
|
| **SidebarDrawer** (experimental)<br>since 1.38.0 | The sidebar nav off-canvas on small viewports: the same tree in a left-hand Sheet, with the focus trap, scroll lock and dismissal the overlay parts already provide. | Desktop widths (`Sidebar`) or a bottom tab bar (`BottomNav`). | — | [Sidebar](#shell-screens), [Sheet](#overlays), [Shell](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sidebar.stories.tsx) |
|
|
392
392
|
|
|
393
393
|
## Hooks/utilities
|
|
@@ -396,8 +396,8 @@ Non-rendering exports: hooks, class-name helpers, formatters and token objects.
|
|
|
396
396
|
|
|
397
397
|
| Component | Use when | Don't use when | Replaces raw HTML | Related | Links |
|
|
398
398
|
| --- | --- | --- | --- | --- | --- |
|
|
399
|
-
| **QUESTION_TYPES** (experimental)<br>since 1.39.0 | Runtime list of every questionnaire question type the DS renders — validate or switch over types from API data. | Rendering a question — use `Questions` / `QuestionnairePanel`. | — | [QUESTION_TYPE_CONTRACT_VERSION](#hooks-utilities), [Questions](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questions.stories.tsx) |
|
|
400
|
-
| **QUESTION_TYPE_CONTRACT_VERSION** (experimental)<br>since 1.39.0 | Check which version of the question-type contract the installed DS implements before trusting a stored questionnaire. | Rendering a question — use `Questions` / `QuestionnairePanel`. | — | [QUESTION_TYPES](#hooks-utilities), [Questions](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questions.stories.tsx) |
|
|
399
|
+
| **QUESTION_TYPES** (experimental) (`/suite`)<br>since 1.39.0 | Runtime list of every questionnaire question type the DS renders — validate or switch over types from API data. | Rendering a question — use `Questions` / `QuestionnairePanel`. | — | [QUESTION_TYPE_CONTRACT_VERSION](#hooks-utilities), [Questions](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questions.stories.tsx) |
|
|
400
|
+
| **QUESTION_TYPE_CONTRACT_VERSION** (experimental) (`/suite`)<br>since 1.39.0 | Check which version of the question-type contract the installed DS implements before trusting a stored questionnaire. | Rendering a question — use `Questions` / `QuestionnairePanel`. | — | [QUESTION_TYPES](#hooks-utilities), [Questions](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questions.stories.tsx) |
|
|
401
401
|
| **cn**<br>since 0.0.0 | Merge class names (clsx + tailwind-merge) when composing `className`; consumer classes still win by cascade, `cn` only dedupes. | Overriding a component part — pass `className`/`classNames` instead of rebuilding its classes. | — | [Button](#actions) | [docs](https://github.com/Assure-One/design-system/blob/main/docs/integration/css.md) |
|
|
402
402
|
| **Data-table controller** (experimental)<br>also: `compareSortValues`, `nextSortDirection`<br>since unreleased | Building a data table: owns sorting, pagination, search, selection, column visibility and filters (each controllable or uncontrolled), derives the rows to render, and in `manual` mode only emits state for a server-driven table. | A static table with no state (the `Table` parts alone), or the data-driven convenience (`DataTableView`) once it is rebuilt on the hook. | — | [Table](#data-display), [DataTable](#data-display), [DataTableView](#data-display), [Pagination](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/behavior/data-table/use-data-table.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/data-tables.md) |
|
|
403
403
|
| **useFieldControl** (experimental)<br>since 1.32.0 | Building your own form control that should bind to `Field` like the design-system ones: returns ids, `aria-*`, invalid/disabled/required wiring; explicit props win. | Wrapping an existing element once (`FieldControl`). | — | [Field](#forms), [FieldControl](#forms) | [docs](https://github.com/Assure-One/design-system/blob/main/docs/adr/006-field-native-form-participation.md) |
|
|
@@ -550,7 +550,7 @@ The raw element or pattern on the left already has a design-system component. Wr
|
|
|
550
550
|
|
|
551
551
|
## Deprecated aliases and their replacements
|
|
552
552
|
|
|
553
|
-
Every deprecated name keeps rendering exactly what it did (zero visual diff) until 3.0. The codemod column names the transform in [`codemods/README.md`](../codemods/README.md) that rewrites call sites (`node node_modules/@assure-one/design-system/codemods/run.mjs <id> src`); a dash means the change is a hand edit. Deprecated exports in the API report: `
|
|
553
|
+
Every deprecated name keeps rendering exactly what it did (zero visual diff) until 3.0. The codemod column names the transform in [`codemods/README.md`](../codemods/README.md) that rewrites call sites (`node node_modules/@assure-one/design-system/codemods/run.mjs <id> src`); a dash means the change is a hand edit. Deprecated exports in the API report: `ArrowRightSmallIcon`, `CloseIcon`, `CountryFlag`, `CountrySelect`, `FormError`, `FormSection`, `FormSuccess`, `PhoneCountryInput`, `PhoneInput`, `SearchSelect`, `SideDrawer`.
|
|
554
554
|
|
|
555
555
|
| Deprecated | Use instead | Codemod | Contract |
|
|
556
556
|
| --- | --- | --- | --- |
|
|
@@ -562,7 +562,7 @@ Every deprecated name keeps rendering exactly what it did (zero visual diff) unt
|
|
|
562
562
|
| `Button intent="destructive"` | `intent="danger"` | — | C-BTN-VARIANT |
|
|
563
563
|
| `Button size="compact"` / `"default"` / `"comfortable"`, `"icon-xs"` / `"icon-sm"` / `"icon"` | `size="sm"` / `"md"` / `"lg"`; icon sizes → `IconButton size` | CM-02 (explicit `size="md"`) | C-BTN-SIZE |
|
|
564
564
|
| `Button` / `LinkButton` / `SubmitButton` `iconLeft` / `iconRight` | `iconStart` / `iconEnd` | CM-05 | C-BTN-ICONPROPS |
|
|
565
|
-
| `Button` without `type` inside a form | `type="submit"` where evident, or `SubmitButton` | CM-12 |
|
|
565
|
+
| `Button` without `type` inside a form (submits in 1.x; `type="button"` in 2.0) | `type="submit"` where evident, or `SubmitButton` | CM-12 | C-BTN-TYPE |
|
|
566
566
|
| `Input` / `Textarea` / `SearchInput` `inputSize` | `size` | CM-07 | C-INPUT-SIZE |
|
|
567
567
|
| `InputSizeAlias` `compact` / `default` / `comfortable` | `sm` / `md` / `lg` | — | C-INPUT-SIZE |
|
|
568
568
|
| `Select` `triggerClassName` / `contentClassName` | `classNames={{ trigger, content }}` | — | C-SELECT-CLASSNAMES |
|
|
@@ -486,7 +486,7 @@
|
|
|
486
486
|
"buttonVariants",
|
|
487
487
|
"resolveButtonStyle"
|
|
488
488
|
],
|
|
489
|
-
"useWhen": "Any action the user triggers: `variant` (solid, soft, outline, ghost, link) × `intent` (brand, neutral, success, danger) × `size` (xs…xl); `loading`, `iconStart`/`iconEnd`, `asChild` for a router link.",
|
|
489
|
+
"useWhen": "Any action the user triggers: `variant` (solid, soft, outline, ghost, link) × `intent` (brand, neutral, success, danger) × `size` (xs…xl); `loading`, `iconStart`/`iconEnd`, `asChild` for a router link. `type` defaults to `button` (2.0).",
|
|
490
490
|
"dontUseWhen": "The control is icon-only (`IconButton`), navigates (`LinkButton`), submits a form (`SubmitButton`) or is a clickable non-button surface (`Pressable`).",
|
|
491
491
|
"replacesRawHtml": [
|
|
492
492
|
"<button>",
|
|
@@ -1446,7 +1446,7 @@
|
|
|
1446
1446
|
"progressBarVariants",
|
|
1447
1447
|
"PROGRESS_LEGACY_TO_INTENT"
|
|
1448
1448
|
],
|
|
1449
|
-
"useWhen": "A determinate (or indeterminate) horizontal meter; `intent` sets the colour
|
|
1449
|
+
"useWhen": "A determinate (or indeterminate) horizontal meter; `intent` sets the colour (default `brand`; no auto-colour by value since 2.0).",
|
|
1450
1450
|
"dontUseWhen": "A compact circular meter (`ProgressRing`), discrete steps (`SegmentedProgress`, `Stepper`) or the suite's percent readout (`SuiteProgress`).",
|
|
1451
1451
|
"replacesRawHtml": [
|
|
1452
1452
|
"<progress>",
|
|
@@ -1464,7 +1464,7 @@
|
|
|
1464
1464
|
"helpers": [
|
|
1465
1465
|
"progressRingVariants"
|
|
1466
1466
|
],
|
|
1467
|
-
"useWhen": "A circular meter for a card or tile, with the same `intent`
|
|
1467
|
+
"useWhen": "A circular meter for a card or tile, with the same `intent` colours (default `brand`) as `ProgressBar`.",
|
|
1468
1468
|
"dontUseWhen": "A wide layout (`ProgressBar`) or a donut of several series (`DonutChart`).",
|
|
1469
1469
|
"related": [
|
|
1470
1470
|
"ProgressBar",
|
|
@@ -1892,7 +1892,7 @@
|
|
|
1892
1892
|
},
|
|
1893
1893
|
"Pagination": {
|
|
1894
1894
|
"category": "navigation",
|
|
1895
|
-
"useWhen": "Page controls for a paged list: current/total pages, sibling count, optional total items.",
|
|
1895
|
+
"useWhen": "Page controls for a paged list: current/total pages, sibling count, optional total items. Renders on a single page unless `hideOnSinglePage` (2.0).",
|
|
1896
1896
|
"dontUseWhen": "Infinite scroll. Inside a `DataTable`, `DataTablePagination` is the same component with the table defaults.",
|
|
1897
1897
|
"replacesRawHtml": [
|
|
1898
1898
|
"<nav> of page number buttons"
|
|
@@ -3419,10 +3419,10 @@
|
|
|
3419
3419
|
"contract": "C-BTN-ICONPROPS"
|
|
3420
3420
|
},
|
|
3421
3421
|
{
|
|
3422
|
-
"deprecated": "`Button` without `type` inside a form",
|
|
3422
|
+
"deprecated": "`Button` without `type` inside a form (submits in 1.x; `type=\"button\"` in 2.0)",
|
|
3423
3423
|
"replacement": "`type=\"submit\"` where evident, or `SubmitButton`",
|
|
3424
3424
|
"codemod": "CM-12",
|
|
3425
|
-
"contract": "
|
|
3425
|
+
"contract": "C-BTN-TYPE"
|
|
3426
3426
|
},
|
|
3427
3427
|
{
|
|
3428
3428
|
"deprecated": "`Input` / `Textarea` / `SearchInput` `inputSize`",
|
package/docs/for-ai-agents.md
CHANGED
|
@@ -11,10 +11,16 @@ Both files ship in the npm package, so they are readable offline:
|
|
|
11
11
|
pnpm add @assure-one/design-system
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
```css
|
|
15
|
+
/* app/globals.css — the split CSS entries (docs/integration/css.md §1–§3) */
|
|
16
|
+
@layer theme, base, ds, components, utilities;
|
|
17
|
+
@import "tailwindcss";
|
|
18
|
+
@import "@assure-one/design-system/css/tokens.css";
|
|
19
|
+
@import "@assure-one/design-system/css/tailwind.css";
|
|
20
|
+
@import "@assure-one/design-system/css/components.css";
|
|
21
|
+
```
|
|
17
22
|
|
|
23
|
+
```tsx
|
|
18
24
|
// components — everything public is on the root entry
|
|
19
25
|
import { Button, Field, Input, Label, Select } from "@assure-one/design-system";
|
|
20
26
|
|
|
@@ -33,7 +39,7 @@ import { NextDesignSystemProvider } from "@assure-one/design-system/next";
|
|
|
33
39
|
|
|
34
40
|
Mount `DesignSystemProvider` (or `NextDesignSystemProvider` on Next.js) once in the root layout: it carries the string overrides (`messages`), `locale`, `dir`, the portal container and the router link/image adapters that `LinkButton` and `Logo` render. `ThemeScope` themes one subtree (scheme, brand, density) and re-stamps the overlays opened from inside it; `BrandScope` is the product brand alone.
|
|
35
41
|
|
|
36
|
-
The root entry is `"use client"`; import icons from `/icons` when you need them in a Server Component. The split CSS entries (`
|
|
42
|
+
The root entry is `"use client"`; import icons from `/icons` when you need them in a Server Component. The full list of split CSS entries (`legacy-aliases.css`, `shadcn.css`, `base.css`), their order and where the app's preset goes are in [`docs/integration/css.md`](./integration/css.md). `@assure-one/design-system/styles.css` is **deprecated** since 1.40 (it still ships until 3.0): never add it to an app. Nothing outside `src/index.ts` and the five entries above is public ([ADR-011](./adr/011-public-api-governance.md)).
|
|
37
43
|
|
|
38
44
|
## 2. Never raw HTML, never re-implement
|
|
39
45
|
|
|
@@ -97,8 +103,8 @@ Every design-system control binds itself to the surrounding `Field` (ids, `aria-
|
|
|
97
103
|
|
|
98
104
|
## 5. The `ds:` prefix and the CSS entries
|
|
99
105
|
|
|
100
|
-
- Every class a component renders is prefixed: `ds:flex ds:bg-surface`. These compile inside `
|
|
101
|
-
- `styles.css` still ships the frozen legacy unprefixed utilities the 1.x apps used directly (`bg-surface`, `text-fg-3`…)
|
|
106
|
+
- Every class a component renders is prefixed: `ds:flex ds:bg-surface`. These compile inside `css/components.css` (and the deprecated `styles.css`), not in your build — that is what makes them stable. Your own code writes ordinary, unprefixed Tailwind. You never write `ds:` classes in a product.
|
|
107
|
+
- The deprecated `styles.css` still ships the frozen legacy unprefixed utilities the 1.x apps used directly (`bg-surface`, `text-fg-3`…) until 3.0. In new mode those names come from `css/tailwind.css` and compile in your build.
|
|
102
108
|
- `@source` into `node_modules/@assure-one/design-system` in your Tailwind config is unnecessary and no longer regenerates component classes with your theme; the per-app preset is the supported way to keep a theme value ([`docs/integration/css.md`](./integration/css.md) §3–4, "What changed in W1-11").
|
|
103
109
|
- Inline styles the design system writes read `var(--ds-x, var(--x))`; do the same when you must write an inline `var()` in this repository.
|
|
104
110
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assure-one/design-system",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.40.0",
|
|
4
4
|
"description": "Assure One design system — tokens, primitives, and patterns for the Assure Suite.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
@@ -208,17 +208,18 @@
|
|
|
208
208
|
"test": "vitest run",
|
|
209
209
|
"test:browser": "vitest run --config vitest.browser.config.ts",
|
|
210
210
|
"typecheck:browser": "tsc -p tests/browser/tsconfig.json --noEmit",
|
|
211
|
-
"test:contracts": "node --test tests/design-system-contracts.test.mjs && pnpm messages:check && node scripts/docs/catalogue.mjs --check && pnpm entry-map:check",
|
|
211
|
+
"test:contracts": "node --test tests/design-system-contracts.test.mjs && pnpm messages:check && node scripts/docs/catalogue.mjs --check && pnpm entry-map:check && pnpm inventory:3 --check",
|
|
212
212
|
"docs:catalogue": "node scripts/docs/catalogue.mjs",
|
|
213
213
|
"contracts:check": "node scripts/contracts/run.mjs --check",
|
|
214
214
|
"contracts:snapshot": "node scripts/contracts/run.mjs --snapshot",
|
|
215
|
-
"typecheck": "tsc --noEmit",
|
|
215
|
+
"typecheck": "tsc --noEmit && tsc -p tsconfig.stories.json --noEmit",
|
|
216
216
|
"typecheck:stories": "tsc -p tsconfig.stories.json --noEmit",
|
|
217
217
|
"api:check": "node scripts/api/api-report.mjs --check",
|
|
218
218
|
"api:update": "node scripts/api/api-report.mjs --update",
|
|
219
219
|
"arch:report": "node scripts/architecture/report.mjs",
|
|
220
220
|
"entry-map": "node scripts/architecture/entry-map.mjs",
|
|
221
221
|
"entry-map:check": "node scripts/architecture/entry-map.mjs --check",
|
|
222
|
+
"inventory:3": "node scripts/compat/inventory-3.mjs",
|
|
222
223
|
"arch:baseline": "node scripts/architecture/report.mjs --update",
|
|
223
224
|
"ratchet": "node scripts/ratchet/run.mjs",
|
|
224
225
|
"ratchet:update": "node scripts/ratchet/run.mjs --update",
|
|
@@ -232,6 +233,7 @@
|
|
|
232
233
|
"codemods:findings": "node scripts/codemods/collect-findings.mjs",
|
|
233
234
|
"dashboard": "node scripts/dashboard.mjs",
|
|
234
235
|
"dashboard:check": "node scripts/dashboard.mjs --check",
|
|
236
|
+
"readiness": "node scripts/release/readiness.mjs",
|
|
235
237
|
"canary": "node scripts/canary/run.mjs",
|
|
236
238
|
"lint": "eslint src examples",
|
|
237
239
|
"format": "prettier --write src",
|