@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
@@ -0,0 +1,2579 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
3
+ import { ReactNode, CSSProperties } from 'react';
4
+ import * as class_variance_authority_types from 'class-variance-authority/types';
5
+ import { VariantProps } from 'class-variance-authority';
6
+ import { V as Variant, I as Intent, C as ControlSize, S as Shape } from './vocab-DornLJbW.js';
7
+ import { k as TableMessages } from './types-k_kjwipx.js';
8
+ import { a as BrandTheme } from './brand-theme-B6rem2II.js';
9
+
10
+ /**
11
+ * `Code` parts, stamped as `data-slot="code[-<part>]"` (ADR-008). Inline, the
12
+ * root is the `<code>`; as a block, the root is the `<pre>` and `content` the
13
+ * `<code>` inside it. State on the root: `data-variant`.
14
+ *
15
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
16
+ */
17
+ type CodeSlot = "root" | "content";
18
+ /**
19
+ * `Kbd` part, stamped as `data-slot="kbd"` (ADR-008). State on the root:
20
+ * `data-variant`. `KbdHint` and `CommandPalette` render it.
21
+ *
22
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
23
+ */
24
+ type KbdSlot = "root";
25
+ /**
26
+ * `Pressable` has one part, its root, stamped as `data-slot="pressable"`
27
+ * (ADR-008): the element that carries the button behaviour, whether that is
28
+ * the `<button>` it renders or the child it wraps with `asChild`. State on the
29
+ * root: `data-disabled`, `data-pressed`. Components that compose it (`Button`
30
+ * once it adopts the behaviour, a clickable `Surface`) declare their own parts.
31
+ *
32
+ * @experimental Slot names are experimental until ADR-008 is accepted (W3-03).
33
+ */
34
+ type PressableSlot = "root";
35
+ /**
36
+ * `Button` parts, stamped as `data-slot="button[-<part>]"` (ADR-008).
37
+ * States on the root: `data-variant`, `data-size`, `data-disabled`, and the
38
+ * pre-existing `data-loading="true"`.
39
+ *
40
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
41
+ */
42
+ type ButtonSlot = "root" | "icon-start" | "icon-end" | "spinner";
43
+ /**
44
+ * `LinkButton` parts, stamped as `data-slot="link-button[-<part>]"` (ADR-008).
45
+ * States on the root: `data-variant`, `data-size`.
46
+ *
47
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
48
+ */
49
+ type LinkButtonSlot = "root" | "icon-start" | "icon-end";
50
+ /**
51
+ * `Badge` parts, stamped as `data-slot="badge[-<part>]"` (ADR-008).
52
+ * States on the root: `data-variant`, `data-size`.
53
+ *
54
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
55
+ */
56
+ type BadgeSlot = "root" | "dot" | "icon";
57
+ /**
58
+ * `Input` parts, stamped as `data-slot="input[-<part>]"` (ADR-008).
59
+ * `root` is the `<input>` itself — the control frame, and the element
60
+ * `className` lands on (`C-INPUT-CLASSNAME`). The wrappers around it are
61
+ * private (target architecture §29.2).
62
+ * States on the root: `data-variant`, `data-size`, `data-disabled`,
63
+ * `data-invalid`. `description` is the `description` sugar's hint text (W4-05).
64
+ *
65
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
66
+ */
67
+ type InputSlot = "root" | "label" | "icon-start" | "icon-end" | "password-toggle" | "description" | "error";
68
+ /**
69
+ * `Textarea` parts, stamped as `data-slot="textarea[-<part>]"` (ADR-008).
70
+ * `root` is the `<textarea>`. States on the root: `data-variant`, `data-size`,
71
+ * `data-disabled`, `data-invalid`. `description` is the `description` sugar's
72
+ * hint text (W4-06).
73
+ *
74
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
75
+ */
76
+ type TextareaSlot = "root" | "label" | "description" | "error" | "count";
77
+ /**
78
+ * `SearchInput` parts, stamped as `data-slot="search-input[-<part>]"`
79
+ * (ADR-008). `root` is the positioning wrapper `className` lands on;
80
+ * `control` is the `<input type="search">`.
81
+ * States on the root: `data-size`, `data-disabled`.
82
+ *
83
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
84
+ */
85
+ type SearchInputSlot = "root" | "control" | "icon" | "clear";
86
+ /**
87
+ * `Select` parts, stamped as `data-slot="select-<part>"` (ADR-008).
88
+ * `SelectRoot` renders no element: `root` is the wrapper the options-driven
89
+ * `Select clearable` renders around the trigger and the `clear` button (W4-08),
90
+ * and exists only then. Radix's own `data-state`, `data-disabled`,
91
+ * `data-placeholder` and `data-highlighted` are left as they are
92
+ * (`P-DATA-STATE`); the trigger adds `data-size` when a `size` is set.
93
+ *
94
+ * `SelectValue` and `SelectGroup` are re-exported Radix components with no
95
+ * wrapper of ours, so they carry no slot of their own. `value` is the span
96
+ * the options-driven `Select` wraps Radix's value in when `classNames.value`
97
+ * or `clearable` asks for it (Radix's own span drops `className`); a legacy
98
+ * call renders no wrapper, so the `SelectTrigger > span` structure PRO selects
99
+ * on stays as frozen by `C-DOM-10`.
100
+ *
101
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
102
+ */
103
+ type SelectSlot = "root" | "trigger" | "value" | "icon" | "clear" | "content" | "viewport" | "item" | "item-indicator" | "label" | "separator" | "scroll-up-button" | "scroll-down-button";
104
+ /**
105
+ * `Checkbox` parts, stamped as `data-slot="checkbox[-<part>]"` (ADR-008).
106
+ * `root` is the Radix root — the box, and the element `className` lands on.
107
+ * Radix's `data-state` (`checked` / `unchecked` / `indeterminate`) is left as
108
+ * it is; `data-shape` is not part of the state vocabulary, so the shape stays
109
+ * a class until W4-13.
110
+ *
111
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
112
+ */
113
+ type CheckboxSlot = "root" | "indicator" | "label";
114
+ /**
115
+ * `RadioGroup` / `RadioGroupItem` parts, stamped as
116
+ * `data-slot="radio-group[-<part>]"` (ADR-008). `root` is the group,
117
+ * `item` the radio. Radix's `data-state` is left as it is. With
118
+ * `appearance="card"` (W4-14) the root carries `data-appearance="card"` and
119
+ * every item is wrapped in a `card` holding the `label` (stretched over the
120
+ * card, so the whole box is the click target) and an optional `description`.
121
+ *
122
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
123
+ */
124
+ type RadioGroupSlot = "root" | "item" | "indicator" | "label" | "card" | "description";
125
+ /**
126
+ * `Switch` parts, stamped as `data-slot="switch[-<part>]"` (ADR-008).
127
+ * `root` is the Radix root — the track, and the element `className` lands on;
128
+ * the label wrapper is a private wrapper. States on the root: `data-size`.
129
+ *
130
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
131
+ */
132
+ type SwitchSlot = "root" | "thumb" | "label";
133
+ /**
134
+ * `Label` parts, stamped as `data-slot="label[-<part>]"` (ADR-008).
135
+ * `required` is the asterisk marker.
136
+ *
137
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
138
+ */
139
+ type LabelSlot = "root" | "required";
140
+ /**
141
+ * `NumberInput` parts, stamped as `data-slot="number-input"` (ADR-008).
142
+ * `root` is the `<input>` itself — the control frame and the element
143
+ * `className` lands on, like `Input`. The hidden inputs `FormBridge` renders
144
+ * next to it are not parts. States on the root: `data-variant`, `data-size`,
145
+ * `data-disabled`, `data-invalid`.
146
+ *
147
+ * @experimental Slot names are experimental until ADR-008 is accepted (W4-21).
148
+ */
149
+ type NumberInputSlot = "root";
150
+ /**
151
+ * `PhoneField` parts, stamped as `data-slot="phone-field[-<part>]"` (ADR-008).
152
+ * `root` is the row (the element `className` lands on), `number` the `tel`
153
+ * `<input>` on the control chrome, `flag` a `CountryFlag` (the SVG, or its
154
+ * placeholder while the flag set loads). `country` is the country picker: a
155
+ * `Combobox`, stamped with its own anatomy and styled through
156
+ * `classNames.country`. States on the root: `data-variant`, `data-size`,
157
+ * `data-disabled`, `data-invalid`.
158
+ *
159
+ * @experimental Slot names are experimental until ADR-008 is accepted (W4-22).
160
+ */
161
+ type PhoneFieldSlot = "root" | "country" | "number" | "flag";
162
+ /**
163
+ * `FileUpload` parts, stamped as `data-slot="file-upload[-<part>]"` (ADR-008).
164
+ * `dropzone` is the `<label>` that `C-DOM-04` freezes and that
165
+ * `[&_[data-slot=file-upload-dropzone]]` replaces (target architecture §29.4).
166
+ * States: `data-disabled` and `data-invalid` on the root, `data-disabled` and
167
+ * `data-state="drag-over"` on the dropzone.
168
+ *
169
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
170
+ */
171
+ type FileUploadSlot = "root" | "dropzone" | "input" | "error";
172
+ /**
173
+ * `Command` / `CommandPalette` parts, stamped as `data-slot="command-<part>"`
174
+ * (ADR-008, W5-19). `overlay`, `content`, `title` and `description` are the
175
+ * spotlight modal (`CommandDialog`); `root`, `input`, `list`, `empty`,
176
+ * `group` and `item` are the command-list parts; `footer` is the
177
+ * keyboard-hint strip `CommandPalette` renders below the list.
178
+ *
179
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
180
+ */
181
+ type CommandSlot = "overlay" | "content" | "title" | "description" | "root" | "input" | "list" | "empty" | "group" | "item" | "footer";
182
+ /**
183
+ * `Dialog` parts, stamped as `data-slot="dialog-<part>"` (ADR-008). There is
184
+ * no `root`: `Dialog` is Radix's non-rendering root. `close` is stamped on
185
+ * both the built-in close button and `DialogClose`; they are the same part —
186
+ * a control that dismisses the dialog. `body` is the scroll region between
187
+ * header and footer (W5-05). States: `data-size` on the content, and
188
+ * `data-variant="responsive"` when it presents as a bottom sheet below `sm`
189
+ * (W5-09). Radix's `data-state` is left as it is (`P-DATA-STATE`).
190
+ *
191
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
192
+ */
193
+ type DialogSlot = "overlay" | "content" | "header" | "title" | "description" | "body" | "footer" | "close";
194
+ /**
195
+ * `AlertDialog` parts, stamped as `data-slot="alert-dialog-<part>"`
196
+ * (ADR-008). No `root` — Radix's root renders no element.
197
+ *
198
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
199
+ */
200
+ type AlertDialogSlot = "overlay" | "content" | "header" | "title" | "description" | "footer" | "action" | "cancel";
201
+ /**
202
+ * `Sheet` parts, stamped as `data-slot="sheet-<part>"` (ADR-008).
203
+ * `body` is the scroll region between header and footer (W5-07). States:
204
+ * `data-size` on the content, carrying the `size` step (or the deprecated
205
+ * `width` preset, C-SHEET-WIDTH; `default` when neither is given). The
206
+ * `side` is not in the §29.2 vocabulary and stays a class.
207
+ *
208
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
209
+ */
210
+ type SheetSlot = "overlay" | "content" | "header" | "title" | "description" | "body" | "footer" | "close";
211
+ /**
212
+ * `SideDrawer` parts, stamped as `data-slot="side-drawer[-<part>]"`
213
+ * (ADR-008). `root` is the panel. The screen-reader-only Radix title that the
214
+ * panel always renders is an accessibility fallback, not a part, so it carries
215
+ * no slot. States: `data-size` on the root, carrying the `width` preset.
216
+ *
217
+ * `SideDrawer` itself is `C-SIDEDRAWER` and is replaced by `Sheet` in W5-08;
218
+ * the slots exist so the two can be styled the same way in the meantime.
219
+ *
220
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
221
+ */
222
+ type SideDrawerSlot = "overlay" | "root" | "header" | "heading" | "subtitle" | "close" | "body" | "footer";
223
+ /**
224
+ * `Popover` parts, stamped as `data-slot="popover-content"` (ADR-008).
225
+ * `Popover`, `PopoverTrigger`, `PopoverAnchor` and `PopoverClose` are bare
226
+ * Radix re-exports, so the content is the only part we render.
227
+ *
228
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
229
+ */
230
+ type PopoverSlot = "content";
231
+ /**
232
+ * `DropdownMenu` parts, stamped as `data-slot="dropdown-menu-<part>"`
233
+ * (ADR-008). No `root`, no `trigger`: both are bare Radix re-exports.
234
+ * `destructive` items get no `data-intent` yet — W3-02 defines the intent
235
+ * values, and this task does not invent them.
236
+ *
237
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
238
+ */
239
+ type DropdownMenuSlot = "content" | "item" | "checkbox-item" | "radio-item" | "item-indicator" | "label" | "separator" | "shortcut" | "sub-trigger" | "sub-content";
240
+ /**
241
+ * `ContextMenu` parts, stamped as `data-slot="context-menu-<part>"`
242
+ * (ADR-008). The same part names as `DropdownMenu`, which is what makes the
243
+ * shared `Menu` internals of W5 a rename-free change for consumers.
244
+ *
245
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
246
+ */
247
+ type ContextMenuSlot = "content" | "item" | "checkbox-item" | "radio-item" | "item-indicator" | "label" | "separator" | "shortcut" | "sub-trigger" | "sub-content";
248
+ /**
249
+ * `Tooltip` parts, stamped as `data-slot="tooltip-content"` (ADR-008).
250
+ * `TooltipTrigger` is a bare Radix re-export.
251
+ *
252
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
253
+ */
254
+ type TooltipSlot = "content";
255
+ /**
256
+ * `Toast` parts, stamped as `data-slot="toast[-<part>]"` (ADR-008).
257
+ * `region` is the live region that `C-TOAST-ARIALABEL` currently locates by
258
+ * `aria-label="Notifications"`; `data-slot="toast-region"` is the replacement
259
+ * that guard moves to (W5-15). States: `data-variant` on the root; its
260
+ * `data-state` (`open` / `closed`) already existed.
261
+ *
262
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
263
+ */
264
+ type ToastSlot = "region" | "root" | "icon" | "title" | "description" | "action" | "close";
265
+ /**
266
+ * `Table` parts, stamped as `data-slot="table[-<part>]"` (ADR-008).
267
+ * `root` is the `<table>` — the element `className` lands on; `wrapper` is the
268
+ * overflow container that `wrapperClassName` styles today and
269
+ * `classNames.wrapper` replaces (`C-CLASSNAME-PROPS`). `header` is `<thead>`
270
+ * and `head` is a `<th>`, matching the `TableHeader` / `TableHead` component
271
+ * names. Native table semantics are permanent (`P-NATIVE-TABLE`). `sort` is
272
+ * the `<button>` a sortable `TableHead` renders around its label and
273
+ * `sort-indicator` the chevron inside it (W6-01).
274
+ *
275
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
276
+ */
277
+ type TableSlot = "root" | "wrapper" | "header" | "body" | "footer" | "row" | "head" | "cell" | "caption" | "sort" | "sort-indicator";
278
+ /**
279
+ * `DataTable*` parts, stamped as `data-slot="data-table[-<part>]"` (ADR-008).
280
+ * These are `C-DT-PARTS`, the parallel copy of `Table*` that W6-03 folds back
281
+ * in; the part names deliberately match `table`'s so that fold is a no-op for
282
+ * a consumer's selectors (`header` = `<thead>` via `DataTableHead`, `head` =
283
+ * the `<th>` via `DataTableHeader`).
284
+ *
285
+ * `head-button` is the sortable header's `<button>` that `C-DOM-13` freezes.
286
+ * The four cell components share one `cell` part and are told apart by
287
+ * `data-variant` (`name`, `mono`, `id`, `due`).
288
+ *
289
+ * `DataTableSearch` and `DataTablePagination` render an `Input` and a
290
+ * `Pagination` with no wrapper of their own, so they carry those components'
291
+ * slots (`data-slot="input"`, `data-slot="pagination"`) rather than one of
292
+ * their own — stamping over it would delete the inner component's part name.
293
+ * W6-06 gives the search its own `classNames.search` (`C-DOM-18`).
294
+ *
295
+ * The compound `DataTablePattern` (W6-06, `src/patterns/data/data-table.tsx`)
296
+ * renders in the same namespace and adds its slots: `search`, `filters`,
297
+ * `columns-menu`, `content` (the table's overflow wrapper), `bulk-actions`
298
+ * and `pagination`. It is the same component family, so a consumer's
299
+ * `[data-slot^="data-table"]` selectors keep meaning what they meant.
300
+ *
301
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
302
+ */
303
+ type DataTableSlot = "root" | "toolbar" | "spacer" | "results-count" | "header" | "body" | "row" | "head" | "head-button" | "head-indicator" | "cell" | "checkbox-cell" | "search" | "filters" | "columns-menu" | "content" | "bulk-actions" | "pagination";
304
+ /**
305
+ * `Pagination` parts, stamped as `data-slot="pagination[-<part>]"` (ADR-008).
306
+ * `root` is the `<nav>`. The current page carries `data-selected` alongside
307
+ * its existing `aria-current="page"`. `page-size` wraps the optional
308
+ * rows-per-page `Select` (W6-09).
309
+ *
310
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
311
+ */
312
+ type PaginationSlot = "root" | "label" | "page-size" | "pages" | "previous" | "next" | "page" | "ellipsis";
313
+ /**
314
+ * `Shell` / `Main` / `Content` parts, stamped as `data-slot="shell[-<part>]"`
315
+ * (ADR-008). Three elements, three names: the app frame, the column beside the
316
+ * sidebar and the scrolling page region.
317
+ *
318
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
319
+ */
320
+ type ShellSlot = "root" | "main" | "content";
321
+ /**
322
+ * `Sidebar` and its parts, stamped as `data-slot="sidebar[-<part>]"`
323
+ * (ADR-008). This is the anatomy `C-DOM-06` is waiting for: PRO and TAX carry
324
+ * identical copies of `group-data-[labels=hide]/sidebar:*` and
325
+ * `[&>div:first-child]` overrides because there is no name for
326
+ * `section-header`, `link-label` or `user` today.
327
+ *
328
+ * `group/sidebar`, `data-labels`, `data-state`, `data-peek`, `data-overlay`,
329
+ * `data-collapsible` and `data-variant` on the root are **unchanged** — they
330
+ * are the frozen part of `C-DOM-06`, and no state attribute is re-stamped over
331
+ * them. W7-03 adds `data-collapsed` to the slots and the `SidebarSection`
332
+ * header slot; this change only names the parts.
333
+ *
334
+ * `group` is a `SidebarLinkGroup`: `group-link` is its activating row,
335
+ * `group-trigger` its chevron and `group-content` the collapsible body.
336
+ * The `tone` props on `SidebarSection` and `SidebarLinkBadge` get no
337
+ * `data-intent`: they are `C-TONE`, and W3-21 defines the intent values.
338
+ *
339
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
340
+ */
341
+ type SidebarSlot = "root" | "trigger" | "pin" | "brand" | "brand-text" | "section" | "section-header" | "section-label" | "link" | "link-label" | "link-action" | "link-badge" | "group" | "group-link" | "group-trigger" | "group-content" | "footer" | "user" | "user-name" | "user-subtitle";
342
+ /**
343
+ * `SidebarBrandSwitcher` parts, stamped as
344
+ * `data-slot="sidebar-brand-switcher[-<part>]"` (ADR-008). Its menu is a
345
+ * `DropdownMenuContent` and keeps that component's slots; its `trailing`
346
+ * children are rendered bare, with no wrapper of ours to name (W7-03 gives
347
+ * them one).
348
+ *
349
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-18).
350
+ */
351
+ type SidebarBrandSwitcherSlot = "root" | "trigger" | "icon";
352
+ /**
353
+ * `Text` parts, stamped as `data-slot="text"` (ADR-008). One part: the
354
+ * element that carries the role, and the element `className` lands on (with
355
+ * `asChild`, the child the caller supplied).
356
+ *
357
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-12).
358
+ */
359
+ type TextSlot = "root";
360
+ /**
361
+ * `Heading` parts, stamped as `data-slot="heading"` (ADR-008). One part: the
362
+ * `<h1>`…`<h6>` itself, which is the element `className` lands on.
363
+ *
364
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-13).
365
+ */
366
+ type HeadingSlot = "root";
367
+ /**
368
+ * `Stack` has one part, its root, stamped as `data-slot="stack"` (ADR-008).
369
+ * No state attributes: a responsive `direction` has no single value to
370
+ * stamp, and the primitive's job is spacing, not state.
371
+ *
372
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-15).
373
+ */
374
+ type StackSlot = "root";
375
+ /**
376
+ * `Inline` has one part, its root, stamped as `data-slot="inline"` (ADR-008).
377
+ *
378
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-15).
379
+ */
380
+ type InlineSlot = "root";
381
+ /**
382
+ * `Surface` has one part, its root, stamped as `data-slot="surface"`
383
+ * (ADR-008). Composites built on it (Card, W3-17) declare their own parts.
384
+ *
385
+ * @experimental Slot names are experimental until ADR-008 is accepted (W2-16).
386
+ */
387
+ type SurfaceSlot = "root";
388
+ /**
389
+ * `Avatar` parts, stamped as `data-slot="avatar[-<part>]"` (ADR-008, W3-16).
390
+ * `root` is the outer positioning wrapper — the element a consumer's
391
+ * `shrink-0` / `mt-0.5` overrides are aimed at and `classNames.root` reaches;
392
+ * `frame` is the circle (the Radix root: image and fallback clip to it), and
393
+ * the element `className` and `ref` keep landing on behind the compatibility
394
+ * entry (target architecture §29.1, ADR-008 decision 6 — the landing does not
395
+ * move silently). `image` and `fallback` are the Radix image and fallback;
396
+ * `status` is the corner dot, rendered only when `status` is set.
397
+ * States on the root: `data-size`, `data-variant`.
398
+ *
399
+ * @experimental Slot names are experimental until ADR-008 is accepted (W3-16).
400
+ */
401
+ type AvatarSlot = "root" | "frame" | "image" | "fallback" | "status";
402
+ /**
403
+ * `Card` parts, stamped as `data-slot="card[-<part>]"` (ADR-008, W3-17). The
404
+ * root is a `Surface` (W2-16) that stamps `card` over `surface`: a composite
405
+ * declares its own parts. Each part is a real JSX component (`CardHeader`,
406
+ * `CardTitle`, …) and takes `className` itself, so `Card` has no `classNames`
407
+ * (ADR-008 decision 4). States on the root: `data-variant`.
408
+ *
409
+ * @experimental Slot names are experimental until ADR-008 is accepted (W3-17).
410
+ */
411
+ type CardSlot = "root" | "header" | "title" | "description" | "action" | "content" | "footer";
412
+ /**
413
+ * `StatusBadge` parts, stamped as `data-slot="status-badge[-<part>]"`
414
+ * (ADR-008): the root, the `indicator` (dot, icon or spinner — one at a time)
415
+ * and the `label`. States on the root: `data-variant`, `data-intent`,
416
+ * `data-size`, `data-loading`.
417
+ *
418
+ * @experimental Slot names are experimental until ADR-008 is accepted (W3-14).
419
+ */
420
+ type StatusBadgeSlot = "root" | "indicator" | "label";
421
+ /**
422
+ * `IconButton` parts, stamped as `data-slot="icon-button[-<part>]"` (ADR-008):
423
+ * the square root, the `icon` box and the `spinner` that replaces it while
424
+ * loading. States on the root: `data-variant`, `data-intent`, `data-size`,
425
+ * `data-disabled`, `data-loading`, `data-pressed`.
426
+ *
427
+ * @experimental Slot names are experimental until ADR-008 is accepted (W3-09).
428
+ */
429
+ type IconButtonSlot = "root" | "icon" | "spinner";
430
+ /**
431
+ * `Chip` parts, stamped as `data-slot="chip[-<part>]"` (ADR-008): the root
432
+ * (the pressable itself, or the group that holds a pressable label and the
433
+ * `remove` button), the leading `icon`, the `label`, the `count` and the
434
+ * `remove` button. States on the root: `data-variant`, `data-intent`,
435
+ * `data-size`, `data-disabled`, `data-pressed`.
436
+ *
437
+ * @experimental Slot names are experimental until ADR-008 is accepted (W3-15).
438
+ */
439
+ type ChipSlot = "root" | "icon" | "label" | "count" | "remove";
440
+ /**
441
+ * `Field` parts, stamped as `data-slot="field[-<part>]"` (ADR-008, W4-01):
442
+ * the root (the layout wrapper, no chrome), the `label` (a `Label` rendered
443
+ * inside a field stamps this over its own `label`, the way `Card` stamps
444
+ * `card` over `surface`), its `required` asterisk and `optional` indicator,
445
+ * the `description` and the `error`. The control is not a part: it keeps its
446
+ * own anatomy (`input`, `select-trigger`, …) and is found by the field's id.
447
+ * States on the root: `data-orientation`, `data-invalid`, `data-disabled`,
448
+ * `data-required`.
449
+ *
450
+ * @experimental Slot names are experimental until ADR-008 is accepted (W4-01).
451
+ */
452
+ type FieldSlot = "root" | "label" | "required" | "optional" | "description" | "error";
453
+ /**
454
+ * `Fieldset` parts, stamped as `data-slot="fieldset[-<part>]"` (ADR-008,
455
+ * W4-01): the `<fieldset>` root and its `<legend>`. States on the root:
456
+ * `data-disabled`, `data-invalid`.
457
+ *
458
+ * @experimental Slot names are experimental until ADR-008 is accepted (W4-01).
459
+ */
460
+ type FieldsetSlot = "root" | "legend";
461
+ /**
462
+ * `Combobox` parts, stamped as `data-slot="combobox[-<part>]"` (ADR-008,
463
+ * W4-10): the `root` (the frame that holds the control and its form bridge),
464
+ * the `control` (the field-shaped box the popover anchors to), the `value`
465
+ * (a custom `renderValue` node over the input), the `chips` row and its
466
+ * `Chip`s in `multiple` mode, the `input` (the `role="combobox"` element that
467
+ * keeps focus), the leading `icon`, the `clear` and `toggle` buttons; then
468
+ * the portalled `content` with an optional `header`, the `list`
469
+ * (`role="listbox"`), a `group` with its `group-heading`, each `item`
470
+ * (`role="option"`, see `behavior/collection/item-attributes.ts`) and its
471
+ * `item-indicator`, the `create` row, the `empty` and `loading` states and an
472
+ * optional `footer`. States on the root: `data-state` (`open` · `closed`),
473
+ * `data-disabled`, `data-invalid`, `data-size`.
474
+ *
475
+ * @experimental Slot names are experimental until ADR-008 is accepted (W4-10).
476
+ */
477
+ type ComboboxSlot = "root" | "control" | "value" | "chips" | "input" | "icon" | "clear" | "toggle" | "content" | "header" | "list" | "group" | "group-heading" | "item" | "item-indicator" | "create" | "empty" | "loading" | "footer";
478
+
479
+ /** The emphasis subset a badge offers. @experimental */
480
+ type BadgeVariant = Extract<Variant, "solid" | "soft" | "outline">;
481
+ /** The badge's own size scale, spelled with the shared names (§17). @experimental */
482
+ type BadgeSize = Extract<ControlSize, "xs" | "sm" | "md">;
483
+ /** Corner treatment; omitted keeps today's corner (D1). @experimental */
484
+ type BadgeShape = Extract<Shape, "rounded" | "pill">;
485
+ /**
486
+ * The one-axis words Badge accepted before W3-13. Each resolves to a
487
+ * `{ variant, intent }` pair through `resolveBadgeAppearance` and renders the
488
+ * same classes it always did.
489
+ *
490
+ * @deprecated Use `variant` (`solid | soft | outline`) with `intent` instead:
491
+ * `default` → `solid` + `brand`, `secondary` → `soft` + `neutral`,
492
+ * `destructive` → `soft` + `danger`, `success | warning | info` → `soft` +
493
+ * the same word. `outline` is already an emphasis and is not deprecated.
494
+ */
495
+ type BadgeLegacyVariant = "default" | "secondary" | "destructive" | "success" | "warning" | "info";
496
+ /** A resolved `{ variant, intent }` pair. @experimental */
497
+ interface BadgeAppearance {
498
+ variant: BadgeVariant;
499
+ intent: Intent;
500
+ }
501
+ /** What a badge can be asked for: the two axes, either one, or a legacy word. @experimental */
502
+ interface BadgeAppearanceInput {
503
+ variant?: BadgeVariant | BadgeLegacyVariant | null | undefined;
504
+ intent?: Intent | null | undefined;
505
+ }
506
+ /**
507
+ * Resolves what a consumer asked for into the pair the class table is keyed by.
508
+ *
509
+ * - both axes: taken as given (a legacy `variant` word with an explicit
510
+ * `intent` keeps the word's emphasis and takes the intent);
511
+ * - `variant` only: the per-variant default intent, or the legacy pair;
512
+ * - `intent` only: the per-intent default variant;
513
+ * - nothing: `solid` + `brand`, today's default.
514
+ *
515
+ * @experimental
516
+ */
517
+ declare function resolveBadgeAppearance({ variant, intent, }?: BadgeAppearanceInput): BadgeAppearance;
518
+ /** The inputs `badgeVariants` accepts (the legacy `variant` words included). @experimental */
519
+ interface BadgeVariantsProps extends BadgeAppearanceInput {
520
+ size?: BadgeSize | null | undefined;
521
+ shape?: BadgeShape | null | undefined;
522
+ class?: string | null | undefined;
523
+ className?: string | null | undefined;
524
+ }
525
+ /**
526
+ * The badge's class string, for consumers that style their own element.
527
+ * Same call shape as before W3-13 (`variant`, `size`, `class`/`className`),
528
+ * plus `intent` and `shape`; a legacy `variant` word yields the string it
529
+ * always did.
530
+ */
531
+ declare function badgeVariants({ variant, intent, size, shape, class: classValue, className, }?: BadgeVariantsProps): string;
532
+ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
533
+ /**
534
+ * Visual emphasis: `solid` (filled), `soft` (tinted, the status look) or
535
+ * `outline`. Omitted, it follows `intent` (brand is solid, the rest soft);
536
+ * with neither prop the badge is `solid` + `brand`, as it always was.
537
+ * The legacy one-axis words are accepted and deprecated (`BadgeLegacyVariant`).
538
+ */
539
+ variant?: BadgeVariant | BadgeLegacyVariant;
540
+ /**
541
+ * Semantic meaning → colour family. Omitted, it follows `variant`
542
+ * (`solid` is brand, `soft` and `outline` are neutral).
543
+ * @experimental
544
+ */
545
+ intent?: Intent;
546
+ /** `xs` (10px text, W3-13), `sm` (default) or `md`. */
547
+ size?: BadgeSize;
548
+ /**
549
+ * Corner treatment. Omitted keeps today's corner (`--radius-pill`);
550
+ * `rounded` is the `radius.badge` role, `pill` is `radius.full` (D1).
551
+ * @experimental
552
+ */
553
+ shape?: BadgeShape;
554
+ /** Leading status dot, drawn in the text colour. */
555
+ dot?: boolean;
556
+ /** Leading 14px glyph. */
557
+ icon?: React.ReactNode;
558
+ }
559
+ declare const Badge: React$1.ForwardRefExoticComponent<BadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
560
+
561
+ /**
562
+ * Blockquote — semantic quote with optional attribution. Uses `font-display`
563
+ * (Inter) at a comfortable reading scale; smart quotes are wrapped automatically.
564
+ */
565
+ interface BlockquoteProps extends React.BlockquoteHTMLAttributes<HTMLQuoteElement> {
566
+ author?: string;
567
+ role?: string;
568
+ }
569
+ declare const Blockquote: React$1.ForwardRefExoticComponent<BlockquoteProps & React$1.RefAttributes<HTMLQuoteElement>>;
570
+
571
+ /**
572
+ * CategoryDivider — THE category separator: a tone-tinted category pill, a
573
+ * flex-1 hairline rule, and an optional trailing count chip. Used to group a
574
+ * run of feed items / cards by service line. Per the ONE-brand rule, this tag
575
+ * is the *only* place per-service color is allowed — everything else stays on
576
+ * the single brand. Pure presentational.
577
+ *
578
+ * Tones map to the suite tints:
579
+ * brand → --color-brand-pro · audit → --color-brand-audit ·
580
+ * books → --color-brand-books · tax → --color-brand-tax ·
581
+ * neutral → --color-fg-3
582
+ */
583
+ declare const categoryTagVariants: (props?: ({
584
+ tone?: "brand" | "neutral" | "audit" | "books" | "tax" | null | undefined;
585
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
586
+ type CategoryTone = NonNullable<VariantProps<typeof categoryTagVariants>["tone"]>;
587
+ interface CategoryTagProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof categoryTagVariants> {
588
+ /** Tag label text. */
589
+ label: string;
590
+ /** Optional leading icon rendered inside the pill. */
591
+ icon?: React.ReactNode;
592
+ }
593
+ /**
594
+ * CategoryTag — the standalone tone-tinted category pill, reusable in card
595
+ * headers and feed-item rows. Same atom CategoryDivider renders on its left.
596
+ */
597
+ declare const CategoryTag: React$1.ForwardRefExoticComponent<CategoryTagProps & React$1.RefAttributes<HTMLSpanElement>>;
598
+ interface CategoryDividerProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof categoryTagVariants> {
599
+ /** Category label shown in the tone-tinted tag. */
600
+ label: string;
601
+ /** Optional leading icon rendered inside the tag. */
602
+ icon?: React.ReactNode;
603
+ /** Optional item count → trailing neutral count chip. */
604
+ count?: number;
605
+ }
606
+ /**
607
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
608
+ * Owner: PORTAL client portal, which decides to adopt, contribute or release
609
+ * the name. Never removed before 3.0.
610
+ */
611
+ declare const CategoryDivider: React$1.ForwardRefExoticComponent<CategoryDividerProps & React$1.RefAttributes<HTMLDivElement>>;
612
+
613
+ /**
614
+ * DocumentSourceTag — provenance atom for a document row/card: how the file
615
+ * arrived. Mirrors StatusPill's shape (a `source` enum maps to label + icon +
616
+ * tone), so call sites read as `<DocumentSourceTag source="requested" />`
617
+ * instead of repeating the label/icon/colour triple.
618
+ *
619
+ * requested → brand tint · send glyph (client fulfilled a firm request)
620
+ * direct → outline · upload glyph (client uploaded unprompted)
621
+ * internal → neutral · shield glyph (firm-prepared, not client-visible)
622
+ *
623
+ * Pass `children` to override the label while keeping the mapped tone/icon,
624
+ * `icon` to swap the glyph, or `hideIcon` for a label-only tag.
625
+ */
626
+ type DocumentSource = "requested" | "direct" | "internal";
627
+ interface DocumentSourceTagProps extends React.HTMLAttributes<HTMLSpanElement> {
628
+ source: DocumentSource;
629
+ /** Override the leading glyph for the mapped source. */
630
+ icon?: React.ReactNode;
631
+ /** Render label-only, with no leading glyph. */
632
+ hideIcon?: boolean;
633
+ }
634
+ /**
635
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
636
+ * Owner: PRO documents, which decides to adopt, contribute or release
637
+ * the name. Never removed before 3.0.
638
+ */
639
+ declare const DocumentSourceTag: React$1.ForwardRefExoticComponent<DocumentSourceTagProps & React$1.RefAttributes<HTMLSpanElement>>;
640
+
641
+ /**
642
+ * DocumentsWorkspaceLayout — 3-pane CSS-grid shell for a firm Documents workspace.
643
+ *
644
+ * Renders three independently-scrolling columns: a clients rail, a folder tree,
645
+ * and a files area. The root fills its parent height and does not scroll itself.
646
+ * Each pane is a flex column container; consumers are responsible for placing
647
+ * their own scroll regions inside the slots.
648
+ *
649
+ * Responsive grid:
650
+ * Base (<lg): 2 visible columns — clientsRail + filesArea. The folderTree
651
+ * pane is hidden so it does not occupy the 2-column base template.
652
+ * lg (>=1024px): All 3 columns — 248px rail | 220px folders | remaining files.
653
+ * xl (>=1280px): Wider columns — 280px rail | 244px folders | remaining files.
654
+ *
655
+ * No padding is imposed on any pane; the consumer owns spacing inside each slot.
656
+ */
657
+ interface DocumentsWorkspaceLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
658
+ /** Left column — client list rail (always visible). */
659
+ clientsRail: React.ReactNode;
660
+ /** Middle column — folder/category tree (hidden below lg breakpoint). */
661
+ folderTree: React.ReactNode;
662
+ /** Right column — file list and preview area (always visible). */
663
+ filesArea: React.ReactNode;
664
+ }
665
+ /**
666
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
667
+ * Owner: PRO documents, which decides to adopt, contribute or release
668
+ * the name. Never removed before 3.0.
669
+ */
670
+ declare const DocumentsWorkspaceLayout: React$1.ForwardRefExoticComponent<DocumentsWorkspaceLayoutProps & React$1.RefAttributes<HTMLDivElement>>;
671
+
672
+ /**
673
+ * FileChip — compact attachment row: a colored file-type tile, the file
674
+ * name, a "size · when" meta line, and an optional trailing action
675
+ * (View / Download). Used in the AI receipt panel, document mini-lists,
676
+ * and message attachments.
677
+ *
678
+ * The tile tone keys off `kind`: documents are danger-tinted (PDF red),
679
+ * sheets success, images info, generic neutral — a quick visual file-type
680
+ * cue without a bespoke icon per extension.
681
+ */
682
+ type FileKind = "doc" | "sheet" | "image" | "generic";
683
+ interface FileChipProps extends React.HTMLAttributes<HTMLDivElement> {
684
+ name: string;
685
+ /** Right-side meta, e.g. "240 KB · uploaded just now". */
686
+ meta?: React.ReactNode;
687
+ kind?: FileKind;
688
+ /** Custom glyph inside the tile; defaults to a document icon. */
689
+ icon?: React.ReactNode;
690
+ /** Trailing action node (a Button / link). */
691
+ action?: React.ReactNode;
692
+ }
693
+ declare const FileChip: React$1.ForwardRefExoticComponent<FileChipProps & React$1.RefAttributes<HTMLDivElement>>;
694
+
695
+ /**
696
+ * SectionHeader — title + description block for marketing-style sections.
697
+ * Uses Inter (`font-display`) with the spec's `-0.022em` letterspacing.
698
+ */
699
+ interface SectionHeaderProps {
700
+ title: string;
701
+ description?: string;
702
+ align?: "left" | "center";
703
+ className?: string;
704
+ }
705
+ declare function SectionHeader({ title, description, align, className, }: SectionHeaderProps): react_jsx_runtime.JSX.Element;
706
+
707
+ /**
708
+ * Section — max-width centered wrapper for marketing/section content.
709
+ * The `--content-pad` token (32px) is the canonical app-content gutter,
710
+ * but Section keeps its 24px (`px-6`) gutter for narrower marketing pages.
711
+ */
712
+ declare const maxWidthStyles: {
713
+ readonly sm: "ds:max-w-3xl";
714
+ readonly md: "ds:max-w-4xl";
715
+ readonly lg: "ds:max-w-5xl";
716
+ readonly xl: "ds:max-w-6xl";
717
+ };
718
+ interface SectionProps extends React.HTMLAttributes<HTMLElement> {
719
+ maxWidth?: keyof typeof maxWidthStyles;
720
+ as?: "section" | "div";
721
+ }
722
+ declare const Section: React$1.ForwardRefExoticComponent<SectionProps & React$1.RefAttributes<HTMLElement>>;
723
+ interface SectionHeadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
724
+ eyebrow?: React.ReactNode;
725
+ title?: React.ReactNode;
726
+ meta?: React.ReactNode;
727
+ }
728
+ declare const SectionHead: React$1.ForwardRefExoticComponent<SectionHeadProps & React$1.RefAttributes<HTMLDivElement>>;
729
+
730
+ /**
731
+ * Stat — paired numeric display + caption (the StatNum primitive).
732
+ * Numerals are set in `font-display` (Inter) at a fluid clamp size with
733
+ * `font-variant-numeric: tabular-nums` for vertical alignment.
734
+ */
735
+ interface StatProps extends React.HTMLAttributes<HTMLDivElement> {
736
+ value: string;
737
+ label: string;
738
+ }
739
+ declare const Stat: React$1.ForwardRefExoticComponent<StatProps & React$1.RefAttributes<HTMLDivElement>>;
740
+
741
+ /**
742
+ * StatusPill — semantic status atom for engagement / document / signature
743
+ * lifecycles. It is a thin mapping over <Badge>: each known `status` picks
744
+ * the right variant + default label + dot, so call sites read as
745
+ * `<StatusPill status="needs-revision" />` instead of repeating the
746
+ * variant/label pairing everywhere.
747
+ *
748
+ * Mapping (per the portal spec):
749
+ * requested → warning "Requested"
750
+ * in-review → info "In review"
751
+ * needs-revision → danger "Needs revision"
752
+ * accepted/signed/
753
+ * approved/paid/
754
+ * received → success "Accepted" / "Signed" / "Received" / …
755
+ * draft/pending → secondary
756
+ * overdue → danger
757
+ *
758
+ * Pass `children` to override the label while keeping the mapped variant.
759
+ */
760
+ type PillStatus = "requested" | "in-review" | "needs-revision" | "accepted" | "signed" | "approved" | "paid" | "complete" | "received" | "draft" | "pending" | "overdue" | "declined" | "internal" | "shared";
761
+ interface StatusPillProps extends Omit<BadgeProps, "variant"> {
762
+ status: PillStatus;
763
+ /** Show a leading dot. Default `true` (status atoms read better with one). */
764
+ dot?: boolean;
765
+ }
766
+ declare const StatusPill: React$1.ForwardRefExoticComponent<StatusPillProps & React$1.RefAttributes<HTMLSpanElement>>;
767
+
768
+ /**
769
+ * Theme scope — the host dimensions a subtree renders with (W5-02).
770
+ *
771
+ * The design system's scopes are DOM attributes: `[data-ds-scheme]`,
772
+ * `[data-ds-brand]`, `[data-ds-density]`, `dir`, and the `--ds-*` style a
773
+ * runtime brand writes (`createBrandTheme`). Set on the document root they
774
+ * reach everything, portalled overlays included. Set on a *subtree* they stop
775
+ * at the subtree: a Dialog or Popover opened from inside it renders in
776
+ * `document.body`, outside the scope, and comes up in the root theme.
777
+ *
778
+ * `ThemeScope` fixes that. It stamps the attributes on its own element, as a
779
+ * hand-written scope would, **and** registers them in context, so the shared
780
+ * `Portal` (`primitives/behavior/portal.tsx`) can re-stamp the same attributes
781
+ * and runtime-brand style on the container wrapper it mounts portalled content
782
+ * into. Nested scopes merge: a `density="compact"` scope inside a `brand="tax"`
783
+ * one propagates both.
784
+ *
785
+ * Apps that scope the document root need none of this; the portal path is
786
+ * unchanged for them (no wrapper is created).
787
+ */
788
+ /** The scheme a subtree renders with (`[data-ds-scheme]`). */
789
+ type ThemeScheme = "light" | "dark";
790
+ /** A built-in brand scope (`[data-ds-brand]`). */
791
+ type ThemeBrand = "pro" | "audit" | "books" | "tax";
792
+ /** The density scope (`[data-ds-density]`, W2-06). */
793
+ type ThemeDensity = "comfortable" | "compact";
794
+ /** Text direction (`dir`). */
795
+ type ThemeDirection = "ltr" | "rtl";
796
+ /**
797
+ * The dimensions a scope sets. Every field is optional; an unset field is
798
+ * inherited from the enclosing scope, then from the document.
799
+ *
800
+ * @experimental
801
+ */
802
+ interface ThemeScopeValue {
803
+ scheme?: ThemeScheme;
804
+ brand?: ThemeBrand;
805
+ density?: ThemeDensity;
806
+ dir?: ThemeDirection;
807
+ /**
808
+ * A registered runtime brand: the object `createBrandTheme()` returns. It is
809
+ * applied as inline `--ds-*` style on the scope element and re-applied on
810
+ * portalled content.
811
+ */
812
+ brandTheme?: BrandTheme;
813
+ }
814
+ /** Props of {@link ThemeScope}. @experimental */
815
+ interface ThemeScopeProps extends ThemeScopeValue, Omit<React.HTMLAttributes<HTMLDivElement>, "dir"> {
816
+ children?: ReactNode;
817
+ }
818
+ /**
819
+ * A `<div>` that scopes the host dimensions of its subtree — scheme, brand,
820
+ * density, direction and a runtime brand — and propagates them into every
821
+ * overlay opened from inside it (Dialog, Sheet, Popover, Tooltip, menus,
822
+ * Select, Toast …), which would otherwise render in the document's theme.
823
+ *
824
+ * ```tsx
825
+ * <ThemeScope brand="tax" density="compact">
826
+ * <Popover>…</Popover> // its content renders as compact Tax, too
827
+ * </ThemeScope>
828
+ *
829
+ * <ThemeScope brandTheme={createBrandTheme({ brand: firm.primary })}>
830
+ * <Dialog>…</Dialog> // the runtime brand follows the dialog to <body>
831
+ * </ThemeScope>
832
+ * ```
833
+ *
834
+ * Nothing changes for apps that scope `<html>` or `<body>`: no wrapper is
835
+ * created around portalled content when no `ThemeScope` encloses it.
836
+ *
837
+ * @experimental W5-02. The public shape follows decision D7 for the runtime
838
+ * brand seed.
839
+ */
840
+ declare const ThemeScope: React$1.ForwardRefExoticComponent<ThemeScopeProps & React$1.RefAttributes<HTMLDivElement>>;
841
+
842
+ /**
843
+ * How `TableHead` sets its column labels (W6-02).
844
+ * - `plain` (default) — sentence case in the body font, 14px medium, `text-fg-3`.
845
+ * This is what Table renders today and what Pro's `HEADER_CLS` override
846
+ * reproduces by hand.
847
+ * - `overline` — the mono uppercase eyebrow (`text-overline` role, `text-fg-4`).
848
+ *
849
+ * @experimental
850
+ */
851
+ type TableHeaderStyle = "plain" | "overline";
852
+ /** Horizontal alignment of a cell's content, in logical (writing-direction) terms. @experimental */
853
+ type TableCellAlign = "start" | "center" | "end";
854
+ /** Which edge a cell sticks to while the wrapper scrolls horizontally (W6-10). @experimental */
855
+ type TableStickyEdge = "start" | "end";
856
+ /** A column's sort direction; `null` is "sortable, not sorted". @experimental */
857
+ type TableSortDirection = "asc" | "desc";
858
+ interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {
859
+ /** Class for the wrapping `div` that handles overflow. */
860
+ wrapperClassName?: string;
861
+ /**
862
+ * Per-part classes (W2-17 pattern). `wrapper` is the overflow container —
863
+ * the same element `wrapperClassName` styles (C-CLASSNAME-PROPS).
864
+ *
865
+ * @experimental
866
+ */
867
+ classNames?: Partial<Record<Extract<TableSlot, "wrapper">, string>>;
868
+ /**
869
+ * The header label style (W6-02). Default `plain` — today's sentence-case
870
+ * labels. `overline` renders the mono uppercase eyebrow.
871
+ *
872
+ * @experimental
873
+ */
874
+ headerStyle?: TableHeaderStyle;
875
+ /**
876
+ * Row density (W6-11). Stamps `data-ds-density` on the wrapper, so the
877
+ * whole table — its rows and the controls inside them — renders one step
878
+ * denser: 36px rows, 12px horizontal and 8px vertical cell padding, read
879
+ * from the `--ds-table-*` tokens the scope re-points. Undefined leaves the
880
+ * table on the ambient scope (ADR-013: density is a scope; this prop is the
881
+ * scope on the table's own element).
882
+ *
883
+ * @experimental
884
+ */
885
+ density?: ThemeDensity;
886
+ /**
887
+ * Keep the header row visible while the wrapper scrolls vertically (W6-10).
888
+ * Give the wrapper a height (`wrapperClassName="max-h-96"`) for it to
889
+ * scroll. Header cells become `position: sticky` with the surface-2
890
+ * background they already have.
891
+ *
892
+ * @experimental
893
+ */
894
+ stickyHeader?: boolean;
895
+ /**
896
+ * Copy for this table; prop > provider > English default (W5-20). The only
897
+ * message today is the accessible name of the horizontal scroll region
898
+ * (`region`).
899
+ *
900
+ * @experimental
901
+ */
902
+ messages?: Partial<TableMessages>;
903
+ }
904
+ declare const Table: React$1.ForwardRefExoticComponent<TableProps & React$1.RefAttributes<HTMLTableElement>>;
905
+ type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;
906
+ declare const TableHeader: React$1.ForwardRefExoticComponent<TableHeaderProps & React$1.RefAttributes<HTMLTableSectionElement>>;
907
+ type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;
908
+ declare const TableBody: React$1.ForwardRefExoticComponent<TableBodyProps & React$1.RefAttributes<HTMLTableSectionElement>>;
909
+ type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;
910
+ declare const TableFooter: React$1.ForwardRefExoticComponent<TableFooterProps & React$1.RefAttributes<HTMLTableSectionElement>>;
911
+ interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {
912
+ /**
913
+ * The row is part of the current selection: renders `data-state="selected"`
914
+ * (P-DATA-STATE — the attribute consumers already set by hand keeps working)
915
+ * and the brand tint.
916
+ *
917
+ * @experimental
918
+ */
919
+ selected?: boolean;
920
+ /**
921
+ * The row itself is a click target (W6-01): a tab stop with a focus ring,
922
+ * Enter and Space fire `onClick` — Pressable's contract on a `<tr>`, which
923
+ * stays a `<tr>` (P-NATIVE-TABLE; a `role="button"` would take its cells
924
+ * out of the table). Keys pressed on a control inside the row (a checkbox,
925
+ * a menu button) are left to that control.
926
+ *
927
+ * @experimental
928
+ */
929
+ interactive?: boolean;
930
+ }
931
+ declare const TableRow: React$1.ForwardRefExoticComponent<TableRowProps & React$1.RefAttributes<HTMLTableRowElement>>;
932
+ /** The props `TableHead` and `TableCell` share (W6-01). @experimental */
933
+ interface TableCellCommonProps {
934
+ /**
935
+ * Content alignment, logical: `end` is what a consumer wrote `text-right`
936
+ * for (60 times in Pro). Default `start`. Replaces the deprecated HTML
937
+ * `align` attribute on the cell, which no consumer passes.
938
+ */
939
+ align?: TableCellAlign;
940
+ /** A column of figures: tabular numerals and `end` alignment. */
941
+ numeric?: boolean;
942
+ /** Clip overflowing content with an ellipsis (`truncate`, `max-width: 0`); pair with `width`. */
943
+ truncate?: boolean;
944
+ /** Column width, as a CSS length or a pixel number — an inline `width` on the cell. */
945
+ width?: number | string;
946
+ /**
947
+ * Stick the cell to the `start` or `end` edge while the wrapper scrolls
948
+ * horizontally (W6-10): the Pro sticky action column. The cell paints the
949
+ * surface it sits on so scrolled content never shows through it.
950
+ */
951
+ sticky?: TableStickyEdge;
952
+ }
953
+ interface TableHeadProps extends Omit<React.ThHTMLAttributes<HTMLTableCellElement>, "align">, TableCellCommonProps {
954
+ /**
955
+ * The column's sort state (W6-01): `"asc"`, `"desc"`, or `null` for a
956
+ * sortable column that is not sorted. Undefined (the default) is a plain,
957
+ * unsortable header. Setting it renders the label inside a `<button>` that
958
+ * cycles none → asc → desc → none through `onSortChange` (the order
959
+ * `DataTableHeader` has always used) and reflects the state as `aria-sort`
960
+ * and `data-state`. The `<th>`'s text stays the label alone (C-DOM-14).
961
+ *
962
+ * @experimental
963
+ */
964
+ sort?: TableSortDirection | null;
965
+ /** Receives the next step of the sort cycle when the header is activated. */
966
+ onSortChange?: (sort: TableSortDirection | null) => void;
967
+ }
968
+ declare const TableHead: React$1.ForwardRefExoticComponent<TableHeadProps & React$1.RefAttributes<HTMLTableCellElement>>;
969
+ interface TableCellProps extends Omit<React.TdHTMLAttributes<HTMLTableCellElement>, "align">, TableCellCommonProps {
970
+ /**
971
+ * Secondary content — `text-fg-3` (content-muted), what a consumer wrote
972
+ * `text-muted-foreground` for (90 times in Pro).
973
+ */
974
+ muted?: boolean;
975
+ }
976
+ declare const TableCell: React$1.ForwardRefExoticComponent<TableCellProps & React$1.RefAttributes<HTMLTableCellElement>>;
977
+ type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;
978
+ declare const TableCaption: React$1.ForwardRefExoticComponent<TableCaptionProps & React$1.RefAttributes<HTMLTableCaptionElement>>;
979
+
980
+ interface TeamMember {
981
+ id: string;
982
+ fullName: string;
983
+ }
984
+ interface TeamMemberSelectProps {
985
+ teamMembers: TeamMember[];
986
+ currentUserId?: string | null;
987
+ value: string;
988
+ onValueChange: (value: string) => void;
989
+ includeUnassigned?: boolean;
990
+ placeholder?: string;
991
+ className?: string;
992
+ }
993
+ /**
994
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
995
+ * Owner: TAX, which keeps a local `TeamMemberPicker`; new code uses
996
+ * `PeoplePicker` (W7-10). Never removed before 3.0.
997
+ */
998
+ declare function TeamMemberSelect({ teamMembers, currentUserId, value, onValueChange, includeUnassigned, placeholder, className, }: TeamMemberSelectProps): react_jsx_runtime.JSX.Element;
999
+ declare namespace TeamMemberSelect {
1000
+ var displayName: string;
1001
+ }
1002
+
1003
+ /**
1004
+ * ChannelTabs — a controlled, pill-style tab strip for switching between
1005
+ * communication channels (Chat / Email / SMS / Internal) on a thread surface.
1006
+ *
1007
+ * Each tab carries a colored status dot (toned per channel) and an optional
1008
+ * unread count. The active tab gets the accent ring treatment; inactive tabs
1009
+ * are quiet until hovered. The component is presentational and fully
1010
+ * controlled — the consumer owns the active value and maps it to whatever
1011
+ * backend channel group / compose channel the tab represents.
1012
+ *
1013
+ * <ChannelTabs
1014
+ * value={tab}
1015
+ * onChange={setTab}
1016
+ * tabs={[
1017
+ * { value: "chat", label: "Chat", tone: "success", count: 2 },
1018
+ * { value: "email", label: "Email", tone: "info" },
1019
+ * { value: "sms", label: "SMS", tone: "accent" },
1020
+ * ]}
1021
+ * />
1022
+ *
1023
+ * @since 1.5.0
1024
+ */
1025
+ /** Status-dot tone for a channel tab. Maps to a semantic color token. */
1026
+ type ChannelTone = "brand" | "info" | "success" | "warning" | "muted" | "danger";
1027
+ interface ChannelTabItem {
1028
+ /** Stable identifier passed back to `onChange`. */
1029
+ value: string;
1030
+ /** Visible label. */
1031
+ label: string;
1032
+ /** Status-dot tone. Defaults to `muted`. */
1033
+ tone?: ChannelTone;
1034
+ /** Optional unread count — hidden when `0` or `undefined`. */
1035
+ count?: number;
1036
+ }
1037
+ interface ChannelTabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
1038
+ /** The tabs to render. */
1039
+ tabs: ChannelTabItem[];
1040
+ /** Currently active tab `value`. */
1041
+ value: string;
1042
+ /** Fired with the picked tab's `value`. */
1043
+ onChange: (value: string) => void;
1044
+ }
1045
+ /**
1046
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1047
+ * Owner: PRO communications, which decides to adopt, contribute or release
1048
+ * the name. Never removed before 3.0.
1049
+ */
1050
+ declare function ChannelTabs({ tabs, value, onChange, className, ...props }: ChannelTabsProps): react_jsx_runtime.JSX.Element;
1051
+ declare namespace ChannelTabs {
1052
+ var displayName: string;
1053
+ }
1054
+
1055
+ /**
1056
+ * IntentBadge — a small dashed-outline badge for an AI-classified intent
1057
+ * (Document, Question, Payment, Scheduling, Urgent, FYI, Follow-up…).
1058
+ *
1059
+ * The dashed border is the signature: it reads as "machine-suggested, not
1060
+ * yet confirmed", distinguishing it from the solid `StatusPill` used for
1061
+ * authoritative state. Presentational and generic — the consumer owns the
1062
+ * intent→tone→icon→label mapping in their own domain config and passes the
1063
+ * resolved pieces in.
1064
+ *
1065
+ * <IntentBadge tone="info" icon={<FileIcon size={12} />}>Document</IntentBadge>
1066
+ *
1067
+ * @since 1.5.0
1068
+ */
1069
+ /** Color tone for an intent badge. */
1070
+ type IntentTone = "brand" | "info" | "primary" | "success" | "warning" | "danger" | "muted";
1071
+ interface IntentBadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
1072
+ /** Color tone. Defaults to `muted`. */
1073
+ tone?: IntentTone;
1074
+ /** Optional leading glyph — pass a 12px icon. */
1075
+ icon?: ReactNode;
1076
+ /** Badge label. */
1077
+ children: ReactNode;
1078
+ }
1079
+ /**
1080
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1081
+ * Owner: PRO communications, which decides to adopt, contribute or release
1082
+ * the name. Never removed before 3.0.
1083
+ */
1084
+ declare function IntentBadge({ tone, icon, children, className, ...props }: IntentBadgeProps): react_jsx_runtime.JSX.Element;
1085
+ declare namespace IntentBadge {
1086
+ var displayName: string;
1087
+ }
1088
+
1089
+ /**
1090
+ * DocumentRequestUpload — one self-contained "please upload this document" row
1091
+ * for an organizer or a document-request list: a label (with optional help +
1092
+ * required flag), a drag-drop dropzone, and the list of already-uploaded files
1093
+ * rendered as removable chips.
1094
+ *
1095
+ * It packages the `FileUpload` + `FileChip` primitives into the exact shape a
1096
+ * document-request row needs — including the file **remove** affordance that
1097
+ * the `Questions` `file-upload` type only exposes via its `onFileRemove` prop.
1098
+ * Reach for `Questions type="file-upload"` when the upload is one field inside a
1099
+ * larger question list; reach for this when a document request is the whole unit
1100
+ * (its own card, its own awaiting/locked state).
1101
+ *
1102
+ * Fully presentational and controlled: the caller owns the file list and every
1103
+ * handler.
1104
+ */
1105
+ interface DocumentRequestUploadFile {
1106
+ /** Stable key. Falls back to `name` + `size` when omitted. */
1107
+ id?: string;
1108
+ /** File name shown on the chip. */
1109
+ name: string;
1110
+ /** Size in bytes; rendered as a human meta line when `meta` is not given. */
1111
+ size?: number;
1112
+ /** File-type tone for the chip tile. Defaults to `"doc"`. */
1113
+ kind?: FileKind;
1114
+ /** Overrides the derived "size" meta line (e.g. "2.1 MB · uploaded just now"). */
1115
+ meta?: React.ReactNode;
1116
+ }
1117
+ interface DocumentRequestUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
1118
+ /** Row headline, e.g. "W-2 from each employer". */
1119
+ label: string;
1120
+ /** Optional supporting line under the label. */
1121
+ description?: string;
1122
+ /** Renders a "Required" pill next to the label. */
1123
+ required?: boolean;
1124
+ /** Optional help tooltip beside the label. */
1125
+ help?: {
1126
+ title?: string;
1127
+ body: string;
1128
+ };
1129
+ /** Already-uploaded files, rendered as removable chips. */
1130
+ files?: DocumentRequestUploadFile[];
1131
+ /** New files chosen via the dropzone / picker. */
1132
+ onFilesSelected?: (files: File[]) => void;
1133
+ /** Remove an uploaded file. When omitted, chips have no remove button. */
1134
+ onRemoveFile?: (file: DocumentRequestUploadFile, index: number) => void;
1135
+ /** Dropzone `accept` list, e.g. ".pdf,.jpg,.png". */
1136
+ accept?: string;
1137
+ /** Max per-file size in bytes. */
1138
+ maxSize?: number;
1139
+ /** Allow selecting multiple files. Defaults to `true`. */
1140
+ multiple?: boolean;
1141
+ /** Locks the row: hides the dropzone and the remove buttons. */
1142
+ disabled?: boolean;
1143
+ /** Message shown in place of the dropzone when `disabled`. Defaults to a lock note. */
1144
+ disabledHint?: string;
1145
+ /** Card chrome or bare layout. Defaults to `"card"`. */
1146
+ chrome?: "card" | "plain";
1147
+ }
1148
+ /**
1149
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1150
+ * Owner: PORTAL client portal, which decides to adopt, contribute or release
1151
+ * the name. Never removed before 3.0.
1152
+ */
1153
+ declare const DocumentRequestUpload: React$1.ForwardRefExoticComponent<DocumentRequestUploadProps & React$1.RefAttributes<HTMLDivElement>>;
1154
+
1155
+ /**
1156
+ * AIReceiptPanel — the portal "attach a receipt, auto-fill with AI" panel.
1157
+ * Three states drive the whole surface:
1158
+ *
1159
+ * idle → dashed "Attach receipt" button
1160
+ * reading → pulsing sparkle + "Reading your receipt…"
1161
+ * done → "Auto-filled from receipt" badge, the file chip, and the
1162
+ * extracted vendor / amount / date grid (each confirmed ✓)
1163
+ *
1164
+ * It is **controlled**: the consumer owns `state` and supplies `result`
1165
+ * when done. The simulated extraction in the reference is just one driver;
1166
+ * swap in real OCR/AI and the contract is unchanged — flip `state` to
1167
+ * "reading", then to "done" with a `result`.
1168
+ */
1169
+ interface AIReceiptResult {
1170
+ vendor: string;
1171
+ amount: string;
1172
+ date: string;
1173
+ file: {
1174
+ name: string;
1175
+ meta?: React.ReactNode;
1176
+ };
1177
+ }
1178
+ interface AIReceiptPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "results"> {
1179
+ state?: "idle" | "reading" | "done";
1180
+ /** Extracted fields, shown in the `done` state. */
1181
+ result?: AIReceiptResult;
1182
+ /** Fired when the idle attach button is pressed. */
1183
+ onAttach?: () => void;
1184
+ /** Fired when the done-state "Remove" link is pressed. */
1185
+ onRemove?: () => void;
1186
+ /** View action for the file chip (e.g. open the receipt). */
1187
+ onViewFile?: () => void;
1188
+ }
1189
+ /**
1190
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1191
+ * Owner: PRO, which decides to adopt, contribute or release
1192
+ * the name. Never removed before 3.0.
1193
+ */
1194
+ declare const AIReceiptPanel: React$1.ForwardRefExoticComponent<AIReceiptPanelProps & React$1.RefAttributes<HTMLDivElement>>;
1195
+
1196
+ /**
1197
+ * Practice service tones for the client portal. Each engagement surface
1198
+ * (card, ring, timeline) is "toned per service": a fill color + a track
1199
+ * tint. Rather than fork every primitive's `variant` enum, portal
1200
+ * composites set these two CSS vars (`--tone`, `--tone-bg`) once on their
1201
+ * root and let descendants read them via `[color:var(--tone)]` /
1202
+ * `[background:var(--tone-bg)]`. One place owns the mapping; theming and
1203
+ * dark mode flow through the underlying `--color-service-*` tokens.
1204
+ */
1205
+ type ServiceTone = "tax" | "audit" | "accounting" | "neutral";
1206
+ /**
1207
+ * CSS-var style object to spread on a service-toned root. Descendants read
1208
+ * `var(--tone)` / `var(--tone-bg)`; the cast is required because
1209
+ * `CSSProperties` doesn't type custom properties.
1210
+ */
1211
+ declare function serviceToneStyle(tone: ServiceTone): CSSProperties;
1212
+ declare const SERVICE_TONES: ServiceTone[];
1213
+ /** Human label for a tone, for chips and headings. */
1214
+ declare const serviceToneLabel: Record<ServiceTone, string>;
1215
+
1216
+ /**
1217
+ * AttentionItem — one row in the portal "Needs your attention" feed:
1218
+ * a toned icon tile, a title + supporting line, and a trailing action
1219
+ * (custom node or a default chevron). Group these by service at the call
1220
+ * site; the row itself just renders one item.
1221
+ *
1222
+ * Set `tone` to color the icon tile per service (or use a status tone via
1223
+ * `urgency`). The whole row is a `<button>` when `onClick` is supplied.
1224
+ */
1225
+ type AttentionUrgency = "default" | "warning" | "danger";
1226
+ interface AttentionItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
1227
+ icon: React.ReactNode;
1228
+ title: React.ReactNode;
1229
+ description?: React.ReactNode;
1230
+ /** Service tone for the icon tile (used when `urgency` is "default"). */
1231
+ tone?: ServiceTone;
1232
+ /** Status urgency — overrides the service tone for the tile. */
1233
+ urgency?: AttentionUrgency;
1234
+ /** Trailing slot; defaults to a chevron when the row is interactive. */
1235
+ action?: React.ReactNode;
1236
+ onClick?: () => void;
1237
+ }
1238
+ /**
1239
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1240
+ * Owner: PRO, which decides to adopt, contribute or release
1241
+ * the name. Never removed before 3.0.
1242
+ */
1243
+ declare const AttentionItem: React$1.ForwardRefExoticComponent<AttentionItemProps & React$1.RefAttributes<HTMLDivElement>>;
1244
+
1245
+ /**
1246
+ * BottomNav — mobile tab bar for the client portal (desktop uses the
1247
+ * sidebar instead). Fixed to the viewport bottom with safe-area padding;
1248
+ * each tab is an icon + short label with an optional count/dot badge.
1249
+ *
1250
+ * Controlled via `value` + `onChange`. Keep it to 3–5 tabs — beyond that,
1251
+ * labels truncate and the row gets cramped on a 390px screen.
1252
+ */
1253
+ interface BottomNavTab {
1254
+ id: string;
1255
+ label: string;
1256
+ icon: React.ReactNode;
1257
+ /** Numeric badge; `true` renders a dot. */
1258
+ badge?: number | boolean;
1259
+ }
1260
+ interface BottomNavProps extends Omit<React.HTMLAttributes<HTMLElement>, "onChange"> {
1261
+ tabs: BottomNavTab[];
1262
+ value: string;
1263
+ onChange: (id: string) => void;
1264
+ }
1265
+ /**
1266
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1267
+ * Owner: DS — name released (docs/ownership/investigate.md, row 8); Portal's
1268
+ * mobile nav moves to the Sidebar mobile mode (W7-04). Never removed before 3.0.
1269
+ */
1270
+ declare const BottomNav: React$1.ForwardRefExoticComponent<BottomNavProps & React$1.RefAttributes<HTMLElement>>;
1271
+
1272
+ /**
1273
+ * DashGrid — drag-to-reorder widget grid for the firm dashboard. Each
1274
+ * widget gets a 6-dot grab handle; dragging it over another widget moves
1275
+ * it to that slot. The flat order is the source of truth; widgets flow
1276
+ * row-major into a responsive CSS grid.
1277
+ *
1278
+ * Order is uncontrolled by default. Pass `storageKey` to persist it to
1279
+ * `localStorage` — the initial order is read **once** in a lazy
1280
+ * `useState` initializer (SSR-safe: no read on the server), and the grid
1281
+ * carries `suppressHydrationWarning` because a persisted client order will
1282
+ * legitimately differ from the server's default order on first paint.
1283
+ * `onReorder` fires with the new id order on every move.
1284
+ */
1285
+ interface DashWidget {
1286
+ id: string;
1287
+ content: React.ReactNode;
1288
+ /** Column span on the lg grid (1–3). Default 1. */
1289
+ span?: 1 | 2 | 3;
1290
+ }
1291
+ interface DashGridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onReorder"> {
1292
+ widgets: DashWidget[];
1293
+ /** Persist order under this `localStorage` key. Omit to disable persistence. */
1294
+ storageKey?: string;
1295
+ onReorder?: (orderedIds: string[]) => void;
1296
+ /** Max columns on large screens. Default 3. */
1297
+ columns?: 2 | 3 | 4;
1298
+ }
1299
+ /**
1300
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1301
+ * Owner: PRO, which decides to adopt, contribute or release
1302
+ * the name. Never removed before 3.0.
1303
+ */
1304
+ declare const DashGrid: React$1.ForwardRefExoticComponent<DashGridProps & React$1.RefAttributes<HTMLDivElement>>;
1305
+
1306
+ interface EngagementCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
1307
+ /** Service name, e.g. "Tax". */
1308
+ service: string;
1309
+ /** Service glyph (an icon node). */
1310
+ serviceIcon?: React.ReactNode;
1311
+ tone?: ServiceTone;
1312
+ title: string;
1313
+ /** Status node (typically a <StatusPill> or plain label). */
1314
+ status?: React.ReactNode;
1315
+ /** Current step index (1-based) and total. */
1316
+ current: number;
1317
+ steps: number;
1318
+ /** Name of the current step, shown in the caption. */
1319
+ stepLabel?: string;
1320
+ /** Footer ETA content, e.g. "Est. completion Mar 14" or "Recurring engagement". */
1321
+ eta?: React.ReactNode;
1322
+ /** Show a ProgressRing instead of segments + percent. */
1323
+ ring?: boolean;
1324
+ onOpen?: () => void;
1325
+ }
1326
+ /**
1327
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1328
+ * Owner: PORTAL client portal (PRO workflow keeps one too), which decides to
1329
+ * adopt, contribute or release the name. Never removed before 3.0.
1330
+ */
1331
+ declare const EngagementCard: React$1.ForwardRefExoticComponent<EngagementCardProps & React$1.RefAttributes<HTMLDivElement>>;
1332
+
1333
+ /**
1334
+ * EngagementTimeline — vertical stepper for an engagement's lifecycle.
1335
+ * Each step is a node + connector rail on the left and a body on the right.
1336
+ *
1337
+ * done → filled success node with a check + "Completed {date}" line
1338
+ * active → toned ring node + "In progress" badge + inline actions
1339
+ * todo → muted node + "Upcoming" badge
1340
+ *
1341
+ * The active node + badge read the service `--tone` set once on the
1342
+ * container (see `serviceToneStyle`). Compose with `<EngagementTimelineStep>`
1343
+ * children, mirroring the `<ActivityList>` / `<ActivityItem>` split.
1344
+ */
1345
+ type TimelineState = "done" | "active" | "todo";
1346
+ interface EngagementTimelineProps extends React.HTMLAttributes<HTMLOListElement> {
1347
+ /** Service tone for active nodes. */
1348
+ tone?: ServiceTone;
1349
+ }
1350
+ /**
1351
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1352
+ * Owner: PORTAL client portal (PRO documents keeps one too), which decides to
1353
+ * adopt, contribute or release the name. Never removed before 3.0.
1354
+ */
1355
+ declare const EngagementTimeline: React$1.ForwardRefExoticComponent<EngagementTimelineProps & React$1.RefAttributes<HTMLOListElement>>;
1356
+ interface EngagementTimelineStepProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, "title"> {
1357
+ state: TimelineState;
1358
+ /** Step name. */
1359
+ name: React.ReactNode;
1360
+ /** 1-based index shown inside todo/active nodes. */
1361
+ index: number;
1362
+ /** Supporting copy under the name. */
1363
+ note?: React.ReactNode;
1364
+ /** Completion date, shown for `done` steps. */
1365
+ date?: React.ReactNode;
1366
+ /** Inline action row, shown for `active` steps. */
1367
+ actions?: React.ReactNode;
1368
+ /** Hide the connector below the node (last step). */
1369
+ last?: boolean;
1370
+ }
1371
+ declare const EngagementTimelineStep: React$1.ForwardRefExoticComponent<EngagementTimelineStepProps & React$1.RefAttributes<HTMLLIElement>>;
1372
+
1373
+ /**
1374
+ * ClientRailItem — a client row in the firm Documents left rail.
1375
+ *
1376
+ * Renders as a full-width, left-aligned `<button>`. Displays the client
1377
+ * avatar, name, an optional pending-documents indicator (purple dot +
1378
+ * "N pending" label), a file-count chip, and a meta suffix (e.g. a relative
1379
+ * timestamp).
1380
+ *
1381
+ * Active state highlights the row with `bg-brand-bg` and a 3 px left accent
1382
+ * bar in the active brand colour. Hover (when not active) applies `bg-surface-2`.
1383
+ *
1384
+ * Spread standard `<button>` attributes (including `onClick`) directly.
1385
+ */
1386
+ interface ClientRailItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
1387
+ /** Client or entity display name. */
1388
+ name: string;
1389
+ /** Optional avatar image URL — forwarded to the DS Avatar `src` prop. */
1390
+ avatarSrc?: string;
1391
+ /** Entity kind label, e.g. "Individual" or "Business". */
1392
+ entityType: string;
1393
+ /** Number of pending document requests; 0 / undefined → no pending badge. */
1394
+ pendingCount?: number;
1395
+ /** Total file count shown in the name-row chip. Omit to hide the chip. */
1396
+ fileCount?: number;
1397
+ /** Trailing meta node — typically a relative-time string like "2h ago". */
1398
+ metaSuffix?: React.ReactNode;
1399
+ /** Whether this row is the currently-selected client in the rail. */
1400
+ active?: boolean;
1401
+ }
1402
+ declare const ClientRailItem: React$1.ForwardRefExoticComponent<ClientRailItemProps & React$1.RefAttributes<HTMLButtonElement>>;
1403
+ /**
1404
+ * ClientRailGroupHeader — section label row for the Documents left rail.
1405
+ *
1406
+ * When `accent` is true a 7 px pro-tone dot precedes the label and the text
1407
+ * is coloured in the active brand colour — signals that the group contains clients with
1408
+ * pending document requests. An optional `count` is appended as " · N".
1409
+ */
1410
+ interface ClientRailGroupHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
1411
+ /** Group label text, e.g. "Awaiting documents" or "All clients". */
1412
+ label: string;
1413
+ /** Optional count appended as " · N" after the label. */
1414
+ count?: number;
1415
+ /**
1416
+ * When true, renders a purple StatusDot before the label and colours the
1417
+ * label in `text-brand` (the active brand colour). Use for "Awaiting documents" groups.
1418
+ */
1419
+ accent?: boolean;
1420
+ }
1421
+ declare const ClientRailGroupHeader: React$1.ForwardRefExoticComponent<ClientRailGroupHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
1422
+
1423
+ interface DocumentFileRowProps extends React$1.HTMLAttributes<HTMLDivElement> {
1424
+ name: string;
1425
+ fileType: string;
1426
+ size?: string;
1427
+ date?: string;
1428
+ by?: string;
1429
+ status?: React$1.ReactNode;
1430
+ nameAdornment?: React$1.ReactNode;
1431
+ menu?: React$1.ReactNode;
1432
+ selected?: boolean;
1433
+ showCheckbox?: boolean;
1434
+ onSelectedChange?: (checked: boolean) => void;
1435
+ onOpen?: () => void;
1436
+ }
1437
+ type DocumentFileCardProps = DocumentFileRowProps;
1438
+ declare const DocumentFileRow: React$1.ForwardRefExoticComponent<DocumentFileRowProps & React$1.RefAttributes<HTMLDivElement>>;
1439
+ declare const DocumentFileCard: React$1.ForwardRefExoticComponent<DocumentFileRowProps & React$1.RefAttributes<HTMLDivElement>>;
1440
+ declare const lineCaptionToneClass: {
1441
+ readonly muted: "ds:text-fg-4";
1442
+ readonly warning: "ds:text-warning-fg";
1443
+ readonly danger: "ds:text-danger-fg";
1444
+ };
1445
+ interface DocumentFileLineProps extends React$1.HTMLAttributes<HTMLDivElement> {
1446
+ /** The file's own name. */
1447
+ name: string;
1448
+ /** Drives the leading glyph colour ("pdf", "image/png", "xlsx", …). */
1449
+ fileType?: string;
1450
+ /** Small chip at the trailing edge — e.g. the classified document type. */
1451
+ typeLabel?: React$1.ReactNode;
1452
+ /** One muted status line under the name — e.g. "Categorizing…". */
1453
+ caption?: React$1.ReactNode;
1454
+ /** Colour tone for the caption. */
1455
+ captionTone?: keyof typeof lineCaptionToneClass;
1456
+ /** When set, a preview (eye) button is shown that calls this. */
1457
+ onOpen?: () => void;
1458
+ /** Accessible label for the preview button (defaults to `Preview {name}`). */
1459
+ previewLabel?: string;
1460
+ }
1461
+ /**
1462
+ * DocumentFileLine — a compact single-line file row for DENSE inline lists:
1463
+ * the files collected under a checklist item, a "still sorting" group, or an
1464
+ * "also received" list. Unlike {@link DocumentFileRow} it carries no checkbox,
1465
+ * kebab menu, or size/date/by meta — just a file glyph, name, an optional type
1466
+ * chip + caption, and an optional preview (eye) action. Purpose-built for
1467
+ * {@link DocumentChecklist}; reach for `DocumentFileRow` when you need
1468
+ * selection, a menu, or file metadata.
1469
+ */
1470
+ declare const DocumentFileLine: React$1.ForwardRefExoticComponent<DocumentFileLineProps & React$1.RefAttributes<HTMLDivElement>>;
1471
+
1472
+ /**
1473
+ * A checklist item's lifecycle, from the client's point of view:
1474
+ * awaiting — expected, nothing uploaded yet
1475
+ * in-review — a file arrived and is being categorized / verified
1476
+ * received — the document is in
1477
+ * complete — in and finalized
1478
+ * not-applicable — the client marked it as not-needed
1479
+ */
1480
+ type DocumentChecklistStatus = "awaiting" | "in-review" | "received" | "complete" | "not-applicable";
1481
+ /** A single collected file rendered under an item (or in the sorting/extra lists). */
1482
+ interface DocumentChecklistFile extends Pick<DocumentFileLineProps, "name" | "fileType" | "typeLabel" | "caption" | "captionTone" | "onOpen"> {
1483
+ id: string;
1484
+ }
1485
+ /** One expected document type on the checklist. */
1486
+ interface DocumentChecklistItem {
1487
+ id: string;
1488
+ /** Plain-English label the client reads (e.g. "W-2"). */
1489
+ label: string;
1490
+ status: DocumentChecklistStatus;
1491
+ /** Files classified into this slot (0..N). */
1492
+ files?: DocumentChecklistFile[];
1493
+ /**
1494
+ * Rendered under an awaiting row — the "I can't provide this" control (a
1495
+ * caller-owned Select of missing-reason options). Kept as a slot so the
1496
+ * composite stays presentational and product-agnostic.
1497
+ */
1498
+ action?: React$1.ReactNode;
1499
+ }
1500
+ interface DocumentChecklistProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
1501
+ items: DocumentChecklistItem[];
1502
+ /** Section heading. */
1503
+ title?: string;
1504
+ /** Roll-up shown as a count + bar. Omit to hide the progress header. */
1505
+ progress?: {
1506
+ received: number;
1507
+ total: number;
1508
+ percent: number;
1509
+ };
1510
+ /** The upload dropzone, rendered at the very top of the single column. */
1511
+ upload?: React$1.ReactNode;
1512
+ /** Files still being sorted (not yet placed on a slot). */
1513
+ reviewing?: DocumentChecklistFile[];
1514
+ /** Recognized files that aren't on the checklist. */
1515
+ extra?: DocumentChecklistFile[];
1516
+ reviewingLabel?: string;
1517
+ extraLabel?: string;
1518
+ /** Rendered when there are no items at all. */
1519
+ emptyState?: React$1.ReactNode;
1520
+ }
1521
+ /**
1522
+ * DocumentChecklist — the client's single-column "your documents" experience.
1523
+ *
1524
+ * One scannable list: an upload dropzone on top, a progress roll-up, then every
1525
+ * expected document as a row that moves through Awaiting → Reviewing → Received
1526
+ * in place (state lives on the row, never in a separate bucket). Files still
1527
+ * being sorted surface in a compact "we're sorting these" group, and recognized
1528
+ * files that aren't on the checklist fall under an "also received" divider — so
1529
+ * nothing an upload produced is ever hidden, and there is exactly one place to
1530
+ * look.
1531
+ *
1532
+ * Fully controlled and presentational: the caller supplies `items`, `progress`,
1533
+ * and slots (`upload`, per-row `action`, per-file `onOpen`). It consumes only
1534
+ * semantic tokens, so `data-brand` retints it per product automatically.
1535
+ *
1536
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1537
+ * Owner: PORTAL client portal, which decides to adopt, contribute or release
1538
+ * the name. Never removed before 3.0.
1539
+ */
1540
+ declare const DocumentChecklist: React$1.ForwardRefExoticComponent<DocumentChecklistProps & React$1.RefAttributes<HTMLDivElement>>;
1541
+
1542
+ /**
1543
+ * DocumentRequestField — one numbered "document N" card inside the Request
1544
+ * Documents modal. Renders a header badge, an optional remove button, and a
1545
+ * three-field grid: document-type slot (caller-supplied), a required label
1546
+ * input, and an optional note input.
1547
+ *
1548
+ * Props:
1549
+ * - `index` — zero-based position; badge shows `index + 1`.
1550
+ * - `typeControl` — ReactNode rendered in the Type field slot (pass a
1551
+ * select, combobox, or disabled placeholder).
1552
+ * - `label` — controlled value for the Label input.
1553
+ * - `onLabelChange` — called with the new string on every keystroke.
1554
+ * - `note` — controlled value for the Note input.
1555
+ * - `onNoteChange` — called with the new string on every keystroke.
1556
+ * - `onRemove` — when provided (and `canRemove` is true) a remove
1557
+ * button appears in the header row.
1558
+ * - `canRemove` — guards `onRemove`; set false when only one field
1559
+ * remains so the user cannot delete the last entry.
1560
+ */
1561
+ interface DocumentRequestFieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
1562
+ /** Zero-based index; displayed as `index + 1` in the badge and aria-labels. */
1563
+ index: number;
1564
+ /** Slot for the document-type control (select, combobox, disabled input, etc.). */
1565
+ typeControl: React.ReactNode;
1566
+ /** Controlled value for the Label field. */
1567
+ label: string;
1568
+ /** Called with the updated string whenever the Label input changes. */
1569
+ onLabelChange: (value: string) => void;
1570
+ /** Controlled value for the Note field. */
1571
+ note: string;
1572
+ /** Called with the updated string whenever the Note input changes. */
1573
+ onNoteChange: (value: string) => void;
1574
+ /** Callback to remove this card from the list. Only rendered when `canRemove` is also true. */
1575
+ onRemove?: () => void;
1576
+ /** Whether removal is permitted (e.g. false when this is the last card). */
1577
+ canRemove?: boolean;
1578
+ }
1579
+ /**
1580
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1581
+ * Owner: PRO documents, which decides to adopt, contribute or release
1582
+ * the name. Never removed before 3.0.
1583
+ */
1584
+ declare const DocumentRequestField: React$1.ForwardRefExoticComponent<DocumentRequestFieldProps & React$1.RefAttributes<HTMLDivElement>>;
1585
+
1586
+ /**
1587
+ * MissingDocumentsPanel — an AI insight card that surfaces documents still
1588
+ * expected from a client within an engagement.
1589
+ *
1590
+ * Items carry one of three states that map to a `<StatusPill>` semantic:
1591
+ * missing → "Requested" (warning)
1592
+ * pending → "Pending" (secondary)
1593
+ * received → "Received" (success)
1594
+ *
1595
+ * When no items remain, the panel renders a compact "All documents received"
1596
+ * success line instead of an empty list.
1597
+ *
1598
+ * Pass `onRequest` to show a "Request missing" footer button. The panel is
1599
+ * fully controlled — it renders whatever `items` you supply.
1600
+ */
1601
+ type DocumentItemState = "missing" | "pending" | "received";
1602
+ interface MissingDocumentItem {
1603
+ /** Document label shown in the row. */
1604
+ label: string;
1605
+ /** Optional due / expected date string (e.g. "Due Jun 20"). */
1606
+ dueDate?: string;
1607
+ /** Current fulfilment state for this document. */
1608
+ state: DocumentItemState;
1609
+ }
1610
+ interface MissingDocumentsPanelProps extends React.HTMLAttributes<HTMLDivElement> {
1611
+ /** List of expected documents and their current states. */
1612
+ items: MissingDocumentItem[];
1613
+ /** Subtitle below the panel title. */
1614
+ subtitle?: string;
1615
+ /** When provided a "Request missing" button is rendered in the footer. */
1616
+ onRequest?: () => void;
1617
+ }
1618
+ /**
1619
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1620
+ * Owner: PRO documents, which decides to adopt, contribute or release
1621
+ * the name. Never removed before 3.0.
1622
+ */
1623
+ declare const MissingDocumentsPanel: React$1.ForwardRefExoticComponent<MissingDocumentsPanelProps & React$1.RefAttributes<HTMLDivElement>>;
1624
+
1625
+ /**
1626
+ * NewMenu — the TopBar "+ New" create dropdown. A primary button opens a
1627
+ * menu of create actions, optionally split into labelled groups (e.g.
1628
+ * "Work" vs "People"). Thin composition over the DropdownMenu primitive;
1629
+ * the surface, focus, and portal behavior all come from there.
1630
+ */
1631
+ interface NewMenuAction {
1632
+ id: string;
1633
+ label: React.ReactNode;
1634
+ /** Supporting line under the label. */
1635
+ description?: React.ReactNode;
1636
+ icon?: React.ReactNode;
1637
+ /** Keyboard hint, right-aligned (display only). */
1638
+ shortcut?: string;
1639
+ onSelect?: () => void;
1640
+ }
1641
+ interface NewMenuGroup {
1642
+ label?: React.ReactNode;
1643
+ actions: NewMenuAction[];
1644
+ }
1645
+ interface NewMenuProps {
1646
+ /** Flat action list. Use `groups` instead for labelled sections. */
1647
+ actions?: NewMenuAction[];
1648
+ groups?: NewMenuGroup[];
1649
+ /** Trigger label. Default "New". */
1650
+ triggerLabel?: React.ReactNode;
1651
+ /** Override the trigger entirely (still opens the menu). */
1652
+ trigger?: React.ReactNode;
1653
+ align?: "start" | "center" | "end";
1654
+ }
1655
+ /**
1656
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
1657
+ * Owner: PRO, which decides to adopt, contribute or release
1658
+ * the name. Never removed before 3.0.
1659
+ */
1660
+ declare const NewMenu: React$1.ForwardRefExoticComponent<NewMenuProps & React$1.RefAttributes<HTMLButtonElement>>;
1661
+
1662
+ interface DataTableProps extends React.HTMLAttributes<HTMLDivElement> {
1663
+ /** When true, renders the table card with a flat top edge so it
1664
+ * visually attaches to a `<DataTableToolbar>` above it. */
1665
+ withToolbar?: boolean;
1666
+ }
1667
+ /**
1668
+ * DataTable — outer wrapper. Children are typically:
1669
+ * <DataTableToolbar /> + <table> + <DataTablePagination />.
1670
+ *
1671
+ * The `<table>` is hand-written by the consumer; this wrapper renders
1672
+ * the surface card chrome on its descendant `<table>` element via a
1673
+ * Tailwind arbitrary-variant selector. When `withToolbar` is set, the
1674
+ * top corners flatten so the table visually joins the toolbar above.
1675
+ *
1676
+ * Children render in document order — toolbar (if any) then `<table>`
1677
+ * then pagination — with the table card and the pagination not sharing
1678
+ * a background.
1679
+ */
1680
+ declare const DataTable: React$1.ForwardRefExoticComponent<DataTableProps & React$1.RefAttributes<HTMLDivElement>>;
1681
+ type DataTableToolbarProps = React.HTMLAttributes<HTMLDivElement>;
1682
+ /**
1683
+ * DataTableToolbar — header strip at the top of the table card. The outer
1684
+ * frame is owned by `<DataTable>`, so this is just a row with a bottom
1685
+ * divider separating it from the table below.
1686
+ */
1687
+ declare const DataTableToolbar: React$1.ForwardRefExoticComponent<DataTableToolbarProps & React$1.RefAttributes<HTMLDivElement>>;
1688
+ interface DataTableSearchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
1689
+ /** Override the default placeholder. */
1690
+ placeholder?: string;
1691
+ }
1692
+ /**
1693
+ * DataTableSearch — small search input slot inside the toolbar. Wraps
1694
+ * the `Input` primitive at `inputSize="sm"` with a leading search icon.
1695
+ */
1696
+ declare const DataTableSearch: React$1.ForwardRefExoticComponent<DataTableSearchProps & React$1.RefAttributes<HTMLInputElement>>;
1697
+ type DataTableSpacerProps = React.HTMLAttributes<HTMLSpanElement>;
1698
+ /** DataTableSpacer — `flex-1` spacer for arranging toolbar items. */
1699
+ declare const DataTableSpacer: React$1.ForwardRefExoticComponent<DataTableSpacerProps & React$1.RefAttributes<HTMLSpanElement>>;
1700
+ interface DataTableResultsCountProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
1701
+ current: number;
1702
+ total: number;
1703
+ }
1704
+ /**
1705
+ * DataTableResultsCount — small "12 of 247" indicator. Mono + tabular.
1706
+ */
1707
+ declare const DataTableResultsCount: React$1.ForwardRefExoticComponent<DataTableResultsCountProps & React$1.RefAttributes<HTMLSpanElement>>;
1708
+ /** DataTableHead — `<thead>`; alias of `TableHeader`. */
1709
+ type DataTableHeadProps = TableHeaderProps;
1710
+ declare const DataTableHead: React$1.ForwardRefExoticComponent<TableHeaderProps & React$1.RefAttributes<HTMLTableSectionElement>>;
1711
+ /** DataTableBody — `<tbody>`; alias of `TableBody`. Last row drops its bottom border. */
1712
+ type DataTableBodyProps = TableBodyProps;
1713
+ declare const DataTableBody: React$1.ForwardRefExoticComponent<TableBodyProps & React$1.RefAttributes<HTMLTableSectionElement>>;
1714
+ /**
1715
+ * DataTableRow — `<tr>`; alias of `TableRow`. `selected` renders
1716
+ * `data-state="selected"` and the brand tint (P-DATA-STATE); `interactive`
1717
+ * (W6-01) makes the row a click target.
1718
+ */
1719
+ type DataTableRowProps = TableRowProps;
1720
+ declare const DataTableRow: React$1.ForwardRefExoticComponent<TableRowProps & React$1.RefAttributes<HTMLTableRowElement>>;
1721
+ type SortDirection = TableSortDirection;
1722
+ interface DataTableHeaderProps extends Omit<TableHeadProps, "sort" | "onSortChange"> {
1723
+ /** When true, the cell becomes a clickable button that toggles sort
1724
+ * state and renders a chevron indicator. */
1725
+ sortable?: boolean;
1726
+ /** Initial sort direction when the header mounts in a sorted state. */
1727
+ defaultSort?: SortDirection;
1728
+ /** Optional controlled sort state. When provided, `onSortChange` should
1729
+ * also be wired up — the header becomes fully controlled. */
1730
+ sort?: SortDirection | null;
1731
+ /** Fires whenever the user clicks a sortable header. */
1732
+ onSortChange?: (sort: SortDirection | null) => void;
1733
+ }
1734
+ /**
1735
+ * DataTableHeader — `<th scope="col">`; alias of `TableHead` that keeps the
1736
+ * DataTable sort API: `sortable` gates sorting, the sort state is uncontrolled
1737
+ * (`defaultSort`) or controlled (`sort` + `onSortChange`). Sort cycle when
1738
+ * uncontrolled: unsorted → asc → desc → unsorted (3-state). The sort button
1739
+ * is the header's direct child `<button>` (C-DOM-13), styled like
1740
+ * `TableHead`'s.
1741
+ */
1742
+ declare const DataTableHeader: React$1.ForwardRefExoticComponent<DataTableHeaderProps & React$1.RefAttributes<HTMLTableCellElement>>;
1743
+ /** DataTableCell — `<td>`; alias of `TableCell` (13px / fg-2, W6-01 cell props). */
1744
+ type DataTableCellProps = TableCellProps;
1745
+ declare const DataTableCell: React$1.ForwardRefExoticComponent<TableCellProps & React$1.RefAttributes<HTMLTableCellElement>>;
1746
+ /**
1747
+ * DataTableCellName — primary identifier of the row. Display font,
1748
+ * fg color, medium weight.
1749
+ */
1750
+ declare const DataTableCellName: React$1.ForwardRefExoticComponent<TableCellProps & React$1.RefAttributes<HTMLTableCellElement>>;
1751
+ /**
1752
+ * DataTableCellMono — currency / IDs / numerics. Body font (Plus Jakarta
1753
+ * Sans) with tabular numerals so columns of figures stay aligned.
1754
+ */
1755
+ declare const DataTableCellMono: React$1.ForwardRefExoticComponent<TableCellProps & React$1.RefAttributes<HTMLTableCellElement>>;
1756
+ /**
1757
+ * DataTableCellId — muted ID (EIN, UUID, "5h ago") in the body font
1758
+ * (Plus Jakarta Sans) with tabular numerals.
1759
+ */
1760
+ declare const DataTableCellId: React$1.ForwardRefExoticComponent<TableCellProps & React$1.RefAttributes<HTMLTableCellElement>>;
1761
+ interface DataTableCellDueProps extends Omit<DataTableCellProps, "children"> {
1762
+ /** Date this row is due. */
1763
+ value: Date;
1764
+ /** Optional override for the displayed label (defaults to the
1765
+ * formatted date). */
1766
+ children?: ReactNode;
1767
+ }
1768
+ /**
1769
+ * DataTableCellDue — accepts a Date and auto-colors:
1770
+ * diff < 0 → text-danger-fg (overdue)
1771
+ * diff < 14d → text-warning-fg (due-near)
1772
+ * otherwise → text-fg-3 (default)
1773
+ *
1774
+ * The 14-day threshold and day-rounding (`Math.floor`) match the
1775
+ * `.cell-due-near` / `.cell-due-overdue` CSS classes in the mockup.
1776
+ */
1777
+ declare const DataTableCellDue: React$1.ForwardRefExoticComponent<DataTableCellDueProps & React$1.RefAttributes<HTMLTableCellElement>>;
1778
+ interface DataTableCheckboxProps extends Omit<DataTableCellProps, "onChange" | "defaultChecked" | "children"> {
1779
+ /** Forwarded to the inner `Checkbox` primitive. */
1780
+ checked?: boolean | "indeterminate";
1781
+ defaultChecked?: boolean | "indeterminate";
1782
+ onCheckedChange?: (checked: boolean | "indeterminate") => void;
1783
+ /** Accessible label for the checkbox (e.g. "Select row Acme Corp."). */
1784
+ ariaLabel?: string;
1785
+ disabled?: boolean;
1786
+ /** Render the cell as `<th>` (for the select-all header) instead of `<td>`. */
1787
+ asHeader?: boolean;
1788
+ }
1789
+ /**
1790
+ * DataTableCheckbox — `<td>` (or `<th>` with `asHeader`) containing the
1791
+ * row-selection checkbox: `TableCell` / `TableHead` tightened to a 32px
1792
+ * column with no right padding to match `.row-checkbox` in the spec.
1793
+ */
1794
+ declare const DataTableCheckbox: React$1.ForwardRefExoticComponent<DataTableCheckboxProps & React$1.RefAttributes<HTMLTableCellElement>>;
1795
+
1796
+ /**
1797
+ * DataTableView — config-driven table on top of the composition
1798
+ * `DataTable*` primitives. Every list/table screen is just a config:
1799
+ * `columns` + `data` (+ optional `filters` / `searchKeys` / sort). Since
1800
+ * W6-07 the search / filter / sort / pagination *state* lives in the
1801
+ * headless `useDataTable` controller, so each of sort, page and search is
1802
+ * **controllable** (`sorting` / `onSortingChange`, `page` / `onPageChange`,
1803
+ * `search` / `onSearchChange`) while the uncontrolled defaults and the DOM
1804
+ * stay exactly what they were: `<th>` text is `column.header`, the sort
1805
+ * cycle is unsorted → asc → desc → unsorted (C-DOM-14). The table chrome,
1806
+ * sortable headers and pagination all come from the existing `DataTable`
1807
+ * family (no fork, no second table chrome).
1808
+ *
1809
+ * It complements — does not replace — the composition API: reach for the
1810
+ * raw `DataTable*` parts when a screen needs bespoke cells or layout; reach
1811
+ * for `DataTableView` when the table is "columns + rows + the usual
1812
+ * toolbar." Render helpers (`EmptyValue`, `TagsCell`) cover the generic
1813
+ * cell shapes; the product-flavoured ones (`StagePill`, `Assignee`,
1814
+ * `MoneyCell`) are deprecated and flagged for hand-over to TAX (W6-14 →
1815
+ * W8-13).
1816
+ */
1817
+ type TableRowData = Record<string, unknown>;
1818
+ interface DataTableViewColumn<Row extends TableRowData> {
1819
+ key: string;
1820
+ header: string;
1821
+ /** Column width. Fixed px (`"120px"`) sets a hard width; a grid-style
1822
+ * `"minmax(190px,1.5fr)"` is read as a `min-width` and the column flexes. */
1823
+ width?: string;
1824
+ sortable?: boolean;
1825
+ align?: "right";
1826
+ /** Custom sort accessor (e.g. a numeric `lastDays` behind a "5h ago" label). */
1827
+ sortValue?: (row: Row) => string | number | null | undefined;
1828
+ /** Custom cell renderer; defaults to the raw field value. */
1829
+ render?: (row: Row) => ReactNode;
1830
+ }
1831
+ interface DataTableViewFilter<Row extends TableRowData> {
1832
+ key: string;
1833
+ label?: string;
1834
+ allLabel?: string;
1835
+ options: (string | {
1836
+ value: string;
1837
+ label: string;
1838
+ })[];
1839
+ match: (row: Row, value: string) => boolean;
1840
+ }
1841
+ /**
1842
+ * Row selection. Controlled: the caller owns the id set, so a selection can
1843
+ * outlive a filter change (or be cleared on one) — that policy belongs to the
1844
+ * screen, not the table.
1845
+ */
1846
+ interface DataTableViewSelection<Row extends TableRowData> {
1847
+ /** Ids of selected rows, keyed by `rowKey`. May include rows not currently visible. */
1848
+ selectedIds: ReadonlySet<string>;
1849
+ onSelectionChange: (selectedIds: Set<string>) => void;
1850
+ /**
1851
+ * Rows the caller will not accept — e.g. an already-sent record. They render a
1852
+ * disabled checkbox and are excluded from select-all, so "all" never selects
1853
+ * something the action would reject.
1854
+ */
1855
+ isRowSelectable?: (row: Row) => boolean;
1856
+ /**
1857
+ * What the header checkbox covers. **Required decision, not a default to
1858
+ * ignore:** with 132 filtered rows across 9 pages, "select all" meaning *this
1859
+ * page* and meaning *all 132* are different features, and a table that guesses
1860
+ * eventually acts on 132 records when the user saw 15.
1861
+ * `"page"` (default) — the rows currently on screen.
1862
+ * `"filtered"` — every row matching the active search and filters.
1863
+ */
1864
+ selectAllScope?: "page" | "filtered";
1865
+ /** Accessible label for a row's checkbox, e.g. ``(row) => `Select ${row.name}` ``. */
1866
+ rowLabel?: (row: Row) => string;
1867
+ }
1868
+ /**
1869
+ * The sort of a `DataTableView`: one column key and a direction, or `null`
1870
+ * for unsorted. The shape `initialSort` has always used.
1871
+ *
1872
+ * @experimental
1873
+ */
1874
+ type DataTableViewSort = {
1875
+ key: string;
1876
+ dir: SortDirection;
1877
+ } | null;
1878
+ interface DataTableViewProps<Row extends TableRowData> {
1879
+ columns: DataTableViewColumn<Row>[];
1880
+ data: Row[];
1881
+ filters?: DataTableViewFilter<Row>[];
1882
+ searchKeys?: string[];
1883
+ searchPlaceholder?: string;
1884
+ /** The sort the table starts with when `sorting` is not controlled. */
1885
+ initialSort?: DataTableViewSort;
1886
+ /**
1887
+ * Controlled sort (W6-07). Pass it with `onSortingChange` to own the sort —
1888
+ * e.g. to mirror it into the URL — instead of listening for header clicks.
1889
+ * Omit it for the uncontrolled default seeded by `initialSort`.
1890
+ *
1891
+ * @experimental
1892
+ */
1893
+ sorting?: DataTableViewSort;
1894
+ /** Called with the next sort when a header is pressed; the cycle is asc → desc → unsorted. @experimental */
1895
+ onSortingChange?: (sorting: DataTableViewSort) => void;
1896
+ /** Controlled 1-based page (W6-07). @experimental */
1897
+ page?: number;
1898
+ /** Called with the next page, including the return to page 1 on a search or filter change. @experimental */
1899
+ onPageChange?: (page: number) => void;
1900
+ /** Controlled search text (W6-07). @experimental */
1901
+ search?: string;
1902
+ /** Called with the search text on every keystroke. @experimental */
1903
+ onSearchChange?: (search: string) => void;
1904
+ onRowClick?: (row: Row) => void;
1905
+ rowKey?: string;
1906
+ pageSize?: number;
1907
+ /** Plural noun for the footer / empty state, e.g. "clients". */
1908
+ itemLabel?: string;
1909
+ /** Opt in to row selection. Omit it and the table renders exactly as before. */
1910
+ selection?: DataTableViewSelection<Row>;
1911
+ className?: string;
1912
+ }
1913
+ declare function DataTableView<Row extends TableRowData>({ columns, data, filters, searchKeys, searchPlaceholder, initialSort, sorting: sortingProp, onSortingChange, page: pageProp, onPageChange, search: searchProp, onSearchChange, onRowClick, rowKey, pageSize, itemLabel, selection, className, }: DataTableViewProps<Row>): react_jsx_runtime.JSX.Element;
1914
+ /**
1915
+ * EmptyValue — the em-dash placeholder for a cell with no value. Generic:
1916
+ * no copy, no product tone.
1917
+ *
1918
+ * @experimental
1919
+ */
1920
+ declare function EmptyValue(): react_jsx_runtime.JSX.Element;
1921
+ /**
1922
+ * Em-dash placeholder for empty cells.
1923
+ *
1924
+ * @deprecated Renamed `EmptyValue` (W6-14); same DOM. Removed in 3.0.
1925
+ */
1926
+ declare function Dash(): react_jsx_runtime.JSX.Element;
1927
+ /** TagsCell — first tag + "+N" overflow. */
1928
+ declare function TagsCell({ items }: {
1929
+ items?: string[];
1930
+ }): react_jsx_runtime.JSX.Element;
1931
+ /**
1932
+ * Stage tones of {@link StagePill}. "blue" and "violet" are the Tax and Pro
1933
+ * brand tones: product vocabulary, not a system palette.
1934
+ *
1935
+ * @deprecated Product vocabulary (W6-14). Hands over to TAX in W8-13; use
1936
+ * `StatusBadge` with `defineStatusMap` for a system-toned status.
1937
+ * @product
1938
+ */
1939
+ type TableTone = "slate" | "blue" | "violet" | "amber" | "ok" | "rose";
1940
+ /**
1941
+ * StagePill — colored stage/status pill for `column.render`.
1942
+ *
1943
+ * @deprecated Product vocabulary (W6-14). Hands over to TAX in W8-13; use
1944
+ * `StatusBadge` for a status word in the system palette.
1945
+ * @product
1946
+ */
1947
+ declare function StagePill({ tone, dot, children, }: {
1948
+ tone?: TableTone;
1949
+ dot?: boolean;
1950
+ children: ReactNode;
1951
+ }): react_jsx_runtime.JSX.Element;
1952
+ /**
1953
+ * Assignee — grey avatar + name, or "Unassigned".
1954
+ *
1955
+ * @deprecated Product copy ("Unassigned") and layout (W6-14). Hands over to
1956
+ * TAX in W8-13; render `Avatar` + name in `column.render`.
1957
+ * @product
1958
+ */
1959
+ declare function Assignee({ name }: {
1960
+ name?: string | null;
1961
+ }): react_jsx_runtime.JSX.Element;
1962
+ /**
1963
+ * MoneyCell — `$1,234` or an em-dash when falsy/zero.
1964
+ *
1965
+ * @deprecated Hard-coded `$` and host-locale formatting (W6-14). Hands over
1966
+ * to TAX in W8-13; format with `Intl.NumberFormat` in `column.render` and
1967
+ * fall back to `EmptyValue`.
1968
+ * @product
1969
+ */
1970
+ declare function MoneyCell({ value }: {
1971
+ value?: number | null;
1972
+ }): react_jsx_runtime.JSX.Element;
1973
+
1974
+ /**
1975
+ * DocumentRequestCard + DocumentRequestDetail — the firm "Requests" surface.
1976
+ *
1977
+ * Both are presentational: the app owns data fetching, tab/preview state, and
1978
+ * every action handler, and passes plain data + callbacks. They wrap the
1979
+ * `DocumentDetail*` kit, the icon set, the tab primitives, and the assignee
1980
+ * dropdown so a consuming app imports two components instead of ~40 parts.
1981
+ */
1982
+ type DocumentRequestTone = "warning" | "success" | "danger" | "muted";
1983
+ interface DocumentRequestItemSummary {
1984
+ /** Stable id for the row key. */
1985
+ id: string;
1986
+ /** Requested-document label, e.g. "AR aging (12/31/2025)". */
1987
+ label: string;
1988
+ /** Short type chip, e.g. "Schedule". */
1989
+ docType?: string;
1990
+ /** Status text, e.g. "Received". */
1991
+ statusLabel: string;
1992
+ /** Status colour. */
1993
+ statusTone: DocumentRequestTone;
1994
+ }
1995
+ interface DocumentRequestCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onClick" | "title"> {
1996
+ /** Request headline. */
1997
+ title: string;
1998
+ /** Free-form category chip. */
1999
+ category?: string;
2000
+ /** Renders the urgent triangle when true. */
2001
+ highPriority?: boolean;
2002
+ /** Relative due chip + tone, e.g. `{ text: "Due in 6d", tone: "warning" }`. */
2003
+ due?: {
2004
+ text: string;
2005
+ tone: DocumentRequestTone;
2006
+ };
2007
+ /** Optional request description rendered as a quote. */
2008
+ comment?: string;
2009
+ /** Fulfilled item count (numerator of the progress pill). */
2010
+ fulfilledCount: number;
2011
+ /** Total item count (denominator of the progress pill). */
2012
+ totalCount: number;
2013
+ /** Requested items rendered as rows. */
2014
+ items: DocumentRequestItemSummary[];
2015
+ /** Assignee display names for the footer avatar stack. */
2016
+ assignees?: string[];
2017
+ /** Open the request detail. */
2018
+ onOpen: () => void;
2019
+ }
2020
+ declare const DocumentRequestCard: React$1.ForwardRefExoticComponent<DocumentRequestCardProps & React$1.RefAttributes<HTMLDivElement>>;
2021
+ type DocumentRequestDetailTab = "documents" | "comments" | "activity";
2022
+ type DocumentRequestActivityKind = "assigned" | "unassigned" | "added" | "uploaded" | "priority" | "created" | "reminded" | "updated" | "commented" | "cancelled" | "received" | "approved" | "needs_revision" | "locked" | "unlocked" | "status";
2023
+ interface DocumentRequestDetailDoc {
2024
+ /** Stable id for the row key. */
2025
+ id: string;
2026
+ /** File name shown as the row's primary line. */
2027
+ fileName: string;
2028
+ /** Secondary meta line (size · date · uploader). */
2029
+ meta?: React.ReactNode;
2030
+ /** Highlight the row (e.g. its preview is open). */
2031
+ active?: boolean;
2032
+ /** Firm review verdict — `true` renders the row in its approved state
2033
+ * (green icon + "Approved" tag) and hides the approve action. */
2034
+ approved?: boolean;
2035
+ /** Firm review verdict — `true` renders the row in its rejected state
2036
+ * (red icon + "Rejected" tag). Ignored when `approved` is set. */
2037
+ rejected?: boolean;
2038
+ /** Approve this document. Renders a tick action before Preview while the
2039
+ * doc is not yet approved; omit to hide the affordance. */
2040
+ onApprove?: () => void;
2041
+ onPreview?: () => void;
2042
+ onDownload?: () => void;
2043
+ onDelete?: () => void;
2044
+ }
2045
+ interface DocumentRequestRequestedItem {
2046
+ /** Stable id for the row key. */
2047
+ id: string;
2048
+ /** Requested-document label, e.g. "AR aging (12/31/2025)". */
2049
+ label: string;
2050
+ /** Short type chip, e.g. "Schedule". */
2051
+ docType?: string;
2052
+ /** Status text, e.g. "Received". */
2053
+ statusLabel: string;
2054
+ /** Status colour (drives the dot + label). */
2055
+ statusTone: DocumentRequestTone;
2056
+ /** Client upload(s) fulfilling this item; empty means still awaiting. */
2057
+ documents: DocumentRequestDetailDoc[];
2058
+ }
2059
+ interface DocumentRequestDetailComment {
2060
+ /** Stable id for the row key. */
2061
+ id: string;
2062
+ /** Author display name. */
2063
+ author: string;
2064
+ /** True for a firm author (vs a client contact) — drives the badge. */
2065
+ isFirm: boolean;
2066
+ /** Render a "(You)" suffix for the current user. */
2067
+ you?: boolean;
2068
+ /** Relative time. */
2069
+ time: string;
2070
+ /** Comment body. */
2071
+ body: string;
2072
+ }
2073
+ interface DocumentRequestDetailActivityEvent {
2074
+ /** Stable id for the row key. */
2075
+ id: string;
2076
+ /** Event kind — selects the leading icon. */
2077
+ kind: DocumentRequestActivityKind;
2078
+ /** Rendered event text (may include bolded names). */
2079
+ text: React.ReactNode;
2080
+ /** Relative time. */
2081
+ time: string;
2082
+ }
2083
+ interface DocumentRequestAssigneeOption {
2084
+ /** Firm-user id. */
2085
+ id: string;
2086
+ /** Display name. */
2087
+ name: string;
2088
+ /** Whether currently assigned. */
2089
+ selected: boolean;
2090
+ }
2091
+ interface DocumentRequestReviewStatusOption {
2092
+ /** Stored value (e.g. "provided"). */
2093
+ value: string;
2094
+ /** Human label (e.g. "Provided"). */
2095
+ label: string;
2096
+ /** Tailwind background class for the leading status dot (e.g. "bg-info-fg"). */
2097
+ color?: string;
2098
+ }
2099
+ interface DocumentRequestDetailProps {
2100
+ /** Request headline. */
2101
+ title: string;
2102
+ /** Category chip (left of the header bar). */
2103
+ category?: string;
2104
+ /** Renders a "High priority" chip. */
2105
+ highPriority?: boolean;
2106
+ /** Status pill text, right-aligned. */
2107
+ statusLabel?: string;
2108
+ /** Status pill colour. */
2109
+ statusVariant?: BadgeProps["variant"];
2110
+ /** Requester block. */
2111
+ requester: {
2112
+ org: string;
2113
+ avatar?: string;
2114
+ requestedBy: string;
2115
+ time: string;
2116
+ };
2117
+ /** Due chip text + absolute date. */
2118
+ due?: {
2119
+ text: string;
2120
+ dateLabel?: string;
2121
+ };
2122
+ /** Assignee options for the picker; `selected` marks the current set. */
2123
+ assignees: DocumentRequestAssigneeOption[];
2124
+ /** Toggle one assignee (omit to render the avatar stack read-only). */
2125
+ onToggleAssignee?: (id: string) => void;
2126
+ /** Show the Edit / Lock / Status / Delete action row (firm only). */
2127
+ canEdit?: boolean;
2128
+ onEdit?: () => void;
2129
+ onDelete?: () => void;
2130
+ onClose?: () => void;
2131
+ /** Whether the request is frozen (drives the Lock/Unlock button label + icon). */
2132
+ isLocked?: boolean;
2133
+ /** Toggle the lock (omit to hide the Lock button). */
2134
+ onToggleLock?: () => void;
2135
+ /** The firm's current review verdict (radio-selected in the Status menu). */
2136
+ reviewStatus?: string | null;
2137
+ /** Selectable review-status options for the Status menu. */
2138
+ reviewStatusOptions?: DocumentRequestReviewStatusOption[];
2139
+ /** Set the review verdict, or `null` to clear it (omit to hide the Status button). */
2140
+ onSetReviewStatus?: (value: string | null) => void;
2141
+ /** Controlled active tab. */
2142
+ tab?: DocumentRequestDetailTab;
2143
+ /** Uncontrolled initial tab (defaults to "documents"). */
2144
+ defaultTab?: DocumentRequestDetailTab;
2145
+ onTabChange?: (tab: DocumentRequestDetailTab) => void;
2146
+ /** Documents tab — flat client-uploaded vault docs. Used only as a fallback
2147
+ * when `requestedItems` is omitted. */
2148
+ clientUploads?: DocumentRequestDetailDoc[];
2149
+ /** Documents tab — firm reference documents. */
2150
+ firmDocuments: DocumentRequestDetailDoc[];
2151
+ /** Documents tab — requested items with the client upload(s) fulfilling each.
2152
+ * When provided, the tab renders a per-item grouped view (each requested
2153
+ * document, its status, and the uploads against it) instead of the flat
2154
+ * client-uploads list. */
2155
+ requestedItems?: DocumentRequestRequestedItem[];
2156
+ /** Client uploads not tied to any current item — rendered as a trailing
2157
+ * "Other uploads" group in the grouped view. */
2158
+ otherUploads?: DocumentRequestDetailDoc[];
2159
+ /** Upload affordance for the firm-documents section (omit to hide). */
2160
+ onUploadFirmDocument?: () => void;
2161
+ /** Comments tab thread. */
2162
+ comments: DocumentRequestDetailComment[];
2163
+ /** Controlled composer value. */
2164
+ commentDraft: string;
2165
+ onCommentDraftChange: (value: string) => void;
2166
+ onSubmitComment: () => void;
2167
+ /** Disable the composer (e.g. lacking permission). */
2168
+ commentDisabled?: boolean;
2169
+ /** In-flight comment submit. */
2170
+ commentPending?: boolean;
2171
+ /** Activity tab events, newest-first as desired by the caller. */
2172
+ activity: DocumentRequestDetailActivityEvent[];
2173
+ className?: string;
2174
+ }
2175
+ declare const DocumentRequestDetail: React$1.ForwardRefExoticComponent<DocumentRequestDetailProps & React$1.RefAttributes<HTMLElement>>;
2176
+
2177
+ /**
2178
+ * DocumentSourceFilter — segmented single-select for a files toolbar: scope the
2179
+ * list to a provenance bucket. Wraps ToggleGroup (so it inherits roving-focus
2180
+ * keyboard nav + the pro-tint active state) and reuses the same `source` →
2181
+ * glyph mapping as DocumentSourceTag, plus an "all" aggregate segment.
2182
+ *
2183
+ * all → (no glyph) every document
2184
+ * requested → send glyph client fulfilled a firm request
2185
+ * direct → upload glyph client uploaded unprompted
2186
+ * internal → shield glyph firm-prepared, not client-visible
2187
+ *
2188
+ * Controlled: pass `value` + `onValueChange`. `counts` adds a trailing badge per
2189
+ * segment; `hideIcons` renders label-only segments.
2190
+ */
2191
+ type DocumentSourceFilterValue = "all" | DocumentSource;
2192
+ interface DocumentSourceFilterProps {
2193
+ /** Currently active segment. */
2194
+ value: DocumentSourceFilterValue;
2195
+ /** Fired when a segment is chosen (re-selecting the active one is ignored). */
2196
+ onValueChange: (value: DocumentSourceFilterValue) => void;
2197
+ /** Per-segment item counts, rendered as a trailing badge. */
2198
+ counts?: Partial<Record<DocumentSourceFilterValue, number>>;
2199
+ /** Render label-only segments, with no leading glyph. */
2200
+ hideIcons?: boolean;
2201
+ className?: string;
2202
+ /** Accessible name for the group. */
2203
+ "aria-label"?: string;
2204
+ }
2205
+ /**
2206
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
2207
+ * Owner: PRO documents, which decides to adopt, contribute or release
2208
+ * the name. Never removed before 3.0.
2209
+ */
2210
+ declare const DocumentSourceFilter: React$1.ForwardRefExoticComponent<DocumentSourceFilterProps & React$1.RefAttributes<HTMLDivElement>>;
2211
+
2212
+ /** Running-clock format from milliseconds → `H:MM:SS`. */
2213
+ declare function formatClock(ms: number): string;
2214
+ /** Compact duration from seconds → `Xh Ym` (e.g. `2h 10m`, `45m`, `3h`). */
2215
+ declare function formatDuration(totalSeconds: number): string;
2216
+ /** Parse human input (`3h 20m`, `1:30`, `45m`, bare `90` → minutes) → seconds, or `null`. */
2217
+ declare function parseDuration(input: string): number | null;
2218
+ /** Currency format used by the billing rows; falls back to `$0.00` for bad ISO codes. */
2219
+ declare function formatCurrency(amount: number, currency?: string): string;
2220
+ type TimeLoggerPhase = "idle" | "running" | "paused" | "stopped";
2221
+ interface UseStopwatchReturn {
2222
+ phase: TimeLoggerPhase;
2223
+ elapsedMs: number;
2224
+ isRunning: boolean;
2225
+ /** Begin running, optionally seeded with an offset (e.g. a parsed manual entry). */
2226
+ start: (fromMs?: number) => void;
2227
+ pause: () => void;
2228
+ resume: () => void;
2229
+ /** Freeze and mark complete; elapsed is preserved for saving. */
2230
+ stop: () => void;
2231
+ /** Return to idle at zero. */
2232
+ reset: () => void;
2233
+ }
2234
+ declare function useStopwatch(): UseStopwatchReturn;
2235
+ interface TimeLoggerProps extends React$1.HTMLAttributes<HTMLDivElement> {
2236
+ /**
2237
+ * Layout direction.
2238
+ * - `"vertical"` (default) — the stacked panel; rows separated by top
2239
+ * rules. For popovers and side panels.
2240
+ * - `"horizontal"` — a single compact bar; segments sit side by side,
2241
+ * separated by left rules. For an app top/bottom bar. Exposed as
2242
+ * `data-orientation` so segment atoms flip their divider via
2243
+ * `group-data-[orientation=horizontal]/timelogger`.
2244
+ */
2245
+ orientation?: "vertical" | "horizontal";
2246
+ }
2247
+ declare const TimeLogger: React$1.ForwardRefExoticComponent<TimeLoggerProps & React$1.RefAttributes<HTMLDivElement>>;
2248
+ interface TimeLoggerHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
2249
+ title?: React$1.ReactNode;
2250
+ icon?: React$1.ReactNode;
2251
+ /** Minutes logged today. With `goalMinutes`, renders the `Xh / Yh` figure + seam. */
2252
+ loggedMinutes?: number;
2253
+ /** Daily goal in minutes. Omit to hide the goal figure and the progress seam. */
2254
+ goalMinutes?: number;
2255
+ }
2256
+ declare const TimeLoggerHeader: React$1.ForwardRefExoticComponent<TimeLoggerHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
2257
+ interface TimeLoggerContextRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
2258
+ client: React$1.ReactNode;
2259
+ engagement?: React$1.ReactNode;
2260
+ /** Leading slot, e.g. an `<Avatar variant="branded" />`. */
2261
+ avatar?: React$1.ReactNode;
2262
+ onClientSelect?: () => void;
2263
+ /** Right-aligned slot — an assignee avatar + menu, or a `<TeamMemberSelect>`. */
2264
+ member?: React$1.ReactNode;
2265
+ }
2266
+ declare const TimeLoggerContextRow: React$1.ForwardRefExoticComponent<TimeLoggerContextRowProps & React$1.RefAttributes<HTMLDivElement>>;
2267
+ interface TimeLoggerTimerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
2268
+ phase: TimeLoggerPhase;
2269
+ elapsedMs: number;
2270
+ /** Manual-entry text, shown only while idle. Controlled. */
2271
+ value?: string;
2272
+ onValueChange?: (value: string) => void;
2273
+ placeholder?: string;
2274
+ onStart?: () => void;
2275
+ onPause?: () => void;
2276
+ onResume?: () => void;
2277
+ onStop?: () => void;
2278
+ }
2279
+ declare const TimeLoggerTimer: React$1.ForwardRefExoticComponent<TimeLoggerTimerProps & React$1.RefAttributes<HTMLDivElement>>;
2280
+ interface TimeLoggerFieldProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "onSelect"> {
2281
+ icon?: React$1.ReactNode;
2282
+ /** Small caption above the value. */
2283
+ label?: React$1.ReactNode;
2284
+ onSelect?: () => void;
2285
+ /** Trailing node; defaults to a chevron when interactive. Pass `null` to suppress. */
2286
+ trailing?: React$1.ReactNode;
2287
+ /** Render the value in the muted placeholder colour. */
2288
+ muted?: boolean;
2289
+ }
2290
+ declare const TimeLoggerField: React$1.ForwardRefExoticComponent<TimeLoggerFieldProps & React$1.RefAttributes<HTMLElement>>;
2291
+ interface TimeLoggerNotesProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange"> {
2292
+ value?: string;
2293
+ onValueChange?: (value: string) => void;
2294
+ icon?: React$1.ReactNode;
2295
+ }
2296
+ declare const TimeLoggerNotes: React$1.ForwardRefExoticComponent<TimeLoggerNotesProps & React$1.RefAttributes<HTMLInputElement>>;
2297
+ interface TimeLoggerTier {
2298
+ id: string;
2299
+ name: React$1.ReactNode;
2300
+ /** Hourly rate in the panel currency; shown in the tier menu's right column. */
2301
+ rate: number;
2302
+ }
2303
+ interface TimeLoggerBillableProps extends React$1.HTMLAttributes<HTMLDivElement> {
2304
+ billable: boolean;
2305
+ onBillableChange?: (billable: boolean) => void;
2306
+ /** Defaults to "Billable" / "Non-billable" derived from `billable`. */
2307
+ label?: React$1.ReactNode;
2308
+ /** Pricing tiers shown in the settings pop-view. Omit to hide the gear. */
2309
+ tiers?: TimeLoggerTier[];
2310
+ tierId?: string;
2311
+ onTierChange?: (id: string) => void;
2312
+ /** ISO currency for tier-rate formatting. Default `"USD"`. */
2313
+ currency?: string;
2314
+ /** Computed amount readout (rate × time). Pass a formatted node, or omit. */
2315
+ amount?: React$1.ReactNode;
2316
+ }
2317
+ declare const TimeLoggerBillable: React$1.ForwardRefExoticComponent<TimeLoggerBillableProps & React$1.RefAttributes<HTMLDivElement>>;
2318
+ type TimeLoggerActionsProps = React$1.HTMLAttributes<HTMLDivElement>;
2319
+ declare const TimeLoggerActions: React$1.ForwardRefExoticComponent<TimeLoggerActionsProps & React$1.RefAttributes<HTMLDivElement>>;
2320
+ interface TimeLoggerEntryListProps extends React$1.HTMLAttributes<HTMLDivElement> {
2321
+ /** Day group caption, e.g. "Fri, May 29". */
2322
+ dayLabel?: React$1.ReactNode;
2323
+ /** Right-aligned day subtotal, e.g. "2h 10m". */
2324
+ total?: React$1.ReactNode;
2325
+ }
2326
+ declare const TimeLoggerEntryList: React$1.ForwardRefExoticComponent<TimeLoggerEntryListProps & React$1.RefAttributes<HTMLDivElement>>;
2327
+ interface TimeLoggerEntryProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
2328
+ title: React$1.ReactNode;
2329
+ /** Secondary line — time range, billable amount, etc. */
2330
+ meta?: React$1.ReactNode;
2331
+ duration: React$1.ReactNode;
2332
+ onResume?: () => void;
2333
+ onDelete?: () => void;
2334
+ }
2335
+ declare const TimeLoggerEntry: React$1.ForwardRefExoticComponent<TimeLoggerEntryProps & React$1.RefAttributes<HTMLDivElement>>;
2336
+ type TimeLoggerFooterProps = React$1.HTMLAttributes<HTMLDivElement>;
2337
+ declare const TimeLoggerFooter: React$1.ForwardRefExoticComponent<TimeLoggerFooterProps & React$1.RefAttributes<HTMLDivElement>>;
2338
+
2339
+ /**
2340
+ * SuggestionPills — a horizontal strip of AI quick-reply pills, typically
2341
+ * floated above a message composer when the last inbound message warrants a
2342
+ * fast response.
2343
+ *
2344
+ * The pills materialise with a staggered "magic smoke" entrance (the bar
2345
+ * rises, the sparkle pulses, each pill puffs in) driven by the shipped
2346
+ * `.ds-suggestion-*` classes — motion is suppressed under
2347
+ * `prefers-reduced-motion`. Presentational and controlled: the consumer
2348
+ * supplies the suggestion strings and a pick handler.
2349
+ *
2350
+ * <SuggestionPills
2351
+ * suggestions={["Sounds good — thanks!", "Could you send the W-2?"]}
2352
+ * onPick={(text) => editor.insert(text)}
2353
+ * loading={generating}
2354
+ * />
2355
+ *
2356
+ * Returns `null` when not loading and there are no suggestions, so it can be
2357
+ * rendered unconditionally.
2358
+ *
2359
+ * @since 1.5.0
2360
+ */
2361
+ interface SuggestionPillsProps {
2362
+ /** Suggestion strings to render as pills. */
2363
+ suggestions: string[];
2364
+ /** Fired with the picked suggestion text. */
2365
+ onPick: (text: string) => void;
2366
+ /** Show skeleton pills while suggestions are being generated. */
2367
+ loading?: boolean;
2368
+ /** Strip label. Default: `"Smart replies"`. */
2369
+ label?: string;
2370
+ /** Extra classes on the bar. */
2371
+ className?: string;
2372
+ }
2373
+ /**
2374
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
2375
+ * Owner: PRO communications, which decides to adopt, contribute or release
2376
+ * the name. Never removed before 3.0.
2377
+ */
2378
+ declare function SuggestionPills({ suggestions, onPick, loading, label, className, }: SuggestionPillsProps): react_jsx_runtime.JSX.Element | null;
2379
+ declare namespace SuggestionPills {
2380
+ var displayName: string;
2381
+ }
2382
+
2383
+ /**
2384
+ * AiDraftCard — the "lit-from-within" slab that presents an AI-generated
2385
+ * message draft inside a composer.
2386
+ *
2387
+ * It owns four visual states behind one prop:
2388
+ * - `loading` / `refining` — a sparkle + shimmer skeleton over the flowing
2389
+ * neon `.ds-ai-surface`.
2390
+ * - `error` — a quiet destructive panel with an optional Retry and a
2391
+ * Dismiss.
2392
+ * - `ready` — the collapsible draft: header (sparkle, "AI Draft",
2393
+ * optional context line, collapse toggle), an optional subject line, the
2394
+ * draft `children`, and a footer `actions` slot.
2395
+ *
2396
+ * Presentational only — the consumer supplies the draft text as `children`
2397
+ * and the action buttons (Insert / Regenerate / Shorter / …) as `actions`.
2398
+ * The card re-expands automatically whenever fresh `children` arrive (keyed
2399
+ * off `resetCollapseKey`) so a refined draft is never hidden behind a stale
2400
+ * collapsed state.
2401
+ *
2402
+ * <AiDraftCard
2403
+ * state="ready"
2404
+ * contextLine="Replying to Jane"
2405
+ * subject="Re: Your 2024 return"
2406
+ * resetCollapseKey={draftText}
2407
+ * actions={<><Button size="sm">Insert</Button>…</>}
2408
+ * >
2409
+ * <p className="whitespace-pre-wrap">{draftText}</p>
2410
+ * </AiDraftCard>
2411
+ *
2412
+ * @since 1.5.0
2413
+ */
2414
+ type AiDraftState = "loading" | "refining" | "error" | "ready";
2415
+ interface AiDraftCardProps {
2416
+ /** Which visual state to render. */
2417
+ state: AiDraftState;
2418
+ /** Header title. Default: `"AI Draft"`. */
2419
+ title?: string;
2420
+ /** Optional muted context line in the header (e.g. "Replying to Jane"). */
2421
+ contextLine?: ReactNode;
2422
+ /** Optional bold subject line shown above the body (email drafts). */
2423
+ subject?: ReactNode;
2424
+ /** The draft body — typically a `<p className="whitespace-pre-wrap">`. */
2425
+ children?: ReactNode;
2426
+ /** Footer action buttons (Insert / Regenerate / Discard …). */
2427
+ actions?: ReactNode;
2428
+ /** Error message — shown when `state="error"`. */
2429
+ error?: ReactNode;
2430
+ /** Retry handler — adds a Retry button to the error panel. */
2431
+ onRetry?: () => void;
2432
+ /** Dismiss handler for the error panel. */
2433
+ onDismiss?: () => void;
2434
+ /** Re-expands the card whenever this value changes (pass the draft text so
2435
+ * a freshly generated/refined draft is always revealed). */
2436
+ resetCollapseKey?: unknown;
2437
+ className?: string;
2438
+ }
2439
+ /**
2440
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
2441
+ * Owner: PRO communications, which decides to adopt, contribute or release
2442
+ * the name. Never removed before 3.0.
2443
+ */
2444
+ declare function AiDraftCard({ state, title, contextLine, subject, children, actions, error, onRetry, onDismiss, resetCollapseKey, className, }: AiDraftCardProps): react_jsx_runtime.JSX.Element;
2445
+ declare namespace AiDraftCard {
2446
+ var displayName: string;
2447
+ }
2448
+
2449
+ /**
2450
+ * EmailMessageCard — renders an email message as an envelope-style card
2451
+ * (header strip / readable body / footer) inside a conversation thread,
2452
+ * replacing the "rich HTML stuffed into a chat bubble" anti-pattern.
2453
+ *
2454
+ * Anatomy:
2455
+ * - a meta line ("Name via Email · 3:42 PM") above the card,
2456
+ * - a tinted header strip with a mail glyph, the "EMAIL" eyebrow, the
2457
+ * subject, a "From …" / optional "Cc N" sub-line, and the time,
2458
+ * - a readable body (`children`) that auto-clamps past `clampHeight` with a
2459
+ * gradient fade and a "Show full email" toggle,
2460
+ * - an optional footer carrying `attachments`, a `status` slot, and
2461
+ * `actions` (e.g. a Reply button).
2462
+ *
2463
+ * Presentational only. The consumer sanitises and renders the email HTML as
2464
+ * `children`, supplies the avatar, and brings its own attachment chips /
2465
+ * status indicator / Reply control via slots. Direction flips the layout:
2466
+ * outbound aligns right with a brand-tinted border; inbound aligns left.
2467
+ *
2468
+ * <EmailMessageCard
2469
+ * direction="inbound"
2470
+ * senderName="Jane Cooper"
2471
+ * subject="Question about my W-2"
2472
+ * time="3:42 PM"
2473
+ * avatar={<Avatar name="Jane Cooper" size="xs" />}
2474
+ * ccCount={2}
2475
+ * attachments={<AttachmentChip … />}
2476
+ * actions={<Button size="sm" variant="outline">Reply</Button>}
2477
+ * >
2478
+ * <div dangerouslySetInnerHTML={{ __html: safeHtml }} />
2479
+ * </EmailMessageCard>
2480
+ *
2481
+ * @since 1.5.0
2482
+ */
2483
+ interface EmailMessageCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
2484
+ /** Message direction — flips alignment and border treatment. */
2485
+ direction: "inbound" | "outbound";
2486
+ /** Sender display name. */
2487
+ senderName: string;
2488
+ /** Email subject — omitted for replies without one. */
2489
+ subject?: string;
2490
+ /** Pre-formatted send time (e.g. "3:42 PM"). */
2491
+ time: string;
2492
+ /** Channel label in the meta line. Default: `"Email"`. */
2493
+ via?: string;
2494
+ /** Avatar node — rendered for inbound messages only. */
2495
+ avatar?: ReactNode;
2496
+ /** Cc recipient count — shows a "Cc N" indicator when > 0. */
2497
+ ccCount?: number;
2498
+ /** Sanitised email body (HTML node or plain text). */
2499
+ children: ReactNode;
2500
+ /** Footer attachment chips. */
2501
+ attachments?: ReactNode;
2502
+ /** Footer status slot (delivery state). */
2503
+ status?: ReactNode;
2504
+ /** Footer actions (e.g. Reply). */
2505
+ actions?: ReactNode;
2506
+ /** Body height (px) above which the clamp/expand toggle appears. Default 240. */
2507
+ clampHeight?: number;
2508
+ }
2509
+ /**
2510
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
2511
+ * Owner: PRO communications, which decides to adopt, contribute or release
2512
+ * the name. Never removed before 3.0.
2513
+ */
2514
+ declare function EmailMessageCard({ direction, senderName, subject, time, via, avatar, ccCount, children, attachments, status, actions, clampHeight, className, ...props }: EmailMessageCardProps): react_jsx_runtime.JSX.Element;
2515
+ declare namespace EmailMessageCard {
2516
+ var displayName: string;
2517
+ }
2518
+
2519
+ /**
2520
+ * SignatureEditor — the panel chrome for editing a personal email signature
2521
+ * (rich text, links, and an inline banner image). Designed to live inside a
2522
+ * Popover anchored to a "Pen" affordance in the email composer, but it's just
2523
+ * a self-contained card so it works in a Dialog or settings page too.
2524
+ *
2525
+ * Like `MessageComposer`, DS owns the CHROME and the consumer owns the
2526
+ * EDITOR: pass your rich-text editor (Tiptap, contenteditable, etc.) as
2527
+ * `children`. The panel supplies the titled header with an "Add image"
2528
+ * action, a body region (with a loading skeleton), and a Save / Insert
2529
+ * footer. All actions are slots/handlers — persistence, image upload, and
2530
+ * insertion logic stay with the consumer.
2531
+ *
2532
+ * <Popover>
2533
+ * <PopoverContent className="w-96 p-0">
2534
+ * <SignatureEditor
2535
+ * loading={loading}
2536
+ * addingImage={uploading}
2537
+ * onAddImage={pickImage}
2538
+ * saving={saving}
2539
+ * onSave={save}
2540
+ * onInsert={insert}
2541
+ * >
2542
+ * <RichTextEditor ref={editorRef} />
2543
+ * </SignatureEditor>
2544
+ * </PopoverContent>
2545
+ * </Popover>
2546
+ *
2547
+ * @since 1.5.0
2548
+ */
2549
+ interface SignatureEditorProps {
2550
+ /** Panel title. Default: `"Email signature"`. */
2551
+ title?: string;
2552
+ /** The editor — a rich-text input the consumer owns. */
2553
+ children: ReactNode;
2554
+ /** Show a loading skeleton in place of the editor (while the saved
2555
+ * signature is being fetched). */
2556
+ loading?: boolean;
2557
+ /** "Add image" handler — hides the button when omitted. */
2558
+ onAddImage?: () => void;
2559
+ /** Spinner + disabled state on the "Add image" button while uploading. */
2560
+ addingImage?: boolean;
2561
+ /** Save handler — hides the Save button when omitted. */
2562
+ onSave?: () => void;
2563
+ /** Spinner + disabled state on Save. */
2564
+ saving?: boolean;
2565
+ /** Insert handler — hides the Insert button when omitted. */
2566
+ onInsert?: () => void;
2567
+ className?: string;
2568
+ }
2569
+ /**
2570
+ * @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
2571
+ * Owner: PRO communications, which decides to adopt, contribute or release
2572
+ * the name. Never removed before 3.0.
2573
+ */
2574
+ declare function SignatureEditor({ title, children, loading, onAddImage, addingImage, onSave, saving, onInsert, className, }: SignatureEditorProps): react_jsx_runtime.JSX.Element;
2575
+ declare namespace SignatureEditor {
2576
+ var displayName: string;
2577
+ }
2578
+
2579
+ export { type ComboboxSlot as $, type AvatarSlot as A, type BadgeSize as B, type ButtonSlot as C, type DataTableSlot as D, type CardSlot as E, type FileUploadSlot as F, CategoryDivider as G, type CategoryDividerProps as H, type InputSlot as I, CategoryTag as J, type CategoryTagProps as K, type CategoryTone as L, type ChannelTabItem as M, type NumberInputSlot as N, ChannelTabs as O, type PhoneFieldSlot as P, type ChannelTabsProps as Q, type ChannelTone as R, type SearchInputSlot as S, type TextareaSlot as T, type CheckboxSlot as U, type ChipSlot as V, ClientRailGroupHeader as W, type ClientRailGroupHeaderProps as X, ClientRailItem as Y, type ClientRailItemProps as Z, type CodeSlot as _, type SelectSlot as a, type DocumentRequestFieldProps as a$, type CommandSlot as a0, type ContextMenuSlot as a1, Dash as a2, DashGrid as a3, type DashGridProps as a4, type DashWidget as a5, DataTable as a6, DataTableBody as a7, type DataTableBodyProps as a8, DataTableCell as a9, type DataTableViewProps as aA, type DataTableViewSelection as aB, type DataTableViewSort as aC, type DialogSlot as aD, DocumentChecklist as aE, type DocumentChecklistFile as aF, type DocumentChecklistItem as aG, type DocumentChecklistProps as aH, type DocumentChecklistStatus as aI, DocumentFileCard as aJ, type DocumentFileCardProps as aK, DocumentFileLine as aL, type DocumentFileLineProps as aM, DocumentFileRow as aN, type DocumentFileRowProps as aO, type DocumentItemState as aP, type DocumentRequestActivityKind as aQ, type DocumentRequestAssigneeOption as aR, DocumentRequestCard as aS, type DocumentRequestCardProps as aT, DocumentRequestDetail as aU, type DocumentRequestDetailActivityEvent as aV, type DocumentRequestDetailComment as aW, type DocumentRequestDetailDoc as aX, type DocumentRequestDetailProps as aY, type DocumentRequestDetailTab as aZ, DocumentRequestField as a_, DataTableCellDue as aa, type DataTableCellDueProps as ab, DataTableCellId as ac, DataTableCellMono as ad, DataTableCellName as ae, type DataTableCellProps as af, DataTableCheckbox as ag, type DataTableCheckboxProps as ah, DataTableHead as ai, type DataTableHeadProps as aj, DataTableHeader as ak, type DataTableHeaderProps as al, type DataTableProps as am, DataTableResultsCount as an, type DataTableResultsCountProps as ao, DataTableRow as ap, type DataTableRowProps as aq, DataTableSearch as ar, type DataTableSearchProps as as, DataTableSpacer as at, type DataTableSpacerProps as au, DataTableToolbar as av, type DataTableToolbarProps as aw, DataTableView as ax, type DataTableViewColumn as ay, type DataTableViewFilter as az, type BadgeShape as b, type SignatureEditorProps as b$, type DocumentRequestItemSummary as b0, type DocumentRequestRequestedItem as b1, type DocumentRequestReviewStatusOption as b2, type DocumentRequestTone as b3, DocumentRequestUpload as b4, type DocumentRequestUploadFile as b5, type DocumentRequestUploadProps as b6, type DocumentSource as b7, DocumentSourceFilter as b8, type DocumentSourceFilterProps as b9, type KbdSlot as bA, type LabelSlot as bB, type LinkButtonSlot as bC, type MissingDocumentItem as bD, MissingDocumentsPanel as bE, type MissingDocumentsPanelProps as bF, MoneyCell as bG, NewMenu as bH, type NewMenuAction as bI, type NewMenuGroup as bJ, type NewMenuProps as bK, type PaginationSlot as bL, type PillStatus as bM, type PopoverSlot as bN, type PressableSlot as bO, type RadioGroupSlot as bP, SERVICE_TONES as bQ, Section as bR, SectionHead as bS, SectionHeader as bT, type ServiceTone as bU, type SheetSlot as bV, type ShellSlot as bW, type SideDrawerSlot as bX, type SidebarBrandSwitcherSlot as bY, type SidebarSlot as bZ, SignatureEditor as b_, type DocumentSourceFilterValue as ba, DocumentSourceTag as bb, type DocumentSourceTagProps as bc, DocumentsWorkspaceLayout as bd, type DocumentsWorkspaceLayoutProps as be, type DropdownMenuSlot as bf, EmailMessageCard as bg, type EmailMessageCardProps as bh, EmptyValue as bi, EngagementCard as bj, type EngagementCardProps as bk, EngagementTimeline as bl, type EngagementTimelineProps as bm, EngagementTimelineStep as bn, type EngagementTimelineStepProps as bo, type FieldSlot as bp, type FieldsetSlot as bq, FileChip as br, type FileChipProps as bs, type FileKind as bt, type HeadingSlot as bu, type IconButtonSlot as bv, type InlineSlot as bw, IntentBadge as bx, type IntentBadgeProps as by, type IntentTone as bz, type TableProps as c, type TimeLoggerPhase as c$, type SortDirection as c0, type StackSlot as c1, StagePill as c2, Stat as c3, type StatusBadgeSlot as c4, StatusPill as c5, type StatusPillProps as c6, SuggestionPills as c7, type SuggestionPillsProps as c8, type SurfaceSlot as c9, type TextSlot as cA, type ThemeBrand as cB, type ThemeDensity as cC, type ThemeDirection as cD, type ThemeScheme as cE, ThemeScope as cF, type ThemeScopeProps as cG, type ThemeScopeValue as cH, TimeLogger as cI, TimeLoggerActions as cJ, type TimeLoggerActionsProps as cK, TimeLoggerBillable as cL, type TimeLoggerBillableProps as cM, TimeLoggerContextRow as cN, type TimeLoggerContextRowProps as cO, TimeLoggerEntry as cP, TimeLoggerEntryList as cQ, type TimeLoggerEntryListProps as cR, type TimeLoggerEntryProps as cS, TimeLoggerField as cT, type TimeLoggerFieldProps as cU, TimeLoggerFooter as cV, type TimeLoggerFooterProps as cW, TimeLoggerHeader as cX, type TimeLoggerHeaderProps as cY, TimeLoggerNotes as cZ, type TimeLoggerNotesProps as c_, type SwitchSlot as ca, Table as cb, TableBody as cc, type TableBodyProps as cd, TableCaption as ce, type TableCaptionProps as cf, TableCell as cg, type TableCellAlign as ch, type TableCellCommonProps as ci, type TableCellProps as cj, TableFooter as ck, type TableFooterProps as cl, TableHead as cm, type TableHeadProps as cn, TableHeader as co, type TableHeaderProps as cp, type TableHeaderStyle as cq, TableRow as cr, type TableRowData as cs, type TableRowProps as ct, type TableSlot as cu, type TableSortDirection as cv, type TableStickyEdge as cw, type TableTone as cx, TagsCell as cy, TeamMemberSelect as cz, AIReceiptPanel as d, type TimeLoggerProps as d0, type TimeLoggerTier as d1, TimeLoggerTimer as d2, type TimeLoggerTimerProps as d3, type TimelineState as d4, type ToastSlot as d5, type TooltipSlot as d6, type UseStopwatchReturn as d7, badgeVariants as d8, formatClock as d9, formatCurrency as da, formatDuration as db, parseDuration as dc, resolveBadgeAppearance as dd, serviceToneLabel as de, serviceToneStyle as df, useStopwatch as dg, type AIReceiptPanelProps as e, type AIReceiptResult as f, AiDraftCard as g, type AiDraftCardProps as h, type AiDraftState as i, type AlertDialogSlot as j, Assignee as k, AttentionItem as l, type AttentionItemProps as m, type AttentionUrgency as n, Badge as o, type BadgeAppearance as p, type BadgeAppearanceInput as q, type BadgeLegacyVariant as r, type BadgeProps as s, type BadgeSlot as t, type BadgeVariant as u, type BadgeVariantsProps as v, Blockquote as w, BottomNav as x, type BottomNavProps as y, type BottomNavTab as z };