@assure-one/design-system 1.2.0 → 1.4.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
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import * as React36 from 'react';
2
+ import * as React38 from 'react';
3
3
  import { forwardRef, useId, useRef, useState, useEffect, useCallback, useImperativeHandle, useMemo, createContext, useContext } from 'react';
4
4
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
5
5
  import { clsx } from 'clsx';
@@ -8,8 +8,8 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
9
9
  import { cva } from 'class-variance-authority';
10
10
  import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
11
- import * as AvatarPrimitive from '@radix-ui/react-avatar';
12
11
  import { Slot } from '@radix-ui/react-slot';
12
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
13
13
  import { DayPicker } from 'react-day-picker';
14
14
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
15
15
  import * as SelectPrimitive from '@radix-ui/react-select';
@@ -529,6 +529,45 @@ function BuildingIcon({ size = 24, ...props }) {
529
529
  }
530
530
  ) });
531
531
  }
532
+ function LandmarkIcon({ size = 24, ...props }) {
533
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
534
+ "path",
535
+ {
536
+ d: "M3 22h18M6 18v-7M10 18v-7M14 18v-7M18 18v-7M12 2 20 7 4 7Z",
537
+ stroke: "currentColor",
538
+ strokeWidth: "1.5",
539
+ strokeLinecap: "round",
540
+ strokeLinejoin: "round"
541
+ }
542
+ ) });
543
+ }
544
+ function FolderUpIcon({ size = 24, ...props }) {
545
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
546
+ "path",
547
+ {
548
+ d: "M20 20a2 2 0 002-2V8a2 2 0 00-2-2h-7.9a2 2 0 01-1.69-.9L9.6 3.9A2 2 0 007.93 3H4a2 2 0 00-2 2v13a2 2 0 002 2ZM12 10v6M9 13l3-3 3 3",
549
+ stroke: "currentColor",
550
+ strokeWidth: "1.5",
551
+ strokeLinecap: "round",
552
+ strokeLinejoin: "round"
553
+ }
554
+ ) });
555
+ }
556
+ function PenToolIcon({ size = 24, ...props }) {
557
+ return /* @__PURE__ */ jsxs(Icon, { size, ...props, children: [
558
+ /* @__PURE__ */ jsx(
559
+ "path",
560
+ {
561
+ d: "M15.7 21.3a1 1 0 01-1.4 0l-1.6-1.6a1 1 0 010-1.4l5.6-5.6a1 1 0 011.4 0l1.6 1.6a1 1 0 010 1.4zM18 13l-1.4-6.9a1 1 0 00-.7-.8L3.2 2a1 1 0 00-1.2 1.2l3.3 12.7a1 1 0 00.8.7L13 18M2.3 2.3l7.3 7.3",
562
+ stroke: "currentColor",
563
+ strokeWidth: "1.5",
564
+ strokeLinecap: "round",
565
+ strokeLinejoin: "round"
566
+ }
567
+ ),
568
+ /* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "2", stroke: "currentColor", strokeWidth: "1.5" })
569
+ ] });
570
+ }
532
571
  function MapPinIcon({ size = 24, ...props }) {
533
572
  return /* @__PURE__ */ jsxs(Icon, { size, ...props, children: [
534
573
  /* @__PURE__ */ jsx(
@@ -2246,7 +2285,7 @@ function PauseIcon({ size = 24, ...props }) {
2246
2285
  function StopIcon({ size = 24, ...props }) {
2247
2286
  return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2", fill: "currentColor" }) });
2248
2287
  }
2249
- var Accordion = React36.forwardRef(function Accordion2({ className, ...props }, ref) {
2288
+ var Accordion = React38.forwardRef(function Accordion2({ className, ...props }, ref) {
2250
2289
  return /* @__PURE__ */ jsx(
2251
2290
  AccordionPrimitive.Root,
2252
2291
  {
@@ -2257,11 +2296,11 @@ var Accordion = React36.forwardRef(function Accordion2({ className, ...props },
2257
2296
  );
2258
2297
  });
2259
2298
  Accordion.displayName = AccordionPrimitive.Root.displayName;
2260
- var AccordionItem = React36.forwardRef(function AccordionItem2({ className, ...props }, ref) {
2299
+ var AccordionItem = React38.forwardRef(function AccordionItem2({ className, ...props }, ref) {
2261
2300
  return /* @__PURE__ */ jsx(AccordionPrimitive.Item, { ref, className: cn(className), ...props });
2262
2301
  });
2263
2302
  AccordionItem.displayName = AccordionPrimitive.Item.displayName;
2264
- var AccordionTrigger = React36.forwardRef(function AccordionTrigger2({ children, className, ...props }, ref) {
2303
+ var AccordionTrigger = React38.forwardRef(function AccordionTrigger2({ children, className, ...props }, ref) {
2265
2304
  return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
2266
2305
  AccordionPrimitive.Trigger,
2267
2306
  {
@@ -2290,7 +2329,7 @@ var AccordionTrigger = React36.forwardRef(function AccordionTrigger2({ children,
2290
2329
  ) });
2291
2330
  });
2292
2331
  AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
2293
- var AccordionContent = React36.forwardRef(function AccordionContent2({ children, className, ...props }, ref) {
2332
+ var AccordionContent = React38.forwardRef(function AccordionContent2({ children, className, ...props }, ref) {
2294
2333
  return /* @__PURE__ */ jsx(
2295
2334
  AccordionPrimitive.Content,
2296
2335
  {
@@ -2310,7 +2349,7 @@ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
2310
2349
  var AlertDialog = AlertDialogPrimitive.Root;
2311
2350
  var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
2312
2351
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
2313
- var AlertDialogOverlay = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2352
+ var AlertDialogOverlay = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2314
2353
  AlertDialogPrimitive.Overlay,
2315
2354
  {
2316
2355
  ref,
@@ -2325,7 +2364,7 @@ var AlertDialogOverlay = React36.forwardRef(({ className, ...props }, ref) => /*
2325
2364
  }
2326
2365
  ));
2327
2366
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
2328
- var AlertDialogContent = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
2367
+ var AlertDialogContent = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
2329
2368
  /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
2330
2369
  /* @__PURE__ */ jsx(
2331
2370
  AlertDialogPrimitive.Content,
@@ -2360,7 +2399,7 @@ var AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
2360
2399
  }
2361
2400
  );
2362
2401
  AlertDialogFooter.displayName = "AlertDialogFooter";
2363
- var AlertDialogTitle = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2402
+ var AlertDialogTitle = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2364
2403
  AlertDialogPrimitive.Title,
2365
2404
  {
2366
2405
  ref,
@@ -2372,7 +2411,7 @@ var AlertDialogTitle = React36.forwardRef(({ className, ...props }, ref) => /* @
2372
2411
  }
2373
2412
  ));
2374
2413
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
2375
- var AlertDialogDescription = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2414
+ var AlertDialogDescription = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2376
2415
  AlertDialogPrimitive.Description,
2377
2416
  {
2378
2417
  ref,
@@ -2381,7 +2420,7 @@ var AlertDialogDescription = React36.forwardRef(({ className, ...props }, ref) =
2381
2420
  }
2382
2421
  ));
2383
2422
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
2384
- var AlertDialogAction = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2423
+ var AlertDialogAction = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2385
2424
  AlertDialogPrimitive.Action,
2386
2425
  {
2387
2426
  ref,
@@ -2397,7 +2436,7 @@ var AlertDialogAction = React36.forwardRef(({ className, ...props }, ref) => /*
2397
2436
  }
2398
2437
  ));
2399
2438
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
2400
- var AlertDialogCancel = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
2439
+ var AlertDialogCancel = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
2401
2440
  AlertDialogPrimitive.Cancel,
2402
2441
  {
2403
2442
  ref,
@@ -2592,7 +2631,7 @@ var AreaChart = forwardRef(function AreaChart2({ data, height = 140, formatValue
2592
2631
  ] });
2593
2632
  });
2594
2633
  AreaChart.displayName = "AreaChart";
2595
- var AspectRatio = React36.forwardRef(function AspectRatio2({ className, ratio = 16 / 9, ...props }, ref) {
2634
+ var AspectRatio = React38.forwardRef(function AspectRatio2({ className, ratio = 16 / 9, ...props }, ref) {
2596
2635
  return /* @__PURE__ */ jsx(
2597
2636
  AspectRatioPrimitive.Root,
2598
2637
  {
@@ -2604,6 +2643,292 @@ var AspectRatio = React36.forwardRef(function AspectRatio2({ className, ratio =
2604
2643
  );
2605
2644
  });
2606
2645
  AspectRatio.displayName = AspectRatioPrimitive.Root.displayName;
2646
+ var spinnerVariants = cva(
2647
+ "inline-flex shrink-0 items-center justify-center [&_svg]:motion-reduce:animate-none",
2648
+ {
2649
+ variants: {
2650
+ size: {
2651
+ xs: "[&_svg]:size-3",
2652
+ sm: "[&_svg]:size-4",
2653
+ md: "[&_svg]:size-5",
2654
+ lg: "[&_svg]:size-6"
2655
+ },
2656
+ tone: {
2657
+ current: "text-current",
2658
+ muted: "text-fg-3",
2659
+ accent: "text-accent",
2660
+ success: "text-success-fg",
2661
+ warning: "text-warning-fg",
2662
+ destructive: "text-danger-fg"
2663
+ }
2664
+ },
2665
+ defaultVariants: {
2666
+ size: "md",
2667
+ tone: "current"
2668
+ }
2669
+ }
2670
+ );
2671
+ var Spinner = forwardRef(function Spinner2({ size, tone, label, className, ...props }, ref) {
2672
+ return /* @__PURE__ */ jsxs(
2673
+ "span",
2674
+ {
2675
+ ref,
2676
+ role: label ? "status" : void 0,
2677
+ "aria-live": label ? "polite" : void 0,
2678
+ className: cn(spinnerVariants({ size, tone }), className),
2679
+ ...props,
2680
+ children: [
2681
+ /* @__PURE__ */ jsx(LoaderIcon, { className: "animate-spin", "aria-hidden": "true" }),
2682
+ label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
2683
+ ]
2684
+ }
2685
+ );
2686
+ });
2687
+ Spinner.displayName = "Spinner";
2688
+ var buttonVariants = cva(
2689
+ cn(
2690
+ "inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap cursor-pointer",
2691
+ "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
2692
+ "focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
2693
+ "disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled",
2694
+ "motion-reduce:transition-none",
2695
+ "[&_svg]:size-4 [&_svg]:shrink-0"
2696
+ ),
2697
+ {
2698
+ variants: {
2699
+ variant: {
2700
+ primary: "bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active",
2701
+ secondary: "bg-control-secondary-bg text-control-fg border border-control-border hover:bg-control-active-bg hover:border-control-border-strong",
2702
+ destructive: "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active",
2703
+ success: "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
2704
+ ghost: "bg-control-bg text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg",
2705
+ outline: "border border-control-border-strong bg-control-bg text-control-fg hover:bg-control-hover-bg hover:border-control-border-hover",
2706
+ link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto",
2707
+ accent: "bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active",
2708
+ dashed: "border-2 border-dashed border-control-border bg-control-bg text-control-muted-fg hover:border-control-border-hover hover:bg-control-hover-bg hover:text-control-hover-fg"
2709
+ },
2710
+ size: {
2711
+ sm: "h-8 px-3 text-[13px] gap-1.5",
2712
+ md: "h-10 px-4 text-sm gap-2",
2713
+ lg: "h-12 px-6 text-base gap-2",
2714
+ // Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).
2715
+ // `icon-xs` / `icon-sm` are for dense in-row action stacks where
2716
+ // `size="icon"` (40×40) would visually crowd the row.
2717
+ "icon-xs": "size-6 [&_svg]:size-3.5",
2718
+ "icon-sm": "size-7 [&_svg]:size-4",
2719
+ icon: "size-10"
2720
+ }
2721
+ },
2722
+ defaultVariants: {
2723
+ variant: "primary",
2724
+ size: "md"
2725
+ }
2726
+ }
2727
+ );
2728
+ var Button = forwardRef(function Button2({
2729
+ variant,
2730
+ size,
2731
+ asChild = false,
2732
+ loading,
2733
+ iconLeft,
2734
+ iconRight,
2735
+ disabled,
2736
+ children,
2737
+ className,
2738
+ ...props
2739
+ }, ref) {
2740
+ const Comp = asChild ? Slot : "button";
2741
+ if (asChild) {
2742
+ return /* @__PURE__ */ jsx(Comp, { ref, className: cn(buttonVariants({ variant, size }), className), ...props, children });
2743
+ }
2744
+ return /* @__PURE__ */ jsxs(
2745
+ Comp,
2746
+ {
2747
+ ref,
2748
+ disabled: disabled || loading,
2749
+ className: cn(buttonVariants({ variant, size }), className),
2750
+ ...props,
2751
+ children: [
2752
+ loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
2753
+ children,
2754
+ iconRight && !loading && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
2755
+ ]
2756
+ }
2757
+ );
2758
+ });
2759
+ Button.displayName = "Button";
2760
+ var fileTypeBadgeVariants = cva(
2761
+ cn(
2762
+ "inline-grid shrink-0 select-none place-items-center",
2763
+ "font-extrabold uppercase leading-none tracking-wide"
2764
+ ),
2765
+ {
2766
+ variants: {
2767
+ size: {
2768
+ sm: "size-8 rounded-btn text-[9px]",
2769
+ md: "size-10 rounded-card text-[10px]"
2770
+ }
2771
+ },
2772
+ defaultVariants: {
2773
+ size: "md"
2774
+ }
2775
+ }
2776
+ );
2777
+ var toneStyles = {
2778
+ danger: "bg-danger-bg text-danger-fg",
2779
+ info: "bg-accent-tint text-accent",
2780
+ accent: "bg-accent-tint text-accent-2",
2781
+ success: "bg-success-bg text-success-fg",
2782
+ warning: "bg-warning-bg text-warning-fg",
2783
+ neutral: "bg-surface-3 text-fg-3"
2784
+ };
2785
+ var EXT_TO_TYPE = {
2786
+ pdf: "PDF",
2787
+ img: "IMG",
2788
+ image: "IMG",
2789
+ png: "IMG",
2790
+ jpg: "IMG",
2791
+ jpeg: "IMG",
2792
+ gif: "IMG",
2793
+ svg: "IMG",
2794
+ webp: "IMG",
2795
+ heic: "IMG",
2796
+ heif: "IMG",
2797
+ bmp: "IMG",
2798
+ tif: "IMG",
2799
+ tiff: "IMG",
2800
+ doc: "DOC",
2801
+ docx: "DOC",
2802
+ rtf: "DOC",
2803
+ txt: "DOC",
2804
+ odt: "DOC",
2805
+ pages: "DOC",
2806
+ xls: "XLS",
2807
+ xlsx: "XLS",
2808
+ ods: "XLS",
2809
+ numbers: "XLS",
2810
+ csv: "CSV",
2811
+ ppt: "PPT",
2812
+ pptx: "PPT",
2813
+ odp: "PPT",
2814
+ key: "PPT",
2815
+ zip: "ZIP",
2816
+ rar: "ZIP",
2817
+ "7z": "ZIP",
2818
+ tar: "ZIP",
2819
+ gz: "ZIP",
2820
+ gzip: "ZIP"
2821
+ };
2822
+ var TYPE_TO_TONE = {
2823
+ PDF: "danger",
2824
+ IMG: "info",
2825
+ DOC: "accent",
2826
+ XLS: "success",
2827
+ CSV: "success",
2828
+ PPT: "warning",
2829
+ ZIP: "neutral"
2830
+ };
2831
+ function normalizeFileType(input) {
2832
+ const key = input.trim().toLowerCase().replace(/^\.+/, "");
2833
+ if (!key) return "FILE";
2834
+ return EXT_TO_TYPE[key] ?? key.toUpperCase().slice(0, 3);
2835
+ }
2836
+ function fileTypeFromName(fileName) {
2837
+ const dot = fileName.lastIndexOf(".");
2838
+ const ext = dot >= 0 && dot < fileName.length - 1 ? fileName.slice(dot + 1) : "";
2839
+ return normalizeFileType(ext);
2840
+ }
2841
+ var FileTypeBadge = forwardRef(function FileTypeBadge2({ format: format2, type, fileName, tone = "auto", size, className, "aria-label": ariaLabel, ...props }, ref) {
2842
+ const raw = format2 ?? type ?? (fileName != null ? fileTypeFromName(fileName) : void 0) ?? "FILE";
2843
+ const code = normalizeFileType(raw);
2844
+ const resolvedTone = tone !== "auto" ? tone : TYPE_TO_TONE[code] ?? "neutral";
2845
+ return /* @__PURE__ */ jsx(
2846
+ "span",
2847
+ {
2848
+ ref,
2849
+ role: "img",
2850
+ "aria-label": ariaLabel ?? `${code} file`,
2851
+ className: cn(fileTypeBadgeVariants({ size }), toneStyles[resolvedTone], className),
2852
+ ...props,
2853
+ children: code
2854
+ }
2855
+ );
2856
+ });
2857
+ FileTypeBadge.displayName = "FileTypeBadge";
2858
+ var attachmentChipVariants = cva(
2859
+ cn(
2860
+ "flex items-center gap-3 rounded-card border px-3 py-2.5 text-left",
2861
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none"
2862
+ ),
2863
+ {
2864
+ variants: {
2865
+ variant: {
2866
+ default: "border-rule bg-surface hover:bg-bg-2",
2867
+ onAccent: "border-white/25 bg-white/15 hover:bg-white/25"
2868
+ }
2869
+ },
2870
+ defaultVariants: {
2871
+ variant: "default"
2872
+ }
2873
+ }
2874
+ );
2875
+ function deriveFileType(name) {
2876
+ const dot = name.lastIndexOf(".");
2877
+ if (dot === -1 || dot === name.length - 1) return "FILE";
2878
+ return name.slice(dot + 1).toUpperCase();
2879
+ }
2880
+ var AttachmentChip = forwardRef(
2881
+ function AttachmentChip2({ name, fileType, meta, onView, onDownload, href, variant, className, ...props }, ref) {
2882
+ const resolvedType = fileType ?? deriveFileType(name);
2883
+ const onAccent = variant === "onAccent";
2884
+ const actionClassName = onAccent ? "text-fg-on-pro hover:bg-white/20 hover:text-fg-on-pro" : void 0;
2885
+ const showView = Boolean(onView) || Boolean(href);
2886
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn(attachmentChipVariants({ variant }), className), ...props, children: [
2887
+ /* @__PURE__ */ jsx(FileTypeBadge, { format: resolvedType, size: "md", className: "shrink-0" }),
2888
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
2889
+ /* @__PURE__ */ jsx("p", { className: cn("truncate text-sm font-medium", onAccent ? "text-fg-on-pro" : "text-fg"), children: name }),
2890
+ meta && /* @__PURE__ */ jsx("p", { className: cn("truncate text-xs", onAccent ? "text-fg-on-pro/75" : "text-fg-3"), children: meta })
2891
+ ] }),
2892
+ (showView || onDownload) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [
2893
+ showView && (onView ? /* @__PURE__ */ jsx(
2894
+ Button,
2895
+ {
2896
+ type: "button",
2897
+ variant: "ghost",
2898
+ size: "icon-sm",
2899
+ "aria-label": `View ${name}`,
2900
+ onClick: onView,
2901
+ className: actionClassName,
2902
+ children: /* @__PURE__ */ jsx(EyeIcon, { size: 16 })
2903
+ }
2904
+ ) : /* @__PURE__ */ jsx(
2905
+ Button,
2906
+ {
2907
+ asChild: true,
2908
+ variant: "ghost",
2909
+ size: "icon-sm",
2910
+ "aria-label": `View ${name}`,
2911
+ className: actionClassName,
2912
+ children: /* @__PURE__ */ jsx("a", { href, target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ jsx(EyeIcon, { size: 16 }) })
2913
+ }
2914
+ )),
2915
+ onDownload && /* @__PURE__ */ jsx(
2916
+ Button,
2917
+ {
2918
+ type: "button",
2919
+ variant: "ghost",
2920
+ size: "icon-sm",
2921
+ "aria-label": `Download ${name}`,
2922
+ onClick: onDownload,
2923
+ className: actionClassName,
2924
+ children: /* @__PURE__ */ jsx(DownloadIcon, { size: 16 })
2925
+ }
2926
+ )
2927
+ ] })
2928
+ ] });
2929
+ }
2930
+ );
2931
+ AttachmentChip.displayName = "AttachmentChip";
2607
2932
  var avatarVariants = cva(
2608
2933
  cn(
2609
2934
  "relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full",
@@ -2645,7 +2970,7 @@ var statusDotSizes = {
2645
2970
  function getInitials(name) {
2646
2971
  return name.split(" ").map((part) => part[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
2647
2972
  }
2648
- var Avatar = React36.forwardRef(
2973
+ var Avatar = React38.forwardRef(
2649
2974
  function Avatar2({ src, alt, name, size = "md", variant = "initials", status, className, ...props }, ref) {
2650
2975
  const initials = name ? getInitials(name) : "?";
2651
2976
  const resolvedSize = size ?? "md";
@@ -2869,142 +3194,28 @@ var BreadcrumbSeparator = forwardRef(
2869
3194
  }
2870
3195
  );
2871
3196
  BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
2872
- var spinnerVariants = cva(
2873
- "inline-flex shrink-0 items-center justify-center [&_svg]:motion-reduce:animate-none",
2874
- {
2875
- variants: {
2876
- size: {
2877
- xs: "[&_svg]:size-3",
2878
- sm: "[&_svg]:size-4",
2879
- md: "[&_svg]:size-5",
2880
- lg: "[&_svg]:size-6"
2881
- },
2882
- tone: {
2883
- current: "text-current",
2884
- muted: "text-fg-3",
2885
- accent: "text-accent",
2886
- success: "text-success-fg",
2887
- warning: "text-warning-fg",
2888
- destructive: "text-danger-fg"
2889
- }
2890
- },
2891
- defaultVariants: {
2892
- size: "md",
2893
- tone: "current"
2894
- }
2895
- }
2896
- );
2897
- var Spinner = forwardRef(function Spinner2({ size, tone, label, className, ...props }, ref) {
2898
- return /* @__PURE__ */ jsxs(
2899
- "span",
2900
- {
2901
- ref,
2902
- role: label ? "status" : void 0,
2903
- "aria-live": label ? "polite" : void 0,
2904
- className: cn(spinnerVariants({ size, tone }), className),
2905
- ...props,
2906
- children: [
2907
- /* @__PURE__ */ jsx(LoaderIcon, { className: "animate-spin", "aria-hidden": "true" }),
2908
- label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
2909
- ]
2910
- }
2911
- );
2912
- });
2913
- Spinner.displayName = "Spinner";
2914
- var buttonVariants = cva(
2915
- cn(
2916
- "inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap cursor-pointer",
2917
- "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
2918
- "focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
2919
- "disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled",
2920
- "motion-reduce:transition-none",
2921
- "[&_svg]:size-4 [&_svg]:shrink-0"
2922
- ),
2923
- {
2924
- variants: {
2925
- variant: {
2926
- primary: "bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active",
2927
- secondary: "bg-control-secondary-bg text-control-fg border border-control-border hover:bg-control-active-bg hover:border-control-border-strong",
2928
- destructive: "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active",
2929
- success: "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
2930
- ghost: "bg-control-bg text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg",
2931
- outline: "border border-control-border-strong bg-control-bg text-control-fg hover:bg-control-hover-bg hover:border-control-border-hover",
2932
- link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto",
2933
- accent: "bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active",
2934
- dashed: "border-2 border-dashed border-control-border bg-control-bg text-control-muted-fg hover:border-control-border-hover hover:bg-control-hover-bg hover:text-control-hover-fg"
2935
- },
2936
- size: {
2937
- sm: "h-8 px-3 text-[13px] gap-1.5",
2938
- md: "h-10 px-4 text-sm gap-2",
2939
- lg: "h-12 px-6 text-base gap-2",
2940
- // Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).
2941
- // `icon-xs` / `icon-sm` are for dense in-row action stacks where
2942
- // `size="icon"` (40×40) would visually crowd the row.
2943
- "icon-xs": "size-6 [&_svg]:size-3.5",
2944
- "icon-sm": "size-7 [&_svg]:size-4",
2945
- icon: "size-10"
2946
- }
2947
- },
2948
- defaultVariants: {
2949
- variant: "primary",
2950
- size: "md"
2951
- }
2952
- }
2953
- );
2954
- var Button = forwardRef(function Button2({
2955
- variant,
2956
- size,
2957
- asChild = false,
2958
- loading,
2959
- iconLeft,
2960
- iconRight,
2961
- disabled,
2962
- children,
2963
- className,
2964
- ...props
2965
- }, ref) {
2966
- const Comp = asChild ? Slot : "button";
2967
- if (asChild) {
2968
- return /* @__PURE__ */ jsx(Comp, { ref, className: cn(buttonVariants({ variant, size }), className), ...props, children });
2969
- }
2970
- return /* @__PURE__ */ jsxs(
2971
- Comp,
2972
- {
2973
- ref,
2974
- disabled: disabled || loading,
2975
- className: cn(buttonVariants({ variant, size }), className),
2976
- ...props,
2977
- children: [
2978
- loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
2979
- children,
2980
- iconRight && !loading && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
2981
- ]
2982
- }
2983
- );
2984
- });
2985
- Button.displayName = "Button";
2986
- var HIGHLIGHT_COLORS = {
2987
- primary: "after:bg-pro-fg",
2988
- success: "after:bg-success-fg",
2989
- warning: "after:bg-warning-fg",
2990
- destructive: "after:bg-danger-fg"
2991
- };
2992
- var DOT_BASE = "after:content-[''] after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full";
2993
- function Calendar({
2994
- selected,
2995
- onSelect,
2996
- highlights = [],
2997
- minDate,
2998
- maxDate,
2999
- className,
3000
- classNames,
3001
- ...props
3002
- }) {
3003
- const { modifiers, modifiersClassNames } = React36.useMemo(() => {
3004
- const buckets = {};
3005
- for (const h of highlights) {
3006
- const key = h.color ?? "primary";
3007
- (buckets[key] ??= []).push(h.date);
3197
+ var HIGHLIGHT_COLORS = {
3198
+ primary: "after:bg-pro-fg",
3199
+ success: "after:bg-success-fg",
3200
+ warning: "after:bg-warning-fg",
3201
+ destructive: "after:bg-danger-fg"
3202
+ };
3203
+ var DOT_BASE = "after:content-[''] after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full";
3204
+ function Calendar({
3205
+ selected,
3206
+ onSelect,
3207
+ highlights = [],
3208
+ minDate,
3209
+ maxDate,
3210
+ className,
3211
+ classNames,
3212
+ ...props
3213
+ }) {
3214
+ const { modifiers, modifiersClassNames } = React38.useMemo(() => {
3215
+ const buckets = {};
3216
+ for (const h of highlights) {
3217
+ const key = h.color ?? "primary";
3218
+ (buckets[key] ??= []).push(h.date);
3008
3219
  }
3009
3220
  const mods = {};
3010
3221
  const modClasses = {};
@@ -3015,7 +3226,7 @@ function Calendar({
3015
3226
  }
3016
3227
  return { modifiers: mods, modifiersClassNames: modClasses };
3017
3228
  }, [highlights]);
3018
- const disabledMatcher = React36.useMemo(() => {
3229
+ const disabledMatcher = React38.useMemo(() => {
3019
3230
  if (!minDate && !maxDate) return void 0;
3020
3231
  if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];
3021
3232
  if (minDate) return { before: minDate };
@@ -3147,7 +3358,42 @@ var CardAction = forwardRef(
3147
3358
  }
3148
3359
  );
3149
3360
  CardAction.displayName = "CardAction";
3150
- var Checkbox = React36.forwardRef(function Checkbox2({
3361
+ var categoryTagVariants = cva(
3362
+ cn(
3363
+ "inline-flex shrink-0 items-center gap-1.5 rounded-full px-2.5 py-1",
3364
+ "text-xs font-bold tracking-tight"
3365
+ ),
3366
+ {
3367
+ variants: {
3368
+ tone: {
3369
+ brand: "text-brand-pro bg-[color-mix(in_srgb,var(--color-brand-pro)_12%,transparent)]",
3370
+ audit: "text-brand-audit bg-[color-mix(in_srgb,var(--color-brand-audit)_12%,transparent)]",
3371
+ books: "text-brand-books bg-[color-mix(in_srgb,var(--color-brand-books)_12%,transparent)]",
3372
+ tax: "text-brand-tax bg-[color-mix(in_srgb,var(--color-brand-tax)_12%,transparent)]",
3373
+ neutral: "text-fg-3 bg-[color-mix(in_srgb,var(--color-fg-3)_12%,transparent)]"
3374
+ }
3375
+ },
3376
+ defaultVariants: { tone: "neutral" }
3377
+ }
3378
+ );
3379
+ var CategoryTag = forwardRef(function CategoryTag2({ label, icon, tone, className, ...props }, ref) {
3380
+ return /* @__PURE__ */ jsxs("span", { ref, className: cn(categoryTagVariants({ tone }), className), ...props, children: [
3381
+ icon && /* @__PURE__ */ jsx("span", { className: "inline-flex size-3.5 shrink-0", "aria-hidden": "true", children: icon }),
3382
+ label
3383
+ ] });
3384
+ });
3385
+ CategoryTag.displayName = "CategoryTag";
3386
+ var CategoryDivider = forwardRef(
3387
+ function CategoryDivider2({ label, icon, tone, count, className, ...props }, ref) {
3388
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-center gap-3", className), ...props, children: [
3389
+ /* @__PURE__ */ jsx(CategoryTag, { label, icon, tone }),
3390
+ /* @__PURE__ */ jsx("span", { className: "bg-rule h-px flex-1", "aria-hidden": "true" }),
3391
+ count !== void 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-3 bg-surface-2 border-rule inline-flex h-5 min-w-5 shrink-0 items-center justify-center rounded-full border px-1.5 text-[11px] font-bold", children: count })
3392
+ ] });
3393
+ }
3394
+ );
3395
+ CategoryDivider.displayName = "CategoryDivider";
3396
+ var Checkbox = React38.forwardRef(function Checkbox2({
3151
3397
  label,
3152
3398
  indeterminate,
3153
3399
  checked,
@@ -3157,7 +3403,7 @@ var Checkbox = React36.forwardRef(function Checkbox2({
3157
3403
  id: providedId,
3158
3404
  ...props
3159
3405
  }, ref) {
3160
- const generatedId = React36.useId();
3406
+ const generatedId = React38.useId();
3161
3407
  const id = providedId ?? generatedId;
3162
3408
  const resolvedChecked = indeterminate ? "indeterminate" : checked;
3163
3409
  return /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
@@ -3198,7 +3444,7 @@ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
3198
3444
  var SelectRoot = SelectPrimitive.Root;
3199
3445
  var SelectGroup = SelectPrimitive.Group;
3200
3446
  var SelectValue = SelectPrimitive.Value;
3201
- var SelectTrigger = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3447
+ var SelectTrigger = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3202
3448
  SelectPrimitive.Trigger,
3203
3449
  {
3204
3450
  ref,
@@ -3229,7 +3475,7 @@ var SelectTrigger = React36.forwardRef(({ className, children, ...props }, ref)
3229
3475
  }
3230
3476
  ));
3231
3477
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
3232
- var SelectScrollUpButton = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3478
+ var SelectScrollUpButton = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3233
3479
  SelectPrimitive.ScrollUpButton,
3234
3480
  {
3235
3481
  ref,
@@ -3239,7 +3485,7 @@ var SelectScrollUpButton = React36.forwardRef(({ className, ...props }, ref) =>
3239
3485
  }
3240
3486
  ));
3241
3487
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
3242
- var SelectScrollDownButton = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3488
+ var SelectScrollDownButton = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3243
3489
  SelectPrimitive.ScrollDownButton,
3244
3490
  {
3245
3491
  ref,
@@ -3249,7 +3495,7 @@ var SelectScrollDownButton = React36.forwardRef(({ className, ...props }, ref) =
3249
3495
  }
3250
3496
  ));
3251
3497
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
3252
- var SelectContent = React36.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
3498
+ var SelectContent = React38.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
3253
3499
  SelectPrimitive.Content,
3254
3500
  {
3255
3501
  ref,
@@ -3283,7 +3529,7 @@ var SelectContent = React36.forwardRef(({ className, children, position = "poppe
3283
3529
  }
3284
3530
  ) }));
3285
3531
  SelectContent.displayName = SelectPrimitive.Content.displayName;
3286
- var SelectLabel = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3532
+ var SelectLabel = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3287
3533
  SelectPrimitive.Label,
3288
3534
  {
3289
3535
  ref,
@@ -3295,7 +3541,7 @@ var SelectLabel = React36.forwardRef(({ className, ...props }, ref) => /* @__PUR
3295
3541
  }
3296
3542
  ));
3297
3543
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
3298
- var SelectItem = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3544
+ var SelectItem = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3299
3545
  SelectPrimitive.Item,
3300
3546
  {
3301
3547
  ref,
@@ -3316,7 +3562,7 @@ var SelectItem = React36.forwardRef(({ className, children, ...props }, ref) =>
3316
3562
  }
3317
3563
  ));
3318
3564
  SelectItem.displayName = SelectPrimitive.Item.displayName;
3319
- var SelectSeparator = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3565
+ var SelectSeparator = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3320
3566
  SelectPrimitive.Separator,
3321
3567
  {
3322
3568
  ref,
@@ -3401,11 +3647,11 @@ function ClientSelect({
3401
3647
  ] });
3402
3648
  }
3403
3649
  ClientSelect.displayName = "ClientSelect";
3404
- var Collapsible = React36.forwardRef(function Collapsible2({ className, ...props }, ref) {
3650
+ var Collapsible = React38.forwardRef(function Collapsible2({ className, ...props }, ref) {
3405
3651
  return /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, { ref, className: cn(className), ...props });
3406
3652
  });
3407
3653
  Collapsible.displayName = CollapsiblePrimitive.Root.displayName;
3408
- var CollapsibleTrigger = React36.forwardRef(function CollapsibleTrigger2({ className, ...props }, ref) {
3654
+ var CollapsibleTrigger = React38.forwardRef(function CollapsibleTrigger2({ className, ...props }, ref) {
3409
3655
  return /* @__PURE__ */ jsx(
3410
3656
  CollapsiblePrimitive.Trigger,
3411
3657
  {
@@ -3420,7 +3666,7 @@ var CollapsibleTrigger = React36.forwardRef(function CollapsibleTrigger2({ class
3420
3666
  );
3421
3667
  });
3422
3668
  CollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName;
3423
- var CollapsibleContent = React36.forwardRef(function CollapsibleContent2({ className, ...props }, ref) {
3669
+ var CollapsibleContent = React38.forwardRef(function CollapsibleContent2({ className, ...props }, ref) {
3424
3670
  return /* @__PURE__ */ jsx(
3425
3671
  CollapsiblePrimitive.Content,
3426
3672
  {
@@ -3497,7 +3743,7 @@ ComingSoon.displayName = "ComingSoon";
3497
3743
  var Dialog = DialogPrimitive.Root;
3498
3744
  var DialogTrigger = DialogPrimitive.Trigger;
3499
3745
  var DialogPortal = DialogPrimitive.Portal;
3500
- var DialogOverlay = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3746
+ var DialogOverlay = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3501
3747
  DialogPrimitive.Overlay,
3502
3748
  {
3503
3749
  ref,
@@ -3518,7 +3764,7 @@ var dialogSizeStyles = {
3518
3764
  lg: "max-w-2xl",
3519
3765
  full: "max-w-[calc(100vw-2rem)]"
3520
3766
  };
3521
- var DialogContent = React36.forwardRef(({ size = "md", showCloseButton = true, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
3767
+ var DialogContent = React38.forwardRef(({ size = "md", showCloseButton = true, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
3522
3768
  /* @__PURE__ */ jsx(DialogOverlay, {}),
3523
3769
  /* @__PURE__ */ jsxs(
3524
3770
  DialogPrimitive.Content,
@@ -3559,7 +3805,7 @@ var DialogContent = React36.forwardRef(({ size = "md", showCloseButton = true, c
3559
3805
  )
3560
3806
  ] }));
3561
3807
  DialogContent.displayName = DialogPrimitive.Content.displayName;
3562
- var DialogClose = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Close, { ref, className: cn(className), ...props }));
3808
+ var DialogClose = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Close, { ref, className: cn(className), ...props }));
3563
3809
  DialogClose.displayName = "DialogClose";
3564
3810
  var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex flex-col gap-1.5 pr-8", className), ...props });
3565
3811
  DialogHeader.displayName = "DialogHeader";
@@ -3574,7 +3820,7 @@ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
3574
3820
  }
3575
3821
  );
3576
3822
  DialogFooter.displayName = "DialogFooter";
3577
- var DialogTitle = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3823
+ var DialogTitle = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3578
3824
  DialogPrimitive.Title,
3579
3825
  {
3580
3826
  ref,
@@ -3586,7 +3832,7 @@ var DialogTitle = React36.forwardRef(({ className, ...props }, ref) => /* @__PUR
3586
3832
  }
3587
3833
  ));
3588
3834
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
3589
- var DialogDescription = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3835
+ var DialogDescription = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3590
3836
  DialogPrimitive.Description,
3591
3837
  {
3592
3838
  ref,
@@ -3616,17 +3862,17 @@ function CommandPalette({
3616
3862
  onOpenChange,
3617
3863
  placeholder = "Type a command or search..."
3618
3864
  }) {
3619
- const [internalOpen, setInternalOpen] = React36.useState(false);
3865
+ const [internalOpen, setInternalOpen] = React38.useState(false);
3620
3866
  const isControlled = controlledOpen !== void 0;
3621
3867
  const open = isControlled ? controlledOpen : internalOpen;
3622
- const setOpen = React36.useCallback(
3868
+ const setOpen = React38.useCallback(
3623
3869
  (value) => {
3624
3870
  if (!isControlled) setInternalOpen(value);
3625
3871
  onOpenChange?.(value);
3626
3872
  },
3627
3873
  [isControlled, onOpenChange]
3628
3874
  );
3629
- React36.useEffect(() => {
3875
+ React38.useEffect(() => {
3630
3876
  function handleKeyDown(e) {
3631
3877
  if ((e.metaKey || e.ctrlKey) && e.key === "k") {
3632
3878
  e.preventDefault();
@@ -3781,10 +4027,10 @@ function ConfirmActionButton({
3781
4027
  onOpenChange
3782
4028
  }) {
3783
4029
  const isControlled = open !== void 0;
3784
- const [uncontrolledOpen, setUncontrolledOpen] = React36.useState(defaultOpen);
4030
+ const [uncontrolledOpen, setUncontrolledOpen] = React38.useState(defaultOpen);
3785
4031
  const resolvedOpen = isControlled ? open : uncontrolledOpen;
3786
- const [pending, setPending] = React36.useState(false);
3787
- const setDialogOpen = React36.useCallback(
4032
+ const [pending, setPending] = React38.useState(false);
4033
+ const setDialogOpen = React38.useCallback(
3788
4034
  (nextOpen) => {
3789
4035
  onOpenChange?.(nextOpen);
3790
4036
  if (!isControlled) {
@@ -3843,7 +4089,7 @@ var ContextMenuGroup = ContextMenuPrimitive.Group;
3843
4089
  var ContextMenuPortal = ContextMenuPrimitive.Portal;
3844
4090
  var ContextMenuSub = ContextMenuPrimitive.Sub;
3845
4091
  var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
3846
- var ContextMenuSubTrigger = React36.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4092
+ var ContextMenuSubTrigger = React38.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3847
4093
  ContextMenuPrimitive.SubTrigger,
3848
4094
  {
3849
4095
  ref,
@@ -3864,7 +4110,7 @@ var ContextMenuSubTrigger = React36.forwardRef(({ className, inset, children, ..
3864
4110
  }
3865
4111
  ));
3866
4112
  ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
3867
- var ContextMenuSubContent = React36.forwardRef(({ className, ...props }, ref) => (
4113
+ var ContextMenuSubContent = React38.forwardRef(({ className, ...props }, ref) => (
3868
4114
  // Portal the sub-content to the body. The parent Content keeps a persistent
3869
4115
  // `scale-100` transform (its open-state animation), which makes it the
3870
4116
  // containing block for `position: fixed` descendants — and its
@@ -3887,7 +4133,7 @@ var ContextMenuSubContent = React36.forwardRef(({ className, ...props }, ref) =>
3887
4133
  ) })
3888
4134
  ));
3889
4135
  ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
3890
- var ContextMenuContent = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
4136
+ var ContextMenuContent = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
3891
4137
  ContextMenuPrimitive.Content,
3892
4138
  {
3893
4139
  ref,
@@ -3903,7 +4149,7 @@ var ContextMenuContent = React36.forwardRef(({ className, ...props }, ref) => /*
3903
4149
  }
3904
4150
  ) }));
3905
4151
  ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
3906
- var ContextMenuItem = React36.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
4152
+ var ContextMenuItem = React38.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
3907
4153
  ContextMenuPrimitive.Item,
3908
4154
  {
3909
4155
  ref,
@@ -3921,7 +4167,7 @@ var ContextMenuItem = React36.forwardRef(({ className, destructive, inset, ...pr
3921
4167
  }
3922
4168
  ));
3923
4169
  ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
3924
- var ContextMenuCheckboxItem = React36.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
4170
+ var ContextMenuCheckboxItem = React38.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
3925
4171
  ContextMenuPrimitive.CheckboxItem,
3926
4172
  {
3927
4173
  ref,
@@ -3941,7 +4187,7 @@ var ContextMenuCheckboxItem = React36.forwardRef(({ className, children, checked
3941
4187
  }
3942
4188
  ));
3943
4189
  ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
3944
- var ContextMenuRadioItem = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4190
+ var ContextMenuRadioItem = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3945
4191
  ContextMenuPrimitive.RadioItem,
3946
4192
  {
3947
4193
  ref,
@@ -3960,7 +4206,7 @@ var ContextMenuRadioItem = React36.forwardRef(({ className, children, ...props }
3960
4206
  }
3961
4207
  ));
3962
4208
  ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
3963
- var ContextMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
4209
+ var ContextMenuLabel = React38.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
3964
4210
  ContextMenuPrimitive.Label,
3965
4211
  {
3966
4212
  ref,
@@ -3973,7 +4219,7 @@ var ContextMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref)
3973
4219
  }
3974
4220
  ));
3975
4221
  ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
3976
- var ContextMenuSeparator = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4222
+ var ContextMenuSeparator = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3977
4223
  ContextMenuPrimitive.Separator,
3978
4224
  {
3979
4225
  ref,
@@ -4068,7 +4314,7 @@ var PopoverTrigger = PopoverPrimitive.Trigger;
4068
4314
  var PopoverAnchor = PopoverPrimitive.Anchor;
4069
4315
  var PopoverPortal = PopoverPrimitive.Portal;
4070
4316
  var PopoverClose = PopoverPrimitive.Close;
4071
- var PopoverContent = React36.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
4317
+ var PopoverContent = React38.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
4072
4318
  PopoverPrimitive.Content,
4073
4319
  {
4074
4320
  ref,
@@ -4613,7 +4859,7 @@ var chipVariants = cva(
4613
4859
  }
4614
4860
  }
4615
4861
  );
4616
- var DismissibleChip = React36.forwardRef(function DismissibleChip2({ label, onDismiss, variant, className, ...props }, ref) {
4862
+ var DismissibleChip = React38.forwardRef(function DismissibleChip2({ label, onDismiss, variant, className, ...props }, ref) {
4617
4863
  return /* @__PURE__ */ jsxs(
4618
4864
  "button",
4619
4865
  {
@@ -4630,6 +4876,29 @@ var DismissibleChip = React36.forwardRef(function DismissibleChip2({ label, onDi
4630
4876
  }
4631
4877
  );
4632
4878
  });
4879
+ var DocumentsWorkspaceLayout = forwardRef(function DocumentsWorkspaceLayout2({ clientsRail, folderTree, filesArea, className, ...props }, ref) {
4880
+ return /* @__PURE__ */ jsxs(
4881
+ "div",
4882
+ {
4883
+ ref,
4884
+ className: cn(
4885
+ // Root: fills parent, no self-scroll, 2-col base → 3-col at lg/xl
4886
+ "grid h-full min-h-0 overflow-hidden bg-surface",
4887
+ "grid-cols-[240px_minmax(0,1fr)]",
4888
+ "lg:grid-cols-[248px_220px_minmax(0,1fr)]",
4889
+ "xl:grid-cols-[280px_244px_minmax(0,1fr)]",
4890
+ className
4891
+ ),
4892
+ ...props,
4893
+ children: [
4894
+ /* @__PURE__ */ jsx("div", { className: "flex min-h-0 min-w-0 flex-col border-r border-rule bg-surface", children: clientsRail }),
4895
+ /* @__PURE__ */ jsx("div", { className: "hidden min-h-0 min-w-0 flex-col border-r border-rule bg-surface lg:flex", children: folderTree }),
4896
+ /* @__PURE__ */ jsx("div", { className: "flex min-h-0 min-w-0 flex-col bg-bg", children: filesArea })
4897
+ ]
4898
+ }
4899
+ );
4900
+ });
4901
+ DocumentsWorkspaceLayout.displayName = "DocumentsWorkspaceLayout";
4633
4902
  var RAMP = [
4634
4903
  "var(--color-chart-1)",
4635
4904
  "var(--color-chart-2)",
@@ -4753,7 +5022,7 @@ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
4753
5022
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
4754
5023
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
4755
5024
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
4756
- var DropdownMenuSubTrigger = React36.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5025
+ var DropdownMenuSubTrigger = React38.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4757
5026
  DropdownMenuPrimitive.SubTrigger,
4758
5027
  {
4759
5028
  ref,
@@ -4774,7 +5043,7 @@ var DropdownMenuSubTrigger = React36.forwardRef(({ className, inset, children, .
4774
5043
  }
4775
5044
  ));
4776
5045
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
4777
- var DropdownMenuSubContent = React36.forwardRef(({ className, ...props }, ref) => (
5046
+ var DropdownMenuSubContent = React38.forwardRef(({ className, ...props }, ref) => (
4778
5047
  // Portal the sub-content to the body. The parent Content keeps a persistent
4779
5048
  // `scale-100` transform (its open-state animation), which makes it the
4780
5049
  // containing block for `position: fixed` descendants — and its
@@ -4797,7 +5066,7 @@ var DropdownMenuSubContent = React36.forwardRef(({ className, ...props }, ref) =
4797
5066
  ) })
4798
5067
  ));
4799
5068
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
4800
- var DropdownMenuContent = React36.forwardRef(({ className, sideOffset = 6, align = "start", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
5069
+ var DropdownMenuContent = React38.forwardRef(({ className, sideOffset = 6, align = "start", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
4801
5070
  DropdownMenuPrimitive.Content,
4802
5071
  {
4803
5072
  ref,
@@ -4815,7 +5084,7 @@ var DropdownMenuContent = React36.forwardRef(({ className, sideOffset = 6, align
4815
5084
  }
4816
5085
  ) }));
4817
5086
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
4818
- var DropdownMenuItem = React36.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
5087
+ var DropdownMenuItem = React38.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
4819
5088
  DropdownMenuPrimitive.Item,
4820
5089
  {
4821
5090
  ref,
@@ -4833,7 +5102,7 @@ var DropdownMenuItem = React36.forwardRef(({ className, destructive, inset, ...p
4833
5102
  }
4834
5103
  ));
4835
5104
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
4836
- var DropdownMenuCheckboxItem = React36.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
5105
+ var DropdownMenuCheckboxItem = React38.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
4837
5106
  DropdownMenuPrimitive.CheckboxItem,
4838
5107
  {
4839
5108
  ref,
@@ -4853,7 +5122,7 @@ var DropdownMenuCheckboxItem = React36.forwardRef(({ className, children, checke
4853
5122
  }
4854
5123
  ));
4855
5124
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
4856
- var DropdownMenuRadioItem = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5125
+ var DropdownMenuRadioItem = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4857
5126
  DropdownMenuPrimitive.RadioItem,
4858
5127
  {
4859
5128
  ref,
@@ -4872,7 +5141,7 @@ var DropdownMenuRadioItem = React36.forwardRef(({ className, children, ...props
4872
5141
  }
4873
5142
  ));
4874
5143
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
4875
- var DropdownMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
5144
+ var DropdownMenuLabel = React38.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
4876
5145
  DropdownMenuPrimitive.Label,
4877
5146
  {
4878
5147
  ref,
@@ -4885,7 +5154,7 @@ var DropdownMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref)
4885
5154
  }
4886
5155
  ));
4887
5156
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
4888
- var DropdownMenuSeparator = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5157
+ var DropdownMenuSeparator = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4889
5158
  DropdownMenuPrimitive.Separator,
4890
5159
  {
4891
5160
  ref,
@@ -5138,7 +5407,7 @@ FormSection.displayName = "FormSection";
5138
5407
  var HoverCard = HoverCardPrimitive.Root;
5139
5408
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
5140
5409
  var HoverCardPortal = HoverCardPrimitive.Portal;
5141
- var HoverCardContent = React36.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { children: /* @__PURE__ */ jsx(
5410
+ var HoverCardContent = React38.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { children: /* @__PURE__ */ jsx(
5142
5411
  HoverCardPrimitive.Content,
5143
5412
  {
5144
5413
  ref,
@@ -5157,6 +5426,40 @@ var HoverCardContent = React36.forwardRef(({ className, align = "center", side =
5157
5426
  }
5158
5427
  ) }));
5159
5428
  HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
5429
+ var iconTileVariants = cva(
5430
+ cn("relative grid shrink-0 place-items-center", "[&_svg]:shrink-0"),
5431
+ {
5432
+ variants: {
5433
+ tone: {
5434
+ pro: "bg-pro-bg text-pro-fg",
5435
+ neutral: "bg-bg-2 text-fg-3",
5436
+ info: "bg-accent-tint text-accent-2",
5437
+ success: "bg-success-bg text-success-fg",
5438
+ warning: "bg-warning-bg text-warning-fg",
5439
+ danger: "bg-danger-bg text-danger-fg",
5440
+ audit: "bg-[color-mix(in_srgb,var(--color-brand-audit)_12%,transparent)] text-brand-audit",
5441
+ books: "bg-[color-mix(in_srgb,var(--color-brand-books)_12%,transparent)] text-brand-books",
5442
+ tax: "bg-[color-mix(in_srgb,var(--color-brand-tax)_12%,transparent)] text-brand-tax"
5443
+ },
5444
+ size: {
5445
+ sm: "size-[30px] rounded-[8px] [&_svg]:size-4",
5446
+ md: "size-[38px] rounded-[10px] [&_svg]:size-[18px]",
5447
+ lg: "size-[42px] rounded-[12px] [&_svg]:size-5"
5448
+ }
5449
+ },
5450
+ defaultVariants: {
5451
+ tone: "pro",
5452
+ size: "md"
5453
+ }
5454
+ }
5455
+ );
5456
+ var IconTile = forwardRef(function IconTile2({ icon, tone, size, badge, className, ...props }, ref) {
5457
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn(iconTileVariants({ tone, size }), className), ...props, children: [
5458
+ icon,
5459
+ badge != null && /* @__PURE__ */ jsx("span", { className: "absolute -top-1.5 -right-1.5 z-10 flex", children: badge })
5460
+ ] });
5461
+ });
5462
+ IconTile.displayName = "IconTile";
5160
5463
  var inputVariants = cva(
5161
5464
  [
5162
5465
  "flex w-full rounded-input border bg-surface font-body text-fg",
@@ -5276,8 +5579,8 @@ function KeyboardShortcutsDialog({
5276
5579
  sections,
5277
5580
  hotkey = "?"
5278
5581
  } = {}) {
5279
- const [open, setOpen] = React36.useState(false);
5280
- React36.useEffect(() => {
5582
+ const [open, setOpen] = React38.useState(false);
5583
+ React38.useEffect(() => {
5281
5584
  if (hotkey === null) return;
5282
5585
  function handleKeyDown(e) {
5283
5586
  const target = e.target;
@@ -5315,7 +5618,7 @@ function KeyboardShortcutsDialog({
5315
5618
  className: "flex items-center justify-between gap-3 py-1",
5316
5619
  children: [
5317
5620
  /* @__PURE__ */ jsx("span", { className: "text-fg text-sm", children: shortcut.description }),
5318
- /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: shortcut.keys.map((key, i) => /* @__PURE__ */ jsxs(React36.Fragment, { children: [
5621
+ /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: shortcut.keys.map((key, i) => /* @__PURE__ */ jsxs(React38.Fragment, { children: [
5319
5622
  i > 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-4 mx-0.5 text-[11px]", children: "then" }),
5320
5623
  /* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: key })
5321
5624
  ] }, i)) })
@@ -5334,7 +5637,7 @@ function KeyboardShortcutsDialog({
5334
5637
  var labelVariants = cva(
5335
5638
  "text-[13px] font-medium leading-none text-fg select-none peer-disabled:cursor-not-allowed peer-disabled:text-fg-disabled has-[+input:disabled]:text-fg-disabled"
5336
5639
  );
5337
- var Label4 = React36.forwardRef(
5640
+ var Label4 = React38.forwardRef(
5338
5641
  function Label5({ children, required, className, ...props }, ref) {
5339
5642
  return /* @__PURE__ */ jsxs(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
5340
5643
  children,
@@ -5500,6 +5803,80 @@ function Logo({
5500
5803
  }
5501
5804
  );
5502
5805
  }
5806
+ var MasterDetailLayout = forwardRef(
5807
+ function MasterDetailLayout2({
5808
+ list,
5809
+ detail,
5810
+ detailOpen = false,
5811
+ onBack,
5812
+ backLabel = "Back",
5813
+ listWidth = 340,
5814
+ className,
5815
+ style,
5816
+ ...props
5817
+ }, ref) {
5818
+ const resolvedWidth = typeof listWidth === "number" ? `${listWidth}px` : listWidth;
5819
+ return /* @__PURE__ */ jsxs(
5820
+ "div",
5821
+ {
5822
+ ref,
5823
+ "data-detail-open": detailOpen ? "true" : "false",
5824
+ className: cn(
5825
+ "bg-surface relative flex h-full min-h-0 w-full overflow-hidden",
5826
+ className
5827
+ ),
5828
+ style: { "--master-list-width": resolvedWidth, ...style },
5829
+ ...props,
5830
+ children: [
5831
+ /* @__PURE__ */ jsx(
5832
+ "div",
5833
+ {
5834
+ className: cn(
5835
+ "bg-surface flex min-h-0 w-full flex-col overflow-auto",
5836
+ "md:w-[var(--master-list-width)] md:shrink-0 md:border-rule md:border-r"
5837
+ ),
5838
+ children: list
5839
+ }
5840
+ ),
5841
+ /* @__PURE__ */ jsxs(
5842
+ "div",
5843
+ {
5844
+ className: cn(
5845
+ "bg-surface-2 flex min-h-0 flex-col overflow-auto",
5846
+ // mobile: overlay the list and slide in from the right
5847
+ "max-md:absolute max-md:inset-0 max-md:z-[var(--z-modal)]",
5848
+ "max-md:transition-transform max-md:duration-[var(--duration-normal)] max-md:ease-[var(--ease-out-quart)]",
5849
+ "motion-reduce:transition-none",
5850
+ detailOpen ? "max-md:translate-x-0" : "max-md:pointer-events-none max-md:translate-x-full",
5851
+ // desktop: reset to a static, independently-scrolling flex column
5852
+ "md:static md:z-auto md:flex-1 md:translate-x-0 md:transition-none md:pointer-events-auto"
5853
+ ),
5854
+ children: [
5855
+ onBack && /* @__PURE__ */ jsx("div", { className: "border-rule bg-surface sticky top-0 z-[var(--z-sticky)] flex h-12 shrink-0 items-center border-b px-2 md:hidden", children: /* @__PURE__ */ jsx(
5856
+ "button",
5857
+ {
5858
+ type: "button",
5859
+ onClick: onBack,
5860
+ "aria-label": backLabel,
5861
+ className: cn(
5862
+ "rounded-icon text-fg-3 inline-flex size-9 items-center justify-center",
5863
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
5864
+ "hover:bg-surface-2 hover:text-fg",
5865
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
5866
+ ),
5867
+ children: /* @__PURE__ */ jsx(ArrowLeftIcon, { className: "size-4", "aria-hidden": "true" })
5868
+ }
5869
+ ) }),
5870
+ detail
5871
+ ]
5872
+ }
5873
+ )
5874
+ ]
5875
+ }
5876
+ );
5877
+ }
5878
+ );
5879
+ MasterDetailLayout.displayName = "MasterDetailLayout";
5503
5880
  var TRIGGER_SIZE = {
5504
5881
  sm: "h-8 gap-1.5 px-2.5 text-[13px]",
5505
5882
  md: "h-9 gap-2 px-3 text-sm",
@@ -5665,7 +6042,7 @@ function MultiSelectField({
5665
6042
  size = "md",
5666
6043
  id
5667
6044
  }) {
5668
- const selected = React36.useMemo(
6045
+ const selected = React38.useMemo(
5669
6046
  () => new Set(value ? value.split(",").filter(Boolean) : []),
5670
6047
  [value]
5671
6048
  );
@@ -5678,7 +6055,7 @@ function MultiSelectField({
5678
6055
  }
5679
6056
  onChange(Array.from(next).join(","));
5680
6057
  };
5681
- const generatedId = React36.useId();
6058
+ const generatedId = React38.useId();
5682
6059
  const groupId = id ?? generatedId;
5683
6060
  return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), children: [
5684
6061
  /* @__PURE__ */ jsx(
@@ -6507,12 +6884,12 @@ var ProgressRing = forwardRef(function ProgressRing2({ value, max = 100, size =
6507
6884
  );
6508
6885
  });
6509
6886
  ProgressRing.displayName = "ProgressRing";
6510
- var RadioGroup3 = React36.forwardRef(function RadioGroup4({ className, ...props }, ref) {
6887
+ var RadioGroup3 = React38.forwardRef(function RadioGroup4({ className, ...props }, ref) {
6511
6888
  return /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, { ref, className: cn("grid gap-2", className), ...props });
6512
6889
  });
6513
6890
  RadioGroup3.displayName = RadioGroupPrimitive.Root.displayName;
6514
- var RadioGroupItem = React36.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
6515
- const generatedId = React36.useId();
6891
+ var RadioGroupItem = React38.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
6892
+ const generatedId = React38.useId();
6516
6893
  const id = providedId ?? generatedId;
6517
6894
  const root = /* @__PURE__ */ jsx(
6518
6895
  RadioGroupPrimitive.Item,
@@ -6597,47 +6974,257 @@ var RankedBars = forwardRef(function RankedBars2({ items, className, ...props },
6597
6974
  }) });
6598
6975
  });
6599
6976
  RankedBars.displayName = "RankedBars";
6600
- var ScrollArea = React36.forwardRef(function ScrollArea2({ className, children, ...props }, ref) {
6601
- return /* @__PURE__ */ jsxs(
6602
- ScrollAreaPrimitive.Root,
6603
- {
6604
- ref,
6605
- className: cn("relative overflow-hidden", className),
6606
- ...props,
6607
- children: [
6608
- /* @__PURE__ */ jsx(
6609
- ScrollAreaPrimitive.Viewport,
6610
- {
6611
- tabIndex: 0,
6612
- className: "h-full w-full rounded-[inherit] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
6613
- children
6614
- }
6977
+ var SheetSideContext = React38.createContext({});
6978
+ var Sheet = ({ side, children, ...props }) => /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...props, children: /* @__PURE__ */ jsx(SheetSideContext, { value: { side }, children }) });
6979
+ Sheet.displayName = "Sheet";
6980
+ var SheetTrigger = DialogPrimitive.Trigger;
6981
+ var SheetClose = DialogPrimitive.Close;
6982
+ var SheetPortal = DialogPrimitive.Portal;
6983
+ var SheetOverlay = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6984
+ DialogPrimitive.Overlay,
6985
+ {
6986
+ ref,
6987
+ className: cn(
6988
+ "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
6989
+ "transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
6990
+ "data-[state=closed]:opacity-0 data-[state=open]:opacity-100",
6991
+ "motion-reduce:transition-none",
6992
+ className
6993
+ ),
6994
+ ...props
6995
+ }
6996
+ ));
6997
+ SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
6998
+ var sheetVariants = cva(
6999
+ cn(
7000
+ "fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop",
7001
+ "transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
7002
+ "motion-reduce:transition-none"
7003
+ ),
7004
+ {
7005
+ variants: {
7006
+ side: {
7007
+ top: cn(
7008
+ "inset-x-0 top-0 border-b border-rule",
7009
+ "data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0"
6615
7010
  ),
6616
- /* @__PURE__ */ jsx(ScrollBar, {}),
6617
- /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
6618
- ]
6619
- }
6620
- );
6621
- });
6622
- ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
6623
- var ScrollBar = React36.forwardRef(function ScrollBar2({ className, orientation = "vertical", ...props }, ref) {
6624
- return /* @__PURE__ */ jsx(
6625
- ScrollAreaPrimitive.ScrollAreaScrollbar,
6626
- {
6627
- ref,
6628
- orientation,
6629
- className: cn(
6630
- "flex touch-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] select-none motion-reduce:transition-none",
6631
- orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
6632
- orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
6633
- className
6634
- ),
6635
- ...props,
6636
- children: /* @__PURE__ */ jsx(
6637
- ScrollAreaPrimitive.ScrollAreaThumb,
6638
- {
6639
- className: cn(
6640
- "bg-rule-strong relative flex-1 rounded-full",
7011
+ bottom: cn(
7012
+ "inset-x-0 bottom-0 border-t border-rule max-h-[85vh]",
7013
+ "data-[state=closed]:translate-y-full data-[state=open]:translate-y-0"
7014
+ ),
7015
+ left: cn(
7016
+ "inset-y-0 left-0 h-full w-3/4 max-w-sm border-r border-rule",
7017
+ "data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0"
7018
+ ),
7019
+ right: cn(
7020
+ "inset-y-0 right-0 h-full w-3/4 max-w-sm border-l border-rule",
7021
+ "data-[state=closed]:translate-x-full data-[state=open]:translate-x-0"
7022
+ )
7023
+ }
7024
+ },
7025
+ defaultVariants: { side: "right" }
7026
+ }
7027
+ );
7028
+ var sheetWidthClasses = {
7029
+ sm: "w-[95vw] max-w-[95vw] sm:w-[420px]",
7030
+ md: "w-[95vw] max-w-[95vw] sm:w-[520px]",
7031
+ lg: "w-[95vw] max-w-[95vw] sm:w-[640px]",
7032
+ xl: "w-[95vw] max-w-[95vw] sm:w-[760px]",
7033
+ full: "w-full max-w-none"
7034
+ };
7035
+ var SheetContent = React38.forwardRef(
7036
+ ({ side, width = "default", customWidth, className, children, showCloseButton = true, style, ...props }, ref) => {
7037
+ const ctx = React38.use(SheetSideContext);
7038
+ const resolvedSide = side ?? ctx.side ?? "right";
7039
+ const supportsWidth = resolvedSide === "left" || resolvedSide === "right";
7040
+ const widthClass = supportsWidth && width !== "default" ? sheetWidthClasses[width] : null;
7041
+ const widthStyle = supportsWidth && customWidth ? { width: customWidth, maxWidth: "95vw", ...style } : style;
7042
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
7043
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
7044
+ /* @__PURE__ */ jsxs(
7045
+ DialogPrimitive.Content,
7046
+ {
7047
+ ref,
7048
+ className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
7049
+ style: widthStyle,
7050
+ ...props,
7051
+ children: [
7052
+ children,
7053
+ showCloseButton && /* @__PURE__ */ jsx(
7054
+ DialogPrimitive.Close,
7055
+ {
7056
+ className: cn(
7057
+ "absolute top-4 right-4 inline-flex size-7 items-center justify-center",
7058
+ "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
7059
+ "hover:bg-overlay-hover hover:text-fg",
7060
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
7061
+ "disabled:pointer-events-none"
7062
+ ),
7063
+ "aria-label": "Close",
7064
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
7065
+ }
7066
+ )
7067
+ ]
7068
+ }
7069
+ )
7070
+ ] });
7071
+ }
7072
+ );
7073
+ SheetContent.displayName = DialogPrimitive.Content.displayName;
7074
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className), ...props });
7075
+ SheetHeader.displayName = "SheetHeader";
7076
+ var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
7077
+ "div",
7078
+ {
7079
+ className: cn(
7080
+ "border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end",
7081
+ className
7082
+ ),
7083
+ ...props
7084
+ }
7085
+ );
7086
+ SheetFooter.displayName = "SheetFooter";
7087
+ var SheetTitle = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7088
+ DialogPrimitive.Title,
7089
+ {
7090
+ ref,
7091
+ className: cn(
7092
+ "font-display text-fg text-base leading-tight font-medium tracking-tight",
7093
+ className
7094
+ ),
7095
+ ...props
7096
+ }
7097
+ ));
7098
+ SheetTitle.displayName = DialogPrimitive.Title.displayName;
7099
+ var SheetDescription = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-fg-3 text-sm", className), ...props }));
7100
+ SheetDescription.displayName = DialogPrimitive.Description.displayName;
7101
+ var MOBILE_QUERY = "(max-width: 639.98px)";
7102
+ function useIsMobile() {
7103
+ const [state, setState] = React38.useState({ isMobile: false, mounted: false });
7104
+ React38.useEffect(() => {
7105
+ const mql = window.matchMedia(MOBILE_QUERY);
7106
+ const update = () => setState({ isMobile: mql.matches, mounted: true });
7107
+ update();
7108
+ mql.addEventListener("change", update);
7109
+ return () => mql.removeEventListener("change", update);
7110
+ }, []);
7111
+ return state;
7112
+ }
7113
+ function ResponsiveDialog({
7114
+ open,
7115
+ onOpenChange,
7116
+ title,
7117
+ description,
7118
+ children,
7119
+ footer,
7120
+ className,
7121
+ side = "bottom",
7122
+ size = "md"
7123
+ }) {
7124
+ const { isMobile, mounted } = useIsMobile();
7125
+ const close = React38.useCallback(() => onOpenChange(false), [onOpenChange]);
7126
+ const resolvedFooter = typeof footer === "function" ? footer(close) : footer;
7127
+ const hasHeader = Boolean(title || description);
7128
+ if (mounted && isMobile) {
7129
+ return /* @__PURE__ */ jsx(Sheet, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
7130
+ SheetContent,
7131
+ {
7132
+ side,
7133
+ className: cn(side === "bottom" && "rounded-t-card", className),
7134
+ children: [
7135
+ side === "bottom" && /* @__PURE__ */ jsx(
7136
+ "span",
7137
+ {
7138
+ "aria-hidden": "true",
7139
+ className: "mx-auto mt-2.5 h-1 w-9 shrink-0 rounded-full bg-[color:var(--color-rule-strong)]"
7140
+ }
7141
+ ),
7142
+ hasHeader ? /* @__PURE__ */ jsxs(SheetHeader, { children: [
7143
+ /* @__PURE__ */ jsx(SheetTitle, { className: cn(!title && "sr-only"), children: title ?? "Dialog" }),
7144
+ description && /* @__PURE__ */ jsx(SheetDescription, { children: description })
7145
+ ] }) : /* @__PURE__ */ jsx(SheetTitle, { className: "sr-only", children: "Dialog" }),
7146
+ /* @__PURE__ */ jsx(
7147
+ "div",
7148
+ {
7149
+ className: cn(
7150
+ "scrollbar-thin flex-1 overflow-y-auto px-6",
7151
+ !resolvedFooter && "pb-6"
7152
+ ),
7153
+ children
7154
+ }
7155
+ ),
7156
+ resolvedFooter && /* @__PURE__ */ jsx(SheetFooter, { children: resolvedFooter })
7157
+ ]
7158
+ }
7159
+ ) });
7160
+ }
7161
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size, className, children: [
7162
+ hasHeader ? /* @__PURE__ */ jsxs(DialogHeader, { children: [
7163
+ /* @__PURE__ */ jsx(DialogTitle, { className: cn(!title && "sr-only"), children: title ?? "Dialog" }),
7164
+ description && /* @__PURE__ */ jsx(DialogDescription, { children: description })
7165
+ ] }) : /* @__PURE__ */ jsx(DialogTitle, { className: "sr-only", children: "Dialog" }),
7166
+ children,
7167
+ resolvedFooter && /* @__PURE__ */ jsx(DialogFooter, { children: resolvedFooter })
7168
+ ] }) });
7169
+ }
7170
+ ResponsiveDialog.displayName = "ResponsiveDialog";
7171
+ var RouteTransition = forwardRef(
7172
+ function RouteTransition2({ routeKey, className, children, ...props }, ref) {
7173
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsx(
7174
+ "div",
7175
+ {
7176
+ className: cn(
7177
+ "animate-in fade-in-0 slide-in-from-bottom-2",
7178
+ "duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]"
7179
+ ),
7180
+ children
7181
+ },
7182
+ routeKey
7183
+ ) });
7184
+ }
7185
+ );
7186
+ RouteTransition.displayName = "RouteTransition";
7187
+ var ScrollArea = React38.forwardRef(function ScrollArea2({ className, children, ...props }, ref) {
7188
+ return /* @__PURE__ */ jsxs(
7189
+ ScrollAreaPrimitive.Root,
7190
+ {
7191
+ ref,
7192
+ className: cn("relative overflow-hidden", className),
7193
+ ...props,
7194
+ children: [
7195
+ /* @__PURE__ */ jsx(
7196
+ ScrollAreaPrimitive.Viewport,
7197
+ {
7198
+ tabIndex: 0,
7199
+ className: "h-full w-full rounded-[inherit] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
7200
+ children
7201
+ }
7202
+ ),
7203
+ /* @__PURE__ */ jsx(ScrollBar, {}),
7204
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
7205
+ ]
7206
+ }
7207
+ );
7208
+ });
7209
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
7210
+ var ScrollBar = React38.forwardRef(function ScrollBar2({ className, orientation = "vertical", ...props }, ref) {
7211
+ return /* @__PURE__ */ jsx(
7212
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
7213
+ {
7214
+ ref,
7215
+ orientation,
7216
+ className: cn(
7217
+ "flex touch-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] select-none motion-reduce:transition-none",
7218
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
7219
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
7220
+ className
7221
+ ),
7222
+ ...props,
7223
+ children: /* @__PURE__ */ jsx(
7224
+ ScrollAreaPrimitive.ScrollAreaThumb,
7225
+ {
7226
+ className: cn(
7227
+ "bg-rule-strong relative flex-1 rounded-full",
6641
7228
  "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
6642
7229
  "motion-reduce:transition-none",
6643
7230
  "hover:bg-fg-4"
@@ -6685,7 +7272,7 @@ var searchInputVariants = cva(
6685
7272
  }
6686
7273
  }
6687
7274
  );
6688
- var SearchInput = React36.forwardRef(
7275
+ var SearchInput = React38.forwardRef(
6689
7276
  function SearchInput2({
6690
7277
  value,
6691
7278
  onValueChange,
@@ -6698,8 +7285,8 @@ var SearchInput = React36.forwardRef(
6698
7285
  ...props
6699
7286
  }, ref) {
6700
7287
  const debouncedValue = useDebounce(value, debounceMs);
6701
- const isFirstRender = React36.useRef(true);
6702
- React36.useEffect(() => {
7288
+ const isFirstRender = React38.useRef(true);
7289
+ React38.useEffect(() => {
6703
7290
  if (isFirstRender.current) {
6704
7291
  isFirstRender.current = false;
6705
7292
  return;
@@ -6777,15 +7364,15 @@ function SearchSelect({
6777
7364
  descriptionVariant = "inline"
6778
7365
  }) {
6779
7366
  const isSingleMode = value !== void 0 || onValueChange !== void 0;
6780
- const singleSelectedOption = React36.useMemo(
7367
+ const singleSelectedOption = React38.useMemo(
6781
7368
  () => isSingleMode && value ? options.find((o) => o.id === value) ?? null : null,
6782
7369
  [isSingleMode, value, options]
6783
7370
  );
6784
- const selected = React36.useMemo(
7371
+ const selected = React38.useMemo(
6785
7372
  () => isSingleMode ? singleSelectedOption ? [singleSelectedOption] : [] : selectedProp ?? [],
6786
7373
  [isSingleMode, singleSelectedOption, selectedProp]
6787
7374
  );
6788
- const onSelect = React36.useCallback(
7375
+ const onSelect = React38.useCallback(
6789
7376
  (option) => {
6790
7377
  if (isSingleMode) {
6791
7378
  onValueChange?.(option.id);
@@ -6795,7 +7382,7 @@ function SearchSelect({
6795
7382
  },
6796
7383
  [isSingleMode, onValueChange, onSelectProp]
6797
7384
  );
6798
- const onRemove = React36.useCallback(
7385
+ const onRemove = React38.useCallback(
6799
7386
  (option) => {
6800
7387
  if (isSingleMode) {
6801
7388
  onValueChange?.("");
@@ -6806,15 +7393,15 @@ function SearchSelect({
6806
7393
  [isSingleMode, onValueChange, onRemoveProp]
6807
7394
  );
6808
7395
  const closeOnSelect = isSingleMode || closeOnSelectProp;
6809
- const [search, setSearch] = React36.useState("");
6810
- const [open, setOpen] = React36.useState(false);
6811
- const [activeChip, setActiveChip] = React36.useState(null);
6812
- const selectedIds = React36.useMemo(() => new Set(selected.map((s) => s.id)), [selected]);
6813
- const filtered = React36.useMemo(
7396
+ const [search, setSearch] = React38.useState("");
7397
+ const [open, setOpen] = React38.useState(false);
7398
+ const [activeChip, setActiveChip] = React38.useState(null);
7399
+ const selectedIds = React38.useMemo(() => new Set(selected.map((s) => s.id)), [selected]);
7400
+ const filtered = React38.useMemo(
6814
7401
  () => options.filter((opt) => !selectedIds.has(opt.id)),
6815
7402
  [options, selectedIds]
6816
7403
  );
6817
- const groups = React36.useMemo(() => {
7404
+ const groups = React38.useMemo(() => {
6818
7405
  const order = [];
6819
7406
  const byGroup = /* @__PURE__ */ new Map();
6820
7407
  for (const opt of filtered) {
@@ -6826,25 +7413,25 @@ function SearchSelect({
6826
7413
  }
6827
7414
  return order.map((g) => [g, byGroup.get(g)]);
6828
7415
  }, [filtered]);
6829
- const hasGroups = React36.useMemo(() => groups.some(([g]) => g != null), [groups]);
6830
- const pinnedSet = React36.useMemo(() => new Set(pinnedGroups ?? []), [pinnedGroups]);
6831
- const chips = React36.useMemo(() => {
7416
+ const hasGroups = React38.useMemo(() => groups.some(([g]) => g != null), [groups]);
7417
+ const pinnedSet = React38.useMemo(() => new Set(pinnedGroups ?? []), [pinnedGroups]);
7418
+ const chips = React38.useMemo(() => {
6832
7419
  if (!groupFilter || !hasGroups) return [];
6833
7420
  return groups.map(([g]) => g).filter((g) => g != null && !pinnedSet.has(g));
6834
7421
  }, [groupFilter, hasGroups, groups, pinnedSet]);
6835
- const visibleGroups = React36.useMemo(() => {
7422
+ const visibleGroups = React38.useMemo(() => {
6836
7423
  if (chips.length > 0 && activeChip) {
6837
7424
  return groups.filter(([g]) => g === activeChip);
6838
7425
  }
6839
7426
  return groups;
6840
7427
  }, [groups, chips.length, activeChip]);
6841
7428
  const trimmedSearch = search.trim();
6842
- const hasExactMatch = React36.useMemo(
7429
+ const hasExactMatch = React38.useMemo(
6843
7430
  () => options.some((opt) => opt.label.toLowerCase() === trimmedSearch.toLowerCase()),
6844
7431
  [options, trimmedSearch]
6845
7432
  );
6846
7433
  const showCreate = !!onCreate && trimmedSearch.length > 0 && !hasExactMatch;
6847
- const handleSelect = React36.useCallback(
7434
+ const handleSelect = React38.useCallback(
6848
7435
  (option) => {
6849
7436
  onSelect(option);
6850
7437
  setSearch("");
@@ -6852,16 +7439,16 @@ function SearchSelect({
6852
7439
  },
6853
7440
  [onSelect, closeOnSelect]
6854
7441
  );
6855
- const handleCreate = React36.useCallback(() => {
7442
+ const handleCreate = React38.useCallback(() => {
6856
7443
  if (onCreate && trimmedSearch) {
6857
7444
  onCreate(trimmedSearch);
6858
7445
  setSearch("");
6859
7446
  setOpen(false);
6860
7447
  }
6861
7448
  }, [onCreate, trimmedSearch]);
6862
- const inputRef = React36.useRef(null);
6863
- const listboxId = React36.useId();
6864
- const setInputRef = React36.useCallback((node) => {
7449
+ const inputRef = React38.useRef(null);
7450
+ const listboxId = React38.useId();
7451
+ const setInputRef = React38.useCallback((node) => {
6865
7452
  inputRef.current = node;
6866
7453
  node?.removeAttribute("aria-labelledby");
6867
7454
  node?.setAttribute("aria-controls", listboxId);
@@ -6870,12 +7457,12 @@ function SearchSelect({
6870
7457
  const singleValue = closeOnSelect ? selected[0] ?? null : null;
6871
7458
  const showValue = singleValue !== null && !open;
6872
7459
  const popoverOpen = open && !disabled;
6873
- React36.useEffect(() => {
7460
+ React38.useEffect(() => {
6874
7461
  inputRef.current?.removeAttribute("aria-labelledby");
6875
7462
  inputRef.current?.setAttribute("aria-controls", listboxId);
6876
7463
  inputRef.current?.removeAttribute("aria-activedescendant");
6877
7464
  });
6878
- React36.useEffect(() => {
7465
+ React38.useEffect(() => {
6879
7466
  if (open && closeOnSelect) {
6880
7467
  const raf = requestAnimationFrame(() => inputRef.current?.focus());
6881
7468
  return () => cancelAnimationFrame(raf);
@@ -7320,7 +7907,7 @@ var SegmentedProgress = forwardRef(
7320
7907
  }
7321
7908
  );
7322
7909
  SegmentedProgress.displayName = "SegmentedProgress";
7323
- var Separator4 = React36.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
7910
+ var Separator4 = React38.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
7324
7911
  return /* @__PURE__ */ jsx(
7325
7912
  SeparatorPrimitive.Root,
7326
7913
  {
@@ -7337,130 +7924,6 @@ var Separator4 = React36.forwardRef(function Separator5({ className, orientation
7337
7924
  );
7338
7925
  });
7339
7926
  Separator4.displayName = SeparatorPrimitive.Root.displayName;
7340
- var SheetSideContext = React36.createContext({});
7341
- var Sheet = ({ side, children, ...props }) => /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...props, children: /* @__PURE__ */ jsx(SheetSideContext, { value: { side }, children }) });
7342
- Sheet.displayName = "Sheet";
7343
- var SheetTrigger = DialogPrimitive.Trigger;
7344
- var SheetClose = DialogPrimitive.Close;
7345
- var SheetPortal = DialogPrimitive.Portal;
7346
- var SheetOverlay = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7347
- DialogPrimitive.Overlay,
7348
- {
7349
- ref,
7350
- className: cn(
7351
- "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
7352
- "transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
7353
- "data-[state=closed]:opacity-0 data-[state=open]:opacity-100",
7354
- "motion-reduce:transition-none",
7355
- className
7356
- ),
7357
- ...props
7358
- }
7359
- ));
7360
- SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
7361
- var sheetVariants = cva(
7362
- cn(
7363
- "fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop",
7364
- "transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
7365
- "motion-reduce:transition-none"
7366
- ),
7367
- {
7368
- variants: {
7369
- side: {
7370
- top: cn(
7371
- "inset-x-0 top-0 border-b border-rule",
7372
- "data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0"
7373
- ),
7374
- bottom: cn(
7375
- "inset-x-0 bottom-0 border-t border-rule max-h-[85vh]",
7376
- "data-[state=closed]:translate-y-full data-[state=open]:translate-y-0"
7377
- ),
7378
- left: cn(
7379
- "inset-y-0 left-0 h-full w-3/4 max-w-sm border-r border-rule",
7380
- "data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0"
7381
- ),
7382
- right: cn(
7383
- "inset-y-0 right-0 h-full w-3/4 max-w-sm border-l border-rule",
7384
- "data-[state=closed]:translate-x-full data-[state=open]:translate-x-0"
7385
- )
7386
- }
7387
- },
7388
- defaultVariants: { side: "right" }
7389
- }
7390
- );
7391
- var sheetWidthClasses = {
7392
- sm: "w-[95vw] max-w-[95vw] sm:w-[420px]",
7393
- md: "w-[95vw] max-w-[95vw] sm:w-[520px]",
7394
- lg: "w-[95vw] max-w-[95vw] sm:w-[640px]",
7395
- xl: "w-[95vw] max-w-[95vw] sm:w-[760px]",
7396
- full: "w-full max-w-none"
7397
- };
7398
- var SheetContent = React36.forwardRef(
7399
- ({ side, width = "default", customWidth, className, children, showCloseButton = true, style, ...props }, ref) => {
7400
- const ctx = React36.use(SheetSideContext);
7401
- const resolvedSide = side ?? ctx.side ?? "right";
7402
- const supportsWidth = resolvedSide === "left" || resolvedSide === "right";
7403
- const widthClass = supportsWidth && width !== "default" ? sheetWidthClasses[width] : null;
7404
- const widthStyle = supportsWidth && customWidth ? { width: customWidth, maxWidth: "95vw", ...style } : style;
7405
- return /* @__PURE__ */ jsxs(SheetPortal, { children: [
7406
- /* @__PURE__ */ jsx(SheetOverlay, {}),
7407
- /* @__PURE__ */ jsxs(
7408
- DialogPrimitive.Content,
7409
- {
7410
- ref,
7411
- className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
7412
- style: widthStyle,
7413
- ...props,
7414
- children: [
7415
- children,
7416
- showCloseButton && /* @__PURE__ */ jsx(
7417
- DialogPrimitive.Close,
7418
- {
7419
- className: cn(
7420
- "absolute top-4 right-4 inline-flex size-7 items-center justify-center",
7421
- "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
7422
- "hover:bg-overlay-hover hover:text-fg",
7423
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
7424
- "disabled:pointer-events-none"
7425
- ),
7426
- "aria-label": "Close",
7427
- children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
7428
- }
7429
- )
7430
- ]
7431
- }
7432
- )
7433
- ] });
7434
- }
7435
- );
7436
- SheetContent.displayName = DialogPrimitive.Content.displayName;
7437
- var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className), ...props });
7438
- SheetHeader.displayName = "SheetHeader";
7439
- var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
7440
- "div",
7441
- {
7442
- className: cn(
7443
- "border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end",
7444
- className
7445
- ),
7446
- ...props
7447
- }
7448
- );
7449
- SheetFooter.displayName = "SheetFooter";
7450
- var SheetTitle = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7451
- DialogPrimitive.Title,
7452
- {
7453
- ref,
7454
- className: cn(
7455
- "font-display text-fg text-base leading-tight font-medium tracking-tight",
7456
- className
7457
- ),
7458
- ...props
7459
- }
7460
- ));
7461
- SheetTitle.displayName = DialogPrimitive.Title.displayName;
7462
- var SheetDescription = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-fg-3 text-sm", className), ...props }));
7463
- SheetDescription.displayName = DialogPrimitive.Description.displayName;
7464
7927
  var sideDrawerVariants = cva(
7465
7928
  cn(
7466
7929
  "fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop",
@@ -7576,7 +8039,7 @@ function SideDrawerFooter({ children, className }) {
7576
8039
  SideDrawer.Header = SideDrawerHeader;
7577
8040
  SideDrawer.Body = SideDrawerBody;
7578
8041
  SideDrawer.Footer = SideDrawerFooter;
7579
- var Slider = React36.forwardRef(
8042
+ var Slider = React38.forwardRef(
7580
8043
  function Slider2({
7581
8044
  className,
7582
8045
  label,
@@ -7588,7 +8051,7 @@ var Slider = React36.forwardRef(
7588
8051
  defaultValue,
7589
8052
  ...props
7590
8053
  }, ref) {
7591
- const generatedId = React36.useId();
8054
+ const generatedId = React38.useId();
7592
8055
  const id = providedId ?? generatedId;
7593
8056
  const displayValue = (() => {
7594
8057
  const v = value ?? defaultValue;
@@ -7721,6 +8184,52 @@ var Stat = forwardRef(function Stat2({ value, label, className, ...props }, ref)
7721
8184
  ] });
7722
8185
  });
7723
8186
  Stat.displayName = "Stat";
8187
+ var statusDotVariants = cva("relative inline-flex shrink-0 rounded-full bg-current", {
8188
+ variants: {
8189
+ tone: {
8190
+ danger: "text-danger-fg",
8191
+ warning: "text-warning-fg",
8192
+ info: "text-accent",
8193
+ success: "text-success-fg",
8194
+ pro: "text-pro-fg",
8195
+ neutral: "text-fg-4"
8196
+ },
8197
+ size: {
8198
+ sm: "size-[7px]",
8199
+ md: "size-[9px]"
8200
+ },
8201
+ ring: {
8202
+ true: "shadow-[0_0_0_2px_var(--color-surface)]",
8203
+ false: ""
8204
+ }
8205
+ },
8206
+ defaultVariants: {
8207
+ tone: "danger",
8208
+ size: "sm",
8209
+ ring: false
8210
+ }
8211
+ });
8212
+ var StatusDot = forwardRef(function StatusDot2({ tone, size, ring, pulse, className, ...props }, ref) {
8213
+ const ariaLabel = props["aria-label"];
8214
+ return /* @__PURE__ */ jsx(
8215
+ "span",
8216
+ {
8217
+ ref,
8218
+ role: ariaLabel ? "img" : void 0,
8219
+ "aria-hidden": ariaLabel ? void 0 : true,
8220
+ className: cn(statusDotVariants({ tone, size, ring }), className),
8221
+ ...props,
8222
+ children: pulse && /* @__PURE__ */ jsx(
8223
+ "span",
8224
+ {
8225
+ "aria-hidden": "true",
8226
+ className: "absolute inset-0 inline-flex animate-ping rounded-full bg-current opacity-75 motion-reduce:hidden"
8227
+ }
8228
+ )
8229
+ }
8230
+ );
8231
+ });
8232
+ StatusDot.displayName = "StatusDot";
7724
8233
  var CENTER = 8;
7725
8234
  var RING_RADIUS = 6;
7726
8235
  var STROKE_WIDTH = 2;
@@ -7850,6 +8359,7 @@ var statusMap = {
7850
8359
  approved: { variant: "success", label: "Approved" },
7851
8360
  paid: { variant: "success", label: "Paid" },
7852
8361
  complete: { variant: "success", label: "Complete" },
8362
+ received: { variant: "success", label: "Received" },
7853
8363
  draft: { variant: "secondary", label: "Draft" },
7854
8364
  pending: { variant: "secondary", label: "Pending" },
7855
8365
  overdue: { variant: "destructive", label: "Overdue" },
@@ -7958,6 +8468,29 @@ var Stepper = forwardRef(function Stepper2({ steps, currentStep, orientation = "
7958
8468
  );
7959
8469
  });
7960
8470
  Stepper.displayName = "Stepper";
8471
+ var StickyActionBar = forwardRef(
8472
+ function StickyActionBar2({ children, hint, offsetForMobileNav, className, ...props }, ref) {
8473
+ return /* @__PURE__ */ jsxs(
8474
+ "div",
8475
+ {
8476
+ ref,
8477
+ className: cn(
8478
+ "sticky inset-x-0 z-20 flex flex-wrap items-center gap-3",
8479
+ "border-t border-rule bg-surface/80 px-4 py-3 backdrop-blur-md sm:px-6",
8480
+ "supports-[backdrop-filter]:bg-surface/80",
8481
+ offsetForMobileNav ? "bottom-[calc(3.5rem_+_env(safe-area-inset-bottom))] sm:bottom-0" : "bottom-0",
8482
+ className
8483
+ ),
8484
+ ...props,
8485
+ children: [
8486
+ hint != null && /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-2 text-sm font-medium text-fg-3", children: hint }),
8487
+ /* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center gap-2", children })
8488
+ ]
8489
+ }
8490
+ );
8491
+ }
8492
+ );
8493
+ StickyActionBar.displayName = "StickyActionBar";
7961
8494
  var SubmitButton = forwardRef(function SubmitButton2({ pendingText, children, className, ...props }, ref) {
7962
8495
  const { pending } = useFormStatus();
7963
8496
  return /* @__PURE__ */ jsx(
@@ -7974,6 +8507,87 @@ var SubmitButton = forwardRef(function SubmitButton2({ pendingText, children, cl
7974
8507
  );
7975
8508
  });
7976
8509
  SubmitButton.displayName = "SubmitButton";
8510
+ var suiteProgressFillVariants = cva("", {
8511
+ variants: {
8512
+ tone: {
8513
+ pro: "bg-brand-pro",
8514
+ audit: "bg-brand-audit",
8515
+ books: "bg-brand-books",
8516
+ tax: "bg-brand-tax"
8517
+ }
8518
+ },
8519
+ defaultVariants: { tone: "pro" }
8520
+ });
8521
+ var SIZE_STYLES = {
8522
+ sm: { row: "gap-2", track: "gap-0.5", segment: "h-1", text: "text-xs" },
8523
+ md: { row: "gap-3", track: "gap-1", segment: "h-[5px]", text: "text-sm" }
8524
+ };
8525
+ var SuiteProgress = forwardRef(
8526
+ function SuiteProgress2({
8527
+ value,
8528
+ total,
8529
+ showPercent = true,
8530
+ percent,
8531
+ tone = "pro",
8532
+ size = "md",
8533
+ label,
8534
+ segmentClassName,
8535
+ className,
8536
+ ...props
8537
+ }, ref) {
8538
+ const styles = SIZE_STYLES[size];
8539
+ const safeTotal = Math.max(1, Math.floor(total));
8540
+ const safeValue = Math.min(safeTotal, Math.max(0, Math.floor(value)));
8541
+ const resolvedPercent = percent != null ? Math.min(100, Math.max(0, Math.round(percent))) : Math.round(safeValue / safeTotal * 100);
8542
+ return /* @__PURE__ */ jsxs(
8543
+ "div",
8544
+ {
8545
+ ref,
8546
+ role: "progressbar",
8547
+ "aria-valuenow": resolvedPercent,
8548
+ "aria-valuemin": 0,
8549
+ "aria-valuemax": 100,
8550
+ "aria-valuetext": `${safeValue} of ${safeTotal}`,
8551
+ "aria-label": label ?? "Progress",
8552
+ className: cn("flex items-center", styles.row, className),
8553
+ ...props,
8554
+ children: [
8555
+ label && /* @__PURE__ */ jsx("span", { className: cn("text-fg-2 flex-none font-medium", styles.text), children: label }),
8556
+ /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-1", styles.track), "aria-hidden": "true", children: Array.from({ length: safeTotal }, (_, i) => {
8557
+ const filled = i < safeValue;
8558
+ return /* @__PURE__ */ jsx(
8559
+ "div",
8560
+ {
8561
+ className: cn(
8562
+ "flex-1 rounded-full",
8563
+ styles.segment,
8564
+ "transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
8565
+ filled ? suiteProgressFillVariants({ tone }) : "bg-surface-3",
8566
+ segmentClassName
8567
+ )
8568
+ },
8569
+ i
8570
+ );
8571
+ }) }),
8572
+ showPercent && /* @__PURE__ */ jsxs(
8573
+ "span",
8574
+ {
8575
+ className: cn(
8576
+ "text-fg flex-none font-bold tracking-tight tabular-nums",
8577
+ styles.text
8578
+ ),
8579
+ children: [
8580
+ resolvedPercent,
8581
+ /* @__PURE__ */ jsx("span", { className: "text-fg-4 ml-px text-[0.72em] font-semibold", children: "%" })
8582
+ ]
8583
+ }
8584
+ )
8585
+ ]
8586
+ }
8587
+ );
8588
+ }
8589
+ );
8590
+ SuiteProgress.displayName = "SuiteProgress";
7977
8591
  var switchVariants = cva(
7978
8592
  [
7979
8593
  "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent",
@@ -8016,9 +8630,9 @@ var switchThumbVariants = cva(
8016
8630
  }
8017
8631
  }
8018
8632
  );
8019
- var Switch = React36.forwardRef(
8633
+ var Switch = React38.forwardRef(
8020
8634
  function Switch2({ label, size, className, id: providedId, ...props }, ref) {
8021
- const generatedId = React36.useId();
8635
+ const generatedId = React38.useId();
8022
8636
  const id = providedId ?? generatedId;
8023
8637
  const root = /* @__PURE__ */ jsx(
8024
8638
  SwitchPrimitive.Root,
@@ -8152,13 +8766,13 @@ var TableCaption = forwardRef(
8152
8766
  }
8153
8767
  );
8154
8768
  TableCaption.displayName = "TableCaption";
8155
- var Tabs = React36.forwardRef(
8769
+ var Tabs = React38.forwardRef(
8156
8770
  function Tabs2({ className, ...props }, ref) {
8157
8771
  return /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, className: cn(className), ...props });
8158
8772
  }
8159
8773
  );
8160
8774
  Tabs.displayName = TabsPrimitive.Root.displayName;
8161
- var TabsList = React36.forwardRef(function TabsList2({ className, ...props }, ref) {
8775
+ var TabsList = React38.forwardRef(function TabsList2({ className, ...props }, ref) {
8162
8776
  return /* @__PURE__ */ jsx(
8163
8777
  TabsPrimitive.List,
8164
8778
  {
@@ -8203,7 +8817,7 @@ var triggerVariants = cva(
8203
8817
  }
8204
8818
  }
8205
8819
  );
8206
- var TabsTrigger = React36.forwardRef(function TabsTrigger2({ className, variant, ...props }, ref) {
8820
+ var TabsTrigger = React38.forwardRef(function TabsTrigger2({ className, variant, ...props }, ref) {
8207
8821
  return /* @__PURE__ */ jsx(
8208
8822
  TabsPrimitive.Trigger,
8209
8823
  {
@@ -8214,7 +8828,7 @@ var TabsTrigger = React36.forwardRef(function TabsTrigger2({ className, variant,
8214
8828
  );
8215
8829
  });
8216
8830
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
8217
- var TabsContent = React36.forwardRef(function TabsContent2({ className, ...props }, ref) {
8831
+ var TabsContent = React38.forwardRef(function TabsContent2({ className, ...props }, ref) {
8218
8832
  return /* @__PURE__ */ jsx(
8219
8833
  TabsPrimitive.Content,
8220
8834
  {
@@ -8239,7 +8853,7 @@ function TeamMemberSelect({
8239
8853
  placeholder = "Select team member...",
8240
8854
  className
8241
8855
  }) {
8242
- const options = React36.useMemo(() => {
8856
+ const options = React38.useMemo(() => {
8243
8857
  const meBadge = /* @__PURE__ */ jsx(
8244
8858
  Badge,
8245
8859
  {
@@ -8569,10 +9183,10 @@ var itemVariants = cva(
8569
9183
  }
8570
9184
  }
8571
9185
  );
8572
- var ToggleGroupContext = React36.createContext({
9186
+ var ToggleGroupContext = React38.createContext({
8573
9187
  variant: "default"
8574
9188
  });
8575
- var ToggleGroup = React36.forwardRef(function ToggleGroup2({ className, variant, children, ...props }, ref) {
9189
+ var ToggleGroup = React38.forwardRef(function ToggleGroup2({ className, variant, children, ...props }, ref) {
8576
9190
  return /* @__PURE__ */ jsx(
8577
9191
  ToggleGroupPrimitive.Root,
8578
9192
  {
@@ -8584,8 +9198,8 @@ var ToggleGroup = React36.forwardRef(function ToggleGroup2({ className, variant,
8584
9198
  );
8585
9199
  });
8586
9200
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
8587
- var ToggleGroupItem = React36.forwardRef(function ToggleGroupItem2({ className, variant, ...props }, ref) {
8588
- const ctx = React36.useContext(ToggleGroupContext);
9201
+ var ToggleGroupItem = React38.forwardRef(function ToggleGroupItem2({ className, variant, ...props }, ref) {
9202
+ const ctx = React38.useContext(ToggleGroupContext);
8589
9203
  return /* @__PURE__ */ jsx(
8590
9204
  ToggleGroupPrimitive.Item,
8591
9205
  {
@@ -8604,7 +9218,7 @@ var Tooltip = ({ delayMs, delayDuration, children, ...props }) => {
8604
9218
  return /* @__PURE__ */ jsx(TooltipPrimitive.Provider, { delayDuration: resolvedDelay, children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { delayDuration: resolvedDelay, ...props, children }) });
8605
9219
  };
8606
9220
  Tooltip.displayName = "Tooltip";
8607
- var TooltipContent = React36.forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
9221
+ var TooltipContent = React38.forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
8608
9222
  TooltipPrimitive.Content,
8609
9223
  {
8610
9224
  ref,
@@ -9235,6 +9849,501 @@ var FolderTree = forwardRef(function FolderTree2({ nodes, activeId, onSelect, de
9235
9849
  return /* @__PURE__ */ jsx("div", { ref, className: cn("w-full", className), ...props, children: /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: nodes.map((node) => renderNode(node, 0)) }) });
9236
9850
  });
9237
9851
  FolderTree.displayName = "FolderTree";
9852
+ var ClientRailItem = forwardRef(
9853
+ function ClientRailItem2({
9854
+ name,
9855
+ avatarSrc,
9856
+ entityType,
9857
+ pendingCount,
9858
+ fileCount,
9859
+ metaSuffix,
9860
+ active = false,
9861
+ className,
9862
+ ...props
9863
+ }, ref) {
9864
+ const hasPending = Boolean(pendingCount && pendingCount > 0);
9865
+ return /* @__PURE__ */ jsxs(
9866
+ "button",
9867
+ {
9868
+ ref,
9869
+ type: "button",
9870
+ className: cn(
9871
+ // Layout
9872
+ "relative flex w-full items-center gap-[11px] border-b border-rule px-[14px] py-[11px] text-left",
9873
+ // Motion
9874
+ "transition-colors duration-[120ms] motion-reduce:transition-none",
9875
+ // Cursor
9876
+ "cursor-pointer",
9877
+ // State — hover only when not active to avoid override
9878
+ active ? "bg-pro-bg" : "hover:bg-surface-2",
9879
+ className
9880
+ ),
9881
+ ...props,
9882
+ children: [
9883
+ active && /* @__PURE__ */ jsx(
9884
+ "span",
9885
+ {
9886
+ "aria-hidden": "true",
9887
+ className: "absolute top-0 bottom-0 left-0 w-[3px] bg-pro-fg"
9888
+ }
9889
+ ),
9890
+ /* @__PURE__ */ jsx("span", { className: "shrink-0", children: /* @__PURE__ */ jsx(Avatar, { name, src: avatarSrc, size: "sm" }) }),
9891
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
9892
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[7px]", children: [
9893
+ /* @__PURE__ */ jsx("span", { className: "truncate text-[13.5px] font-[650] text-fg", children: name }),
9894
+ hasPending && /* @__PURE__ */ jsx(StatusDot, { tone: "pro", size: "sm" }),
9895
+ fileCount != null && /* @__PURE__ */ jsx("span", { className: "shrink-0 rounded-full bg-surface-2 px-[6px] py-px text-[10.5px] font-bold text-fg-3", children: fileCount })
9896
+ ] }),
9897
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-[11.5px] text-fg-3", children: hasPending ? /* @__PURE__ */ jsxs(Fragment, { children: [
9898
+ /* @__PURE__ */ jsxs("span", { className: "font-semibold text-pro-fg", children: [
9899
+ pendingCount,
9900
+ " pending"
9901
+ ] }),
9902
+ " \xB7 ",
9903
+ entityType
9904
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
9905
+ entityType,
9906
+ metaSuffix != null && /* @__PURE__ */ jsxs(Fragment, { children: [
9907
+ " \xB7 ",
9908
+ metaSuffix
9909
+ ] })
9910
+ ] }) })
9911
+ ] })
9912
+ ]
9913
+ }
9914
+ );
9915
+ }
9916
+ );
9917
+ ClientRailItem.displayName = "ClientRailItem";
9918
+ var ClientRailGroupHeader = forwardRef(function ClientRailGroupHeader2({ label, count, accent = false, className, ...props }, ref) {
9919
+ return /* @__PURE__ */ jsxs(
9920
+ "div",
9921
+ {
9922
+ ref,
9923
+ className: cn(
9924
+ "flex items-center gap-[7px] px-[14px] pt-[14px] pb-[5px] text-[11.5px] font-semibold",
9925
+ accent ? "text-pro-fg" : "text-fg-3",
9926
+ className
9927
+ ),
9928
+ ...props,
9929
+ children: [
9930
+ accent && /* @__PURE__ */ jsx(StatusDot, { tone: "pro", size: "sm" }),
9931
+ /* @__PURE__ */ jsxs("span", { children: [
9932
+ label,
9933
+ count != null && /* @__PURE__ */ jsxs("span", { className: accent ? void 0 : "text-fg-4", children: [
9934
+ " \xB7 ",
9935
+ count
9936
+ ] })
9937
+ ] })
9938
+ ]
9939
+ }
9940
+ );
9941
+ });
9942
+ ClientRailGroupHeader.displayName = "ClientRailGroupHeader";
9943
+ function getFileTypeParts(fileType) {
9944
+ const normalized = fileType.toLowerCase().trim().replace(/^\./, "");
9945
+ if (normalized.includes("pdf")) {
9946
+ return { Icon: FileTextIcon, colorClass: "text-danger-fg" };
9947
+ }
9948
+ if (normalized.includes("image") || ["jpg", "jpeg", "png", "tiff"].some((type) => normalized.includes(type))) {
9949
+ return { Icon: FileIcon, colorClass: "text-pro-fg" };
9950
+ }
9951
+ if (normalized.includes("excel") || normalized.includes("spreadsheet") || ["xlsx", "xls", "csv"].some((type) => normalized.includes(type))) {
9952
+ return { Icon: FileTextIcon, colorClass: "text-success-fg" };
9953
+ }
9954
+ if (normalized.includes("word") || ["docx", "doc"].some((type) => normalized.includes(type))) {
9955
+ return { Icon: FileTextIcon, colorClass: "text-pro-fg" };
9956
+ }
9957
+ return { Icon: FileIcon, colorClass: "text-fg-4" };
9958
+ }
9959
+ function MetaText({
9960
+ values,
9961
+ className,
9962
+ dotClassName
9963
+ }) {
9964
+ const presentValues = values.filter(Boolean);
9965
+ if (presentValues.length === 0) {
9966
+ return null;
9967
+ }
9968
+ return /* @__PURE__ */ jsx("div", { className, children: presentValues.map((value, index) => /* @__PURE__ */ jsxs(React38.Fragment, { children: [
9969
+ index > 0 && /* @__PURE__ */ jsx(
9970
+ "span",
9971
+ {
9972
+ className: cn("size-[3px] rounded-full bg-fg-4", dotClassName),
9973
+ "aria-hidden": "true"
9974
+ }
9975
+ ),
9976
+ /* @__PURE__ */ jsx("span", { children: value })
9977
+ ] }, `${value}-${index}`)) });
9978
+ }
9979
+ function FileTile({ fileType, card }) {
9980
+ const { Icon: Icon3, colorClass } = getFileTypeParts(fileType);
9981
+ return /* @__PURE__ */ jsx(
9982
+ "span",
9983
+ {
9984
+ className: cn(
9985
+ "grid shrink-0 place-items-center bg-surface-2",
9986
+ card ? "size-[46px] rounded-xl bg-surface" : "size-[38px] rounded-[10px]"
9987
+ ),
9988
+ "aria-hidden": "true",
9989
+ children: /* @__PURE__ */ jsx(Icon3, { className: colorClass, size: card ? 22 : 18 })
9990
+ }
9991
+ );
9992
+ }
9993
+ function CheckboxSlot({
9994
+ selected,
9995
+ onSelectedChange,
9996
+ className
9997
+ }) {
9998
+ return (
9999
+ // Wrapper only stops click propagation so the row's open handler does not
10000
+ // fire when toggling the checkbox; the Checkbox itself is the focusable control.
10001
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
10002
+ /* @__PURE__ */ jsx(
10003
+ "div",
10004
+ {
10005
+ className: cn(
10006
+ "shrink-0 transition-opacity duration-[120ms] motion-reduce:transition-none",
10007
+ selected ? "opacity-100" : "opacity-0 group-hover:opacity-100",
10008
+ className
10009
+ ),
10010
+ onClick: (event) => event.stopPropagation(),
10011
+ children: /* @__PURE__ */ jsx(
10012
+ Checkbox,
10013
+ {
10014
+ checked: selected,
10015
+ onCheckedChange: (checked) => onSelectedChange?.(checked === true)
10016
+ }
10017
+ )
10018
+ }
10019
+ )
10020
+ );
10021
+ }
10022
+ function MoreActions({ menu }) {
10023
+ if (!menu) {
10024
+ return null;
10025
+ }
10026
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
10027
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
10028
+ "button",
10029
+ {
10030
+ type: "button",
10031
+ className: cn(
10032
+ "grid size-[30px] place-items-center rounded-[8px] text-fg-4",
10033
+ "transition-colors duration-[120ms] motion-reduce:transition-none",
10034
+ "group-hover:text-fg-2 hover:bg-surface hover:text-pro-fg hover:shadow-sm"
10035
+ ),
10036
+ "aria-label": "More actions",
10037
+ onClick: (event) => event.stopPropagation(),
10038
+ children: /* @__PURE__ */ jsx(MoreHorizontalIcon, { size: 16 })
10039
+ }
10040
+ ) }),
10041
+ /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", children: menu })
10042
+ ] });
10043
+ }
10044
+ var DocumentFileRow = React38.forwardRef(
10045
+ function DocumentFileRow2({
10046
+ name,
10047
+ fileType,
10048
+ size,
10049
+ date,
10050
+ by,
10051
+ status,
10052
+ nameAdornment,
10053
+ menu,
10054
+ selected = false,
10055
+ showCheckbox = true,
10056
+ onSelectedChange,
10057
+ onOpen,
10058
+ className,
10059
+ onClick,
10060
+ ...props
10061
+ }, ref) {
10062
+ return (
10063
+ // Whole-row click is a pointer enhancement that opens the file; the same
10064
+ // action is keyboard-reachable via the kebab menu's items, and the row's
10065
+ // interactive controls (checkbox, menu) are independently focusable.
10066
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
10067
+ /* @__PURE__ */ jsxs(
10068
+ "div",
10069
+ {
10070
+ ref,
10071
+ className: cn(
10072
+ "group flex cursor-pointer items-center gap-[13px] border-b border-rule px-[14px] py-3",
10073
+ "transition-colors duration-[120ms] motion-reduce:transition-none hover:bg-surface-2",
10074
+ selected && "bg-pro-bg",
10075
+ className
10076
+ ),
10077
+ onClick: (event) => {
10078
+ onClick?.(event);
10079
+ if (!event.defaultPrevented) {
10080
+ onOpen?.();
10081
+ }
10082
+ },
10083
+ ...props,
10084
+ children: [
10085
+ showCheckbox !== false && /* @__PURE__ */ jsx(CheckboxSlot, { selected, onSelectedChange }),
10086
+ /* @__PURE__ */ jsx(FileTile, { fileType }),
10087
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10088
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
10089
+ /* @__PURE__ */ jsx("span", { className: "truncate text-[13.5px] font-semibold text-fg", children: name }),
10090
+ nameAdornment
10091
+ ] }),
10092
+ /* @__PURE__ */ jsx(
10093
+ MetaText,
10094
+ {
10095
+ values: [size, date, by],
10096
+ className: "mt-0.5 flex flex-wrap items-center gap-[7px] text-[11.5px] text-fg-3"
10097
+ }
10098
+ )
10099
+ ] }),
10100
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-[10px]", children: [
10101
+ status,
10102
+ /* @__PURE__ */ jsx(MoreActions, { menu })
10103
+ ] })
10104
+ ]
10105
+ }
10106
+ )
10107
+ );
10108
+ }
10109
+ );
10110
+ DocumentFileRow.displayName = "DocumentFileRow";
10111
+ var DocumentFileCard = React38.forwardRef(
10112
+ function DocumentFileCard2({
10113
+ name,
10114
+ fileType,
10115
+ size,
10116
+ date,
10117
+ by: _by,
10118
+ status,
10119
+ nameAdornment: _nameAdornment,
10120
+ menu,
10121
+ selected = false,
10122
+ showCheckbox = true,
10123
+ onSelectedChange,
10124
+ onOpen,
10125
+ className,
10126
+ onClick,
10127
+ ...props
10128
+ }, ref) {
10129
+ return (
10130
+ // Whole-card click is a pointer enhancement that opens the file; the same
10131
+ // action is keyboard-reachable via the kebab menu's items, and the card's
10132
+ // interactive controls (checkbox, menu) are independently focusable.
10133
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
10134
+ /* @__PURE__ */ jsxs(
10135
+ "div",
10136
+ {
10137
+ ref,
10138
+ className: cn(
10139
+ "group relative cursor-pointer rounded-2xl border border-rule bg-surface p-3",
10140
+ "transition-[border-color,box-shadow,transform] duration-[120ms] motion-reduce:transition-none",
10141
+ "hover:-translate-y-0.5 hover:border-rule-strong hover:shadow-sm",
10142
+ selected && "border-pro-fg bg-pro-bg",
10143
+ className
10144
+ ),
10145
+ onClick: (event) => {
10146
+ onClick?.(event);
10147
+ if (!event.defaultPrevented) {
10148
+ onOpen?.();
10149
+ }
10150
+ },
10151
+ ...props,
10152
+ children: [
10153
+ showCheckbox !== false && /* @__PURE__ */ jsx(
10154
+ CheckboxSlot,
10155
+ {
10156
+ selected,
10157
+ onSelectedChange,
10158
+ className: "absolute top-2 left-2 z-[2]"
10159
+ }
10160
+ ),
10161
+ /* @__PURE__ */ jsx("div", { className: "relative mb-[11px] grid h-[92px] place-items-center overflow-hidden rounded-[10px] bg-surface-2", children: /* @__PURE__ */ jsx(FileTile, { fileType, card: true }) }),
10162
+ /* @__PURE__ */ jsx("div", { className: "truncate text-[13px] font-semibold text-fg", children: name }),
10163
+ /* @__PURE__ */ jsx(
10164
+ MetaText,
10165
+ {
10166
+ values: [size, date],
10167
+ className: "mt-[3px] flex items-center gap-[6px] text-[11px] text-fg-3"
10168
+ }
10169
+ ),
10170
+ /* @__PURE__ */ jsxs("div", { className: "mt-[10px] flex items-center justify-between", children: [
10171
+ /* @__PURE__ */ jsx("div", { className: "min-w-0", children: status }),
10172
+ /* @__PURE__ */ jsx(MoreActions, { menu })
10173
+ ] })
10174
+ ]
10175
+ }
10176
+ )
10177
+ );
10178
+ }
10179
+ );
10180
+ DocumentFileCard.displayName = "DocumentFileCard";
10181
+ var DocumentRequestField = forwardRef(
10182
+ function DocumentRequestField2({
10183
+ index,
10184
+ typeControl,
10185
+ label,
10186
+ onLabelChange,
10187
+ note,
10188
+ onNoteChange,
10189
+ onRemove,
10190
+ canRemove = true,
10191
+ className,
10192
+ ...props
10193
+ }, ref) {
10194
+ const humanIndex = index + 1;
10195
+ const showRemove = Boolean(onRemove) && canRemove;
10196
+ return /* @__PURE__ */ jsxs(
10197
+ "div",
10198
+ {
10199
+ ref,
10200
+ className: cn(
10201
+ "rounded-2xl border border-rule bg-surface-2 p-[14px] mb-[10px]",
10202
+ className
10203
+ ),
10204
+ ...props,
10205
+ children: [
10206
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[9px] mb-3", children: [
10207
+ /* @__PURE__ */ jsx(
10208
+ "span",
10209
+ {
10210
+ "aria-hidden": "true",
10211
+ className: "size-[22px] rounded-full bg-pro-bg text-pro-fg text-[11px] font-bold grid place-items-center shrink-0 leading-none",
10212
+ children: humanIndex
10213
+ }
10214
+ ),
10215
+ /* @__PURE__ */ jsxs("span", { className: "text-[13px] font-[650] text-pro-fg", children: [
10216
+ "Document ",
10217
+ humanIndex
10218
+ ] }),
10219
+ showRemove && /* @__PURE__ */ jsx(
10220
+ "button",
10221
+ {
10222
+ type: "button",
10223
+ onClick: onRemove,
10224
+ "aria-label": `Remove document ${humanIndex}`,
10225
+ className: cn(
10226
+ "ml-auto size-[26px] rounded-[7px] grid place-items-center",
10227
+ "text-fg-4",
10228
+ "transition-colors duration-[120ms] motion-reduce:transition-none",
10229
+ "hover:bg-danger-bg hover:text-danger-fg",
10230
+ "focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]"
10231
+ ),
10232
+ children: /* @__PURE__ */ jsx(CloseIcon, { size: 14, "aria-hidden": "true" })
10233
+ }
10234
+ )
10235
+ ] }),
10236
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
10237
+ /* @__PURE__ */ jsxs("div", { children: [
10238
+ /* @__PURE__ */ jsx("span", { className: "mb-1.5 block text-[11.5px] font-semibold text-fg-2", children: "Type" }),
10239
+ typeControl
10240
+ ] }),
10241
+ /* @__PURE__ */ jsxs("div", { children: [
10242
+ /* @__PURE__ */ jsxs("span", { className: "mb-1.5 block text-[11.5px] font-semibold text-fg-2", children: [
10243
+ "Label",
10244
+ " ",
10245
+ /* @__PURE__ */ jsx("span", { className: "text-danger-fg", "aria-hidden": "true", children: "*" })
10246
+ ] }),
10247
+ /* @__PURE__ */ jsx(
10248
+ Input,
10249
+ {
10250
+ value: label,
10251
+ onChange: (e) => onLabelChange(e.target.value),
10252
+ placeholder: "e.g. Bank statement for review",
10253
+ inputSize: "sm",
10254
+ "aria-label": `Label for document ${humanIndex}`,
10255
+ "aria-required": "true"
10256
+ }
10257
+ )
10258
+ ] }),
10259
+ /* @__PURE__ */ jsxs("div", { className: "col-span-2", children: [
10260
+ /* @__PURE__ */ jsx("span", { className: "mb-1.5 block text-[11.5px] font-semibold text-fg-2", children: "Note" }),
10261
+ /* @__PURE__ */ jsx(
10262
+ Input,
10263
+ {
10264
+ value: note,
10265
+ onChange: (e) => onNoteChange(e.target.value),
10266
+ placeholder: "Optional note for the client",
10267
+ inputSize: "sm",
10268
+ "aria-label": `Note for document ${humanIndex}`
10269
+ }
10270
+ )
10271
+ ] })
10272
+ ] })
10273
+ ]
10274
+ }
10275
+ );
10276
+ }
10277
+ );
10278
+ DocumentRequestField.displayName = "DocumentRequestField";
10279
+ var stateToStatus = {
10280
+ missing: "requested",
10281
+ pending: "pending",
10282
+ received: "received"
10283
+ };
10284
+ function StateDot({ state }) {
10285
+ const colorClass = state === "received" ? "bg-success-fg" : state === "pending" ? "bg-fg-4" : "bg-warning-fg";
10286
+ return /* @__PURE__ */ jsx(
10287
+ "span",
10288
+ {
10289
+ "aria-hidden": "true",
10290
+ className: cn("block size-1.5 shrink-0 rounded-full", colorClass)
10291
+ }
10292
+ );
10293
+ }
10294
+ var MissingDocumentsPanel = forwardRef(
10295
+ function MissingDocumentsPanel2({ items, subtitle = "Suggested from this engagement", onRequest, className, ...props }, ref) {
10296
+ const hasItems = items.length > 0;
10297
+ return /* @__PURE__ */ jsxs(
10298
+ "div",
10299
+ {
10300
+ ref,
10301
+ className: cn(
10302
+ "border-rule bg-surface flex flex-col gap-3 rounded-2xl border p-4 shadow-quiet",
10303
+ className
10304
+ ),
10305
+ ...props,
10306
+ children: [
10307
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5", children: [
10308
+ /* @__PURE__ */ jsx(
10309
+ "span",
10310
+ {
10311
+ "aria-hidden": "true",
10312
+ className: "grid size-7 shrink-0 place-items-center rounded-lg bg-[image:var(--gradient-ai)] text-white [&_svg]:size-3.5",
10313
+ children: /* @__PURE__ */ jsx(SparklesIcon, {})
10314
+ }
10315
+ ),
10316
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10317
+ /* @__PURE__ */ jsx("p", { className: "text-fg-4 mb-0.5 text-[10px] font-semibold tracking-widest uppercase", children: "AI" }),
10318
+ /* @__PURE__ */ jsx("p", { className: "text-fg text-[14px] font-[650] leading-tight", children: "Missing documents" }),
10319
+ /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-[12px] leading-snug", children: subtitle })
10320
+ ] })
10321
+ ] }),
10322
+ hasItems ? /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: items.map((item, idx) => /* @__PURE__ */ jsxs(
10323
+ "li",
10324
+ {
10325
+ className: "border-rule flex items-center gap-3 border-b py-2 last:border-0",
10326
+ children: [
10327
+ /* @__PURE__ */ jsx(StateDot, { state: item.state }),
10328
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10329
+ /* @__PURE__ */ jsx("p", { className: "text-fg truncate text-[13px] leading-snug", children: item.label }),
10330
+ item.dueDate != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-[11.5px] leading-none", children: item.dueDate })
10331
+ ] }),
10332
+ /* @__PURE__ */ jsx(StatusPill, { status: stateToStatus[item.state], dot: false })
10333
+ ]
10334
+ },
10335
+ idx
10336
+ )) }) : (
10337
+ /* Empty / all-received state */
10338
+ /* @__PURE__ */ jsx("p", { className: "text-success-fg py-1 text-[13px] font-medium", children: "All documents received" })
10339
+ ),
10340
+ onRequest != null && hasItems && /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: onRequest, children: "Request missing" }) })
10341
+ ]
10342
+ }
10343
+ );
10344
+ }
10345
+ );
10346
+ MissingDocumentsPanel.displayName = "MissingDocumentsPanel";
9238
10347
  function renderAction(action) {
9239
10348
  return /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: action.onSelect, children: [
9240
10349
  action.icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-fg-3 [&_svg]:size-4", children: action.icon }),
@@ -9295,7 +10404,7 @@ var Content16 = forwardRef(function Content17({ padTop, padBottom, className, st
9295
10404
  );
9296
10405
  });
9297
10406
  Content16.displayName = "Content";
9298
- var SidebarContext = React36.createContext(null);
10407
+ var SidebarContext = React38.createContext(null);
9299
10408
  var NOOP_CONTEXT = {
9300
10409
  state: "expanded",
9301
10410
  setState: () => {
@@ -9308,7 +10417,7 @@ var NOOP_CONTEXT = {
9308
10417
  }
9309
10418
  };
9310
10419
  function useSidebarState() {
9311
- return React36.useContext(SidebarContext) ?? NOOP_CONTEXT;
10420
+ return React38.useContext(SidebarContext) ?? NOOP_CONTEXT;
9312
10421
  }
9313
10422
  var DEFAULT_SHORTCUT = "Mod+\\";
9314
10423
  function readStorage(key) {
@@ -9328,16 +10437,16 @@ function SidebarProvider({
9328
10437
  storageKey,
9329
10438
  shortcut = DEFAULT_SHORTCUT
9330
10439
  }) {
9331
- const [uncontrolled, setUncontrolled] = React36.useState(
10440
+ const [uncontrolled, setUncontrolled] = React38.useState(
9332
10441
  controlled ?? defaultState
9333
10442
  );
9334
- React36.useEffect(() => {
10443
+ React38.useEffect(() => {
9335
10444
  if (controlled !== void 0) return;
9336
10445
  const stored = readStorage(storageKey);
9337
10446
  if (stored && stored !== uncontrolled) setUncontrolled(stored);
9338
10447
  }, []);
9339
10448
  const state = controlled ?? uncontrolled;
9340
- const setState = React36.useCallback(
10449
+ const setState = React38.useCallback(
9341
10450
  (next) => {
9342
10451
  if (controlled === void 0) setUncontrolled(next);
9343
10452
  onStateChange?.(next);
@@ -9350,11 +10459,11 @@ function SidebarProvider({
9350
10459
  },
9351
10460
  [controlled, onStateChange, storageKey]
9352
10461
  );
9353
- const toggle = React36.useCallback(() => {
10462
+ const toggle = React38.useCallback(() => {
9354
10463
  setState(state === "expanded" ? "rail" : "expanded");
9355
10464
  }, [state, setState]);
9356
- const [peekLockCount, setPeekLockCount] = React36.useState(0);
9357
- const acquirePeekLock = React36.useCallback(() => {
10465
+ const [peekLockCount, setPeekLockCount] = React38.useState(0);
10466
+ const acquirePeekLock = React38.useCallback(() => {
9358
10467
  setPeekLockCount((n) => n + 1);
9359
10468
  let released = false;
9360
10469
  return () => {
@@ -9363,7 +10472,7 @@ function SidebarProvider({
9363
10472
  setPeekLockCount((n) => Math.max(0, n - 1));
9364
10473
  };
9365
10474
  }, []);
9366
- React36.useEffect(() => {
10475
+ React38.useEffect(() => {
9367
10476
  if (!shortcut) return;
9368
10477
  const parts = shortcut.split("+");
9369
10478
  const key = parts.pop() ?? "";
@@ -9383,7 +10492,7 @@ function SidebarProvider({
9383
10492
  window.addEventListener("keydown", onKey);
9384
10493
  return () => window.removeEventListener("keydown", onKey);
9385
10494
  }, [shortcut, toggle]);
9386
- const value = React36.useMemo(
10495
+ const value = React38.useMemo(
9387
10496
  () => ({ state, setState, toggle, collapsible: true, peekLockCount, acquirePeekLock }),
9388
10497
  [state, setState, toggle, peekLockCount, acquirePeekLock]
9389
10498
  );
@@ -9392,15 +10501,15 @@ function SidebarProvider({
9392
10501
  SidebarProvider.displayName = "SidebarProvider";
9393
10502
  var PEEK_ENTER_DELAY_MS = 100;
9394
10503
  var PEEK_LEAVE_DELAY_MS = 200;
9395
- var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = false, variant = "classic", onMouseEnter, onMouseLeave, style, ...props }, ref) {
10504
+ var Sidebar = React38.forwardRef(function Sidebar2({ className, collapsible = false, variant = "classic", onMouseEnter, onMouseLeave, style, ...props }, ref) {
9396
10505
  const isFloating = variant === "floating";
9397
- const ctx = React36.useContext(SidebarContext);
10506
+ const ctx = React38.useContext(SidebarContext);
9398
10507
  const state = collapsible && ctx ? ctx.state : "expanded";
9399
10508
  const peekLockCount = collapsible && ctx ? ctx.peekLockCount : 0;
9400
- const [peek, setPeek] = React36.useState(false);
9401
- const enterTimer = React36.useRef(null);
9402
- const leaveTimer = React36.useRef(null);
9403
- const clearTimers = React36.useCallback(() => {
10509
+ const [peek, setPeek] = React38.useState(false);
10510
+ const enterTimer = React38.useRef(null);
10511
+ const leaveTimer = React38.useRef(null);
10512
+ const clearTimers = React38.useCallback(() => {
9404
10513
  if (enterTimer.current != null) {
9405
10514
  window.clearTimeout(enterTimer.current);
9406
10515
  enterTimer.current = null;
@@ -9410,8 +10519,8 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
9410
10519
  leaveTimer.current = null;
9411
10520
  }
9412
10521
  }, []);
9413
- React36.useEffect(() => () => clearTimers(), [clearTimers]);
9414
- React36.useEffect(() => {
10522
+ React38.useEffect(() => () => clearTimers(), [clearTimers]);
10523
+ React38.useEffect(() => {
9415
10524
  if (state === "expanded") {
9416
10525
  clearTimers();
9417
10526
  setPeek(false);
@@ -9492,7 +10601,7 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
9492
10601
  );
9493
10602
  });
9494
10603
  Sidebar.displayName = "Sidebar";
9495
- var SidebarTrigger = React36.forwardRef(
10604
+ var SidebarTrigger = React38.forwardRef(
9496
10605
  function SidebarTrigger2({
9497
10606
  className,
9498
10607
  expandLabel = "Expand sidebar",
@@ -9500,7 +10609,7 @@ var SidebarTrigger = React36.forwardRef(
9500
10609
  onClick,
9501
10610
  ...props
9502
10611
  }, ref) {
9503
- const ctx = React36.useContext(SidebarContext);
10612
+ const ctx = React38.useContext(SidebarContext);
9504
10613
  if (!ctx) return null;
9505
10614
  const { state, toggle } = ctx;
9506
10615
  const label = state === "expanded" ? collapseLabel : expandLabel;
@@ -9531,14 +10640,14 @@ var SidebarTrigger = React36.forwardRef(
9531
10640
  );
9532
10641
  SidebarTrigger.displayName = "SidebarTrigger";
9533
10642
  function useSidebarPeekLock(active) {
9534
- const ctx = React36.useContext(SidebarContext);
9535
- React36.useEffect(() => {
10643
+ const ctx = React38.useContext(SidebarContext);
10644
+ React38.useEffect(() => {
9536
10645
  if (!active || !ctx) return;
9537
10646
  const release = ctx.acquirePeekLock();
9538
10647
  return release;
9539
10648
  }, [active, ctx]);
9540
10649
  }
9541
- var SidebarPinButton = React36.forwardRef(
10650
+ var SidebarPinButton = React38.forwardRef(
9542
10651
  function SidebarPinButton2({
9543
10652
  pinLabel = "Pin sidebar",
9544
10653
  unpinLabel = "Unpin sidebar",
@@ -9546,7 +10655,7 @@ var SidebarPinButton = React36.forwardRef(
9546
10655
  onClick,
9547
10656
  ...props
9548
10657
  }, ref) {
9549
- const ctx = React36.useContext(SidebarContext);
10658
+ const ctx = React38.useContext(SidebarContext);
9550
10659
  if (!ctx || !ctx.collapsible) return null;
9551
10660
  const { state, setState } = ctx;
9552
10661
  const isPinned = state === "expanded";
@@ -9611,7 +10720,7 @@ function PinGlyph({
9611
10720
  }
9612
10721
  );
9613
10722
  }
9614
- var SidebarBrand = React36.forwardRef(
10723
+ var SidebarBrand = React38.forwardRef(
9615
10724
  function SidebarBrand2({ className, ...props }, ref) {
9616
10725
  return /* @__PURE__ */ jsx(
9617
10726
  "div",
@@ -9627,7 +10736,7 @@ var SidebarBrand = React36.forwardRef(
9627
10736
  }
9628
10737
  );
9629
10738
  SidebarBrand.displayName = "SidebarBrand";
9630
- var SidebarBrandText = React36.forwardRef(
10739
+ var SidebarBrandText = React38.forwardRef(
9631
10740
  function SidebarBrandText2({ className, ...props }, ref) {
9632
10741
  return /* @__PURE__ */ jsx(
9633
10742
  "span",
@@ -9652,16 +10761,16 @@ var SidebarBrandText = React36.forwardRef(
9652
10761
  }
9653
10762
  );
9654
10763
  SidebarBrandText.displayName = "SidebarBrandText";
9655
- var SidebarGroupScopeContext = React36.createContext(null);
9656
- var SidebarSection = React36.forwardRef(
10764
+ var SidebarGroupScopeContext = React38.createContext(null);
10765
+ var SidebarSection = React38.forwardRef(
9657
10766
  function SidebarSection2({ label, tone = "pro", className, children, ...props }, ref) {
9658
10767
  const ariaLabel = typeof label === "string" ? label : typeof label === "number" ? String(label) : void 0;
9659
- const [exclusiveId, setExclusiveIdState] = React36.useState(null);
9660
- const setExclusive = React36.useCallback(
10768
+ const [exclusiveId, setExclusiveIdState] = React38.useState(null);
10769
+ const setExclusive = React38.useCallback(
9661
10770
  (id) => setExclusiveIdState(id),
9662
10771
  []
9663
10772
  );
9664
- const scope = React36.useMemo(
10773
+ const scope = React38.useMemo(
9665
10774
  () => ({ exclusiveId, setExclusive }),
9666
10775
  [exclusiveId, setExclusive]
9667
10776
  );
@@ -9714,12 +10823,12 @@ function getTextContent(node) {
9714
10823
  if (node == null || typeof node === "boolean") return "";
9715
10824
  if (typeof node === "string" || typeof node === "number") return String(node);
9716
10825
  if (Array.isArray(node)) return node.map(getTextContent).filter(Boolean).join(" ");
9717
- if (React36.isValidElement(node)) {
10826
+ if (React38.isValidElement(node)) {
9718
10827
  return getTextContent(node.props.children);
9719
10828
  }
9720
10829
  return "";
9721
10830
  }
9722
- var SidebarLink = React36.forwardRef(
10831
+ var SidebarLink = React38.forwardRef(
9723
10832
  function SidebarLink2({ href, icon, active = false, asChild, className, children, "aria-label": ariaLabel, ...props }, ref) {
9724
10833
  const Comp = asChild ? Slot : "a";
9725
10834
  const accessibleLabel = ariaLabel ?? (asChild ? void 0 : getTextContent(children) || void 0);
@@ -9790,7 +10899,7 @@ var SidebarLink = React36.forwardRef(
9790
10899
  }
9791
10900
  );
9792
10901
  SidebarLink.displayName = "SidebarLink";
9793
- var SidebarLinkLabel = React36.forwardRef(
10902
+ var SidebarLinkLabel = React38.forwardRef(
9794
10903
  function SidebarLinkLabel2({ className, ...props }, ref) {
9795
10904
  return /* @__PURE__ */ jsx(
9796
10905
  "span",
@@ -9815,7 +10924,7 @@ var SidebarLinkLabel = React36.forwardRef(
9815
10924
  }
9816
10925
  );
9817
10926
  SidebarLinkLabel.displayName = "SidebarLinkLabel";
9818
- var SidebarLinkAction = React36.forwardRef(
10927
+ var SidebarLinkAction = React38.forwardRef(
9819
10928
  function SidebarLinkAction2({ className, ...props }, ref) {
9820
10929
  return /* @__PURE__ */ jsx(
9821
10930
  "span",
@@ -9847,13 +10956,13 @@ var sidebarLinkBadgeVariants = cva(
9847
10956
  defaultVariants: { tone: "default" }
9848
10957
  }
9849
10958
  );
9850
- var SidebarLinkBadge = React36.forwardRef(
10959
+ var SidebarLinkBadge = React38.forwardRef(
9851
10960
  function SidebarLinkBadge2({ tone, className, ...props }, ref) {
9852
10961
  return /* @__PURE__ */ jsx("span", { ref, className: cn(sidebarLinkBadgeVariants({ tone }), className), ...props });
9853
10962
  }
9854
10963
  );
9855
10964
  SidebarLinkBadge.displayName = "SidebarLinkBadge";
9856
- var SidebarLinkGroup = React36.forwardRef(
10965
+ var SidebarLinkGroup = React38.forwardRef(
9857
10966
  function SidebarLinkGroup2({
9858
10967
  id: idProp,
9859
10968
  icon,
@@ -9868,19 +10977,19 @@ var SidebarLinkGroup = React36.forwardRef(
9868
10977
  children,
9869
10978
  ...props
9870
10979
  }, ref) {
9871
- const reactId = React36.useId();
10980
+ const reactId = React38.useId();
9872
10981
  const id = idProp ?? reactId;
9873
- const scope = React36.useContext(SidebarGroupScopeContext);
9874
- const [uncontrolledOpen, setUncontrolledOpen] = React36.useState(defaultOpen);
10982
+ const scope = React38.useContext(SidebarGroupScopeContext);
10983
+ const [uncontrolledOpen, setUncontrolledOpen] = React38.useState(defaultOpen);
9875
10984
  const open = controlled ?? uncontrolledOpen;
9876
- const setOpen = React36.useCallback(
10985
+ const setOpen = React38.useCallback(
9877
10986
  (next) => {
9878
10987
  if (controlled === void 0) setUncontrolledOpen(next);
9879
10988
  onOpenChange?.(next);
9880
10989
  },
9881
10990
  [controlled, onOpenChange]
9882
10991
  );
9883
- React36.useEffect(() => {
10992
+ React38.useEffect(() => {
9884
10993
  if (scope?.exclusiveId && scope.exclusiveId !== id && open) {
9885
10994
  setOpen(false);
9886
10995
  }
@@ -9989,7 +11098,7 @@ var SidebarLinkGroup = React36.forwardRef(
9989
11098
  }
9990
11099
  );
9991
11100
  SidebarLinkGroup.displayName = "SidebarLinkGroup";
9992
- var SidebarFooter = React36.forwardRef(
11101
+ var SidebarFooter = React38.forwardRef(
9993
11102
  function SidebarFooter2({ className, ...props }, ref) {
9994
11103
  return /* @__PURE__ */ jsx(
9995
11104
  "div",
@@ -10006,7 +11115,7 @@ var SidebarFooter = React36.forwardRef(
10006
11115
  }
10007
11116
  );
10008
11117
  SidebarFooter.displayName = "SidebarFooter";
10009
- var SidebarUser = React36.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
11118
+ var SidebarUser = React38.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
10010
11119
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex min-w-0 items-center gap-2.5", className), ...props, children: [
10011
11120
  /* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
10012
11121
  /* @__PURE__ */ jsxs(
@@ -10027,7 +11136,7 @@ var SidebarUser = React36.forwardRef(function SidebarUser2({ name, subtitle, ava
10027
11136
  ] });
10028
11137
  });
10029
11138
  SidebarUser.displayName = "SidebarUser";
10030
- var SidebarBrandSwitcher = React36.forwardRef(
11139
+ var SidebarBrandSwitcher = React38.forwardRef(
10031
11140
  function SidebarBrandSwitcher2({
10032
11141
  brand,
10033
11142
  label,
@@ -10045,7 +11154,7 @@ var SidebarBrandSwitcher = React36.forwardRef(
10045
11154
  contentClassName,
10046
11155
  trailing
10047
11156
  }, ref) {
10048
- const [open, setOpen] = React36.useState(false);
11157
+ const [open, setOpen] = React38.useState(false);
10049
11158
  useSidebarPeekLock(open);
10050
11159
  const others = items.filter((p) => p.id !== current.id);
10051
11160
  return (
@@ -10165,7 +11274,7 @@ function SidebarBrandSwitcherOtherRow({
10165
11274
  unavailableBadge
10166
11275
  }) {
10167
11276
  const reachable = item.available !== false;
10168
- const [launching, setLaunching] = React36.useState(false);
11277
+ const [launching, setLaunching] = React38.useState(false);
10169
11278
  const handleSelect = async () => {
10170
11279
  if (!reachable || launching || !onLaunch) return;
10171
11280
  setLaunching(true);
@@ -12082,7 +13191,7 @@ var FilterChip = forwardRef(function FilterChip2({ active = false, size, count,
12082
13191
  );
12083
13192
  });
12084
13193
  FilterChip.displayName = "FilterChip";
12085
- var BulkActionBarContext = React36.createContext({ tone: "surface" });
13194
+ var BulkActionBarContext = React38.createContext({ tone: "surface" });
12086
13195
  function actionClasses(tone, destructive) {
12087
13196
  const base = cn(
12088
13197
  "inline-flex h-8 items-center gap-1.5 rounded-btn px-3 text-[13px] font-medium",
@@ -12105,8 +13214,8 @@ function actionClasses(tone, destructive) {
12105
13214
  destructive ? "text-control-destructive-fg hover:bg-control-destructive-hover-bg" : "text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg"
12106
13215
  );
12107
13216
  }
12108
- var BulkActionBarAction = React36.forwardRef(function BulkActionBarAction2({ asChild = false, destructive, className, type, ...props }, ref) {
12109
- const { tone } = React36.use(BulkActionBarContext);
13217
+ var BulkActionBarAction = React38.forwardRef(function BulkActionBarAction2({ asChild = false, destructive, className, type, ...props }, ref) {
13218
+ const { tone } = React38.use(BulkActionBarContext);
12110
13219
  const Comp = asChild ? Slot : "button";
12111
13220
  return /* @__PURE__ */ jsx(
12112
13221
  Comp,
@@ -12120,7 +13229,7 @@ var BulkActionBarAction = React36.forwardRef(function BulkActionBarAction2({ asC
12120
13229
  });
12121
13230
  BulkActionBarAction.displayName = "BulkActionBarAction";
12122
13231
  function BulkActionBarSeparator({ className }) {
12123
- const { tone } = React36.use(BulkActionBarContext);
13232
+ const { tone } = React38.use(BulkActionBarContext);
12124
13233
  return /* @__PURE__ */ jsx(
12125
13234
  "span",
12126
13235
  {
@@ -12320,6 +13429,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
12320
13429
  });
12321
13430
  KbdHint.displayName = "KbdHint";
12322
13431
 
12323
- export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, 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, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, 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, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, 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, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentIcon, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, 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, PenSignIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, RotateCcwIcon, 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, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, StarIcon, StarRating, Stat, StatusIcon, StatusPill, Stepper, StopIcon, StrikethroughIcon, SubmitButton, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, 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, badgeVariants, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, filterChipVariants, formatClock, formatCurrency, formatDuration, getFlagEmoji, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
13432
+ export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, 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, 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, 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, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentFileCard, DocumentFileRow, DocumentIcon, DocumentRequestField, DocumentsWorkspaceLayout, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, 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, 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, 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, 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, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, StarIcon, StarRating, Stat, StatusDot, StatusIcon, StatusPill, Stepper, StickyActionBar, StopIcon, StrikethroughIcon, SubmitButton, SuiteProgress, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, 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 };
12324
13433
  //# sourceMappingURL=index.js.map
12325
13434
  //# sourceMappingURL=index.js.map