@assure-one/design-system 1.37.0 → 1.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +60 -16
  2. package/codemods/README.md +90 -16
  3. package/codemods/lib/entry-map.mjs +315 -0
  4. package/codemods/lib/registry.mjs +2 -0
  5. package/codemods/transforms/cm-01-entry-imports.mjs +202 -0
  6. package/codemods/transforms/cm-18-data-table-parts.mjs +234 -0
  7. package/dist/brand-theme-B6rem2II.d.ts +59 -0
  8. package/dist/css/components.css +1 -1
  9. package/dist/css/legacy-aliases.css +8 -0
  10. package/dist/css/tokens.css +14 -6
  11. package/dist/design-system-provider-BM_F1C13.d.ts +143 -0
  12. package/dist/icons/index.d.ts +441 -3
  13. package/dist/icons/index.js.map +1 -1
  14. package/dist/index-BAAuIQqP.d.ts +2579 -0
  15. package/dist/index-DxBjmBBp.d.ts +1038 -0
  16. package/dist/index.d.ts +1017 -3293
  17. package/dist/index.js +7598 -5906
  18. package/dist/index.js.map +1 -1
  19. package/dist/legacy/index.d.ts +9 -0
  20. package/dist/legacy/index.js +3 -0
  21. package/dist/legacy/index.js.map +1 -0
  22. package/dist/next/index.d.ts +2 -1
  23. package/dist/reference-BkDbrPIB.d.ts +310 -0
  24. package/dist/styles.css +1 -1
  25. package/dist/suite/index.d.ts +4 -0
  26. package/dist/suite/index.js +3 -0
  27. package/dist/suite/index.js.map +1 -0
  28. package/dist/{system-CyAVbHhM.d.ts → system-DfJIVBlJ.d.ts} +1 -310
  29. package/dist/tokens/index.d.ts +3 -61
  30. package/dist/tokens/index.js +3 -3
  31. package/dist/tokens/index.js.map +1 -1
  32. package/dist/{design-system-provider-C8UlFe52.d.ts → types-k_kjwipx.d.ts} +69 -142
  33. package/dist/vocab-DornLJbW.d.ts +76 -0
  34. package/docs/components.md +62 -32
  35. package/docs/components.registry.json +2415 -465
  36. package/docs/for-ai-agents.md +2 -0
  37. package/eslint-config/index.mjs +210 -0
  38. package/eslint-config/stylelint-rules.mjs +54 -0
  39. package/eslint-config/stylelint.mjs +73 -0
  40. package/package.json +21 -3
  41. package/public/brand/assure-audit-mark.svg +6 -0
  42. package/public/brand/assure-audit.svg +8 -0
  43. package/public/brand/assure-books-mark.svg +6 -0
  44. package/public/brand/assure-books.svg +8 -0
  45. package/public/brand/assure-pro-mark.svg +6 -0
  46. package/public/brand/assure-pro.svg +8 -0
  47. package/public/brand/assure-tax-mark.svg +6 -0
  48. package/public/brand/assure-tax.svg +8 -0
  49. package/public/brand/mycpe-teams-mark.svg +36 -0
  50. package/public/brand/mycpe-teams.svg +66 -0
  51. package/dist/index-vztxMSfl.d.ts +0 -512
package/README.md CHANGED
@@ -16,6 +16,7 @@ The single source of truth for visual design across all Assure products.
16
16
  - [**`docs/integration/css.md`**](./docs/integration/css.md) — how an application loads our CSS: layer order, import sequence, the compatibility preset, removing `@source`, runtime brand theming.
17
17
  - [**`docs/testing.md`**](./docs/testing.md) — rendering the real package in your app's Jest tests (`@assure-one/design-system/testing`, experimental).
18
18
  - [**`docs/forms.md`**](./docs/forms.md) — building a form: `Field` + design-system controls + a Server Action + zod, reset and `required`, what each control submits, and testing it with `fillField` / `selectOption` / `pickDate`.
19
+ - [**`docs/data-tables.md`**](./docs/data-tables.md) — building a data table: the headless `useDataTable` controller (sorting, pagination, search, selection, column visibility, filters — each controllable), server `manual` mode, and the URL-state recipe.
19
20
  - [**`docs/design-system/icons.md`**](./docs/design-system/icons.md) — the icon catalogue and its server-safe entry (`@assure-one/design-system/icons`, experimental): import an icon in a Server Component without a client boundary.
