@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.
- package/README.md +60 -16
- package/codemods/README.md +90 -16
- package/codemods/lib/entry-map.mjs +315 -0
- package/codemods/lib/registry.mjs +2 -0
- package/codemods/transforms/cm-01-entry-imports.mjs +202 -0
- package/codemods/transforms/cm-18-data-table-parts.mjs +234 -0
- package/dist/brand-theme-B6rem2II.d.ts +59 -0
- package/dist/css/components.css +1 -1
- package/dist/css/legacy-aliases.css +8 -0
- package/dist/css/tokens.css +14 -6
- package/dist/design-system-provider-BM_F1C13.d.ts +143 -0
- package/dist/icons/index.d.ts +441 -3
- package/dist/icons/index.js.map +1 -1
- package/dist/index-BAAuIQqP.d.ts +2579 -0
- package/dist/index-DxBjmBBp.d.ts +1038 -0
- package/dist/index.d.ts +1017 -3293
- package/dist/index.js +7598 -5906
- package/dist/index.js.map +1 -1
- package/dist/legacy/index.d.ts +9 -0
- package/dist/legacy/index.js +3 -0
- package/dist/legacy/index.js.map +1 -0
- package/dist/next/index.d.ts +2 -1
- package/dist/reference-BkDbrPIB.d.ts +310 -0
- package/dist/styles.css +1 -1
- package/dist/suite/index.d.ts +4 -0
- package/dist/suite/index.js +3 -0
- package/dist/suite/index.js.map +1 -0
- package/dist/{system-CyAVbHhM.d.ts → system-DfJIVBlJ.d.ts} +1 -310
- package/dist/tokens/index.d.ts +3 -61
- package/dist/tokens/index.js +3 -3
- package/dist/tokens/index.js.map +1 -1
- package/dist/{design-system-provider-C8UlFe52.d.ts → types-k_kjwipx.d.ts} +69 -142
- package/dist/vocab-DornLJbW.d.ts +76 -0
- package/docs/components.md +62 -32
- package/docs/components.registry.json +2415 -465
- package/docs/for-ai-agents.md +2 -0
- package/eslint-config/index.mjs +210 -0
- package/eslint-config/stylelint-rules.mjs +54 -0
- package/eslint-config/stylelint.mjs +73 -0
- package/package.json +21 -3
- package/public/brand/assure-audit-mark.svg +6 -0
- package/public/brand/assure-audit.svg +8 -0
- package/public/brand/assure-books-mark.svg +6 -0
- package/public/brand/assure-books.svg +8 -0
- package/public/brand/assure-pro-mark.svg +6 -0
- package/public/brand/assure-pro.svg +8 -0
- package/public/brand/assure-tax-mark.svg +6 -0
- package/public/brand/assure-tax.svg +8 -0
- package/public/brand/mycpe-teams-mark.svg +36 -0
- package/public/brand/mycpe-teams.svg +66 -0
- 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 };
|