@assure-one/design-system 1.37.0 → 1.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +60 -16
  2. package/codemods/README.md +90 -16
  3. package/codemods/lib/entry-map.mjs +315 -0
  4. package/codemods/lib/registry.mjs +2 -0
  5. package/codemods/transforms/cm-01-entry-imports.mjs +202 -0
  6. package/codemods/transforms/cm-18-data-table-parts.mjs +234 -0
  7. package/dist/brand-theme-B6rem2II.d.ts +59 -0
  8. package/dist/css/components.css +1 -1
  9. package/dist/css/legacy-aliases.css +8 -0
  10. package/dist/css/tokens.css +14 -6
  11. package/dist/design-system-provider-BM_F1C13.d.ts +143 -0
  12. package/dist/icons/index.d.ts +441 -3
  13. package/dist/icons/index.js.map +1 -1
  14. package/dist/index-BAAuIQqP.d.ts +2579 -0
  15. package/dist/index-DxBjmBBp.d.ts +1038 -0
  16. package/dist/index.d.ts +1017 -3293
  17. package/dist/index.js +7598 -5906
  18. package/dist/index.js.map +1 -1
  19. package/dist/legacy/index.d.ts +9 -0
  20. package/dist/legacy/index.js +3 -0
  21. package/dist/legacy/index.js.map +1 -0
  22. package/dist/next/index.d.ts +2 -1
  23. package/dist/reference-BkDbrPIB.d.ts +310 -0
  24. package/dist/styles.css +1 -1
  25. package/dist/suite/index.d.ts +4 -0
  26. package/dist/suite/index.js +3 -0
  27. package/dist/suite/index.js.map +1 -0
  28. package/dist/{system-CyAVbHhM.d.ts → system-DfJIVBlJ.d.ts} +1 -310
  29. package/dist/tokens/index.d.ts +3 -61
  30. package/dist/tokens/index.js +3 -3
  31. package/dist/tokens/index.js.map +1 -1
  32. package/dist/{design-system-provider-C8UlFe52.d.ts → types-k_kjwipx.d.ts} +69 -142
  33. package/dist/vocab-DornLJbW.d.ts +76 -0
  34. package/docs/components.md +62 -32
  35. package/docs/components.registry.json +2415 -465
  36. package/docs/for-ai-agents.md +2 -0
  37. package/eslint-config/index.mjs +210 -0
  38. package/eslint-config/stylelint-rules.mjs +54 -0
  39. package/eslint-config/stylelint.mjs +73 -0
  40. package/package.json +21 -3
  41. package/public/brand/assure-audit-mark.svg +6 -0
  42. package/public/brand/assure-audit.svg +8 -0
  43. package/public/brand/assure-books-mark.svg +6 -0
  44. package/public/brand/assure-books.svg +8 -0
  45. package/public/brand/assure-pro-mark.svg +6 -0
  46. package/public/brand/assure-pro.svg +8 -0
  47. package/public/brand/assure-tax-mark.svg +6 -0
  48. package/public/brand/assure-tax.svg +8 -0
  49. package/public/brand/mycpe-teams-mark.svg +36 -0
  50. package/public/brand/mycpe-teams.svg +66 -0
  51. package/dist/index-vztxMSfl.d.ts +0 -512
