@assure-one/design-system 1.11.0 → 1.13.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
@@ -4921,6 +4921,46 @@ var DismissibleChip = React38.forwardRef(function DismissibleChip2({ label, onDi
4921
4921
  }
4922
4922
  );
4923
4923
  });
4924
+ var sourceMap = {
4925
+ requested: {
4926
+ label: "Requested",
4927
+ Icon: SendIcon,
4928
+ className: "border-transparent bg-pro-bg text-pro-fg"
4929
+ },
4930
+ direct: {
4931
+ label: "Direct upload",
4932
+ Icon: UploadIcon,
4933
+ className: "border-rule-strong text-fg-2"
4934
+ },
4935
+ internal: {
4936
+ label: "Internal",
4937
+ Icon: ShieldIcon,
4938
+ className: "border-transparent bg-surface-2 text-fg-3"
4939
+ }
4940
+ };
4941
+ var DocumentSourceTag = forwardRef(
4942
+ function DocumentSourceTag2({ source, icon, hideIcon, children, className, ...props }, ref) {
4943
+ const { label, Icon: Icon3, className: toneClass2 } = sourceMap[source];
4944
+ return /* @__PURE__ */ jsxs(
4945
+ "span",
4946
+ {
4947
+ ref,
4948
+ className: cn(
4949
+ "inline-flex items-center gap-1 rounded-md border py-0.5 pr-[7px] pl-1.5",
4950
+ "text-[11px] leading-none font-semibold",
4951
+ toneClass2,
4952
+ className
4953
+ ),
4954
+ ...props,
4955
+ children: [
4956
+ !hideIcon && (icon ?? /* @__PURE__ */ jsx(Icon3, { size: 11, className: "shrink-0 opacity-90", "aria-hidden": "true" })),
4957
+ children ?? label
4958
+ ]
4959
+ }
4960
+ );
4961
+ }
4962
+ );
4963
+ DocumentSourceTag.displayName = "DocumentSourceTag";
4924
4964
  var DocumentsWorkspaceLayout = forwardRef(function DocumentsWorkspaceLayout2({ clientsRail, folderTree, filesArea, className, ...props }, ref) {
4925
4965
  return /* @__PURE__ */ jsxs(
4926
4966
  "div",
@@ -9441,17 +9481,44 @@ function useToast() {
9441
9481
  if (!ctx) throw new Error("useToast must be used within <ToastProvider>");
9442
9482
  return ctx;
9443
9483
  }
9484
+ var DEFAULT_DURATION = 5e3;
9485
+ var MAX_VISIBLE = 3;
9444
9486
  var toastCount = 0;
9487
+ function toOptions(input) {
9488
+ return typeof input === "string" ? { title: input } : input;
9489
+ }
9445
9490
  function ToastProvider({ children }) {
9446
9491
  const [toasts, setToasts] = useState([]);
9447
9492
  const removeToast = useCallback((id) => {
9448
9493
  setToasts((prev) => prev.filter((t) => t.id !== id));
9449
9494
  }, []);
9450
9495
  const addToast = useCallback((options) => {
9496
+ const variant = options.variant ?? "default";
9497
+ const duration = options.duration ?? (variant === "loading" ? 0 : DEFAULT_DURATION);
9451
9498
  const id = `toast-${++toastCount}`;
9452
- setToasts((prev) => [...prev, { id, ...options }]);
9499
+ setToasts((prev) => {
9500
+ if (options.dedupeKey) {
9501
+ const existing = prev.find((t) => t.dedupeKey === options.dedupeKey);
9502
+ if (existing) {
9503
+ return prev.map(
9504
+ (t) => t.dedupeKey === options.dedupeKey ? { ...t, ...options, variant, duration, seq: t.seq + 1 } : t
9505
+ );
9506
+ }
9507
+ }
9508
+ return [...prev, { id, seq: 0, ...options, variant, duration }];
9509
+ });
9453
9510
  return id;
9454
9511
  }, []);
9512
+ const update = useCallback((id, patch) => {
9513
+ setToasts(
9514
+ (prev) => prev.map((t) => {
9515
+ if (t.id !== id) return t;
9516
+ const variant = patch.variant ?? t.variant;
9517
+ const duration = patch.duration ?? (patch.variant && patch.variant !== "loading" ? DEFAULT_DURATION : t.duration);
9518
+ return { ...t, ...patch, variant, duration, seq: t.seq + 1 };
9519
+ })
9520
+ );
9521
+ }, []);
9455
9522
  const dismiss = useCallback((id) => {
9456
9523
  if (id === void 0) {
9457
9524
  setToasts([]);
@@ -9459,9 +9526,20 @@ function ToastProvider({ children }) {
9459
9526
  }
9460
9527
  setToasts((prev) => prev.filter((t) => t.id !== id));
9461
9528
  }, []);
9529
+ const promise = useCallback(
9530
+ (p, copy) => {
9531
+ const id = addToast({ ...toOptions(copy.loading), variant: "loading", duration: 0 });
9532
+ p.then(
9533
+ (value2) => update(id, { ...toOptions(typeof copy.success === "function" ? copy.success(value2) : copy.success), variant: "success" }),
9534
+ (err) => update(id, { ...toOptions(typeof copy.error === "function" ? copy.error(err) : copy.error), variant: "destructive", duration: 6e3 })
9535
+ );
9536
+ return p;
9537
+ },
9538
+ [addToast, update]
9539
+ );
9462
9540
  const value = useMemo(
9463
- () => ({ toast: addToast, dismiss }),
9464
- [addToast, dismiss]
9541
+ () => ({ toast: addToast, dismiss, update, promise }),
9542
+ [addToast, dismiss, update, promise]
9465
9543
  );
9466
9544
  return /* @__PURE__ */ jsxs(ToastContext, { value, children: [
9467
9545
  children,
@@ -9472,7 +9550,7 @@ function ToastProvider({ children }) {
9472
9550
  role: "region",
9473
9551
  "aria-live": "polite",
9474
9552
  "aria-label": "Notifications",
9475
- children: toasts.map((t) => /* @__PURE__ */ jsx(ToastItem, { toast: t, onDismiss: removeToast }, t.id))
9553
+ children: toasts.slice(0, MAX_VISIBLE).map((t) => /* @__PURE__ */ jsx(ToastItem, { toast: t, onDismiss: removeToast }, t.id))
9476
9554
  }
9477
9555
  )
9478
9556
  ] });
@@ -9496,13 +9574,28 @@ var variantConfig = {
9496
9574
  icon: "text-warning-fg",
9497
9575
  bar: "bg-warning-fg",
9498
9576
  Icon: AlertTriangleSolidIcon
9577
+ },
9578
+ info: {
9579
+ chip: "bg-info/12",
9580
+ icon: "text-info",
9581
+ bar: "bg-info",
9582
+ Icon: InfoCircleSolidIcon
9583
+ },
9584
+ loading: {
9585
+ chip: "bg-pro-bg",
9586
+ icon: "text-pro-fg",
9587
+ bar: "bg-pro-fg",
9588
+ Icon: LoaderIcon,
9589
+ spin: true
9499
9590
  }
9500
9591
  };
9592
+ var SWIPE_DISMISS_PX = 72;
9501
9593
  function ToastItem({ toast, onDismiss }) {
9502
- const timerRef = useRef(void 0);
9503
9594
  const [exiting, setExiting] = useState(false);
9504
- const [filled, setFilled] = useState(false);
9505
- const duration = toast.duration ?? 5e3;
9595
+ const cardRef = useRef(null);
9596
+ const barRef = useRef(null);
9597
+ const pausedRef = useRef(false);
9598
+ const duration = toast.duration;
9506
9599
  const showProgress = duration > 0;
9507
9600
  const close = useCallback(() => {
9508
9601
  setExiting(true);
@@ -9510,93 +9603,147 @@ function ToastItem({ toast, onDismiss }) {
9510
9603
  }, [toast.id, onDismiss]);
9511
9604
  useEffect(() => {
9512
9605
  if (!showProgress) return;
9513
- timerRef.current = setTimeout(close, duration);
9514
- return () => clearTimeout(timerRef.current);
9515
- }, [showProgress, duration, close]);
9516
- useEffect(() => {
9517
- if (!showProgress) return;
9518
- const raf = requestAnimationFrame(() => setFilled(true));
9606
+ let raf = 0;
9607
+ let remaining = duration;
9608
+ let last = performance.now();
9609
+ const tick = (now) => {
9610
+ const dt = now - last;
9611
+ last = now;
9612
+ if (!pausedRef.current) {
9613
+ remaining -= dt;
9614
+ if (barRef.current) {
9615
+ barRef.current.style.width = `${Math.max(0, Math.min(100, (duration - remaining) / duration * 100))}%`;
9616
+ }
9617
+ if (remaining <= 0) {
9618
+ close();
9619
+ return;
9620
+ }
9621
+ }
9622
+ raf = requestAnimationFrame(tick);
9623
+ };
9624
+ raf = requestAnimationFrame(tick);
9519
9625
  return () => cancelAnimationFrame(raf);
9520
- }, [showProgress]);
9521
- const { chip, icon, bar, Icon: Icon3 } = variantConfig[toast.variant ?? "default"];
9522
- return /* @__PURE__ */ jsxs(
9523
- "div",
9524
- {
9525
- role: "status",
9526
- "data-state": exiting ? "closed" : "open",
9527
- className: cn(
9528
- "bg-surface border-rule text-fg rounded-card shadow-card pointer-events-auto relative w-80 overflow-hidden border p-4",
9529
- "font-body",
9530
- // Unified data-state animation (spec §5.27) — same model as Dialog/Tooltip:
9531
- // open → fade+slide in over --duration-overlay (200ms), ease-out-quart
9532
- // close → fade+slide out over --duration-fast (150ms), ease-in
9533
- "data-[state=open]:animate-in data-[state=open]:slide-in-from-right-8 data-[state=open]:fade-in-0",
9534
- "data-[state=open]:duration-[var(--duration-overlay)] data-[state=open]:ease-[var(--ease-out-quart)]",
9535
- "data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right-8 data-[state=closed]:fade-out-0",
9536
- "data-[state=closed]:duration-[var(--duration-fast)] data-[state=closed]:ease-[var(--ease-in)]",
9537
- "motion-reduce:animate-none"
9538
- ),
9539
- children: [
9540
- /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
9541
- /* @__PURE__ */ jsx(
9542
- "span",
9543
- {
9544
- className: cn(
9545
- "inline-flex size-8 shrink-0 items-center justify-center rounded-[9px]",
9546
- chip,
9547
- icon
9548
- ),
9549
- "aria-hidden": "true",
9550
- children: /* @__PURE__ */ jsx(Icon3, { className: "size-5" })
9551
- }
9552
- ),
9553
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
9554
- /* @__PURE__ */ jsx("p", { className: "text-fg text-sm leading-tight font-semibold", children: toast.title }),
9555
- toast.description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-sm leading-snug", children: toast.description }),
9556
- toast.action && /* @__PURE__ */ jsx(
9626
+ }, [duration, showProgress, close, toast.seq]);
9627
+ const dragRef = useRef(null);
9628
+ const onPointerDown = (e) => {
9629
+ if (e.target.closest("button")) return;
9630
+ dragRef.current = { startX: e.clientX, dx: 0 };
9631
+ pausedRef.current = true;
9632
+ cardRef.current?.setPointerCapture(e.pointerId);
9633
+ };
9634
+ const onPointerMove = (e) => {
9635
+ const drag = dragRef.current;
9636
+ if (!drag || !cardRef.current) return;
9637
+ drag.dx = Math.max(0, e.clientX - drag.startX);
9638
+ cardRef.current.style.transform = `translateX(${drag.dx}px)`;
9639
+ cardRef.current.style.opacity = `${Math.max(0.3, 1 - drag.dx / 240)}`;
9640
+ };
9641
+ const endDrag = (e) => {
9642
+ const drag = dragRef.current;
9643
+ dragRef.current = null;
9644
+ cardRef.current?.releasePointerCapture?.(e.pointerId);
9645
+ if (!drag || !cardRef.current) return;
9646
+ if (drag.dx >= SWIPE_DISMISS_PX) {
9647
+ close();
9648
+ return;
9649
+ }
9650
+ cardRef.current.style.transform = "";
9651
+ cardRef.current.style.opacity = "";
9652
+ pausedRef.current = false;
9653
+ };
9654
+ const { chip, icon, bar, Icon: Icon3, spin } = variantConfig[toast.variant];
9655
+ return (
9656
+ // Pointer/hover handlers add pause-on-hover + swipe-to-dismiss as progressive
9657
+ // enhancement only — keyboard/AT users dismiss via the explicit Dismiss
9658
+ // button below, and the live region (role=status) still announces content.
9659
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
9660
+ /* @__PURE__ */ jsxs(
9661
+ "div",
9662
+ {
9663
+ ref: cardRef,
9664
+ role: "status",
9665
+ "data-state": exiting ? "closed" : "open",
9666
+ onPointerDown,
9667
+ onPointerMove,
9668
+ onPointerUp: endDrag,
9669
+ onPointerCancel: endDrag,
9670
+ onMouseEnter: () => {
9671
+ pausedRef.current = true;
9672
+ },
9673
+ onMouseLeave: () => {
9674
+ if (!dragRef.current) pausedRef.current = false;
9675
+ },
9676
+ onFocusCapture: () => {
9677
+ pausedRef.current = true;
9678
+ },
9679
+ onBlurCapture: () => {
9680
+ if (!dragRef.current) pausedRef.current = false;
9681
+ },
9682
+ className: cn(
9683
+ "bg-surface border-rule text-fg rounded-card shadow-card pointer-events-auto relative w-80 touch-none overflow-hidden border p-4",
9684
+ "font-body select-none",
9685
+ // Unified data-state animation (spec §5.27) — same model as Dialog/Tooltip:
9686
+ // open → fade+slide in over --duration-overlay (200ms), ease-out-quart
9687
+ // close → fade+slide out over --duration-fast (150ms), ease-in
9688
+ "data-[state=open]:animate-in data-[state=open]:slide-in-from-right-8 data-[state=open]:fade-in-0",
9689
+ "data-[state=open]:duration-[var(--duration-overlay)] data-[state=open]:ease-[var(--ease-out-quart)]",
9690
+ "data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right-8 data-[state=closed]:fade-out-0",
9691
+ "data-[state=closed]:duration-[var(--duration-fast)] data-[state=closed]:ease-[var(--ease-in)]",
9692
+ "motion-reduce:animate-none"
9693
+ ),
9694
+ children: [
9695
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
9696
+ /* @__PURE__ */ jsx(
9697
+ "span",
9698
+ {
9699
+ className: cn(
9700
+ "inline-flex size-8 shrink-0 items-center justify-center rounded-[9px]",
9701
+ chip,
9702
+ icon
9703
+ ),
9704
+ "aria-hidden": "true",
9705
+ children: /* @__PURE__ */ jsx(Icon3, { className: cn("size-5", spin && "animate-spin motion-reduce:animate-none") })
9706
+ }
9707
+ ),
9708
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
9709
+ /* @__PURE__ */ jsx("p", { className: "text-fg text-sm leading-tight font-semibold", children: toast.title }),
9710
+ toast.description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-sm leading-snug", children: toast.description }),
9711
+ toast.action && /* @__PURE__ */ jsx(
9712
+ "button",
9713
+ {
9714
+ type: "button",
9715
+ onClick: () => {
9716
+ toast.action?.onClick();
9717
+ close();
9718
+ },
9719
+ className: cn(
9720
+ "text-pro-fg mt-2 text-sm font-semibold",
9721
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none",
9722
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] rounded-sm focus-visible:outline-none"
9723
+ ),
9724
+ children: toast.action.label
9725
+ }
9726
+ )
9727
+ ] }),
9728
+ /* @__PURE__ */ jsx(
9557
9729
  "button",
9558
9730
  {
9559
9731
  type: "button",
9560
- onClick: () => {
9561
- toast.action?.onClick();
9562
- close();
9563
- },
9732
+ onClick: close,
9564
9733
  className: cn(
9565
- "text-pro-fg mt-2 text-sm font-semibold",
9566
- "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none",
9567
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] rounded-sm focus-visible:outline-none"
9734
+ "text-fg-4 hover:text-fg-2 rounded-icon -mr-1 inline-flex size-5 shrink-0 items-center justify-center",
9735
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
9736
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
9568
9737
  ),
9569
- children: toast.action.label
9738
+ "aria-label": "Dismiss",
9739
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5", "aria-hidden": "true" })
9570
9740
  }
9571
9741
  )
9572
9742
  ] }),
9573
- /* @__PURE__ */ jsx(
9574
- "button",
9575
- {
9576
- type: "button",
9577
- onClick: close,
9578
- className: cn(
9579
- "text-fg-4 hover:text-fg-2 rounded-icon -mr-1 inline-flex size-5 shrink-0 items-center justify-center",
9580
- "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
9581
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
9582
- ),
9583
- "aria-label": "Dismiss",
9584
- children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5", "aria-hidden": "true" })
9585
- }
9586
- )
9587
- ] }),
9588
- showProgress && /* @__PURE__ */ jsx("div", { className: "bg-rule absolute inset-x-0 bottom-0 h-1", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
9589
- "div",
9590
- {
9591
- className: cn(
9592
- "h-full transition-[width] ease-linear motion-reduce:transition-none",
9593
- bar
9594
- ),
9595
- style: { width: filled ? "100%" : "0%", transitionDuration: `${duration}ms` }
9596
- }
9597
- ) })
9598
- ]
9599
- }
9743
+ showProgress && /* @__PURE__ */ jsx("div", { className: "bg-rule absolute inset-x-0 bottom-0 h-1", "aria-hidden": "true", children: /* @__PURE__ */ jsx("div", { ref: barRef, className: cn("h-full", bar), style: { width: "0%" } }) })
9744
+ ]
9745
+ }
9746
+ )
9600
9747
  );
