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