@assure-one/design-system 1.14.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5832,9 +5832,27 @@ var LoadingRows = forwardRef(function LoadingRows2({
5832
5832
  });
5833
5833
  LoadingRows.displayName = "LoadingRows";
5834
5834
  var sizeStyles = {
5835
- sm: { icon: 20, text: "text-sm", gap: "gap-2" },
5836
- md: { icon: 24, text: "text-[17px]", gap: "gap-2.5" },
5837
- lg: { icon: 32, text: "text-xl", gap: "gap-3" }
5835
+ sm: { icon: 20, text: "text-sm", gap: "gap-2", assetHeight: 24 },
5836
+ md: { icon: 24, text: "text-[17px]", gap: "gap-2.5", assetHeight: 30 },
5837
+ lg: { icon: 32, text: "text-xl", gap: "gap-3", assetHeight: 40 }
5838
+ };
5839
+ var productLogoAssets = {
5840
+ Pro: { src: "/brand/assure-pro.svg", width: 384, height: 90 },
5841
+ Audit: { src: "/brand/assure-audit.svg", width: 441, height: 90 },
5842
+ Books: { src: "/brand/assure-books.svg", width: 470, height: 90 },
5843
+ Tax: { src: "/brand/assure-tax.svg", width: 374, height: 90 }
5844
+ };
5845
+ var productMarkAssets = {
5846
+ Pro: { src: "/brand/assure-pro-mark.svg", width: 55, height: 48 },
5847
+ Audit: { src: "/brand/assure-audit-mark.svg", width: 55, height: 48 },
5848
+ Books: { src: "/brand/assure-books-mark.svg", width: 55, height: 48 },
5849
+ Tax: { src: "/brand/assure-tax-mark.svg", width: 55, height: 48 }
5850
+ };
5851
+ var productGlyphs = {
5852
+ Pro: AssureProBrandIcon,
5853
+ Audit: AssureAuditBrandIcon,
5854
+ Books: AssureBooksBrandIcon,
5855
+ Tax: AssureTaxBrandIcon
5838
5856
  };
5839
5857
  function Logo({
5840
5858
  size = "md",
@@ -5848,6 +5866,9 @@ function Logo({
5848
5866
  }) {
5849
5867
  const s = sizeStyles[size];
5850
5868
  const ariaLabel = productName ? `Assure ${productName}` : "Assure";
5869
+ const asset = productName ? productLogoAssets[productName] : void 0;
5870
+ const markAsset = productName ? productMarkAssets[productName] : void 0;
5871
+ const Glyph = productName ? productGlyphs[productName] : void 0;
5851
5872
  return /* @__PURE__ */ jsxs(
5852
5873
  Link,
5853
5874
  {
@@ -5855,17 +5876,40 @@ function Logo({
5855
5876
  className: cn("inline-flex items-center", s.gap, className),
5856
5877
  "aria-label": ariaLabel,
5857
5878
  children: [
5858
- /* @__PURE__ */ jsx(
5879
+ asset && showText ? /* @__PURE__ */ jsx(
5859
5880
  Image2,
5860
5881
  {
5861
- src: "/brand/mark.svg",
5882
+ src: asset.src,
5862
5883
  alt: "",
5863
- width: s.icon,
5864
- height: s.icon,
5884
+ width: asset.width,
5885
+ height: asset.height,
5865
5886
  priority: true,
5866
- className: cn("flex-shrink-0", iconClassName)
5887
+ className: cn("h-auto flex-shrink-0", inverted && "brightness-0 invert", iconClassName),
5888
+ style: { width: Math.round(asset.width / asset.height * s.assetHeight) }
5867
5889
  }
5868
- ),
5890
+ ) : markAsset ? /* @__PURE__ */ jsx(
5891
+ Image2,
5892
+ {
5893
+ src: markAsset.src,
5894
+ alt: "",
5895
+ width: markAsset.width,
5896
+ height: markAsset.height,
5897
+ priority: true,
5898
+ className: cn("h-auto flex-shrink-0", inverted && "brightness-0 invert", iconClassName),
5899
+ style: { width: Math.round(markAsset.width / markAsset.height * s.icon) }
5900
+ }
5901
+ ) : /* @__PURE__ */ jsx(Fragment, { children: Glyph ? /* @__PURE__ */ jsx(Glyph, { size: s.icon, "aria-hidden": "true", className: iconClassName }) : /* @__PURE__ */ jsx(
5902
+ "span",
5903
+ {
5904
+ "aria-hidden": "true",
5905
+ className: cn(
5906
+ "bg-pro-fg grid shrink-0 place-items-center rounded-[5px] text-[10px] font-bold text-white",
5907
+ iconClassName
5908
+ ),
5909
+ style: { width: s.icon, height: s.icon },
5910
+ children: "A"
5911
+ }
5912
+ ) }),
5869
5913
  showText && /* @__PURE__ */ jsxs(
5870
5914
  "span",
5871
5915
  {
@@ -5873,6 +5917,7 @@ function Logo({
5873
5917
  "font-display font-semibold tracking-[-0.025em]",
5874
5918
  s.text,
5875
5919
  inverted ? "text-white" : "text-fg",
5920
+ asset && "sr-only",
5876
5921
  textClassName
5877
5922
  ),
5878
5923
  children: [
@@ -6376,13 +6421,48 @@ var previewVariants = cva("bg-surface flex min-h-0 flex-col overflow-hidden", {
6376
6421
  },
6377
6422
  defaultVariants: { variant: "modal" }
6378
6423
  });
6424
+ var MIN_ZOOM = 0.5;
6425
+ var MAX_ZOOM = 2;
6426
+ var ZOOM_STEP = 0.25;
6427
+ var BASE_PAGE_WIDTH = 820;
6428
+ var clampZoom = (z) => Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, Math.round(z * 100) / 100));
6379
6429
  var headerAction = cn(
6380
6430
  "inline-flex size-7 shrink-0 items-center justify-center",
6381
6431
  "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6382
6432
  "hover:bg-overlay-hover hover:text-fg",
6383
6433
  "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
6384
6434
  );
6385
- var PdfPreview = forwardRef(function PdfPreview2({ src, pages, fileName, onDownload, onClose, variant, className, ...props }, ref) {
6435
+ var zoomAction = cn(
6436
+ "inline-flex size-7 shrink-0 items-center justify-center",
6437
+ "rounded-icon text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6438
+ "hover:bg-overlay-hover hover:text-fg",
6439
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
6440
+ "disabled:pointer-events-none disabled:opacity-40"
6441
+ );
6442
+ var zoomLabel = cn(
6443
+ "inline-flex h-7 min-w-[3.25rem] items-center justify-center px-2",
6444
+ "rounded-icon text-fg-3 text-xs font-medium tabular-nums",
6445
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6446
+ "hover:bg-overlay-hover hover:text-fg",
6447
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
6448
+ );
6449
+ var PdfPreview = forwardRef(function PdfPreview2({
6450
+ src,
6451
+ pages,
6452
+ fileName,
6453
+ onDownload,
6454
+ onApprove,
6455
+ approved,
6456
+ onReject,
6457
+ rejected,
6458
+ onClose,
6459
+ variant,
6460
+ zoomable,
6461
+ className,
6462
+ ...props
6463
+ }, ref) {
6464
+ const [zoom, setZoom] = useState(1);
6465
+ const zoomPercent = Math.round(zoom * 100);
6386
6466
  return /* @__PURE__ */ jsxs("div", { ref, className: cn(previewVariants({ variant }), className), ...props, children: [
6387
6467
  fileName && /* @__PURE__ */ jsxs("div", { className: "border-rule bg-surface flex shrink-0 items-center gap-3 border-b px-4 py-3", children: [
6388
6468
  /* @__PURE__ */ jsx(
@@ -6394,7 +6474,56 @@ var PdfPreview = forwardRef(function PdfPreview2({ src, pages, fileName, onDownl
6394
6474
  }
6395
6475
  ),
6396
6476
  /* @__PURE__ */ jsx("span", { className: "text-fg line-clamp-1 flex-1 text-sm font-medium", children: fileName }),
6397
- onDownload && /* @__PURE__ */ jsx("button", { type: "button", onClick: onDownload, "aria-label": "Download", className: headerAction, children: /* @__PURE__ */ jsx(DownloadIcon, { className: "size-4", "aria-hidden": "true" }) }),
6477
+ onApprove && (approved ? /* @__PURE__ */ jsxs("span", { className: "bg-success-bg text-success-fg rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold", children: [
6478
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-4", "aria-hidden": "true" }),
6479
+ "Approved"
6480
+ ] }) : /* @__PURE__ */ jsxs(
6481
+ "button",
6482
+ {
6483
+ type: "button",
6484
+ onClick: onApprove,
6485
+ className: cn(
6486
+ "rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold",
6487
+ "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
6488
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6489
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
6490
+ ),
6491
+ children: [
6492
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-4", "aria-hidden": "true" }),
6493
+ "Approve"
6494
+ ]
6495
+ }
6496
+ )),
6497
+ onReject && (rejected ? /* @__PURE__ */ jsxs("span", { className: "bg-danger-bg text-danger-fg rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold", children: [
6498
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-4", "aria-hidden": "true" }),
6499
+ "Rejected"
6500
+ ] }) : /* @__PURE__ */ jsxs(
6501
+ "button",
6502
+ {
6503
+ type: "button",
6504
+ onClick: onReject,
6505
+ className: cn(
6506
+ "rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold",
6507
+ "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active",
6508
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6509
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
6510
+ ),
6511
+ children: [
6512
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-4", "aria-hidden": "true" }),
6513
+ "Reject"
6514
+ ]
6515
+ }
6516
+ )),
6517
+ onDownload && /* @__PURE__ */ jsx(
6518
+ "button",
6519
+ {
6520
+ type: "button",
6521
+ onClick: onDownload,
6522
+ "aria-label": "Download",
6523
+ className: headerAction,
6524
+ children: /* @__PURE__ */ jsx(DownloadIcon, { className: "size-4", "aria-hidden": "true" })
6525
+ }
6526
+ ),
6398
6527
  onClose && /* @__PURE__ */ jsx("button", { type: "button", onClick: onClose, "aria-label": "Close", className: headerAction, children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" }) })
6399
6528
  ] }),
6400
6529
  src ? /* @__PURE__ */ jsx(
@@ -6404,15 +6533,72 @@ var PdfPreview = forwardRef(function PdfPreview2({ src, pages, fileName, onDownl
6404
6533
  title: fileName ?? "PDF preview",
6405
6534
  className: "bg-bg-2 min-h-0 flex-1 border-0"
6406
6535
  }
6407
- ) : pages && pages.length > 0 ? /* @__PURE__ */ jsx("div", { className: "scrollbar-thin bg-bg-2 min-h-0 flex-1 overflow-auto p-4 sm:p-6", children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex max-w-[820px] flex-col gap-4", children: pages.map((page, i) => /* @__PURE__ */ jsx(
6408
- "img",
6409
- {
6410
- src: page,
6411
- alt: `Page ${i + 1}`,
6412
- className: "rounded-input border-rule shadow-card bg-surface w-full border"
6413
- },
6414
- i
6415
- )) }) }) : /* @__PURE__ */ jsxs("div", { className: "bg-bg-2 text-fg-4 flex min-h-0 flex-1 flex-col items-center justify-center gap-2 p-8", children: [
6536
+ ) : pages && pages.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "relative flex min-h-0 flex-1 flex-col", children: [
6537
+ /* @__PURE__ */ jsx("div", { className: "scrollbar-thin bg-bg-2 min-h-0 flex-1 overflow-auto p-4 sm:p-6", children: /* @__PURE__ */ jsx(
6538
+ "div",
6539
+ {
6540
+ className: cn("mx-auto flex flex-col gap-4", !zoomable && "max-w-[820px]"),
6541
+ style: zoomable ? {
6542
+ width: Math.round(BASE_PAGE_WIDTH * zoom),
6543
+ maxWidth: zoom <= 1 ? "100%" : void 0
6544
+ } : void 0,
6545
+ children: pages.map((page, i) => /* @__PURE__ */ jsx(
6546
+ "img",
6547
+ {
6548
+ src: page,
6549
+ alt: `Page ${i + 1}`,
6550
+ className: "rounded-input border-rule shadow-card bg-surface w-full border"
6551
+ },
6552
+ i
6553
+ ))
6554
+ }
6555
+ ) }),
6556
+ zoomable && /* @__PURE__ */ jsxs(
6557
+ "div",
6558
+ {
6559
+ role: "group",
6560
+ "aria-label": "Zoom controls",
6561
+ className: "border-rule bg-surface shadow-pop rounded-pill absolute bottom-4 left-1/2 flex -translate-x-1/2 items-center gap-0.5 border p-1",
6562
+ children: [
6563
+ /* @__PURE__ */ jsx(
6564
+ "button",
6565
+ {
6566
+ type: "button",
6567
+ onClick: () => setZoom((z) => clampZoom(z - ZOOM_STEP)),
6568
+ disabled: zoom <= MIN_ZOOM,
6569
+ "aria-label": "Zoom out",
6570
+ className: zoomAction,
6571
+ children: /* @__PURE__ */ jsx(ZoomOutIcon, { className: "size-4", "aria-hidden": "true" })
6572
+ }
6573
+ ),
6574
+ /* @__PURE__ */ jsxs(
6575
+ "button",
6576
+ {
6577
+ type: "button",
6578
+ onClick: () => setZoom(1),
6579
+ "aria-label": `Zoom ${zoomPercent}%, reset to 100%`,
6580
+ className: zoomLabel,
6581
+ children: [
6582
+ zoomPercent,
6583
+ "%"
6584
+ ]
6585
+ }
6586
+ ),
6587
+ /* @__PURE__ */ jsx(
6588
+ "button",
6589
+ {
6590
+ type: "button",
6591
+ onClick: () => setZoom((z) => clampZoom(z + ZOOM_STEP)),
6592
+ disabled: zoom >= MAX_ZOOM,
6593
+ "aria-label": "Zoom in",
6594
+ className: zoomAction,
6595
+ children: /* @__PURE__ */ jsx(ZoomInIcon, { className: "size-4", "aria-hidden": "true" })
6596
+ }
6597
+ )
6598
+ ]
6599
+ }
6600
+ )
6601
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "bg-bg-2 text-fg-4 flex min-h-0 flex-1 flex-col items-center justify-center gap-2 p-8", children: [
6416
6602
  /* @__PURE__ */ jsx(FileTextIcon, { className: "size-8", "aria-hidden": "true" }),
6417
6603
  /* @__PURE__ */ jsx("p", { className: "text-sm", children: "No preview available" })
6418
6604
  ] })
@@ -8271,6 +8457,10 @@ var SpreadsheetPreview = forwardRef(
8271
8457
  minColumns = 0,
8272
8458
  fileName,
8273
8459
  onDownload,
8460
+ onApprove,
8461
+ approved,
8462
+ onReject,
8463
+ rejected,
8274
8464
  onClose,
8275
8465
  variant,
8276
8466
  className,
@@ -8291,6 +8481,46 @@ var SpreadsheetPreview = forwardRef(
8291
8481
  }
8292
8482
  ),
8293
8483
  /* @__PURE__ */ jsx("span", { className: "text-fg line-clamp-1 flex-1 text-sm font-medium", children: fileName }),
8484
+ onApprove && (approved ? /* @__PURE__ */ jsxs("span", { className: "bg-success-bg text-success-fg rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold", children: [
8485
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-4", "aria-hidden": "true" }),
8486
+ "Approved"
8487
+ ] }) : /* @__PURE__ */ jsxs(
8488
+ "button",
8489
+ {
8490
+ type: "button",
8491
+ onClick: onApprove,
8492
+ className: cn(
8493
+ "rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold",
8494
+ "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
8495
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
8496
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
8497
+ ),
8498
+ children: [
8499
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-4", "aria-hidden": "true" }),
8500
+ "Approve"
8501
+ ]
8502
+ }
8503
+ )),
8504
+ onReject && (rejected ? /* @__PURE__ */ jsxs("span", { className: "bg-danger-bg text-danger-fg rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold", children: [
8505
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-4", "aria-hidden": "true" }),
8506
+ "Rejected"
8507
+ ] }) : /* @__PURE__ */ jsxs(
8508
+ "button",
8509
+ {
8510
+ type: "button",
8511
+ onClick: onReject,
8512
+ className: cn(
8513
+ "rounded-icon inline-flex h-7 shrink-0 items-center gap-1.5 px-2.5 text-xs font-semibold",
8514
+ "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active",
8515
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
8516
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
8517
+ ),
8518
+ children: [
8519
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-4", "aria-hidden": "true" }),
8520
+ "Reject"
8521
+ ]
8522
+ }
8523
+ )),
8294
8524
  onDownload && /* @__PURE__ */ jsx(
8295
8525
  "button",
8296
8526
  {
@@ -8332,7 +8562,7 @@ var SpreadsheetPreview = forwardRef(
8332
8562
  /* @__PURE__ */ jsx(
8333
8563
  "th",
8334
8564
  {
8335
- className: cn(headerCell, "left-0 top-0 z-20 w-11 min-w-11"),
8565
+ className: cn(headerCell, "top-0 left-0 z-20 w-11 min-w-11"),
8336
8566
  "aria-hidden": "true"
8337
8567
  }
8338
8568
  ),
@@ -8362,8 +8592,8 @@ var SpreadsheetPreview = forwardRef(
8362
8592
  "td",
8363
8593
  {
8364
8594
  className: cn(
8365
- "border-rule-soft text-fg border-b border-r",
8366
- "h-8 min-w-[88px] max-w-[260px] truncate px-3 text-sm",
8595
+ "border-rule-soft text-fg border-r border-b",
8596
+ "h-8 max-w-[260px] min-w-[88px] truncate px-3 text-sm",
8367
8597
  typeof data?.[r]?.[c] === "number" && "text-right tabular-nums"
8368
8598
  ),
8369
8599
  children: data?.[r]?.[c] ?? ""
@@ -10875,95 +11105,884 @@ var ProposalPaymentCapture = forwardRef(
10875
11105
  }
10876
11106
  );
10877
11107
  ProposalPaymentCapture.displayName = "ProposalPaymentCapture";
10878
- function AiSpark({ size = 16, className }) {
10879
- const id = useId();
10880
- return /* @__PURE__ */ jsxs(
10881
- "svg",
10882
- {
10883
- width: size,
10884
- height: size * 12 / 16,
10885
- viewBox: "0 0 16 12",
10886
- fill: "none",
10887
- className: cn("block shrink-0", className),
10888
- "aria-hidden": "true",
10889
- children: [
10890
- /* @__PURE__ */ jsx(
10891
- "path",
10892
- {
10893
- d: "M6.24553 5.34293C5.91553 5.23294 5.91553 4.76699 6.24553 4.657L8.18254 4.01207C8.60834 3.87011 8.99522 3.63094 9.31252 3.3135C9.62982 2.99607 9.8688 2.6091 10.0105 2.18327L10.6555 0.247473C10.7655 -0.0824911 11.2315 -0.0824912 11.3415 0.247473L11.9866 2.18427C12.1285 2.61002 12.3677 2.99686 12.6852 3.31412C13.0027 3.63139 13.3897 3.87035 13.8156 4.01207L15.7516 4.657C15.8238 4.68071 15.8868 4.72664 15.9314 4.78823C15.976 4.84982 16 4.92392 16 4.99996C16 5.07601 15.976 5.15011 15.9314 5.2117C15.8868 5.27329 15.8238 5.31921 15.7516 5.34293L13.8146 5.98786C13.3889 6.12971 13.0021 6.36874 12.6848 6.68599C12.3675 7.00324 12.1284 7.39001 11.9866 7.81566L11.3415 9.75245C11.3178 9.82471 11.2719 9.88763 11.2103 9.93223C11.1487 9.97684 11.0746 10.0009 10.9985 10.0009C10.9225 10.0009 10.8484 9.97684 10.7868 9.93223C10.7252 9.88763 10.6793 9.82471 10.6555 9.75245L10.0105 7.81566C9.86867 7.39001 9.62962 7.00324 9.31233 6.68599C8.99505 6.36874 8.60823 6.12971 8.18254 5.98786L6.24553 5.34293ZM1.14651 9.20551C1.1032 9.19117 1.06552 9.16355 1.03881 9.12658C1.0121 9.0896 0.99772 9.04515 0.99772 8.99954C0.99772 8.95392 1.0121 8.90947 1.03881 8.87249C1.06552 8.83552 1.1032 8.8079 1.14651 8.79356L2.30851 8.4066C2.82651 8.23362 3.23252 7.82766 3.40552 7.30972L3.79252 6.14784C3.80686 6.10454 3.83448 6.06686 3.87146 6.04015C3.90844 6.01345 3.9529 5.99907 3.99852 5.99907C4.04414 5.99907 4.0886 6.01345 4.12558 6.04015C4.16256 6.06686 4.19018 6.10454 4.20452 6.14784L4.59152 7.30972C4.67664 7.56516 4.82009 7.79728 5.0105 7.98767C5.20091 8.17806 5.43305 8.32149 5.68853 8.4066L6.85053 8.79356C6.89384 8.8079 6.93152 8.83551 6.95823 8.87249C6.98494 8.90947 6.99932 8.95392 6.99932 8.99954C6.99932 9.04515 6.98494 9.0896 6.95823 9.12658C6.93152 9.16355 6.89384 9.19117 6.85053 9.20551L5.68853 9.59247C5.43305 9.67758 5.20091 9.82101 5.0105 10.0114C4.82009 10.2018 4.67664 10.4339 4.59152 10.6894L4.20452 11.8512C4.19018 11.8945 4.16256 11.9322 4.12558 11.9589C4.0886 11.9856 4.04414 12 3.99852 12C3.9529 12 3.90844 11.9856 3.87146 11.9589C3.83448 11.9322 3.80686 11.8945 3.79252 11.8512L3.40552 10.6894C3.3204 10.4339 3.17695 10.2018 2.98654 10.0114C2.79613 9.82101 2.56399 9.67758 2.30851 9.59247L1.14651 9.20551ZM0.097503 2.13727C0.0690292 2.1274 0.0443387 2.1089 0.0268643 2.08435C0.00938996 2.0598 1.317e-09 2.03042 0 2.00029C-1.318e-09 1.97015 0.00938995 1.94077 0.0268643 1.91622C0.0443387 1.89167 0.0690292 1.87317 0.097503 1.8633L0.871506 1.60533C1.21751 1.49034 1.48851 1.21937 1.60351 0.873408L1.86151 0.0994903C1.87138 0.0710193 1.88988 0.0463306 1.91443 0.0288584C1.93899 0.0113861 1.96837 0.00199815 1.99851 0.00199814C2.02865 0.00199814 2.05803 0.0113861 2.08259 0.0288583C2.10714 0.0463306 2.12564 0.0710193 2.13551 0.0994903L2.39351 0.873408C2.45024 1.0439 2.54593 1.19882 2.673 1.32588C2.80006 1.45293 2.955 1.54861 3.12552 1.60533L3.89952 1.8633C3.92799 1.87317 3.95268 1.89167 3.97016 1.91622C3.98763 1.94077 3.99702 1.97015 3.99702 2.00029C3.99702 2.03042 3.98763 2.0598 3.97016 2.08435C3.95268 2.1089 3.92799 2.1274 3.89952 2.13727L3.12552 2.39524C2.955 2.45196 2.80006 2.54764 2.673 2.6747C2.54593 2.80175 2.45024 2.95667 2.39351 3.12717L2.13551 3.90008C2.12564 3.92855 2.10714 3.95324 2.08259 3.97071C2.05804 3.98819 2.02865 3.99757 1.99851 3.99757C1.96837 3.99757 1.93899 3.98819 1.91443 3.97071C1.88988 3.95324 1.87138 3.92855 1.86151 3.90008L1.60351 3.12617C1.48851 2.7802 1.21751 2.50923 0.871506 2.39424L0.097503 2.13727Z",
10894
- fill: `url(#${id})`
10895
- }
10896
- ),
10897
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
10898
- "linearGradient",
10899
- {
10900
- id,
10901
- x1: "0.265576",
10902
- y1: "0.856805",
10903
- x2: "13.5",
10904
- y2: "12",
10905
- gradientUnits: "userSpaceOnUse",
10906
- children: [
10907
- /* @__PURE__ */ jsx("stop", { stopColor: "#9E32FF" }),
10908
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#1BB6FF" })
10909
- ]
10910
- }
10911
- ) })
10912
- ]
10913
- }
10914
- );
10915
- }
10916
- function Field({ label, value, confirmed }) {
10917
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
10918
- /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11px]", children: label }),
10919
- /* @__PURE__ */ jsxs("span", { className: "text-fg inline-flex items-center gap-1 text-sm font-medium", children: [
10920
- value,
10921
- confirmed && /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg size-3", strokeWidth: 3 })
10922
- ] })
10923
- ] });
10924
- }
10925
- var AIReceiptPanel = forwardRef(function AIReceiptPanel2({ state = "idle", result, onAttach, onRemove, onViewFile, className, ...props }, ref) {
10926
- if (state === "reading") {
10927
- return /* @__PURE__ */ jsxs(
10928
- "div",
11108
+ var statusLabel = {
11109
+ "not-started": "Not started",
11110
+ "in-progress": "In progress",
11111
+ complete: "Complete",
11112
+ "needs-review": "Review"
11113
+ };
11114
+ var statusClassName = {
11115
+ "not-started": "bg-surface-2 text-fg-3 border-rule",
11116
+ "in-progress": "bg-pro-bg text-pro-fg border-pro-line",
11117
+ complete: "bg-success-bg text-success-fg border-success-line",
11118
+ "needs-review": "bg-warning-bg text-warning-fg border-warning-line"
11119
+ };
11120
+ var statusDotClassName = {
11121
+ "not-started": "bg-rule-strong",
11122
+ "in-progress": "bg-warning-fg",
11123
+ complete: "bg-success-fg",
11124
+ "needs-review": "bg-brand-audit"
11125
+ };
11126
+ var QuestionnairePanel = forwardRef(
11127
+ function QuestionnairePanel2({
11128
+ variant = "cards",
11129
+ eyebrow = "Questionnaire",
11130
+ title = "Tax organizer",
11131
+ description,
11132
+ sections = [],
11133
+ groups,
11134
+ activeId,
11135
+ onSelect,
11136
+ className,
11137
+ ...props
11138
+ }, ref) {
11139
+ const navigationGroups = groups ?? (sections.length > 0 ? [
10929
11140
  {
10930
- ref,
10931
- role: "status",
10932
- "aria-live": "polite",
10933
- className: cn(
10934
- "border-rule bg-surface-2 flex items-center gap-3 rounded-[var(--radius-input)] border p-3",
10935
- className
10936
- ),
10937
- ...props,
10938
- children: [
10939
- /* @__PURE__ */ jsx(AiSpark, { size: 18, className: "motion-safe:animate-pulse" }),
10940
- /* @__PURE__ */ jsxs("div", { children: [
10941
- /* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: "Reading your receipt\u2026" }),
10942
- /* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: "Pulling the vendor, amount and a suggested category." })
10943
- ] })
10944
- ]
11141
+ id: "questionnaire",
11142
+ title: eyebrow,
11143
+ icon: /* @__PURE__ */ jsx(ListChecksIcon, { size: 14, "aria-hidden": "true" }),
11144
+ sections,
11145
+ defaultOpen: true
10945
11146
  }
11147
+ ] : []);
11148
+ const [openGroups, setOpenGroups] = useState(
11149
+ () => new Set(
11150
+ navigationGroups.filter((group) => group.defaultOpen !== false && group.sections.length > 0).map((group) => group.id)
11151
+ )
10946
11152
  );
10947
- }
10948
- if (state === "done" && result) {
11153
+ const selectedCardRef = useRef(null);
11154
+ useEffect(() => {
11155
+ selectedCardRef.current?.scrollIntoView({
11156
+ behavior: "smooth",
11157
+ block: "center",
11158
+ inline: "center"
11159
+ });
11160
+ }, [activeId]);
11161
+ const toggleGroup = (id) => {
11162
+ setOpenGroups((prev) => {
11163
+ const next = new Set(prev);
11164
+ if (next.has(id)) next.delete(id);
11165
+ else next.add(id);
11166
+ return next;
11167
+ });
11168
+ };
11169
+ if (variant === "navigation") {
11170
+ return /* @__PURE__ */ jsx(
11171
+ "aside",
11172
+ {
11173
+ ref,
11174
+ className: cn(
11175
+ "border-rule bg-surface shadow-card flex h-full min-h-[560px] flex-col overflow-hidden rounded-[14px] border",
11176
+ className
11177
+ ),
11178
+ ...props,
11179
+ children: /* @__PURE__ */ jsx("nav", { className: "overflow-y-auto py-1", "aria-label": title, children: navigationGroups.map((group) => {
11180
+ const isOpen = openGroups.has(group.id);
11181
+ const hasSections = group.sections.length > 0;
11182
+ return /* @__PURE__ */ jsxs("div", { className: "border-rule-soft border-b last:border-b-0", children: [
11183
+ /* @__PURE__ */ jsxs(
11184
+ "button",
11185
+ {
11186
+ type: "button",
11187
+ onClick: () => toggleGroup(group.id),
11188
+ "aria-expanded": isOpen,
11189
+ className: cn(
11190
+ "text-pro-fg flex h-8 w-full items-center gap-2 px-4 text-left text-[11px] font-bold tracking-[0.08em] uppercase",
11191
+ "hover:bg-pro-bg/50 transition-colors duration-[var(--duration-fast)]",
11192
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
11193
+ ),
11194
+ children: [
11195
+ /* @__PURE__ */ jsx("span", { className: "text-pro-fg flex size-4 shrink-0 items-center justify-center", children: group.icon ?? /* @__PURE__ */ jsx(ListChecksIcon, { size: 14, "aria-hidden": "true" }) }),
11196
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: group.title }),
11197
+ hasSections && /* @__PURE__ */ jsx(
11198
+ ChevronDownIcon,
11199
+ {
11200
+ size: 13,
11201
+ "aria-hidden": "true",
11202
+ className: cn(
11203
+ "text-pro-fg transition-transform duration-[var(--duration-fast)]",
11204
+ !isOpen && "-rotate-90"
11205
+ )
11206
+ }
11207
+ )
11208
+ ]
11209
+ }
11210
+ ),
11211
+ isOpen && hasSections && /* @__PURE__ */ jsx("div", { className: "pb-1", children: group.sections.map((section) => {
11212
+ const selected = section.id === activeId;
11213
+ const status = section.status ?? "not-started";
11214
+ return /* @__PURE__ */ jsxs(
11215
+ "button",
11216
+ {
11217
+ type: "button",
11218
+ onClick: () => onSelect?.(section.id),
11219
+ "data-active": selected ? "true" : void 0,
11220
+ className: cn(
11221
+ "group flex h-8 w-full items-center gap-3 px-5 text-left",
11222
+ "text-fg-2 transition-colors duration-[var(--duration-fast)]",
11223
+ "hover:bg-bg-2 hover:text-fg",
11224
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
11225
+ selected && "bg-pro-bg text-pro-fg font-semibold"
11226
+ ),
11227
+ children: [
11228
+ /* @__PURE__ */ jsx(
11229
+ "span",
11230
+ {
11231
+ className: cn(
11232
+ "text-fg-3 flex size-4 shrink-0 items-center justify-center",
11233
+ selected && "text-pro-fg"
11234
+ ),
11235
+ children: section.icon
11236
+ }
11237
+ ),
11238
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-[13px]", children: section.title }),
11239
+ /* @__PURE__ */ jsx(
11240
+ "span",
11241
+ {
11242
+ "aria-label": statusLabel[status],
11243
+ className: cn(
11244
+ "size-1.5 shrink-0 rounded-full",
11245
+ statusDotClassName[status]
11246
+ )
11247
+ }
11248
+ )
11249
+ ]
11250
+ },
11251
+ section.id
11252
+ );
11253
+ }) })
11254
+ ] }, group.id);
11255
+ }) })
11256
+ }
11257
+ );
11258
+ }
11259
+ const totalQuestions = sections.reduce((sum, section) => sum + (section.questionCount ?? 0), 0);
11260
+ const completedQuestions = sections.reduce(
11261
+ (sum, section) => sum + (section.completedCount ?? 0),
11262
+ 0
11263
+ );
11264
+ const percent = totalQuestions > 0 ? Math.round(completedQuestions / totalQuestions * 100) : 0;
10949
11265
  return /* @__PURE__ */ jsxs(
10950
- "div",
11266
+ "aside",
10951
11267
  {
10952
11268
  ref,
10953
11269
  className: cn(
10954
- "border-rule bg-surface-2 flex flex-col gap-3 rounded-[var(--radius-input)] border p-3",
11270
+ "border-rule bg-surface shadow-card flex h-auto min-h-0 flex-col rounded-[20px] border p-4",
11271
+ "lg:sticky lg:top-6 lg:h-[calc(100vh-48px)] lg:max-h-[760px] lg:min-h-[560px]",
10955
11272
  className
10956
11273
  ),
10957
11274
  ...props,
10958
11275
  children: [
10959
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
10960
- /* @__PURE__ */ jsxs("span", { className: "text-fg-2 inline-flex items-center gap-1.5 text-xs font-semibold", children: [
10961
- /* @__PURE__ */ jsx(AiSpark, { size: 14 }),
10962
- " Auto-filled from receipt"
10963
- ] }),
10964
- onRemove && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRemove, children: "Remove" })
11276
+ /* @__PURE__ */ jsxs("div", { className: "px-1 pb-4", children: [
11277
+ /* @__PURE__ */ jsx("p", { className: "text-pro-fg text-[11px] font-bold tracking-[0.12em] uppercase", children: eyebrow }),
11278
+ /* @__PURE__ */ jsx("h2", { className: "text-fg mt-1 text-[21px] leading-7 font-bold", children: title }),
11279
+ description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-2 text-[13px] leading-5", children: description }),
11280
+ totalQuestions > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-4", children: [
11281
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between gap-3", children: [
11282
+ /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[12px] font-semibold", children: "Progress" }),
11283
+ /* @__PURE__ */ jsxs("span", { className: "text-fg text-[12px] font-bold tabular-nums", children: [
11284
+ percent,
11285
+ "%"
11286
+ ] })
11287
+ ] }),
11288
+ /* @__PURE__ */ jsx("div", { className: "bg-surface-3 h-2 overflow-hidden rounded-full", children: /* @__PURE__ */ jsx(
11289
+ "div",
11290
+ {
11291
+ className: "bg-pro-fg h-full rounded-full transition-[width] duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
11292
+ style: { width: `${percent}%` }
11293
+ }
11294
+ ) })
11295
+ ] })
10965
11296
  ] }),
10966
- /* @__PURE__ */ jsx(
11297
+ /* @__PURE__ */ jsxs("div", { className: "relative min-h-0 flex-1", children: [
11298
+ /* @__PURE__ */ jsx("div", { className: "from-surface pointer-events-none absolute inset-y-0 left-0 z-10 w-6 bg-gradient-to-r to-transparent lg:hidden" }),
11299
+ /* @__PURE__ */ jsx("div", { className: "from-surface pointer-events-none absolute inset-y-0 right-0 z-10 w-6 bg-gradient-to-l to-transparent lg:hidden" }),
11300
+ /* @__PURE__ */ jsx("div", { className: "from-surface pointer-events-none absolute inset-x-0 top-0 z-10 hidden h-1 bg-gradient-to-b to-transparent lg:block" }),
11301
+ /* @__PURE__ */ jsx("div", { className: "from-surface pointer-events-none absolute inset-x-0 bottom-0 z-10 hidden h-5 bg-gradient-to-t to-transparent lg:block" }),
11302
+ /* @__PURE__ */ jsx(
11303
+ "div",
11304
+ {
11305
+ className: cn(
11306
+ "flex snap-x snap-mandatory gap-3 overflow-x-auto overflow-y-hidden overscroll-x-contain scroll-smooth px-1 pt-2 pb-2",
11307
+ "[scroll-padding-inline:2rem] lg:[scroll-padding-inline:0] lg:[scroll-padding-block:5rem]",
11308
+ "motion-reduce:scroll-auto",
11309
+ "[scrollbar-color:var(--color-pro-fg)_transparent] [scrollbar-width:thin]",
11310
+ "[&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2",
11311
+ "[&::-webkit-scrollbar-track]:bg-transparent",
11312
+ "[&::-webkit-scrollbar-thumb]:bg-pro-fg/35 [&::-webkit-scrollbar-thumb]:rounded-full",
11313
+ "hover:[&::-webkit-scrollbar-thumb]:bg-pro-fg/55",
11314
+ "lg:grid lg:max-h-full lg:snap-none lg:gap-2 lg:overflow-x-hidden lg:overflow-y-auto lg:pr-1"
11315
+ ),
11316
+ children: sections.map((section, index) => {
11317
+ const selected = section.id === activeId;
11318
+ const status = section.status ?? "not-started";
11319
+ const itemPercent = section.questionCount && section.questionCount > 0 ? Math.round((section.completedCount ?? 0) / section.questionCount * 100) : 0;
11320
+ return /* @__PURE__ */ jsxs(
11321
+ "button",
11322
+ {
11323
+ ref: selected ? selectedCardRef : void 0,
11324
+ type: "button",
11325
+ onClick: () => onSelect?.(section.id),
11326
+ "data-active": selected ? "true" : void 0,
11327
+ className: cn(
11328
+ "group border-rule bg-surface flex w-full snap-center gap-3 overflow-hidden rounded-[16px] border p-3 text-left will-change-transform",
11329
+ selected ? "max-w-[300px] min-w-[280px] items-start sm:min-w-[300px] lg:max-w-none lg:min-w-0" : "max-w-[240px] min-w-[220px] items-center sm:min-w-[240px] lg:max-w-none lg:min-w-0",
11330
+ "transition-[background-color,border-color,box-shadow,transform,min-width,max-width] duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
11331
+ "hover:border-pro-line hover:bg-pro-bg/40 hover:-translate-y-0.5 lg:hover:translate-x-0.5 lg:hover:translate-y-0",
11332
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
11333
+ selected && "border-pro-line bg-pro-bg shadow-card relative z-10 scale-[1.02]"
11334
+ ),
11335
+ children: [
11336
+ /* @__PURE__ */ jsx(
11337
+ "span",
11338
+ {
11339
+ className: cn(
11340
+ "mt-0.5 grid size-8 shrink-0 place-items-center rounded-full text-[12px] font-bold",
11341
+ status === "complete" ? "bg-success-bg text-success-fg" : selected ? "bg-pro-fg text-fg-on-pro" : "bg-surface-2 text-fg-3",
11342
+ !selected && "mt-0"
11343
+ ),
11344
+ "aria-hidden": "true",
11345
+ children: status === "complete" ? /* @__PURE__ */ jsx(CheckCircleSolidIcon, { size: 18 }) : index + 1
11346
+ }
11347
+ ),
11348
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
11349
+ /* @__PURE__ */ jsxs("span", { className: "flex items-start justify-between gap-3", children: [
11350
+ /* @__PURE__ */ jsx("span", { className: "text-fg line-clamp-1 text-[14px] leading-5 font-bold", children: section.title }),
11351
+ !selected ? section.questionCount != null && /* @__PURE__ */ jsxs("span", { className: "text-fg-4 shrink-0 text-[12px] font-bold tabular-nums", children: [
11352
+ section.completedCount ?? 0,
11353
+ "/",
11354
+ section.questionCount
11355
+ ] }) : /* @__PURE__ */ jsx(
11356
+ "span",
11357
+ {
11358
+ className: cn(
11359
+ "shrink-0 rounded-full border px-2 py-0.5 text-[10.5px] font-bold",
11360
+ statusClassName[status]
11361
+ ),
11362
+ children: statusLabel[status]
11363
+ }
11364
+ )
11365
+ ] }),
11366
+ /* @__PURE__ */ jsx(
11367
+ "span",
11368
+ {
11369
+ className: cn(
11370
+ "grid transition-[grid-template-rows,opacity,transform,margin-top] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
11371
+ selected ? "mt-1 translate-y-0 grid-rows-[1fr] opacity-100" : "mt-0 -translate-y-1 grid-rows-[0fr] opacity-0"
11372
+ ),
11373
+ children: /* @__PURE__ */ jsxs("span", { className: "overflow-hidden", children: [
11374
+ section.description && /* @__PURE__ */ jsx("span", { className: "text-fg-3 mt-1 line-clamp-2 text-[12px] leading-5", children: section.description }),
11375
+ /* @__PURE__ */ jsxs("span", { className: "mt-3 flex items-center gap-2", children: [
11376
+ section.meta && /* @__PURE__ */ jsx("span", { className: "text-fg-4 line-clamp-1 text-[11.5px] font-semibold", children: section.meta }),
11377
+ section.questionCount != null && /* @__PURE__ */ jsxs("span", { className: "text-fg-4 ml-auto shrink-0 text-[11.5px] font-semibold tabular-nums", children: [
11378
+ section.completedCount ?? 0,
11379
+ "/",
11380
+ section.questionCount
11381
+ ] })
11382
+ ] }),
11383
+ section.questionCount != null && /* @__PURE__ */ jsx("span", { className: "bg-surface-3 mt-2 block h-1.5 overflow-hidden rounded-full", children: /* @__PURE__ */ jsx(
11384
+ "span",
11385
+ {
11386
+ className: cn(
11387
+ "block h-full rounded-full transition-[width] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
11388
+ status === "complete" ? "bg-success-fg" : "bg-pro-fg"
11389
+ ),
11390
+ style: { width: `${itemPercent}%` }
11391
+ }
11392
+ ) })
11393
+ ] })
11394
+ }
11395
+ )
11396
+ ] })
11397
+ ]
11398
+ },
11399
+ section.id
11400
+ );
11401
+ })
11402
+ }
11403
+ )
11404
+ ] }),
11405
+ /* @__PURE__ */ jsx("div", { className: "border-rule mt-auto hidden border-t px-1 pt-3 lg:block", children: /* @__PURE__ */ jsxs("div", { className: "text-fg-3 flex items-center gap-2 text-[12px] leading-5", children: [
11406
+ /* @__PURE__ */ jsx(HelpCircleIcon, { size: 15, className: "text-pro-fg", "aria-hidden": "true" }),
11407
+ "Pick a section to load its related questions on the right."
11408
+ ] }) })
11409
+ ]
11410
+ }
11411
+ );
11412
+ }
11413
+ );
11414
+ QuestionnairePanel.displayName = "QuestionnairePanel";
11415
+ var defaultOptions = [
11416
+ { value: "yes", label: "Yes" },
11417
+ { value: "no", label: "No" },
11418
+ { value: "not-sure", label: "Not sure" }
11419
+ ];
11420
+ var Questions = forwardRef(function Questions2({
11421
+ index,
11422
+ title,
11423
+ description,
11424
+ type = "short-text",
11425
+ required = false,
11426
+ chrome = "card",
11427
+ sectionLabel,
11428
+ hideHeader = false,
11429
+ options = defaultOptions,
11430
+ value = "",
11431
+ values = [],
11432
+ placeholder,
11433
+ addressValue = {},
11434
+ tableColumns = [],
11435
+ tableRows = [],
11436
+ files = [],
11437
+ accept,
11438
+ maxSize,
11439
+ multiple,
11440
+ currencySymbol = "$",
11441
+ onValueChange,
11442
+ onValuesChange,
11443
+ onAddressChange,
11444
+ onTableRowsChange,
11445
+ onFilesSelected,
11446
+ className,
11447
+ ...props
11448
+ }, ref) {
11449
+ const humanIndex = typeof index === "number" ? index + 1 : void 0;
11450
+ const isSectionHeader = type === "section-header";
11451
+ const isPlain = chrome === "plain" || isSectionHeader;
11452
+ const showHeader = isSectionHeader || !hideHeader;
11453
+ const toggleOption = (optionValue, checked) => {
11454
+ const nextValues = checked ? Array.from(/* @__PURE__ */ new Set([...values, optionValue])) : values.filter((item) => item !== optionValue);
11455
+ onValuesChange?.(nextValues);
11456
+ };
11457
+ const updateAddress = (key, nextValue) => {
11458
+ onAddressChange?.({ ...addressValue, [key]: nextValue });
11459
+ };
11460
+ const updateRow = (rowIndex, key, nextValue) => {
11461
+ onTableRowsChange?.(
11462
+ tableRows.map((row, index2) => index2 === rowIndex ? { ...row, [key]: nextValue } : row)
11463
+ );
11464
+ };
11465
+ const addRow = () => {
11466
+ const emptyRow = tableColumns.reduce(
11467
+ (row, column) => ({ ...row, [column.key]: "" }),
11468
+ {}
11469
+ );
11470
+ onTableRowsChange?.([...tableRows, emptyRow]);
11471
+ };
11472
+ const removeRow = (rowIndex) => {
11473
+ onTableRowsChange?.(tableRows.filter((_, index2) => index2 !== rowIndex));
11474
+ };
11475
+ return /* @__PURE__ */ jsxs(
11476
+ "section",
11477
+ {
11478
+ ref,
11479
+ className: cn(
11480
+ "font-body",
11481
+ isPlain ? "bg-transparent" : "border-rule bg-surface shadow-card rounded-[18px] border p-5",
11482
+ className
11483
+ ),
11484
+ ...props,
11485
+ children: [
11486
+ showHeader && /* @__PURE__ */ jsxs("div", { className: cn("flex items-start gap-3", !isSectionHeader && "mb-4"), children: [
11487
+ humanIndex && !isPlain && /* @__PURE__ */ jsx(
11488
+ "span",
11489
+ {
11490
+ "aria-hidden": "true",
11491
+ className: "bg-pro-bg text-pro-fg grid size-7 shrink-0 place-items-center rounded-full text-xs font-bold",
11492
+ children: humanIndex
11493
+ }
11494
+ ),
11495
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
11496
+ (sectionLabel || isSectionHeader) && /* @__PURE__ */ jsx("p", { className: "text-pro-fg mb-1 text-[11px] font-bold tracking-[0.12em] uppercase", children: sectionLabel }),
11497
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
11498
+ /* @__PURE__ */ jsx(
11499
+ "h3",
11500
+ {
11501
+ className: cn(
11502
+ "text-fg",
11503
+ isSectionHeader ? "text-[22px] leading-7 font-bold" : "text-[14px] leading-5 font-bold"
11504
+ ),
11505
+ children: title
11506
+ }
11507
+ ),
11508
+ required && /* @__PURE__ */ jsx("span", { className: "bg-pro-bg text-pro-fg rounded-full px-2 py-0.5 text-[11px] font-bold", children: "Required" })
11509
+ ] }),
11510
+ description && type !== "consent-checkbox" && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-1 text-[13px] leading-5", children: description })
11511
+ ] })
11512
+ ] }),
11513
+ type === "section-header" && null,
11514
+ type === "short-text" && /* @__PURE__ */ jsx(
11515
+ Input,
11516
+ {
11517
+ value,
11518
+ onChange: (event) => onValueChange?.(event.target.value),
11519
+ placeholder: placeholder ?? "Type your answer",
11520
+ "aria-label": title,
11521
+ className: "h-11 rounded-[12px] text-[14px]"
11522
+ }
11523
+ ),
11524
+ type === "email" && /* @__PURE__ */ jsx(
11525
+ Input,
11526
+ {
11527
+ type: "email",
11528
+ value,
11529
+ onChange: (event) => onValueChange?.(event.target.value),
11530
+ placeholder: placeholder ?? "client@example.com",
11531
+ "aria-label": title,
11532
+ className: "h-11 rounded-[12px] text-[14px]"
11533
+ }
11534
+ ),
11535
+ type === "phone" && /* @__PURE__ */ jsx(
11536
+ Input,
11537
+ {
11538
+ type: "tel",
11539
+ value,
11540
+ onChange: (event) => onValueChange?.(event.target.value),
11541
+ placeholder: placeholder ?? "(555) 123-4567",
11542
+ "aria-label": title,
11543
+ className: "h-11 rounded-[12px] text-[14px]"
11544
+ }
11545
+ ),
11546
+ type === "ssn-sin" && /* @__PURE__ */ jsx(
11547
+ Input,
11548
+ {
11549
+ value,
11550
+ onChange: (event) => onValueChange?.(event.target.value),
11551
+ placeholder: placeholder ?? "Enter SSN or SIN",
11552
+ "aria-label": title,
11553
+ inputMode: "numeric",
11554
+ className: "h-11 rounded-[12px] text-[14px]"
11555
+ }
11556
+ ),
11557
+ type === "date" && /* @__PURE__ */ jsx(
11558
+ Input,
11559
+ {
11560
+ type: "date",
11561
+ value,
11562
+ onChange: (event) => onValueChange?.(event.target.value),
11563
+ "aria-label": title,
11564
+ className: "h-11 rounded-[12px] text-[14px]"
11565
+ }
11566
+ ),
11567
+ type === "number" && /* @__PURE__ */ jsx(
11568
+ Input,
11569
+ {
11570
+ type: "number",
11571
+ value,
11572
+ onChange: (event) => onValueChange?.(event.target.value),
11573
+ placeholder: placeholder ?? "0",
11574
+ "aria-label": title,
11575
+ className: "h-11 rounded-[12px] text-[14px]"
11576
+ }
11577
+ ),
11578
+ type === "currency" && /* @__PURE__ */ jsx(
11579
+ Input,
11580
+ {
11581
+ value,
11582
+ onChange: (event) => onValueChange?.(event.target.value),
11583
+ placeholder: placeholder ?? "0.00",
11584
+ "aria-label": title,
11585
+ inputMode: "decimal",
11586
+ prefixIcon: /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: currencySymbol }),
11587
+ className: "h-11 rounded-[12px] text-[14px]"
11588
+ }
11589
+ ),
11590
+ type === "percentage" && /* @__PURE__ */ jsx(
11591
+ Input,
11592
+ {
11593
+ value,
11594
+ onChange: (event) => onValueChange?.(event.target.value),
11595
+ placeholder: placeholder ?? "0",
11596
+ "aria-label": title,
11597
+ inputMode: "decimal",
11598
+ suffixIcon: /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: "%" }),
11599
+ className: "h-11 rounded-[12px] text-[14px]"
11600
+ }
11601
+ ),
11602
+ type === "long-text" && /* @__PURE__ */ jsx(
11603
+ Textarea,
11604
+ {
11605
+ value,
11606
+ onChange: (event) => onValueChange?.(event.target.value),
11607
+ placeholder: placeholder ?? "Write a detailed answer",
11608
+ "aria-label": title,
11609
+ autoResize: true,
11610
+ className: "rounded-[12px] text-[14px]"
11611
+ }
11612
+ ),
11613
+ (type === "single-choice" || type === "yes-no") && /* @__PURE__ */ jsx(
11614
+ "div",
11615
+ {
11616
+ className: cn(
11617
+ "grid gap-3",
11618
+ type === "yes-no" ? "grid-cols-[repeat(auto-fit,minmax(78px,max-content))]" : ""
11619
+ ),
11620
+ role: "radiogroup",
11621
+ "aria-label": title,
11622
+ children: (type === "yes-no" ? [
11623
+ { value: "yes", label: "Yes" },
11624
+ { value: "no", label: "No" }
11625
+ ] : options).map((option) => /* @__PURE__ */ jsx(
11626
+ QuestionOptionButton,
11627
+ {
11628
+ option,
11629
+ selected: value === option.value,
11630
+ compact: type === "yes-no",
11631
+ role: "radio",
11632
+ "aria-checked": value === option.value,
11633
+ onClick: () => onValueChange?.(option.value)
11634
+ },
11635
+ option.value
11636
+ ))
11637
+ }
11638
+ ),
11639
+ type === "dropdown" && /* @__PURE__ */ jsx(
11640
+ Select,
11641
+ {
11642
+ options,
11643
+ value,
11644
+ onValueChange,
11645
+ placeholder: placeholder ?? "Select an option",
11646
+ "aria-label": title
11647
+ }
11648
+ ),
11649
+ (type === "multi-choice" || type === "multi-select") && /* @__PURE__ */ jsx("div", { className: "grid gap-3", role: "group", "aria-label": title, children: options.map((option) => /* @__PURE__ */ jsx(
11650
+ QuestionOptionButton,
11651
+ {
11652
+ option,
11653
+ selected: values.includes(option.value),
11654
+ role: "checkbox",
11655
+ "aria-checked": values.includes(option.value),
11656
+ onClick: () => toggleOption(option.value, !values.includes(option.value))
11657
+ },
11658
+ option.value
11659
+ )) }),
11660
+ type === "address" && /* @__PURE__ */ jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [
11661
+ /* @__PURE__ */ jsx(
11662
+ Input,
11663
+ {
11664
+ value: addressValue.line1 ?? "",
11665
+ onChange: (event) => updateAddress("line1", event.target.value),
11666
+ placeholder: "Street address",
11667
+ "aria-label": `${title} street address`,
11668
+ className: "h-11 rounded-[12px] text-[14px] sm:col-span-2"
11669
+ }
11670
+ ),
11671
+ /* @__PURE__ */ jsx(
11672
+ Input,
11673
+ {
11674
+ value: addressValue.line2 ?? "",
11675
+ onChange: (event) => updateAddress("line2", event.target.value),
11676
+ placeholder: "Apt, suite, unit",
11677
+ "aria-label": `${title} address line 2`,
11678
+ className: "h-11 rounded-[12px] text-[14px] sm:col-span-2"
11679
+ }
11680
+ ),
11681
+ /* @__PURE__ */ jsx(
11682
+ Input,
11683
+ {
11684
+ value: addressValue.city ?? "",
11685
+ onChange: (event) => updateAddress("city", event.target.value),
11686
+ placeholder: "City",
11687
+ "aria-label": `${title} city`,
11688
+ className: "h-11 rounded-[12px] text-[14px]"
11689
+ }
11690
+ ),
11691
+ /* @__PURE__ */ jsx(
11692
+ Input,
11693
+ {
11694
+ value: addressValue.region ?? "",
11695
+ onChange: (event) => updateAddress("region", event.target.value),
11696
+ placeholder: "State / Province",
11697
+ "aria-label": `${title} state or province`,
11698
+ className: "h-11 rounded-[12px] text-[14px]"
11699
+ }
11700
+ ),
11701
+ /* @__PURE__ */ jsx(
11702
+ Input,
11703
+ {
11704
+ value: addressValue.postalCode ?? "",
11705
+ onChange: (event) => updateAddress("postalCode", event.target.value),
11706
+ placeholder: "ZIP / Postal code",
11707
+ "aria-label": `${title} zip or postal code`,
11708
+ className: "h-11 rounded-[12px] text-[14px]"
11709
+ }
11710
+ ),
11711
+ /* @__PURE__ */ jsx(
11712
+ Input,
11713
+ {
11714
+ value: addressValue.country ?? "",
11715
+ onChange: (event) => updateAddress("country", event.target.value),
11716
+ placeholder: "Country",
11717
+ "aria-label": `${title} country`,
11718
+ className: "h-11 rounded-[12px] text-[14px]"
11719
+ }
11720
+ )
11721
+ ] }),
11722
+ type === "file-upload" && /* @__PURE__ */ jsxs("div", { className: "grid gap-3", children: [
11723
+ /* @__PURE__ */ jsx(
11724
+ FileUpload,
11725
+ {
11726
+ accept,
11727
+ maxSize,
11728
+ multiple,
11729
+ onFilesSelected
11730
+ }
11731
+ ),
11732
+ files.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid gap-2", children: files.map((file) => /* @__PURE__ */ jsx(
11733
+ FileChip,
11734
+ {
11735
+ name: file.name,
11736
+ meta: file.size ? formatBytes2(file.size) : void 0,
11737
+ kind: file.kind ?? "doc"
11738
+ },
11739
+ `${file.name}-${file.size ?? "unknown"}`
11740
+ )) })
11741
+ ] }),
11742
+ (type === "table" || type === "repeater") && /* @__PURE__ */ jsxs("div", { className: "grid gap-3", children: [
11743
+ tableRows.map((row, rowIndex) => /* @__PURE__ */ jsxs("div", { className: "border-rule bg-surface-2 rounded-[16px] border p-4", children: [
11744
+ /* @__PURE__ */ jsxs("div", { className: "mb-3 flex items-center justify-between gap-3", children: [
11745
+ /* @__PURE__ */ jsxs("span", { className: "text-fg text-[13px] font-semibold", children: [
11746
+ type === "repeater" ? "Item" : "Row",
11747
+ " ",
11748
+ rowIndex + 1
11749
+ ] }),
11750
+ tableRows.length > 1 && /* @__PURE__ */ jsx(
11751
+ Button,
11752
+ {
11753
+ type: "button",
11754
+ variant: "ghost",
11755
+ size: "icon-sm",
11756
+ onClick: () => removeRow(rowIndex),
11757
+ "aria-label": `Remove row ${rowIndex + 1}`,
11758
+ children: /* @__PURE__ */ jsx(TrashIcon, { size: 14, "aria-hidden": "true" })
11759
+ }
11760
+ )
11761
+ ] }),
11762
+ /* @__PURE__ */ jsx("div", { className: "grid gap-3 sm:grid-cols-2", children: tableColumns.map((column) => /* @__PURE__ */ jsx(
11763
+ Input,
11764
+ {
11765
+ type: column.inputType === "date" ? "date" : "text",
11766
+ value: row[column.key] ?? "",
11767
+ onChange: (event) => updateRow(rowIndex, column.key, event.target.value),
11768
+ placeholder: column.placeholder ?? column.label,
11769
+ "aria-label": `${title} ${column.label} row ${rowIndex + 1}`,
11770
+ className: "h-11 rounded-[12px] text-[14px]",
11771
+ inputMode: column.inputType === "number" || column.inputType === "currency" ? "decimal" : void 0,
11772
+ prefixIcon: column.inputType === "currency" ? /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: currencySymbol }) : void 0
11773
+ },
11774
+ column.key
11775
+ )) })
11776
+ ] }, rowIndex)),
11777
+ /* @__PURE__ */ jsxs(
11778
+ Button,
11779
+ {
11780
+ type: "button",
11781
+ variant: "dashed",
11782
+ size: "sm",
11783
+ onClick: addRow,
11784
+ iconLeft: /* @__PURE__ */ jsx(PlusIcon, { size: 14 }),
11785
+ children: [
11786
+ "Add ",
11787
+ type === "repeater" ? "item" : "row"
11788
+ ]
11789
+ }
11790
+ )
11791
+ ] }),
11792
+ type === "signature" && /* @__PURE__ */ jsxs("div", { className: "border-rule-strong bg-surface-2 rounded-[16px] border border-dashed p-5", children: [
11793
+ /* @__PURE__ */ jsxs("div", { className: "text-fg-2 mb-3 flex items-center gap-2", children: [
11794
+ /* @__PURE__ */ jsx(PenSignIcon, { size: 18, "aria-hidden": "true" }),
11795
+ /* @__PURE__ */ jsx("span", { className: "text-[13px] font-semibold", children: "Signature" })
11796
+ ] }),
11797
+ /* @__PURE__ */ jsx(
11798
+ Input,
11799
+ {
11800
+ value,
11801
+ onChange: (event) => onValueChange?.(event.target.value),
11802
+ placeholder: placeholder ?? "Type full legal name",
11803
+ "aria-label": title,
11804
+ className: "h-11 rounded-[12px] text-[14px]"
11805
+ }
11806
+ )
11807
+ ] }),
11808
+ type === "consent-checkbox" && /* @__PURE__ */ jsx(
11809
+ Checkbox,
11810
+ {
11811
+ label: description ?? title,
11812
+ checked: value === "true",
11813
+ onCheckedChange: (checked) => onValueChange?.(checked === true ? "true" : "false")
11814
+ }
11815
+ )
11816
+ ]
11817
+ }
11818
+ );
11819
+ });
11820
+ Questions.displayName = "Questions";
11821
+ function QuestionOptionButton({
11822
+ option,
11823
+ selected,
11824
+ compact,
11825
+ className,
11826
+ ...props
11827
+ }) {
11828
+ return /* @__PURE__ */ jsxs(
11829
+ "button",
11830
+ {
11831
+ type: "button",
11832
+ disabled: option.disabled,
11833
+ className: cn(
11834
+ "group bg-surface flex w-full items-center gap-3 border text-left",
11835
+ "transition-[border-color,background-color,color,box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
11836
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
11837
+ "disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
11838
+ compact ? "h-10 max-w-max rounded-[10px] px-3" : "min-h-16 rounded-[12px] px-7 py-4",
11839
+ selected ? compact ? "border-pro-fg bg-pro-bg text-pro-fg shadow-xs" : "border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover shadow-xs" : "border-rule-strong text-fg hover:border-pro-line hover:bg-pro-bg/40",
11840
+ className
11841
+ ),
11842
+ ...props,
11843
+ children: [
11844
+ /* @__PURE__ */ jsx(
11845
+ "span",
11846
+ {
11847
+ "aria-hidden": "true",
11848
+ className: cn(
11849
+ "grid shrink-0 place-items-center rounded-full border transition-colors duration-[var(--duration-fast)]",
11850
+ compact ? "size-5" : "size-4",
11851
+ selected ? "border-pro-fg bg-pro-fg text-fg-on-pro" : "border-rule-strong bg-surface group-hover:border-pro-line text-transparent"
11852
+ ),
11853
+ children: selected && /* @__PURE__ */ jsx(CheckCircleSolidIcon, { size: compact ? 18 : 14 })
11854
+ }
11855
+ ),
11856
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 items-center gap-1.5", children: [
11857
+ /* @__PURE__ */ jsx("span", { className: cn("truncate font-bold", compact ? "text-[13px]" : "text-[15px]"), children: option.label }),
11858
+ option.helpText && /* @__PURE__ */ jsxs(Tooltip, { children: [
11859
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: cn("inline-flex shrink-0 cursor-help", "text-pro-fg"), children: /* @__PURE__ */ jsx(HelpCircleIcon, { size: 14, "aria-hidden": "true" }) }) }),
11860
+ /* @__PURE__ */ jsxs(
11861
+ TooltipContent,
11862
+ {
11863
+ side: "top",
11864
+ align: "center",
11865
+ sideOffset: 12,
11866
+ className: cn(
11867
+ "border-rule bg-surface shadow-pop relative max-w-[352px] rounded-[7px] p-5 text-left",
11868
+ "after:border-rule after:bg-surface after:absolute after:top-full after:left-1/2 after:size-4 after:-translate-x-1/2 after:-translate-y-1/2 after:rotate-45 after:border-r after:border-b after:content-['']"
11869
+ ),
11870
+ children: [
11871
+ /* @__PURE__ */ jsx("div", { className: "text-fg text-[15px] leading-5 font-bold", children: option.label }),
11872
+ /* @__PURE__ */ jsx("p", { className: "text-fg-2 mt-3 text-[14px] leading-6", children: option.helpText })
11873
+ ]
11874
+ }
11875
+ )
11876
+ ] })
11877
+ ] }),
11878
+ option.formLabel && !compact && /* @__PURE__ */ jsx(
11879
+ "span",
11880
+ {
11881
+ className: cn(
11882
+ "ml-auto shrink-0 text-right text-[13px] font-semibold",
11883
+ selected ? "text-pro-fg" : "text-fg-3"
11884
+ ),
11885
+ children: option.formLabel
11886
+ }
11887
+ )
11888
+ ]
11889
+ }
11890
+ );
11891
+ }
11892
+ function formatBytes2(bytes) {
11893
+ if (bytes < 1024) return `${bytes} B`;
11894
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
11895
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
11896
+ }
11897
+ function AiSpark({ size = 16, className }) {
11898
+ const id = useId();
11899
+ return /* @__PURE__ */ jsxs(
11900
+ "svg",
11901
+ {
11902
+ width: size,
11903
+ height: size * 12 / 16,
11904
+ viewBox: "0 0 16 12",
11905
+ fill: "none",
11906
+ className: cn("block shrink-0", className),
11907
+ "aria-hidden": "true",
11908
+ children: [
11909
+ /* @__PURE__ */ jsx(
11910
+ "path",
11911
+ {
11912
+ d: "M6.24553 5.34293C5.91553 5.23294 5.91553 4.76699 6.24553 4.657L8.18254 4.01207C8.60834 3.87011 8.99522 3.63094 9.31252 3.3135C9.62982 2.99607 9.8688 2.6091 10.0105 2.18327L10.6555 0.247473C10.7655 -0.0824911 11.2315 -0.0824912 11.3415 0.247473L11.9866 2.18427C12.1285 2.61002 12.3677 2.99686 12.6852 3.31412C13.0027 3.63139 13.3897 3.87035 13.8156 4.01207L15.7516 4.657C15.8238 4.68071 15.8868 4.72664 15.9314 4.78823C15.976 4.84982 16 4.92392 16 4.99996C16 5.07601 15.976 5.15011 15.9314 5.2117C15.8868 5.27329 15.8238 5.31921 15.7516 5.34293L13.8146 5.98786C13.3889 6.12971 13.0021 6.36874 12.6848 6.68599C12.3675 7.00324 12.1284 7.39001 11.9866 7.81566L11.3415 9.75245C11.3178 9.82471 11.2719 9.88763 11.2103 9.93223C11.1487 9.97684 11.0746 10.0009 10.9985 10.0009C10.9225 10.0009 10.8484 9.97684 10.7868 9.93223C10.7252 9.88763 10.6793 9.82471 10.6555 9.75245L10.0105 7.81566C9.86867 7.39001 9.62962 7.00324 9.31233 6.68599C8.99505 6.36874 8.60823 6.12971 8.18254 5.98786L6.24553 5.34293ZM1.14651 9.20551C1.1032 9.19117 1.06552 9.16355 1.03881 9.12658C1.0121 9.0896 0.99772 9.04515 0.99772 8.99954C0.99772 8.95392 1.0121 8.90947 1.03881 8.87249C1.06552 8.83552 1.1032 8.8079 1.14651 8.79356L2.30851 8.4066C2.82651 8.23362 3.23252 7.82766 3.40552 7.30972L3.79252 6.14784C3.80686 6.10454 3.83448 6.06686 3.87146 6.04015C3.90844 6.01345 3.9529 5.99907 3.99852 5.99907C4.04414 5.99907 4.0886 6.01345 4.12558 6.04015C4.16256 6.06686 4.19018 6.10454 4.20452 6.14784L4.59152 7.30972C4.67664 7.56516 4.82009 7.79728 5.0105 7.98767C5.20091 8.17806 5.43305 8.32149 5.68853 8.4066L6.85053 8.79356C6.89384 8.8079 6.93152 8.83551 6.95823 8.87249C6.98494 8.90947 6.99932 8.95392 6.99932 8.99954C6.99932 9.04515 6.98494 9.0896 6.95823 9.12658C6.93152 9.16355 6.89384 9.19117 6.85053 9.20551L5.68853 9.59247C5.43305 9.67758 5.20091 9.82101 5.0105 10.0114C4.82009 10.2018 4.67664 10.4339 4.59152 10.6894L4.20452 11.8512C4.19018 11.8945 4.16256 11.9322 4.12558 11.9589C4.0886 11.9856 4.04414 12 3.99852 12C3.9529 12 3.90844 11.9856 3.87146 11.9589C3.83448 11.9322 3.80686 11.8945 3.79252 11.8512L3.40552 10.6894C3.3204 10.4339 3.17695 10.2018 2.98654 10.0114C2.79613 9.82101 2.56399 9.67758 2.30851 9.59247L1.14651 9.20551ZM0.097503 2.13727C0.0690292 2.1274 0.0443387 2.1089 0.0268643 2.08435C0.00938996 2.0598 1.317e-09 2.03042 0 2.00029C-1.318e-09 1.97015 0.00938995 1.94077 0.0268643 1.91622C0.0443387 1.89167 0.0690292 1.87317 0.097503 1.8633L0.871506 1.60533C1.21751 1.49034 1.48851 1.21937 1.60351 0.873408L1.86151 0.0994903C1.87138 0.0710193 1.88988 0.0463306 1.91443 0.0288584C1.93899 0.0113861 1.96837 0.00199815 1.99851 0.00199814C2.02865 0.00199814 2.05803 0.0113861 2.08259 0.0288583C2.10714 0.0463306 2.12564 0.0710193 2.13551 0.0994903L2.39351 0.873408C2.45024 1.0439 2.54593 1.19882 2.673 1.32588C2.80006 1.45293 2.955 1.54861 3.12552 1.60533L3.89952 1.8633C3.92799 1.87317 3.95268 1.89167 3.97016 1.91622C3.98763 1.94077 3.99702 1.97015 3.99702 2.00029C3.99702 2.03042 3.98763 2.0598 3.97016 2.08435C3.95268 2.1089 3.92799 2.1274 3.89952 2.13727L3.12552 2.39524C2.955 2.45196 2.80006 2.54764 2.673 2.6747C2.54593 2.80175 2.45024 2.95667 2.39351 3.12717L2.13551 3.90008C2.12564 3.92855 2.10714 3.95324 2.08259 3.97071C2.05804 3.98819 2.02865 3.99757 1.99851 3.99757C1.96837 3.99757 1.93899 3.98819 1.91443 3.97071C1.88988 3.95324 1.87138 3.92855 1.86151 3.90008L1.60351 3.12617C1.48851 2.7802 1.21751 2.50923 0.871506 2.39424L0.097503 2.13727Z",
11913
+ fill: `url(#${id})`
11914
+ }
11915
+ ),
11916
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
11917
+ "linearGradient",
11918
+ {
11919
+ id,
11920
+ x1: "0.265576",
11921
+ y1: "0.856805",
11922
+ x2: "13.5",
11923
+ y2: "12",
11924
+ gradientUnits: "userSpaceOnUse",
11925
+ children: [
11926
+ /* @__PURE__ */ jsx("stop", { stopColor: "#9E32FF" }),
11927
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#1BB6FF" })
11928
+ ]
11929
+ }
11930
+ ) })
11931
+ ]
11932
+ }
11933
+ );
11934
+ }
11935
+ function Field({ label, value, confirmed }) {
11936
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
11937
+ /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11px]", children: label }),
11938
+ /* @__PURE__ */ jsxs("span", { className: "text-fg inline-flex items-center gap-1 text-sm font-medium", children: [
11939
+ value,
11940
+ confirmed && /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg size-3", strokeWidth: 3 })
11941
+ ] })
11942
+ ] });
11943
+ }
11944
+ var AIReceiptPanel = forwardRef(function AIReceiptPanel2({ state = "idle", result, onAttach, onRemove, onViewFile, className, ...props }, ref) {
11945
+ if (state === "reading") {
11946
+ return /* @__PURE__ */ jsxs(
11947
+ "div",
11948
+ {
11949
+ ref,
11950
+ role: "status",
11951
+ "aria-live": "polite",
11952
+ className: cn(
11953
+ "border-rule bg-surface-2 flex items-center gap-3 rounded-[var(--radius-input)] border p-3",
11954
+ className
11955
+ ),
11956
+ ...props,
11957
+ children: [
11958
+ /* @__PURE__ */ jsx(AiSpark, { size: 18, className: "motion-safe:animate-pulse" }),
11959
+ /* @__PURE__ */ jsxs("div", { children: [
11960
+ /* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: "Reading your receipt\u2026" }),
11961
+ /* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: "Pulling the vendor, amount and a suggested category." })
11962
+ ] })
11963
+ ]
11964
+ }
11965
+ );
11966
+ }
11967
+ if (state === "done" && result) {
11968
+ return /* @__PURE__ */ jsxs(
11969
+ "div",
11970
+ {
11971
+ ref,
11972
+ className: cn(
11973
+ "border-rule bg-surface-2 flex flex-col gap-3 rounded-[var(--radius-input)] border p-3",
11974
+ className
11975
+ ),
11976
+ ...props,
11977
+ children: [
11978
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
11979
+ /* @__PURE__ */ jsxs("span", { className: "text-fg-2 inline-flex items-center gap-1.5 text-xs font-semibold", children: [
11980
+ /* @__PURE__ */ jsx(AiSpark, { size: 14 }),
11981
+ " Auto-filled from receipt"
11982
+ ] }),
11983
+ onRemove && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRemove, children: "Remove" })
11984
+ ] }),
11985
+ /* @__PURE__ */ jsx(
10967
11986
  FileChip,
10968
11987
  {
10969
11988
  name: result.file.name,
@@ -13923,36 +14942,36 @@ var DocumentDetailPanel = forwardRef(
13923
14942
  DocumentDetailPanel.displayName = "DocumentDetailPanel";
13924
14943
  var DocumentDetailHeader = forwardRef(
13925
14944
  function DocumentDetailHeader2({ tags, status, onClose, className, children, ...props }, ref) {
13926
- const showBar = tags || status || onClose;
14945
+ const showControls = Boolean(status || onClose);
14946
+ const tagsClearance = !showControls ? void 0 : status ? "pr-32" : "pr-12";
14947
+ const titleClearance = !showControls || tags ? void 0 : status ? "[&>:first-child]:pr-32" : "[&>:first-child]:pr-12";
13927
14948
  return /* @__PURE__ */ jsxs(
13928
14949
  "div",
13929
14950
  {
13930
14951
  ref,
13931
- className: cn("border-rule shrink-0 space-y-3 border-b px-5 py-4", className),
14952
+ className: cn("border-rule relative shrink-0 space-y-3 border-b px-5 py-4", className),
13932
14953
  ...props,
13933
14954
  children: [
13934
- showBar && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
13935
- /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-1.5", children: tags }),
13936
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
13937
- status,
13938
- onClose && /* @__PURE__ */ jsx(
13939
- "button",
13940
- {
13941
- type: "button",
13942
- onClick: onClose,
13943
- "aria-label": "Close",
13944
- className: cn(
13945
- "inline-flex size-7 shrink-0 items-center justify-center",
13946
- "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
13947
- "hover:bg-overlay-hover hover:text-fg",
13948
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
13949
- ),
13950
- children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
13951
- }
13952
- )
13953
- ] })
14955
+ showControls && /* @__PURE__ */ jsxs("div", { className: "absolute top-4 right-5 z-10 flex shrink-0 items-center gap-2", children: [
14956
+ status,
14957
+ onClose && /* @__PURE__ */ jsx(
14958
+ "button",
14959
+ {
14960
+ type: "button",
14961
+ onClick: onClose,
14962
+ "aria-label": "Close",
14963
+ className: cn(
14964
+ "inline-flex size-7 shrink-0 items-center justify-center",
14965
+ "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
14966
+ "hover:bg-overlay-hover hover:text-fg",
14967
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
14968
+ ),
14969
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
14970
+ }
14971
+ )
13954
14972
  ] }),
13955
- children
14973
+ tags && /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-wrap items-center gap-1.5", tagsClearance), children: tags }),
14974
+ /* @__PURE__ */ jsx("div", { className: cn("space-y-3", titleClearance), children })
13956
14975
  ]
13957
14976
  }
13958
14977
  );
@@ -14052,7 +15071,7 @@ var DocumentListSection = forwardRef(
14052
15071
  }
14053
15072
  );
14054
15073
  DocumentListSection.displayName = "DocumentListSection";
14055
- var DocumentRow = forwardRef(function DocumentRow2({ fileName, meta, icon, actions, className, ...props }, ref) {
15074
+ var DocumentRow = forwardRef(function DocumentRow2({ fileName, meta, icon, approved, rejected, actions, className, ...props }, ref) {
14056
15075
  return /* @__PURE__ */ jsxs(
14057
15076
  "div",
14058
15077
  {
@@ -14069,12 +15088,24 @@ var DocumentRow = forwardRef(function DocumentRow2({ fileName, meta, icon, actio
14069
15088
  "span",
14070
15089
  {
14071
15090
  "aria-hidden": "true",
14072
- className: "rounded-icon bg-bg-2 text-fg-3 inline-flex size-9 shrink-0 items-center justify-center",
15091
+ className: cn(
15092
+ "rounded-icon inline-flex size-9 shrink-0 items-center justify-center",
15093
+ approved ? "bg-success-bg text-success-fg" : rejected ? "bg-danger-bg text-danger-fg" : "bg-bg-2 text-fg-3"
15094
+ ),
14073
15095
  children: icon ?? /* @__PURE__ */ jsx(FileTextIcon, { className: "size-4.5" })
14074
15096
  }
14075
15097
  ),
14076
15098
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
14077
- /* @__PURE__ */ jsx("div", { className: "text-fg line-clamp-1 text-sm font-medium", children: fileName }),
15099
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
15100
+ /* @__PURE__ */ jsx("span", { className: "text-fg line-clamp-1 min-w-0 text-sm font-medium", children: fileName }),
15101
+ approved ? /* @__PURE__ */ jsxs("span", { className: "bg-success-bg text-success-fg inline-flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-[10.5px] font-semibold", children: [
15102
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-3", "aria-hidden": "true" }),
15103
+ "Approved"
15104
+ ] }) : rejected ? /* @__PURE__ */ jsxs("span", { className: "bg-danger-bg text-danger-fg inline-flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-[10.5px] font-semibold", children: [
15105
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-3", "aria-hidden": "true" }),
15106
+ "Rejected"
15107
+ ] }) : null
15108
+ ] }),
14078
15109
  meta && /* @__PURE__ */ jsx("div", { className: "text-fg-4 line-clamp-1 text-xs", children: meta })
14079
15110
  ] }),
14080
15111
  actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-0.5", children: actions })
@@ -14095,11 +15126,30 @@ var TONE_PILL = {
14095
15126
  danger: "bg-danger-bg text-danger-fg",
14096
15127
  muted: "bg-surface-2 text-fg-3"
14097
15128
  };
15129
+ var TONE_DOT2 = {
15130
+ warning: "bg-warning-fg",
15131
+ success: "bg-success-fg",
15132
+ danger: "bg-danger-fg",
15133
+ muted: "bg-fg-4"
15134
+ };
14098
15135
  function initials(name) {
14099
15136
  return name.split(/\s+/).slice(0, 2).map((p) => p[0]?.toUpperCase() ?? "").join("");
14100
15137
  }
14101
15138
  var DocumentRequestCard = forwardRef(
14102
- function DocumentRequestCard2({ title, category, highPriority, due, comment, fulfilledCount, totalCount, items, assignees = [], onOpen, className, ...props }, ref) {
15139
+ function DocumentRequestCard2({
15140
+ title,
15141
+ category,
15142
+ highPriority,
15143
+ due,
15144
+ comment,
15145
+ fulfilledCount,
15146
+ totalCount,
15147
+ items,
15148
+ assignees = [],
15149
+ onOpen,
15150
+ className,
15151
+ ...props
15152
+ }, ref) {
14103
15153
  const docWord = totalCount === 1 ? "document" : "documents";
14104
15154
  return /* @__PURE__ */ jsxs(
14105
15155
  "div",
@@ -14117,7 +15167,7 @@ var DocumentRequestCard = forwardRef(
14117
15167
  className: cn(
14118
15168
  "rounded-card border-rule bg-surface cursor-pointer overflow-hidden border shadow-sm",
14119
15169
  "transition-shadow duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
14120
- "hover:shadow-md focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
15170
+ "hover:shadow-md focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
14121
15171
  className
14122
15172
  ),
14123
15173
  ...props,
@@ -14131,7 +15181,14 @@ var DocumentRequestCard = forwardRef(
14131
15181
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
14132
15182
  /* @__PURE__ */ jsx("span", { className: "text-fg min-w-0 truncate text-sm font-semibold", children: title }),
14133
15183
  category && /* @__PURE__ */ jsx("span", { className: "bg-surface-2 text-fg-3 inline-flex shrink-0 items-center rounded-md px-2 py-0.5 text-xs font-medium", children: category }),
14134
- highPriority && /* @__PURE__ */ jsx(AlertTriangleIcon, { size: 14, className: "text-warning-fg shrink-0", "aria-label": "Urgent request" }),
15184
+ highPriority && /* @__PURE__ */ jsx(
15185
+ AlertTriangleIcon,
15186
+ {
15187
+ size: 14,
15188
+ className: "text-warning-fg shrink-0",
15189
+ "aria-label": "Urgent request"
15190
+ }
15191
+ ),
14135
15192
  due && /* @__PURE__ */ jsx(
14136
15193
  "span",
14137
15194
  {
@@ -14160,12 +15217,25 @@ var DocumentRequestCard = forwardRef(
14160
15217
  comment,
14161
15218
  "\u201D"
14162
15219
  ] }),
14163
- /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 px-5 pb-4 pt-3", children: items.map((item) => /* @__PURE__ */ jsxs("div", { className: "bg-surface-2 flex items-center gap-3 rounded-xl px-4 py-3.5", children: [
14164
- /* @__PURE__ */ jsx(FileTextIcon, { size: 16, className: "text-fg-3 shrink-0" }),
14165
- /* @__PURE__ */ jsx("span", { className: "text-fg min-w-0 flex-1 truncate text-sm font-semibold", children: item.label }),
14166
- item.docType && /* @__PURE__ */ jsx("span", { className: "border-rule bg-surface text-fg-3 inline-flex shrink-0 items-center rounded-md border px-2 py-0.5 text-[10.5px] font-semibold uppercase tracking-wide", children: item.docType }),
14167
- /* @__PURE__ */ jsx("span", { className: cn("shrink-0 text-[13px] font-semibold", TONE_TEXT[item.statusTone]), children: item.statusLabel })
14168
- ] }, item.id)) }),
15220
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 px-5 pt-3 pb-4", children: items.map((item) => /* @__PURE__ */ jsxs(
15221
+ "div",
15222
+ {
15223
+ className: "bg-surface-2 flex items-center gap-3 rounded-xl px-4 py-3.5",
15224
+ children: [
15225
+ /* @__PURE__ */ jsx(FileTextIcon, { size: 16, className: "text-fg-3 shrink-0" }),
15226
+ /* @__PURE__ */ jsx("span", { className: "text-fg min-w-0 flex-1 truncate text-sm font-semibold", children: item.label }),
15227
+ item.docType && /* @__PURE__ */ jsx("span", { className: "border-rule bg-surface text-fg-3 inline-flex shrink-0 items-center rounded-md border px-2 py-0.5 text-[10.5px] font-semibold tracking-wide uppercase", children: item.docType }),
15228
+ /* @__PURE__ */ jsx(
15229
+ "span",
15230
+ {
15231
+ className: cn("shrink-0 text-[13px] font-semibold", TONE_TEXT[item.statusTone]),
15232
+ children: item.statusLabel
15233
+ }
15234
+ )
15235
+ ]
15236
+ },
15237
+ item.id
15238
+ )) }),
14169
15239
  /* @__PURE__ */ jsxs("div", { className: "border-rule flex items-center gap-2 border-t px-5 py-2.5", children: [
14170
15240
  /* @__PURE__ */ jsx(FolderClosedIcon, { size: 14, className: "text-fg-4 shrink-0" }),
14171
15241
  /* @__PURE__ */ jsxs("span", { className: "text-fg-3 text-[12.5px] tabular-nums", children: [
@@ -14216,7 +15286,7 @@ var DocumentRequestDetail = forwardRef(
14216
15286
  title,
14217
15287
  category,
14218
15288
  highPriority,
14219
- statusLabel,
15289
+ statusLabel: statusLabel2,
14220
15290
  statusVariant = "secondary",
14221
15291
  requester,
14222
15292
  due,
@@ -14234,8 +15304,10 @@ var DocumentRequestDetail = forwardRef(
14234
15304
  tab,
14235
15305
  defaultTab = "documents",
14236
15306
  onTabChange,
14237
- clientUploads,
15307
+ clientUploads = [],
14238
15308
  firmDocuments,
15309
+ requestedItems,
15310
+ otherUploads = [],
14239
15311
  onUploadFirmDocument,
14240
15312
  comments,
14241
15313
  commentDraft,
@@ -14246,21 +15318,23 @@ var DocumentRequestDetail = forwardRef(
14246
15318
  activity,
14247
15319
  className
14248
15320
  } = props;
14249
- const docCount = clientUploads.length + firmDocuments.length;
15321
+ const clientDocCount = requestedItems ? requestedItems.reduce((n, it) => n + it.documents.length, 0) + otherUploads.length : clientUploads.length;
15322
+ const docCount = clientDocCount + firmDocuments.length;
15323
+ const providedCount = requestedItems?.filter((it) => it.statusTone === "success").length ?? 0;
14250
15324
  const selectedAssignees = assignees.filter((a) => a.selected);
14251
15325
  return /* @__PURE__ */ jsxs(DocumentDetailPanel, { ref, className, children: [
14252
15326
  /* @__PURE__ */ jsxs(
14253
15327
  DocumentDetailHeader,
14254
15328
  {
14255
15329
  onClose,
14256
- tags: /* @__PURE__ */ jsxs(Fragment, { children: [
15330
+ tags: category || highPriority ? /* @__PURE__ */ jsxs(Fragment, { children: [
14257
15331
  category && /* @__PURE__ */ jsxs(Badge, { variant: "outline", className: "gap-1", children: [
14258
15332
  /* @__PURE__ */ jsx(FolderClosedIcon, { className: "size-3" }),
14259
15333
  category
14260
15334
  ] }),
14261
15335
  highPriority && /* @__PURE__ */ jsx(Badge, { variant: "warning", children: "High priority" })
14262
- ] }),
14263
- status: statusLabel ? /* @__PURE__ */ jsx(Badge, { variant: statusVariant, children: statusLabel }) : void 0,
15336
+ ] }) : void 0,
15337
+ status: statusLabel2 ? /* @__PURE__ */ jsx(Badge, { variant: statusVariant, children: statusLabel2 }) : void 0,
14264
15338
  children: [
14265
15339
  /* @__PURE__ */ jsx(DocumentDetailTitle, { children: title }),
14266
15340
  /* @__PURE__ */ jsx(
@@ -14317,7 +15391,12 @@ var DocumentRequestDetail = forwardRef(
14317
15391
  },
14318
15392
  className: "flex items-center gap-2.5 py-2",
14319
15393
  children: [
14320
- /* @__PURE__ */ jsx("span", { className: cn("size-2.5 shrink-0 rounded-full", opt.color ?? "bg-fg-4") }),
15394
+ /* @__PURE__ */ jsx(
15395
+ "span",
15396
+ {
15397
+ className: cn("size-2.5 shrink-0 rounded-full", opt.color ?? "bg-fg-4")
15398
+ }
15399
+ ),
14321
15400
  /* @__PURE__ */ jsx("span", { className: "flex-1 text-sm", children: opt.label }),
14322
15401
  /* @__PURE__ */ jsx(
14323
15402
  "span",
@@ -14372,12 +15451,85 @@ var DocumentRequestDetail = forwardRef(
14372
15451
  /* @__PURE__ */ jsx(LockIcon, { size: 15, className: "shrink-0" }),
14373
15452
  "This request is locked \u2014 the client can no longer upload documents."
14374
15453
  ] }),
14375
- /* @__PURE__ */ jsxs(DocumentList, { children: [
15454
+ /* @__PURE__ */ jsx(DocumentList, { children: requestedItems ? /* @__PURE__ */ jsxs(Fragment, { children: [
15455
+ /* @__PURE__ */ jsxs("div", { className: "text-fg-3 px-2.5 text-[13px] font-medium tabular-nums", children: [
15456
+ providedCount,
15457
+ " of ",
15458
+ requestedItems.length,
15459
+ " provided"
15460
+ ] }),
15461
+ requestedItems.map((item) => /* @__PURE__ */ jsxs("section", { className: "space-y-1", children: [
15462
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-2.5 py-1", children: [
15463
+ /* @__PURE__ */ jsx(FileTextIcon, { size: 15, className: "text-fg-3 shrink-0" }),
15464
+ /* @__PURE__ */ jsx("span", { className: "text-fg min-w-0 flex-1 truncate text-sm font-semibold", children: item.label }),
15465
+ item.docType && /* @__PURE__ */ jsx("span", { className: "border-rule bg-surface text-fg-3 inline-flex shrink-0 items-center rounded-md border px-1.5 py-0.5 text-[10px] font-semibold tracking-wide uppercase", children: item.docType }),
15466
+ /* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-1.5", children: [
15467
+ /* @__PURE__ */ jsx(
15468
+ "span",
15469
+ {
15470
+ "aria-hidden": true,
15471
+ className: cn("size-2 rounded-full", TONE_DOT2[item.statusTone])
15472
+ }
15473
+ ),
15474
+ /* @__PURE__ */ jsx("span", { className: cn("text-xs font-semibold", TONE_TEXT[item.statusTone]), children: item.statusLabel })
15475
+ ] })
15476
+ ] }),
15477
+ /* @__PURE__ */ jsx("div", { className: "space-y-0.5 pl-[1.625rem]", children: item.documents.length > 0 ? item.documents.map((d) => /* @__PURE__ */ jsx(
15478
+ DocumentRow,
15479
+ {
15480
+ fileName: d.fileName,
15481
+ meta: d.meta,
15482
+ approved: d.approved,
15483
+ rejected: d.rejected,
15484
+ className: d.active ? "bg-overlay-hover" : void 0,
15485
+ actions: /* @__PURE__ */ jsx(FileRowActions, { doc: d })
15486
+ },
15487
+ d.id
15488
+ )) : /* @__PURE__ */ jsx("p", { className: "text-fg-4 px-2.5 py-1.5 text-[13px]", children: "Awaiting client upload" }) })
15489
+ ] }, item.id)),
15490
+ otherUploads.length > 0 && /* @__PURE__ */ jsx(DocumentListSection, { label: "Other uploads", count: otherUploads.length, children: otherUploads.map((d) => /* @__PURE__ */ jsx(
15491
+ DocumentRow,
15492
+ {
15493
+ fileName: d.fileName,
15494
+ meta: d.meta,
15495
+ approved: d.approved,
15496
+ rejected: d.rejected,
15497
+ className: d.active ? "bg-overlay-hover" : void 0,
15498
+ actions: /* @__PURE__ */ jsx(FileRowActions, { doc: d })
15499
+ },
15500
+ d.id
15501
+ )) }),
15502
+ /* @__PURE__ */ jsx(
15503
+ DocumentListSection,
15504
+ {
15505
+ label: "Firm reference",
15506
+ count: firmDocuments.length,
15507
+ action: onUploadFirmDocument ? /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onUploadFirmDocument, children: [
15508
+ /* @__PURE__ */ jsx(UploadIcon, {}),
15509
+ "Upload"
15510
+ ] }) : void 0,
15511
+ children: firmDocuments.length > 0 ? firmDocuments.map((d) => /* @__PURE__ */ jsx(
15512
+ DocumentRow,
15513
+ {
15514
+ fileName: d.fileName,
15515
+ meta: d.meta,
15516
+ approved: d.approved,
15517
+ rejected: d.rejected,
15518
+ className: d.active ? "bg-overlay-hover" : void 0,
15519
+ actions: /* @__PURE__ */ jsx(FileRowActions, { doc: d })
15520
+ },
15521
+ d.id
15522
+ )) : /* @__PURE__ */ jsx("p", { className: "text-fg-4 px-2.5 py-2 text-sm", children: "No firm documents attached." })
15523
+ }
15524
+ )
15525
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
14376
15526
  /* @__PURE__ */ jsx(DocumentListSection, { label: "Client uploads", count: clientUploads.length, children: clientUploads.length > 0 ? clientUploads.map((d) => /* @__PURE__ */ jsx(
14377
15527
  DocumentRow,
14378
15528
  {
14379
15529
  fileName: d.fileName,
14380
15530
  meta: d.meta,
15531
+ approved: d.approved,
15532
+ rejected: d.rejected,
14381
15533
  className: d.active ? "bg-overlay-hover" : void 0,
14382
15534
  actions: /* @__PURE__ */ jsx(FileRowActions, { doc: d })
14383
15535
  },
@@ -14397,6 +15549,8 @@ var DocumentRequestDetail = forwardRef(
14397
15549
  {
14398
15550
  fileName: d.fileName,
14399
15551
  meta: d.meta,
15552
+ approved: d.approved,
15553
+ rejected: d.rejected,
14400
15554
  className: d.active ? "bg-overlay-hover" : void 0,
14401
15555
  actions: /* @__PURE__ */ jsx(FileRowActions, { doc: d })
14402
15556
  },
@@ -14404,7 +15558,7 @@ var DocumentRequestDetail = forwardRef(
14404
15558
  )) : /* @__PURE__ */ jsx("p", { className: "text-fg-4 px-2.5 py-2 text-sm", children: "No firm documents attached." })
14405
15559
  }
14406
15560
  )
14407
- ] })
15561
+ ] }) })
14408
15562
  ] }),
14409
15563
  /* @__PURE__ */ jsxs(TabsContent, { value: "comments", className: "flex min-h-0 flex-1 flex-col", children: [
14410
15564
  /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-5 py-4", children: comments.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4", children: comments.map((c) => /* @__PURE__ */ jsx(CommentRow, { comment: c }, c.id)) }) : /* @__PURE__ */ jsx("p", { className: "text-fg-4 text-sm", children: "No comments yet. Start the conversation below." }) }),
@@ -14467,7 +15621,7 @@ function AssigneePicker({
14467
15621
  const selected = assignees.filter((a) => a.selected);
14468
15622
  const stack = /* @__PURE__ */ jsx("span", { className: "flex -space-x-2", children: selected.map((a) => /* @__PURE__ */ jsx(Avatar, { size: "sm", name: a.name, variant: "branded" }, a.id)) });
14469
15623
  if (!onToggle) {
14470
- return /* @__PURE__ */ jsxs("span", { className: "rounded-pill border-rule inline-flex items-center gap-2 border py-1 pl-1.5 pr-2.5", children: [
15624
+ return /* @__PURE__ */ jsxs("span", { className: "rounded-pill border-rule inline-flex items-center gap-2 border py-1 pr-2.5 pl-1.5", children: [
14471
15625
  stack,
14472
15626
  /* @__PURE__ */ jsx("span", { className: "text-fg-2 text-sm font-semibold tabular-nums", children: selected.length })
14473
15627
  ] });
@@ -14478,7 +15632,7 @@ function AssigneePicker({
14478
15632
  {
14479
15633
  type: "button",
14480
15634
  "aria-label": "Edit assignees",
14481
- className: "rounded-pill border-rule hover:bg-overlay-hover inline-flex items-center gap-2 border py-1 pl-1.5 pr-2.5 transition-colors focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
15635
+ className: "rounded-pill border-rule hover:bg-overlay-hover inline-flex items-center gap-2 border py-1 pr-2.5 pl-1.5 transition-colors focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
14482
15636
  children: [
14483
15637
  stack,
14484
15638
  /* @__PURE__ */ jsx("span", { className: "text-fg-2 text-sm font-semibold tabular-nums", children: selected.length }),
@@ -14506,23 +15660,49 @@ function AssigneePicker({
14506
15660
  ] });
14507
15661
  }
14508
15662
  function CommentRow({ comment }) {
14509
- return /* @__PURE__ */ jsxs("div", { className: "flex gap-2.5", children: [
14510
- /* @__PURE__ */ jsx(Avatar, { size: "sm", name: comment.author, variant: "branded" }),
14511
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
14512
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
14513
- /* @__PURE__ */ jsxs("span", { className: "text-fg truncate text-[13px] font-semibold", children: [
14514
- comment.author,
14515
- comment.you && " (You)"
14516
- ] }),
14517
- /* @__PURE__ */ jsx(Badge, { variant: comment.isFirm ? "secondary" : "info", size: "sm", children: comment.isFirm ? "Firm" : "Client" }),
14518
- /* @__PURE__ */ jsx("span", { className: "text-fg-4 ml-auto shrink-0 text-[11.5px]", children: comment.time })
14519
- ] }),
14520
- /* @__PURE__ */ jsx("p", { className: "text-fg-2 mt-0.5 text-[13px] leading-snug", children: comment.body })
14521
- ] })
15663
+ const { isFirm } = comment;
15664
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex gap-2.5", isFirm ? "flex-row-reverse" : "flex-row"), children: [
15665
+ /* @__PURE__ */ jsx(Avatar, { size: "sm", name: comment.author, variant: "branded", className: "mt-0.5 shrink-0" }),
15666
+ /* @__PURE__ */ jsxs(
15667
+ "div",
15668
+ {
15669
+ className: cn("flex max-w-[78%] min-w-0 flex-col", isFirm ? "items-end" : "items-start"),
15670
+ children: [
15671
+ /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", isFirm && "flex-row-reverse"), children: [
15672
+ /* @__PURE__ */ jsxs("span", { className: "text-fg truncate text-[13px] font-semibold", children: [
15673
+ comment.author,
15674
+ comment.you && " (You)"
15675
+ ] }),
15676
+ /* @__PURE__ */ jsx("span", { className: "text-fg-4 shrink-0 text-[11.5px]", children: comment.time })
15677
+ ] }),
15678
+ /* @__PURE__ */ jsx(
15679
+ "div",
15680
+ {
15681
+ className: cn(
15682
+ "mt-1 rounded-2xl px-3 py-2 text-[13px] leading-snug",
15683
+ isFirm ? "bg-pro-bg text-pro-fg rounded-tr-sm" : "bg-surface-2 text-fg-2 rounded-tl-sm"
15684
+ ),
15685
+ children: /* @__PURE__ */ jsx("p", { className: "break-words whitespace-pre-wrap", children: comment.body })
15686
+ }
15687
+ )
15688
+ ]
15689
+ }
15690
+ )
14522
15691
  ] });
14523
15692
  }
14524
15693
  function FileRowActions({ doc }) {
14525
15694
  return /* @__PURE__ */ jsxs(Fragment, { children: [
15695
+ doc.onApprove && !doc.approved && /* @__PURE__ */ jsx(
15696
+ Button,
15697
+ {
15698
+ variant: "ghost",
15699
+ size: "icon-sm",
15700
+ "aria-label": "Approve",
15701
+ className: "hover:text-success-fg",
15702
+ onClick: doc.onApprove,
15703
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
15704
+ }
15705
+ ),
14526
15706
  doc.onPreview && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Preview", onClick: doc.onPreview, children: /* @__PURE__ */ jsx(EyeIcon, {}) }),
14527
15707
  doc.onDownload && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Download", onClick: doc.onDownload, children: /* @__PURE__ */ jsx(DownloadIcon, {}) }),
14528
15708
  doc.onDelete && /* @__PURE__ */ jsx(
@@ -16223,6 +17403,6 @@ function SignatureEditor({
16223
17403
  }
16224
17404
  SignatureEditor.displayName = "SignatureEditor";
16225
17405
 
16226
- export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, AgreementPaneHeading, AgreementViewer, AiDraftCard, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, AreaChart, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, Assignee, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, AttachmentChip, AttentionItem, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, BottomNav, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, COUNTRY_CODES, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryDivider, CategoryTag, ChannelTabs, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientRailGroupHeader, ClientRailItem, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content16 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CountryFlag, CountrySelect, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, Dash, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DataTableView, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentDetailActions, DocumentDetailBody, DocumentDetailHeader, DocumentDetailMetaRow, DocumentDetailPanel, DocumentDetailRequester, DocumentDetailTitle, DocumentFileCard, DocumentFileRow, DocumentIcon, DocumentList, DocumentListSection, DocumentRequestCard, DocumentRequestDetail, DocumentRequestField, DocumentRow, DocumentSourceFilter, DocumentSourceTag, DocumentsWorkspaceLayout, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmailMessageCard, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, ExtractIcon, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileTypeBadge, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FolderUpIcon, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, IconTile, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, IntentBadge, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LandmarkIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MasterDetailLayout, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MissingDocumentsPanel, MoneyCell, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, NewMenu, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PdfPreview, PenSignIcon, PenToolIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, ResponsiveDialog, RotateCcwIcon, RouteTransition, SERVICE_TONES, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, SegmentedProgress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableKpiCard, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, SignatureEditor, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, SpreadsheetPreview, StackedBarChart, StagePill, StarIcon, StarRating, Stat, StatusDot, StatusIcon, StatusPill, Stepper, StickyActionBar, StopIcon, StrikethroughIcon, SubmitButton, SuggestionPills, SuiteProgress, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TagsCell, TeamIcon, TeamMemberSelect, Textarea, TimeLogger, TimeLoggerActions, TimeLoggerBillable, TimeLoggerContextRow, TimeLoggerEntry, TimeLoggerEntryList, TimeLoggerField, TimeLoggerFooter, TimeLoggerHeader, TimeLoggerNotes, TimeLoggerTimer, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, YEAR_DISPLAY_PLACEHOLDER, ZoomInIcon, ZoomOutIcon, alertVariants, applyMask, applyYearMask, attachmentChipVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, fileTypeBadgeVariants, fileTypeFromName, filterChipVariants, formatClock, formatCurrency, formatDuration, getFlagEmoji, iconTileVariants, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, statusDotVariants, suiteProgressFillVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
17406
+ export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, AgreementPaneHeading, AgreementViewer, AiDraftCard, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, AreaChart, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, Assignee, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, AttachmentChip, AttentionItem, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, BottomNav, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, COUNTRY_CODES, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryDivider, CategoryTag, ChannelTabs, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientRailGroupHeader, ClientRailItem, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content16 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CountryFlag, CountrySelect, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, Dash, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DataTableView, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentDetailActions, DocumentDetailBody, DocumentDetailHeader, DocumentDetailMetaRow, DocumentDetailPanel, DocumentDetailRequester, DocumentDetailTitle, DocumentFileCard, DocumentFileRow, DocumentIcon, DocumentList, DocumentListSection, DocumentRequestCard, DocumentRequestDetail, DocumentRequestField, DocumentRow, DocumentSourceFilter, DocumentSourceTag, DocumentsWorkspaceLayout, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmailMessageCard, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, ExtractIcon, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileTypeBadge, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FolderUpIcon, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, IconTile, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, IntentBadge, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LandmarkIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MasterDetailLayout, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MissingDocumentsPanel, MoneyCell, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, NewMenu, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PdfPreview, PenSignIcon, PenToolIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QuestionnairePanel, Questions, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, ResponsiveDialog, RotateCcwIcon, RouteTransition, SERVICE_TONES, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, SegmentedProgress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableKpiCard, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, SignatureEditor, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, SpreadsheetPreview, StackedBarChart, StagePill, StarIcon, StarRating, Stat, StatusDot, StatusIcon, StatusPill, Stepper, StickyActionBar, StopIcon, StrikethroughIcon, SubmitButton, SuggestionPills, SuiteProgress, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TagsCell, TeamIcon, TeamMemberSelect, Textarea, TimeLogger, TimeLoggerActions, TimeLoggerBillable, TimeLoggerContextRow, TimeLoggerEntry, TimeLoggerEntryList, TimeLoggerField, TimeLoggerFooter, TimeLoggerHeader, TimeLoggerNotes, TimeLoggerTimer, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, YEAR_DISPLAY_PLACEHOLDER, ZoomInIcon, ZoomOutIcon, alertVariants, applyMask, applyYearMask, attachmentChipVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, fileTypeBadgeVariants, fileTypeFromName, filterChipVariants, formatClock, formatCurrency, formatDuration, getFlagEmoji, iconTileVariants, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, statusDotVariants, suiteProgressFillVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
16227
17407
  //# sourceMappingURL=index.js.map
16228
17408
  //# sourceMappingURL=index.js.map