9601
9748
  }
9602
9749
  var itemVariants = cva(
@@ -9770,127 +9917,1028 @@ function IntentBadge({ tone = "muted", icon, children, className, ...props }) {
9770
9917
  );
9771
9918
  }
9772
9919
  IntentBadge.displayName = "IntentBadge";
9773
- function AiSpark({ size = 16, className }) {
9774
- const id = useId();
9775
- return /* @__PURE__ */ jsxs(
9776
- "svg",
9777
- {
9778
- width: size,
9779
- height: size * 12 / 16,
9780
- viewBox: "0 0 16 12",
9781
- fill: "none",
9782
- className: cn("block shrink-0", className),
9783
- "aria-hidden": "true",
9784
- children: [
9785
- /* @__PURE__ */ jsx(
9786
- "path",
9787
- {
9788
- 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",
9789
- fill: `url(#${id})`
9790
- }
9791
- ),
9792
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
9793
- "linearGradient",
9794
- {
9795
- id,
9796
- x1: "0.265576",
9797
- y1: "0.856805",
9798
- x2: "13.5",
9799
- y2: "12",
9800
- gradientUnits: "userSpaceOnUse",
9801
- children: [
9802
- /* @__PURE__ */ jsx("stop", { stopColor: "#9E32FF" }),
9803
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#1BB6FF" })
9804
- ]
9805
- }
9806
- ) })
9807
- ]
9808
- }
9809
- );
9810
- }
9811
- function Field({ label, value, confirmed }) {
9812
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
9813
- /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11px]", children: label }),
9814
- /* @__PURE__ */ jsxs("span", { className: "text-fg inline-flex items-center gap-1 text-sm font-medium", children: [
9815
- value,
9816
- confirmed && /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg size-3", strokeWidth: 3 })
9817
- ] })
9818
- ] });
9819
- }
9820
- var AIReceiptPanel = forwardRef(function AIReceiptPanel2({ state = "idle", result, onAttach, onRemove, onViewFile, className, ...props }, ref) {
9821
- if (state === "reading") {
9822
- return /* @__PURE__ */ jsxs(
9823
- "div",
9824
- {
9825
- ref,
9826
- role: "status",
9827
- "aria-live": "polite",
9828
- className: cn(
9829
- "border-rule bg-surface-2 flex items-center gap-3 rounded-[var(--radius-input)] border p-3",
9830
- className
9831
- ),
9832
- ...props,
9833
- children: [
9834
- /* @__PURE__ */ jsx(AiSpark, { size: 18, className: "motion-safe:animate-pulse" }),
9835
- /* @__PURE__ */ jsxs("div", { children: [
9836
- /* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: "Reading your receipt\u2026" }),
9837
- /* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: "Pulling the vendor, amount and a suggested category." })
9838
- ] })
9839
- ]
9840
- }
9841
- );
9842
- }
9843
- if (state === "done" && result) {
9920
+ var ICON_BTN = cn(
9921
+ "inline-flex size-9 shrink-0 items-center justify-center rounded-[9px]",
9922
+ "border-rule-strong bg-surface text-fg-3 border",
9923
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
9924
+ "hover:bg-bg-2 hover:text-fg",
9925
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
9926
+ );
9927
+ var AgreementViewer = forwardRef(
9928
+ function AgreementViewer2({
9929
+ title,
9930
+ overline = "Signed agreement",
9931
+ steps,
9932
+ firm,
9933
+ status = "signed",
9934
+ banner,
9935
+ accent,
9936
+ coverRail = true,
9937
+ step,
9938
+ defaultStep = 0,
9939
+ onStepChange,
9940
+ onDownload,
9941
+ onClose,
9942
+ headerActions,
9943
+ className
9944
+ }, ref) {
9945
+ const [internalStep, setInternalStep] = useState(defaultStep);
9946
+ const current = step ?? internalStep;
9947
+ const isControlled = step !== void 0;
9948
+ const lastIndex = steps.length - 1;
9949
+ const goTo = (n) => {
9950
+ if (n < 0 || n > lastIndex || n === current) return;
9951
+ if (!isControlled) setInternalStep(n);
9952
+ onStepChange?.(n);
9953
+ };
9954
+ const isCover = current === 0;
9955
+ const monogram = firm.initials ?? firm.name.charAt(0);
9956
+ const bannerContent = banner === void 0 ? status === "signed" ? "Showing the services your client accepted, at the prices locked in at signing." : "Review each section at your pace, then sign whenever you're ready." : banner;
9844
9957
  return /* @__PURE__ */ jsxs(
9845
9958
  "div",
9846
9959
  {
9847
9960
  ref,
9961
+ "data-slot": "agreement-viewer",
9962
+ "data-status": status,
9963
+ "data-view": isCover ? "cover" : "inner",
9964
+ style: accent ? { "--av-accent": accent } : void 0,
9848
9965
  className: cn(
9849
- "border-rule bg-surface-2 flex flex-col gap-3 rounded-[var(--radius-input)] border p-3",
9966
+ // Fills its container's height so the content pane scrolls internally
9967
+ // while the header, rail, and footer stay fixed — give the parent a
9968
+ // height (e.g. h-screen / a fixed card height). Falls back to a 600px
9969
+ // floor so it never collapses when dropped in an unsized container.
9970
+ // Responsive via CONTAINER queries (@container/agreement), not viewport:
9971
+ // the side rails + generous padding only appear when the viewer's own
9972
+ // container is wide (≥64rem). In a phone frame or a narrow panel it
9973
+ // collapses to the single-column compact layout regardless of the
9974
+ // browser viewport.
9975
+ "group/agreement @container/agreement bg-bg text-fg flex h-full min-h-[600px] flex-col font-sans",
9850
9976
  className
9851
9977
  ),
9852
- ...props,
9853
9978
  children: [
9854
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
9855
- /* @__PURE__ */ jsxs("span", { className: "text-fg-2 inline-flex items-center gap-1.5 text-xs font-semibold", children: [
9856
- /* @__PURE__ */ jsx(AiSpark, { size: 14 }),
9857
- " Auto-filled from receipt"
9979
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center gap-2.5 px-4 pt-4 pb-3 @5xl/agreement:gap-3.5 @5xl/agreement:px-7", children: [
9980
+ /* @__PURE__ */ jsx(
9981
+ "span",
9982
+ {
9983
+ "aria-hidden": "true",
9984
+ className: "rounded-icon flex size-9 shrink-0 items-center justify-center bg-[var(--av-accent-tint)] text-[var(--av-accent)]",
9985
+ children: /* @__PURE__ */ jsx(EyeIcon, { className: "size-4.5" })
9986
+ }
9987
+ ),
9988
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col", children: [
9989
+ /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11.5px] leading-tight font-semibold", children: overline }),
9990
+ /* @__PURE__ */ jsx("span", { className: "font-display text-fg truncate text-[17px] leading-tight font-semibold tracking-tight", children: title })
9858
9991
  ] }),
9859
- onRemove && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRemove, children: "Remove" })
9992
+ /* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
9993
+ !isCover && /* @__PURE__ */ jsxs("span", { className: "border-rule bg-bg-2 text-fg-2 shrink-0 rounded-md border px-2.5 py-1 text-xs font-semibold whitespace-nowrap", children: [
9994
+ "Step ",
9995
+ current + 1,
9996
+ " of ",
9997
+ steps.length
9998
+ ] }),
9999
+ headerActions,
10000
+ onDownload && /* @__PURE__ */ jsxs(
10001
+ "button",
10002
+ {
10003
+ type: "button",
10004
+ onClick: onDownload,
10005
+ "aria-label": "Download PDF",
10006
+ className: cn(
10007
+ "inline-flex h-9 shrink-0 items-center gap-1.5 rounded-[9px] px-2.5 text-[13px] font-medium whitespace-nowrap @5xl/agreement:px-3.5",
10008
+ "border-rule-strong bg-surface text-fg border",
10009
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10010
+ "hover:bg-bg-2",
10011
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
10012
+ ),
10013
+ children: [
10014
+ /* @__PURE__ */ jsx(DownloadIcon, { className: "size-4", "aria-hidden": "true" }),
10015
+ /* @__PURE__ */ jsx("span", { className: "hidden @5xl/agreement:inline", children: "Download PDF" })
10016
+ ]
10017
+ }
10018
+ ),
10019
+ onClose && /* @__PURE__ */ jsx("button", { type: "button", onClick: onClose, "aria-label": "Close", className: ICON_BTN, children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" }) })
10020
+ ] })
9860
10021
  ] }),
9861
- /* @__PURE__ */ jsx(
9862
- FileChip,
10022
+ bannerContent != null && /* @__PURE__ */ jsxs(
10023
+ "div",
9863
10024
  {
9864
- name: result.file.name,
9865
- meta: result.file.meta,
9866
- className: "bg-surface",
9867
- action: onViewFile && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onViewFile, children: "View" })
10025
+ className: cn(
10026
+ "mx-4 flex items-center gap-2.5 rounded-[11px] border px-4 py-2.5 text-[13.5px] font-medium @5xl/agreement:mx-7",
10027
+ status === "signed" ? "border-success-line bg-success-bg text-success-fg" : "border-[var(--av-accent-tint2)] bg-[var(--av-accent-tint)] text-[var(--av-accent-soft)]"
10028
+ ),
10029
+ children: [
10030
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0", "aria-hidden": "true" }),
10031
+ /* @__PURE__ */ jsx("span", { children: bannerContent })
10032
+ ]
9868
10033
  }
9869
10034
  ),
9870
- /* @__PURE__ */ jsxs("div", { className: "border-rule grid grid-cols-3 gap-3 border-t pt-3", children: [
9871
- /* @__PURE__ */ jsx(Field, { label: "Vendor", value: result.vendor }),
9872
- /* @__PURE__ */ jsx(Field, { label: "Amount", value: result.amount, confirmed: true }),
9873
- /* @__PURE__ */ jsx(Field, { label: "Date", value: result.date, confirmed: true })
9874
- ] })
9875
- ]
9876
- }
9877
- );
9878
- }
9879
- return /* @__PURE__ */ jsxs(
9880
- "button",
9881
- {
9882
- ref,
9883
- type: "button",
9884
- onClick: onAttach,
9885
- className: cn(
9886
- "group border-rule-strong bg-surface hover:border-pro-fg/50 hover:bg-pro-bg/40 flex w-full items-center gap-3 rounded-[var(--radius-input)] border-2 border-dashed p-3 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
9887
- className
9888
- ),
9889
- ...props,
9890
- children: [
9891
- /* @__PURE__ */ jsx(AiSpark, { size: 19 }),
9892
- /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
9893
- /* @__PURE__ */ jsx("span", { className: "text-fg block text-sm font-medium", children: "Attach receipt \u2014 auto-fill with AI" }),
10035
+ /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col px-4 pt-3 pb-5 @5xl/agreement:px-7 @5xl/agreement:pb-8", children: [
10036
+ /* @__PURE__ */ jsxs("div", { className: "border-rule bg-surface shadow-card flex min-h-0 flex-1 overflow-hidden rounded-[18px] border", children: [
10037
+ coverRail && /* @__PURE__ */ jsxs(
10038
+ "aside",
10039
+ {
10040
+ className: "hidden w-[340px] shrink-0 flex-col overflow-y-auto p-8 text-white @5xl/agreement:group-data-[view=cover]/agreement:flex",
10041
+ style: {
10042
+ backgroundImage: "linear-gradient(166deg, var(--av-accent-light) 0%, var(--av-accent) 50%, var(--av-accent-deep) 100%)"
10043
+ },
10044
+ children: [
10045
+ /* @__PURE__ */ jsx(
10046
+ "span",
10047
+ {
10048
+ "aria-hidden": "true",
10049
+ className: "rounded-card flex size-[54px] items-center justify-center bg-white text-[17px] font-semibold text-[var(--av-accent)] shadow-md",
10050
+ children: monogram
10051
+ }
10052
+ ),
10053
+ /* @__PURE__ */ jsx("div", { className: "mt-4 text-[21px] leading-tight font-semibold", children: firm.name }),
10054
+ firm.tagline && /* @__PURE__ */ jsx("div", { className: "mt-1.5 text-[13px] leading-snug text-white/80", children: firm.tagline }),
10055
+ firm.contact && /* @__PURE__ */ jsxs("div", { className: "mt-auto pt-7", children: [
10056
+ /* @__PURE__ */ jsx("div", { className: "mb-4 h-px bg-white/20" }),
10057
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 text-[12.5px] text-white/90", children: [
10058
+ firm.contact.phone && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2.5", children: [
10059
+ /* @__PURE__ */ jsx(PhoneIcon, { className: "size-4 shrink-0 opacity-85", "aria-hidden": "true" }),
10060
+ firm.contact.phone
10061
+ ] }),
10062
+ firm.contact.email && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2.5", children: [
10063
+ /* @__PURE__ */ jsx(MailIcon, { className: "size-4 shrink-0 opacity-85", "aria-hidden": "true" }),
10064
+ firm.contact.email
10065
+ ] }),
10066
+ firm.contact.website && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2.5", children: [
10067
+ /* @__PURE__ */ jsx(GlobeIcon, { className: "size-4 shrink-0 opacity-85", "aria-hidden": "true" }),
10068
+ firm.contact.website
10069
+ ] })
10070
+ ] })
10071
+ ] })
10072
+ ]
10073
+ }
10074
+ ),
10075
+ /* @__PURE__ */ jsxs("aside", { className: "border-rule bg-surface-2 hidden w-[300px] shrink-0 flex-col overflow-y-auto border-r px-6 py-7 @5xl/agreement:group-data-[view=inner]/agreement:flex", children: [
10076
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
10077
+ /* @__PURE__ */ jsx(
10078
+ "span",
10079
+ {
10080
+ "aria-hidden": "true",
10081
+ className: "rounded-icon flex size-10 shrink-0 items-center justify-center bg-[var(--av-accent)] text-[13px] font-bold text-[var(--av-accent-contrast)]",
10082
+ children: monogram
10083
+ }
10084
+ ),
10085
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
10086
+ /* @__PURE__ */ jsx("div", { className: "text-fg truncate text-sm font-semibold", children: firm.name }),
10087
+ /* @__PURE__ */ jsx("div", { className: "text-fg-4 text-[11.5px]", children: firm.subtitle ?? "Your proposal" })
10088
+ ] })
10089
+ ] }),
10090
+ /* @__PURE__ */ jsx("div", { className: "text-fg-5 mt-6 text-[11.5px] font-semibold tracking-wide", children: "Sections" }),
10091
+ /* @__PURE__ */ jsx("nav", { "aria-label": "Agreement sections", className: "mt-3 flex flex-col gap-0.5", children: steps.map((s, i) => {
10092
+ const on = i === current;
10093
+ const done = status === "signed" ? i !== current && i !== 0 : i < current;
10094
+ return /* @__PURE__ */ jsxs(
10095
+ "button",
10096
+ {
10097
+ type: "button",
10098
+ onClick: () => goTo(i),
10099
+ "aria-current": on ? "step" : void 0,
10100
+ "data-on": on || void 0,
10101
+ "data-done": done || void 0,
10102
+ "data-first": i === 0 || void 0,
10103
+ className: cn(
10104
+ "group/step text-fg-3 relative z-[1] flex w-full items-center gap-3.5 rounded-[12px] py-2.5 pr-3.5 pl-2 text-left text-[13.5px] font-medium",
10105
+ "transition-colors duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10106
+ "hover:bg-bg-2",
10107
+ "data-[on]:bg-[var(--av-accent-tint)] data-[on]:font-semibold data-[on]:text-[var(--av-accent-soft)]",
10108
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
10109
+ ),
10110
+ children: [
10111
+ /* @__PURE__ */ jsx(
10112
+ "span",
10113
+ {
10114
+ "aria-hidden": "true",
10115
+ className: cn(
10116
+ "relative flex size-7 shrink-0 items-center justify-center rounded-full border-[1.5px] text-[12.5px] font-semibold",
10117
+ "border-[var(--av-accent-tint2)] bg-[var(--color-surface)] text-[var(--av-accent)]",
10118
+ "transition-colors duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10119
+ // connector to the node above (skipped on the first step)
10120
+ "before:absolute before:bottom-full before:left-1/2 before:h-[18px] before:w-[2.5px] before:-translate-x-1/2 before:rounded-full before:bg-[var(--av-accent-tint2)] before:transition-colors before:content-['']",
10121
+ "group-data-[first]/step:before:hidden",
10122
+ "group-data-[done]/step:border-[var(--av-accent)] group-data-[done]/step:bg-[var(--av-accent)] group-data-[done]/step:text-[var(--av-accent-contrast)] group-data-[done]/step:before:bg-[var(--av-accent)]",
10123
+ "group-data-[on]/step:border-[var(--av-accent)] group-data-[on]/step:bg-[var(--av-accent)] group-data-[on]/step:text-[var(--av-accent-contrast)] group-data-[on]/step:before:bg-[var(--av-accent)]"
10124
+ ),
10125
+ children: s.icon ?? (i === 0 ? /* @__PURE__ */ jsx(HomeIcon, { className: "size-3.5" }) : done ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" }) : i)
10126
+ }
10127
+ ),
10128
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: s.label })
10129
+ ]
10130
+ },
10131
+ s.id
10132
+ );
10133
+ }) })
10134
+ ] }),
10135
+ /* @__PURE__ */ jsx("section", { className: "@container/pane scrollbar-thin flex min-w-0 flex-1 flex-col overflow-y-auto px-5 py-7 @5xl/agreement:px-[52px] @5xl/agreement:py-11", children: steps[current]?.content })
10136
+ ] }),
10137
+ /* @__PURE__ */ jsxs("div", { className: "mt-4 flex items-center justify-between", children: [
10138
+ /* @__PURE__ */ jsxs(
10139
+ "button",
10140
+ {
10141
+ type: "button",
10142
+ onClick: () => goTo(current - 1),
10143
+ disabled: current === 0,
10144
+ className: cn(
10145
+ "inline-flex h-[42px] items-center gap-1.5 rounded-[11px] px-4 text-sm font-medium",
10146
+ "border-rule-strong bg-surface text-fg-2 border",
10147
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10148
+ "hover:bg-bg-2",
10149
+ "disabled:border-rule disabled:text-fg-disabled disabled:cursor-default disabled:bg-transparent",
10150
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
10151
+ ),
10152
+ children: [
10153
+ /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "size-4", "aria-hidden": "true" }),
10154
+ "Previous"
10155
+ ]
10156
+ }
10157
+ ),
10158
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", children: steps.map((s, i) => /* @__PURE__ */ jsx(
10159
+ "button",
10160
+ {
10161
+ type: "button",
10162
+ onClick: () => goTo(i),
10163
+ "aria-label": `Go to ${s.label}`,
10164
+ "aria-current": i === current ? "step" : void 0,
10165
+ className: cn(
10166
+ "bg-rule-strong h-2 rounded-full",
10167
+ "transition-[width,background-color] duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10168
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
10169
+ i === current ? "w-[22px] bg-[var(--av-accent)]" : "w-2"
10170
+ )
10171
+ },
10172
+ s.id
10173
+ )) }),
10174
+ /* @__PURE__ */ jsxs(
10175
+ "button",
10176
+ {
10177
+ type: "button",
10178
+ onClick: () => goTo(current + 1),
10179
+ style: current === lastIndex ? { visibility: "hidden" } : void 0,
10180
+ className: cn(
10181
+ "inline-flex h-[42px] items-center gap-2 rounded-[11px] px-5 text-sm font-semibold",
10182
+ "bg-[var(--av-accent)] text-[var(--av-accent-contrast)]",
10183
+ "transition-[filter] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10184
+ "hover:brightness-105",
10185
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
10186
+ ),
10187
+ children: [
10188
+ "Next",
10189
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-4", "aria-hidden": "true" })
10190
+ ]
10191
+ }
10192
+ )
10193
+ ] })
10194
+ ] })
10195
+ ]
10196
+ }
10197
+ );
10198
+ }
10199
+ );
10200
+ AgreementViewer.displayName = "AgreementViewer";
10201
+ var AgreementPaneHeading = forwardRef(
10202
+ function AgreementPaneHeading2({ overline, title, subtitle, className, ...props }, ref) {
10203
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("mb-6", className), ...props, children: [
10204
+ overline && /* @__PURE__ */ jsx("div", { className: "mb-1.5 text-xs font-semibold tracking-wide text-[var(--av-accent-soft)]", children: overline }),
10205
+ /* @__PURE__ */ jsx("h2", { className: "font-display text-fg text-[27px] leading-tight font-bold tracking-tight", children: title }),
10206
+ subtitle && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-2 text-sm leading-relaxed", children: subtitle })
10207
+ ] });
10208
+ }
10209
+ );
10210
+ AgreementPaneHeading.displayName = "AgreementPaneHeading";
10211
+ var ProposalServiceRow = forwardRef(
10212
+ function ProposalServiceRow2({ name, description, price, originalPrice, marker = "check", className, ...props }, ref) {
10213
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-start gap-2.5 py-1.5", className), ...props, children: [
10214
+ marker === "check" && /* @__PURE__ */ jsx(
10215
+ CheckIcon,
10216
+ {
10217
+ className: "mt-0.5 size-3.5 shrink-0 text-[var(--av-accent,var(--color-accent))]",
10218
+ "aria-hidden": "true"
10219
+ }
10220
+ ),
10221
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10222
+ /* @__PURE__ */ jsx("div", { className: "text-fg-2 text-[12.5px] leading-snug", children: name }),
10223
+ description && /* @__PURE__ */ jsx("div", { className: "text-fg-4 mt-0.5 text-[11.5px] leading-snug", children: description })
10224
+ ] }),
10225
+ (price != null || originalPrice != null) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-baseline gap-1.5 text-xs", children: [
10226
+ originalPrice != null && /* @__PURE__ */ jsx("span", { className: "text-fg-5 line-through", children: originalPrice }),
10227
+ price != null && /* @__PURE__ */ jsx("span", { className: "text-fg-3 tabular", children: price })
10228
+ ] })
10229
+ ] });
10230
+ }
10231
+ );
10232
+ ProposalServiceRow.displayName = "ProposalServiceRow";
10233
+ var CONTROL_LABEL = {
10234
+ choice: ["Selected", "Select package"],
10235
+ addon: ["Added", "Add to proposal"],
10236
+ included: ["Included", "Included"]
10237
+ };
10238
+ var ProposalPackageCard = forwardRef(
10239
+ function ProposalPackageCard2({
10240
+ name,
10241
+ summary,
10242
+ price,
10243
+ priceCaption,
10244
+ originalPrice,
10245
+ savings,
10246
+ mode = "choice",
10247
+ selected = false,
10248
+ badge,
10249
+ servicesLabel = "Included services",
10250
+ children,
10251
+ onSelect,
10252
+ disabled = false,
10253
+ className,
10254
+ ...props
10255
+ }, ref) {
10256
+ const interactive = mode !== "included" && !!onSelect;
10257
+ const [onLabel, offLabel] = CONTROL_LABEL[mode];
10258
+ return /* @__PURE__ */ jsxs(
10259
+ "div",
10260
+ {
10261
+ ref,
10262
+ "data-selected": selected || void 0,
10263
+ className: cn(
10264
+ "border-rule bg-surface relative flex flex-col rounded-[14px] border p-4",
10265
+ "data-[selected]:border-[var(--av-accent,var(--color-accent))] data-[selected]:shadow-[0_0_0_1px_var(--av-accent,var(--color-accent))]",
10266
+ className
10267
+ ),
10268
+ ...props,
10269
+ children: [
10270
+ (badge || selected) && /* @__PURE__ */ jsxs("span", { className: "rounded-pill absolute -top-2.5 left-4 flex items-center gap-1 bg-[var(--av-accent,var(--color-accent))] px-2 py-1 text-[10px] font-bold tracking-wide text-[var(--av-accent-contrast,var(--color-fg-on-accent))]", children: [
10271
+ selected && /* @__PURE__ */ jsx(CheckIcon, { className: "size-3", "aria-hidden": "true" }),
10272
+ badge ?? (selected ? onLabel : null)
10273
+ ] }),
10274
+ /* @__PURE__ */ jsx("div", { className: "text-fg text-[15px] font-semibold", children: name }),
10275
+ summary && /* @__PURE__ */ jsx("div", { className: "text-fg-4 mt-0.5 text-xs", children: summary }),
10276
+ price != null && /* @__PURE__ */ jsxs("div", { className: "mt-2.5", children: [
10277
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
10278
+ originalPrice != null && /* @__PURE__ */ jsx("span", { className: "text-fg-5 text-base line-through", children: originalPrice }),
10279
+ /* @__PURE__ */ jsx("span", { className: "text-fg text-[23px] font-bold tracking-tight tabular", children: price })
10280
+ ] }),
10281
+ priceCaption && /* @__PURE__ */ jsx("div", { className: "text-fg-4 text-[11.5px]", children: priceCaption }),
10282
+ savings && /* @__PURE__ */ jsx("div", { className: "text-success-fg mt-1 text-[11.5px] font-semibold", children: savings })
10283
+ ] }),
10284
+ children && /* @__PURE__ */ jsxs(Fragment, { children: [
10285
+ /* @__PURE__ */ jsx("div", { className: "text-fg-3 mt-4 mb-1 text-[11.5px] font-semibold tracking-wide", children: servicesLabel }),
10286
+ /* @__PURE__ */ jsx("div", { children })
10287
+ ] }),
10288
+ /* @__PURE__ */ jsx("div", { className: "mt-auto pt-4", children: interactive ? /* @__PURE__ */ jsx(
10289
+ "button",
10290
+ {
10291
+ type: "button",
10292
+ role: mode === "addon" ? "checkbox" : "radio",
10293
+ "aria-checked": selected,
10294
+ disabled,
10295
+ onClick: onSelect,
10296
+ className: cn(
10297
+ "rounded-input flex h-10 w-full items-center justify-center text-[13.5px] font-semibold",
10298
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10299
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
10300
+ selected ? "bg-[var(--av-accent,var(--color-accent))] text-[var(--av-accent-contrast,var(--color-fg-on-accent))]" : "border-rule-strong text-fg hover:bg-bg-2 border",
10301
+ "disabled:cursor-not-allowed disabled:opacity-60"
10302
+ ),
10303
+ children: selected ? onLabel : offLabel
10304
+ }
10305
+ ) : /* @__PURE__ */ jsxs(
10306
+ "div",
10307
+ {
10308
+ className: cn(
10309
+ "rounded-input flex h-10 w-full items-center justify-center gap-1.5 text-[13.5px] font-semibold",
10310
+ mode === "included" ? "bg-[var(--av-accent-tint,var(--color-accent-tint))] text-[var(--av-accent-soft,var(--color-accent-2))]" : "border-rule text-fg-3 border"
10311
+ ),
10312
+ children: [
10313
+ mode === "included" && /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }),
10314
+ selected ? onLabel : offLabel
10315
+ ]
10316
+ }
10317
+ ) })
10318
+ ]
10319
+ }
10320
+ );
10321
+ }
10322
+ );
10323
+ ProposalPackageCard.displayName = "ProposalPackageCard";
10324
+ var BILLING_ICON = {
10325
+ now: CreditCardIcon,
10326
+ auto: RotateCcwIcon,
10327
+ review: EyeIcon,
10328
+ manual: ReceiptIcon,
10329
+ onetime: CheckIcon
10330
+ };
10331
+ var ProposalBillingTerms = forwardRef(
10332
+ function ProposalBillingTerms2({ title = "How billing works", rows, locked = true, className, ...props }, ref) {
10333
+ return /* @__PURE__ */ jsxs(
10334
+ "div",
10335
+ {
10336
+ ref,
10337
+ className: cn("border-rule overflow-hidden rounded-[14px] border", className),
10338
+ ...props,
10339
+ children: [
10340
+ title && /* @__PURE__ */ jsx("div", { className: "border-rule bg-surface-2 text-fg border-b px-5 py-3 text-[13px] font-semibold", children: title }),
10341
+ /* @__PURE__ */ jsx("div", { className: "divide-rule-soft divide-y", children: rows.map((r, i) => {
10342
+ const Icon3 = BILLING_ICON[r.mode ?? "now"];
10343
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3.5 px-5 py-3.5", children: [
10344
+ /* @__PURE__ */ jsx(
10345
+ "span",
10346
+ {
10347
+ "aria-hidden": "true",
10348
+ className: "rounded-icon mt-0.5 flex size-9 shrink-0 items-center justify-center bg-[var(--av-accent-tint,var(--color-accent-tint))] text-[var(--av-accent,var(--color-accent))]",
10349
+ children: /* @__PURE__ */ jsx(Icon3, { className: "size-4.5" })
10350
+ }
10351
+ ),
10352
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10353
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [
10354
+ /* @__PURE__ */ jsx("span", { className: "text-fg text-sm font-semibold", children: r.label }),
10355
+ r.amount != null && /* @__PURE__ */ jsxs("span", { className: "text-fg shrink-0 text-sm font-semibold tabular", children: [
10356
+ r.amount,
10357
+ r.cadence && /* @__PURE__ */ jsx("small", { className: "text-fg-4 ml-0.5 text-xs font-medium", children: r.cadence })
10358
+ ] })
10359
+ ] }),
10360
+ /* @__PURE__ */ jsx("div", { className: "text-fg-3 mt-0.5 text-[13px] leading-snug", children: r.detail })
10361
+ ] })
10362
+ ] }, i);
10363
+ }) }),
10364
+ locked && /* @__PURE__ */ jsxs("div", { className: "border-rule bg-surface-2 text-fg-4 flex items-center gap-2 border-t px-5 py-2.5 text-[12px]", children: [
10365
+ /* @__PURE__ */ jsx(LockIcon, { className: "size-3.5 shrink-0", "aria-hidden": "true" }),
10366
+ "Set by your firm \u2014 you can review these terms, but not change them."
10367
+ ] })
10368
+ ]
10369
+ }
10370
+ );
10371
+ }
10372
+ );
10373
+ ProposalBillingTerms.displayName = "ProposalBillingTerms";
10374
+ var ProposalAddOn = forwardRef(
10375
+ function ProposalAddOn2({ name, description, price, cadence, selected = false, onToggle, disabled, className, ...props }, ref) {
10376
+ return /* @__PURE__ */ jsxs(
10377
+ "button",
10378
+ {
10379
+ ref,
10380
+ type: "button",
10381
+ role: "checkbox",
10382
+ "aria-checked": selected,
10383
+ disabled,
10384
+ onClick: onToggle,
10385
+ "data-selected": selected || void 0,
10386
+ className: cn(
10387
+ "group/addon flex w-full items-center gap-3.5 rounded-[12px] border p-4 text-left",
10388
+ "border-rule bg-surface",
10389
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10390
+ "hover:bg-bg-2",
10391
+ "data-[selected]:border-[var(--av-accent,var(--color-accent))] data-[selected]:bg-[var(--av-accent-tint,var(--color-accent-tint))]",
10392
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
10393
+ "disabled:cursor-not-allowed disabled:opacity-60",
10394
+ className
10395
+ ),
10396
+ ...props,
10397
+ children: [
10398
+ /* @__PURE__ */ jsx(
10399
+ "span",
10400
+ {
10401
+ "aria-hidden": "true",
10402
+ className: cn(
10403
+ "flex size-5 shrink-0 items-center justify-center rounded-md border-[1.5px] text-transparent",
10404
+ "border-rule-strong",
10405
+ "group-data-[selected]/addon:border-[var(--av-accent,var(--color-accent))] group-data-[selected]/addon:bg-[var(--av-accent,var(--color-accent))] group-data-[selected]/addon:text-[var(--av-accent-contrast,var(--color-fg-on-accent))]"
10406
+ ),
10407
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
10408
+ }
10409
+ ),
10410
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10411
+ /* @__PURE__ */ jsx("div", { className: "text-fg text-sm font-semibold", children: name }),
10412
+ description && /* @__PURE__ */ jsx("div", { className: "text-fg-4 text-xs", children: description })
10413
+ ] }),
10414
+ (price != null || cadence != null) && /* @__PURE__ */ jsxs("div", { className: "shrink-0 text-right", children: [
10415
+ price != null && /* @__PURE__ */ jsx("div", { className: "text-fg text-[15px] font-bold tabular", children: price }),
10416
+ cadence != null && /* @__PURE__ */ jsx("div", { className: "text-fg-4 text-[11.5px]", children: cadence })
10417
+ ] })
10418
+ ]
10419
+ }
10420
+ );
10421
+ }
10422
+ );
10423
+ ProposalAddOn.displayName = "ProposalAddOn";
10424
+ var ProposalPricingSummary = forwardRef(
10425
+ function ProposalPricingSummary2({
10426
+ children,
10427
+ billing,
10428
+ savings,
10429
+ tax,
10430
+ taxLabel = "Tax",
10431
+ originalTotal,
10432
+ total,
10433
+ cadence,
10434
+ totalLabel = "Total due",
10435
+ schedule,
10436
+ className,
10437
+ ...props
10438
+ }, ref) {
10439
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("@container/summary flex flex-col", className), ...props, children: [
10440
+ children && /* @__PURE__ */ jsx("div", { className: "border-rule grid grid-cols-1 gap-x-6 gap-y-1 rounded-[14px] border p-6 @md/summary:grid-cols-2", children }),
10441
+ billing && /* @__PURE__ */ jsxs("div", { className: "mt-4 rounded-[14px] border border-[var(--av-accent-tint2,var(--color-accent-tint))] bg-[var(--av-accent-tint,var(--color-accent-tint))] p-5", children: [
10442
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
10443
+ /* @__PURE__ */ jsx("b", { className: "text-[13.5px] font-semibold text-[var(--av-accent-soft,var(--color-accent-2))]", children: billing.title ?? "Billing schedule" }),
10444
+ billing.caption && /* @__PURE__ */ jsx("span", { className: "text-[11.5px] text-[var(--av-accent-soft,var(--color-accent-2))] opacity-80", children: billing.caption })
10445
+ ] }),
10446
+ billing.rows?.map((r, i) => /* @__PURE__ */ jsxs(
10447
+ "div",
10448
+ {
10449
+ className: "text-fg-2 mt-2.5 flex items-center justify-between gap-3 text-[13.5px]",
10450
+ children: [
10451
+ /* @__PURE__ */ jsx("span", { children: r.label }),
10452
+ /* @__PURE__ */ jsx("b", { className: "font-semibold tabular", children: r.value })
10453
+ ]
10454
+ },
10455
+ i
10456
+ ))
10457
+ ] }),
10458
+ (savings || tax != null) && /* @__PURE__ */ jsxs("div", { className: "mt-4 space-y-2", children: [
10459
+ savings && /* @__PURE__ */ jsxs("div", { className: "text-success-fg flex items-center justify-between text-[13.5px] font-medium", children: [
10460
+ /* @__PURE__ */ jsx("span", { children: "Discount" }),
10461
+ /* @__PURE__ */ jsx("span", { className: "tabular", children: savings })
10462
+ ] }),
10463
+ tax != null && /* @__PURE__ */ jsxs("div", { className: "text-fg-3 flex items-center justify-between text-[13.5px]", children: [
10464
+ /* @__PURE__ */ jsx("span", { children: taxLabel }),
10465
+ /* @__PURE__ */ jsx("span", { className: "tabular", children: tax })
10466
+ ] })
10467
+ ] }),
10468
+ schedule ? /* @__PURE__ */ jsxs("div", { className: "border-rule mt-4 border-t pt-4", children: [
10469
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [
10470
+ /* @__PURE__ */ jsxs("div", { children: [
10471
+ /* @__PURE__ */ jsx("div", { className: "text-fg text-[15px] font-semibold", children: schedule.dueTodayLabel ?? "Due today" }),
10472
+ schedule.dueTodayCaption && /* @__PURE__ */ jsx("div", { className: "text-fg-4 text-xs", children: schedule.dueTodayCaption })
10473
+ ] }),
10474
+ /* @__PURE__ */ jsx("span", { className: "text-fg text-[26px] font-bold tabular", children: schedule.dueToday })
10475
+ ] }),
10476
+ schedule.then && schedule.then.length > 0 && /* @__PURE__ */ jsx("div", { className: "border-rule-soft mt-3 space-y-1.5 border-t pt-3", children: schedule.then.map((t, i) => /* @__PURE__ */ jsxs(
10477
+ "div",
10478
+ {
10479
+ className: "text-fg-3 flex items-baseline justify-between gap-3 text-[13.5px]",
10480
+ children: [
10481
+ /* @__PURE__ */ jsx("span", { children: t.label ?? "Then" }),
10482
+ /* @__PURE__ */ jsxs("span", { className: "tabular", children: [
10483
+ /* @__PURE__ */ jsx("b", { className: "text-fg-2 font-semibold", children: t.amount }),
10484
+ t.cadence && /* @__PURE__ */ jsx("small", { className: "text-fg-4 ml-1 text-[12px] font-medium", children: t.cadence })
10485
+ ] })
10486
+ ]
10487
+ },
10488
+ i
10489
+ )) })
10490
+ ] }) : total != null && /* @__PURE__ */ jsxs("div", { className: "border-rule mt-4 flex items-center justify-between border-t pt-4", children: [
10491
+ /* @__PURE__ */ jsx("span", { className: "text-fg text-[15px] font-semibold", children: totalLabel }),
10492
+ /* @__PURE__ */ jsxs("span", { className: "flex items-baseline gap-2", children: [
10493
+ originalTotal != null && /* @__PURE__ */ jsx("span", { className: "text-fg-5 text-base line-through", children: originalTotal }),
10494
+ /* @__PURE__ */ jsx("span", { className: "text-fg text-[22px] font-bold tabular", children: total }),
10495
+ cadence && /* @__PURE__ */ jsx("small", { className: "text-fg-4 text-[13px] font-medium", children: cadence })
10496
+ ] })
10497
+ ] })
10498
+ ] });
10499
+ }
10500
+ );
10501
+ ProposalPricingSummary.displayName = "ProposalPricingSummary";
10502
+ var KIND_META = {
10503
+ video: { label: "Video", icon: PlayIcon },
10504
+ pdf: { label: "Document", icon: FileTextIcon },
10505
+ text: { label: "Read", icon: FileTextIcon }
10506
+ };
10507
+ var ProposalCustomPage = forwardRef(
10508
+ function ProposalCustomPage2({ kind, title, caption, label, poster, onPlay, children, className, ...props }, ref) {
10509
+ const meta = KIND_META[kind];
10510
+ const Icon3 = meta.icon;
10511
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
10512
+ /* @__PURE__ */ jsxs("div", { className: "mb-1.5 flex items-center gap-1.5 text-xs font-semibold tracking-wide text-[var(--av-accent-soft,var(--color-accent-2))]", children: [
10513
+ /* @__PURE__ */ jsx(Icon3, { className: "size-3.5", "aria-hidden": "true" }),
10514
+ label ?? meta.label
10515
+ ] }),
10516
+ /* @__PURE__ */ jsx("h2", { className: "font-display text-fg text-[27px] leading-tight font-bold tracking-tight", children: title }),
10517
+ caption && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-2 text-sm leading-relaxed", children: caption }),
10518
+ /* @__PURE__ */ jsx("div", { className: "mt-5", children: kind === "video" && !children ? /* @__PURE__ */ jsx(PlayablePoster, { poster, onPlay, title }) : children })
10519
+ ] });
10520
+ }
10521
+ );
10522
+ ProposalCustomPage.displayName = "ProposalCustomPage";
10523
+ function PlayablePoster({
10524
+ poster,
10525
+ onPlay,
10526
+ title
10527
+ }) {
10528
+ const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
10529
+ /* @__PURE__ */ jsx(
10530
+ "span",
10531
+ {
10532
+ "aria-hidden": "true",
10533
+ className: "bg-bg-3 absolute inset-0 bg-cover bg-center",
10534
+ style: poster ? { backgroundImage: `url(${poster})` } : void 0
10535
+ }
10536
+ ),
10537
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "absolute inset-0 bg-black/15" }),
10538
+ /* @__PURE__ */ jsx(
10539
+ "span",
10540
+ {
10541
+ "aria-hidden": "true",
10542
+ className: "rounded-full relative flex size-16 items-center justify-center bg-white/90 text-[var(--av-accent,var(--color-accent))] shadow-lg",
10543
+ children: /* @__PURE__ */ jsx(PlayIcon, { className: "size-7" })
10544
+ }
10545
+ )
10546
+ ] });
10547
+ const cls = "relative flex aspect-video w-full items-center justify-center overflow-hidden rounded-[14px] border-rule border";
10548
+ return onPlay ? /* @__PURE__ */ jsx(
10549
+ "button",
10550
+ {
10551
+ type: "button",
10552
+ onClick: onPlay,
10553
+ "aria-label": typeof title === "string" ? `Play ${title}` : "Play video",
10554
+ className: cn(
10555
+ cls,
10556
+ "transition-[filter] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:brightness-105",
10557
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
10558
+ ),
10559
+ children: inner
10560
+ }
10561
+ ) : /* @__PURE__ */ jsx("div", { className: cls, children: inner });
10562
+ }
10563
+ var ProposalNote = forwardRef(
10564
+ function ProposalNote2({ title, children, tone = "accent", icon, className, ...props }, ref) {
10565
+ return /* @__PURE__ */ jsxs(
10566
+ "div",
10567
+ {
10568
+ ref,
10569
+ className: cn(
10570
+ "flex gap-3 rounded-[12px] border p-4 text-[13.5px] leading-relaxed",
10571
+ tone === "accent" ? "border-[var(--av-accent-tint2,var(--color-accent-tint))] bg-[var(--av-accent-tint,var(--color-accent-tint))] text-[var(--av-accent-soft,var(--color-accent-2))]" : "border-rule bg-bg-2 text-fg-2",
10572
+ className
10573
+ ),
10574
+ ...props,
10575
+ children: [
10576
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "mt-0.5 shrink-0", children: icon ?? /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }) }),
10577
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
10578
+ title && /* @__PURE__ */ jsx("div", { className: "text-fg font-semibold", children: title }),
10579
+ /* @__PURE__ */ jsx("div", { className: cn(title && "mt-0.5"), children })
10580
+ ] })
10581
+ ]
10582
+ }
10583
+ );
10584
+ }
10585
+ );
10586
+ ProposalNote.displayName = "ProposalNote";
10587
+ var STATUS_META = {
10588
+ signed: {
10589
+ label: "Signed",
10590
+ icon: CheckIcon,
10591
+ className: "text-success-fg bg-success-bg border-success-line"
10592
+ },
10593
+ viewed: {
10594
+ label: "Viewed",
10595
+ icon: EyeIcon,
10596
+ className: "text-[var(--av-accent-soft,var(--color-accent-2))] bg-[var(--av-accent-tint,var(--color-accent-tint))] border-[var(--av-accent-tint2,var(--color-accent-tint))]"
10597
+ },
10598
+ pending: { label: "Pending", icon: ClockIcon, className: "text-fg-3 bg-bg-2 border-rule" }
10599
+ };
10600
+ var ProposalSignerList = forwardRef(
10601
+ function ProposalSignerList2({ signers, title = "Recipients", className, ...props }, ref) {
10602
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
10603
+ title && /* @__PURE__ */ jsx("div", { className: "text-fg-3 mb-2 text-[11.5px] font-semibold tracking-wide", children: title }),
10604
+ /* @__PURE__ */ jsx("div", { className: "border-rule divide-rule divide-y overflow-hidden rounded-[12px] border", children: signers.map((s, i) => {
10605
+ const status = s.status ? STATUS_META[s.status] : null;
10606
+ const StatusIcon2 = status?.icon;
10607
+ const initials2 = s.name.split(" ").map((w) => w[0]).slice(0, 2).join("").toUpperCase();
10608
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [
10609
+ /* @__PURE__ */ jsx(
10610
+ "span",
10611
+ {
10612
+ "aria-hidden": "true",
10613
+ className: "flex size-9 shrink-0 items-center justify-center rounded-full bg-[var(--av-accent-tint,var(--color-accent-tint))] text-[12.5px] font-semibold text-[var(--av-accent-soft,var(--color-accent-2))]",
10614
+ children: initials2
10615
+ }
10616
+ ),
10617
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10618
+ /* @__PURE__ */ jsxs("div", { className: "text-fg truncate text-sm font-medium", children: [
10619
+ s.name,
10620
+ s.role && /* @__PURE__ */ jsx("span", { className: "text-fg-4 ml-2 text-xs font-normal", children: s.role })
10621
+ ] }),
10622
+ s.email && /* @__PURE__ */ jsx("div", { className: "text-fg-4 truncate text-xs", children: s.email })
10623
+ ] }),
10624
+ status && StatusIcon2 && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-col items-end gap-1", children: [
10625
+ /* @__PURE__ */ jsxs(
10626
+ "span",
10627
+ {
10628
+ className: cn(
10629
+ "inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] font-medium",
10630
+ status.className
10631
+ ),
10632
+ children: [
10633
+ /* @__PURE__ */ jsx(StatusIcon2, { className: "size-3", "aria-hidden": "true" }),
10634
+ status.label
10635
+ ]
10636
+ }
10637
+ ),
10638
+ s.at != null && /* @__PURE__ */ jsx("span", { className: "text-fg-4 text-[11px]", children: s.at })
10639
+ ] })
10640
+ ] }, i);
10641
+ }) })
10642
+ ] });
10643
+ }
10644
+ );
10645
+ ProposalSignerList.displayName = "ProposalSignerList";
10646
+ function deriveInitials(name) {
10647
+ return name.trim().split(/\s+/).filter(Boolean).map((w) => w[0]).slice(0, 2).join("").toUpperCase();
10648
+ }
10649
+ var ProposalSignatureBlock = forwardRef(
10650
+ function ProposalSignatureBlock2({
10651
+ signed = false,
10652
+ name = "",
10653
+ initials: initials2,
10654
+ defaultName = "",
10655
+ onChange,
10656
+ placeholder = "Type your full name",
10657
+ signatureFont = "Georgia, serif",
10658
+ footer,
10659
+ className,
10660
+ ...props
10661
+ }, ref) {
10662
+ const [nameVal, setNameVal] = useState(defaultName);
10663
+ const [initialsVal, setInitialsVal] = useState("");
10664
+ const [initialsTouched, setInitialsTouched] = useState(false);
10665
+ const displayName = signed ? name : nameVal;
10666
+ const displayInitials = signed ? initials2 ?? deriveInitials(name) : initialsTouched ? initialsVal : deriveInitials(nameVal);
10667
+ const emitChange = (n, i) => onChange?.({ name: n, initials: i });
10668
+ const handleName = (v) => {
10669
+ setNameVal(v);
10670
+ emitChange(v, initialsTouched ? initialsVal : deriveInitials(v));
10671
+ };
10672
+ const handleInitials = (v) => {
10673
+ setInitialsTouched(true);
10674
+ setInitialsVal(v);
10675
+ emitChange(nameVal, v);
10676
+ };
10677
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
10678
+ /* @__PURE__ */ jsxs("div", { className: "border-rule mb-4 flex gap-6 border-b", children: [
10679
+ /* @__PURE__ */ jsx("span", { className: "border-[var(--av-accent,var(--color-accent))] text-fg -mb-px border-b-2 pb-2.5 text-sm font-medium", children: "Type" }),
10680
+ /* @__PURE__ */ jsx("span", { className: "text-fg-4 pb-2.5 text-sm font-medium", children: "Draw" })
10681
+ ] }),
10682
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-4", children: [
10683
+ /* @__PURE__ */ jsx("div", { className: "border-rule bg-surface-2 flex h-[118px] flex-1 items-center overflow-hidden rounded-[12px] border px-7", children: /* @__PURE__ */ jsx(
10684
+ "span",
10685
+ {
10686
+ className: cn("text-[46px] leading-none font-semibold", displayName ? "text-fg" : "text-fg-5"),
10687
+ style: { fontFamily: signatureFont },
10688
+ children: displayName || placeholder
10689
+ }
10690
+ ) }),
10691
+ /* @__PURE__ */ jsx("div", { className: "border-rule bg-surface-2 flex h-[118px] w-[168px] shrink-0 items-center justify-center rounded-[12px] border", children: /* @__PURE__ */ jsx(
10692
+ "span",
10693
+ {
10694
+ className: cn("text-[34px] leading-none", displayInitials ? "text-fg-3" : "text-fg-5"),
10695
+ style: { fontFamily: signatureFont },
10696
+ children: displayInitials || "\u2014"
10697
+ }
10698
+ ) })
10699
+ ] }),
10700
+ /* @__PURE__ */ jsxs("div", { className: "mt-5 grid grid-cols-[1fr_120px] gap-3.5", children: [
10701
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1.5", children: [
10702
+ /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs font-medium", children: "Your legal name" }),
10703
+ /* @__PURE__ */ jsx(
10704
+ "input",
10705
+ {
10706
+ value: displayName,
10707
+ readOnly: signed,
10708
+ onChange: (e) => handleName(e.target.value),
10709
+ placeholder: signed ? void 0 : placeholder,
10710
+ "aria-label": "Your legal name",
10711
+ className: "border-rule-strong rounded-input text-fg-2 bg-surface h-10 border px-3 text-sm read-only:bg-[var(--color-bg-2)]"
10712
+ }
10713
+ )
10714
+ ] }),
10715
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1.5", children: [
10716
+ /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs font-medium", children: "Initials" }),
10717
+ /* @__PURE__ */ jsx(
10718
+ "input",
10719
+ {
10720
+ value: displayInitials,
10721
+ readOnly: signed,
10722
+ onChange: (e) => handleInitials(e.target.value),
10723
+ placeholder: signed ? void 0 : "\u2014",
10724
+ "aria-label": "Initials",
10725
+ className: "border-rule-strong rounded-input text-fg-2 bg-surface h-10 border px-3 text-sm read-only:bg-[var(--color-bg-2)]"
10726
+ }
10727
+ )
10728
+ ] })
10729
+ ] }),
10730
+ footer && /* @__PURE__ */ jsx("div", { className: "mt-6", children: footer })
10731
+ ] });
10732
+ }
10733
+ );
10734
+ ProposalSignatureBlock.displayName = "ProposalSignatureBlock";
10735
+ var ProposalConsentGate = forwardRef(
10736
+ function ProposalConsentGate2({ children, checked = false, onCheckedChange, signed = false, signedNote, onSign, signLabel = "Sign & approve", disabled = false, className, ...props }, ref) {
10737
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col gap-4", className), ...props, children: [
10738
+ !signed && /* @__PURE__ */ jsxs("label", { className: "flex cursor-pointer items-start gap-2.5 text-[13.5px] leading-relaxed", children: [
10739
+ /* @__PURE__ */ jsx(
10740
+ "input",
10741
+ {
10742
+ type: "checkbox",
10743
+ checked,
10744
+ onChange: (e) => onCheckedChange?.(e.target.checked),
10745
+ className: "mt-0.5 size-4 shrink-0 rounded accent-[var(--av-accent,var(--color-accent))]"
10746
+ }
10747
+ ),
10748
+ /* @__PURE__ */ jsx("span", { className: "text-fg-2", children })
10749
+ ] }),
10750
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
10751
+ signed ? /* @__PURE__ */ jsxs("span", { className: "text-success-fg flex items-center gap-2 text-[13px] font-medium", children: [
10752
+ /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0", "aria-hidden": "true" }),
10753
+ signedNote ?? "This agreement has been signed."
10754
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "text-fg-4 flex items-center gap-1.5 text-[12.5px]", children: [
10755
+ /* @__PURE__ */ jsx(LockIcon, { className: "size-3.5", "aria-hidden": "true" }),
10756
+ " Secure e-signature"
10757
+ ] }),
10758
+ onSign && /* @__PURE__ */ jsxs(
10759
+ "button",
10760
+ {
10761
+ type: "button",
10762
+ onClick: onSign,
10763
+ disabled: signed || !checked || disabled,
10764
+ className: cn(
10765
+ "inline-flex h-[46px] items-center gap-2 rounded-[12px] px-5 text-[14.5px] font-semibold",
10766
+ "transition-[filter] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
10767
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
10768
+ "bg-[var(--av-accent,var(--color-accent))] text-[var(--av-accent-contrast,var(--color-fg-on-accent))] hover:brightness-105",
10769
+ "disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed disabled:brightness-100"
10770
+ ),
10771
+ children: [
10772
+ /* @__PURE__ */ jsx(PenSignIcon, { className: "size-4", "aria-hidden": "true" }),
10773
+ signLabel
10774
+ ]
10775
+ }
10776
+ )
10777
+ ] })
10778
+ ] });
10779
+ }
10780
+ );
10781
+ ProposalConsentGate.displayName = "ProposalConsentGate";
10782
+ var ProposalPaymentCapture = forwardRef(
10783
+ function ProposalPaymentCapture2({ title = "Payment at signing", amount, caption, method = "card", capturedLast4, children, className, ...props }, ref) {
10784
+ return /* @__PURE__ */ jsxs(
10785
+ "div",
10786
+ {
10787
+ ref,
10788
+ className: cn("border-rule rounded-[14px] border p-5", className),
10789
+ ...props,
10790
+ children: [
10791
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
10792
+ /* @__PURE__ */ jsx(
10793
+ "span",
10794
+ {
10795
+ "aria-hidden": "true",
10796
+ className: "rounded-card flex size-10 shrink-0 items-center justify-center bg-[var(--av-accent-tint,var(--color-accent-tint))] text-[var(--av-accent,var(--color-accent))]",
10797
+ children: /* @__PURE__ */ jsx(CreditCardIcon, { className: "size-5" })
10798
+ }
10799
+ ),
10800
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
10801
+ /* @__PURE__ */ jsx("div", { className: "text-fg text-sm font-semibold", children: title }),
10802
+ caption && /* @__PURE__ */ jsx("div", { className: "text-fg-4 text-xs", children: caption })
10803
+ ] }),
10804
+ amount != null && /* @__PURE__ */ jsx("div", { className: "text-fg text-lg font-bold tabular", children: amount })
10805
+ ] }),
10806
+ /* @__PURE__ */ jsx("div", { className: "mt-4", children: children ?? (capturedLast4 ? /* @__PURE__ */ jsxs("div", { className: "border-rule flex items-center gap-2.5 rounded-[10px] border px-3.5 py-3", children: [
10807
+ /* @__PURE__ */ jsx(CreditCardIcon, { className: "text-fg-4 size-4", "aria-hidden": "true" }),
10808
+ /* @__PURE__ */ jsxs("span", { className: "text-fg-2 text-sm font-medium tabular", children: [
10809
+ method === "bank" ? "Bank account" : "Card",
10810
+ " \u2022\u2022\u2022\u2022 ",
10811
+ capturedLast4
10812
+ ] }),
10813
+ /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg ml-auto size-4", "aria-hidden": "true" })
10814
+ ] }) : /* @__PURE__ */ jsx("div", { className: "border-rule text-fg-4 flex h-11 items-center rounded-[10px] border border-dashed px-3.5 text-sm", children: method === "bank" ? "Bank account details" : "Card number" })) })
10815
+ ]
10816
+ }
10817
+ );
10818
+ }
10819
+ );
10820
+ ProposalPaymentCapture.displayName = "ProposalPaymentCapture";
10821
+ function AiSpark({ size = 16, className }) {
10822
+ const id = useId();
10823
+ return /* @__PURE__ */ jsxs(
10824
+ "svg",
10825
+ {
10826
+ width: size,
10827
+ height: size * 12 / 16,
10828
+ viewBox: "0 0 16 12",
10829
+ fill: "none",
10830
+ className: cn("block shrink-0", className),
10831
+ "aria-hidden": "true",
10832
+ children: [
10833
+ /* @__PURE__ */ jsx(
10834
+ "path",
10835
+ {
10836
+ 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",
10837
+ fill: `url(#${id})`
10838
+ }
10839
+ ),
10840
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
10841
+ "linearGradient",
10842
+ {
10843
+ id,
10844
+ x1: "0.265576",
10845
+ y1: "0.856805",
10846
+ x2: "13.5",
10847
+ y2: "12",
10848
+ gradientUnits: "userSpaceOnUse",
10849
+ children: [
10850
+ /* @__PURE__ */ jsx("stop", { stopColor: "#9E32FF" }),
10851
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#1BB6FF" })
10852
+ ]
10853
+ }
10854
+ ) })
10855
+ ]
10856
+ }
10857
+ );
10858
+ }
10859
+ function Field({ label, value, confirmed }) {
10860
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
10861
+ /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11px]", children: label }),
10862
+ /* @__PURE__ */ jsxs("span", { className: "text-fg inline-flex items-center gap-1 text-sm font-medium", children: [
10863
+ value,
10864
+ confirmed && /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg size-3", strokeWidth: 3 })
10865
+ ] })
10866
+ ] });
10867
+ }
10868
+ var AIReceiptPanel = forwardRef(function AIReceiptPanel2({ state = "idle", result, onAttach, onRemove, onViewFile, className, ...props }, ref) {
10869
+ if (state === "reading") {
10870
+ return /* @__PURE__ */ jsxs(
10871
+ "div",
10872
+ {
10873
+ ref,
10874
+ role: "status",
10875
+ "aria-live": "polite",
10876
+ className: cn(
10877
+ "border-rule bg-surface-2 flex items-center gap-3 rounded-[var(--radius-input)] border p-3",
10878
+ className
10879
+ ),
10880
+ ...props,
10881
+ children: [
10882
+ /* @__PURE__ */ jsx(AiSpark, { size: 18, className: "motion-safe:animate-pulse" }),
10883
+ /* @__PURE__ */ jsxs("div", { children: [
10884
+ /* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: "Reading your receipt\u2026" }),
10885
+ /* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: "Pulling the vendor, amount and a suggested category." })
10886
+ ] })
10887
+ ]
10888
+ }
10889
+ );
10890
+ }
10891
+ if (state === "done" && result) {
10892
+ return /* @__PURE__ */ jsxs(
10893
+ "div",
10894
+ {
10895
+ ref,
10896
+ className: cn(
10897
+ "border-rule bg-surface-2 flex flex-col gap-3 rounded-[var(--radius-input)] border p-3",
10898
+ className
10899
+ ),
10900
+ ...props,
10901
+ children: [
10902
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
10903
+ /* @__PURE__ */ jsxs("span", { className: "text-fg-2 inline-flex items-center gap-1.5 text-xs font-semibold", children: [
10904
+ /* @__PURE__ */ jsx(AiSpark, { size: 14 }),
10905
+ " Auto-filled from receipt"
10906
+ ] }),
10907
+ onRemove && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRemove, children: "Remove" })
10908
+ ] }),
10909
+ /* @__PURE__ */ jsx(
10910
+ FileChip,
10911
+ {
10912
+ name: result.file.name,
10913
+ meta: result.file.meta,
10914
+ className: "bg-surface",
10915
+ action: onViewFile && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onViewFile, children: "View" })
10916
+ }
10917
+ ),
10918
+ /* @__PURE__ */ jsxs("div", { className: "border-rule grid grid-cols-3 gap-3 border-t pt-3", children: [
10919
+ /* @__PURE__ */ jsx(Field, { label: "Vendor", value: result.vendor }),
10920
+ /* @__PURE__ */ jsx(Field, { label: "Amount", value: result.amount, confirmed: true }),
10921
+ /* @__PURE__ */ jsx(Field, { label: "Date", value: result.date, confirmed: true })
10922
+ ] })
10923
+ ]
10924
+ }
10925
+ );
10926
+ }
10927
+ return /* @__PURE__ */ jsxs(
10928
+ "button",
10929
+ {
10930
+ ref,
10931
+ type: "button",
10932
+ onClick: onAttach,
10933
+ className: cn(
10934
+ "group border-rule-strong bg-surface hover:border-pro-fg/50 hover:bg-pro-bg/40 flex w-full items-center gap-3 rounded-[var(--radius-input)] border-2 border-dashed p-3 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
10935
+ className
10936
+ ),
10937
+ ...props,
10938
+ children: [
10939
+ /* @__PURE__ */ jsx(AiSpark, { size: 19 }),
10940
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
10941
+ /* @__PURE__ */ jsx("span", { className: "text-fg block text-sm font-medium", children: "Attach receipt \u2014 auto-fill with AI" }),
9894
10942
  /* @__PURE__ */ jsx("span", { className: "text-fg-3 block text-xs", children: "We'll read the vendor, amount & suggest a category" })
9895
10943
  ] }),
9896
10944
  /* @__PURE__ */ jsx(UploadIcon, { className: "text-fg-3 size-4.5 shrink-0", "aria-hidden": "true" })
@@ -13100,7 +14148,10 @@ var ACTIVITY_ICON = {
13100
14148
  cancelled: XCircleSolidIcon,
13101
14149
  received: DownloadIcon,
13102
14150
  approved: CheckCircleSolidIcon,
13103
- needs_revision: AlertTriangleIcon
14151
+ needs_revision: AlertTriangleIcon,
14152
+ locked: LockIcon,
14153
+ unlocked: LockOpenIcon,
14154
+ status: FlagIcon
13104
14155
  };
13105
14156
  var DocumentRequestDetail = forwardRef(
13106
14157
  function DocumentRequestDetail2(props, ref) {
@@ -13430,6 +14481,55 @@ function FileRowActions({ doc }) {
13430
14481
  )
13431
14482
  ] });
