@assure-one/design-system 1.39.0 → 1.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -28
- package/codemods/README.md +24 -7
- package/codemods/lib/registry.mjs +27 -0
- package/codemods/lib/runner.mjs +8 -3
- package/codemods/run.mjs +27 -5
- package/codemods/transforms/cm-15-dom-selectors.mjs +16 -9
- package/dist/brand-scope-BOHId6BY.d.ts +58 -0
- package/dist/{brand-theme-B6rem2II.d.ts → brand-theme-ZYM867Jz.d.ts} +1 -1
- package/dist/chunk-CPOGSNXS.js +389 -0
- package/dist/chunk-CPOGSNXS.js.map +1 -0
- package/dist/chunk-EUHGZA6Q.js +313 -0
- package/dist/chunk-EUHGZA6Q.js.map +1 -0
- package/dist/chunk-KUSY7BLL.js +441 -0
- package/dist/chunk-KUSY7BLL.js.map +1 -0
- package/dist/chunk-NBI7E3VT.js +3754 -0
- package/dist/chunk-NBI7E3VT.js.map +1 -0
- package/dist/chunk-PTI4B2OI.js +5527 -0
- package/dist/chunk-PTI4B2OI.js.map +1 -0
- package/dist/chunk-X76J4QSJ.js +164 -0
- package/dist/chunk-X76J4QSJ.js.map +1 -0
- package/dist/chunk-XV2VSEA5.js +4339 -0
- package/dist/chunk-XV2VSEA5.js.map +1 -0
- package/dist/css/components.css +1 -1
- package/dist/css/legacy-aliases.css +2 -0
- package/dist/css/tailwind.css +2 -0
- package/dist/css/tokens.css +2 -0
- package/dist/data-table-view-ep8al7P9.d.ts +1132 -0
- package/dist/{design-system-provider-BM_F1C13.d.ts → design-system-provider-CfD2g2lY.d.ts} +11 -12
- package/dist/icons/index.d.ts +189 -140
- package/dist/icons/index.js +2 -1835
- package/dist/icons/index.js.map +1 -1
- package/dist/index.d.ts +374 -389
- package/dist/index.js +8688 -24271
- package/dist/index.js.map +1 -1
- package/dist/legacy/index.d.ts +1462 -7
- package/dist/legacy/index.js +5 -1
- package/dist/legacy/index.js.map +1 -1
- package/dist/next/index.d.ts +2 -2
- package/dist/styles.css +2 -1
- package/dist/suite/index.d.ts +991 -4
- package/dist/suite/index.js +6 -1
- package/dist/suite/index.js.map +1 -1
- package/dist/testing/index.cjs +3 -2
- package/dist/testing/index.js +3 -2
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.js +3 -856
- package/dist/tokens/index.js.map +1 -1
- package/dist/{types-k_kjwipx.d.ts → types-Coqw8iaS.d.ts} +28 -1
- package/docs/components.md +56 -56
- package/docs/components.registry.json +7 -7
- package/docs/for-ai-agents.md +12 -6
- package/package.json +8 -5
- package/dist/index-BAAuIQqP.d.ts +0 -2579
- package/dist/index-DxBjmBBp.d.ts +0 -1038
package/dist/legacy/index.d.ts
CHANGED
|
@@ -1,9 +1,1464 @@
|
|
|
1
|
-
|
|
2
|
-
import 'react
|
|
3
|
-
import 'react';
|
|
4
|
-
import '
|
|
5
|
-
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React$1 from 'react';
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
import { B as BadgeProps, F as FileKind, S as ServiceTone } from '../data-table-view-ep8al7P9.js';
|
|
5
|
+
export { A as Assignee, D as Dash, M as MoneyCell, a as StagePill, T as TagsCell } from '../data-table-view-ep8al7P9.js';
|
|
6
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
7
|
+
import { VariantProps } from 'class-variance-authority';
|
|
6
8
|
import '../vocab-DornLJbW.js';
|
|
7
9
|
import '../system-DfJIVBlJ.js';
|
|
8
|
-
import '../types-
|
|
9
|
-
import '../brand-theme-
|
|
10
|
+
import '../types-Coqw8iaS.js';
|
|
11
|
+
import '../brand-theme-ZYM867Jz.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Blockquote — semantic quote with optional attribution. Uses `font-display`
|
|
15
|
+
* (Inter) at a comfortable reading scale; smart quotes are wrapped automatically.
|
|
16
|
+
*/
|
|
17
|
+
interface BlockquoteProps extends React.BlockquoteHTMLAttributes<HTMLQuoteElement> {
|
|
18
|
+
author?: string;
|
|
19
|
+
role?: string;
|
|
20
|
+
}
|
|
21
|
+
declare const Blockquote: React$1.ForwardRefExoticComponent<BlockquoteProps & React$1.RefAttributes<HTMLQuoteElement>>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* CategoryDivider — THE category separator: a tone-tinted category pill, a
|
|
25
|
+
* flex-1 hairline rule, and an optional trailing count chip. Used to group a
|
|
26
|
+
* run of feed items / cards by service line. Per the ONE-brand rule, this tag
|
|
27
|
+
* is the *only* place per-service color is allowed — everything else stays on
|
|
28
|
+
* the single brand. Pure presentational.
|
|
29
|
+
*
|
|
30
|
+
* Tones map to the suite tints:
|
|
31
|
+
* brand → --color-brand-pro · audit → --color-brand-audit ·
|
|
32
|
+
* books → --color-brand-books · tax → --color-brand-tax ·
|
|
33
|
+
* neutral → --color-fg-3
|
|
34
|
+
*/
|
|
35
|
+
declare const categoryTagVariants: (props?: ({
|
|
36
|
+
tone?: "brand" | "neutral" | "audit" | "books" | "tax" | null | undefined;
|
|
37
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
38
|
+
type CategoryTone = NonNullable<VariantProps<typeof categoryTagVariants>["tone"]>;
|
|
39
|
+
interface CategoryTagProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof categoryTagVariants> {
|
|
40
|
+
/** Tag label text. */
|
|
41
|
+
label: string;
|
|
42
|
+
/** Optional leading icon rendered inside the pill. */
|
|
43
|
+
icon?: React.ReactNode;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* CategoryTag — the standalone tone-tinted category pill, reusable in card
|
|
47
|
+
* headers and feed-item rows. Same atom CategoryDivider renders on its left.
|
|
48
|
+
*/
|
|
49
|
+
declare const CategoryTag: React$1.ForwardRefExoticComponent<CategoryTagProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
50
|
+
interface CategoryDividerProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof categoryTagVariants> {
|
|
51
|
+
/** Category label shown in the tone-tinted tag. */
|
|
52
|
+
label: string;
|
|
53
|
+
/** Optional leading icon rendered inside the tag. */
|
|
54
|
+
icon?: React.ReactNode;
|
|
55
|
+
/** Optional item count → trailing neutral count chip. */
|
|
56
|
+
count?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
60
|
+
* Owner: PORTAL client portal, which decides to adopt, contribute or release
|
|
61
|
+
* the name. Never removed before 3.0.
|
|
62
|
+
*/
|
|
63
|
+
declare const CategoryDivider: React$1.ForwardRefExoticComponent<CategoryDividerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* DocumentSourceTag — provenance atom for a document row/card: how the file
|
|
67
|
+
* arrived. Mirrors StatusPill's shape (a `source` enum maps to label + icon +
|
|
68
|
+
* tone), so call sites read as `<DocumentSourceTag source="requested" />`
|
|
69
|
+
* instead of repeating the label/icon/colour triple.
|
|
70
|
+
*
|
|
71
|
+
* requested → brand tint · send glyph (client fulfilled a firm request)
|
|
72
|
+
* direct → outline · upload glyph (client uploaded unprompted)
|
|
73
|
+
* internal → neutral · shield glyph (firm-prepared, not client-visible)
|
|
74
|
+
*
|
|
75
|
+
* Pass `children` to override the label while keeping the mapped tone/icon,
|
|
76
|
+
* `icon` to swap the glyph, or `hideIcon` for a label-only tag.
|
|
77
|
+
*/
|
|
78
|
+
type DocumentSource = "requested" | "direct" | "internal";
|
|
79
|
+
interface DocumentSourceTagProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
80
|
+
source: DocumentSource;
|
|
81
|
+
/** Override the leading glyph for the mapped source. */
|
|
82
|
+
icon?: React.ReactNode;
|
|
83
|
+
/** Render label-only, with no leading glyph. */
|
|
84
|
+
hideIcon?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
88
|
+
* Owner: PRO documents, which decides to adopt, contribute or release
|
|
89
|
+
* the name. Never removed before 3.0.
|
|
90
|
+
*/
|
|
91
|
+
declare const DocumentSourceTag: React$1.ForwardRefExoticComponent<DocumentSourceTagProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* DocumentsWorkspaceLayout — 3-pane CSS-grid shell for a firm Documents workspace.
|
|
95
|
+
*
|
|
96
|
+
* Renders three independently-scrolling columns: a clients rail, a folder tree,
|
|
97
|
+
* and a files area. The root fills its parent height and does not scroll itself.
|
|
98
|
+
* Each pane is a flex column container; consumers are responsible for placing
|
|
99
|
+
* their own scroll regions inside the slots.
|
|
100
|
+
*
|
|
101
|
+
* Responsive grid:
|
|
102
|
+
* Base (<lg): 2 visible columns — clientsRail + filesArea. The folderTree
|
|
103
|
+
* pane is hidden so it does not occupy the 2-column base template.
|
|
104
|
+
* lg (>=1024px): All 3 columns — 248px rail | 220px folders | remaining files.
|
|
105
|
+
* xl (>=1280px): Wider columns — 280px rail | 244px folders | remaining files.
|
|
106
|
+
*
|
|
107
|
+
* No padding is imposed on any pane; the consumer owns spacing inside each slot.
|
|
108
|
+
*/
|
|
109
|
+
interface DocumentsWorkspaceLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
110
|
+
/** Left column — client list rail (always visible). */
|
|
111
|
+
clientsRail: React.ReactNode;
|
|
112
|
+
/** Middle column — folder/category tree (hidden below lg breakpoint). */
|
|
113
|
+
folderTree: React.ReactNode;
|
|
114
|
+
/** Right column — file list and preview area (always visible). */
|
|
115
|
+
filesArea: React.ReactNode;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
119
|
+
* Owner: PRO documents, which decides to adopt, contribute or release
|
|
120
|
+
* the name. Never removed before 3.0.
|
|
121
|
+
*/
|
|
122
|
+
declare const DocumentsWorkspaceLayout: React$1.ForwardRefExoticComponent<DocumentsWorkspaceLayoutProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* SectionHeader — title + description block for marketing-style sections.
|
|
126
|
+
* Uses Inter (`font-display`) with the spec's `-0.022em` letterspacing.
|
|
127
|
+
*/
|
|
128
|
+
interface SectionHeaderProps {
|
|
129
|
+
title: string;
|
|
130
|
+
description?: string;
|
|
131
|
+
align?: "left" | "center";
|
|
132
|
+
className?: string;
|
|
133
|
+
}
|
|
134
|
+
declare function SectionHeader({ title, description, align, className, }: SectionHeaderProps): react_jsx_runtime.JSX.Element;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Section — max-width centered wrapper for marketing/section content.
|
|
138
|
+
* The `--content-pad` token (32px) is the canonical app-content gutter,
|
|
139
|
+
* but Section keeps its 24px (`px-6`) gutter for narrower marketing pages.
|
|
140
|
+
*/
|
|
141
|
+
declare const maxWidthStyles: {
|
|
142
|
+
readonly sm: "ds:max-w-3xl";
|
|
143
|
+
readonly md: "ds:max-w-4xl";
|
|
144
|
+
readonly lg: "ds:max-w-5xl";
|
|
145
|
+
readonly xl: "ds:max-w-6xl";
|
|
146
|
+
};
|
|
147
|
+
interface SectionProps extends React.HTMLAttributes<HTMLElement> {
|
|
148
|
+
maxWidth?: keyof typeof maxWidthStyles;
|
|
149
|
+
as?: "section" | "div";
|
|
150
|
+
}
|
|
151
|
+
declare const Section: React$1.ForwardRefExoticComponent<SectionProps & React$1.RefAttributes<HTMLElement>>;
|
|
152
|
+
interface SectionHeadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
153
|
+
eyebrow?: React.ReactNode;
|
|
154
|
+
title?: React.ReactNode;
|
|
155
|
+
meta?: React.ReactNode;
|
|
156
|
+
}
|
|
157
|
+
declare const SectionHead: React$1.ForwardRefExoticComponent<SectionHeadProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Stat — paired numeric display + caption (the StatNum primitive).
|
|
161
|
+
* Numerals are set in `font-display` (Inter) at a fluid clamp size with
|
|
162
|
+
* `font-variant-numeric: tabular-nums` for vertical alignment.
|
|
163
|
+
*/
|
|
164
|
+
interface StatProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
165
|
+
value: string;
|
|
166
|
+
label: string;
|
|
167
|
+
}
|
|
168
|
+
declare const Stat: React$1.ForwardRefExoticComponent<StatProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* StatusPill — semantic status atom for engagement / document / signature
|
|
172
|
+
* lifecycles. It is a thin mapping over <Badge>: each known `status` picks
|
|
173
|
+
* the right variant + default label + dot, so call sites read as
|
|
174
|
+
* `<StatusPill status="needs-revision" />` instead of repeating the
|
|
175
|
+
* variant/label pairing everywhere.
|
|
176
|
+
*
|
|
177
|
+
* Mapping (per the portal spec):
|
|
178
|
+
* requested → warning "Requested"
|
|
179
|
+
* in-review → info "In review"
|
|
180
|
+
* needs-revision → danger "Needs revision"
|
|
181
|
+
* accepted/signed/
|
|
182
|
+
* approved/paid/
|
|
183
|
+
* received → success "Accepted" / "Signed" / "Received" / …
|
|
184
|
+
* draft/pending → secondary
|
|
185
|
+
* overdue → danger
|
|
186
|
+
*
|
|
187
|
+
* Pass `children` to override the label while keeping the mapped variant.
|
|
188
|
+
*/
|
|
189
|
+
type PillStatus = "requested" | "in-review" | "needs-revision" | "accepted" | "signed" | "approved" | "paid" | "complete" | "received" | "draft" | "pending" | "overdue" | "declined" | "internal" | "shared";
|
|
190
|
+
interface StatusPillProps extends Omit<BadgeProps, "variant"> {
|
|
191
|
+
status: PillStatus;
|
|
192
|
+
/** Show a leading dot. Default `true` (status atoms read better with one). */
|
|
193
|
+
dot?: boolean;
|
|
194
|
+
}
|
|
195
|
+
declare const StatusPill: React$1.ForwardRefExoticComponent<StatusPillProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
196
|
+
|
|
197
|
+
interface TeamMember {
|
|
198
|
+
id: string;
|
|
199
|
+
fullName: string;
|
|
200
|
+
}
|
|
201
|
+
interface TeamMemberSelectProps {
|
|
202
|
+
teamMembers: TeamMember[];
|
|
203
|
+
currentUserId?: string | null;
|
|
204
|
+
value: string;
|
|
205
|
+
onValueChange: (value: string) => void;
|
|
206
|
+
includeUnassigned?: boolean;
|
|
207
|
+
placeholder?: string;
|
|
208
|
+
className?: string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
212
|
+
* Owner: TAX, which keeps a local `TeamMemberPicker`; new code uses
|
|
213
|
+
* `PeoplePicker` (W7-10). Never removed before 3.0.
|
|
214
|
+
*/
|
|
215
|
+
declare function TeamMemberSelect({ teamMembers, currentUserId, value, onValueChange, includeUnassigned, placeholder, className, }: TeamMemberSelectProps): react_jsx_runtime.JSX.Element;
|
|
216
|
+
declare namespace TeamMemberSelect {
|
|
217
|
+
var displayName: string;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* ChannelTabs — a controlled, pill-style tab strip for switching between
|
|
222
|
+
* communication channels (Chat / Email / SMS / Internal) on a thread surface.
|
|
223
|
+
*
|
|
224
|
+
* Each tab carries a colored status dot (toned per channel) and an optional
|
|
225
|
+
* unread count. The active tab gets the accent ring treatment; inactive tabs
|
|
226
|
+
* are quiet until hovered. The component is presentational and fully
|
|
227
|
+
* controlled — the consumer owns the active value and maps it to whatever
|
|
228
|
+
* backend channel group / compose channel the tab represents.
|
|
229
|
+
*
|
|
230
|
+
* <ChannelTabs
|
|
231
|
+
* value={tab}
|
|
232
|
+
* onChange={setTab}
|
|
233
|
+
* tabs={[
|
|
234
|
+
* { value: "chat", label: "Chat", tone: "success", count: 2 },
|
|
235
|
+
* { value: "email", label: "Email", tone: "info" },
|
|
236
|
+
* { value: "sms", label: "SMS", tone: "accent" },
|
|
237
|
+
* ]}
|
|
238
|
+
* />
|
|
239
|
+
*
|
|
240
|
+
* @since 1.5.0
|
|
241
|
+
*/
|
|
242
|
+
/** Status-dot tone for a channel tab. Maps to a semantic color token. */
|
|
243
|
+
type ChannelTone = "brand" | "info" | "success" | "warning" | "muted" | "danger";
|
|
244
|
+
interface ChannelTabItem {
|
|
245
|
+
/** Stable identifier passed back to `onChange`. */
|
|
246
|
+
value: string;
|
|
247
|
+
/** Visible label. */
|
|
248
|
+
label: string;
|
|
249
|
+
/** Status-dot tone. Defaults to `muted`. */
|
|
250
|
+
tone?: ChannelTone;
|
|
251
|
+
/** Optional unread count — hidden when `0` or `undefined`. */
|
|
252
|
+
count?: number;
|
|
253
|
+
}
|
|
254
|
+
interface ChannelTabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
255
|
+
/** The tabs to render. */
|
|
256
|
+
tabs: ChannelTabItem[];
|
|
257
|
+
/** Currently active tab `value`. */
|
|
258
|
+
value: string;
|
|
259
|
+
/** Fired with the picked tab's `value`. */
|
|
260
|
+
onChange: (value: string) => void;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
264
|
+
* Owner: PRO communications, which decides to adopt, contribute or release
|
|
265
|
+
* the name. Never removed before 3.0.
|
|
266
|
+
*/
|
|
267
|
+
declare function ChannelTabs({ tabs, value, onChange, className, ...props }: ChannelTabsProps): react_jsx_runtime.JSX.Element;
|
|
268
|
+
declare namespace ChannelTabs {
|
|
269
|
+
var displayName: string;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* IntentBadge — a small dashed-outline badge for an AI-classified intent
|
|
274
|
+
* (Document, Question, Payment, Scheduling, Urgent, FYI, Follow-up…).
|
|
275
|
+
*
|
|
276
|
+
* The dashed border is the signature: it reads as "machine-suggested, not
|
|
277
|
+
* yet confirmed", distinguishing it from the solid `StatusPill` used for
|
|
278
|
+
* authoritative state. Presentational and generic — the consumer owns the
|
|
279
|
+
* intent→tone→icon→label mapping in their own domain config and passes the
|
|
280
|
+
* resolved pieces in.
|
|
281
|
+
*
|
|
282
|
+
* <IntentBadge tone="info" icon={<FileIcon size={12} />}>Document</IntentBadge>
|
|
283
|
+
*
|
|
284
|
+
* @since 1.5.0
|
|
285
|
+
*/
|
|
286
|
+
/** Color tone for an intent badge. */
|
|
287
|
+
type IntentTone = "brand" | "info" | "primary" | "success" | "warning" | "danger" | "muted";
|
|
288
|
+
interface IntentBadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
|
|
289
|
+
/** Color tone. Defaults to `muted`. */
|
|
290
|
+
tone?: IntentTone;
|
|
291
|
+
/** Optional leading glyph — pass a 12px icon. */
|
|
292
|
+
icon?: ReactNode;
|
|
293
|
+
/** Badge label. */
|
|
294
|
+
children: ReactNode;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
298
|
+
* Owner: PRO communications, which decides to adopt, contribute or release
|
|
299
|
+
* the name. Never removed before 3.0.
|
|
300
|
+
*/
|
|
301
|
+
declare function IntentBadge({ tone, icon, children, className, ...props }: IntentBadgeProps): react_jsx_runtime.JSX.Element;
|
|
302
|
+
declare namespace IntentBadge {
|
|
303
|
+
var displayName: string;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* DocumentRequestUpload — one self-contained "please upload this document" row
|
|
308
|
+
* for an organizer or a document-request list: a label (with optional help +
|
|
309
|
+
* required flag), a drag-drop dropzone, and the list of already-uploaded files
|
|
310
|
+
* rendered as removable chips.
|
|
311
|
+
*
|
|
312
|
+
* It packages the `FileUpload` + `FileChip` primitives into the exact shape a
|
|
313
|
+
* document-request row needs — including the file **remove** affordance that
|
|
314
|
+
* the `Questions` `file-upload` type only exposes via its `onFileRemove` prop.
|
|
315
|
+
* Reach for `Questions type="file-upload"` when the upload is one field inside a
|
|
316
|
+
* larger question list; reach for this when a document request is the whole unit
|
|
317
|
+
* (its own card, its own awaiting/locked state).
|
|
318
|
+
*
|
|
319
|
+
* Fully presentational and controlled: the caller owns the file list and every
|
|
320
|
+
* handler.
|
|
321
|
+
*/
|
|
322
|
+
interface DocumentRequestUploadFile {
|
|
323
|
+
/** Stable key. Falls back to `name` + `size` when omitted. */
|
|
324
|
+
id?: string;
|
|
325
|
+
/** File name shown on the chip. */
|
|
326
|
+
name: string;
|
|
327
|
+
/** Size in bytes; rendered as a human meta line when `meta` is not given. */
|
|
328
|
+
size?: number;
|
|
329
|
+
/** File-type tone for the chip tile. Defaults to `"doc"`. */
|
|
330
|
+
kind?: FileKind;
|
|
331
|
+
/** Overrides the derived "size" meta line (e.g. "2.1 MB · uploaded just now"). */
|
|
332
|
+
meta?: React.ReactNode;
|
|
333
|
+
}
|
|
334
|
+
interface DocumentRequestUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
335
|
+
/** Row headline, e.g. "W-2 from each employer". */
|
|
336
|
+
label: string;
|
|
337
|
+
/** Optional supporting line under the label. */
|
|
338
|
+
description?: string;
|
|
339
|
+
/** Renders a "Required" pill next to the label. */
|
|
340
|
+
required?: boolean;
|
|
341
|
+
/** Optional help tooltip beside the label. */
|
|
342
|
+
help?: {
|
|
343
|
+
title?: string;
|
|
344
|
+
body: string;
|
|
345
|
+
};
|
|
346
|
+
/** Already-uploaded files, rendered as removable chips. */
|
|
347
|
+
files?: DocumentRequestUploadFile[];
|
|
348
|
+
/** New files chosen via the dropzone / picker. */
|
|
349
|
+
onFilesSelected?: (files: File[]) => void;
|
|
350
|
+
/** Remove an uploaded file. When omitted, chips have no remove button. */
|
|
351
|
+
onRemoveFile?: (file: DocumentRequestUploadFile, index: number) => void;
|
|
352
|
+
/** Dropzone `accept` list, e.g. ".pdf,.jpg,.png". */
|
|
353
|
+
accept?: string;
|
|
354
|
+
/** Max per-file size in bytes. */
|
|
355
|
+
maxSize?: number;
|
|
356
|
+
/** Allow selecting multiple files. Defaults to `true`. */
|
|
357
|
+
multiple?: boolean;
|
|
358
|
+
/** Locks the row: hides the dropzone and the remove buttons. */
|
|
359
|
+
disabled?: boolean;
|
|
360
|
+
/** Message shown in place of the dropzone when `disabled`. Defaults to a lock note. */
|
|
361
|
+
disabledHint?: string;
|
|
362
|
+
/** Card chrome or bare layout. Defaults to `"card"`. */
|
|
363
|
+
chrome?: "card" | "plain";
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
367
|
+
* Owner: PORTAL client portal, which decides to adopt, contribute or release
|
|
368
|
+
* the name. Never removed before 3.0.
|
|
369
|
+
*/
|
|
370
|
+
declare const DocumentRequestUpload: React$1.ForwardRefExoticComponent<DocumentRequestUploadProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* AIReceiptPanel — the portal "attach a receipt, auto-fill with AI" panel.
|
|
374
|
+
* Three states drive the whole surface:
|
|
375
|
+
*
|
|
376
|
+
* idle → dashed "Attach receipt" button
|
|
377
|
+
* reading → pulsing sparkle + "Reading your receipt…"
|
|
378
|
+
* done → "Auto-filled from receipt" badge, the file chip, and the
|
|
379
|
+
* extracted vendor / amount / date grid (each confirmed ✓)
|
|
380
|
+
*
|
|
381
|
+
* It is **controlled**: the consumer owns `state` and supplies `result`
|
|
382
|
+
* when done. The simulated extraction in the reference is just one driver;
|
|
383
|
+
* swap in real OCR/AI and the contract is unchanged — flip `state` to
|
|
384
|
+
* "reading", then to "done" with a `result`.
|
|
385
|
+
*/
|
|
386
|
+
interface AIReceiptResult {
|
|
387
|
+
vendor: string;
|
|
388
|
+
amount: string;
|
|
389
|
+
date: string;
|
|
390
|
+
file: {
|
|
391
|
+
name: string;
|
|
392
|
+
meta?: React.ReactNode;
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
interface AIReceiptPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "results"> {
|
|
396
|
+
state?: "idle" | "reading" | "done";
|
|
397
|
+
/** Extracted fields, shown in the `done` state. */
|
|
398
|
+
result?: AIReceiptResult;
|
|
399
|
+
/** Fired when the idle attach button is pressed. */
|
|
400
|
+
onAttach?: () => void;
|
|
401
|
+
/** Fired when the done-state "Remove" link is pressed. */
|
|
402
|
+
onRemove?: () => void;
|
|
403
|
+
/** View action for the file chip (e.g. open the receipt). */
|
|
404
|
+
onViewFile?: () => void;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
408
|
+
* Owner: PRO, which decides to adopt, contribute or release
|
|
409
|
+
* the name. Never removed before 3.0.
|
|
410
|
+
*/
|
|
411
|
+
declare const AIReceiptPanel: React$1.ForwardRefExoticComponent<AIReceiptPanelProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* AttentionItem — one row in the portal "Needs your attention" feed:
|
|
415
|
+
* a toned icon tile, a title + supporting line, and a trailing action
|
|
416
|
+
* (custom node or a default chevron). Group these by service at the call
|
|
417
|
+
* site; the row itself just renders one item.
|
|
418
|
+
*
|
|
419
|
+
* Set `tone` to color the icon tile per service (or use a status tone via
|
|
420
|
+
* `urgency`). The whole row is a `<button>` when `onClick` is supplied.
|
|
421
|
+
*/
|
|
422
|
+
type AttentionUrgency = "default" | "warning" | "danger";
|
|
423
|
+
interface AttentionItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
424
|
+
icon: React.ReactNode;
|
|
425
|
+
title: React.ReactNode;
|
|
426
|
+
description?: React.ReactNode;
|
|
427
|
+
/** Service tone for the icon tile (used when `urgency` is "default"). */
|
|
428
|
+
tone?: ServiceTone;
|
|
429
|
+
/** Status urgency — overrides the service tone for the tile. */
|
|
430
|
+
urgency?: AttentionUrgency;
|
|
431
|
+
/** Trailing slot; defaults to a chevron when the row is interactive. */
|
|
432
|
+
action?: React.ReactNode;
|
|
433
|
+
onClick?: () => void;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
437
|
+
* Owner: PRO, which decides to adopt, contribute or release
|
|
438
|
+
* the name. Never removed before 3.0.
|
|
439
|
+
*/
|
|
440
|
+
declare const AttentionItem: React$1.ForwardRefExoticComponent<AttentionItemProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* BottomNav — mobile tab bar for the client portal (desktop uses the
|
|
444
|
+
* sidebar instead). Fixed to the viewport bottom with safe-area padding;
|
|
445
|
+
* each tab is an icon + short label with an optional count/dot badge.
|
|
446
|
+
*
|
|
447
|
+
* Controlled via `value` + `onChange`. Keep it to 3–5 tabs — beyond that,
|
|
448
|
+
* labels truncate and the row gets cramped on a 390px screen.
|
|
449
|
+
*/
|
|
450
|
+
interface BottomNavTab {
|
|
451
|
+
id: string;
|
|
452
|
+
label: string;
|
|
453
|
+
icon: React.ReactNode;
|
|
454
|
+
/** Numeric badge; `true` renders a dot. */
|
|
455
|
+
badge?: number | boolean;
|
|
456
|
+
}
|
|
457
|
+
interface BottomNavProps extends Omit<React.HTMLAttributes<HTMLElement>, "onChange"> {
|
|
458
|
+
tabs: BottomNavTab[];
|
|
459
|
+
value: string;
|
|
460
|
+
onChange: (id: string) => void;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
464
|
+
* Owner: DS — name released (docs/ownership/investigate.md, row 8); Portal's
|
|
465
|
+
* mobile nav moves to the Sidebar mobile mode (W7-04). Never removed before 3.0.
|
|
466
|
+
*/
|
|
467
|
+
declare const BottomNav: React$1.ForwardRefExoticComponent<BottomNavProps & React$1.RefAttributes<HTMLElement>>;
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* DashGrid — drag-to-reorder widget grid for the firm dashboard. Each
|
|
471
|
+
* widget gets a 6-dot grab handle; dragging it over another widget moves
|
|
472
|
+
* it to that slot. The flat order is the source of truth; widgets flow
|
|
473
|
+
* row-major into a responsive CSS grid.
|
|
474
|
+
*
|
|
475
|
+
* Order is uncontrolled by default. Pass `storageKey` to persist it to
|
|
476
|
+
* `localStorage` — the initial order is read **once** in a lazy
|
|
477
|
+
* `useState` initializer (SSR-safe: no read on the server), and the grid
|
|
478
|
+
* carries `suppressHydrationWarning` because a persisted client order will
|
|
479
|
+
* legitimately differ from the server's default order on first paint.
|
|
480
|
+
* `onReorder` fires with the new id order on every move.
|
|
481
|
+
*/
|
|
482
|
+
interface DashWidget {
|
|
483
|
+
id: string;
|
|
484
|
+
content: React.ReactNode;
|
|
485
|
+
/** Column span on the lg grid (1–3). Default 1. */
|
|
486
|
+
span?: 1 | 2 | 3;
|
|
487
|
+
}
|
|
488
|
+
interface DashGridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onReorder"> {
|
|
489
|
+
widgets: DashWidget[];
|
|
490
|
+
/** Persist order under this `localStorage` key. Omit to disable persistence. */
|
|
491
|
+
storageKey?: string;
|
|
492
|
+
onReorder?: (orderedIds: string[]) => void;
|
|
493
|
+
/** Max columns on large screens. Default 3. */
|
|
494
|
+
columns?: 2 | 3 | 4;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
498
|
+
* Owner: PRO, which decides to adopt, contribute or release
|
|
499
|
+
* the name. Never removed before 3.0.
|
|
500
|
+
*/
|
|
501
|
+
declare const DashGrid: React$1.ForwardRefExoticComponent<DashGridProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
502
|
+
|
|
503
|
+
interface EngagementCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
504
|
+
/** Service name, e.g. "Tax". */
|
|
505
|
+
service: string;
|
|
506
|
+
/** Service glyph (an icon node). */
|
|
507
|
+
serviceIcon?: React.ReactNode;
|
|
508
|
+
tone?: ServiceTone;
|
|
509
|
+
title: string;
|
|
510
|
+
/** Status node (typically a <StatusPill> or plain label). */
|
|
511
|
+
status?: React.ReactNode;
|
|
512
|
+
/** Current step index (1-based) and total. */
|
|
513
|
+
current: number;
|
|
514
|
+
steps: number;
|
|
515
|
+
/** Name of the current step, shown in the caption. */
|
|
516
|
+
stepLabel?: string;
|
|
517
|
+
/** Footer ETA content, e.g. "Est. completion Mar 14" or "Recurring engagement". */
|
|
518
|
+
eta?: React.ReactNode;
|
|
519
|
+
/** Show a ProgressRing instead of segments + percent. */
|
|
520
|
+
ring?: boolean;
|
|
521
|
+
onOpen?: () => void;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
525
|
+
* Owner: PORTAL client portal (PRO workflow keeps one too), which decides to
|
|
526
|
+
* adopt, contribute or release the name. Never removed before 3.0.
|
|
527
|
+
*/
|
|
528
|
+
declare const EngagementCard: React$1.ForwardRefExoticComponent<EngagementCardProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* EngagementTimeline — vertical stepper for an engagement's lifecycle.
|
|
532
|
+
* Each step is a node + connector rail on the left and a body on the right.
|
|
533
|
+
*
|
|
534
|
+
* done → filled success node with a check + "Completed {date}" line
|
|
535
|
+
* active → toned ring node + "In progress" badge + inline actions
|
|
536
|
+
* todo → muted node + "Upcoming" badge
|
|
537
|
+
*
|
|
538
|
+
* The active node + badge read the service `--tone` set once on the
|
|
539
|
+
* container (see `serviceToneStyle`). Compose with `<EngagementTimelineStep>`
|
|
540
|
+
* children, mirroring the `<ActivityList>` / `<ActivityItem>` split.
|
|
541
|
+
*/
|
|
542
|
+
type TimelineState = "done" | "active" | "todo";
|
|
543
|
+
interface EngagementTimelineProps extends React.HTMLAttributes<HTMLOListElement> {
|
|
544
|
+
/** Service tone for active nodes. */
|
|
545
|
+
tone?: ServiceTone;
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
549
|
+
* Owner: PORTAL client portal (PRO documents keeps one too), which decides to
|
|
550
|
+
* adopt, contribute or release the name. Never removed before 3.0.
|
|
551
|
+
*/
|
|
552
|
+
declare const EngagementTimeline: React$1.ForwardRefExoticComponent<EngagementTimelineProps & React$1.RefAttributes<HTMLOListElement>>;
|
|
553
|
+
interface EngagementTimelineStepProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, "title"> {
|
|
554
|
+
state: TimelineState;
|
|
555
|
+
/** Step name. */
|
|
556
|
+
name: React.ReactNode;
|
|
557
|
+
/** 1-based index shown inside todo/active nodes. */
|
|
558
|
+
index: number;
|
|
559
|
+
/** Supporting copy under the name. */
|
|
560
|
+
note?: React.ReactNode;
|
|
561
|
+
/** Completion date, shown for `done` steps. */
|
|
562
|
+
date?: React.ReactNode;
|
|
563
|
+
/** Inline action row, shown for `active` steps. */
|
|
564
|
+
actions?: React.ReactNode;
|
|
565
|
+
/** Hide the connector below the node (last step). */
|
|
566
|
+
last?: boolean;
|
|
567
|
+
}
|
|
568
|
+
declare const EngagementTimelineStep: React$1.ForwardRefExoticComponent<EngagementTimelineStepProps & React$1.RefAttributes<HTMLLIElement>>;
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* ClientRailItem — a client row in the firm Documents left rail.
|
|
572
|
+
*
|
|
573
|
+
* Renders as a full-width, left-aligned `<button>`. Displays the client
|
|
574
|
+
* avatar, name, an optional pending-documents indicator (purple dot +
|
|
575
|
+
* "N pending" label), a file-count chip, and a meta suffix (e.g. a relative
|
|
576
|
+
* timestamp).
|
|
577
|
+
*
|
|
578
|
+
* Active state highlights the row with `bg-brand-bg` and a 3 px left accent
|
|
579
|
+
* bar in the active brand colour. Hover (when not active) applies `bg-surface-2`.
|
|
580
|
+
*
|
|
581
|
+
* Spread standard `<button>` attributes (including `onClick`) directly.
|
|
582
|
+
*/
|
|
583
|
+
interface ClientRailItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
584
|
+
/** Client or entity display name. */
|
|
585
|
+
name: string;
|
|
586
|
+
/** Optional avatar image URL — forwarded to the DS Avatar `src` prop. */
|
|
587
|
+
avatarSrc?: string;
|
|
588
|
+
/** Entity kind label, e.g. "Individual" or "Business". */
|
|
589
|
+
entityType: string;
|
|
590
|
+
/** Number of pending document requests; 0 / undefined → no pending badge. */
|
|
591
|
+
pendingCount?: number | undefined;
|
|
592
|
+
/** Total file count shown in the name-row chip. Omit to hide the chip. */
|
|
593
|
+
fileCount?: number | undefined;
|
|
594
|
+
/** Trailing meta node — typically a relative-time string like "2h ago". */
|
|
595
|
+
metaSuffix?: React.ReactNode;
|
|
596
|
+
/** Whether this row is the currently-selected client in the rail. */
|
|
597
|
+
active?: boolean;
|
|
598
|
+
}
|
|
599
|
+
declare const ClientRailItem: React$1.ForwardRefExoticComponent<ClientRailItemProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
600
|
+
/**
|
|
601
|
+
* ClientRailGroupHeader — section label row for the Documents left rail.
|
|
602
|
+
*
|
|
603
|
+
* When `accent` is true a 7 px pro-tone dot precedes the label and the text
|
|
604
|
+
* is coloured in the active brand colour — signals that the group contains clients with
|
|
605
|
+
* pending document requests. An optional `count` is appended as " · N".
|
|
606
|
+
*/
|
|
607
|
+
interface ClientRailGroupHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
608
|
+
/** Group label text, e.g. "Awaiting documents" or "All clients". */
|
|
609
|
+
label: string;
|
|
610
|
+
/** Optional count appended as " · N" after the label. */
|
|
611
|
+
count?: number;
|
|
612
|
+
/**
|
|
613
|
+
* When true, renders a purple StatusDot before the label and colours the
|
|
614
|
+
* label in `text-brand` (the active brand colour). Use for "Awaiting documents" groups.
|
|
615
|
+
*/
|
|
616
|
+
accent?: boolean;
|
|
617
|
+
}
|
|
618
|
+
declare const ClientRailGroupHeader: React$1.ForwardRefExoticComponent<ClientRailGroupHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
619
|
+
|
|
620
|
+
interface DocumentFileRowProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
621
|
+
name: string;
|
|
622
|
+
fileType: string;
|
|
623
|
+
size?: string;
|
|
624
|
+
date?: string;
|
|
625
|
+
by?: string | undefined;
|
|
626
|
+
status?: React$1.ReactNode;
|
|
627
|
+
nameAdornment?: React$1.ReactNode;
|
|
628
|
+
menu?: React$1.ReactNode;
|
|
629
|
+
selected?: boolean | undefined;
|
|
630
|
+
showCheckbox?: boolean;
|
|
631
|
+
onSelectedChange?: (checked: boolean) => void;
|
|
632
|
+
onOpen?: () => void;
|
|
633
|
+
}
|
|
634
|
+
type DocumentFileCardProps = DocumentFileRowProps;
|
|
635
|
+
declare const DocumentFileRow: React$1.ForwardRefExoticComponent<DocumentFileRowProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
636
|
+
declare const DocumentFileCard: React$1.ForwardRefExoticComponent<DocumentFileRowProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
637
|
+
declare const lineCaptionToneClass: {
|
|
638
|
+
readonly muted: "ds:text-fg-4";
|
|
639
|
+
readonly warning: "ds:text-warning-fg";
|
|
640
|
+
readonly danger: "ds:text-danger-fg";
|
|
641
|
+
};
|
|
642
|
+
interface DocumentFileLineProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
643
|
+
/** The file's own name. */
|
|
644
|
+
name: string;
|
|
645
|
+
/** Drives the leading glyph colour ("pdf", "image/png", "xlsx", …). */
|
|
646
|
+
fileType?: string | undefined;
|
|
647
|
+
/** Small chip at the trailing edge — e.g. the classified document type. */
|
|
648
|
+
typeLabel?: React$1.ReactNode | undefined;
|
|
649
|
+
/** One muted status line under the name — e.g. "Categorizing…". */
|
|
650
|
+
caption?: React$1.ReactNode | undefined;
|
|
651
|
+
/** Colour tone for the caption. */
|
|
652
|
+
captionTone?: keyof typeof lineCaptionToneClass | undefined;
|
|
653
|
+
/** When set, a preview (eye) button is shown that calls this. */
|
|
654
|
+
onOpen?: (() => void) | undefined;
|
|
655
|
+
/** Accessible label for the preview button (defaults to `Preview {name}`). */
|
|
656
|
+
previewLabel?: string | undefined;
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* DocumentFileLine — a compact single-line file row for DENSE inline lists:
|
|
660
|
+
* the files collected under a checklist item, a "still sorting" group, or an
|
|
661
|
+
* "also received" list. Unlike {@link DocumentFileRow} it carries no checkbox,
|
|
662
|
+
* kebab menu, or size/date/by meta — just a file glyph, name, an optional type
|
|
663
|
+
* chip + caption, and an optional preview (eye) action. Purpose-built for
|
|
664
|
+
* {@link DocumentChecklist}; reach for `DocumentFileRow` when you need
|
|
665
|
+
* selection, a menu, or file metadata.
|
|
666
|
+
*/
|
|
667
|
+
declare const DocumentFileLine: React$1.ForwardRefExoticComponent<DocumentFileLineProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* A checklist item's lifecycle, from the client's point of view:
|
|
671
|
+
* awaiting — expected, nothing uploaded yet
|
|
672
|
+
* in-review — a file arrived and is being categorized / verified
|
|
673
|
+
* received — the document is in
|
|
674
|
+
* complete — in and finalized
|
|
675
|
+
* not-applicable — the client marked it as not-needed
|
|
676
|
+
*/
|
|
677
|
+
type DocumentChecklistStatus = "awaiting" | "in-review" | "received" | "complete" | "not-applicable";
|
|
678
|
+
/** A single collected file rendered under an item (or in the sorting/extra lists). */
|
|
679
|
+
interface DocumentChecklistFile extends Pick<DocumentFileLineProps, "name" | "fileType" | "typeLabel" | "caption" | "captionTone" | "onOpen"> {
|
|
680
|
+
id: string;
|
|
681
|
+
}
|
|
682
|
+
/** One expected document type on the checklist. */
|
|
683
|
+
interface DocumentChecklistItem {
|
|
684
|
+
id: string;
|
|
685
|
+
/** Plain-English label the client reads (e.g. "W-2"). */
|
|
686
|
+
label: string;
|
|
687
|
+
status: DocumentChecklistStatus;
|
|
688
|
+
/** Files classified into this slot (0..N). */
|
|
689
|
+
files?: DocumentChecklistFile[] | undefined;
|
|
690
|
+
/**
|
|
691
|
+
* Rendered under an awaiting row — the "I can't provide this" control (a
|
|
692
|
+
* caller-owned Select of missing-reason options). Kept as a slot so the
|
|
693
|
+
* composite stays presentational and product-agnostic.
|
|
694
|
+
*/
|
|
695
|
+
action?: React$1.ReactNode;
|
|
696
|
+
}
|
|
697
|
+
interface DocumentChecklistProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
698
|
+
items: DocumentChecklistItem[];
|
|
699
|
+
/** Section heading. */
|
|
700
|
+
title?: string;
|
|
701
|
+
/** Roll-up shown as a count + bar. Omit to hide the progress header. */
|
|
702
|
+
progress?: {
|
|
703
|
+
received: number;
|
|
704
|
+
total: number;
|
|
705
|
+
percent: number;
|
|
706
|
+
};
|
|
707
|
+
/** The upload dropzone, rendered at the very top of the single column. */
|
|
708
|
+
upload?: React$1.ReactNode;
|
|
709
|
+
/** Files still being sorted (not yet placed on a slot). */
|
|
710
|
+
reviewing?: DocumentChecklistFile[];
|
|
711
|
+
/** Recognized files that aren't on the checklist. */
|
|
712
|
+
extra?: DocumentChecklistFile[];
|
|
713
|
+
reviewingLabel?: string;
|
|
714
|
+
extraLabel?: string;
|
|
715
|
+
/** Rendered when there are no items at all. */
|
|
716
|
+
emptyState?: React$1.ReactNode;
|
|
717
|
+
}
|
|
718
|
+
/**
|
|
719
|
+
* DocumentChecklist — the client's single-column "your documents" experience.
|
|
720
|
+
*
|
|
721
|
+
* One scannable list: an upload dropzone on top, a progress roll-up, then every
|
|
722
|
+
* expected document as a row that moves through Awaiting → Reviewing → Received
|
|
723
|
+
* in place (state lives on the row, never in a separate bucket). Files still
|
|
724
|
+
* being sorted surface in a compact "we're sorting these" group, and recognized
|
|
725
|
+
* files that aren't on the checklist fall under an "also received" divider — so
|
|
726
|
+
* nothing an upload produced is ever hidden, and there is exactly one place to
|
|
727
|
+
* look.
|
|
728
|
+
*
|
|
729
|
+
* Fully controlled and presentational: the caller supplies `items`, `progress`,
|
|
730
|
+
* and slots (`upload`, per-row `action`, per-file `onOpen`). It consumes only
|
|
731
|
+
* semantic tokens, so `data-brand` retints it per product automatically.
|
|
732
|
+
*
|
|
733
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
734
|
+
* Owner: PORTAL client portal, which decides to adopt, contribute or release
|
|
735
|
+
* the name. Never removed before 3.0.
|
|
736
|
+
*/
|
|
737
|
+
declare const DocumentChecklist: React$1.ForwardRefExoticComponent<DocumentChecklistProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* DocumentRequestField — one numbered "document N" card inside the Request
|
|
741
|
+
* Documents modal. Renders a header badge, an optional remove button, and a
|
|
742
|
+
* three-field grid: document-type slot (caller-supplied), a required label
|
|
743
|
+
* input, and an optional note input.
|
|
744
|
+
*
|
|
745
|
+
* Props:
|
|
746
|
+
* - `index` — zero-based position; badge shows `index + 1`.
|
|
747
|
+
* - `typeControl` — ReactNode rendered in the Type field slot (pass a
|
|
748
|
+
* select, combobox, or disabled placeholder).
|
|
749
|
+
* - `label` — controlled value for the Label input.
|
|
750
|
+
* - `onLabelChange` — called with the new string on every keystroke.
|
|
751
|
+
* - `note` — controlled value for the Note input.
|
|
752
|
+
* - `onNoteChange` — called with the new string on every keystroke.
|
|
753
|
+
* - `onRemove` — when provided (and `canRemove` is true) a remove
|
|
754
|
+
* button appears in the header row.
|
|
755
|
+
* - `canRemove` — guards `onRemove`; set false when only one field
|
|
756
|
+
* remains so the user cannot delete the last entry.
|
|
757
|
+
*/
|
|
758
|
+
interface DocumentRequestFieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
759
|
+
/** Zero-based index; displayed as `index + 1` in the badge and aria-labels. */
|
|
760
|
+
index: number;
|
|
761
|
+
/** Slot for the document-type control (select, combobox, disabled input, etc.). */
|
|
762
|
+
typeControl: React.ReactNode;
|
|
763
|
+
/** Controlled value for the Label field. */
|
|
764
|
+
label: string;
|
|
765
|
+
/** Called with the updated string whenever the Label input changes. */
|
|
766
|
+
onLabelChange: (value: string) => void;
|
|
767
|
+
/** Controlled value for the Note field. */
|
|
768
|
+
note: string;
|
|
769
|
+
/** Called with the updated string whenever the Note input changes. */
|
|
770
|
+
onNoteChange: (value: string) => void;
|
|
771
|
+
/** Callback to remove this card from the list. Only rendered when `canRemove` is also true. */
|
|
772
|
+
onRemove?: () => void;
|
|
773
|
+
/** Whether removal is permitted (e.g. false when this is the last card). */
|
|
774
|
+
canRemove?: boolean;
|
|
775
|
+
}
|
|
776
|
+
/**
|
|
777
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
778
|
+
* Owner: PRO documents, which decides to adopt, contribute or release
|
|
779
|
+
* the name. Never removed before 3.0.
|
|
780
|
+
*/
|
|
781
|
+
declare const DocumentRequestField: React$1.ForwardRefExoticComponent<DocumentRequestFieldProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* MissingDocumentsPanel — an AI insight card that surfaces documents still
|
|
785
|
+
* expected from a client within an engagement.
|
|
786
|
+
*
|
|
787
|
+
* Items carry one of three states that map to a `<StatusPill>` semantic:
|
|
788
|
+
* missing → "Requested" (warning)
|
|
789
|
+
* pending → "Pending" (secondary)
|
|
790
|
+
* received → "Received" (success)
|
|
791
|
+
*
|
|
792
|
+
* When no items remain, the panel renders a compact "All documents received"
|
|
793
|
+
* success line instead of an empty list.
|
|
794
|
+
*
|
|
795
|
+
* Pass `onRequest` to show a "Request missing" footer button. The panel is
|
|
796
|
+
* fully controlled — it renders whatever `items` you supply.
|
|
797
|
+
*/
|
|
798
|
+
type DocumentItemState = "missing" | "pending" | "received";
|
|
799
|
+
interface MissingDocumentItem {
|
|
800
|
+
/** Document label shown in the row. */
|
|
801
|
+
label: string;
|
|
802
|
+
/** Optional due / expected date string (e.g. "Due Jun 20"). */
|
|
803
|
+
dueDate?: string;
|
|
804
|
+
/** Current fulfilment state for this document. */
|
|
805
|
+
state: DocumentItemState;
|
|
806
|
+
}
|
|
807
|
+
interface MissingDocumentsPanelProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
808
|
+
/** List of expected documents and their current states. */
|
|
809
|
+
items: MissingDocumentItem[];
|
|
810
|
+
/** Subtitle below the panel title. */
|
|
811
|
+
subtitle?: string;
|
|
812
|
+
/** When provided a "Request missing" button is rendered in the footer. */
|
|
813
|
+
onRequest?: () => void;
|
|
814
|
+
}
|
|
815
|
+
/**
|
|
816
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
817
|
+
* Owner: PRO documents, which decides to adopt, contribute or release
|
|
818
|
+
* the name. Never removed before 3.0.
|
|
819
|
+
*/
|
|
820
|
+
declare const MissingDocumentsPanel: React$1.ForwardRefExoticComponent<MissingDocumentsPanelProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
821
|
+
|
|
822
|
+
/**
|
|
823
|
+
* NewMenu — the TopBar "+ New" create dropdown. A primary button opens a
|
|
824
|
+
* menu of create actions, optionally split into labelled groups (e.g.
|
|
825
|
+
* "Work" vs "People"). Thin composition over the DropdownMenu primitive;
|
|
826
|
+
* the surface, focus, and portal behavior all come from there.
|
|
827
|
+
*/
|
|
828
|
+
interface NewMenuAction {
|
|
829
|
+
id: string;
|
|
830
|
+
label: React.ReactNode;
|
|
831
|
+
/** Supporting line under the label. */
|
|
832
|
+
description?: React.ReactNode;
|
|
833
|
+
icon?: React.ReactNode;
|
|
834
|
+
/** Keyboard hint, right-aligned (display only). */
|
|
835
|
+
shortcut?: string;
|
|
836
|
+
onSelect?: () => void;
|
|
837
|
+
}
|
|
838
|
+
interface NewMenuGroup {
|
|
839
|
+
label?: React.ReactNode;
|
|
840
|
+
actions: NewMenuAction[];
|
|
841
|
+
}
|
|
842
|
+
interface NewMenuProps {
|
|
843
|
+
/** Flat action list. Use `groups` instead for labelled sections. */
|
|
844
|
+
actions?: NewMenuAction[];
|
|
845
|
+
groups?: NewMenuGroup[];
|
|
846
|
+
/** Trigger label. Default "New". */
|
|
847
|
+
triggerLabel?: React.ReactNode;
|
|
848
|
+
/** Override the trigger entirely (still opens the menu). */
|
|
849
|
+
trigger?: React.ReactNode;
|
|
850
|
+
align?: "start" | "center" | "end";
|
|
851
|
+
}
|
|
852
|
+
/**
|
|
853
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
854
|
+
* Owner: PRO, which decides to adopt, contribute or release
|
|
855
|
+
* the name. Never removed before 3.0.
|
|
856
|
+
*/
|
|
857
|
+
declare const NewMenu: React$1.ForwardRefExoticComponent<NewMenuProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
858
|
+
|
|
859
|
+
/**
|
|
860
|
+
* DocumentRequestCard + DocumentRequestDetail — the firm "Requests" surface.
|
|
861
|
+
*
|
|
862
|
+
* Both are presentational: the app owns data fetching, tab/preview state, and
|
|
863
|
+
* every action handler, and passes plain data + callbacks. They wrap the
|
|
864
|
+
* `DocumentDetail*` kit, the icon set, the tab primitives, and the assignee
|
|
865
|
+
* dropdown so a consuming app imports two components instead of ~40 parts.
|
|
866
|
+
*/
|
|
867
|
+
type DocumentRequestTone = "warning" | "success" | "danger" | "muted";
|
|
868
|
+
interface DocumentRequestItemSummary {
|
|
869
|
+
/** Stable id for the row key. */
|
|
870
|
+
id: string;
|
|
871
|
+
/** Requested-document label, e.g. "AR aging (12/31/2025)". */
|
|
872
|
+
label: string;
|
|
873
|
+
/** Short type chip, e.g. "Schedule". */
|
|
874
|
+
docType?: string;
|
|
875
|
+
/** Status text, e.g. "Received". */
|
|
876
|
+
statusLabel: string;
|
|
877
|
+
/** Status colour. */
|
|
878
|
+
statusTone: DocumentRequestTone;
|
|
879
|
+
}
|
|
880
|
+
interface DocumentRequestCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onClick" | "title"> {
|
|
881
|
+
/** Request headline. */
|
|
882
|
+
title: string;
|
|
883
|
+
/** Free-form category chip. */
|
|
884
|
+
category?: string;
|
|
885
|
+
/** Renders the urgent triangle when true. */
|
|
886
|
+
highPriority?: boolean;
|
|
887
|
+
/** Relative due chip + tone, e.g. `{ text: "Due in 6d", tone: "warning" }`. */
|
|
888
|
+
due?: {
|
|
889
|
+
text: string;
|
|
890
|
+
tone: DocumentRequestTone;
|
|
891
|
+
};
|
|
892
|
+
/** Optional request description rendered as a quote. */
|
|
893
|
+
comment?: string;
|
|
894
|
+
/** Fulfilled item count (numerator of the progress pill). */
|
|
895
|
+
fulfilledCount: number;
|
|
896
|
+
/** Total item count (denominator of the progress pill). */
|
|
897
|
+
totalCount: number;
|
|
898
|
+
/** Requested items rendered as rows. */
|
|
899
|
+
items: DocumentRequestItemSummary[];
|
|
900
|
+
/** Assignee display names for the footer avatar stack. */
|
|
901
|
+
assignees?: string[];
|
|
902
|
+
/** Open the request detail. */
|
|
903
|
+
onOpen: () => void;
|
|
904
|
+
}
|
|
905
|
+
declare const DocumentRequestCard: React$1.ForwardRefExoticComponent<DocumentRequestCardProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
906
|
+
type DocumentRequestDetailTab = "documents" | "comments" | "activity";
|
|
907
|
+
type DocumentRequestActivityKind = "assigned" | "unassigned" | "added" | "uploaded" | "priority" | "created" | "reminded" | "updated" | "commented" | "cancelled" | "received" | "approved" | "needs_revision" | "locked" | "unlocked" | "status";
|
|
908
|
+
interface DocumentRequestDetailDoc {
|
|
909
|
+
/** Stable id for the row key. */
|
|
910
|
+
id: string;
|
|
911
|
+
/** File name shown as the row's primary line. */
|
|
912
|
+
fileName: string;
|
|
913
|
+
/** Secondary meta line (size · date · uploader). */
|
|
914
|
+
meta?: React.ReactNode;
|
|
915
|
+
/** Highlight the row (e.g. its preview is open). */
|
|
916
|
+
active?: boolean;
|
|
917
|
+
/** Firm review verdict — `true` renders the row in its approved state
|
|
918
|
+
* (green icon + "Approved" tag) and hides the approve action. */
|
|
919
|
+
approved?: boolean;
|
|
920
|
+
/** Firm review verdict — `true` renders the row in its rejected state
|
|
921
|
+
* (red icon + "Rejected" tag). Ignored when `approved` is set. */
|
|
922
|
+
rejected?: boolean;
|
|
923
|
+
/** Approve this document. Renders a tick action before Preview while the
|
|
924
|
+
* doc is not yet approved; omit to hide the affordance. */
|
|
925
|
+
onApprove?: () => void;
|
|
926
|
+
onPreview?: () => void;
|
|
927
|
+
onDownload?: () => void;
|
|
928
|
+
onDelete?: () => void;
|
|
929
|
+
}
|
|
930
|
+
interface DocumentRequestRequestedItem {
|
|
931
|
+
/** Stable id for the row key. */
|
|
932
|
+
id: string;
|
|
933
|
+
/** Requested-document label, e.g. "AR aging (12/31/2025)". */
|
|
934
|
+
label: string;
|
|
935
|
+
/** Short type chip, e.g. "Schedule". */
|
|
936
|
+
docType?: string;
|
|
937
|
+
/** Status text, e.g. "Received". */
|
|
938
|
+
statusLabel: string;
|
|
939
|
+
/** Status colour (drives the dot + label). */
|
|
940
|
+
statusTone: DocumentRequestTone;
|
|
941
|
+
/** Client upload(s) fulfilling this item; empty means still awaiting. */
|
|
942
|
+
documents: DocumentRequestDetailDoc[];
|
|
943
|
+
}
|
|
944
|
+
interface DocumentRequestDetailComment {
|
|
945
|
+
/** Stable id for the row key. */
|
|
946
|
+
id: string;
|
|
947
|
+
/** Author display name. */
|
|
948
|
+
author: string;
|
|
949
|
+
/** True for a firm author (vs a client contact) — drives the badge. */
|
|
950
|
+
isFirm: boolean;
|
|
951
|
+
/** Render a "(You)" suffix for the current user. */
|
|
952
|
+
you?: boolean;
|
|
953
|
+
/** Relative time. */
|
|
954
|
+
time: string;
|
|
955
|
+
/** Comment body. */
|
|
956
|
+
body: string;
|
|
957
|
+
}
|
|
958
|
+
interface DocumentRequestDetailActivityEvent {
|
|
959
|
+
/** Stable id for the row key. */
|
|
960
|
+
id: string;
|
|
961
|
+
/** Event kind — selects the leading icon. */
|
|
962
|
+
kind: DocumentRequestActivityKind;
|
|
963
|
+
/** Rendered event text (may include bolded names). */
|
|
964
|
+
text: React.ReactNode;
|
|
965
|
+
/** Relative time. */
|
|
966
|
+
time: string;
|
|
967
|
+
}
|
|
968
|
+
interface DocumentRequestAssigneeOption {
|
|
969
|
+
/** Firm-user id. */
|
|
970
|
+
id: string;
|
|
971
|
+
/** Display name. */
|
|
972
|
+
name: string;
|
|
973
|
+
/** Whether currently assigned. */
|
|
974
|
+
selected: boolean;
|
|
975
|
+
}
|
|
976
|
+
interface DocumentRequestReviewStatusOption {
|
|
977
|
+
/** Stored value (e.g. "provided"). */
|
|
978
|
+
value: string;
|
|
979
|
+
/** Human label (e.g. "Provided"). */
|
|
980
|
+
label: string;
|
|
981
|
+
/** Tailwind background class for the leading status dot (e.g. "bg-info-fg"). */
|
|
982
|
+
color?: string;
|
|
983
|
+
}
|
|
984
|
+
interface DocumentRequestDetailProps {
|
|
985
|
+
/** Request headline. */
|
|
986
|
+
title: string;
|
|
987
|
+
/** Category chip (left of the header bar). */
|
|
988
|
+
category?: string;
|
|
989
|
+
/** Renders a "High priority" chip. */
|
|
990
|
+
highPriority?: boolean;
|
|
991
|
+
/** Status pill text, right-aligned. */
|
|
992
|
+
statusLabel?: string;
|
|
993
|
+
/** Status pill colour. */
|
|
994
|
+
statusVariant?: BadgeProps["variant"];
|
|
995
|
+
/** Requester block. */
|
|
996
|
+
requester: {
|
|
997
|
+
org: string;
|
|
998
|
+
avatar?: string;
|
|
999
|
+
requestedBy: string;
|
|
1000
|
+
time: string;
|
|
1001
|
+
};
|
|
1002
|
+
/** Due chip text + absolute date. */
|
|
1003
|
+
due?: {
|
|
1004
|
+
text: string;
|
|
1005
|
+
dateLabel?: string;
|
|
1006
|
+
};
|
|
1007
|
+
/** Assignee options for the picker; `selected` marks the current set. */
|
|
1008
|
+
assignees: DocumentRequestAssigneeOption[];
|
|
1009
|
+
/** Toggle one assignee (omit to render the avatar stack read-only). */
|
|
1010
|
+
onToggleAssignee?: (id: string) => void;
|
|
1011
|
+
/** Show the Edit / Lock / Status / Delete action row (firm only). */
|
|
1012
|
+
canEdit?: boolean;
|
|
1013
|
+
onEdit?: () => void;
|
|
1014
|
+
onDelete?: () => void;
|
|
1015
|
+
onClose?: () => void;
|
|
1016
|
+
/** Whether the request is frozen (drives the Lock/Unlock button label + icon). */
|
|
1017
|
+
isLocked?: boolean;
|
|
1018
|
+
/** Toggle the lock (omit to hide the Lock button). */
|
|
1019
|
+
onToggleLock?: () => void;
|
|
1020
|
+
/** The firm's current review verdict (radio-selected in the Status menu). */
|
|
1021
|
+
reviewStatus?: string | null;
|
|
1022
|
+
/** Selectable review-status options for the Status menu. */
|
|
1023
|
+
reviewStatusOptions?: DocumentRequestReviewStatusOption[];
|
|
1024
|
+
/** Set the review verdict, or `null` to clear it (omit to hide the Status button). */
|
|
1025
|
+
onSetReviewStatus?: (value: string | null) => void;
|
|
1026
|
+
/** Controlled active tab. */
|
|
1027
|
+
tab?: DocumentRequestDetailTab;
|
|
1028
|
+
/** Uncontrolled initial tab (defaults to "documents"). */
|
|
1029
|
+
defaultTab?: DocumentRequestDetailTab;
|
|
1030
|
+
onTabChange?: (tab: DocumentRequestDetailTab) => void;
|
|
1031
|
+
/** Documents tab — flat client-uploaded vault docs. Used only as a fallback
|
|
1032
|
+
* when `requestedItems` is omitted. */
|
|
1033
|
+
clientUploads?: DocumentRequestDetailDoc[];
|
|
1034
|
+
/** Documents tab — firm reference documents. */
|
|
1035
|
+
firmDocuments: DocumentRequestDetailDoc[];
|
|
1036
|
+
/** Documents tab — requested items with the client upload(s) fulfilling each.
|
|
1037
|
+
* When provided, the tab renders a per-item grouped view (each requested
|
|
1038
|
+
* document, its status, and the uploads against it) instead of the flat
|
|
1039
|
+
* client-uploads list. */
|
|
1040
|
+
requestedItems?: DocumentRequestRequestedItem[];
|
|
1041
|
+
/** Client uploads not tied to any current item — rendered as a trailing
|
|
1042
|
+
* "Other uploads" group in the grouped view. */
|
|
1043
|
+
otherUploads?: DocumentRequestDetailDoc[];
|
|
1044
|
+
/** Upload affordance for the firm-documents section (omit to hide). */
|
|
1045
|
+
onUploadFirmDocument?: () => void;
|
|
1046
|
+
/** Comments tab thread. */
|
|
1047
|
+
comments: DocumentRequestDetailComment[];
|
|
1048
|
+
/** Controlled composer value. */
|
|
1049
|
+
commentDraft: string;
|
|
1050
|
+
onCommentDraftChange: (value: string) => void;
|
|
1051
|
+
onSubmitComment: () => void;
|
|
1052
|
+
/** Disable the composer (e.g. lacking permission). */
|
|
1053
|
+
commentDisabled?: boolean;
|
|
1054
|
+
/** In-flight comment submit. */
|
|
1055
|
+
commentPending?: boolean;
|
|
1056
|
+
/** Activity tab events, newest-first as desired by the caller. */
|
|
1057
|
+
activity: DocumentRequestDetailActivityEvent[];
|
|
1058
|
+
className?: string;
|
|
1059
|
+
}
|
|
1060
|
+
declare const DocumentRequestDetail: React$1.ForwardRefExoticComponent<DocumentRequestDetailProps & React$1.RefAttributes<HTMLElement>>;
|
|
1061
|
+
|
|
1062
|
+
/**
|
|
1063
|
+
* DocumentSourceFilter — segmented single-select for a files toolbar: scope the
|
|
1064
|
+
* list to a provenance bucket. Wraps ToggleGroup (so it inherits roving-focus
|
|
1065
|
+
* keyboard nav + the pro-tint active state) and reuses the same `source` →
|
|
1066
|
+
* glyph mapping as DocumentSourceTag, plus an "all" aggregate segment.
|
|
1067
|
+
*
|
|
1068
|
+
* all → (no glyph) every document
|
|
1069
|
+
* requested → send glyph client fulfilled a firm request
|
|
1070
|
+
* direct → upload glyph client uploaded unprompted
|
|
1071
|
+
* internal → shield glyph firm-prepared, not client-visible
|
|
1072
|
+
*
|
|
1073
|
+
* Controlled: pass `value` + `onValueChange`. `counts` adds a trailing badge per
|
|
1074
|
+
* segment; `hideIcons` renders label-only segments.
|
|
1075
|
+
*/
|
|
1076
|
+
type DocumentSourceFilterValue = "all" | DocumentSource;
|
|
1077
|
+
interface DocumentSourceFilterProps {
|
|
1078
|
+
/** Currently active segment. */
|
|
1079
|
+
value: DocumentSourceFilterValue;
|
|
1080
|
+
/** Fired when a segment is chosen (re-selecting the active one is ignored). */
|
|
1081
|
+
onValueChange: (value: DocumentSourceFilterValue) => void;
|
|
1082
|
+
/** Per-segment item counts, rendered as a trailing badge. */
|
|
1083
|
+
counts?: Partial<Record<DocumentSourceFilterValue, number>>;
|
|
1084
|
+
/** Render label-only segments, with no leading glyph. */
|
|
1085
|
+
hideIcons?: boolean;
|
|
1086
|
+
className?: string;
|
|
1087
|
+
/** Accessible name for the group. */
|
|
1088
|
+
"aria-label"?: string;
|
|
1089
|
+
}
|
|
1090
|
+
/**
|
|
1091
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
1092
|
+
* Owner: PRO documents, which decides to adopt, contribute or release
|
|
1093
|
+
* the name. Never removed before 3.0.
|
|
1094
|
+
*/
|
|
1095
|
+
declare const DocumentSourceFilter: React$1.ForwardRefExoticComponent<DocumentSourceFilterProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1096
|
+
|
|
1097
|
+
/** Running-clock format from milliseconds → `H:MM:SS`. */
|
|
1098
|
+
declare function formatClock(ms: number): string;
|
|
1099
|
+
/** Compact duration from seconds → `Xh Ym` (e.g. `2h 10m`, `45m`, `3h`). */
|
|
1100
|
+
declare function formatDuration(totalSeconds: number): string;
|
|
1101
|
+
/** Parse human input (`3h 20m`, `1:30`, `45m`, bare `90` → minutes) → seconds, or `null`. */
|
|
1102
|
+
declare function parseDuration(input: string): number | null;
|
|
1103
|
+
/** Currency format used by the billing rows; falls back to `$0.00` for bad ISO codes. */
|
|
1104
|
+
declare function formatCurrency(amount: number, currency?: string): string;
|
|
1105
|
+
type TimeLoggerPhase = "idle" | "running" | "paused" | "stopped";
|
|
1106
|
+
interface UseStopwatchReturn {
|
|
1107
|
+
phase: TimeLoggerPhase;
|
|
1108
|
+
elapsedMs: number;
|
|
1109
|
+
isRunning: boolean;
|
|
1110
|
+
/** Begin running, optionally seeded with an offset (e.g. a parsed manual entry). */
|
|
1111
|
+
start: (fromMs?: number) => void;
|
|
1112
|
+
pause: () => void;
|
|
1113
|
+
resume: () => void;
|
|
1114
|
+
/** Freeze and mark complete; elapsed is preserved for saving. */
|
|
1115
|
+
stop: () => void;
|
|
1116
|
+
/** Return to idle at zero. */
|
|
1117
|
+
reset: () => void;
|
|
1118
|
+
}
|
|
1119
|
+
declare function useStopwatch(): UseStopwatchReturn;
|
|
1120
|
+
interface TimeLoggerProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
1121
|
+
/**
|
|
1122
|
+
* Layout direction.
|
|
1123
|
+
* - `"vertical"` (default) — the stacked panel; rows separated by top
|
|
1124
|
+
* rules. For popovers and side panels.
|
|
1125
|
+
* - `"horizontal"` — a single compact bar; segments sit side by side,
|
|
1126
|
+
* separated by left rules. For an app top/bottom bar. Exposed as
|
|
1127
|
+
* `data-orientation` so segment atoms flip their divider via
|
|
1128
|
+
* `group-data-[orientation=horizontal]/timelogger`.
|
|
1129
|
+
*/
|
|
1130
|
+
orientation?: "vertical" | "horizontal";
|
|
1131
|
+
}
|
|
1132
|
+
declare const TimeLogger: React$1.ForwardRefExoticComponent<TimeLoggerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1133
|
+
interface TimeLoggerHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1134
|
+
title?: React$1.ReactNode;
|
|
1135
|
+
icon?: React$1.ReactNode;
|
|
1136
|
+
/** Minutes logged today. With `goalMinutes`, renders the `Xh / Yh` figure + seam. */
|
|
1137
|
+
loggedMinutes?: number;
|
|
1138
|
+
/** Daily goal in minutes. Omit to hide the goal figure and the progress seam. */
|
|
1139
|
+
goalMinutes?: number;
|
|
1140
|
+
}
|
|
1141
|
+
declare const TimeLoggerHeader: React$1.ForwardRefExoticComponent<TimeLoggerHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1142
|
+
interface TimeLoggerContextRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1143
|
+
client: React$1.ReactNode;
|
|
1144
|
+
engagement?: React$1.ReactNode;
|
|
1145
|
+
/** Leading slot, e.g. an `<Avatar variant="branded" />`. */
|
|
1146
|
+
avatar?: React$1.ReactNode;
|
|
1147
|
+
onClientSelect?: () => void;
|
|
1148
|
+
/** Right-aligned slot — an assignee avatar + menu, or a `<TeamMemberSelect>`. */
|
|
1149
|
+
member?: React$1.ReactNode;
|
|
1150
|
+
}
|
|
1151
|
+
declare const TimeLoggerContextRow: React$1.ForwardRefExoticComponent<TimeLoggerContextRowProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1152
|
+
interface TimeLoggerTimerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
1153
|
+
phase: TimeLoggerPhase;
|
|
1154
|
+
elapsedMs: number;
|
|
1155
|
+
/** Manual-entry text, shown only while idle. Controlled. */
|
|
1156
|
+
value?: string;
|
|
1157
|
+
onValueChange?: (value: string) => void;
|
|
1158
|
+
placeholder?: string;
|
|
1159
|
+
onStart?: () => void;
|
|
1160
|
+
onPause?: () => void;
|
|
1161
|
+
onResume?: () => void;
|
|
1162
|
+
onStop?: () => void;
|
|
1163
|
+
}
|
|
1164
|
+
declare const TimeLoggerTimer: React$1.ForwardRefExoticComponent<TimeLoggerTimerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1165
|
+
interface TimeLoggerFieldProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "onSelect"> {
|
|
1166
|
+
icon?: React$1.ReactNode;
|
|
1167
|
+
/** Small caption above the value. */
|
|
1168
|
+
label?: React$1.ReactNode;
|
|
1169
|
+
onSelect?: () => void;
|
|
1170
|
+
/** Trailing node; defaults to a chevron when interactive. Pass `null` to suppress. */
|
|
1171
|
+
trailing?: React$1.ReactNode;
|
|
1172
|
+
/** Render the value in the muted placeholder colour. */
|
|
1173
|
+
muted?: boolean;
|
|
1174
|
+
}
|
|
1175
|
+
declare const TimeLoggerField: React$1.ForwardRefExoticComponent<TimeLoggerFieldProps & React$1.RefAttributes<HTMLElement>>;
|
|
1176
|
+
interface TimeLoggerNotesProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange"> {
|
|
1177
|
+
value?: string;
|
|
1178
|
+
onValueChange?: (value: string) => void;
|
|
1179
|
+
icon?: React$1.ReactNode;
|
|
1180
|
+
}
|
|
1181
|
+
declare const TimeLoggerNotes: React$1.ForwardRefExoticComponent<TimeLoggerNotesProps & React$1.RefAttributes<HTMLInputElement>>;
|
|
1182
|
+
interface TimeLoggerTier {
|
|
1183
|
+
id: string;
|
|
1184
|
+
name: React$1.ReactNode;
|
|
1185
|
+
/** Hourly rate in the panel currency; shown in the tier menu's right column. */
|
|
1186
|
+
rate: number;
|
|
1187
|
+
}
|
|
1188
|
+
interface TimeLoggerBillableProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
1189
|
+
billable: boolean;
|
|
1190
|
+
onBillableChange?: (billable: boolean) => void;
|
|
1191
|
+
/** Defaults to "Billable" / "Non-billable" derived from `billable`. */
|
|
1192
|
+
label?: React$1.ReactNode;
|
|
1193
|
+
/** Pricing tiers shown in the settings pop-view. Omit to hide the gear. */
|
|
1194
|
+
tiers?: TimeLoggerTier[];
|
|
1195
|
+
tierId?: string;
|
|
1196
|
+
onTierChange?: (id: string) => void;
|
|
1197
|
+
/** ISO currency for tier-rate formatting. Default `"USD"`. */
|
|
1198
|
+
currency?: string;
|
|
1199
|
+
/** Computed amount readout (rate × time). Pass a formatted node, or omit. */
|
|
1200
|
+
amount?: React$1.ReactNode;
|
|
1201
|
+
}
|
|
1202
|
+
declare const TimeLoggerBillable: React$1.ForwardRefExoticComponent<TimeLoggerBillableProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1203
|
+
type TimeLoggerActionsProps = React$1.HTMLAttributes<HTMLDivElement>;
|
|
1204
|
+
declare const TimeLoggerActions: React$1.ForwardRefExoticComponent<TimeLoggerActionsProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1205
|
+
interface TimeLoggerEntryListProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
1206
|
+
/** Day group caption, e.g. "Fri, May 29". */
|
|
1207
|
+
dayLabel?: React$1.ReactNode;
|
|
1208
|
+
/** Right-aligned day subtotal, e.g. "2h 10m". */
|
|
1209
|
+
total?: React$1.ReactNode;
|
|
1210
|
+
}
|
|
1211
|
+
declare const TimeLoggerEntryList: React$1.ForwardRefExoticComponent<TimeLoggerEntryListProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1212
|
+
interface TimeLoggerEntryProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1213
|
+
title: React$1.ReactNode;
|
|
1214
|
+
/** Secondary line — time range, billable amount, etc. */
|
|
1215
|
+
meta?: React$1.ReactNode;
|
|
1216
|
+
duration: React$1.ReactNode;
|
|
1217
|
+
onResume?: () => void;
|
|
1218
|
+
onDelete?: () => void;
|
|
1219
|
+
}
|
|
1220
|
+
declare const TimeLoggerEntry: React$1.ForwardRefExoticComponent<TimeLoggerEntryProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1221
|
+
type TimeLoggerFooterProps = React$1.HTMLAttributes<HTMLDivElement>;
|
|
1222
|
+
declare const TimeLoggerFooter: React$1.ForwardRefExoticComponent<TimeLoggerFooterProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1223
|
+
|
|
1224
|
+
/**
|
|
1225
|
+
* SuggestionPills — a horizontal strip of AI quick-reply pills, typically
|
|
1226
|
+
* floated above a message composer when the last inbound message warrants a
|
|
1227
|
+
* fast response.
|
|
1228
|
+
*
|
|
1229
|
+
* The pills materialise with a staggered "magic smoke" entrance (the bar
|
|
1230
|
+
* rises, the sparkle pulses, each pill puffs in) driven by the shipped
|
|
1231
|
+
* `.ds-suggestion-*` classes — motion is suppressed under
|
|
1232
|
+
* `prefers-reduced-motion`. Presentational and controlled: the consumer
|
|
1233
|
+
* supplies the suggestion strings and a pick handler.
|
|
1234
|
+
*
|
|
1235
|
+
* <SuggestionPills
|
|
1236
|
+
* suggestions={["Sounds good — thanks!", "Could you send the W-2?"]}
|
|
1237
|
+
* onPick={(text) => editor.insert(text)}
|
|
1238
|
+
* loading={generating}
|
|
1239
|
+
* />
|
|
1240
|
+
*
|
|
1241
|
+
* Returns `null` when not loading and there are no suggestions, so it can be
|
|
1242
|
+
* rendered unconditionally.
|
|
1243
|
+
*
|
|
1244
|
+
* @since 1.5.0
|
|
1245
|
+
*/
|
|
1246
|
+
interface SuggestionPillsProps {
|
|
1247
|
+
/** Suggestion strings to render as pills. */
|
|
1248
|
+
suggestions: string[];
|
|
1249
|
+
/** Fired with the picked suggestion text. */
|
|
1250
|
+
onPick: (text: string) => void;
|
|
1251
|
+
/** Show skeleton pills while suggestions are being generated. */
|
|
1252
|
+
loading?: boolean;
|
|
1253
|
+
/** Strip label. Default: `"Smart replies"`. */
|
|
1254
|
+
label?: string;
|
|
1255
|
+
/** Extra classes on the bar. */
|
|
1256
|
+
className?: string;
|
|
1257
|
+
}
|
|
1258
|
+
/**
|
|
1259
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
1260
|
+
* Owner: PRO communications, which decides to adopt, contribute or release
|
|
1261
|
+
* the name. Never removed before 3.0.
|
|
1262
|
+
*/
|
|
1263
|
+
declare function SuggestionPills({ suggestions, onPick, loading, label, className, }: SuggestionPillsProps): react_jsx_runtime.JSX.Element | null;
|
|
1264
|
+
declare namespace SuggestionPills {
|
|
1265
|
+
var displayName: string;
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
/**
|
|
1269
|
+
* AiDraftCard — the "lit-from-within" slab that presents an AI-generated
|
|
1270
|
+
* message draft inside a composer.
|
|
1271
|
+
*
|
|
1272
|
+
* It owns four visual states behind one prop:
|
|
1273
|
+
* - `loading` / `refining` — a sparkle + shimmer skeleton over the flowing
|
|
1274
|
+
* neon `.ds-ai-surface`.
|
|
1275
|
+
* - `error` — a quiet destructive panel with an optional Retry and a
|
|
1276
|
+
* Dismiss.
|
|
1277
|
+
* - `ready` — the collapsible draft: header (sparkle, "AI Draft",
|
|
1278
|
+
* optional context line, collapse toggle), an optional subject line, the
|
|
1279
|
+
* draft `children`, and a footer `actions` slot.
|
|
1280
|
+
*
|
|
1281
|
+
* Presentational only — the consumer supplies the draft text as `children`
|
|
1282
|
+
* and the action buttons (Insert / Regenerate / Shorter / …) as `actions`.
|
|
1283
|
+
* The card re-expands automatically whenever fresh `children` arrive (keyed
|
|
1284
|
+
* off `resetCollapseKey`) so a refined draft is never hidden behind a stale
|
|
1285
|
+
* collapsed state.
|
|
1286
|
+
*
|
|
1287
|
+
* <AiDraftCard
|
|
1288
|
+
* state="ready"
|
|
1289
|
+
* contextLine="Replying to Jane"
|
|
1290
|
+
* subject="Re: Your 2024 return"
|
|
1291
|
+
* resetCollapseKey={draftText}
|
|
1292
|
+
* actions={<><Button size="sm">Insert</Button>…</>}
|
|
1293
|
+
* >
|
|
1294
|
+
* <p className="whitespace-pre-wrap">{draftText}</p>
|
|
1295
|
+
* </AiDraftCard>
|
|
1296
|
+
*
|
|
1297
|
+
* @since 1.5.0
|
|
1298
|
+
*/
|
|
1299
|
+
type AiDraftState = "loading" | "refining" | "error" | "ready";
|
|
1300
|
+
interface AiDraftCardProps {
|
|
1301
|
+
/** Which visual state to render. */
|
|
1302
|
+
state: AiDraftState;
|
|
1303
|
+
/** Header title. Default: `"AI Draft"`. */
|
|
1304
|
+
title?: string;
|
|
1305
|
+
/** Optional muted context line in the header (e.g. "Replying to Jane"). */
|
|
1306
|
+
contextLine?: ReactNode;
|
|
1307
|
+
/** Optional bold subject line shown above the body (email drafts). */
|
|
1308
|
+
subject?: ReactNode;
|
|
1309
|
+
/** The draft body — typically a `<p className="whitespace-pre-wrap">`. */
|
|
1310
|
+
children?: ReactNode;
|
|
1311
|
+
/** Footer action buttons (Insert / Regenerate / Discard …). */
|
|
1312
|
+
actions?: ReactNode;
|
|
1313
|
+
/** Error message — shown when `state="error"`. */
|
|
1314
|
+
error?: ReactNode;
|
|
1315
|
+
/** Retry handler — adds a Retry button to the error panel. */
|
|
1316
|
+
onRetry?: () => void;
|
|
1317
|
+
/** Dismiss handler for the error panel. */
|
|
1318
|
+
onDismiss?: () => void;
|
|
1319
|
+
/** Re-expands the card whenever this value changes (pass the draft text so
|
|
1320
|
+
* a freshly generated/refined draft is always revealed). */
|
|
1321
|
+
resetCollapseKey?: unknown;
|
|
1322
|
+
className?: string;
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
1326
|
+
* Owner: PRO communications, which decides to adopt, contribute or release
|
|
1327
|
+
* the name. Never removed before 3.0.
|
|
1328
|
+
*/
|
|
1329
|
+
declare function AiDraftCard({ state, title, contextLine, subject, children, actions, error, onRetry, onDismiss, resetCollapseKey, className, }: AiDraftCardProps): react_jsx_runtime.JSX.Element;
|
|
1330
|
+
declare namespace AiDraftCard {
|
|
1331
|
+
var displayName: string;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
/**
|
|
1335
|
+
* EmailMessageCard — renders an email message as an envelope-style card
|
|
1336
|
+
* (header strip / readable body / footer) inside a conversation thread,
|
|
1337
|
+
* replacing the "rich HTML stuffed into a chat bubble" anti-pattern.
|
|
1338
|
+
*
|
|
1339
|
+
* Anatomy:
|
|
1340
|
+
* - a meta line ("Name via Email · 3:42 PM") above the card,
|
|
1341
|
+
* - a tinted header strip with a mail glyph, the "EMAIL" eyebrow, the
|
|
1342
|
+
* subject, a "From …" / optional "Cc N" sub-line, and the time,
|
|
1343
|
+
* - a readable body (`children`) that auto-clamps past `clampHeight` with a
|
|
1344
|
+
* gradient fade and a "Show full email" toggle,
|
|
1345
|
+
* - an optional footer carrying `attachments`, a `status` slot, and
|
|
1346
|
+
* `actions` (e.g. a Reply button).
|
|
1347
|
+
*
|
|
1348
|
+
* Presentational only. The consumer sanitises and renders the email HTML as
|
|
1349
|
+
* `children`, supplies the avatar, and brings its own attachment chips /
|
|
1350
|
+
* status indicator / Reply control via slots. Direction flips the layout:
|
|
1351
|
+
* outbound aligns right with a brand-tinted border; inbound aligns left.
|
|
1352
|
+
*
|
|
1353
|
+
* <EmailMessageCard
|
|
1354
|
+
* direction="inbound"
|
|
1355
|
+
* senderName="Jane Cooper"
|
|
1356
|
+
* subject="Question about my W-2"
|
|
1357
|
+
* time="3:42 PM"
|
|
1358
|
+
* avatar={<Avatar name="Jane Cooper" size="xs" />}
|
|
1359
|
+
* ccCount={2}
|
|
1360
|
+
* attachments={<AttachmentChip … />}
|
|
1361
|
+
* actions={<Button size="sm" variant="outline">Reply</Button>}
|
|
1362
|
+
* >
|
|
1363
|
+
* <div dangerouslySetInnerHTML={{ __html: safeHtml }} />
|
|
1364
|
+
* </EmailMessageCard>
|
|
1365
|
+
*
|
|
1366
|
+
* @since 1.5.0
|
|
1367
|
+
*/
|
|
1368
|
+
interface EmailMessageCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
1369
|
+
/** Message direction — flips alignment and border treatment. */
|
|
1370
|
+
direction: "inbound" | "outbound";
|
|
1371
|
+
/** Sender display name. */
|
|
1372
|
+
senderName: string;
|
|
1373
|
+
/** Email subject — omitted for replies without one. */
|
|
1374
|
+
subject?: string;
|
|
1375
|
+
/** Pre-formatted send time (e.g. "3:42 PM"). */
|
|
1376
|
+
time: string;
|
|
1377
|
+
/** Channel label in the meta line. Default: `"Email"`. */
|
|
1378
|
+
via?: string;
|
|
1379
|
+
/** Avatar node — rendered for inbound messages only. */
|
|
1380
|
+
avatar?: ReactNode;
|
|
1381
|
+
/** Cc recipient count — shows a "Cc N" indicator when > 0. */
|
|
1382
|
+
ccCount?: number;
|
|
1383
|
+
/** Sanitised email body (HTML node or plain text). */
|
|
1384
|
+
children: ReactNode;
|
|
1385
|
+
/** Footer attachment chips. */
|
|
1386
|
+
attachments?: ReactNode;
|
|
1387
|
+
/** Footer status slot (delivery state). */
|
|
1388
|
+
status?: ReactNode;
|
|
1389
|
+
/** Footer actions (e.g. Reply). */
|
|
1390
|
+
actions?: ReactNode;
|
|
1391
|
+
/** Body height (px) above which the clamp/expand toggle appears. Default 240. */
|
|
1392
|
+
clampHeight?: number;
|
|
1393
|
+
}
|
|
1394
|
+
/**
|
|
1395
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
1396
|
+
* Owner: PRO communications, which decides to adopt, contribute or release
|
|
1397
|
+
* the name. Never removed before 3.0.
|
|
1398
|
+
*/
|
|
1399
|
+
declare function EmailMessageCard({ direction, senderName, subject, time, via, avatar, ccCount, children, attachments, status, actions, clampHeight, className, ...props }: EmailMessageCardProps): react_jsx_runtime.JSX.Element;
|
|
1400
|
+
declare namespace EmailMessageCard {
|
|
1401
|
+
var displayName: string;
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
/**
|
|
1405
|
+
* SignatureEditor — the panel chrome for editing a personal email signature
|
|
1406
|
+
* (rich text, links, and an inline banner image). Designed to live inside a
|
|
1407
|
+
* Popover anchored to a "Pen" affordance in the email composer, but it's just
|
|
1408
|
+
* a self-contained card so it works in a Dialog or settings page too.
|
|
1409
|
+
*
|
|
1410
|
+
* Like `MessageComposer`, DS owns the CHROME and the consumer owns the
|
|
1411
|
+
* EDITOR: pass your rich-text editor (Tiptap, contenteditable, etc.) as
|
|
1412
|
+
* `children`. The panel supplies the titled header with an "Add image"
|
|
1413
|
+
* action, a body region (with a loading skeleton), and a Save / Insert
|
|
1414
|
+
* footer. All actions are slots/handlers — persistence, image upload, and
|
|
1415
|
+
* insertion logic stay with the consumer.
|
|
1416
|
+
*
|
|
1417
|
+
* <Popover>
|
|
1418
|
+
* <PopoverContent className="w-96 p-0">
|
|
1419
|
+
* <SignatureEditor
|
|
1420
|
+
* loading={loading}
|
|
1421
|
+
* addingImage={uploading}
|
|
1422
|
+
* onAddImage={pickImage}
|
|
1423
|
+
* saving={saving}
|
|
1424
|
+
* onSave={save}
|
|
1425
|
+
* onInsert={insert}
|
|
1426
|
+
* >
|
|
1427
|
+
* <RichTextEditor ref={editorRef} />
|
|
1428
|
+
* </SignatureEditor>
|
|
1429
|
+
* </PopoverContent>
|
|
1430
|
+
* </Popover>
|
|
1431
|
+
*
|
|
1432
|
+
* @since 1.5.0
|
|
1433
|
+
*/
|
|
1434
|
+
interface SignatureEditorProps {
|
|
1435
|
+
/** Panel title. Default: `"Email signature"`. */
|
|
1436
|
+
title?: string;
|
|
1437
|
+
/** The editor — a rich-text input the consumer owns. */
|
|
1438
|
+
children: ReactNode;
|
|
1439
|
+
/** Show a loading skeleton in place of the editor (while the saved
|
|
1440
|
+
* signature is being fetched). */
|
|
1441
|
+
loading?: boolean;
|
|
1442
|
+
/** "Add image" handler — hides the button when omitted. */
|
|
1443
|
+
onAddImage?: () => void;
|
|
1444
|
+
/** Spinner + disabled state on the "Add image" button while uploading. */
|
|
1445
|
+
addingImage?: boolean;
|
|
1446
|
+
/** Save handler — hides the Save button when omitted. */
|
|
1447
|
+
onSave?: () => void;
|
|
1448
|
+
/** Spinner + disabled state on Save. */
|
|
1449
|
+
saving?: boolean;
|
|
1450
|
+
/** Insert handler — hides the Insert button when omitted. */
|
|
1451
|
+
onInsert?: () => void;
|
|
1452
|
+
className?: string;
|
|
1453
|
+
}
|
|
1454
|
+
/**
|
|
1455
|
+
* @deprecated Frozen in `/legacy` (W8-09): no known consumer, no feature work.
|
|
1456
|
+
* Owner: PRO communications, which decides to adopt, contribute or release
|
|
1457
|
+
* the name. Never removed before 3.0.
|
|
1458
|
+
*/
|
|
1459
|
+
declare function SignatureEditor({ title, children, loading, onAddImage, addingImage, onSave, saving, onInsert, className, }: SignatureEditorProps): react_jsx_runtime.JSX.Element;
|
|
1460
|
+
declare namespace SignatureEditor {
|
|
1461
|
+
var displayName: string;
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
export { AIReceiptPanel, type AIReceiptPanelProps, type AIReceiptResult, AiDraftCard, type AiDraftCardProps, type AiDraftState, AttentionItem, type AttentionItemProps, type AttentionUrgency, Blockquote, BottomNav, type BottomNavProps, type BottomNavTab, CategoryDivider, type CategoryDividerProps, CategoryTag, type CategoryTagProps, type CategoryTone, type ChannelTabItem, ChannelTabs, type ChannelTabsProps, type ChannelTone, ClientRailGroupHeader, type ClientRailGroupHeaderProps, ClientRailItem, type ClientRailItemProps, DashGrid, type DashGridProps, type DashWidget, DocumentChecklist, type DocumentChecklistFile, type DocumentChecklistItem, type DocumentChecklistProps, type DocumentChecklistStatus, DocumentFileCard, type DocumentFileCardProps, DocumentFileLine, type DocumentFileLineProps, DocumentFileRow, type DocumentFileRowProps, type DocumentItemState, type DocumentRequestActivityKind, type DocumentRequestAssigneeOption, DocumentRequestCard, type DocumentRequestCardProps, DocumentRequestDetail, type DocumentRequestDetailActivityEvent, type DocumentRequestDetailComment, type DocumentRequestDetailDoc, type DocumentRequestDetailProps, type DocumentRequestDetailTab, DocumentRequestField, type DocumentRequestFieldProps, type DocumentRequestItemSummary, type DocumentRequestRequestedItem, type DocumentRequestReviewStatusOption, type DocumentRequestTone, DocumentRequestUpload, type DocumentRequestUploadFile, type DocumentRequestUploadProps, type DocumentSource, DocumentSourceFilter, type DocumentSourceFilterProps, type DocumentSourceFilterValue, DocumentSourceTag, type DocumentSourceTagProps, DocumentsWorkspaceLayout, type DocumentsWorkspaceLayoutProps, EmailMessageCard, type EmailMessageCardProps, EngagementCard, type EngagementCardProps, EngagementTimeline, type EngagementTimelineProps, EngagementTimelineStep, type EngagementTimelineStepProps, IntentBadge, type IntentBadgeProps, type IntentTone, type MissingDocumentItem, MissingDocumentsPanel, type MissingDocumentsPanelProps, NewMenu, type NewMenuAction, type NewMenuGroup, type NewMenuProps, type PillStatus, Section, SectionHead, SectionHeader, SignatureEditor, type SignatureEditorProps, Stat, StatusPill, type StatusPillProps, SuggestionPills, type SuggestionPillsProps, TeamMemberSelect, TimeLogger, TimeLoggerActions, type TimeLoggerActionsProps, TimeLoggerBillable, type TimeLoggerBillableProps, TimeLoggerContextRow, type TimeLoggerContextRowProps, TimeLoggerEntry, TimeLoggerEntryList, type TimeLoggerEntryListProps, type TimeLoggerEntryProps, TimeLoggerField, type TimeLoggerFieldProps, TimeLoggerFooter, type TimeLoggerFooterProps, TimeLoggerHeader, type TimeLoggerHeaderProps, TimeLoggerNotes, type TimeLoggerNotesProps, type TimeLoggerPhase, type TimeLoggerProps, type TimeLoggerTier, TimeLoggerTimer, type TimeLoggerTimerProps, type TimelineState, type UseStopwatchReturn, formatClock, formatCurrency, formatDuration, parseDuration, useStopwatch };
|