20
21
  - [**`docs/adr/010-design-system-provider.md`**](./docs/adr/010-design-system-provider.md) — the optional `DesignSystemProvider` (messages, locale, link adapter) and the `/next` entry; the quick start is [below](#the-provider-and-the-next-entry-experimental).
21
22
  - [**`claude-skills/`**](./claude-skills) — drop-in Claude Code skill for consuming projects.
@@ -52,14 +53,14 @@ Alongside it, the package now also publishes the individual stylesheets the new
52
53
  CSS mode is built from. They are **experimental**: nothing requires them yet,
53
54
  no component reads them, and importing them changes nothing on its own.
54
55
 
55
- | Subpath | What it is |
56
- | --- | --- |
57
- | `./css/tokens.css` | The `--ds-*` design tokens: `:root`, the colour scheme scope and the brand scopes. Usable without any component. |
58
- | `./css/legacy-aliases.css` | Read-aliases from today's token names to the namespaced ones (`--color-surface: var(--ds-color-surface)`), for as long as your own CSS reads design-system token names. |
59
- | `./css/tailwind.css` | A Tailwind `@theme` bridge, so `bg-surface/40`, `hover:text-fg-3` and `rounded-control` compile in *your* build instead of silently producing nothing. |
60
- | `./css/shadcn.css` | The app-vocabulary bridge: `background`, `foreground`, `primary`, `muted`, `destructive`, the radius scale and the rest, each reading one `--app-*` input you can override. |
61
- | `./css/base.css` | Optional document defaults: body background, ink, font and `color-scheme`. Ships no preflight, no element rules and no font import. |
62
- | `./css/components.css` | The component utilities compiled with Tailwind's `ds` prefix (`ds:flex`, `ds:bg-surface`), inside `@layer ds` and bound to the `--ds-*` tokens. **Unused until the class-vocabulary flip (W1-11):** no component emits a prefixed class yet, so importing it styles nothing. Published so the file, its size and its hygiene can be reviewed before the flip. |
56
+ | Subpath | What it is |
57
+ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
58
+ | `./css/tokens.css` | The `--ds-*` design tokens: `:root`, the colour scheme scope and the brand scopes. Usable without any component. |
59
+ | `./css/legacy-aliases.css` | Read-aliases from today's token names to the namespaced ones (`--color-surface: var(--ds-color-surface)`), for as long as your own CSS reads design-system token names. |
60
+ | `./css/tailwind.css` | A Tailwind `@theme` bridge, so `bg-surface/40`, `hover:text-fg-3` and `rounded-control` compile in _your_ build instead of silently producing nothing. |
61
+ | `./css/shadcn.css` | The app-vocabulary bridge: `background`, `foreground`, `primary`, `muted`, `destructive`, the radius scale and the rest, each reading one `--app-*` input you can override. |
62
+ | `./css/base.css` | Optional document defaults: body background, ink, font and `color-scheme`. Ships no preflight, no element rules and no font import. |
63
+ | `./css/components.css` | The component utilities compiled with Tailwind's `ds` prefix (`ds:flex`, `ds:bg-surface`), inside `@layer ds` and bound to the `--ds-*` tokens. **Unused until the class-vocabulary flip (W1-11):** no component emits a prefixed class yet, so importing it styles nothing. Published so the file, its size and its hygiene can be reviewed before the flip. |
63
64
 
64
65
  Import order is `tokens.css` → `legacy-aliases.css` (optional) → `tailwind.css`
65
66
  → `shadcn.css` (optional) → `base.css` (optional) → `components.css`, after your own
@@ -88,6 +89,21 @@ canvas, and guarantees WCAG AA for every foreground it emits. The seed shape is
88
89
  gated by decision D7 and may change while that decision is open — see
89
90
  [`docs/integration/css.md`](./docs/integration/css.md#5-runtime-brand-theming).
90
91
 
92
+ ### Brand artwork
93
+
94
+ The Assure wordmarks and marks `Logo` renders ship inside the package, under
95
+ `public/brand/`. They are served by your app, not imported, so copy them once
96
+ into your public folder:
97
+
98
+ ```sh
99
+ cp -R node_modules/@assure-one/design-system/public/brand public/brand
100
+ ```
101
+
102
+ An app served from a subpath calls `setAssetBasePath("/my-base")` once before
103
+ first render instead of (or as well as) moving the files. A `Logo` whose
104
+ artwork does not load falls back to the brand glyph + text lockup, so nothing
105
+ is required to get a readable lockup.
106
+
91
107
  ### The provider and the `/next` entry (experimental)
92
108
 
93
109
  Nothing requires a provider: every component renders English strings, formats
@@ -119,11 +135,11 @@ export default function RootLayout({ children }) {
119
135
 
120
136
  - **`messages`** — any subset of the typed catalogue `DsMessages`, by component
121
137
  namespace (`select`, `searchInput`, `combobox`, `field`, `fileUpload`; more
122
- join as the overlays adopt it). Resolution is always *component prop >
123
- provider > English default*, per key. The full English list is
138
+ join as the overlays adopt it). Resolution is always _component prop >
139
+ provider > English default_, per key. The full English list is
124
140
  `src/foundation/messages/en.json`; parameterised messages are functions
125
141
  (`combobox.create: (query) => string`).
126
- - **`locale`** — a BCP 47 tag, default `"en-US"` on the server *and* the client.
142
+ - **`locale`** — a BCP 47 tag, default `"en-US"` on the server _and_ the client.
127
143
  Pass the locale your app already knows server-side; the design system never
128
144
  reads `navigator.language` during render, so server and client HTML agree.
129
145
  - **`linkComponent` / `imageComponent`** — what `LinkButton` and `Logo` render
@@ -136,6 +152,34 @@ export default function RootLayout({ children }) {
136
152
  the props. `toasts` mounts the toast region for `useToast()`; leave it off if
137
153
  you already render `ToastProvider`.
138
154
 
155
+ ## Lint configs for consumers
156
+
157
+ Two shareable configs ship with the package (**experimental**, W7-18) so a
158
+ product lints for the same things this repository ratchets on itself. Every
159
+ rule is a **warning**: adopt it on the code you have, record the count, and
160
+ ratchet it down.
161
+
162
+ ```js
163
+ // eslint.config.mjs
164
+ import ds from "@assure-one/design-system/eslint-config";
165
+ export default [...ds.configs.recommended];
166
+
167
+ // stylelint.config.mjs (stylelint is yours — an optional peer dependency here)
168
+ export { default } from "@assure-one/design-system/stylelint-config";
169
+ ```
170
+
171
+ | Rule | Reports |
172
+ | ---------------------------------------- | ---------------------------------------------------------------------------------------- |
173
+ | `ds/no-raw-controls` | raw `<button>`, `<input>`, `<select>`, `<textarea>` where a design-system control exists |
174
+ | `ds/no-radix-imports` | a direct `@radix-ui/*` import instead of the primitive that wraps it |
175
+ | `ds/no-deep-imports` | an import past the published entries (`dist/…`, `src/…` — ADR-011) |
176
+ | `ds/no-ds-token-redefinition` | a `--ds-*` token set inline, outside a file under `presets/` |
177
+ | `assure-ds/no-ds-token-redefinition` | the same in CSS (stylelint; `presets/` and `*.preset.css` are exempt) |
178
+ | `assure-ds/no-important-on-ds-selectors` | `!important` on a `ds:`/`data-slot` selector — pass `className`/`classNames` instead |
179
+
180
+ Raise a rule to `"error"` in your own config once you are clean. Adoption per
181
+ app is tracked as W7-19.
182
+
139
183
  ## Develop
140
184
 
141
185
  ```bash
@@ -153,11 +197,11 @@ See [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the full dev loop, including iter
153
197
  3-tier token system, authored as DTCG JSON in [`tokens/src`](./tokens/README.md)
154
198
  and generated into `src/tokens/` and the `./css/*` entries (ADR-003):
155
199
 
156
- | Tier | Example (namespaced name → value) | Reads |
157
- | --- | --- | --- |
158
- | reference | `--ds-ref-brand-pro-fg: #6c42f8` | a literal; the raw ramps, one per brand |
159
- | system (semantic) | `--ds-color-action-brand-bg: var(--ds-ref-brand-pro-fg)` | the reference tier; **this is the public contract** |
160
- | component | `--ds-menu-item-hover-bg: var(--ds-color-canvas-sunken)` | the system tier; only where a component must be themable on its own |
200
+ | Tier | Example (namespaced name → value) | Reads |
201
+ | ----------------- | -------------------------------------------------------- | ------------------------------------------------------------------- |
202
+ | reference | `--ds-ref-brand-pro-fg: #6c42f8` | a literal; the raw ramps, one per brand |
203
+ | system (semantic) | `--ds-color-action-brand-bg: var(--ds-ref-brand-pro-fg)` | the reference tier; **this is the public contract** |
204
+ | component | `--ds-menu-item-hover-bg: var(--ds-color-canvas-sunken)` | the system tier; only where a component must be themable on its own |
161
205
 
162
206
  Components consume **system tokens**, never reference values directly. Themes
163
207
  (colour scheme, per-product brand, a runtime brand from `createBrandTheme()`)
@@ -107,27 +107,62 @@ the list a human has to pick up — spread props, dynamic expressions, conflicti
107
107
 
108
108
  ## Codemods
109
109
 
110
- | Id | Class | What it does |
111
- | ----- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
112
- | CM-05 | A | Button family `iconLeft` / `iconRight` → `iconStart` / `iconEnd` (pure rename; both names of one slot, spreads "could not be transformed") |
113
- | CM-13 | A | `Tooltip delayMs` → `delayDuration` (pure rename, literal or dynamic value; both names, spreads → "could not be transformed") |
114
- | CM-07 | A | `inputSize` → `size` on `Input`, `Textarea`, `SearchInput` (pure rename, literal or dynamic value; both names, spreads → "could not be transformed") |
115
- | CM-02 | A | Button explicit default size: `size="md"` on every `Button`, `SubmitButton` and `LinkButton` that passes no `size` (pixel-neutral) |
116
- | CM-04 | R | Button family legacy `variant` `variant` + `intent` pair (`primary` → `solid`, `destructive` `solid` + `danger`, …); `accent`, `dashed`, dynamic → report |
117
- | CM-06 | R | `tone` → `intent` on StatusDot, IconTile, Spinner, SegmentedProgress, SuiteProgress (`pro` → `brand`, listed for review); product hues → report |
118
- | CM-19 | R | ProgressBar/ProgressRing: `variant` → `intent`, and the value colour rule written down as an explicit `intent` where the value is a literal; dynamic values → report |
119
- | CM-12 | R | Button `type="submit"` where the intent is evident (inside `<form>` in the same file, no `onClick`); everything else untyped → report |
120
- | CM-10 | R | `DatePicker onChange={e => f(e.target.value)}` `onValueChange={value => f(value)}` for the recognisable arrow shapes; handlers by reference, other shapes → report |
121
- | CM-08 | R | `SearchSelect` → `Combobox`: single-mode call sites rewritten (tag, import, `{id,label}` accessors, placeholder `aria-label`); multi API, extras and unnamed sites → report |
110
+ | Id | Class | What it does |
111
+ | ----- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
112
+ | CM-01 | R | Root imports of suite, legacy and product-owned names `@assure-one/design-system/suite` and `/legacy` (same references, pure path change); `import * as DS`report |
113
+ | CM-05 | A | Button family `iconLeft` / `iconRight` → `iconStart` / `iconEnd` (pure rename; both names of one slot, spreads → "could not be transformed") |
114
+ | CM-13 | A | `Tooltip delayMs` → `delayDuration` (pure rename, literal or dynamic value; both names, spreads → "could not be transformed") |
115
+ | CM-07 | A | `inputSize` `size` on `Input`, `Textarea`, `SearchInput` (pure rename, literal or dynamic value; both names, spreads → "could not be transformed") |
116
+ | CM-02 | A | Button explicit default size: `size="md"` on every `Button`, `SubmitButton` and `LinkButton` that passes no `size` (pixel-neutral) |
117
+ | CM-04 | R | Button family legacy `variant` → `variant` + `intent` pair (`primary` `solid`, `destructive` → `solid` + `danger`, ); `accent`, `dashed`, dynamic → report |
118
+ | CM-06 | R | `tone` → `intent` on StatusDot, IconTile, Spinner, SegmentedProgress, SuiteProgress (`pro` `brand`, listed for review); product hues → report |
119
+ | CM-19 | R | ProgressBar/ProgressRing: `variant` `intent`, and the value colour rule written down as an explicit `intent` where the value is a literal; dynamic values → report |
120
+ | CM-12 | R | Button `type="submit"` where the intent is evident (inside `<form>` in the same file, no `onClick`); everything else untyped → report |
121
+ | CM-10 | R | `DatePicker onChange={e => f(e.target.value)}` → `onValueChange={value => f(value)}` for the recognisable arrow shapes; handlers by reference, other shapes → report |
122
+ | CM-08 | R | `SearchSelect` → `Combobox`: single-mode call sites rewritten (tag, import, `{id,label}` accessors, placeholder → `aria-label`); multi API, extras and unnamed sites → report |
122
123
  | CM-09 | R | `SideDrawer` → `Sheet`: drawers with a `SideDrawer.Header` rewritten (root → `Sheet` + `SheetContent side size`, `onClose` → `onOpenChange`, header → `SheetHeader`/`SheetTitle`/`SheetDescription`, Body/Footer → `SheetBody`/`SheetFooter`, import); no header, dynamic width, spreads → report |
123
- | CM-14 | X | hidden-input mirror finder: hidden `<input name>` a consumer added because a design-system control posts nothing |
124
- | CM-15 | X | DOM-selector finder: consumer code that depends on the internal DOM of design-system components, mapped to registry `C-DOM-*` ids |
125
- | CM-16 | X | `globals.css` analyser: `@source` into the package, duplicate preflight, colliding `@theme` keys, unlayered globals, legacy `var()` |
126
- | CM-20 | X | Select sentinel finder: option values standing in for "no value", and the line where each is converted back |
124
+ | CM-18 | A | `DataTable*` presentational parts `Table*` (`DataTableHead` `TableHeader`, `Body`, `Row`, `Cell`, `DataTableHeader` → `TableHead`) where the mapping is 1:1; uncontrolled sorting, a dynamic `sortable` and spreads → "could not be transformed" |
125
+ | CM-14 | X | hidden-input mirror finder: hidden `<input name>` a consumer added because a design-system control posts nothing |
126
+ | CM-15 | X | DOM-selector finder: consumer code that depends on the internal DOM of design-system components, mapped to registry `C-DOM-*` ids |
127
+ | CM-16 | X | `globals.css` analyser: `@source` into the package, duplicate preflight, colliding `@theme` keys, unlayered globals, legacy `var()` |
128
+ | CM-20 | X | Select sentinel finder: option values standing in for "no value", and the line where each is converted back |
127
129
 
128
130
  The remaining ids of plan §29 land with the waves that ship their replacement
129
131
  APIs.
130
132
 
133
+ ### CM-01 — root imports → `/suite` and `/legacy`
134
+
135
+ Class R. W8-02 gave the shared Assure patterns the `/suite` entry and the
136
+ frozen and product-owned modules `/legacy`. Both are re-export barrels over the
137
+ same module instances the root exports, so moving an import is a pure path
138
+ change: no duplicated React context, no behaviour difference. The root keeps
139
+ every name through 1.x (registry `C-ROOT-SUITE`) and drops them in 2.0, so
140
+ running this codemod early costs nothing and running it late is a 2.0 blocker.
141
+
142
+ ```tsx
143
+ import { Button, AgreementViewer, TimeLogger } from "@assure-one/design-system";
144
+ // becomes
145
+ import { Button } from "@assure-one/design-system";
146
+ import { AgreementViewer } from "@assure-one/design-system/suite";
147
+ import { TimeLogger } from "@assure-one/design-system/legacy";
148
+ ```
149
+
150
+ A declaration whose names all move keeps its shape and only its module
151
+ specifier changes. `import type`, per-specifier `type` prefixes, aliases,
152
+ quote style and a default import are preserved; the default import stays on the
153
+ root.
154
+
155
+ | rule | action | severity | meaning |
156
+ | ------------------ | ------- | -------- | --------------------------------------------------------------------------------- |
157
+ | `moved-to-suite` | applied | low | shared Assure patterns now import from `/suite` |
158
+ | `moved-to-legacy` | applied | low | frozen modules with no known consumer now import from `/legacy` |
159
+ | `product-owned` | applied | medium | the import moved to `/legacy`, but the module is leaving for a product repository |
160
+ | `namespace-import` | review | high | `import * as DS` cannot be split; import the moved members by name first |
161
+
162
+ Which entry owns which name comes from `codemods/lib/entry-map.mjs`, generated
163
+ from `architecture/entry-map.json` by `pnpm entry-map`, so an installed copy of
164
+ the codemod always carries the map of its own design-system version.
165
+
131
166
  ### CM-05 — Button family `iconLeft` / `iconRight` → `iconStart` / `iconEnd`
132
167
 
133
168
  Class A. W3-07 named the two icon slots of `Button`, `LinkButton` and
@@ -493,6 +528,45 @@ Not touched: elements already on `Sheet` (idempotency), local components with
493
528
  the same name, test files. The rewritten children are re-indented one level;
494
529
  run the project's formatter afterwards.
495
530
 
531
+ ### CM-18 — `DataTable*` parts → `Table*`
532
+
533
+ Class A. W6-03 made the `DataTable*` table parts aliases of the `Table*` parts
534
+ (contract C-DT-PARTS, removed in 3.0): one styling source, the same props. The
535
+ 1:1 parts are a pure rename — tag, closing tag and the named import:
536
+
537
+ | from | to |
538
+ | ----------------- | ------------- |
539
+ | `DataTableHead` | `TableHeader` |
540
+ | `DataTableBody` | `TableBody` |
541
+ | `DataTableRow` | `TableRow` |
542
+ | `DataTableCell` | `TableCell` |
543
+ | `DataTableHeader` | `TableHead` |
544
+
545
+ `DataTableHeader sortable sort={…} onSortChange={…}` loses the `sortable`
546
+ attribute: `TableHead` sorts whenever `sort` is passed (`null` = sortable, not
547
+ sorted). What changes in the DOM is the `data-slot` value (`table-*` instead of
548
+ `data-table-*`) and the dropped `scope="col"` — a `<th>` in a `<thead>` is a
549
+ column header already. Classes and pixels are the same, because since W6-03 the
550
+ `DataTable*` parts render the `Table*` parts.
551
+
552
+ | rule | Contract | What happens |
553
+ | -------------- | ---------- | -------------------------------------------------------------- |
554
+ | `part-renamed` | C-DT-PARTS | tag, closing tag and the named import rewritten (applied, low) |
555
+
556
+ Reported under "could not be transformed": `DataTableHeader sortable` with no
557
+ controlled `sort`, or with `defaultSort` (`uncontrolled-sort` — `TableHead` has
558
+ no uncontrolled sort state; wire `sort` + `onSortChange`, e.g. from
559
+ `useDataTable`); `sortable={expr}` (`dynamic-sortable`); a spread on the header
560
+ (`spread-props`).
561
+
562
+ Not touched: the parts that are not parallel copies of a `Table*` part —
563
+ `DataTable` (the card frame), `DataTableToolbar`, `DataTableSearch`,
564
+ `DataTableSpacer`, `DataTableResultsCount`, `DataTableCellName` / `CellMono` /
565
+ `CellId` / `CellDue`, `DataTableCheckbox`, `DataTablePagination` — an aliased
566
+ import (`DataTableCell as Cell`), a namespace import, local components with the
567
+ same names, and test files. A file that still refers to the old name as a value
568
+ (`typeof DataTableCell`) keeps its import and gains the new name next to it.
569
+
496
570
  ### CM-15 — DOM-selector finder
497
571
 
498
572
  Report-only. It never modifies a file; the runner throws if it tries. What it
@@ -0,0 +1,315 @@
1
+ /**
2
+ * GENERATED by scripts/architecture/entry-map.mjs from architecture/entry-map.json
3
+ * — do not edit. `pnpm entry-map` rewrites it; `pnpm entry-map:check` fails
4
+ * when it is stale.
5
+ *
6
+ * The half of the entry map CM-01 needs, published inside the package so a
7
+ * consumer runs the codemod that matches its design-system version (W8-01/02).
8
+ */
9
+ export const ENTRY_SPECIFIER = {
10
+ suite: "@assure-one/design-system/suite",
11
+ legacy: "@assure-one/design-system/legacy",
12
+ };
13
+
14
+ /** Public root export → the entry that owns it. Root-owned names are absent. */
15
+ export const ENTRY_BY_SYMBOL = {
16
+ AgreementFirm: "suite",
17
+ AgreementPaneHeading: "suite",
18
+ AgreementPaneHeadingProps: "suite",
19
+ AgreementStatus: "suite",
20
+ AgreementStep: "suite",
21
+ AgreementViewer: "suite",
22
+ AgreementViewerProps: "suite",
23
+ ProposalAddOn: "suite",
24
+ ProposalAddOnProps: "suite",
25
+ ProposalBillingMode: "suite",
26
+ ProposalBillingRow: "suite",
27
+ ProposalBillingTerms: "suite",
28
+ ProposalBillingTermsProps: "suite",
29
+ ProposalConsentGate: "suite",
30
+ ProposalConsentGateProps: "suite",
31
+ ProposalCustomPage: "suite",
32
+ ProposalCustomPageKind: "suite",
33
+ ProposalCustomPageProps: "suite",
34
+ ProposalNote: "suite",
35
+ ProposalNoteProps: "suite",
36
+ ProposalPackageCard: "suite",
37
+ ProposalPackageCardProps: "suite",
38
+ ProposalPackageMode: "suite",
39
+ ProposalPaymentCapture: "suite",
40
+ ProposalPaymentCaptureProps: "suite",
41
+ ProposalPricingSummary: "suite",
42
+ ProposalPricingSummaryProps: "suite",
43
+ ProposalServiceRow: "suite",
44
+ ProposalServiceRowProps: "suite",
45
+ ProposalSignatureBlock: "suite",
46
+ ProposalSignatureBlockProps: "suite",
47
+ ProposalSigner: "suite",
48
+ ProposalSignerList: "suite",
49
+ ProposalSignerListProps: "suite",
50
+ ProposalSignerStatus: "suite",
51
+ Grid: "suite",
52
+ GridColumn: "suite",
53
+ GridInputType: "suite",
54
+ GridProps: "suite",
55
+ GridRow: "suite",
56
+ GridValue: "suite",
57
+ QUESTION_TYPES: "suite",
58
+ QUESTION_TYPE_CONTRACT_VERSION: "suite",
59
+ QuestionAddressValue: "suite",
60
+ QuestionFileValue: "suite",
61
+ QuestionHelp: "suite",
62
+ QuestionLabeledColumn: "suite",
63
+ QuestionLabeledRow: "suite",
64
+ QuestionLabeledValue: "suite",
65
+ QuestionNameValue: "suite",
66
+ QuestionOption: "suite",
67
+ QuestionTableColumn: "suite",
68
+ QuestionTableRow: "suite",
69
+ QuestionType: "suite",
70
+ Questions: "suite",
71
+ QuestionsProps: "suite",
72
+ DocumentDetailActions: "suite",
73
+ DocumentDetailActionsProps: "suite",
74
+ DocumentDetailBody: "suite",
75
+ DocumentDetailBodyProps: "suite",
76
+ DocumentDetailHeader: "suite",
77
+ DocumentDetailHeaderProps: "suite",
78
+ DocumentDetailMetaRow: "suite",
79
+ DocumentDetailMetaRowProps: "suite",
80
+ DocumentDetailPanel: "suite",
81
+ DocumentDetailPanelProps: "suite",
82
+ DocumentDetailRequester: "suite",
83
+ DocumentDetailRequesterProps: "suite",
84
+ DocumentDetailTitle: "suite",
85
+ DocumentDetailTitleProps: "suite",
86
+ DocumentList: "suite",
87
+ DocumentListProps: "suite",
88
+ DocumentListSection: "suite",
89
+ DocumentListSectionProps: "suite",
90
+ DocumentRow: "suite",
91
+ DocumentRowProps: "suite",
92
+ ClientSelect: "suite",
93
+ ClientSelectOption: "suite",
94
+ AssureAuditBrandIcon: "suite",
95
+ AssureBooksBrandIcon: "suite",
96
+ AssureProBrandIcon: "suite",
97
+ AssureTaxBrandIcon: "suite",
98
+ BRAND_PRODUCTS: "suite",
99
+ BrandIconProps: "suite",
100
+ BrandProduct: "suite",
101
+ Logo: "suite",
102
+ SidebarBrandSwitcher: "suite",
103
+ SidebarBrandSwitcherExtra: "suite",
104
+ SidebarBrandSwitcherItem: "suite",
105
+ SidebarBrandSwitcherProps: "suite",
106
+ SidebarBrandSwitcherTile: "suite",
107
+ brandLabel: "suite",
108
+ ComingSoon: "suite",
109
+ ComingSoonProps: "suite",
110
+ TimeLogger: "legacy",
111
+ TimeLoggerActions: "legacy",
112
+ TimeLoggerActionsProps: "legacy",
113
+ TimeLoggerBillable: "legacy",
114
+ TimeLoggerBillableProps: "legacy",
115
+ TimeLoggerContextRow: "legacy",
116
+ TimeLoggerContextRowProps: "legacy",
117
+ TimeLoggerEntry: "legacy",
118
+ TimeLoggerEntryList: "legacy",
119
+ TimeLoggerEntryListProps: "legacy",
120
+ TimeLoggerEntryProps: "legacy",
121
+ TimeLoggerField: "legacy",
122
+ TimeLoggerFieldProps: "legacy",
123
+ TimeLoggerFooter: "legacy",
124
+ TimeLoggerFooterProps: "legacy",
125
+ TimeLoggerHeader: "legacy",
126
+ TimeLoggerHeaderProps: "legacy",
127
+ TimeLoggerNotes: "legacy",
128
+ TimeLoggerNotesProps: "legacy",
129
+ TimeLoggerPhase: "legacy",
130
+ TimeLoggerProps: "legacy",
131
+ TimeLoggerTier: "legacy",
132
+ TimeLoggerTimer: "legacy",
133
+ TimeLoggerTimerProps: "legacy",
134
+ UseStopwatchReturn: "legacy",
135
+ formatClock: "legacy",
136
+ formatCurrency: "legacy",
137
+ formatDuration: "legacy",
138
+ parseDuration: "legacy",
139
+ useStopwatch: "legacy",
140
+ ClientRailGroupHeader: "legacy",
141
+ ClientRailGroupHeaderProps: "legacy",
142
+ ClientRailItem: "legacy",
143
+ ClientRailItemProps: "legacy",
144
+ DocumentFileCard: "legacy",
145
+ DocumentFileCardProps: "legacy",
146
+ DocumentFileLine: "legacy",
147
+ DocumentFileLineProps: "legacy",
148
+ DocumentFileRow: "legacy",
149
+ DocumentFileRowProps: "legacy",
150
+ DocumentRequestActivityKind: "legacy",
151
+ DocumentRequestAssigneeOption: "legacy",
152
+ DocumentRequestCard: "legacy",
153
+ DocumentRequestCardProps: "legacy",
154
+ DocumentRequestDetail: "legacy",
155
+ DocumentRequestDetailActivityEvent: "legacy",
156
+ DocumentRequestDetailComment: "legacy",
157
+ DocumentRequestDetailDoc: "legacy",
158
+ DocumentRequestDetailProps: "legacy",
159
+ DocumentRequestDetailTab: "legacy",
160
+ DocumentRequestItemSummary: "legacy",
161
+ DocumentRequestRequestedItem: "legacy",
162
+ DocumentRequestReviewStatusOption: "legacy",
163
+ DocumentRequestTone: "legacy",
164
+ Blockquote: "legacy",
165
+ Section: "legacy",
166
+ SectionHead: "legacy",
167
+ SectionHeader: "legacy",
168
+ Stat: "legacy",
169
+ PillStatus: "legacy",
170
+ StatusPill: "legacy",
171
+ StatusPillProps: "legacy",
172
+ Assignee: "legacy",
173
+ Dash: "legacy",
174
+ MoneyCell: "legacy",
175
+ StagePill: "legacy",
176
+ TagsCell: "legacy",
177
+ AIReceiptPanel: "legacy",
178
+ AIReceiptPanelProps: "legacy",
179
+ AIReceiptResult: "legacy",
180
+ AiDraftCard: "legacy",
181
+ AiDraftCardProps: "legacy",
182
+ AiDraftState: "legacy",
183
+ AttentionItem: "legacy",
184
+ AttentionItemProps: "legacy",
185
+ AttentionUrgency: "legacy",
186
+ BottomNav: "legacy",
187
+ BottomNavProps: "legacy",
188
+ BottomNavTab: "legacy",
189
+ CategoryDivider: "legacy",
190
+ CategoryDividerProps: "legacy",
191
+ CategoryTag: "legacy",
192
+ CategoryTagProps: "legacy",
193
+ CategoryTone: "legacy",
194
+ ChannelTabItem: "legacy",
195
+ ChannelTabs: "legacy",
196
+ ChannelTabsProps: "legacy",
197
+ ChannelTone: "legacy",
198
+ DashGrid: "legacy",
199
+ DashGridProps: "legacy",
200
+ DashWidget: "legacy",
201
+ DocumentChecklist: "legacy",
202
+ DocumentChecklistFile: "legacy",
203
+ DocumentChecklistItem: "legacy",
204
+ DocumentChecklistProps: "legacy",
205
+ DocumentChecklistStatus: "legacy",
206
+ DocumentItemState: "legacy",
207
+ DocumentRequestField: "legacy",
208
+ DocumentRequestFieldProps: "legacy",
209
+ DocumentRequestUpload: "legacy",
210
+ DocumentRequestUploadFile: "legacy",
211
+ DocumentRequestUploadProps: "legacy",
212
+ DocumentSource: "legacy",
213
+ DocumentSourceFilter: "legacy",
214
+ DocumentSourceFilterProps: "legacy",
215
+ DocumentSourceFilterValue: "legacy",
216
+ DocumentSourceTag: "legacy",
217
+ DocumentSourceTagProps: "legacy",
218
+ DocumentsWorkspaceLayout: "legacy",
219
+ DocumentsWorkspaceLayoutProps: "legacy",
220
+ EmailMessageCard: "legacy",
221
+ EmailMessageCardProps: "legacy",
222
+ EngagementCard: "legacy",
223
+ EngagementCardProps: "legacy",
224
+ EngagementTimeline: "legacy",
225
+ EngagementTimelineProps: "legacy",
226
+ EngagementTimelineStep: "legacy",
227
+ EngagementTimelineStepProps: "legacy",
228
+ IntentBadge: "legacy",
229
+ IntentBadgeProps: "legacy",
230
+ IntentTone: "legacy",
231
+ MissingDocumentItem: "legacy",
232
+ MissingDocumentsPanel: "legacy",
233
+ MissingDocumentsPanelProps: "legacy",
234
+ NewMenu: "legacy",
235
+ NewMenuAction: "legacy",
236
+ NewMenuGroup: "legacy",
237
+ NewMenuProps: "legacy",
238
+ SignatureEditor: "legacy",
239
+ SignatureEditorProps: "legacy",
240
+ SuggestionPills: "legacy",
241
+ SuggestionPillsProps: "legacy",
242
+ TeamMemberSelect: "legacy",
243
+ TimelineState: "legacy",
244
+ };
245
+
246
+ /** Product-owned names → the repository they are moving to (reported, never written). */
247
+ export const PRODUCT_TARGET = {
248
+ TimeLogger: "assure-pro/frontend/src/components/billing/time-logger/*",
249
+ TimeLoggerActions: "assure-pro/frontend/src/components/billing/time-logger/*",
250
+ TimeLoggerActionsProps: "assure-pro/frontend/src/components/billing/time-logger/*",
251
+ TimeLoggerBillable: "assure-pro/frontend/src/components/billing/time-logger/*",
252
+ TimeLoggerBillableProps: "assure-pro/frontend/src/components/billing/time-logger/*",
253
+ TimeLoggerContextRow: "assure-pro/frontend/src/components/billing/time-logger/*",
254
+ TimeLoggerContextRowProps: "assure-pro/frontend/src/components/billing/time-logger/*",
255
+ TimeLoggerEntry: "assure-pro/frontend/src/components/billing/time-logger/*",
256
+ TimeLoggerEntryList: "assure-pro/frontend/src/components/billing/time-logger/*",
257
+ TimeLoggerEntryListProps: "assure-pro/frontend/src/components/billing/time-logger/*",
258
+ TimeLoggerEntryProps: "assure-pro/frontend/src/components/billing/time-logger/*",
259
+ TimeLoggerField: "assure-pro/frontend/src/components/billing/time-logger/*",
260
+ TimeLoggerFieldProps: "assure-pro/frontend/src/components/billing/time-logger/*",
261
+ TimeLoggerFooter: "assure-pro/frontend/src/components/billing/time-logger/*",
262
+ TimeLoggerFooterProps: "assure-pro/frontend/src/components/billing/time-logger/*",
263
+ TimeLoggerHeader: "assure-pro/frontend/src/components/billing/time-logger/*",
264
+ TimeLoggerHeaderProps: "assure-pro/frontend/src/components/billing/time-logger/*",
265
+ TimeLoggerNotes: "assure-pro/frontend/src/components/billing/time-logger/*",
266
+ TimeLoggerNotesProps: "assure-pro/frontend/src/components/billing/time-logger/*",
267
+ TimeLoggerPhase: "assure-pro/frontend/src/components/billing/time-logger/*",
268
+ TimeLoggerProps: "assure-pro/frontend/src/components/billing/time-logger/*",
269
+ TimeLoggerTier: "assure-pro/frontend/src/components/billing/time-logger/*",
270
+ TimeLoggerTimer: "assure-pro/frontend/src/components/billing/time-logger/*",
271
+ TimeLoggerTimerProps: "assure-pro/frontend/src/components/billing/time-logger/*",
272
+ UseStopwatchReturn: "assure-pro/frontend/src/components/billing/time-logger/*",
273
+ formatClock: "assure-pro/frontend/src/components/billing/time-logger/*",
274
+ formatCurrency: "assure-pro/frontend/src/components/billing/time-logger/*",
275
+ formatDuration: "assure-pro/frontend/src/components/billing/time-logger/*",
276
+ parseDuration: "assure-pro/frontend/src/components/billing/time-logger/*",
277
+ useStopwatch: "assure-pro/frontend/src/components/billing/time-logger/*",
278
+ ClientRailGroupHeader: "assure-pro (documents feature)",
279
+ ClientRailGroupHeaderProps: "assure-pro (documents feature)",
280
+ ClientRailItem: "assure-pro (documents feature)",
281
+ ClientRailItemProps: "assure-pro (documents feature)",
282
+ DocumentFileCard: "assure-pro (documents feature)",
283
+ DocumentFileCardProps: "assure-pro (documents feature)",
284
+ DocumentFileLine: "assure-pro (documents feature)",
285
+ DocumentFileLineProps: "assure-pro (documents feature)",
286
+ DocumentFileRow: "assure-pro (documents feature)",
287
+ DocumentFileRowProps: "assure-pro (documents feature)",
288
+ DocumentRequestActivityKind: "assure-pro (documents feature)",
289
+ DocumentRequestAssigneeOption: "assure-pro (documents feature)",
290
+ DocumentRequestCard: "assure-pro (documents feature)",
291
+ DocumentRequestCardProps: "assure-pro (documents feature)",
292
+ DocumentRequestDetail: "assure-pro (documents feature)",
293
+ DocumentRequestDetailActivityEvent: "assure-pro (documents feature)",
294
+ DocumentRequestDetailComment: "assure-pro (documents feature)",
295
+ DocumentRequestDetailDoc: "assure-pro (documents feature)",
296
+ DocumentRequestDetailProps: "assure-pro (documents feature)",
297
+ DocumentRequestDetailTab: "assure-pro (documents feature)",
298
+ DocumentRequestItemSummary: "assure-pro (documents feature)",
299
+ DocumentRequestRequestedItem: "assure-pro (documents feature)",
300
+ DocumentRequestReviewStatusOption: "assure-pro (documents feature)",
301
+ DocumentRequestTone: "assure-pro (documents feature)",
302
+ Blockquote: "assure-pro (landing pages)",
303
+ Section: "assure-pro (landing pages)",
304
+ SectionHead: "assure-pro (landing pages)",
305
+ SectionHeader: "assure-pro (landing pages)",
306
+ Stat: "assure-pro (landing pages)",
307
+ PillStatus: "assure-pro status map over core `StatusBadge`",
308
+ StatusPill: "assure-pro status map over core `StatusBadge`",
309
+ StatusPillProps: "assure-pro status map over core `StatusBadge`",
310
+ Assignee: "assure-tax `table-cells.tsx`",
311
+ Dash: "assure-tax `table-cells.tsx`",
312
+ MoneyCell: "assure-tax `table-cells.tsx`",
313
+ StagePill: "assure-tax `table-cells.tsx`",
314
+ TagsCell: "assure-tax `table-cells.tsx`",
315
+ };
@@ -3,6 +3,7 @@
3
3
  * codemods listed here can be run by id; the sequence is the plan's.
4
4
  */
5
5
  export const CODEMODS = [
6
+ { id: "CM-01", module: "../transforms/cm-01-entry-imports.mjs" },
6
7
  { id: "CM-05", module: "../transforms/cm-05-button-icon-slots.mjs" },
7
8
  { id: "CM-13", module: "../transforms/cm-13-tooltip-delay.mjs" },
8
9
  { id: "CM-07", module: "../transforms/cm-07-input-size.mjs" },
@@ -14,6 +15,7 @@ export const CODEMODS = [
14
15
  { id: "CM-10", module: "../transforms/cm-10-date-picker-value-change.mjs" },
15
16
  { id: "CM-08", module: "../transforms/cm-08-search-select-to-combobox.mjs" },
16
17
  { id: "CM-09", module: "../transforms/cm-09-side-drawer-to-sheet.mjs" },
18
+ { id: "CM-18", module: "../transforms/cm-18-data-table-parts.mjs" },
17
19
  { id: "CM-14", module: "../transforms/cm-14-hidden-mirrors.mjs" },
18
20
  { id: "CM-15", module: "../transforms/cm-15-dom-selectors.mjs" },
19
21
  { id: "CM-16", module: "../transforms/cm-16-globals-css.mjs" },