@@ -0,0 +1,1038 @@
1
+ import * as React$1 from 'react';
2
+ import { ReactNode } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+ import { l as ComingSoonMessages } from './types-k_kjwipx.js';
5
+
6
+ interface BrandIconProps extends React.SVGAttributes<SVGElement> {
7
+ size?: number;
8
+ }
9
+ declare function AssureProBrandIcon({ size, ...props }: BrandIconProps): react_jsx_runtime.JSX.Element;
10
+ declare function AssureAuditBrandIcon({ size, ...props }: BrandIconProps): react_jsx_runtime.JSX.Element;
11
+ declare function AssureBooksBrandIcon({ size, ...props }: BrandIconProps): react_jsx_runtime.JSX.Element;
12
+ declare function AssureTaxBrandIcon({ size, ...props }: BrandIconProps): react_jsx_runtime.JSX.Element;
13
+
14
+ type ClientSelectOption = {
15
+ id: string;
16
+ label: string;
17
+ email?: string;
18
+ };
19
+ interface ClientSelectProps {
20
+ clients: ClientSelectOption[];
21
+ value: string | null;
22
+ onChange: (clientId: string | null) => void;
23
+ name?: string;
24
+ error?: string;
25
+ className?: string;
26
+ placeholder?: string;
27
+ }
28
+ declare function ClientSelect({ clients, value, onChange, name, error, className, placeholder, }: ClientSelectProps): react_jsx_runtime.JSX.Element;
29
+ declare namespace ClientSelect {
30
+ var displayName: string;
31
+ }
32
+
33
+ /**
34
+ * ComingSoon — placeholder pattern for unreleased modules. Pro-tinted icon
35
+ * halo, dashed Assure border, "In Development" pill.
36
+ *
37
+ * Public API preserved: `icon`, `title`, `description`, `features`. The two
38
+ * strings the component owned itself — the "Coming soon" eyebrow and the
39
+ * "In Development" pill — are injectable through `messages` (prop >
40
+ * `DesignSystemProvider messages.comingSoon` > English, W5-20/W8-08); the
41
+ * defaults are today's text, so nothing changes without an override.
42
+ */
43
+ interface ComingSoonProps extends React.HTMLAttributes<HTMLDivElement> {
44
+ icon: React.ReactNode;
45
+ title: string;
46
+ description: string;
47
+ features: string[];
48
+ /** The eyebrow and pill copy. Defaults to English ("Coming soon" / "In Development"). */
49
+ messages?: Partial<ComingSoonMessages>;
50
+ }
51
+ declare const ComingSoon: React$1.ForwardRefExoticComponent<ComingSoonProps & React$1.RefAttributes<HTMLDivElement>>;
52
+
53
+ /**
54
+ * Logo — Assure suite wordmark. Renders the official product artwork when
55
+ * available, and falls back to a brand glyph + text lockup otherwise.
56
+ *
57
+ * The artwork ships in the package (`public/brand/*.svg`, W8-07) but is served
58
+ * by the host: copy it into the app's public folder, or point
59
+ * `setAssetBasePath` at wherever it is served from. Nothing breaks if you do
60
+ * neither — an image that fails to load falls back to the glyph + text lockup.
61
+ *
62
+ * The product suffix is configurable so the same component serves every
63
+ * Assure product. The default preserves the original "Assure Pro" output —
64
+ * existing consumers do not need to change anything.
65
+ *
66
+ * Public API:
67
+ * - `size`, `href`, `showText`, `inverted` (visual)
68
+ * - `productName` (the suffix text; `null` renders just "Assure")
69
+ * - `className`, `iconClassName`, `textClassName` (style overrides)
70
+ *
71
+ * The link and the wordmark image are the provider's `linkComponent` /
72
+ * `imageComponent` when a `DesignSystemProvider` supplies them (W5-21,
73
+ * ADR-010), else `next/link` / `next/image`; the static imports stay until 2.0
74
+ * (C-NEXT-PEER), so a Next.js app without a provider is unchanged.
75
+ *
76
+ * By default the lockup is a link (`href="/"`). Pass `href={null}` to render a
77
+ * non-interactive `<span>` wrapper instead — required when embedding the lockup
78
+ * inside another interactive element (a menu trigger `<button>`, a
79
+ * `DropdownMenuItem`) where a nested `<a>` would be invalid HTML or would race
80
+ * the parent's click handler.
81
+ */
82
+ declare const sizeStyles: {
83
+ readonly sm: {
84
+ readonly icon: 20;
85
+ readonly text: "ds:text-sm";
86
+ readonly gap: "ds:gap-2";
87
+ readonly assetHeight: 24;
88
+ };
89
+ readonly md: {
90
+ readonly icon: 24;
91
+ readonly text: "ds:text-[17px]";
92
+ readonly gap: "ds:gap-2.5";
93
+ readonly assetHeight: 30;
94
+ };
95
+ readonly lg: {
96
+ readonly icon: 32;
97
+ readonly text: "ds:text-xl";
98
+ readonly gap: "ds:gap-3";
99
+ readonly assetHeight: 40;
100
+ };
101
+ readonly xl: {
102
+ readonly icon: 40;
103
+ readonly text: "ds:text-2xl";
104
+ readonly gap: "ds:gap-3.5";
105
+ readonly assetHeight: 48;
106
+ };
107
+ };
108
+ interface LogoProps {
109
+ size?: keyof typeof sizeStyles;
110
+ /** Link target for the lockup. Pass `null` to render a non-interactive `<span>` wrapper (for embedding inside another interactive element). Defaults to `"/"`. */
111
+ href?: string | null;
112
+ showText?: boolean;
113
+ className?: string;
114
+ iconClassName?: string;
115
+ textClassName?: string;
116
+ /**
117
+ * Product suffix rendered after "Assure" (e.g. "Pro", "Audit"). Pass `null`
118
+ * to render just "Assure". A few products are standalone brands whose
119
+ * wordmark is the complete identity (e.g. "Teams" → myCPE Teams) — those
120
+ * render their own name with no "Assure" prefix. Defaults to "Pro" for
121
+ * backwards compatibility.
122
+ */
123
+ productName?: string | null;
124
+ /** When true, render on dark/brand surfaces (white "Assure" + lighter suffix). */
125
+ inverted?: boolean;
126
+ }
127
+ declare function Logo({ size, href, showText, className, iconClassName, textClassName, productName, inverted, }: LogoProps): react_jsx_runtime.JSX.Element;
128
+
129
+ /**
130
+ * AgreementViewer — the chrome + navigation shell for a multi-step, branded
131
+ * agreement / proposal (the "Signed Agreement Viewer"). It owns the header,
132
+ * the firm-branded cover rail, the section stepper, the signed / awaiting
133
+ * banner, the prev·dots·next footer, and the step state. Each step's body is
134
+ * consumer-owned `content` — the shell is deliberately content-agnostic so the
135
+ * same frame drives a tax proposal, an engagement letter, or an NDA.
136
+ *
137
+ * Step 0 is the cover: it shows the gradient firm rail. Steps 1+ show the
138
+ * light section rail with the stepper. One root attribute drives both:
139
+ * `data-view="cover" | "inner"`, derived from the current step.
140
+ *
141
+ * Branding: the whole composite themes from a single accent. Omit `accent` to
142
+ * inherit the suite accent; pass any CSS color (`accent="#1f8a5b"`) and the
143
+ * rail gradient, tints, stepper, dots, and CTAs all retrack — every shade is
144
+ * derived in `tokens.css` via color-mix off `--av-accent`.
145
+ *
146
+ * <AgreementViewer
147
+ * title="Comprehensive Individual Tax Services"
148
+ * firm={{ name: "Patel & Associates CPA", initials: "P&A" }}
149
+ * steps={[
150
+ * { id: "welcome", label: "Welcome", content: <Welcome /> },
151
+ * { id: "package", label: "Select a package", content: <Packages /> },
152
+ * …
153
+ * ]}
154
+ * onDownload={downloadPdf}
155
+ * />
156
+ *
157
+ * @since 1.12.0
158
+ */
159
+ type AgreementStatus = "signed" | "awaiting";
160
+ interface AgreementStep {
161
+ /** Stable key + stepper/dot identity. */
162
+ id: string;
163
+ /** Section label shown in the stepper rail. */
164
+ label: string;
165
+ /** Node glyph in the stepper; defaults to the step number (or a home glyph
166
+ * for the cover step). */
167
+ icon?: ReactNode;
168
+ /** The step body — consumer-owned. */
169
+ content: ReactNode;
170
+ /** Render this step's body full-bleed: the content pane drops its padding so
171
+ * a cover or hero can reach the card edges. Default false.
172
+ * @since 1.38.0 */
173
+ bleed?: boolean;
174
+ }
175
+ interface AgreementFirm {
176
+ /** Firm name shown on both rails. */
177
+ name: string;
178
+ /** Logo monogram (e.g. "P&A"). Falls back to the first letter of `name`. */
179
+ initials?: string;
180
+ /** Short line under the firm name on the cover rail. */
181
+ tagline?: string;
182
+ /** Subtitle under the firm name on the inner rail. Default "Your proposal". */
183
+ subtitle?: string;
184
+ /** Contact rows pinned to the bottom of the cover rail. */
185
+ contact?: {
186
+ phone?: ReactNode;
187
+ email?: ReactNode;
188
+ website?: ReactNode;
189
+ };
190
+ }
191
+ interface AgreementViewerProps {
192
+ /** Header title (the agreement name). */
193
+ title: ReactNode;
194
+ /** Small overline above the title. Default "Signed agreement". */
195
+ overline?: ReactNode;
196
+ /** Steps rendered as panes; index 0 is the cover. */
197
+ steps: AgreementStep[];
198
+ /** Firm branding for the rails. */
199
+ firm: AgreementFirm;
200
+ /** "signed" (read-only, all sections complete) or "awaiting" (in progress).
201
+ * Drives the banner tone + which stepper nodes read as done. Default "signed". */
202
+ status?: AgreementStatus;
203
+ /** Banner body override. Omit for the status-derived default; pass `null` to
204
+ * hide the banner entirely. */
205
+ banner?: ReactNode;
206
+ /** Brand accent override — any CSS color. Defaults to the suite accent. */
207
+ accent?: string;
208
+ /** Show the gradient firm rail on the cover step. Set false for a full-bleed
209
+ * cover (e.g. a centered title page). Default true. */
210
+ coverRail?: boolean;
211
+ /** Controlled current step index. */
212
+ step?: number;
213
+ /** Initial step when uncontrolled. Default 0. */
214
+ defaultStep?: number;
215
+ /** Notified on every step change (controlled or not). */
216
+ onStepChange?: (step: number) => void;
217
+ /** "Download PDF" handler — hides the button when omitted. */
218
+ onDownload?: () => void;
219
+ /** Close handler — hides the close button when omitted. */
220
+ onClose?: () => void;
221
+ /** Extra header actions, placed left of Download / Close. */
222
+ headerActions?: ReactNode;
223
+ /** Disable the footer "Next" control — e.g. this step has unmet requirements.
224
+ * Default false.
225
+ * @since 1.38.0 */
226
+ nextDisabled?: boolean;
227
+ /** Why "Next" is disabled. Kept in a polite live region under the footer and
228
+ * wired to the Next control with `aria-describedby`; the text only appears
229
+ * while `nextDisabled` is true.
230
+ * @since 1.38.0 */
231
+ nextDisabledReason?: ReactNode;
232
+ /** Slot under the footer nav row — a validation summary, a secondary CTA, or
233
+ * a legal note that should sit with the navigation rather than in the step.
234
+ * @since 1.38.0 */
235
+ footer?: ReactNode;
236
+ className?: string;
237
+ }
238
+ declare const AgreementViewer: React$1.ForwardRefExoticComponent<AgreementViewerProps & React$1.RefAttributes<HTMLDivElement>>;
239
+ interface AgreementPaneHeadingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
240
+ /** Accent overline, e.g. "Step 3 of 6". */
241
+ overline?: ReactNode;
242
+ /** The pane title. */
243
+ title: ReactNode;
244
+ /** Supporting line under the title. */
245
+ subtitle?: ReactNode;
246
+ }
247
+ declare const AgreementPaneHeading: React$1.ForwardRefExoticComponent<AgreementPaneHeadingProps & React$1.RefAttributes<HTMLDivElement>>;
248
+
249
+ /**
250
+ * Proposal pricing building-blocks — the client-preview pieces a signing
251
+ * package's "Services & Pricing" config renders into. They compose inside an
252
+ * `AgreementViewer` step (where they inherit the firm `--av-accent`), or
253
+ * standalone inside a `[data-av-scope]` wrapper. Accent classes carry a suite
254
+ * fallback so a bare block still renders un-branded rather than transparent.
255
+ *
256
+ * - `ProposalServiceRow` — one line item (name · price · cadence, optional
257
+ * struck-through original for a discount).
258
+ * - `ProposalPackageCard` — a package the client chooses; `mode` switches the
259
+ * builder's three choice models (pick-one / add-on /
260
+ * always-included).
261
+ * - `ProposalPricingSummary`— the "review total" block: what's included, the
262
+ * billing schedule, discount savings, tax, total.
263
+ *
264
+ * @since 1.12.0
265
+ */
266
+ interface ProposalServiceRowProps extends React.HTMLAttributes<HTMLDivElement> {
267
+ /** Service name — the primary line. */
268
+ name: ReactNode;
269
+ /** Optional secondary description shown to the client. */
270
+ description?: ReactNode;
271
+ /** Formatted price, e.g. "$1,300" or "$50/mo". */
272
+ price?: ReactNode;
273
+ /** Pre-discount price, struck through before `price`. */
274
+ originalPrice?: ReactNode;
275
+ /** Leading marker. "check" (accent tick) or "none". Default "check". */
276
+ marker?: "check" | "none";
277
+ }
278
+ declare const ProposalServiceRow: React$1.ForwardRefExoticComponent<ProposalServiceRowProps & React$1.RefAttributes<HTMLDivElement>>;
279
+ type ProposalPackageMode = "choice" | "addon" | "included";
280
+ interface ProposalPackageCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
281
+ /** Package name. */
282
+ name: ReactNode;
283
+ /** Short count line, e.g. "Includes 4 services". */
284
+ summary?: ReactNode;
285
+ /** Formatted package price. */
286
+ price?: ReactNode;
287
+ /** Caption under the price, e.g. "Package total". */
288
+ priceCaption?: ReactNode;
289
+ /** Pre-discount price, struck through. */
290
+ originalPrice?: ReactNode;
291
+ /** Savings line, e.g. "You save $200". */
292
+ savings?: ReactNode;
293
+ /** How the client chooses this package. Default "choice". */
294
+ mode?: ProposalPackageMode;
295
+ /** Selected / added state (drives accent border + control label). */
296
+ selected?: boolean;
297
+ /** Corner badge, e.g. "Most popular". A "Selected"/"Added" badge is implied. */
298
+ badge?: ReactNode;
299
+ /** Label above the service rows. Default "Included services". */
300
+ servicesLabel?: ReactNode;
301
+ /** Service rows (`ProposalServiceRow`) or any content. */
302
+ children?: ReactNode;
303
+ /**
304
+ * Cap the service list's height (any CSS length, e.g. `"14rem"`). Past it the
305
+ * list scrolls rather than growing, so a package with many services keeps its
306
+ * select control in view instead of pushing it below the fold — and cards
307
+ * sitting in a row stay the same height.
308
+ *
309
+ * Omit for the previous behaviour: the list grows to fit.
310
+ */
311
+ servicesMaxHeight?: string;
312
+ /** Select / toggle handler — makes the card interactive. */
313
+ onSelect?: () => void;
314
+ disabled?: boolean;
315
+ }
316
+ declare const ProposalPackageCard: React$1.ForwardRefExoticComponent<ProposalPackageCardProps & React$1.RefAttributes<HTMLDivElement>>;
317
+ type ProposalBillingMode = "now" | "auto" | "review" | "manual" | "onetime";
318
+ interface ProposalBillingRow {
319
+ /** e.g. "Due today", "First payment", "Then, monthly", "Each invoice". */
320
+ label: ReactNode;
321
+ /** Formatted amount, e.g. "$2,526". */
322
+ amount?: ReactNode;
323
+ /** Cadence beside the amount, e.g. "/mo". */
324
+ cadence?: ReactNode;
325
+ /** Plain-language explanation of how/when this is charged. */
326
+ detail: ReactNode;
327
+ /** Drives the row icon. Default "now". */
328
+ mode?: ProposalBillingMode;
329
+ }
330
+ interface ProposalBillingTermsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
331
+ /** Heading. Default "How billing works". */
332
+ title?: ReactNode;
333
+ /** The billing steps the firm configured. */
334
+ rows: ProposalBillingRow[];
335
+ /** Show the "set by your firm — review only" footer. Default true. */
336
+ locked?: boolean;
337
+ }
338
+ /**
339
+ * ProposalBillingTerms — a read-only explanation of the payment arrangement the
340
+ * firm configured (auto-pay, charge-after-review, manual invoicing, one-time,
341
+ * or a mix). The client can see exactly what will be charged and when, but
342
+ * can't change it — the `locked` footer makes that explicit.
343
+ */
344
+ declare const ProposalBillingTerms: React$1.ForwardRefExoticComponent<ProposalBillingTermsProps & React$1.RefAttributes<HTMLDivElement>>;
345
+ interface ProposalAddOnProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onToggle" | "name"> {
346
+ /** Add-on name. */
347
+ name: ReactNode;
348
+ /** Short description / cadence note under the name. */
349
+ description?: ReactNode;
350
+ /** Formatted price, e.g. "$150" or "$200". */
351
+ price?: ReactNode;
352
+ /** Cadence / billing note beside the price, e.g. "/mo" or "One-time". */
353
+ cadence?: ReactNode;
354
+ /** Added state. */
355
+ selected?: boolean;
356
+ /** Toggle handler. */
357
+ onToggle?: () => void;
358
+ }
359
+ /**
360
+ * ProposalAddOn — a compact, checkbox-style toggle for an optional add-on.
361
+ * Lighter than `ProposalPackageCard`: add-ons are secondary extras, so the
362
+ * whole row is one toggle (no separate badge + button), price right-aligned.
363
+ */
364
+ declare const ProposalAddOn: React$1.ForwardRefExoticComponent<ProposalAddOnProps & React$1.RefAttributes<HTMLButtonElement>>;
365
+ interface ProposalPricingSummaryProps extends React.HTMLAttributes<HTMLDivElement> {
366
+ /** "What's included" rows (`ProposalServiceRow`) — rendered in a 2-col grid. */
367
+ children?: ReactNode;
368
+ /** Billing schedule callout. */
369
+ billing?: {
370
+ title?: ReactNode;
371
+ caption?: ReactNode;
372
+ rows?: {
373
+ label: ReactNode;
374
+ value: ReactNode;
375
+ }[];
376
+ };
377
+ /** Discount savings line, e.g. "You save $200 (annual)". */
378
+ savings?: ReactNode;
379
+ /** Tax line value, e.g. "$192.00". `taxLabel` defaults to "Tax". */
380
+ tax?: ReactNode;
381
+ taxLabel?: ReactNode;
382
+ /** Pre-discount total, struck through next to `total`. */
383
+ originalTotal?: ReactNode;
384
+ /** Total due — used for a single-cadence engagement. Omit when `schedule` is set. */
385
+ total?: ReactNode;
386
+ /** Cadence suffix after the total, e.g. "/ year". */
387
+ cadence?: ReactNode;
388
+ /** Total row label. Default "Total due". */
389
+ totalLabel?: ReactNode;
390
+ /** First-payment + recurring breakdown. Use instead of `total` when billing
391
+ * mixes cadences (e.g. a yearly package + a monthly add-on): the amount due
392
+ * at signing reads prominently, with the ongoing charges listed below. */
393
+ schedule?: {
394
+ /** Amount charged at signing — the prominent figure. */
395
+ dueToday: ReactNode;
396
+ /** Label for the due-now figure. Default "Due today". */
397
+ dueTodayLabel?: ReactNode;
398
+ /** Caption under the due-now figure, e.g. "First payment, on acceptance". */
399
+ dueTodayCaption?: ReactNode;
400
+ /** Ongoing recurring charges, e.g. [{ label: "Then", amount: "$2,400", cadence: "/ year" }]. */
401
+ then?: {
402
+ label?: ReactNode;
403
+ amount: ReactNode;
404
+ cadence?: ReactNode;
405
+ }[];
406
+ };
407
+ }
408
+ declare const ProposalPricingSummary: React$1.ForwardRefExoticComponent<ProposalPricingSummaryProps & React$1.RefAttributes<HTMLDivElement>>;
409
+
410
+ /**
411
+ * Proposal content building-blocks — the optional pieces a signing package's
412
+ * "custom pages" and recipient config render into on the client preview.
413
+ *
414
+ * - `ProposalCustomPage` — a titled custom page; `kind` switches the builder's
415
+ * Video / PDF / Text page types. The body (a video
416
+ * poster, a `PdfPreview`, or rich text) is slotted.
417
+ * - `ProposalNote` — a short callout shown alongside the agreement.
418
+ * - `ProposalSignerList` — the recipients/signers with role + status.
419
+ *
420
+ * Accent classes carry a suite fallback, so a bare block renders un-branded
421
+ * outside an `AgreementViewer` / `[data-av-scope]`.
422
+ *
423
+ * @since 1.12.0
424
+ */
425
+ type ProposalCustomPageKind = "video" | "pdf" | "text";
426
+ interface ProposalCustomPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
427
+ /** Builder custom-page type. */
428
+ kind: ProposalCustomPageKind;
429
+ /** Page title. */
430
+ title: ReactNode;
431
+ /** Supporting line under the title. */
432
+ caption?: ReactNode;
433
+ /** Overline label; defaults by kind ("Video" / "Document" / "Read"). */
434
+ label?: ReactNode;
435
+ /** Poster image for `kind="video"` — shown with a play overlay when no
436
+ * `children` are supplied. */
437
+ poster?: string;
438
+ /** Play handler — makes the video poster an actual button. */
439
+ onPlay?: () => void;
440
+ /** Body: a `PdfPreview`, rich text, or a custom embed. Replaces the built-in
441
+ * video poster when provided. */
442
+ children?: ReactNode;
443
+ }
444
+ declare const ProposalCustomPage: React$1.ForwardRefExoticComponent<ProposalCustomPageProps & React$1.RefAttributes<HTMLDivElement>>;
445
+ interface ProposalNoteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
446
+ /** Optional bold lead line. */
447
+ title?: ReactNode;
448
+ /** Note body. */
449
+ children: ReactNode;
450
+ /** Visual tone. Default "accent". */
451
+ tone?: "accent" | "info";
452
+ /** Leading icon; defaults to an info glyph. */
453
+ icon?: ReactNode;
454
+ }
455
+ declare const ProposalNote: React$1.ForwardRefExoticComponent<ProposalNoteProps & React$1.RefAttributes<HTMLDivElement>>;
456
+ type ProposalSignerStatus = "signed" | "pending" | "viewed";
457
+ interface ProposalSigner {
458
+ name: string;
459
+ email?: string;
460
+ /** Role, e.g. "Signer", "Approver", "CC". */
461
+ role?: string;
462
+ status?: ProposalSignerStatus;
463
+ /** Status timestamp for the firm tracking view, e.g. "Signed Jun 6, 2:14 PM". */
464
+ at?: ReactNode;
465
+ }
466
+ interface ProposalSignerListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
467
+ signers: ProposalSigner[];
468
+ /** Section label. Default "Recipients". */
469
+ title?: ReactNode;
470
+ }
471
+ declare const ProposalSignerList: React$1.ForwardRefExoticComponent<ProposalSignerListProps & React$1.RefAttributes<HTMLDivElement>>;
472
+
473
+ /**
474
+ * Proposal signing building-blocks — the client-preview pieces for the
475
+ * agreement's final step.
476
+ *
477
+ * - `ProposalSignatureBlock` — the type/draw signature area; `signed` flips it
478
+ * to a read-only signed preview.
479
+ * - `ProposalConsentGate` — the "require explicit approval before signing"
480
+ * checkbox that gates the Sign CTA.
481
+ * - `ProposalPaymentCapture` — the "payment at signing" card/bank capture block.
482
+ *
483
+ * Presentational: persistence, signature canvas, and payment tokenization stay
484
+ * with the consumer. Accent classes carry a suite fallback.
485
+ *
486
+ * @since 1.12.0
487
+ */
488
+ interface ProposalSignatureBlockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
489
+ /** Read-only signed preview — the recorded signer name + initials. */
490
+ signed?: boolean;
491
+ /** Recorded signer name (used in the `signed` read-only preview). */
492
+ name?: string;
493
+ /** Recorded initials; defaults to the name's initials. */
494
+ initials?: string;
495
+ /** Initial typed name when interactive (defaults to blank — the signer types). */
496
+ defaultName?: string;
497
+ /** Reports the typed name + initials as the signer types (interactive). */
498
+ onChange?: (value: {
499
+ name: string;
500
+ initials: string;
501
+ }) => void;
502
+ /** Placeholder shown in the signature face + name field when empty. */
503
+ placeholder?: string;
504
+ /** CSS font-family for the rendered signature face. Default a serif. */
505
+ signatureFont?: string;
506
+ /** Footer slot — typically the Sign CTA or a signed-on note. */
507
+ footer?: ReactNode;
508
+ /** Drop the Type / Draw tab strip — for hosts that own the mode switch
509
+ * themselves, or that only offer one mode. Default false.
510
+ * @since 1.38.0 */
511
+ hideModeTabs?: boolean;
512
+ }
513
+ declare const ProposalSignatureBlock: React$1.ForwardRefExoticComponent<ProposalSignatureBlockProps & React$1.RefAttributes<HTMLDivElement>>;
514
+ interface ProposalConsentGateProps extends React.HTMLAttributes<HTMLDivElement> {
515
+ /** Consent label (the explicit-approval statement). */
516
+ children: ReactNode;
517
+ /** Checkbox state. */
518
+ checked?: boolean;
519
+ onCheckedChange?: (checked: boolean) => void;
520
+ /** Already-signed read-only state — shows the signed note instead of the CTA. */
521
+ signed?: boolean;
522
+ /** Note shown when `signed`, e.g. "Signed on June 6, 2026". */
523
+ signedNote?: ReactNode;
524
+ /** Sign CTA handler — renders the button (disabled until `checked`). */
525
+ onSign?: () => void;
526
+ /** Sign CTA label. Default "Sign & approve". */
527
+ signLabel?: ReactNode;
528
+ /** Extra disable condition for the Sign CTA, e.g. a name not yet typed. */
529
+ disabled?: boolean;
530
+ }
531
+ declare const ProposalConsentGate: React$1.ForwardRefExoticComponent<ProposalConsentGateProps & React$1.RefAttributes<HTMLDivElement>>;
532
+ interface ProposalPaymentCaptureProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
533
+ /** Heading. Default "Payment at signing". */
534
+ title?: ReactNode;
535
+ /** Amount captured at signing, e.g. "$2,400". */
536
+ amount?: ReactNode;
537
+ /** Caption under the title, e.g. "Billed today on acceptance". */
538
+ caption?: ReactNode;
539
+ /** Method icon hint. Default "card". */
540
+ method?: "card" | "bank";
541
+ /** Saved method last-4 — renders a read-only "•••• 4242" line. */
542
+ capturedLast4?: string;
543
+ /** Custom form fields (replaces the placeholder when provided). */
544
+ children?: ReactNode;
545
+ }
546
+ declare const ProposalPaymentCapture: React$1.ForwardRefExoticComponent<ProposalPaymentCaptureProps & React$1.RefAttributes<HTMLDivElement>>;
547
+
548
+ /**
549
+ * The version of the `QuestionType` contract this build ships (W8-04).
550
+ *
551
+ * `QuestionType` is a cross-service contract: TAX's backend persists these
552
+ * strings and its renderer switches on them, so the union is not free to
553
+ * change with a component refactor. Adding or removing a member means bumping
554
+ * this constant, adding a changelog entry below, and publishing the matching
555
+ * `docs/contracts/question-types.v<version>.json` fixture — the contract test
556
+ * (`__tests__/question-type-contract.test.ts`) fails otherwise.
557
+ *
558
+ * ### Changelog
559
+ * - **1** (1.38.0) — first versioned snapshot of the union that shipped in
560
+ * 1.12.0: the 24 members listed in `QUESTION_TYPES`. No change to the types
561
+ * themselves; this version records them.
562
+ *
563
+ * @experimental The versioning scheme is experimental until D18 (contract
564
+ * ownership) is decided; the members themselves are stable.
565
+ */
566
+ declare const QUESTION_TYPE_CONTRACT_VERSION = 1;
567
+ /**
568
+ * Every `QuestionType`, in contract order — the runtime mirror of the union,
569
+ * for iterating, validating a payload, or generating a picker.
570
+ *
571
+ * @experimental
572
+ */
573
+ declare const QUESTION_TYPES: readonly ["short-text", "long-text", "email", "phone", "ssn-sin", "date", "number", "currency", "percentage", "single-choice", "multi-choice", "yes-no", "dropdown", "multi-select", "address", "file-upload", "table", "repeater", "signature", "section-header", "consent-checkbox", "name", "labeled-table", "number-stepper"];
574
+ type QuestionType = "short-text" | "long-text" | "email" | "phone" | "ssn-sin" | "date" | "number" | "currency" | "percentage" | "single-choice" | "multi-choice" | "yes-no" | "dropdown" | "multi-select" | "address" | "file-upload" | "table" | "repeater" | "signature" | "section-header" | "consent-checkbox" | "name" | "labeled-table" | "number-stepper";
575
+ interface QuestionOption {
576
+ value: string;
577
+ label: string;
578
+ formLabel?: string;
579
+ helpText?: string;
580
+ disabled?: boolean;
581
+ }
582
+ interface QuestionAddressValue {
583
+ line1?: string;
584
+ line2?: string;
585
+ city?: string;
586
+ region?: string;
587
+ postalCode?: string;
588
+ country?: string;
589
+ }
590
+ /** Personal-name payload for the `name` variant. */
591
+ interface QuestionNameValue {
592
+ first?: string;
593
+ middle?: string;
594
+ last?: string;
595
+ suffix?: string;
596
+ }
597
+ /** Question-level help/tip rendered as a tooltip beside the title. */
598
+ interface QuestionHelp {
599
+ title?: string;
600
+ body: string;
601
+ }
602
+ interface QuestionTableColumn {
603
+ key: string;
604
+ label: string;
605
+ placeholder?: string;
606
+ inputType?: "text" | "number" | "date" | "currency";
607
+ }
608
+ type QuestionTableRow = Record<string, string>;
609
+ /** Column of the fixed `labeled-table` matrix. `width` is a relative grid weight. */
610
+ interface QuestionLabeledColumn {
611
+ key: string;
612
+ title: string;
613
+ width?: number;
614
+ inputType?: "text" | "number" | "date" | "currency";
615
+ }
616
+ /** Fixed row header (down the left edge) of the `labeled-table` matrix. */
617
+ interface QuestionLabeledRow {
618
+ key: string;
619
+ title: string;
620
+ }
621
+ /** Cell text for the `labeled-table` matrix, keyed rowKey → colKey → value. */
622
+ type QuestionLabeledValue = Record<string, Record<string, string>>;
623
+ interface QuestionFileValue {
624
+ name: string;
625
+ size?: number;
626
+ kind?: "doc" | "sheet" | "image" | "generic";
627
+ }
628
+ interface QuestionsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
629
+ index?: number;
630
+ title: string;
631
+ description?: string;
632
+ type?: QuestionType;
633
+ required?: boolean;
634
+ chrome?: "card" | "plain";
635
+ sectionLabel?: string;
636
+ hideHeader?: boolean;
637
+ options?: QuestionOption[];
638
+ value?: string;
639
+ values?: string[];
640
+ placeholder?: string;
641
+ help?: QuestionHelp;
642
+ addressValue?: QuestionAddressValue;
643
+ nameValue?: QuestionNameValue;
644
+ showSuffix?: boolean;
645
+ tableColumns?: QuestionTableColumn[];
646
+ tableRows?: QuestionTableRow[];
647
+ labeledColumns?: QuestionLabeledColumn[];
648
+ labeledRows?: QuestionLabeledRow[];
649
+ labeledValue?: QuestionLabeledValue;
650
+ files?: QuestionFileValue[];
651
+ accept?: string;
652
+ maxSize?: number;
653
+ multiple?: boolean;
654
+ currencySymbol?: string;
655
+ /** Lower bound for `number-stepper`, and for a count-driven `repeater`. */
656
+ min?: number;
657
+ /** Upper bound for `number-stepper`, and max item count for a count-driven `repeater`. */
658
+ max?: number;
659
+ step?: number;
660
+ /** When set on a `repeater`, renders a bounded stepper that drives the number of item grids. */
661
+ countLabel?: string;
662
+ /**
663
+ * Noun for each `repeater` entry card header, e.g. `"U.S. presence period"` →
664
+ * "U.S. presence period 1". Defaults to the generic "Item" when unset.
665
+ */
666
+ itemNoun?: string;
667
+ onValueChange?: (value: string) => void;
668
+ onValuesChange?: (values: string[]) => void;
669
+ onAddressChange?: (value: QuestionAddressValue) => void;
670
+ onNameChange?: (value: QuestionNameValue) => void;
671
+ onLabeledChange?: (value: QuestionLabeledValue) => void;
672
+ onTableRowsChange?: (rows: QuestionTableRow[]) => void;
673
+ onFilesSelected?: (files: File[]) => void;
674
+ /** When set, each uploaded file chip in the `file-upload` type shows a remove
675
+ * button that calls this with the file and its index. */
676
+ onFileRemove?: (file: QuestionFileValue, index: number) => void;
677
+ }
678
+ declare const Questions: React$1.ForwardRefExoticComponent<QuestionsProps & React$1.RefAttributes<HTMLDivElement>>;
679
+
680
+ /**
681
+ * Grid — a labeled-rows × typed-columns matrix of editable cells.
682
+ *
683
+ * A fixed grid where every row has a header down the left edge and every
684
+ * column declares the input type its cells accept (text / number / currency
685
+ * / date). Each cell is an editable input; the whole matrix is a single
686
+ * controlled value keyed `rowKey → columnKey → string`.
687
+ *
688
+ * ┌───────────────┬──────────┬──────────┬──────────┐
689
+ * │ │ Taxpayer │ Spouse │ Notes │ ← typed columns
690
+ * ├───────────────┼──────────┼──────────┼──────────┤
691
+ * │ Wages (W-2) │ [ $ ___ ]│ [ $ ___ ]│ [ ___ ] │ ← labeled row
692
+ * │ Interest │ [ $ ___ ]│ [ $ ___ ]│ [ ___ ] │
693
+ * └───────────────┴──────────┴──────────┴──────────┘
694
+ *
695
+ * This is the standalone form of the `Questions` `labeled-table` type — that
696
+ * branch renders a `Grid` internally, so the two share one implementation and
697
+ * one value contract.
698
+ *
699
+ * Fully controlled: pass `columns`, `rows`, `value`, and `onChange`. The
700
+ * component never holds cell state itself.
701
+ */
702
+ /** Input type a column's cells accept. Drives keyboard, input mode, and affix. */
703
+ type GridInputType = "text" | "number" | "currency" | "date";
704
+ interface GridColumn {
705
+ /** Stable key; the second-level key in the value object. */
706
+ key: string;
707
+ /** Header text shown above the column. */
708
+ label: string;
709
+ /** Cell input type. Defaults to `"text"`. */
710
+ inputType?: GridInputType;
711
+ /** Relative grid weight for this column (a `fr` unit). Defaults to `1`. */
712
+ width?: number;
713
+ /** Placeholder for this column's empty cells. */
714
+ placeholder?: string;
715
+ }
716
+ interface GridRow {
717
+ /** Stable key; the first-level key in the value object. */
718
+ key: string;
719
+ /** Row header text shown down the left edge. */
720
+ label: string;
721
+ }
722
+ /** Cell values, keyed `rowKey → columnKey → value`. */
723
+ type GridValue = Record<string, Record<string, string>>;
724
+ interface GridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
725
+ /** Typed columns, left-to-right. */
726
+ columns: GridColumn[];
727
+ /** Labeled rows, top-to-bottom. */
728
+ rows: GridRow[];
729
+ /** Controlled cell values (`rowKey → columnKey → value`). */
730
+ value: GridValue;
731
+ /** Called with the full next value object whenever any cell changes. */
732
+ onChange: (value: GridValue) => void;
733
+ /** Accessible name for the matrix (also prefixes each cell's aria-label). */
734
+ ariaLabel?: string;
735
+ /** Header text for the top-left corner cell (above the row headers). */
736
+ rowHeaderLabel?: string;
737
+ /** Prefix shown inside `currency` cells. Defaults to `"$"`. */
738
+ currencySymbol?: string;
739
+ /** Minimum matrix width in px before it scrolls horizontally. Defaults to `560`. */
740
+ minWidth?: number;
741
+ /** Disable every cell. */
742
+ disabled?: boolean;
743
+ }
744
+ declare const Grid: React$1.ForwardRefExoticComponent<GridProps & React$1.RefAttributes<HTMLDivElement>>;
745
+
746
+ interface SidebarBrandSwitcherItem {
747
+ /** Stable id used as React key and for `data-item` on each row. */
748
+ id: string;
749
+ /** Primary display name, e.g. "Assure Audit". */
750
+ name: string;
751
+ /** Sub-line under the name, e.g. "Audit fieldwork". */
752
+ tagline?: string;
753
+ /**
754
+ * Short label rendered inside the default tile glyph (first character
755
+ * is used, à la "A" for "Audit"). Ignored when `glyph` is supplied.
756
+ */
757
+ short?: string;
758
+ /**
759
+ * Accent for the default tile background. A Tailwind class string
760
+ * (e.g. `"bg-[#5b3bc4]"`) — the consumer owns brand color values, the
761
+ * DS just composes them. Ignored when `glyph` is supplied.
762
+ */
763
+ tone?: string;
764
+ /**
765
+ * Pre-rendered tile glyph. When provided, replaces the default
766
+ * "first letter on `tone` swatch" tile entirely. Use for items that
767
+ * have a real mark instead of a letter.
768
+ */
769
+ glyph?: React$1.ReactNode;
770
+ /**
771
+ * Full-width identity node rendered in place of the tile + `name`
772
+ * — e.g. a product wordmark lockup (`<Logo href={null} …>`). When present
773
+ * the row omits the tile and the `name` text; `tagline` still renders
774
+ * beneath it. When absent the row falls back to tile + `name`.
775
+ *
776
+ * Framework-neutral like the rest of this composite: pass whatever element
777
+ * your stack renders (a DS `Logo`, a plain `<img>`, an inline SVG). The DS
778
+ * does not bind to it.
779
+ */
780
+ identity?: React$1.ReactNode;
781
+ /**
782
+ * False marks the item as not-yet-available; rendered disabled with
783
+ * a "Soon" badge by default (override via `unavailableBadge`).
784
+ */
785
+ available?: boolean;
786
+ /** Pass-through onto the row's `data-item` for analytics / e2e hooks. */
787
+ dataAttr?: string;
788
+ }
789
+ /**
790
+ * An external launcher row appended after the "Switch to" list — a non-suite
791
+ * entry with no availability / "Soon" semantics (e.g. a partner product reached
792
+ * by its own autologin URL rather than the suite's switch model). Vendor color
793
+ * lives in the consumer-owned `glyph`, keeping brand hex out of the DS.
794
+ */
795
+ interface SidebarBrandSwitcherExtra {
796
+ /** Stable id — React key and default `data-item`. */
797
+ id: string;
798
+ /** Left glyph (a consumer-owned mark/tile). Vendor color belongs here. */
799
+ glyph?: React$1.ReactNode;
800
+ /**
801
+ * Full-width identity node rendered in place of the `glyph` + `name` — e.g. a
802
+ * product wordmark lockup (`<Logo href={null} …>`) — mirroring
803
+ * `SidebarBrandSwitcherItem.identity`. Use it so an external launcher row
804
+ * reads at the same size and on the same line as the suite product rows.
805
+ * When present, `tagline` still renders beneath it and `glyph`/`name` are
806
+ * omitted. Consumer-owned and framework-neutral like the rest of this slot.
807
+ */
808
+ identity?: React$1.ReactNode;
809
+ /** Primary display name, e.g. "myCPE One". */
810
+ name: React$1.ReactNode;
811
+ /** Sub-line under the name. */
812
+ tagline?: React$1.ReactNode;
813
+ /** Invoked when the row is selected. The DS holds no opinion on what it does. */
814
+ onSelect: () => void;
815
+ /** Pass-through onto the row's `data-item` for analytics / e2e hooks. */
816
+ dataAttr?: string;
817
+ }
818
+ interface SidebarBrandSwitcherProps {
819
+ /**
820
+ * Brand glyph rendered at the left edge of the trigger (e.g. an
821
+ * `<img>` of the product mark). Consumer-supplied so the DS does
822
+ * not bind to a framework-specific image element.
823
+ */
824
+ brand?: React$1.ReactNode;
825
+ /** Wordmark / label rendered next to the brand glyph in the trigger. */
826
+ label: React$1.ReactNode;
827
+ /**
828
+ * The currently-active item. Pinned at the top of the menu and
829
+ * excluded from the "Switch to" list automatically.
830
+ */
831
+ current: SidebarBrandSwitcherItem;
832
+ /**
833
+ * Full item list including `current`. Order is preserved in the
834
+ * "Switch to" section; the current entry is filtered out.
835
+ */
836
+ items: SidebarBrandSwitcherItem[];
837
+ /**
838
+ * Called when a non-current, available item is selected. Receives the
839
+ * full item so consumers can route, open a new window, or trigger an
840
+ * SSO handoff — the DS holds no opinion on what "switch" means.
841
+ */
842
+ onLaunch?: (item: SidebarBrandSwitcherItem) => void | Promise<void>;
843
+ /**
844
+ * External launcher rows appended after the "Switch to" list — non-suite
845
+ * entries with no availability / "Soon" semantics. Each renders a consumer
846
+ * `glyph` + name + tagline and calls its own `onSelect`.
847
+ */
848
+ extras?: SidebarBrandSwitcherExtra[];
849
+ /**
850
+ * Optional predicate reporting whether an item is mid-launch from an
851
+ * external source (e.g. a suite-focus provider that drives the launch itself).
852
+ * ORed with the row's internal launching state to show the "Opening…" badge
853
+ * and to guard against a double launch. Absent → only internal state applies.
854
+ */
855
+ isLaunching?: (item: SidebarBrandSwitcherItem) => boolean;
856
+ /** Label above the current row. Defaults to "Currently using". */
857
+ currentSectionLabel?: React$1.ReactNode;
858
+ /** Label above the others list. Defaults to "Switch to". */
859
+ switchSectionLabel?: React$1.ReactNode;
860
+ /** Label at the very top of the menu. Defaults to "Suite". */
861
+ menuLabel?: React$1.ReactNode;
862
+ /** Badge text next to the current item. Defaults to "Current". */
863
+ currentBadge?: React$1.ReactNode;
864
+ /** Badge text on unavailable items. Defaults to "Soon". */
865
+ unavailableBadge?: React$1.ReactNode;
866
+ /** Accessible label on the trigger button. Defaults to "Switch product". */
867
+ triggerLabel?: string;
868
+ /** Extra classes applied to the outer brand-row wrapper. */
869
+ className?: string;
870
+ /** Extra classes applied to the trigger button. */
871
+ triggerClassName?: string;
872
+ /** Extra classes applied to the dropdown content panel. */
873
+ contentClassName?: string;
874
+ /**
875
+ * Extra classes applied to the current row, each "Switch to" product row, and
876
+ * each `extras` launcher row. Lets a consumer reproduce bespoke row
877
+ * padding/height via tailwind-merge without the DS owning that geometry, and
878
+ * keeps launcher rows aligned with the product rows.
879
+ */
880
+ rowClassName?: string;
881
+ /**
882
+ * Slot rendered to the right of the trigger inside the brand row.
883
+ * Typical use: drop a `<SidebarPinButton/>` here.
884
+ */
885
+ trailing?: React$1.ReactNode;
886
+ }
887
+ declare const SidebarBrandSwitcher: React$1.ForwardRefExoticComponent<SidebarBrandSwitcherProps & React$1.RefAttributes<HTMLDivElement>>;
888
+ interface SidebarBrandSwitcherTileProps {
889
+ item: SidebarBrandSwitcherItem;
890
+ }
891
+ declare function SidebarBrandSwitcherTile({ item }: SidebarBrandSwitcherTileProps): react_jsx_runtime.JSX.Element;
892
+
893
+ /**
894
+ * DocumentDetailPanel — the right-hand inspector for a document request
895
+ * (the "FY2025 PBC — Receivables & Fixed Assets" panel). Presentational
896
+ * compound: the app owns data, tab state, and every action handler;
897
+ * compose only the rows a surface needs.
898
+ *
899
+ * <DocumentDetailPanel>
900
+ * <DocumentDetailHeader
901
+ * status={<Badge variant="success">Provided</Badge>}
902
+ * tags={<>…</>}
903
+ * onClose={close}
904
+ * >
905
+ * <DocumentDetailTitle>FY2025 PBC — Receivables & Fixed Assets</DocumentDetailTitle>
906
+ * <DocumentDetailRequester
907
+ * org="Acme Manufacturing LLC" avatar="AM"
908
+ * requestedBy="Maya Auditor" time="5d ago"
909
+ * />
910
+ * <DocumentDetailMetaRow>…due chip…2 assigned…</DocumentDetailMetaRow>
911
+ * <DocumentDetailActions>…Edit / Lock / Status / Delete…</DocumentDetailActions>
912
+ * </DocumentDetailHeader>
913
+ * <DocumentDetailBody>
914
+ * <Tabs>…</Tabs>
915
+ * <DocumentList>
916
+ * <DocumentListSection label="Client uploads" count={2}>
917
+ * <DocumentRow fileName="…" meta="…" actions={<…/>} />
918
+ * </DocumentListSection>
919
+ * </DocumentList>
920
+ * </DocumentDetailBody>
921
+ * </DocumentDetailPanel>
922
+ *
923
+ * Tabs (Documents / Comments / Activity) use the `Tabs` primitive — this
924
+ * composite doesn't reinvent them. Status / priority chips are `Badge`s.
925
+ */
926
+ type DocumentDetailPanelProps = React.HTMLAttributes<HTMLElement>;
927
+ declare const DocumentDetailPanel: React$1.ForwardRefExoticComponent<DocumentDetailPanelProps & React$1.RefAttributes<HTMLElement>>;
928
+ interface DocumentDetailHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
929
+ /** Leading chips — folder, priority, classification (left of the bar). */
930
+ tags?: React.ReactNode;
931
+ /** Status pill, right-aligned (e.g. a "Provided" success Badge). */
932
+ status?: React.ReactNode;
933
+ onClose?: () => void;
934
+ }
935
+ declare const DocumentDetailHeader: React$1.ForwardRefExoticComponent<DocumentDetailHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
936
+ type DocumentDetailTitleProps = React.HTMLAttributes<HTMLHeadingElement>;
937
+ declare const DocumentDetailTitle: React$1.ForwardRefExoticComponent<DocumentDetailTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
938
+ interface DocumentDetailRequesterProps extends React.HTMLAttributes<HTMLDivElement> {
939
+ /** Image src, or initials/name passed through to <Avatar>. */
940
+ avatar: string;
941
+ /** Client / organisation name — the primary line. */
942
+ org: string;
943
+ /** Who requested the document. */
944
+ requestedBy: string;
945
+ /** Relative time, e.g. "5d ago". */
946
+ time: string;
947
+ }
948
+ declare const DocumentDetailRequester: React$1.ForwardRefExoticComponent<DocumentDetailRequesterProps & React$1.RefAttributes<HTMLDivElement>>;
949
+ type DocumentDetailMetaRowProps = React.HTMLAttributes<HTMLDivElement>;
950
+ declare const DocumentDetailMetaRow: React$1.ForwardRefExoticComponent<DocumentDetailMetaRowProps & React$1.RefAttributes<HTMLDivElement>>;
951
+ type DocumentDetailActionsProps = React.HTMLAttributes<HTMLDivElement>;
952
+ declare const DocumentDetailActions: React$1.ForwardRefExoticComponent<DocumentDetailActionsProps & React$1.RefAttributes<HTMLDivElement>>;
953
+ type DocumentDetailBodyProps = React.HTMLAttributes<HTMLDivElement>;
954
+ declare const DocumentDetailBody: React$1.ForwardRefExoticComponent<DocumentDetailBodyProps & React$1.RefAttributes<HTMLDivElement>>;
955
+ type DocumentListProps = React.HTMLAttributes<HTMLDivElement>;
956
+ declare const DocumentList: React$1.ForwardRefExoticComponent<DocumentListProps & React$1.RefAttributes<HTMLDivElement>>;
957
+ interface DocumentListSectionProps extends React.HTMLAttributes<HTMLElement> {
958
+ /** Section label, e.g. "Client uploads". */
959
+ label: React.ReactNode;
960
+ /** Count shown next to the label. */
961
+ count?: number;
962
+ /** Trailing slot, right-aligned (e.g. an "Upload" button). */
963
+ action?: React.ReactNode;
964
+ }
965
+ declare const DocumentListSection: React$1.ForwardRefExoticComponent<DocumentListSectionProps & React$1.RefAttributes<HTMLElement>>;
966
+ interface DocumentRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
967
+ /** File name — the row's primary line. */
968
+ fileName: string;
969
+ /** Secondary line, e.g. "320 KB · Jun 11, 2026 · Acme Manufacturing". */
970
+ meta?: React.ReactNode;
971
+ /** Leading file-type icon; defaults to a neutral document glyph. */
972
+ icon?: React.ReactNode;
973
+ /** Render the row in its approved state — a green file-icon chip plus an
974
+ * "Approved" tag after the file name. */
975
+ approved?: boolean;
976
+ /** Render the row in its rejected state — a red file-icon chip plus a
977
+ * "Rejected" tag after the file name. Ignored when `approved` is set. */
978
+ rejected?: boolean;
979
+ /** Trailing action controls (Extract / preview / download / delete). */
980
+ actions?: React.ReactNode;
981
+ }
982
+ declare const DocumentRow: React$1.ForwardRefExoticComponent<DocumentRowProps & React$1.RefAttributes<HTMLDivElement>>;
983
+
984
+ /**
985
+ * Brand scope — ambient product theming.
986
+ *
987
+ * The `brand` color family (bg-brand, hover:bg-brand-hover, bg-brand-bg,
988
+ * border-brand-line, text-fg-on-brand, plus the accent/focus/primary
989
+ * interaction tokens) follows the nearest `[data-brand]` scope and defaults to
990
+ * Pro. Authors type the STATE only; the product comes from the scope. Set it
991
+ * once high in the tree — ideally on the same root as the `.dark` class
992
+ * (`<html>`/`<body>`) — so Radix-portalled surfaces inherit it through the DOM.
993
+ *
994
+ * <html data-brand="tax"> // whole shell renders teal
995
+ * <div {...brandScope("audit")}> // a subtree renders blue
996
+ *
997
+ * For the rarer case of multiple scopes on one page WITH portalled content
998
+ * (a Dialog/Popover that escapes its scoped subtree to document.body), wrap the
999
+ * region in <BrandScope> / <BrandScopeProvider> and have the portalled
1000
+ * `*Content` re-stamp `data-brand={useBrandScope()}` on its own element.
1001
+ */
1002
+ type BrandProduct = "pro" | "audit" | "books" | "tax";
1003
+ /**
1004
+ * `data-brand` attribute object to spread on any element (mirrors
1005
+ * `serviceToneStyle`). This is the primary API for opting a subtree into a
1006
+ * product without naming the product in a utility class.
1007
+ */
1008
+ declare function brandScope(product: BrandProduct): {
1009
+ "data-brand": BrandProduct;
1010
+ };
1011
+ /** Every product, in suite order — for switchers and story matrices. */
1012
+ declare const BRAND_PRODUCTS: BrandProduct[];
1013
+ /** Human label for a product, for switchers and headings. */
1014
+ declare const brandLabel: Record<BrandProduct, string>;
1015
+ /**
1016
+ * Provides the active product to descendants so portalled surfaces can
1017
+ * re-stamp `data-brand` on themselves via {@link useBrandScope}. Purely a
1018
+ * structural carrier — the visual theming still comes from the `[data-brand]`
1019
+ * attribute in the DOM, not from this context.
1020
+ */
1021
+ declare function BrandScopeProvider({ product, children, }: {
1022
+ product: BrandProduct;
1023
+ children: React.ReactNode;
1024
+ }): react_jsx_runtime.JSX.Element;
1025
+ /** Read the ambient product from the nearest provider (defaults to Pro). */
1026
+ declare function useBrandScope(): BrandProduct;
1027
+ interface BrandScopeProps extends React.HTMLAttributes<HTMLDivElement> {
1028
+ /** The product this subtree renders as. */
1029
+ product: BrandProduct;
1030
+ }
1031
+ /**
1032
+ * Convenience wrapper that stamps `data-brand` on a `<div>` AND provides the
1033
+ * product via context, so a portalled descendant can re-stamp itself. Use
1034
+ * `brandScope()` directly when you want the attribute on your own element.
1035
+ */
1036
+ declare const BrandScope: React$1.ForwardRefExoticComponent<BrandScopeProps & React$1.RefAttributes<HTMLDivElement>>;
1037
+
1038
+ export { type ProposalBillingTermsProps as $, type AgreementFirm as A, BRAND_PRODUCTS as B, ClientSelect as C, DocumentDetailActions as D, type DocumentDetailPanelProps as E, DocumentDetailRequester as F, type DocumentDetailRequesterProps as G, DocumentDetailTitle as H, type DocumentDetailTitleProps as I, DocumentList as J, type DocumentListProps as K, DocumentListSection as L, type DocumentListSectionProps as M, DocumentRow as N, type DocumentRowProps as O, Grid as P, type GridColumn as Q, type GridInputType as R, type GridProps as S, type GridRow as T, type GridValue as U, Logo as V, ProposalAddOn as W, type ProposalAddOnProps as X, type ProposalBillingMode as Y, type ProposalBillingRow as Z, ProposalBillingTerms as _, AgreementPaneHeading as a, ProposalConsentGate as a0, type ProposalConsentGateProps as a1, ProposalCustomPage as a2, type ProposalCustomPageKind as a3, type ProposalCustomPageProps as a4, ProposalNote as a5, type ProposalNoteProps as a6, ProposalPackageCard as a7, type ProposalPackageCardProps as a8, type ProposalPackageMode as a9, type QuestionsProps as aA, SidebarBrandSwitcher as aB, type SidebarBrandSwitcherExtra as aC, type SidebarBrandSwitcherItem as aD, type SidebarBrandSwitcherProps as aE, SidebarBrandSwitcherTile as aF, brandLabel as aG, brandScope as aH, useBrandScope as aI, ProposalPaymentCapture as aa, type ProposalPaymentCaptureProps as ab, ProposalPricingSummary as ac, type ProposalPricingSummaryProps as ad, ProposalServiceRow as ae, type ProposalServiceRowProps as af, ProposalSignatureBlock as ag, type ProposalSignatureBlockProps as ah, type ProposalSigner as ai, ProposalSignerList as aj, type ProposalSignerListProps as ak, type ProposalSignerStatus as al, QUESTION_TYPES as am, QUESTION_TYPE_CONTRACT_VERSION as an, type QuestionAddressValue as ao, type QuestionFileValue as ap, type QuestionHelp as aq, type QuestionLabeledColumn as ar, type QuestionLabeledRow as as, type QuestionLabeledValue as at, type QuestionNameValue as au, type QuestionOption as av, type QuestionTableColumn as aw, type QuestionTableRow as ax, type QuestionType as ay, Questions as az, type AgreementPaneHeadingProps as b, type AgreementStatus as c, type AgreementStep as d, AgreementViewer as e, type AgreementViewerProps as f, AssureAuditBrandIcon as g, AssureBooksBrandIcon as h, AssureProBrandIcon as i, AssureTaxBrandIcon as j, type BrandIconProps as k, type BrandProduct as l, BrandScope as m, type BrandScopeProps as n, BrandScopeProvider as o, type ClientSelectOption as p, ComingSoon as q, type ComingSoonProps as r, type DocumentDetailActionsProps as s, DocumentDetailBody as t, type DocumentDetailBodyProps as u, DocumentDetailHeader as v, type DocumentDetailHeaderProps as w, DocumentDetailMetaRow as x, type DocumentDetailMetaRowProps as y, DocumentDetailPanel as z };