@assure-one/design-system 1.2.0 → 1.3.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 React37 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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 } = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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] = React37.useState(false);
3620
3866
  const isControlled = controlledOpen !== void 0;
3621
3867
  const open = isControlled ? controlledOpen : internalOpen;
3622
- const setOpen = React36.useCallback(
3868
+ const setOpen = React37.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
+ React37.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] = React37.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] = React37.useState(false);
4033
+ const setDialogOpen = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.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 = React37.forwardRef(function DismissibleChip2({ label, onDismiss, variant, className, ...props }, ref) {
4617
4863
  return /* @__PURE__ */ jsxs(
4618
4864
  "button",
4619
4865
  {
@@ -4753,7 +4999,7 @@ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
4753
4999
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
4754
5000
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
4755
5001
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
4756
- var DropdownMenuSubTrigger = React36.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5002
+ var DropdownMenuSubTrigger = React37.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4757
5003
  DropdownMenuPrimitive.SubTrigger,
4758
5004
  {
4759
5005
  ref,
@@ -4774,7 +5020,7 @@ var DropdownMenuSubTrigger = React36.forwardRef(({ className, inset, children, .
4774
5020
  }
4775
5021
  ));
4776
5022
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
4777
- var DropdownMenuSubContent = React36.forwardRef(({ className, ...props }, ref) => (
5023
+ var DropdownMenuSubContent = React37.forwardRef(({ className, ...props }, ref) => (
4778
5024
  // Portal the sub-content to the body. The parent Content keeps a persistent
4779
5025
  // `scale-100` transform (its open-state animation), which makes it the
4780
5026
  // containing block for `position: fixed` descendants — and its
@@ -4797,7 +5043,7 @@ var DropdownMenuSubContent = React36.forwardRef(({ className, ...props }, ref) =
4797
5043
  ) })
4798
5044
  ));
4799
5045
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
4800
- var DropdownMenuContent = React36.forwardRef(({ className, sideOffset = 6, align = "start", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
5046
+ var DropdownMenuContent = React37.forwardRef(({ className, sideOffset = 6, align = "start", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
4801
5047
  DropdownMenuPrimitive.Content,
4802
5048
  {
4803
5049
  ref,
@@ -4815,7 +5061,7 @@ var DropdownMenuContent = React36.forwardRef(({ className, sideOffset = 6, align
4815
5061
  }
4816
5062
  ) }));
4817
5063
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
4818
- var DropdownMenuItem = React36.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
5064
+ var DropdownMenuItem = React37.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
4819
5065
  DropdownMenuPrimitive.Item,
4820
5066
  {
4821
5067
  ref,
@@ -4833,7 +5079,7 @@ var DropdownMenuItem = React36.forwardRef(({ className, destructive, inset, ...p
4833
5079
  }
4834
5080
  ));
4835
5081
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
4836
- var DropdownMenuCheckboxItem = React36.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
5082
+ var DropdownMenuCheckboxItem = React37.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
4837
5083
  DropdownMenuPrimitive.CheckboxItem,
4838
5084
  {
4839
5085
  ref,
@@ -4853,7 +5099,7 @@ var DropdownMenuCheckboxItem = React36.forwardRef(({ className, children, checke
4853
5099
  }
4854
5100
  ));
4855
5101
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
4856
- var DropdownMenuRadioItem = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5102
+ var DropdownMenuRadioItem = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4857
5103
  DropdownMenuPrimitive.RadioItem,
4858
5104
  {
4859
5105
  ref,
@@ -4872,7 +5118,7 @@ var DropdownMenuRadioItem = React36.forwardRef(({ className, children, ...props
4872
5118
  }
4873
5119
  ));
4874
5120
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
4875
- var DropdownMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
5121
+ var DropdownMenuLabel = React37.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
4876
5122
  DropdownMenuPrimitive.Label,
4877
5123
  {
4878
5124
  ref,
@@ -4885,7 +5131,7 @@ var DropdownMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref)
4885
5131
  }
4886
5132
  ));
4887
5133
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
4888
- var DropdownMenuSeparator = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5134
+ var DropdownMenuSeparator = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4889
5135
  DropdownMenuPrimitive.Separator,
4890
5136
  {
4891
5137
  ref,
@@ -5138,7 +5384,7 @@ FormSection.displayName = "FormSection";
5138
5384
  var HoverCard = HoverCardPrimitive.Root;
5139
5385
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
5140
5386
  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(
5387
+ var HoverCardContent = React37.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { children: /* @__PURE__ */ jsx(
5142
5388
  HoverCardPrimitive.Content,
5143
5389
  {
5144
5390
  ref,
@@ -5157,6 +5403,40 @@ var HoverCardContent = React36.forwardRef(({ className, align = "center", side =
5157
5403
  }
5158
5404
  ) }));
5159
5405
  HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
5406
+ var iconTileVariants = cva(
5407
+ cn("relative grid shrink-0 place-items-center", "[&_svg]:shrink-0"),
5408
+ {
5409
+ variants: {
5410
+ tone: {
5411
+ pro: "bg-pro-bg text-pro-fg",
5412
+ neutral: "bg-bg-2 text-fg-3",
5413
+ info: "bg-accent-tint text-accent-2",
5414
+ success: "bg-success-bg text-success-fg",
5415
+ warning: "bg-warning-bg text-warning-fg",
5416
+ danger: "bg-danger-bg text-danger-fg",
5417
+ audit: "bg-[color-mix(in_srgb,var(--color-brand-audit)_12%,transparent)] text-brand-audit",
5418
+ books: "bg-[color-mix(in_srgb,var(--color-brand-books)_12%,transparent)] text-brand-books",
5419
+ tax: "bg-[color-mix(in_srgb,var(--color-brand-tax)_12%,transparent)] text-brand-tax"
5420
+ },
5421
+ size: {
5422
+ sm: "size-[30px] rounded-[8px] [&_svg]:size-4",
5423
+ md: "size-[38px] rounded-[10px] [&_svg]:size-[18px]",
5424
+ lg: "size-[42px] rounded-[12px] [&_svg]:size-5"
5425
+ }
5426
+ },
5427
+ defaultVariants: {
5428
+ tone: "pro",
5429
+ size: "md"
5430
+ }
5431
+ }
5432
+ );
5433
+ var IconTile = forwardRef(function IconTile2({ icon, tone, size, badge, className, ...props }, ref) {
5434
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn(iconTileVariants({ tone, size }), className), ...props, children: [
5435
+ icon,
5436
+ badge != null && /* @__PURE__ */ jsx("span", { className: "absolute -top-1.5 -right-1.5 z-10 flex", children: badge })
5437
+ ] });
5438
+ });
5439
+ IconTile.displayName = "IconTile";
5160
5440
  var inputVariants = cva(
5161
5441
  [
5162
5442
  "flex w-full rounded-input border bg-surface font-body text-fg",
@@ -5276,8 +5556,8 @@ function KeyboardShortcutsDialog({
5276
5556
  sections,
5277
5557
  hotkey = "?"
5278
5558
  } = {}) {
5279
- const [open, setOpen] = React36.useState(false);
5280
- React36.useEffect(() => {
5559
+ const [open, setOpen] = React37.useState(false);
5560
+ React37.useEffect(() => {
5281
5561
  if (hotkey === null) return;
5282
5562
  function handleKeyDown(e) {
5283
5563
  const target = e.target;
@@ -5315,7 +5595,7 @@ function KeyboardShortcutsDialog({
5315
5595
  className: "flex items-center justify-between gap-3 py-1",
5316
5596
  children: [
5317
5597
  /* @__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: [
5598
+ /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: shortcut.keys.map((key, i) => /* @__PURE__ */ jsxs(React37.Fragment, { children: [
5319
5599
  i > 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-4 mx-0.5 text-[11px]", children: "then" }),
5320
5600
  /* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: key })
5321
5601
  ] }, i)) })
@@ -5334,7 +5614,7 @@ function KeyboardShortcutsDialog({
5334
5614
  var labelVariants = cva(
5335
5615
  "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
5616
  );
5337
- var Label4 = React36.forwardRef(
5617
+ var Label4 = React37.forwardRef(
5338
5618
  function Label5({ children, required, className, ...props }, ref) {
5339
5619
  return /* @__PURE__ */ jsxs(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
5340
5620
  children,
@@ -5500,6 +5780,80 @@ function Logo({
5500
5780
  }
5501
5781
  );
5502
5782
  }
5783
+ var MasterDetailLayout = forwardRef(
5784
+ function MasterDetailLayout2({
5785
+ list,
5786
+ detail,
5787
+ detailOpen = false,
5788
+ onBack,
5789
+ backLabel = "Back",
5790
+ listWidth = 340,
5791
+ className,
5792
+ style,
5793
+ ...props
5794
+ }, ref) {
5795
+ const resolvedWidth = typeof listWidth === "number" ? `${listWidth}px` : listWidth;
5796
+ return /* @__PURE__ */ jsxs(
5797
+ "div",
5798
+ {
5799
+ ref,
5800
+ "data-detail-open": detailOpen ? "true" : "false",
5801
+ className: cn(
5802
+ "bg-surface relative flex h-full min-h-0 w-full overflow-hidden",
5803
+ className
5804
+ ),
5805
+ style: { "--master-list-width": resolvedWidth, ...style },
5806
+ ...props,
5807
+ children: [
5808
+ /* @__PURE__ */ jsx(
5809
+ "div",
5810
+ {
5811
+ className: cn(
5812
+ "bg-surface flex min-h-0 w-full flex-col overflow-auto",
5813
+ "md:w-[var(--master-list-width)] md:shrink-0 md:border-rule md:border-r"
5814
+ ),
5815
+ children: list
5816
+ }
5817
+ ),
5818
+ /* @__PURE__ */ jsxs(
5819
+ "div",
5820
+ {
5821
+ className: cn(
5822
+ "bg-surface-2 flex min-h-0 flex-col overflow-auto",
5823
+ // mobile: overlay the list and slide in from the right
5824
+ "max-md:absolute max-md:inset-0 max-md:z-[var(--z-modal)]",
5825
+ "max-md:transition-transform max-md:duration-[var(--duration-normal)] max-md:ease-[var(--ease-out-quart)]",
5826
+ "motion-reduce:transition-none",
5827
+ detailOpen ? "max-md:translate-x-0" : "max-md:pointer-events-none max-md:translate-x-full",
5828
+ // desktop: reset to a static, independently-scrolling flex column
5829
+ "md:static md:z-auto md:flex-1 md:translate-x-0 md:transition-none md:pointer-events-auto"
5830
+ ),
5831
+ children: [
5832
+ 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(
5833
+ "button",
5834
+ {
5835
+ type: "button",
5836
+ onClick: onBack,
5837
+ "aria-label": backLabel,
5838
+ className: cn(
5839
+ "rounded-icon text-fg-3 inline-flex size-9 items-center justify-center",
5840
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
5841
+ "hover:bg-surface-2 hover:text-fg",
5842
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
5843
+ ),
5844
+ children: /* @__PURE__ */ jsx(ArrowLeftIcon, { className: "size-4", "aria-hidden": "true" })
5845
+ }
5846
+ ) }),
5847
+ detail
5848
+ ]
5849
+ }
5850
+ )
5851
+ ]
5852
+ }
5853
+ );
5854
+ }
5855
+ );
5856
+ MasterDetailLayout.displayName = "MasterDetailLayout";
5503
5857
  var TRIGGER_SIZE = {
5504
5858
  sm: "h-8 gap-1.5 px-2.5 text-[13px]",
5505
5859
  md: "h-9 gap-2 px-3 text-sm",
@@ -5665,7 +6019,7 @@ function MultiSelectField({
5665
6019
  size = "md",
5666
6020
  id
5667
6021
  }) {
5668
- const selected = React36.useMemo(
6022
+ const selected = React37.useMemo(
5669
6023
  () => new Set(value ? value.split(",").filter(Boolean) : []),
5670
6024
  [value]
5671
6025
  );
@@ -5678,7 +6032,7 @@ function MultiSelectField({
5678
6032
  }
5679
6033
  onChange(Array.from(next).join(","));
5680
6034
  };
5681
- const generatedId = React36.useId();
6035
+ const generatedId = React37.useId();
5682
6036
  const groupId = id ?? generatedId;
5683
6037
  return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), children: [
5684
6038
  /* @__PURE__ */ jsx(
@@ -6507,12 +6861,12 @@ var ProgressRing = forwardRef(function ProgressRing2({ value, max = 100, size =
6507
6861
  );
6508
6862
  });
6509
6863
  ProgressRing.displayName = "ProgressRing";
6510
- var RadioGroup3 = React36.forwardRef(function RadioGroup4({ className, ...props }, ref) {
6864
+ var RadioGroup3 = React37.forwardRef(function RadioGroup4({ className, ...props }, ref) {
6511
6865
  return /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, { ref, className: cn("grid gap-2", className), ...props });
6512
6866
  });
6513
6867
  RadioGroup3.displayName = RadioGroupPrimitive.Root.displayName;
6514
- var RadioGroupItem = React36.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
6515
- const generatedId = React36.useId();
6868
+ var RadioGroupItem = React37.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
6869
+ const generatedId = React37.useId();
6516
6870
  const id = providedId ?? generatedId;
6517
6871
  const root = /* @__PURE__ */ jsx(
6518
6872
  RadioGroupPrimitive.Item,
@@ -6597,85 +6951,295 @@ var RankedBars = forwardRef(function RankedBars2({ items, className, ...props },
6597
6951
  }) });
6598
6952
  });
6599
6953
  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
- }
6615
- ),
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",
6641
- "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
6642
- "motion-reduce:transition-none",
6643
- "hover:bg-fg-4"
6644
- )
6645
- }
6646
- )
6647
- }
6648
- );
6649
- });
6650
- ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
6651
- function useDebounce(value, delay = 300) {
6652
- const [debouncedValue, setDebouncedValue] = useState(value);
6653
- useEffect(() => {
6654
- const timer = setTimeout(() => setDebouncedValue(value), delay);
6655
- return () => clearTimeout(timer);
6656
- }, [value, delay]);
6657
- return debouncedValue;
6658
- }
6659
- var searchInputVariants = cva(
6660
- [
6661
- "flex w-full rounded-input border border-rule-strong bg-surface font-body text-fg",
6662
- "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
6663
- "motion-reduce:transition-none",
6664
- "placeholder:text-fg-4",
6665
- "focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
6666
- "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
6667
- "disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
6668
- // Hide the native search-cancel button — we render our own clear button.
6669
- "[&::-webkit-search-cancel-button]:appearance-none",
6670
- "[&::-webkit-search-decoration]:appearance-none"
6671
- ],
6954
+ var SheetSideContext = React37.createContext({});
6955
+ var Sheet = ({ side, children, ...props }) => /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...props, children: /* @__PURE__ */ jsx(SheetSideContext, { value: { side }, children }) });
6956
+ Sheet.displayName = "Sheet";
6957
+ var SheetTrigger = DialogPrimitive.Trigger;
6958
+ var SheetClose = DialogPrimitive.Close;
6959
+ var SheetPortal = DialogPrimitive.Portal;
6960
+ var SheetOverlay = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6961
+ DialogPrimitive.Overlay,
6672
6962
  {
6673
- variants: {
6674
- inputSize: {
6675
- // `sm` is the dense control tier: h-8 + 13px, so a search box lines up
6676
- // pixel-for-pixel (height AND text) with Button / MultiFilterPill /
6677
- // FilterChip at their `sm` tier in a toolbar row.
6678
- sm: "h-8 pl-8 pr-8 text-[13px]",
6963
+ ref,
6964
+ className: cn(
6965
+ "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
6966
+ "transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
6967
+ "data-[state=closed]:opacity-0 data-[state=open]:opacity-100",
6968
+ "motion-reduce:transition-none",
6969
+ className
6970
+ ),
6971
+ ...props
6972
+ }
6973
+ ));
6974
+ SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
6975
+ var sheetVariants = cva(
6976
+ cn(
6977
+ "fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop",
6978
+ "transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
6979
+ "motion-reduce:transition-none"
6980
+ ),
6981
+ {
6982
+ variants: {
6983
+ side: {
6984
+ top: cn(
6985
+ "inset-x-0 top-0 border-b border-rule",
6986
+ "data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0"
6987
+ ),
6988
+ bottom: cn(
6989
+ "inset-x-0 bottom-0 border-t border-rule max-h-[85vh]",
6990
+ "data-[state=closed]:translate-y-full data-[state=open]:translate-y-0"
6991
+ ),
6992
+ left: cn(
6993
+ "inset-y-0 left-0 h-full w-3/4 max-w-sm border-r border-rule",
6994
+ "data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0"
6995
+ ),
6996
+ right: cn(
6997
+ "inset-y-0 right-0 h-full w-3/4 max-w-sm border-l border-rule",
6998
+ "data-[state=closed]:translate-x-full data-[state=open]:translate-x-0"
6999
+ )
7000
+ }
7001
+ },
7002
+ defaultVariants: { side: "right" }
7003
+ }
7004
+ );
7005
+ var sheetWidthClasses = {
7006
+ sm: "w-[95vw] max-w-[95vw] sm:w-[420px]",
7007
+ md: "w-[95vw] max-w-[95vw] sm:w-[520px]",
7008
+ lg: "w-[95vw] max-w-[95vw] sm:w-[640px]",
7009
+ xl: "w-[95vw] max-w-[95vw] sm:w-[760px]",
7010
+ full: "w-full max-w-none"
7011
+ };
7012
+ var SheetContent = React37.forwardRef(
7013
+ ({ side, width = "default", customWidth, className, children, showCloseButton = true, style, ...props }, ref) => {
7014
+ const ctx = React37.use(SheetSideContext);
7015
+ const resolvedSide = side ?? ctx.side ?? "right";
7016
+ const supportsWidth = resolvedSide === "left" || resolvedSide === "right";
7017
+ const widthClass = supportsWidth && width !== "default" ? sheetWidthClasses[width] : null;
7018
+ const widthStyle = supportsWidth && customWidth ? { width: customWidth, maxWidth: "95vw", ...style } : style;
7019
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
7020
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
7021
+ /* @__PURE__ */ jsxs(
7022
+ DialogPrimitive.Content,
7023
+ {
7024
+ ref,
7025
+ className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
7026
+ style: widthStyle,
7027
+ ...props,
7028
+ children: [
7029
+ children,
7030
+ showCloseButton && /* @__PURE__ */ jsx(
7031
+ DialogPrimitive.Close,
7032
+ {
7033
+ className: cn(
7034
+ "absolute top-4 right-4 inline-flex size-7 items-center justify-center",
7035
+ "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
7036
+ "hover:bg-overlay-hover hover:text-fg",
7037
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
7038
+ "disabled:pointer-events-none"
7039
+ ),
7040
+ "aria-label": "Close",
7041
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
7042
+ }
7043
+ )
7044
+ ]
7045
+ }
7046
+ )
7047
+ ] });
7048
+ }
7049
+ );
7050
+ SheetContent.displayName = DialogPrimitive.Content.displayName;
7051
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className), ...props });
7052
+ SheetHeader.displayName = "SheetHeader";
7053
+ var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
7054
+ "div",
7055
+ {
7056
+ className: cn(
7057
+ "border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end",
7058
+ className
7059
+ ),
7060
+ ...props
7061
+ }
7062
+ );
7063
+ SheetFooter.displayName = "SheetFooter";
7064
+ var SheetTitle = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7065
+ DialogPrimitive.Title,
7066
+ {
7067
+ ref,
7068
+ className: cn(
7069
+ "font-display text-fg text-base leading-tight font-medium tracking-tight",
7070
+ className
7071
+ ),
7072
+ ...props
7073
+ }
7074
+ ));
7075
+ SheetTitle.displayName = DialogPrimitive.Title.displayName;
7076
+ var SheetDescription = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-fg-3 text-sm", className), ...props }));
7077
+ SheetDescription.displayName = DialogPrimitive.Description.displayName;
7078
+ var MOBILE_QUERY = "(max-width: 639.98px)";
7079
+ function useIsMobile() {
7080
+ const [state, setState] = React37.useState({ isMobile: false, mounted: false });
7081
+ React37.useEffect(() => {
7082
+ const mql = window.matchMedia(MOBILE_QUERY);
7083
+ const update = () => setState({ isMobile: mql.matches, mounted: true });
7084
+ update();
7085
+ mql.addEventListener("change", update);
7086
+ return () => mql.removeEventListener("change", update);
7087
+ }, []);
7088
+ return state;
7089
+ }
7090
+ function ResponsiveDialog({
7091
+ open,
7092
+ onOpenChange,
7093
+ title,
7094
+ description,
7095
+ children,
7096
+ footer,
7097
+ className,
7098
+ side = "bottom",
7099
+ size = "md"
7100
+ }) {
7101
+ const { isMobile, mounted } = useIsMobile();
7102
+ const close = React37.useCallback(() => onOpenChange(false), [onOpenChange]);
7103
+ const resolvedFooter = typeof footer === "function" ? footer(close) : footer;
7104
+ const hasHeader = Boolean(title || description);
7105
+ if (mounted && isMobile) {
7106
+ return /* @__PURE__ */ jsx(Sheet, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
7107
+ SheetContent,
7108
+ {
7109
+ side,
7110
+ className: cn(side === "bottom" && "rounded-t-card", className),
7111
+ children: [
7112
+ side === "bottom" && /* @__PURE__ */ jsx(
7113
+ "span",
7114
+ {
7115
+ "aria-hidden": "true",
7116
+ className: "mx-auto mt-2.5 h-1 w-9 shrink-0 rounded-full bg-[color:var(--color-rule-strong)]"
7117
+ }
7118
+ ),
7119
+ hasHeader ? /* @__PURE__ */ jsxs(SheetHeader, { children: [
7120
+ /* @__PURE__ */ jsx(SheetTitle, { className: cn(!title && "sr-only"), children: title ?? "Dialog" }),
7121
+ description && /* @__PURE__ */ jsx(SheetDescription, { children: description })
7122
+ ] }) : /* @__PURE__ */ jsx(SheetTitle, { className: "sr-only", children: "Dialog" }),
7123
+ /* @__PURE__ */ jsx(
7124
+ "div",
7125
+ {
7126
+ className: cn(
7127
+ "scrollbar-thin flex-1 overflow-y-auto px-6",
7128
+ !resolvedFooter && "pb-6"
7129
+ ),
7130
+ children
7131
+ }
7132
+ ),
7133
+ resolvedFooter && /* @__PURE__ */ jsx(SheetFooter, { children: resolvedFooter })
7134
+ ]
7135
+ }
7136
+ ) });
7137
+ }
7138
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size, className, children: [
7139
+ hasHeader ? /* @__PURE__ */ jsxs(DialogHeader, { children: [
7140
+ /* @__PURE__ */ jsx(DialogTitle, { className: cn(!title && "sr-only"), children: title ?? "Dialog" }),
7141
+ description && /* @__PURE__ */ jsx(DialogDescription, { children: description })
7142
+ ] }) : /* @__PURE__ */ jsx(DialogTitle, { className: "sr-only", children: "Dialog" }),
7143
+ children,
7144
+ resolvedFooter && /* @__PURE__ */ jsx(DialogFooter, { children: resolvedFooter })
7145
+ ] }) });
7146
+ }
7147
+ ResponsiveDialog.displayName = "ResponsiveDialog";
7148
+ var RouteTransition = forwardRef(
7149
+ function RouteTransition2({ routeKey, className, children, ...props }, ref) {
7150
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsx(
7151
+ "div",
7152
+ {
7153
+ className: cn(
7154
+ "animate-in fade-in-0 slide-in-from-bottom-2",
7155
+ "duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]"
7156
+ ),
7157
+ children
7158
+ },
7159
+ routeKey
7160
+ ) });
7161
+ }
7162
+ );
7163
+ RouteTransition.displayName = "RouteTransition";
7164
+ var ScrollArea = React37.forwardRef(function ScrollArea2({ className, children, ...props }, ref) {
7165
+ return /* @__PURE__ */ jsxs(
7166
+ ScrollAreaPrimitive.Root,
7167
+ {
7168
+ ref,
7169
+ className: cn("relative overflow-hidden", className),
7170
+ ...props,
7171
+ children: [
7172
+ /* @__PURE__ */ jsx(
7173
+ ScrollAreaPrimitive.Viewport,
7174
+ {
7175
+ tabIndex: 0,
7176
+ className: "h-full w-full rounded-[inherit] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
7177
+ children
7178
+ }
7179
+ ),
7180
+ /* @__PURE__ */ jsx(ScrollBar, {}),
7181
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
7182
+ ]
7183
+ }
7184
+ );
7185
+ });
7186
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
7187
+ var ScrollBar = React37.forwardRef(function ScrollBar2({ className, orientation = "vertical", ...props }, ref) {
7188
+ return /* @__PURE__ */ jsx(
7189
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
7190
+ {
7191
+ ref,
7192
+ orientation,
7193
+ className: cn(
7194
+ "flex touch-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] select-none motion-reduce:transition-none",
7195
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
7196
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
7197
+ className
7198
+ ),
7199
+ ...props,
7200
+ children: /* @__PURE__ */ jsx(
7201
+ ScrollAreaPrimitive.ScrollAreaThumb,
7202
+ {
7203
+ className: cn(
7204
+ "bg-rule-strong relative flex-1 rounded-full",
7205
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
7206
+ "motion-reduce:transition-none",
7207
+ "hover:bg-fg-4"
7208
+ )
7209
+ }
7210
+ )
7211
+ }
7212
+ );
7213
+ });
7214
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
7215
+ function useDebounce(value, delay = 300) {
7216
+ const [debouncedValue, setDebouncedValue] = useState(value);
7217
+ useEffect(() => {
7218
+ const timer = setTimeout(() => setDebouncedValue(value), delay);
7219
+ return () => clearTimeout(timer);
7220
+ }, [value, delay]);
7221
+ return debouncedValue;
7222
+ }
7223
+ var searchInputVariants = cva(
7224
+ [
7225
+ "flex w-full rounded-input border border-rule-strong bg-surface font-body text-fg",
7226
+ "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
7227
+ "motion-reduce:transition-none",
7228
+ "placeholder:text-fg-4",
7229
+ "focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
7230
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
7231
+ "disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
7232
+ // Hide the native search-cancel button — we render our own clear button.
7233
+ "[&::-webkit-search-cancel-button]:appearance-none",
7234
+ "[&::-webkit-search-decoration]:appearance-none"
7235
+ ],
7236
+ {
7237
+ variants: {
7238
+ inputSize: {
7239
+ // `sm` is the dense control tier: h-8 + 13px, so a search box lines up
7240
+ // pixel-for-pixel (height AND text) with Button / MultiFilterPill /
7241
+ // FilterChip at their `sm` tier in a toolbar row.
7242
+ sm: "h-8 pl-8 pr-8 text-[13px]",
6679
7243
  md: "h-9 pl-9 pr-9 text-[13px]",
6680
7244
  lg: "h-11 pl-10 pr-10 text-sm"
6681
7245
  }
@@ -6685,7 +7249,7 @@ var searchInputVariants = cva(
6685
7249
  }
6686
7250
  }
6687
7251
  );
6688
- var SearchInput = React36.forwardRef(
7252
+ var SearchInput = React37.forwardRef(
6689
7253
  function SearchInput2({
6690
7254
  value,
6691
7255
  onValueChange,
@@ -6698,8 +7262,8 @@ var SearchInput = React36.forwardRef(
6698
7262
  ...props
6699
7263
  }, ref) {
6700
7264
  const debouncedValue = useDebounce(value, debounceMs);
6701
- const isFirstRender = React36.useRef(true);
6702
- React36.useEffect(() => {
7265
+ const isFirstRender = React37.useRef(true);
7266
+ React37.useEffect(() => {
6703
7267
  if (isFirstRender.current) {
6704
7268
  isFirstRender.current = false;
6705
7269
  return;
@@ -6777,15 +7341,15 @@ function SearchSelect({
6777
7341
  descriptionVariant = "inline"
6778
7342
  }) {
6779
7343
  const isSingleMode = value !== void 0 || onValueChange !== void 0;
6780
- const singleSelectedOption = React36.useMemo(
7344
+ const singleSelectedOption = React37.useMemo(
6781
7345
  () => isSingleMode && value ? options.find((o) => o.id === value) ?? null : null,
6782
7346
  [isSingleMode, value, options]
6783
7347
  );
6784
- const selected = React36.useMemo(
7348
+ const selected = React37.useMemo(
6785
7349
  () => isSingleMode ? singleSelectedOption ? [singleSelectedOption] : [] : selectedProp ?? [],
6786
7350
  [isSingleMode, singleSelectedOption, selectedProp]
6787
7351
  );
6788
- const onSelect = React36.useCallback(
7352
+ const onSelect = React37.useCallback(
6789
7353
  (option) => {
6790
7354
  if (isSingleMode) {
6791
7355
  onValueChange?.(option.id);
@@ -6795,7 +7359,7 @@ function SearchSelect({
6795
7359
  },
6796
7360
  [isSingleMode, onValueChange, onSelectProp]
6797
7361
  );
6798
- const onRemove = React36.useCallback(
7362
+ const onRemove = React37.useCallback(
6799
7363
  (option) => {
6800
7364
  if (isSingleMode) {
6801
7365
  onValueChange?.("");
@@ -6806,15 +7370,15 @@ function SearchSelect({
6806
7370
  [isSingleMode, onValueChange, onRemoveProp]
6807
7371
  );
6808
7372
  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(
7373
+ const [search, setSearch] = React37.useState("");
7374
+ const [open, setOpen] = React37.useState(false);
7375
+ const [activeChip, setActiveChip] = React37.useState(null);
7376
+ const selectedIds = React37.useMemo(() => new Set(selected.map((s) => s.id)), [selected]);
7377
+ const filtered = React37.useMemo(
6814
7378
  () => options.filter((opt) => !selectedIds.has(opt.id)),
6815
7379
  [options, selectedIds]
6816
7380
  );
6817
- const groups = React36.useMemo(() => {
7381
+ const groups = React37.useMemo(() => {
6818
7382
  const order = [];
6819
7383
  const byGroup = /* @__PURE__ */ new Map();
6820
7384
  for (const opt of filtered) {
@@ -6826,25 +7390,25 @@ function SearchSelect({
6826
7390
  }
6827
7391
  return order.map((g) => [g, byGroup.get(g)]);
6828
7392
  }, [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(() => {
7393
+ const hasGroups = React37.useMemo(() => groups.some(([g]) => g != null), [groups]);
7394
+ const pinnedSet = React37.useMemo(() => new Set(pinnedGroups ?? []), [pinnedGroups]);
7395
+ const chips = React37.useMemo(() => {
6832
7396
  if (!groupFilter || !hasGroups) return [];
6833
7397
  return groups.map(([g]) => g).filter((g) => g != null && !pinnedSet.has(g));
6834
7398
  }, [groupFilter, hasGroups, groups, pinnedSet]);
6835
- const visibleGroups = React36.useMemo(() => {
7399
+ const visibleGroups = React37.useMemo(() => {
6836
7400
  if (chips.length > 0 && activeChip) {
6837
7401
  return groups.filter(([g]) => g === activeChip);
6838
7402
  }
6839
7403
  return groups;
6840
7404
  }, [groups, chips.length, activeChip]);
6841
7405
  const trimmedSearch = search.trim();
6842
- const hasExactMatch = React36.useMemo(
7406
+ const hasExactMatch = React37.useMemo(
6843
7407
  () => options.some((opt) => opt.label.toLowerCase() === trimmedSearch.toLowerCase()),
6844
7408
  [options, trimmedSearch]
6845
7409
  );
6846
7410
  const showCreate = !!onCreate && trimmedSearch.length > 0 && !hasExactMatch;
6847
- const handleSelect = React36.useCallback(
7411
+ const handleSelect = React37.useCallback(
6848
7412
  (option) => {
6849
7413
  onSelect(option);
6850
7414
  setSearch("");
@@ -6852,16 +7416,16 @@ function SearchSelect({
6852
7416
  },
6853
7417
  [onSelect, closeOnSelect]
6854
7418
  );
6855
- const handleCreate = React36.useCallback(() => {
7419
+ const handleCreate = React37.useCallback(() => {
6856
7420
  if (onCreate && trimmedSearch) {
6857
7421
  onCreate(trimmedSearch);
6858
7422
  setSearch("");
6859
7423
  setOpen(false);
6860
7424
  }
6861
7425
  }, [onCreate, trimmedSearch]);
6862
- const inputRef = React36.useRef(null);
6863
- const listboxId = React36.useId();
6864
- const setInputRef = React36.useCallback((node) => {
7426
+ const inputRef = React37.useRef(null);
7427
+ const listboxId = React37.useId();
7428
+ const setInputRef = React37.useCallback((node) => {
6865
7429
  inputRef.current = node;
6866
7430
  node?.removeAttribute("aria-labelledby");
6867
7431
  node?.setAttribute("aria-controls", listboxId);
@@ -6870,12 +7434,12 @@ function SearchSelect({
6870
7434
  const singleValue = closeOnSelect ? selected[0] ?? null : null;
6871
7435
  const showValue = singleValue !== null && !open;
6872
7436
  const popoverOpen = open && !disabled;
6873
- React36.useEffect(() => {
7437
+ React37.useEffect(() => {
6874
7438
  inputRef.current?.removeAttribute("aria-labelledby");
6875
7439
  inputRef.current?.setAttribute("aria-controls", listboxId);
6876
7440
  inputRef.current?.removeAttribute("aria-activedescendant");
6877
7441
  });
6878
- React36.useEffect(() => {
7442
+ React37.useEffect(() => {
6879
7443
  if (open && closeOnSelect) {
6880
7444
  const raf = requestAnimationFrame(() => inputRef.current?.focus());
6881
7445
  return () => cancelAnimationFrame(raf);
@@ -7320,7 +7884,7 @@ var SegmentedProgress = forwardRef(
7320
7884
  }
7321
7885
  );
7322
7886
  SegmentedProgress.displayName = "SegmentedProgress";
7323
- var Separator4 = React36.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
7887
+ var Separator4 = React37.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
7324
7888
  return /* @__PURE__ */ jsx(
7325
7889
  SeparatorPrimitive.Root,
7326
7890
  {
@@ -7337,130 +7901,6 @@ var Separator4 = React36.forwardRef(function Separator5({ className, orientation
7337
7901
  );
7338
7902
  });
7339
7903
  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
7904
  var sideDrawerVariants = cva(
7465
7905
  cn(
7466
7906
  "fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop",
@@ -7576,7 +8016,7 @@ function SideDrawerFooter({ children, className }) {
7576
8016
  SideDrawer.Header = SideDrawerHeader;
7577
8017
  SideDrawer.Body = SideDrawerBody;
7578
8018
  SideDrawer.Footer = SideDrawerFooter;
7579
- var Slider = React36.forwardRef(
8019
+ var Slider = React37.forwardRef(
7580
8020
  function Slider2({
7581
8021
  className,
7582
8022
  label,
@@ -7588,7 +8028,7 @@ var Slider = React36.forwardRef(
7588
8028
  defaultValue,
7589
8029
  ...props
7590
8030
  }, ref) {
7591
- const generatedId = React36.useId();
8031
+ const generatedId = React37.useId();
7592
8032
  const id = providedId ?? generatedId;
7593
8033
  const displayValue = (() => {
7594
8034
  const v = value ?? defaultValue;
@@ -7721,6 +8161,52 @@ var Stat = forwardRef(function Stat2({ value, label, className, ...props }, ref)
7721
8161
  ] });
7722
8162
  });
7723
8163
  Stat.displayName = "Stat";
8164
+ var statusDotVariants = cva("relative inline-flex shrink-0 rounded-full bg-current", {
8165
+ variants: {
8166
+ tone: {
8167
+ danger: "text-danger-fg",
8168
+ warning: "text-warning-fg",
8169
+ info: "text-accent",
8170
+ success: "text-success-fg",
8171
+ pro: "text-pro-fg",
8172
+ neutral: "text-fg-4"
8173
+ },
8174
+ size: {
8175
+ sm: "size-[7px]",
8176
+ md: "size-[9px]"
8177
+ },
8178
+ ring: {
8179
+ true: "shadow-[0_0_0_2px_var(--color-surface)]",
8180
+ false: ""
8181
+ }
8182
+ },
8183
+ defaultVariants: {
8184
+ tone: "danger",
8185
+ size: "sm",
8186
+ ring: false
8187
+ }
8188
+ });
8189
+ var StatusDot = forwardRef(function StatusDot2({ tone, size, ring, pulse, className, ...props }, ref) {
8190
+ const ariaLabel = props["aria-label"];
8191
+ return /* @__PURE__ */ jsx(
8192
+ "span",
8193
+ {
8194
+ ref,
8195
+ role: ariaLabel ? "img" : void 0,
8196
+ "aria-hidden": ariaLabel ? void 0 : true,
8197
+ className: cn(statusDotVariants({ tone, size, ring }), className),
8198
+ ...props,
8199
+ children: pulse && /* @__PURE__ */ jsx(
8200
+ "span",
8201
+ {
8202
+ "aria-hidden": "true",
8203
+ className: "absolute inset-0 inline-flex animate-ping rounded-full bg-current opacity-75 motion-reduce:hidden"
8204
+ }
8205
+ )
8206
+ }
8207
+ );
8208
+ });
8209
+ StatusDot.displayName = "StatusDot";
7724
8210
  var CENTER = 8;
7725
8211
  var RING_RADIUS = 6;
7726
8212
  var STROKE_WIDTH = 2;
@@ -7958,6 +8444,29 @@ var Stepper = forwardRef(function Stepper2({ steps, currentStep, orientation = "
7958
8444
  );
7959
8445
  });
7960
8446
  Stepper.displayName = "Stepper";
8447
+ var StickyActionBar = forwardRef(
8448
+ function StickyActionBar2({ children, hint, offsetForMobileNav, className, ...props }, ref) {
8449
+ return /* @__PURE__ */ jsxs(
8450
+ "div",
8451
+ {
8452
+ ref,
8453
+ className: cn(
8454
+ "sticky inset-x-0 z-20 flex flex-wrap items-center gap-3",
8455
+ "border-t border-rule bg-surface/80 px-4 py-3 backdrop-blur-md sm:px-6",
8456
+ "supports-[backdrop-filter]:bg-surface/80",
8457
+ offsetForMobileNav ? "bottom-[calc(3.5rem_+_env(safe-area-inset-bottom))] sm:bottom-0" : "bottom-0",
8458
+ className
8459
+ ),
8460
+ ...props,
8461
+ children: [
8462
+ hint != null && /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-2 text-sm font-medium text-fg-3", children: hint }),
8463
+ /* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center gap-2", children })
8464
+ ]
8465
+ }
8466
+ );
8467
+ }
8468
+ );
8469
+ StickyActionBar.displayName = "StickyActionBar";
7961
8470
  var SubmitButton = forwardRef(function SubmitButton2({ pendingText, children, className, ...props }, ref) {
7962
8471
  const { pending } = useFormStatus();
7963
8472
  return /* @__PURE__ */ jsx(
@@ -7974,6 +8483,87 @@ var SubmitButton = forwardRef(function SubmitButton2({ pendingText, children, cl
7974
8483
  );
7975
8484
  });
7976
8485
  SubmitButton.displayName = "SubmitButton";
8486
+ var suiteProgressFillVariants = cva("", {
8487
+ variants: {
8488
+ tone: {
8489
+ pro: "bg-brand-pro",
8490
+ audit: "bg-brand-audit",
8491
+ books: "bg-brand-books",
8492
+ tax: "bg-brand-tax"
8493
+ }
8494
+ },
8495
+ defaultVariants: { tone: "pro" }
8496
+ });
8497
+ var SIZE_STYLES = {
8498
+ sm: { row: "gap-2", track: "gap-0.5", segment: "h-1", text: "text-xs" },
8499
+ md: { row: "gap-3", track: "gap-1", segment: "h-[5px]", text: "text-sm" }
8500
+ };
8501
+ var SuiteProgress = forwardRef(
8502
+ function SuiteProgress2({
8503
+ value,
8504
+ total,
8505
+ showPercent = true,
8506
+ percent,
8507
+ tone = "pro",
8508
+ size = "md",
8509
+ label,
8510
+ segmentClassName,
8511
+ className,
8512
+ ...props
8513
+ }, ref) {
8514
+ const styles = SIZE_STYLES[size];
8515
+ const safeTotal = Math.max(1, Math.floor(total));
8516
+ const safeValue = Math.min(safeTotal, Math.max(0, Math.floor(value)));
8517
+ const resolvedPercent = percent != null ? Math.min(100, Math.max(0, Math.round(percent))) : Math.round(safeValue / safeTotal * 100);
8518
+ return /* @__PURE__ */ jsxs(
8519
+ "div",
8520
+ {
8521
+ ref,
8522
+ role: "progressbar",
8523
+ "aria-valuenow": resolvedPercent,
8524
+ "aria-valuemin": 0,
8525
+ "aria-valuemax": 100,
8526
+ "aria-valuetext": `${safeValue} of ${safeTotal}`,
8527
+ "aria-label": label ?? "Progress",
8528
+ className: cn("flex items-center", styles.row, className),
8529
+ ...props,
8530
+ children: [
8531
+ label && /* @__PURE__ */ jsx("span", { className: cn("text-fg-2 flex-none font-medium", styles.text), children: label }),
8532
+ /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-1", styles.track), "aria-hidden": "true", children: Array.from({ length: safeTotal }, (_, i) => {
8533
+ const filled = i < safeValue;
8534
+ return /* @__PURE__ */ jsx(
8535
+ "div",
8536
+ {
8537
+ className: cn(
8538
+ "flex-1 rounded-full",
8539
+ styles.segment,
8540
+ "transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
8541
+ filled ? suiteProgressFillVariants({ tone }) : "bg-surface-3",
8542
+ segmentClassName
8543
+ )
8544
+ },
8545
+ i
8546
+ );
8547
+ }) }),
8548
+ showPercent && /* @__PURE__ */ jsxs(
8549
+ "span",
8550
+ {
8551
+ className: cn(
8552
+ "text-fg flex-none font-bold tracking-tight tabular-nums",
8553
+ styles.text
8554
+ ),
8555
+ children: [
8556
+ resolvedPercent,
8557
+ /* @__PURE__ */ jsx("span", { className: "text-fg-4 ml-px text-[0.72em] font-semibold", children: "%" })
8558
+ ]
8559
+ }
8560
+ )
8561
+ ]
8562
+ }
8563
+ );
8564
+ }
8565
+ );
8566
+ SuiteProgress.displayName = "SuiteProgress";
7977
8567
  var switchVariants = cva(
7978
8568
  [
7979
8569
  "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent",
@@ -8016,9 +8606,9 @@ var switchThumbVariants = cva(
8016
8606
  }
8017
8607
  }
8018
8608
  );
8019
- var Switch = React36.forwardRef(
8609
+ var Switch = React37.forwardRef(
8020
8610
  function Switch2({ label, size, className, id: providedId, ...props }, ref) {
8021
- const generatedId = React36.useId();
8611
+ const generatedId = React37.useId();
8022
8612
  const id = providedId ?? generatedId;
8023
8613
  const root = /* @__PURE__ */ jsx(
8024
8614
  SwitchPrimitive.Root,
@@ -8152,13 +8742,13 @@ var TableCaption = forwardRef(
8152
8742
  }
8153
8743
  );
8154
8744
  TableCaption.displayName = "TableCaption";
8155
- var Tabs = React36.forwardRef(
8745
+ var Tabs = React37.forwardRef(
8156
8746
  function Tabs2({ className, ...props }, ref) {
8157
8747
  return /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, className: cn(className), ...props });
8158
8748
  }
8159
8749
  );
8160
8750
  Tabs.displayName = TabsPrimitive.Root.displayName;
8161
- var TabsList = React36.forwardRef(function TabsList2({ className, ...props }, ref) {
8751
+ var TabsList = React37.forwardRef(function TabsList2({ className, ...props }, ref) {
8162
8752
  return /* @__PURE__ */ jsx(
8163
8753
  TabsPrimitive.List,
8164
8754
  {
@@ -8203,7 +8793,7 @@ var triggerVariants = cva(
8203
8793
  }
8204
8794
  }
8205
8795
  );
8206
- var TabsTrigger = React36.forwardRef(function TabsTrigger2({ className, variant, ...props }, ref) {
8796
+ var TabsTrigger = React37.forwardRef(function TabsTrigger2({ className, variant, ...props }, ref) {
8207
8797
  return /* @__PURE__ */ jsx(
8208
8798
  TabsPrimitive.Trigger,
8209
8799
  {
@@ -8214,7 +8804,7 @@ var TabsTrigger = React36.forwardRef(function TabsTrigger2({ className, variant,
8214
8804
  );
8215
8805
  });
8216
8806
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
8217
- var TabsContent = React36.forwardRef(function TabsContent2({ className, ...props }, ref) {
8807
+ var TabsContent = React37.forwardRef(function TabsContent2({ className, ...props }, ref) {
8218
8808
  return /* @__PURE__ */ jsx(
8219
8809
  TabsPrimitive.Content,
8220
8810
  {
@@ -8239,7 +8829,7 @@ function TeamMemberSelect({
8239
8829
  placeholder = "Select team member...",
8240
8830
  className
8241
8831
  }) {
8242
- const options = React36.useMemo(() => {
8832
+ const options = React37.useMemo(() => {
8243
8833
  const meBadge = /* @__PURE__ */ jsx(
8244
8834
  Badge,
8245
8835
  {
@@ -8569,10 +9159,10 @@ var itemVariants = cva(
8569
9159
  }
8570
9160
  }
8571
9161
  );
8572
- var ToggleGroupContext = React36.createContext({
9162
+ var ToggleGroupContext = React37.createContext({
8573
9163
  variant: "default"
8574
9164
  });
8575
- var ToggleGroup = React36.forwardRef(function ToggleGroup2({ className, variant, children, ...props }, ref) {
9165
+ var ToggleGroup = React37.forwardRef(function ToggleGroup2({ className, variant, children, ...props }, ref) {
8576
9166
  return /* @__PURE__ */ jsx(
8577
9167
  ToggleGroupPrimitive.Root,
8578
9168
  {
@@ -8584,8 +9174,8 @@ var ToggleGroup = React36.forwardRef(function ToggleGroup2({ className, variant,
8584
9174
  );
8585
9175
  });
8586
9176
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
8587
- var ToggleGroupItem = React36.forwardRef(function ToggleGroupItem2({ className, variant, ...props }, ref) {
8588
- const ctx = React36.useContext(ToggleGroupContext);
9177
+ var ToggleGroupItem = React37.forwardRef(function ToggleGroupItem2({ className, variant, ...props }, ref) {
9178
+ const ctx = React37.useContext(ToggleGroupContext);
8589
9179
  return /* @__PURE__ */ jsx(
8590
9180
  ToggleGroupPrimitive.Item,
8591
9181
  {
@@ -8604,7 +9194,7 @@ var Tooltip = ({ delayMs, delayDuration, children, ...props }) => {
8604
9194
  return /* @__PURE__ */ jsx(TooltipPrimitive.Provider, { delayDuration: resolvedDelay, children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { delayDuration: resolvedDelay, ...props, children }) });
8605
9195
  };
8606
9196
  Tooltip.displayName = "Tooltip";
8607
- var TooltipContent = React36.forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
9197
+ var TooltipContent = React37.forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
8608
9198
  TooltipPrimitive.Content,
8609
9199
  {
8610
9200
  ref,
@@ -9295,7 +9885,7 @@ var Content16 = forwardRef(function Content17({ padTop, padBottom, className, st
9295
9885
  );
9296
9886
  });
9297
9887
  Content16.displayName = "Content";
9298
- var SidebarContext = React36.createContext(null);
9888
+ var SidebarContext = React37.createContext(null);
9299
9889
  var NOOP_CONTEXT = {
9300
9890
  state: "expanded",
9301
9891
  setState: () => {
@@ -9308,7 +9898,7 @@ var NOOP_CONTEXT = {
9308
9898
  }
9309
9899
  };
9310
9900
  function useSidebarState() {
9311
- return React36.useContext(SidebarContext) ?? NOOP_CONTEXT;
9901
+ return React37.useContext(SidebarContext) ?? NOOP_CONTEXT;
9312
9902
  }
9313
9903
  var DEFAULT_SHORTCUT = "Mod+\\";
9314
9904
  function readStorage(key) {
@@ -9328,16 +9918,16 @@ function SidebarProvider({
9328
9918
  storageKey,
9329
9919
  shortcut = DEFAULT_SHORTCUT
9330
9920
  }) {
9331
- const [uncontrolled, setUncontrolled] = React36.useState(
9921
+ const [uncontrolled, setUncontrolled] = React37.useState(
9332
9922
  controlled ?? defaultState
9333
9923
  );
9334
- React36.useEffect(() => {
9924
+ React37.useEffect(() => {
9335
9925
  if (controlled !== void 0) return;
9336
9926
  const stored = readStorage(storageKey);
9337
9927
  if (stored && stored !== uncontrolled) setUncontrolled(stored);
9338
9928
  }, []);
9339
9929
  const state = controlled ?? uncontrolled;
9340
- const setState = React36.useCallback(
9930
+ const setState = React37.useCallback(
9341
9931
  (next) => {
9342
9932
  if (controlled === void 0) setUncontrolled(next);
9343
9933
  onStateChange?.(next);
@@ -9350,11 +9940,11 @@ function SidebarProvider({
9350
9940
  },
9351
9941
  [controlled, onStateChange, storageKey]
9352
9942
  );
9353
- const toggle = React36.useCallback(() => {
9943
+ const toggle = React37.useCallback(() => {
9354
9944
  setState(state === "expanded" ? "rail" : "expanded");
9355
9945
  }, [state, setState]);
9356
- const [peekLockCount, setPeekLockCount] = React36.useState(0);
9357
- const acquirePeekLock = React36.useCallback(() => {
9946
+ const [peekLockCount, setPeekLockCount] = React37.useState(0);
9947
+ const acquirePeekLock = React37.useCallback(() => {
9358
9948
  setPeekLockCount((n) => n + 1);
9359
9949
  let released = false;
9360
9950
  return () => {
@@ -9363,7 +9953,7 @@ function SidebarProvider({
9363
9953
  setPeekLockCount((n) => Math.max(0, n - 1));
9364
9954
  };
9365
9955
  }, []);
9366
- React36.useEffect(() => {
9956
+ React37.useEffect(() => {
9367
9957
  if (!shortcut) return;
9368
9958
  const parts = shortcut.split("+");
9369
9959
  const key = parts.pop() ?? "";
@@ -9383,7 +9973,7 @@ function SidebarProvider({
9383
9973
  window.addEventListener("keydown", onKey);
9384
9974
  return () => window.removeEventListener("keydown", onKey);
9385
9975
  }, [shortcut, toggle]);
9386
- const value = React36.useMemo(
9976
+ const value = React37.useMemo(
9387
9977
  () => ({ state, setState, toggle, collapsible: true, peekLockCount, acquirePeekLock }),
9388
9978
  [state, setState, toggle, peekLockCount, acquirePeekLock]
9389
9979
  );
@@ -9392,15 +9982,15 @@ function SidebarProvider({
9392
9982
  SidebarProvider.displayName = "SidebarProvider";
9393
9983
  var PEEK_ENTER_DELAY_MS = 100;
9394
9984
  var PEEK_LEAVE_DELAY_MS = 200;
9395
- var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = false, variant = "classic", onMouseEnter, onMouseLeave, style, ...props }, ref) {
9985
+ var Sidebar = React37.forwardRef(function Sidebar2({ className, collapsible = false, variant = "classic", onMouseEnter, onMouseLeave, style, ...props }, ref) {
9396
9986
  const isFloating = variant === "floating";
9397
- const ctx = React36.useContext(SidebarContext);
9987
+ const ctx = React37.useContext(SidebarContext);
9398
9988
  const state = collapsible && ctx ? ctx.state : "expanded";
9399
9989
  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(() => {
9990
+ const [peek, setPeek] = React37.useState(false);
9991
+ const enterTimer = React37.useRef(null);
9992
+ const leaveTimer = React37.useRef(null);
9993
+ const clearTimers = React37.useCallback(() => {
9404
9994
  if (enterTimer.current != null) {
9405
9995
  window.clearTimeout(enterTimer.current);
9406
9996
  enterTimer.current = null;
@@ -9410,8 +10000,8 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
9410
10000
  leaveTimer.current = null;
9411
10001
  }
9412
10002
  }, []);
9413
- React36.useEffect(() => () => clearTimers(), [clearTimers]);
9414
- React36.useEffect(() => {
10003
+ React37.useEffect(() => () => clearTimers(), [clearTimers]);
10004
+ React37.useEffect(() => {
9415
10005
  if (state === "expanded") {
9416
10006
  clearTimers();
9417
10007
  setPeek(false);
@@ -9492,7 +10082,7 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
9492
10082
  );
9493
10083
  });
9494
10084
  Sidebar.displayName = "Sidebar";
9495
- var SidebarTrigger = React36.forwardRef(
10085
+ var SidebarTrigger = React37.forwardRef(
9496
10086
  function SidebarTrigger2({
9497
10087
  className,
9498
10088
  expandLabel = "Expand sidebar",
@@ -9500,7 +10090,7 @@ var SidebarTrigger = React36.forwardRef(
9500
10090
  onClick,
9501
10091
  ...props
9502
10092
  }, ref) {
9503
- const ctx = React36.useContext(SidebarContext);
10093
+ const ctx = React37.useContext(SidebarContext);
9504
10094
  if (!ctx) return null;
9505
10095
  const { state, toggle } = ctx;
9506
10096
  const label = state === "expanded" ? collapseLabel : expandLabel;
@@ -9531,14 +10121,14 @@ var SidebarTrigger = React36.forwardRef(
9531
10121
  );
9532
10122
  SidebarTrigger.displayName = "SidebarTrigger";
9533
10123
  function useSidebarPeekLock(active) {
9534
- const ctx = React36.useContext(SidebarContext);
9535
- React36.useEffect(() => {
10124
+ const ctx = React37.useContext(SidebarContext);
10125
+ React37.useEffect(() => {
9536
10126
  if (!active || !ctx) return;
9537
10127
  const release = ctx.acquirePeekLock();
9538
10128
  return release;
9539
10129
  }, [active, ctx]);
9540
10130
  }
9541
- var SidebarPinButton = React36.forwardRef(
10131
+ var SidebarPinButton = React37.forwardRef(
9542
10132
  function SidebarPinButton2({
9543
10133
  pinLabel = "Pin sidebar",
9544
10134
  unpinLabel = "Unpin sidebar",
@@ -9546,7 +10136,7 @@ var SidebarPinButton = React36.forwardRef(
9546
10136
  onClick,
9547
10137
  ...props
9548
10138
  }, ref) {
9549
- const ctx = React36.useContext(SidebarContext);
10139
+ const ctx = React37.useContext(SidebarContext);
9550
10140
  if (!ctx || !ctx.collapsible) return null;
9551
10141
  const { state, setState } = ctx;
9552
10142
  const isPinned = state === "expanded";
@@ -9611,7 +10201,7 @@ function PinGlyph({
9611
10201
  }
9612
10202
  );
9613
10203
  }
9614
- var SidebarBrand = React36.forwardRef(
10204
+ var SidebarBrand = React37.forwardRef(
9615
10205
  function SidebarBrand2({ className, ...props }, ref) {
9616
10206
  return /* @__PURE__ */ jsx(
9617
10207
  "div",
@@ -9627,7 +10217,7 @@ var SidebarBrand = React36.forwardRef(
9627
10217
  }
9628
10218
  );
9629
10219
  SidebarBrand.displayName = "SidebarBrand";
9630
- var SidebarBrandText = React36.forwardRef(
10220
+ var SidebarBrandText = React37.forwardRef(
9631
10221
  function SidebarBrandText2({ className, ...props }, ref) {
9632
10222
  return /* @__PURE__ */ jsx(
9633
10223
  "span",
@@ -9652,16 +10242,16 @@ var SidebarBrandText = React36.forwardRef(
9652
10242
  }
9653
10243
  );
9654
10244
  SidebarBrandText.displayName = "SidebarBrandText";
9655
- var SidebarGroupScopeContext = React36.createContext(null);
9656
- var SidebarSection = React36.forwardRef(
10245
+ var SidebarGroupScopeContext = React37.createContext(null);
10246
+ var SidebarSection = React37.forwardRef(
9657
10247
  function SidebarSection2({ label, tone = "pro", className, children, ...props }, ref) {
9658
10248
  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(
10249
+ const [exclusiveId, setExclusiveIdState] = React37.useState(null);
10250
+ const setExclusive = React37.useCallback(
9661
10251
  (id) => setExclusiveIdState(id),
9662
10252
  []
9663
10253
  );
9664
- const scope = React36.useMemo(
10254
+ const scope = React37.useMemo(
9665
10255
  () => ({ exclusiveId, setExclusive }),
9666
10256
  [exclusiveId, setExclusive]
9667
10257
  );
@@ -9714,12 +10304,12 @@ function getTextContent(node) {
9714
10304
  if (node == null || typeof node === "boolean") return "";
9715
10305
  if (typeof node === "string" || typeof node === "number") return String(node);
9716
10306
  if (Array.isArray(node)) return node.map(getTextContent).filter(Boolean).join(" ");
9717
- if (React36.isValidElement(node)) {
10307
+ if (React37.isValidElement(node)) {
9718
10308
  return getTextContent(node.props.children);
9719
10309
  }
9720
10310
  return "";
9721
10311
  }
9722
- var SidebarLink = React36.forwardRef(
10312
+ var SidebarLink = React37.forwardRef(
9723
10313
  function SidebarLink2({ href, icon, active = false, asChild, className, children, "aria-label": ariaLabel, ...props }, ref) {
9724
10314
  const Comp = asChild ? Slot : "a";
9725
10315
  const accessibleLabel = ariaLabel ?? (asChild ? void 0 : getTextContent(children) || void 0);
@@ -9790,7 +10380,7 @@ var SidebarLink = React36.forwardRef(
9790
10380
  }
9791
10381
  );
9792
10382
  SidebarLink.displayName = "SidebarLink";
9793
- var SidebarLinkLabel = React36.forwardRef(
10383
+ var SidebarLinkLabel = React37.forwardRef(
9794
10384
  function SidebarLinkLabel2({ className, ...props }, ref) {
9795
10385
  return /* @__PURE__ */ jsx(
9796
10386
  "span",
@@ -9815,7 +10405,7 @@ var SidebarLinkLabel = React36.forwardRef(
9815
10405
  }
9816
10406
  );
9817
10407
  SidebarLinkLabel.displayName = "SidebarLinkLabel";
9818
- var SidebarLinkAction = React36.forwardRef(
10408
+ var SidebarLinkAction = React37.forwardRef(
9819
10409
  function SidebarLinkAction2({ className, ...props }, ref) {
9820
10410
  return /* @__PURE__ */ jsx(
9821
10411
  "span",
@@ -9847,13 +10437,13 @@ var sidebarLinkBadgeVariants = cva(
9847
10437
  defaultVariants: { tone: "default" }
9848
10438
  }
9849
10439
  );
9850
- var SidebarLinkBadge = React36.forwardRef(
10440
+ var SidebarLinkBadge = React37.forwardRef(
9851
10441
  function SidebarLinkBadge2({ tone, className, ...props }, ref) {
9852
10442
  return /* @__PURE__ */ jsx("span", { ref, className: cn(sidebarLinkBadgeVariants({ tone }), className), ...props });
9853
10443
  }
9854
10444
  );
9855
10445
  SidebarLinkBadge.displayName = "SidebarLinkBadge";
9856
- var SidebarLinkGroup = React36.forwardRef(
10446
+ var SidebarLinkGroup = React37.forwardRef(
9857
10447
  function SidebarLinkGroup2({
9858
10448
  id: idProp,
9859
10449
  icon,
@@ -9868,19 +10458,19 @@ var SidebarLinkGroup = React36.forwardRef(
9868
10458
  children,
9869
10459
  ...props
9870
10460
  }, ref) {
9871
- const reactId = React36.useId();
10461
+ const reactId = React37.useId();
9872
10462
  const id = idProp ?? reactId;
9873
- const scope = React36.useContext(SidebarGroupScopeContext);
9874
- const [uncontrolledOpen, setUncontrolledOpen] = React36.useState(defaultOpen);
10463
+ const scope = React37.useContext(SidebarGroupScopeContext);
10464
+ const [uncontrolledOpen, setUncontrolledOpen] = React37.useState(defaultOpen);
9875
10465
  const open = controlled ?? uncontrolledOpen;
9876
- const setOpen = React36.useCallback(
10466
+ const setOpen = React37.useCallback(
9877
10467
  (next) => {
9878
10468
  if (controlled === void 0) setUncontrolledOpen(next);
9879
10469
  onOpenChange?.(next);
9880
10470
  },
9881
10471
  [controlled, onOpenChange]
9882
10472
  );
9883
- React36.useEffect(() => {
10473
+ React37.useEffect(() => {
9884
10474
  if (scope?.exclusiveId && scope.exclusiveId !== id && open) {
9885
10475
  setOpen(false);
9886
10476
  }
@@ -9989,7 +10579,7 @@ var SidebarLinkGroup = React36.forwardRef(
9989
10579
  }
9990
10580
  );
9991
10581
  SidebarLinkGroup.displayName = "SidebarLinkGroup";
9992
- var SidebarFooter = React36.forwardRef(
10582
+ var SidebarFooter = React37.forwardRef(
9993
10583
  function SidebarFooter2({ className, ...props }, ref) {
9994
10584
  return /* @__PURE__ */ jsx(
9995
10585
  "div",
@@ -10006,7 +10596,7 @@ var SidebarFooter = React36.forwardRef(
10006
10596
  }
10007
10597
  );
10008
10598
  SidebarFooter.displayName = "SidebarFooter";
10009
- var SidebarUser = React36.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
10599
+ var SidebarUser = React37.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
10010
10600
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex min-w-0 items-center gap-2.5", className), ...props, children: [
10011
10601
  /* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
10012
10602
  /* @__PURE__ */ jsxs(
@@ -10027,7 +10617,7 @@ var SidebarUser = React36.forwardRef(function SidebarUser2({ name, subtitle, ava
10027
10617
  ] });
10028
10618
  });
10029
10619
  SidebarUser.displayName = "SidebarUser";
10030
- var SidebarBrandSwitcher = React36.forwardRef(
10620
+ var SidebarBrandSwitcher = React37.forwardRef(
10031
10621
  function SidebarBrandSwitcher2({
10032
10622
  brand,
10033
10623
  label,
@@ -10045,7 +10635,7 @@ var SidebarBrandSwitcher = React36.forwardRef(
10045
10635
  contentClassName,
10046
10636
  trailing
10047
10637
  }, ref) {
10048
- const [open, setOpen] = React36.useState(false);
10638
+ const [open, setOpen] = React37.useState(false);
10049
10639
  useSidebarPeekLock(open);
10050
10640
  const others = items.filter((p) => p.id !== current.id);
10051
10641
  return (
@@ -10165,7 +10755,7 @@ function SidebarBrandSwitcherOtherRow({
10165
10755
  unavailableBadge
10166
10756
  }) {
10167
10757
  const reachable = item.available !== false;
10168
- const [launching, setLaunching] = React36.useState(false);
10758
+ const [launching, setLaunching] = React37.useState(false);
10169
10759
  const handleSelect = async () => {
10170
10760
  if (!reachable || launching || !onLaunch) return;
10171
10761
  setLaunching(true);
@@ -12082,7 +12672,7 @@ var FilterChip = forwardRef(function FilterChip2({ active = false, size, count,
12082
12672
  );
12083
12673
  });
12084
12674
  FilterChip.displayName = "FilterChip";
12085
- var BulkActionBarContext = React36.createContext({ tone: "surface" });
12675
+ var BulkActionBarContext = React37.createContext({ tone: "surface" });
12086
12676
  function actionClasses(tone, destructive) {
12087
12677
  const base = cn(
12088
12678
  "inline-flex h-8 items-center gap-1.5 rounded-btn px-3 text-[13px] font-medium",
@@ -12105,8 +12695,8 @@ function actionClasses(tone, destructive) {
12105
12695
  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
12696
  );
12107
12697
  }
12108
- var BulkActionBarAction = React36.forwardRef(function BulkActionBarAction2({ asChild = false, destructive, className, type, ...props }, ref) {
12109
- const { tone } = React36.use(BulkActionBarContext);
12698
+ var BulkActionBarAction = React37.forwardRef(function BulkActionBarAction2({ asChild = false, destructive, className, type, ...props }, ref) {
12699
+ const { tone } = React37.use(BulkActionBarContext);
12110
12700
  const Comp = asChild ? Slot : "button";
12111
12701
  return /* @__PURE__ */ jsx(
12112
12702
  Comp,
@@ -12120,7 +12710,7 @@ var BulkActionBarAction = React36.forwardRef(function BulkActionBarAction2({ asC
12120
12710
  });
12121
12711
  BulkActionBarAction.displayName = "BulkActionBarAction";
12122
12712
  function BulkActionBarSeparator({ className }) {
12123
- const { tone } = React36.use(BulkActionBarContext);
12713
+ const { tone } = React37.use(BulkActionBarContext);
12124
12714
  return /* @__PURE__ */ jsx(
12125
12715
  "span",
12126
12716
  {
@@ -12320,6 +12910,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
12320
12910
  });
12321
12911
  KbdHint.displayName = "KbdHint";
12322
12912
 
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 };
12913
+ 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, 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, 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, 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
12914
  //# sourceMappingURL=index.js.map
12325
12915
  //# sourceMappingURL=index.js.map