13432
14483
  }
14484
+ var OPTIONS = [
14485
+ { value: "all", label: "All" },
14486
+ { value: "requested", label: "Requested", Icon: SendIcon },
14487
+ { value: "direct", label: "Direct", Icon: UploadIcon },
14488
+ { value: "internal", label: "Internal", Icon: ShieldIcon }
14489
+ ];
14490
+ var DocumentSourceFilter = forwardRef(
14491
+ function DocumentSourceFilter2({
14492
+ value,
14493
+ onValueChange,
14494
+ counts,
14495
+ hideIcons,
14496
+ className,
14497
+ "aria-label": ariaLabel = "Filter by document source"
14498
+ }, ref) {
14499
+ return /* @__PURE__ */ jsx(
14500
+ ToggleGroup,
14501
+ {
14502
+ ref,
14503
+ type: "single",
14504
+ value,
14505
+ onValueChange: (next) => {
14506
+ if (next) onValueChange(next);
14507
+ },
14508
+ "aria-label": ariaLabel,
14509
+ className: cn("rounded-pill border-rule bg-surface gap-0.5 border p-1", className),
14510
+ children: OPTIONS.map(({ value: optionValue, label, Icon: Icon3 }) => {
14511
+ const count = counts?.[optionValue];
14512
+ const active = value === optionValue;
14513
+ return /* @__PURE__ */ jsxs(ToggleGroupItem, { value: optionValue, className: "gap-1.5", children: [
14514
+ !hideIcons && Icon3 && /* @__PURE__ */ jsx(Icon3, { size: 13, className: "shrink-0 opacity-90", "aria-hidden": "true" }),
14515
+ label,
14516
+ typeof count === "number" && /* @__PURE__ */ jsx(
14517
+ "span",
14518
+ {
14519
+ className: cn(
14520
+ "rounded-md px-1.5 py-px text-[11px] font-bold tabular-nums",
14521
+ active ? "bg-pro-bg-active text-pro-fg" : "bg-surface-2 text-fg-4"
14522
+ ),
14523
+ children: count
14524
+ }
14525
+ )
14526
+ ] }, optionValue);
14527
+ })
14528
+ }
14529
+ );
14530
+ }
14531
+ );
14532
+ DocumentSourceFilter.displayName = "DocumentSourceFilter";
13433
14533
  var ActivityList = forwardRef(function ActivityList2({ className, children, ...props }, ref) {
13434
14534
  return /* @__PURE__ */ jsx("ul", { ref, className: cn("flex flex-col", className), ...props, children });
13435
14535
  });
@@ -15066,6 +16166,6 @@ function SignatureEditor({
15066
16166
  }
15067
16167
  SignatureEditor.displayName = "SignatureEditor";
15068
16168
 
15069
- export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, 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, 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, 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 };
16169
+ 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 };
15070
16170
  //# sourceMappingURL=index.js.map
15071
16171
  //# sourceMappingURL=index.js.map