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