@assure-one/design-system 0.14.0 → 0.16.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 +220 -21
- package/dist/index.js +1103 -188
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import * as React36 from 'react';
|
|
3
|
-
import { forwardRef, useState, useCallback, useId, useRef, useImperativeHandle, useMemo, useEffect, createContext,
|
|
3
|
+
import { forwardRef, useState, useCallback, useId, useRef, useImperativeHandle, useMemo, useEffect, createContext, useContext } from 'react';
|
|
4
4
|
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
5
5
|
import { clsx } from 'clsx';
|
|
6
6
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -2189,6 +2189,27 @@ function TrendingDownIcon({ size = 24, ...props }) {
|
|
|
2189
2189
|
}
|
|
2190
2190
|
) });
|
|
2191
2191
|
}
|
|
2192
|
+
function PlayIcon({ size = 24, ...props }) {
|
|
2193
|
+
return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
|
|
2194
|
+
"path",
|
|
2195
|
+
{
|
|
2196
|
+
d: "M8 5.14v13.72a1 1 0 001.54.84l10.78-6.86a1 1 0 000-1.68L9.54 4.3A1 1 0 008 5.14z",
|
|
2197
|
+
fill: "currentColor",
|
|
2198
|
+
stroke: "currentColor",
|
|
2199
|
+
strokeWidth: "1.5",
|
|
2200
|
+
strokeLinejoin: "round"
|
|
2201
|
+
}
|
|
2202
|
+
) });
|
|
2203
|
+
}
|
|
2204
|
+
function PauseIcon({ size = 24, ...props }) {
|
|
2205
|
+
return /* @__PURE__ */ jsxs(Icon, { size, ...props, children: [
|
|
2206
|
+
/* @__PURE__ */ jsx("rect", { x: "7", y: "5", width: "3.5", height: "14", rx: "1", fill: "currentColor" }),
|
|
2207
|
+
/* @__PURE__ */ jsx("rect", { x: "13.5", y: "5", width: "3.5", height: "14", rx: "1", fill: "currentColor" })
|
|
2208
|
+
] });
|
|
2209
|
+
}
|
|
2210
|
+
function StopIcon({ size = 24, ...props }) {
|
|
2211
|
+
return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2", fill: "currentColor" }) });
|
|
2212
|
+
}
|
|
2192
2213
|
var Accordion = React36.forwardRef(function Accordion2({ className, ...props }, ref) {
|
|
2193
2214
|
return /* @__PURE__ */ jsx(
|
|
2194
2215
|
AccordionPrimitive.Root,
|
|
@@ -2434,7 +2455,7 @@ var AlertTitle = forwardRef(
|
|
|
2434
2455
|
);
|
|
2435
2456
|
AlertTitle.displayName = "AlertTitle";
|
|
2436
2457
|
var AlertDescription = forwardRef(function AlertDescription2({ className, ...props }, ref) {
|
|
2437
|
-
return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm
|
|
2458
|
+
return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm", className), ...props });
|
|
2438
2459
|
});
|
|
2439
2460
|
AlertDescription.displayName = "AlertDescription";
|
|
2440
2461
|
var AspectRatio = React36.forwardRef(function AspectRatio2({ className, ratio = 16 / 9, ...props }, ref) {
|
|
@@ -2530,7 +2551,8 @@ var Avatar = React36.forwardRef(
|
|
|
2530
2551
|
statusDotSizes[resolvedSize],
|
|
2531
2552
|
statusStyles[status]
|
|
2532
2553
|
),
|
|
2533
|
-
"
|
|
2554
|
+
role: "img",
|
|
2555
|
+
"aria-label": `${status} status`
|
|
2534
2556
|
}
|
|
2535
2557
|
)
|
|
2536
2558
|
] });
|
|
@@ -2713,6 +2735,48 @@ var BreadcrumbSeparator = forwardRef(
|
|
|
2713
2735
|
}
|
|
2714
2736
|
);
|
|
2715
2737
|
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
|
|
2738
|
+
var spinnerVariants = cva(
|
|
2739
|
+
"inline-flex shrink-0 items-center justify-center [&_svg]:motion-reduce:animate-none",
|
|
2740
|
+
{
|
|
2741
|
+
variants: {
|
|
2742
|
+
size: {
|
|
2743
|
+
xs: "[&_svg]:size-3",
|
|
2744
|
+
sm: "[&_svg]:size-4",
|
|
2745
|
+
md: "[&_svg]:size-5",
|
|
2746
|
+
lg: "[&_svg]:size-6"
|
|
2747
|
+
},
|
|
2748
|
+
tone: {
|
|
2749
|
+
current: "text-current",
|
|
2750
|
+
muted: "text-fg-3",
|
|
2751
|
+
accent: "text-accent",
|
|
2752
|
+
success: "text-success-fg",
|
|
2753
|
+
warning: "text-warning-fg",
|
|
2754
|
+
destructive: "text-danger-fg"
|
|
2755
|
+
}
|
|
2756
|
+
},
|
|
2757
|
+
defaultVariants: {
|
|
2758
|
+
size: "md",
|
|
2759
|
+
tone: "current"
|
|
2760
|
+
}
|
|
2761
|
+
}
|
|
2762
|
+
);
|
|
2763
|
+
var Spinner = forwardRef(function Spinner2({ size, tone, label, className, ...props }, ref) {
|
|
2764
|
+
return /* @__PURE__ */ jsxs(
|
|
2765
|
+
"span",
|
|
2766
|
+
{
|
|
2767
|
+
ref,
|
|
2768
|
+
role: label ? "status" : void 0,
|
|
2769
|
+
"aria-live": label ? "polite" : void 0,
|
|
2770
|
+
className: cn(spinnerVariants({ size, tone }), className),
|
|
2771
|
+
...props,
|
|
2772
|
+
children: [
|
|
2773
|
+
/* @__PURE__ */ jsx(LoaderIcon, { className: "animate-spin", "aria-hidden": "true" }),
|
|
2774
|
+
label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
|
|
2775
|
+
]
|
|
2776
|
+
}
|
|
2777
|
+
);
|
|
2778
|
+
});
|
|
2779
|
+
Spinner.displayName = "Spinner";
|
|
2716
2780
|
var buttonVariants = cva(
|
|
2717
2781
|
cn(
|
|
2718
2782
|
"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap",
|
|
@@ -2726,14 +2790,14 @@ var buttonVariants = cva(
|
|
|
2726
2790
|
variants: {
|
|
2727
2791
|
variant: {
|
|
2728
2792
|
primary: "bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active",
|
|
2729
|
-
secondary: "bg-bg
|
|
2730
|
-
destructive: "bg-danger-fg text-
|
|
2731
|
-
success: "bg-success-fg text-
|
|
2732
|
-
ghost: "bg-
|
|
2733
|
-
outline: "border border-
|
|
2793
|
+
secondary: "bg-control-secondary-bg text-control-fg border border-control-border hover:bg-control-active-bg hover:border-control-border-strong",
|
|
2794
|
+
destructive: "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active",
|
|
2795
|
+
success: "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
|
|
2796
|
+
ghost: "bg-control-bg text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg",
|
|
2797
|
+
outline: "border border-control-border-strong bg-control-bg text-control-fg hover:bg-control-hover-bg hover:border-control-border-hover",
|
|
2734
2798
|
link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto",
|
|
2735
2799
|
accent: "bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active",
|
|
2736
|
-
dashed: "border-2 border-dashed border-
|
|
2800
|
+
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"
|
|
2737
2801
|
},
|
|
2738
2802
|
size: {
|
|
2739
2803
|
sm: "h-8 px-3 text-[13px] gap-1.5",
|
|
@@ -2753,30 +2817,6 @@ var buttonVariants = cva(
|
|
|
2753
2817
|
}
|
|
2754
2818
|
}
|
|
2755
2819
|
);
|
|
2756
|
-
var Spinner = () => /* @__PURE__ */ jsxs("svg", { className: "size-4 animate-spin", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
|
|
2757
|
-
/* @__PURE__ */ jsx(
|
|
2758
|
-
"circle",
|
|
2759
|
-
{
|
|
2760
|
-
cx: "12",
|
|
2761
|
-
cy: "12",
|
|
2762
|
-
r: "10",
|
|
2763
|
-
stroke: "currentColor",
|
|
2764
|
-
strokeWidth: "3",
|
|
2765
|
-
strokeLinecap: "round",
|
|
2766
|
-
className: "opacity-25"
|
|
2767
|
-
}
|
|
2768
|
-
),
|
|
2769
|
-
/* @__PURE__ */ jsx(
|
|
2770
|
-
"path",
|
|
2771
|
-
{
|
|
2772
|
-
d: "M4 12a8 8 0 018-8",
|
|
2773
|
-
stroke: "currentColor",
|
|
2774
|
-
strokeWidth: "3",
|
|
2775
|
-
strokeLinecap: "round",
|
|
2776
|
-
className: "opacity-75"
|
|
2777
|
-
}
|
|
2778
|
-
)
|
|
2779
|
-
] });
|
|
2780
2820
|
var Button = forwardRef(function Button2({
|
|
2781
2821
|
variant,
|
|
2782
2822
|
size,
|
|
@@ -2801,7 +2841,7 @@ var Button = forwardRef(function Button2({
|
|
|
2801
2841
|
className: cn(buttonVariants({ variant, size }), className),
|
|
2802
2842
|
...props,
|
|
2803
2843
|
children: [
|
|
2804
|
-
loading ? /* @__PURE__ */ jsx(Spinner, {}) : iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
|
|
2844
|
+
loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
|
|
2805
2845
|
children,
|
|
2806
2846
|
iconRight && !loading && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
|
|
2807
2847
|
]
|
|
@@ -2890,7 +2930,7 @@ function Calendar({
|
|
|
2890
2930
|
),
|
|
2891
2931
|
today: "[&_button]:font-semibold [&_button]:text-accent",
|
|
2892
2932
|
selected: "[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover [&_button]:focus-visible:bg-pro-fg",
|
|
2893
|
-
outside: "[&_button]:text-fg-
|
|
2933
|
+
outside: "[&_button]:text-fg-4",
|
|
2894
2934
|
disabled: "[&_button]:text-fg-disabled",
|
|
2895
2935
|
hidden: "invisible",
|
|
2896
2936
|
...classNames
|
|
@@ -3176,7 +3216,7 @@ function Select({
|
|
|
3176
3216
|
SelectTrigger,
|
|
3177
3217
|
{
|
|
3178
3218
|
"aria-invalid": ariaInvalid || void 0,
|
|
3179
|
-
"aria-label": ariaLabel,
|
|
3219
|
+
"aria-label": ariaLabel ?? placeholder,
|
|
3180
3220
|
className: cn(triggerClassName, className),
|
|
3181
3221
|
children: /* @__PURE__ */ jsx(SelectValue, { placeholder })
|
|
3182
3222
|
}
|
|
@@ -3590,16 +3630,30 @@ function ConfirmActionButton({
|
|
|
3590
3630
|
cancelLabel = "Cancel",
|
|
3591
3631
|
onConfirm,
|
|
3592
3632
|
destructive = true,
|
|
3593
|
-
contentClassName
|
|
3633
|
+
contentClassName,
|
|
3634
|
+
open,
|
|
3635
|
+
defaultOpen = false,
|
|
3636
|
+
onOpenChange
|
|
3594
3637
|
}) {
|
|
3595
|
-
const
|
|
3638
|
+
const isControlled = open !== void 0;
|
|
3639
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React36.useState(defaultOpen);
|
|
3640
|
+
const resolvedOpen = isControlled ? open : uncontrolledOpen;
|
|
3596
3641
|
const [pending, setPending] = React36.useState(false);
|
|
3642
|
+
const setDialogOpen = React36.useCallback(
|
|
3643
|
+
(nextOpen) => {
|
|
3644
|
+
onOpenChange?.(nextOpen);
|
|
3645
|
+
if (!isControlled) {
|
|
3646
|
+
setUncontrolledOpen(nextOpen);
|
|
3647
|
+
}
|
|
3648
|
+
},
|
|
3649
|
+
[isControlled, onOpenChange]
|
|
3650
|
+
);
|
|
3597
3651
|
const handleConfirm = async (event) => {
|
|
3598
3652
|
event.preventDefault();
|
|
3599
3653
|
setPending(true);
|
|
3600
3654
|
try {
|
|
3601
3655
|
await onConfirm();
|
|
3602
|
-
|
|
3656
|
+
setDialogOpen(false);
|
|
3603
3657
|
} finally {
|
|
3604
3658
|
setPending(false);
|
|
3605
3659
|
}
|
|
@@ -3607,10 +3661,10 @@ function ConfirmActionButton({
|
|
|
3607
3661
|
return /* @__PURE__ */ jsxs(
|
|
3608
3662
|
AlertDialog,
|
|
3609
3663
|
{
|
|
3610
|
-
open,
|
|
3664
|
+
open: resolvedOpen,
|
|
3611
3665
|
onOpenChange: (next) => {
|
|
3612
3666
|
if (pending) return;
|
|
3613
|
-
|
|
3667
|
+
setDialogOpen(next);
|
|
3614
3668
|
},
|
|
3615
3669
|
children: [
|
|
3616
3670
|
/* @__PURE__ */ jsx(AlertDialogTrigger, { asChild: true, children: trigger }),
|
|
@@ -4443,9 +4497,9 @@ var DropdownMenuSubTrigger = React36.forwardRef(({ className, inset, children, .
|
|
|
4443
4497
|
ref,
|
|
4444
4498
|
className: cn(
|
|
4445
4499
|
"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
|
|
4446
|
-
"text-fg
|
|
4447
|
-
"focus:bg-bg
|
|
4448
|
-
"data-[state=open]:bg-bg
|
|
4500
|
+
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4501
|
+
"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg",
|
|
4502
|
+
"data-[state=open]:bg-menu-item-hover-bg data-[state=open]:text-menu-item-hover-fg",
|
|
4449
4503
|
"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none",
|
|
4450
4504
|
inset && "pl-8",
|
|
4451
4505
|
className
|
|
@@ -4469,7 +4523,7 @@ var DropdownMenuSubContent = React36.forwardRef(({ className, ...props }, ref) =
|
|
|
4469
4523
|
{
|
|
4470
4524
|
ref,
|
|
4471
4525
|
className: cn(
|
|
4472
|
-
"rounded-card border-
|
|
4526
|
+
"rounded-card border-menu-border bg-menu-bg text-menu-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1",
|
|
4473
4527
|
"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
4474
4528
|
"data-[state=closed]:scale-95 data-[state=closed]:opacity-0",
|
|
4475
4529
|
"data-[state=open]:scale-100 data-[state=open]:opacity-100",
|
|
@@ -4488,7 +4542,7 @@ var DropdownMenuContent = React36.forwardRef(({ className, sideOffset = 6, align
|
|
|
4488
4542
|
sideOffset,
|
|
4489
4543
|
align,
|
|
4490
4544
|
className: cn(
|
|
4491
|
-
"rounded-card border-
|
|
4545
|
+
"rounded-card border-menu-border bg-menu-bg text-menu-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1",
|
|
4492
4546
|
"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
4493
4547
|
"data-[state=closed]:scale-95 data-[state=closed]:opacity-0",
|
|
4494
4548
|
"data-[state=open]:scale-100 data-[state=open]:opacity-100",
|
|
@@ -4505,12 +4559,12 @@ var DropdownMenuItem = React36.forwardRef(({ className, destructive, inset, ...p
|
|
|
4505
4559
|
ref,
|
|
4506
4560
|
className: cn(
|
|
4507
4561
|
"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
|
|
4508
|
-
"text-fg
|
|
4509
|
-
"focus:bg-bg
|
|
4562
|
+
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4563
|
+
"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg",
|
|
4510
4564
|
"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none",
|
|
4511
4565
|
"[&_svg]:size-4 [&_svg]:shrink-0",
|
|
4512
4566
|
inset && "pl-8",
|
|
4513
|
-
destructive && "text-
|
|
4567
|
+
destructive && "text-menu-item-destructive-fg focus:bg-menu-item-destructive-hover-bg focus:text-menu-item-destructive-hover-fg",
|
|
4514
4568
|
className
|
|
4515
4569
|
),
|
|
4516
4570
|
...props
|
|
@@ -4524,8 +4578,8 @@ var DropdownMenuCheckboxItem = React36.forwardRef(({ className, children, checke
|
|
|
4524
4578
|
checked,
|
|
4525
4579
|
className: cn(
|
|
4526
4580
|
"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
|
|
4527
|
-
"text-fg
|
|
4528
|
-
"focus:bg-bg
|
|
4581
|
+
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4582
|
+
"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg",
|
|
4529
4583
|
"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none",
|
|
4530
4584
|
className
|
|
4531
4585
|
),
|
|
@@ -4543,8 +4597,8 @@ var DropdownMenuRadioItem = React36.forwardRef(({ className, children, ...props
|
|
|
4543
4597
|
ref,
|
|
4544
4598
|
className: cn(
|
|
4545
4599
|
"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
|
|
4546
|
-
"text-fg
|
|
4547
|
-
"focus:bg-bg
|
|
4600
|
+
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4601
|
+
"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg",
|
|
4548
4602
|
"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none",
|
|
4549
4603
|
className
|
|
4550
4604
|
),
|
|
@@ -4561,7 +4615,7 @@ var DropdownMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref)
|
|
|
4561
4615
|
{
|
|
4562
4616
|
ref,
|
|
4563
4617
|
className: cn(
|
|
4564
|
-
"text-fg
|
|
4618
|
+
"text-menu-label-fg px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
|
|
4565
4619
|
inset && "pl-8",
|
|
4566
4620
|
className
|
|
4567
4621
|
),
|
|
@@ -4573,7 +4627,7 @@ var DropdownMenuSeparator = React36.forwardRef(({ className, ...props }, ref) =>
|
|
|
4573
4627
|
DropdownMenuPrimitive.Separator,
|
|
4574
4628
|
{
|
|
4575
4629
|
ref,
|
|
4576
|
-
className: cn("bg-
|
|
4630
|
+
className: cn("bg-menu-border -mx-1 my-1 h-px", className),
|
|
4577
4631
|
...props
|
|
4578
4632
|
}
|
|
4579
4633
|
));
|
|
@@ -4581,7 +4635,7 @@ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
|
4581
4635
|
var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
4582
4636
|
"span",
|
|
4583
4637
|
{
|
|
4584
|
-
className: cn("text-fg
|
|
4638
|
+
className: cn("text-menu-shortcut-fg ml-auto font-mono text-[11px] tracking-wider", className),
|
|
4585
4639
|
...props
|
|
4586
4640
|
}
|
|
4587
4641
|
);
|
|
@@ -5137,7 +5191,7 @@ function Logo({
|
|
|
5137
5191
|
/* @__PURE__ */ jsx("span", { children: "Assure" }),
|
|
5138
5192
|
productName && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5139
5193
|
" ",
|
|
5140
|
-
/* @__PURE__ */ jsx("span", { className: "text-pro-fg
|
|
5194
|
+
/* @__PURE__ */ jsx("span", { className: cn("font-medium", inverted ? "text-[#d8cfff]" : "text-pro-fg"), children: productName })
|
|
5141
5195
|
] })
|
|
5142
5196
|
]
|
|
5143
5197
|
}
|
|
@@ -5163,37 +5217,35 @@ function MultiFilterPill({
|
|
|
5163
5217
|
const active = selected.size > 0;
|
|
5164
5218
|
const displayLabel = active ? selected.size === 1 ? options.find((o) => o.key === [...selected][0])?.label ?? label : `${label} \xB7 ${selected.size}` : label;
|
|
5165
5219
|
return /* @__PURE__ */ jsxs(Popover, { children: [
|
|
5166
|
-
/* @__PURE__ */ jsxs(
|
|
5167
|
-
|
|
5220
|
+
active ? /* @__PURE__ */ jsxs(
|
|
5221
|
+
"div",
|
|
5168
5222
|
{
|
|
5169
5223
|
className: cn(
|
|
5170
5224
|
"rounded-pill font-body inline-flex items-center border font-medium",
|
|
5171
5225
|
TRIGGER_SIZE[size],
|
|
5226
|
+
"border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover",
|
|
5172
5227
|
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
5173
|
-
"motion-reduce:transition-none"
|
|
5174
|
-
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
5175
|
-
active ? "border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover" : "border-rule bg-surface text-fg-2 hover:border-rule-strong hover:bg-bg-2 hover:text-fg"
|
|
5228
|
+
"motion-reduce:transition-none"
|
|
5176
5229
|
),
|
|
5177
5230
|
children: [
|
|
5178
|
-
|
|
5179
|
-
|
|
5180
|
-
active ? /* @__PURE__ */ jsx(
|
|
5181
|
-
"span",
|
|
5231
|
+
/* @__PURE__ */ jsxs(
|
|
5232
|
+
PopoverTrigger,
|
|
5182
5233
|
{
|
|
5183
|
-
|
|
5184
|
-
|
|
5185
|
-
|
|
5186
|
-
|
|
5187
|
-
|
|
5188
|
-
|
|
5189
|
-
|
|
5190
|
-
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5196
|
-
|
|
5234
|
+
className: cn(
|
|
5235
|
+
"inline-flex min-w-0 flex-1 items-center gap-1.5 rounded-pill outline-none",
|
|
5236
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)]"
|
|
5237
|
+
),
|
|
5238
|
+
children: [
|
|
5239
|
+
icon && /* @__PURE__ */ jsx("span", { className: "[&>svg]:size-3.5", "aria-hidden": "true", children: icon }),
|
|
5240
|
+
/* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: displayLabel })
|
|
5241
|
+
]
|
|
5242
|
+
}
|
|
5243
|
+
),
|
|
5244
|
+
/* @__PURE__ */ jsx(
|
|
5245
|
+
"button",
|
|
5246
|
+
{
|
|
5247
|
+
type: "button",
|
|
5248
|
+
onClick: onClear,
|
|
5197
5249
|
className: cn(
|
|
5198
5250
|
"ml-0.5 inline-flex size-4 items-center justify-center rounded-full",
|
|
5199
5251
|
"text-pro-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
@@ -5204,7 +5256,24 @@ function MultiFilterPill({
|
|
|
5204
5256
|
"aria-label": `Clear ${label} filter`,
|
|
5205
5257
|
children: /* @__PURE__ */ jsx(XIcon, { className: "size-3", "aria-hidden": "true" })
|
|
5206
5258
|
}
|
|
5207
|
-
)
|
|
5259
|
+
)
|
|
5260
|
+
]
|
|
5261
|
+
}
|
|
5262
|
+
) : /* @__PURE__ */ jsxs(
|
|
5263
|
+
PopoverTrigger,
|
|
5264
|
+
{
|
|
5265
|
+
className: cn(
|
|
5266
|
+
"rounded-pill font-body inline-flex items-center border font-medium",
|
|
5267
|
+
TRIGGER_SIZE[size],
|
|
5268
|
+
"border-rule bg-surface text-fg-2 hover:border-rule-strong hover:bg-bg-2 hover:text-fg",
|
|
5269
|
+
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
5270
|
+
"motion-reduce:transition-none",
|
|
5271
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
5272
|
+
),
|
|
5273
|
+
children: [
|
|
5274
|
+
icon && /* @__PURE__ */ jsx("span", { className: "[&>svg]:size-3.5", "aria-hidden": "true", children: icon }),
|
|
5275
|
+
/* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: displayLabel }),
|
|
5276
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-fg-4 size-3 shrink-0", "aria-hidden": "true" })
|
|
5208
5277
|
]
|
|
5209
5278
|
}
|
|
5210
5279
|
),
|
|
@@ -5355,7 +5424,8 @@ function OTPInput({
|
|
|
5355
5424
|
onChange,
|
|
5356
5425
|
onComplete,
|
|
5357
5426
|
id,
|
|
5358
|
-
disabled
|
|
5427
|
+
disabled,
|
|
5428
|
+
"aria-label": ariaLabel
|
|
5359
5429
|
}) {
|
|
5360
5430
|
const errorId = id ? `${id}-error` : void 0;
|
|
5361
5431
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-1.5", className), children: [
|
|
@@ -5374,6 +5444,7 @@ function OTPInput({
|
|
|
5374
5444
|
onChange,
|
|
5375
5445
|
onComplete,
|
|
5376
5446
|
disabled,
|
|
5447
|
+
"aria-label": ariaLabel ?? "One-time password",
|
|
5377
5448
|
"aria-invalid": error ? true : void 0,
|
|
5378
5449
|
"aria-describedby": error ? errorId : void 0,
|
|
5379
5450
|
containerClassName: cn(
|
|
@@ -5476,7 +5547,7 @@ var Pagination = forwardRef(function Pagination2({
|
|
|
5476
5547
|
"nav",
|
|
5477
5548
|
{
|
|
5478
5549
|
ref,
|
|
5479
|
-
"aria-label":
|
|
5550
|
+
"aria-label": `Pagination, page ${currentPage} of ${totalPages}`,
|
|
5480
5551
|
className: cn("flex items-center justify-between gap-4", className),
|
|
5481
5552
|
...props,
|
|
5482
5553
|
children: [
|
|
@@ -5823,7 +5894,14 @@ var ScrollArea = React36.forwardRef(function ScrollArea2({ className, children,
|
|
|
5823
5894
|
className: cn("relative overflow-hidden", className),
|
|
5824
5895
|
...props,
|
|
5825
5896
|
children: [
|
|
5826
|
-
/* @__PURE__ */ jsx(
|
|
5897
|
+
/* @__PURE__ */ jsx(
|
|
5898
|
+
ScrollAreaPrimitive.Viewport,
|
|
5899
|
+
{
|
|
5900
|
+
tabIndex: 0,
|
|
5901
|
+
className: "h-full w-full rounded-[inherit] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
5902
|
+
children
|
|
5903
|
+
}
|
|
5904
|
+
),
|
|
5827
5905
|
/* @__PURE__ */ jsx(ScrollBar, {}),
|
|
5828
5906
|
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
|
|
5829
5907
|
]
|
|
@@ -6070,8 +6148,21 @@ function SearchSelect({
|
|
|
6070
6148
|
}
|
|
6071
6149
|
}, [onCreate, trimmedSearch]);
|
|
6072
6150
|
const inputRef = React36.useRef(null);
|
|
6151
|
+
const listboxId = React36.useId();
|
|
6152
|
+
const setInputRef = React36.useCallback((node) => {
|
|
6153
|
+
inputRef.current = node;
|
|
6154
|
+
node?.removeAttribute("aria-labelledby");
|
|
6155
|
+
node?.setAttribute("aria-controls", listboxId);
|
|
6156
|
+
node?.removeAttribute("aria-activedescendant");
|
|
6157
|
+
}, [listboxId]);
|
|
6073
6158
|
const singleValue = closeOnSelect ? selected[0] ?? null : null;
|
|
6074
6159
|
const showValue = singleValue !== null && !open;
|
|
6160
|
+
const popoverOpen = open && !disabled;
|
|
6161
|
+
React36.useEffect(() => {
|
|
6162
|
+
inputRef.current?.removeAttribute("aria-labelledby");
|
|
6163
|
+
inputRef.current?.setAttribute("aria-controls", listboxId);
|
|
6164
|
+
inputRef.current?.removeAttribute("aria-activedescendant");
|
|
6165
|
+
});
|
|
6075
6166
|
React36.useEffect(() => {
|
|
6076
6167
|
if (open && closeOnSelect) {
|
|
6077
6168
|
const raf = requestAnimationFrame(() => inputRef.current?.focus());
|
|
@@ -6110,10 +6201,12 @@ function SearchSelect({
|
|
|
6110
6201
|
},
|
|
6111
6202
|
item.id
|
|
6112
6203
|
)) }),
|
|
6113
|
-
/* @__PURE__ */ jsx(
|
|
6204
|
+
!popoverOpen && /* @__PURE__ */ jsx("div", { id: listboxId, role: "listbox", hidden: true }),
|
|
6205
|
+
/* @__PURE__ */ jsx(Popover, { open: popoverOpen, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs(
|
|
6114
6206
|
Command,
|
|
6115
6207
|
{
|
|
6116
6208
|
shouldFilter: true,
|
|
6209
|
+
label: placeholder,
|
|
6117
6210
|
className: "overflow-visible bg-transparent",
|
|
6118
6211
|
onKeyDown: (e) => {
|
|
6119
6212
|
if (e.key === "Escape") {
|
|
@@ -6210,7 +6303,7 @@ function SearchSelect({
|
|
|
6210
6303
|
/* @__PURE__ */ jsx(
|
|
6211
6304
|
Command.Input,
|
|
6212
6305
|
{
|
|
6213
|
-
ref:
|
|
6306
|
+
ref: setInputRef,
|
|
6214
6307
|
value: search,
|
|
6215
6308
|
onValueChange: (v) => {
|
|
6216
6309
|
setSearch(v);
|
|
@@ -6220,6 +6313,8 @@ function SearchSelect({
|
|
|
6220
6313
|
if (!disabled) setOpen(true);
|
|
6221
6314
|
},
|
|
6222
6315
|
placeholder,
|
|
6316
|
+
"aria-label": placeholder,
|
|
6317
|
+
"aria-controls": listboxId,
|
|
6223
6318
|
disabled,
|
|
6224
6319
|
className: cn(
|
|
6225
6320
|
"font-body text-fg flex-1 bg-transparent py-2 pr-3 pl-9 text-[13px] outline-none",
|
|
@@ -6268,6 +6363,7 @@ function SearchSelect({
|
|
|
6268
6363
|
/* @__PURE__ */ jsxs(
|
|
6269
6364
|
Command.List,
|
|
6270
6365
|
{
|
|
6366
|
+
id: listboxId,
|
|
6271
6367
|
className: cn(
|
|
6272
6368
|
// No top padding: a sticky group heading pins at top-0, so any
|
|
6273
6369
|
// top padding would leave a strip above it where the previous
|
|
@@ -6533,38 +6629,51 @@ var sheetVariants = cva(
|
|
|
6533
6629
|
defaultVariants: { side: "right" }
|
|
6534
6630
|
}
|
|
6535
6631
|
);
|
|
6536
|
-
var
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6542
|
-
|
|
6543
|
-
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6552
|
-
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
6632
|
+
var sheetWidthClasses = {
|
|
6633
|
+
sm: "w-[95vw] max-w-[95vw] sm:w-[420px]",
|
|
6634
|
+
md: "w-[95vw] max-w-[95vw] sm:w-[520px]",
|
|
6635
|
+
lg: "w-[95vw] max-w-[95vw] sm:w-[640px]",
|
|
6636
|
+
xl: "w-[95vw] max-w-[95vw] sm:w-[760px]",
|
|
6637
|
+
full: "w-full max-w-none"
|
|
6638
|
+
};
|
|
6639
|
+
var SheetContent = React36.forwardRef(
|
|
6640
|
+
({ side, width = "default", customWidth, className, children, showCloseButton = true, style, ...props }, ref) => {
|
|
6641
|
+
const ctx = React36.use(SheetSideContext);
|
|
6642
|
+
const resolvedSide = side ?? ctx.side ?? "right";
|
|
6643
|
+
const supportsWidth = resolvedSide === "left" || resolvedSide === "right";
|
|
6644
|
+
const widthClass = supportsWidth && width !== "default" ? sheetWidthClasses[width] : null;
|
|
6645
|
+
const widthStyle = supportsWidth && customWidth ? { width: customWidth, maxWidth: "95vw", ...style } : style;
|
|
6646
|
+
return /* @__PURE__ */ jsxs(SheetPortal, { children: [
|
|
6647
|
+
/* @__PURE__ */ jsx(SheetOverlay, {}),
|
|
6648
|
+
/* @__PURE__ */ jsxs(
|
|
6649
|
+
DialogPrimitive.Content,
|
|
6650
|
+
{
|
|
6651
|
+
ref,
|
|
6652
|
+
className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
|
|
6653
|
+
style: widthStyle,
|
|
6654
|
+
...props,
|
|
6655
|
+
children: [
|
|
6656
|
+
children,
|
|
6657
|
+
showCloseButton && /* @__PURE__ */ jsx(
|
|
6658
|
+
DialogPrimitive.Close,
|
|
6659
|
+
{
|
|
6660
|
+
className: cn(
|
|
6661
|
+
"absolute top-4 right-4 inline-flex size-7 items-center justify-center",
|
|
6662
|
+
"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
6663
|
+
"hover:bg-overlay-hover hover:text-fg",
|
|
6664
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
6665
|
+
"disabled:pointer-events-none"
|
|
6666
|
+
),
|
|
6667
|
+
"aria-label": "Close",
|
|
6668
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
|
|
6669
|
+
}
|
|
6670
|
+
)
|
|
6671
|
+
]
|
|
6672
|
+
}
|
|
6673
|
+
)
|
|
6674
|
+
] });
|
|
6675
|
+
}
|
|
6676
|
+
);
|
|
6568
6677
|
SheetContent.displayName = DialogPrimitive.Content.displayName;
|
|
6569
6678
|
var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className), ...props });
|
|
6570
6679
|
SheetHeader.displayName = "SheetHeader";
|
|
@@ -6728,6 +6837,7 @@ var Slider = React36.forwardRef(
|
|
|
6728
6837
|
if (typeof v === "number") return v;
|
|
6729
6838
|
return min;
|
|
6730
6839
|
})();
|
|
6840
|
+
const accessibleName = props["aria-label"] ?? label ?? "Slider value";
|
|
6731
6841
|
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
6732
6842
|
(label || showValue) && /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
|
|
6733
6843
|
label ? /* @__PURE__ */ jsx("label", { htmlFor: id, className: "text-fg text-[13px] leading-none font-medium", children: label }) : /* @__PURE__ */ jsx("span", {}),
|
|
@@ -6762,7 +6872,7 @@ var Slider = React36.forwardRef(
|
|
|
6762
6872
|
"data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed",
|
|
6763
6873
|
"data-[disabled]:border-fg-disabled data-[disabled]:bg-bg-disabled"
|
|
6764
6874
|
),
|
|
6765
|
-
"aria-label":
|
|
6875
|
+
"aria-label": accessibleName
|
|
6766
6876
|
}
|
|
6767
6877
|
)
|
|
6768
6878
|
]
|
|
@@ -7527,6 +7637,7 @@ function ToastProvider({ children }) {
|
|
|
7527
7637
|
"div",
|
|
7528
7638
|
{
|
|
7529
7639
|
className: "pointer-events-none fixed top-4 right-4 z-[var(--z-toast)] flex flex-col gap-2",
|
|
7640
|
+
role: "region",
|
|
7530
7641
|
"aria-live": "polite",
|
|
7531
7642
|
"aria-label": "Notifications",
|
|
7532
7643
|
children: toasts.map((t) => /* @__PURE__ */ jsx(ToastItem, { toast: t, onDismiss: removeToast }, t.id))
|
|
@@ -7753,13 +7864,21 @@ var Main = forwardRef(function Main2({ className, ...props }, ref) {
|
|
|
7753
7864
|
);
|
|
7754
7865
|
});
|
|
7755
7866
|
Main.displayName = "Main";
|
|
7756
|
-
var Content15 = forwardRef(function Content16({ padBottom, className, style, ...props }, ref) {
|
|
7867
|
+
var Content15 = forwardRef(function Content16({ padTop, padBottom, className, style, ...props }, ref) {
|
|
7868
|
+
const paddingStyle = padTop || padBottom ? {
|
|
7869
|
+
...padTop ? { paddingTop: padTop } : null,
|
|
7870
|
+
...padBottom ? { paddingBottom: padBottom } : null,
|
|
7871
|
+
...style
|
|
7872
|
+
} : style;
|
|
7757
7873
|
return /* @__PURE__ */ jsx(
|
|
7758
7874
|
"div",
|
|
7759
7875
|
{
|
|
7760
7876
|
ref,
|
|
7877
|
+
role: "region",
|
|
7878
|
+
"aria-label": "Page content",
|
|
7879
|
+
tabIndex: 0,
|
|
7761
7880
|
className: cn("flex-1 overflow-y-auto p-[var(--content-pad)]", className),
|
|
7762
|
-
style:
|
|
7881
|
+
style: paddingStyle,
|
|
7763
7882
|
...props
|
|
7764
7883
|
}
|
|
7765
7884
|
);
|
|
@@ -8172,9 +8291,19 @@ var SidebarSection = React36.forwardRef(
|
|
|
8172
8291
|
}
|
|
8173
8292
|
);
|
|
8174
8293
|
SidebarSection.displayName = "SidebarSection";
|
|
8294
|
+
function getTextContent(node) {
|
|
8295
|
+
if (node == null || typeof node === "boolean") return "";
|
|
8296
|
+
if (typeof node === "string" || typeof node === "number") return String(node);
|
|
8297
|
+
if (Array.isArray(node)) return node.map(getTextContent).filter(Boolean).join(" ");
|
|
8298
|
+
if (React36.isValidElement(node)) {
|
|
8299
|
+
return getTextContent(node.props.children);
|
|
8300
|
+
}
|
|
8301
|
+
return "";
|
|
8302
|
+
}
|
|
8175
8303
|
var SidebarLink = React36.forwardRef(
|
|
8176
|
-
function SidebarLink2({ href, icon, active = false, asChild, className, children, ...props }, ref) {
|
|
8304
|
+
function SidebarLink2({ href, icon, active = false, asChild, className, children, "aria-label": ariaLabel, ...props }, ref) {
|
|
8177
8305
|
const Comp = asChild ? Slot : "a";
|
|
8306
|
+
const accessibleLabel = ariaLabel ?? (asChild ? void 0 : getTextContent(children) || void 0);
|
|
8178
8307
|
return /* @__PURE__ */ jsx(
|
|
8179
8308
|
Comp,
|
|
8180
8309
|
{
|
|
@@ -8182,6 +8311,7 @@ var SidebarLink = React36.forwardRef(
|
|
|
8182
8311
|
...asChild ? {} : { href },
|
|
8183
8312
|
"data-active": active ? "true" : void 0,
|
|
8184
8313
|
"aria-current": active ? "page" : void 0,
|
|
8314
|
+
"aria-label": accessibleLabel,
|
|
8185
8315
|
className: cn(
|
|
8186
8316
|
"group/link relative mb-px flex items-center gap-2.5 rounded-md px-2.5 py-1.5",
|
|
8187
8317
|
"text-fg-2 text-[13px] font-normal no-underline",
|
|
@@ -8381,6 +8511,7 @@ var SidebarLinkGroup = React36.forwardRef(
|
|
|
8381
8511
|
href,
|
|
8382
8512
|
"data-active": active ? "true" : void 0,
|
|
8383
8513
|
"aria-current": active ? "page" : void 0,
|
|
8514
|
+
"aria-label": getTextContent(label) || void 0,
|
|
8384
8515
|
onClick: handleBodyClick,
|
|
8385
8516
|
className: bodyClassName,
|
|
8386
8517
|
children: [
|
|
@@ -8875,11 +9006,21 @@ function Sparkline({ data, className }) {
|
|
|
8875
9006
|
}
|
|
8876
9007
|
);
|
|
8877
9008
|
}
|
|
8878
|
-
|
|
9009
|
+
function KpiCardBody({
|
|
9010
|
+
label,
|
|
9011
|
+
value,
|
|
9012
|
+
icon,
|
|
9013
|
+
tone = "muted",
|
|
9014
|
+
delta,
|
|
9015
|
+
trend,
|
|
9016
|
+
hint,
|
|
9017
|
+
action,
|
|
9018
|
+
toneValue
|
|
9019
|
+
}) {
|
|
8879
9020
|
const deltaSentiment = delta ? delta.sentiment ?? directionToSentiment[delta.direction] : null;
|
|
8880
9021
|
const DeltaIcon = delta ? directionToIcon[delta.direction] : null;
|
|
8881
9022
|
const sparkColor = deltaSentiment ? sentimentText[deltaSentiment] : toneToValue[tone];
|
|
8882
|
-
return /* @__PURE__ */ jsxs(
|
|
9023
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8883
9024
|
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
8884
9025
|
icon && /* @__PURE__ */ jsx(
|
|
8885
9026
|
"div",
|
|
@@ -8923,15 +9064,82 @@ var KpiCard = forwardRef(function KpiCard2({ label, value, icon, tone = "muted",
|
|
|
8923
9064
|
)
|
|
8924
9065
|
] }),
|
|
8925
9066
|
/* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: label }),
|
|
8926
|
-
delta?.label && /* @__PURE__ */ jsx("p", { className: "text-fg-
|
|
8927
|
-
hint && /* @__PURE__ */ jsx("p", { className: "text-fg-
|
|
9067
|
+
delta?.label && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-[11px]", children: delta.label }),
|
|
9068
|
+
hint && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-[11px]", children: hint })
|
|
8928
9069
|
] }),
|
|
8929
9070
|
action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
|
|
8930
9071
|
] }),
|
|
8931
9072
|
trend && trend.length > 1 && /* @__PURE__ */ jsx(Sparkline, { data: trend, className: cn("mt-3", sparkColor) })
|
|
8932
9073
|
] });
|
|
9074
|
+
}
|
|
9075
|
+
var KpiCard = forwardRef(function KpiCard2({ label, value, icon, tone = "muted", delta, trend, hint, action, toneValue, className, ...props }, ref) {
|
|
9076
|
+
return /* @__PURE__ */ jsx(Card, { ref, className: cn("p-4", className), ...props, children: /* @__PURE__ */ jsx(
|
|
9077
|
+
KpiCardBody,
|
|
9078
|
+
{
|
|
9079
|
+
label,
|
|
9080
|
+
value,
|
|
9081
|
+
icon,
|
|
9082
|
+
tone,
|
|
9083
|
+
delta,
|
|
9084
|
+
trend,
|
|
9085
|
+
hint,
|
|
9086
|
+
action,
|
|
9087
|
+
toneValue
|
|
9088
|
+
}
|
|
9089
|
+
) });
|
|
8933
9090
|
});
|
|
8934
9091
|
KpiCard.displayName = "KpiCard";
|
|
9092
|
+
var SelectableKpiCard = forwardRef(
|
|
9093
|
+
function SelectableKpiCard2({
|
|
9094
|
+
label,
|
|
9095
|
+
value,
|
|
9096
|
+
icon,
|
|
9097
|
+
tone = "muted",
|
|
9098
|
+
delta,
|
|
9099
|
+
trend,
|
|
9100
|
+
hint,
|
|
9101
|
+
action,
|
|
9102
|
+
toneValue,
|
|
9103
|
+
selected = false,
|
|
9104
|
+
className,
|
|
9105
|
+
type,
|
|
9106
|
+
...props
|
|
9107
|
+
}, ref) {
|
|
9108
|
+
return /* @__PURE__ */ jsx(
|
|
9109
|
+
"button",
|
|
9110
|
+
{
|
|
9111
|
+
ref,
|
|
9112
|
+
type: type ?? "button",
|
|
9113
|
+
"aria-pressed": selected,
|
|
9114
|
+
"data-selected": selected ? "true" : "false",
|
|
9115
|
+
className: cn(
|
|
9116
|
+
cardVariants({ variant: "interactive" }),
|
|
9117
|
+
"block w-full p-4 text-left",
|
|
9118
|
+
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
9119
|
+
"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled disabled:shadow-none",
|
|
9120
|
+
selected && "border-pro-fg/40 bg-pro-bg hover:bg-pro-bg-hover ring-1 ring-pro-fg/30",
|
|
9121
|
+
className
|
|
9122
|
+
),
|
|
9123
|
+
...props,
|
|
9124
|
+
children: /* @__PURE__ */ jsx(
|
|
9125
|
+
KpiCardBody,
|
|
9126
|
+
{
|
|
9127
|
+
label,
|
|
9128
|
+
value,
|
|
9129
|
+
icon,
|
|
9130
|
+
tone,
|
|
9131
|
+
delta,
|
|
9132
|
+
trend,
|
|
9133
|
+
hint,
|
|
9134
|
+
action,
|
|
9135
|
+
toneValue
|
|
9136
|
+
}
|
|
9137
|
+
)
|
|
9138
|
+
}
|
|
9139
|
+
);
|
|
9140
|
+
}
|
|
9141
|
+
);
|
|
9142
|
+
SelectableKpiCard.displayName = "SelectableKpiCard";
|
|
8935
9143
|
var DataTable = forwardRef(function DataTable2({ withToolbar, className, children, ...props }, ref) {
|
|
8936
9144
|
return /* @__PURE__ */ jsx(
|
|
8937
9145
|
"div",
|
|
@@ -9394,7 +9602,21 @@ var ActivityEventItem = forwardRef(
|
|
|
9394
9602
|
);
|
|
9395
9603
|
ActivityEventItem.displayName = "ActivityEventItem";
|
|
9396
9604
|
var Kanban = forwardRef(function Kanban2({ className, children, ...props }, ref) {
|
|
9397
|
-
return /* @__PURE__ */ jsx(
|
|
9605
|
+
return /* @__PURE__ */ jsx(
|
|
9606
|
+
"div",
|
|
9607
|
+
{
|
|
9608
|
+
ref,
|
|
9609
|
+
role: "region",
|
|
9610
|
+
tabIndex: 0,
|
|
9611
|
+
"aria-label": "Kanban board",
|
|
9612
|
+
className: cn(
|
|
9613
|
+
"flex items-start gap-4 overflow-x-auto focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
9614
|
+
className
|
|
9615
|
+
),
|
|
9616
|
+
...props,
|
|
9617
|
+
children
|
|
9618
|
+
}
|
|
9619
|
+
);
|
|
9398
9620
|
});
|
|
9399
9621
|
Kanban.displayName = "Kanban";
|
|
9400
9622
|
var KanbanColumn = forwardRef(function KanbanColumn2({ title, count, className, children, ...props }, ref) {
|
|
@@ -9670,16 +9892,16 @@ var NotificationPanelHeader = forwardRef(
|
|
|
9670
9892
|
...props,
|
|
9671
9893
|
children: [
|
|
9672
9894
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
9673
|
-
/* @__PURE__ */ jsx("h3", { className: "text-fg text-
|
|
9674
|
-
unreadCount > 0 && /* @__PURE__ */ jsx("span", { className: "bg-
|
|
9895
|
+
/* @__PURE__ */ jsx("h3", { className: "text-fg text-[15px] font-semibold", children: title }),
|
|
9896
|
+
unreadCount > 0 && /* @__PURE__ */ jsx("span", { className: "bg-pro-bg text-pro-fg rounded-pill px-1.5 py-0.5 text-[11px] font-semibold tabular-nums", children: unreadCount > 99 ? "99+" : unreadCount })
|
|
9675
9897
|
] }),
|
|
9676
9898
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
9677
|
-
onMarkAllRead &&
|
|
9899
|
+
onMarkAllRead && /* @__PURE__ */ jsx(
|
|
9678
9900
|
"button",
|
|
9679
9901
|
{
|
|
9680
9902
|
type: "button",
|
|
9681
9903
|
onClick: onMarkAllRead,
|
|
9682
|
-
className: "text-fg-
|
|
9904
|
+
className: "text-pro-fg rounded-md px-1.5 py-1 text-sm font-medium hover:bg-[color:var(--color-pro-bg)] focus-visible:ring-accent outline-none focus-visible:ring-2",
|
|
9683
9905
|
children: "Mark all read"
|
|
9684
9906
|
}
|
|
9685
9907
|
),
|
|
@@ -9702,7 +9924,7 @@ var NotificationPanelHeader = forwardRef(
|
|
|
9702
9924
|
NotificationPanelHeader.displayName = "NotificationPanelHeader";
|
|
9703
9925
|
var FILTER_OPTIONS = ["all", "unread"];
|
|
9704
9926
|
var NotificationFilter = forwardRef(
|
|
9705
|
-
function NotificationFilter2({ value, onValueChange, actions, className, ...props }, ref) {
|
|
9927
|
+
function NotificationFilter2({ value, onValueChange, counts, actions, className, ...props }, ref) {
|
|
9706
9928
|
return /* @__PURE__ */ jsxs(
|
|
9707
9929
|
"div",
|
|
9708
9930
|
{
|
|
@@ -9713,21 +9935,37 @@ var NotificationFilter = forwardRef(
|
|
|
9713
9935
|
),
|
|
9714
9936
|
...props,
|
|
9715
9937
|
children: [
|
|
9716
|
-
/* @__PURE__ */ jsx("div", { className: "
|
|
9717
|
-
|
|
9718
|
-
|
|
9719
|
-
|
|
9720
|
-
|
|
9721
|
-
|
|
9722
|
-
|
|
9723
|
-
|
|
9724
|
-
"
|
|
9725
|
-
|
|
9726
|
-
|
|
9727
|
-
|
|
9728
|
-
|
|
9729
|
-
|
|
9730
|
-
|
|
9938
|
+
/* @__PURE__ */ jsx("div", { className: "inline-flex items-center gap-1 text-sm font-medium", children: FILTER_OPTIONS.map((option) => {
|
|
9939
|
+
const selected = value === option;
|
|
9940
|
+
const count = counts?.[option];
|
|
9941
|
+
return /* @__PURE__ */ jsxs(
|
|
9942
|
+
"button",
|
|
9943
|
+
{
|
|
9944
|
+
type: "button",
|
|
9945
|
+
onClick: () => onValueChange(option),
|
|
9946
|
+
"aria-pressed": selected,
|
|
9947
|
+
className: cn(
|
|
9948
|
+
"inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1 capitalize transition-colors",
|
|
9949
|
+
"focus-visible:ring-accent outline-none focus-visible:ring-2",
|
|
9950
|
+
selected ? "bg-surface text-pro-fg ring-1 ring-[color:var(--color-pro-line)]" : "text-fg-3 hover:text-fg"
|
|
9951
|
+
),
|
|
9952
|
+
children: [
|
|
9953
|
+
option,
|
|
9954
|
+
count != null && /* @__PURE__ */ jsx(
|
|
9955
|
+
"span",
|
|
9956
|
+
{
|
|
9957
|
+
className: cn(
|
|
9958
|
+
"rounded-md px-1.5 py-px text-[11px] font-semibold tabular-nums",
|
|
9959
|
+
selected ? "bg-pro-bg text-pro-fg" : "bg-bg-2 text-fg-4"
|
|
9960
|
+
),
|
|
9961
|
+
children: count
|
|
9962
|
+
}
|
|
9963
|
+
)
|
|
9964
|
+
]
|
|
9965
|
+
},
|
|
9966
|
+
option
|
|
9967
|
+
);
|
|
9968
|
+
}) }),
|
|
9731
9969
|
actions
|
|
9732
9970
|
]
|
|
9733
9971
|
}
|
|
@@ -9751,27 +9989,25 @@ var NotificationList = forwardRef(
|
|
|
9751
9989
|
NotificationList.displayName = "NotificationList";
|
|
9752
9990
|
var NotificationItem = forwardRef(
|
|
9753
9991
|
function NotificationItem2({ title, body, typeLabel, client, time, sender, icon, iconClassName, unread, className, ...props }, ref) {
|
|
9754
|
-
const meta = body ? [] : [typeLabel, client].filter(Boolean);
|
|
9755
9992
|
return /* @__PURE__ */ jsxs(
|
|
9756
9993
|
"button",
|
|
9757
9994
|
{
|
|
9758
9995
|
ref,
|
|
9759
9996
|
type: "button",
|
|
9760
9997
|
className: cn(
|
|
9761
|
-
"flex w-full gap-3 px-4 py-
|
|
9998
|
+
"flex w-full gap-3 px-4 py-3 text-left outline-none",
|
|
9762
9999
|
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
9763
10000
|
unread ? "bg-pro-bg hover:bg-pro-bg-hover focus-visible:bg-pro-bg-hover" : "hover:bg-bg-2/60 focus-visible:bg-bg-2/60",
|
|
9764
10001
|
className
|
|
9765
10002
|
),
|
|
9766
10003
|
...props,
|
|
9767
10004
|
children: [
|
|
9768
|
-
/* @__PURE__ */ jsx(
|
|
9769
|
-
sender ? /* @__PURE__ */ jsx(Avatar, { size: "sm", name: sender.name, src: sender.src, className: "mt-0.5" }) : /* @__PURE__ */ jsx(
|
|
10005
|
+
sender ? /* @__PURE__ */ jsx(Avatar, { size: "md", name: sender.name, src: sender.src, className: "mt-0.5" }) : /* @__PURE__ */ jsx(
|
|
9770
10006
|
"div",
|
|
9771
10007
|
{
|
|
9772
10008
|
"aria-hidden": "true",
|
|
9773
10009
|
className: cn(
|
|
9774
|
-
"mt-0.5 flex size-
|
|
10010
|
+
"mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-xl [&_svg]:size-4",
|
|
9775
10011
|
iconClassName ?? "bg-bg-2 text-fg-3"
|
|
9776
10012
|
),
|
|
9777
10013
|
children: icon
|
|
@@ -9779,23 +10015,32 @@ var NotificationItem = forwardRef(
|
|
|
9779
10015
|
),
|
|
9780
10016
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
9781
10017
|
unread && /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Unread. " }),
|
|
9782
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-
|
|
10018
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
9783
10019
|
/* @__PURE__ */ jsx(
|
|
9784
10020
|
"p",
|
|
9785
10021
|
{
|
|
9786
10022
|
className: cn(
|
|
9787
|
-
"
|
|
10023
|
+
"min-w-0 truncate text-[13.5px] leading-snug font-semibold",
|
|
9788
10024
|
unread ? "text-fg" : "text-fg-2"
|
|
9789
10025
|
),
|
|
9790
10026
|
children: title
|
|
9791
10027
|
}
|
|
9792
10028
|
),
|
|
9793
|
-
|
|
10029
|
+
unread && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "bg-pro-fg size-1.5 shrink-0 rounded-full" })
|
|
9794
10030
|
] }),
|
|
9795
|
-
body
|
|
9796
|
-
|
|
9797
|
-
|
|
9798
|
-
|
|
10031
|
+
body && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 truncate text-xs", children: body }),
|
|
10032
|
+
(typeLabel || client || time) && /* @__PURE__ */ jsxs("div", { className: "mt-1.5 flex items-center gap-2", children: [
|
|
10033
|
+
typeLabel && /* @__PURE__ */ jsx("span", { className: "text-fg-4 text-[11px]", children: typeLabel }),
|
|
10034
|
+
client && /* @__PURE__ */ jsx(
|
|
10035
|
+
Badge,
|
|
10036
|
+
{
|
|
10037
|
+
variant: "outline",
|
|
10038
|
+
className: "rounded-md px-1.5 py-0.5 text-[11px] font-medium",
|
|
10039
|
+
children: client
|
|
10040
|
+
}
|
|
10041
|
+
),
|
|
10042
|
+
time && /* @__PURE__ */ jsx("span", { className: "text-fg-4 text-xs whitespace-nowrap tabular-nums", children: time })
|
|
10043
|
+
] })
|
|
9799
10044
|
] })
|
|
9800
10045
|
]
|
|
9801
10046
|
}
|
|
@@ -9803,34 +10048,559 @@ var NotificationItem = forwardRef(
|
|
|
9803
10048
|
}
|
|
9804
10049
|
);
|
|
9805
10050
|
NotificationItem.displayName = "NotificationItem";
|
|
9806
|
-
var
|
|
9807
|
-
|
|
9808
|
-
|
|
9809
|
-
|
|
9810
|
-
|
|
9811
|
-
|
|
9812
|
-
|
|
9813
|
-
|
|
9814
|
-
|
|
9815
|
-
|
|
9816
|
-
|
|
9817
|
-
|
|
9818
|
-
|
|
9819
|
-
|
|
9820
|
-
|
|
9821
|
-
|
|
9822
|
-
|
|
9823
|
-
|
|
9824
|
-
|
|
9825
|
-
|
|
9826
|
-
|
|
9827
|
-
|
|
9828
|
-
|
|
9829
|
-
|
|
9830
|
-
|
|
9831
|
-
|
|
9832
|
-
|
|
9833
|
-
|
|
10051
|
+
var NotificationPanelFooter = forwardRef(
|
|
10052
|
+
function NotificationPanelFooter2({ className, children = "View all notifications", ...props }, ref) {
|
|
10053
|
+
return /* @__PURE__ */ jsx(
|
|
10054
|
+
"button",
|
|
10055
|
+
{
|
|
10056
|
+
ref,
|
|
10057
|
+
type: "button",
|
|
10058
|
+
className: cn(
|
|
10059
|
+
"border-rule text-fg hover:bg-bg-2 w-full border-t px-4 py-3 text-center text-sm font-medium",
|
|
10060
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
10061
|
+
"focus-visible:ring-accent outline-none focus-visible:ring-2",
|
|
10062
|
+
className
|
|
10063
|
+
),
|
|
10064
|
+
...props,
|
|
10065
|
+
children
|
|
10066
|
+
}
|
|
10067
|
+
);
|
|
10068
|
+
}
|
|
10069
|
+
);
|
|
10070
|
+
NotificationPanelFooter.displayName = "NotificationPanelFooter";
|
|
10071
|
+
var padded = (n) => String(n).padStart(2, "0");
|
|
10072
|
+
function formatClock(ms) {
|
|
10073
|
+
const total = Math.max(0, Math.floor(ms / 1e3));
|
|
10074
|
+
return `${Math.floor(total / 3600)}:${padded(Math.floor(total % 3600 / 60))}:${padded(total % 60)}`;
|
|
10075
|
+
}
|
|
10076
|
+
function formatDuration(totalSeconds) {
|
|
10077
|
+
const minutes = Math.round(totalSeconds / 60);
|
|
10078
|
+
const h = Math.floor(minutes / 60);
|
|
10079
|
+
const m = minutes % 60;
|
|
10080
|
+
if (h && m) return `${h}h ${m}m`;
|
|
10081
|
+
if (h) return `${h}h`;
|
|
10082
|
+
return `${m}m`;
|
|
10083
|
+
}
|
|
10084
|
+
function parseDuration(input) {
|
|
10085
|
+
const text = input.trim().toLowerCase();
|
|
10086
|
+
if (!text) return null;
|
|
10087
|
+
const clock = text.match(/^(\d{1,2}):(\d{2})$/);
|
|
10088
|
+
if (clock) return (Number(clock[1]) * 60 + Number(clock[2])) * 60;
|
|
10089
|
+
let seconds = 0;
|
|
10090
|
+
let matched = false;
|
|
10091
|
+
const unit = /(\d+(?:\.\d+)?)\s*(h|hr|hrs|hour|hours|m|min|mins|minute|minutes|s|sec|secs)/g;
|
|
10092
|
+
let part;
|
|
10093
|
+
while ((part = unit.exec(text)) !== null) {
|
|
10094
|
+
matched = true;
|
|
10095
|
+
const value = parseFloat(part[1]);
|
|
10096
|
+
if (part[2].startsWith("h")) seconds += value * 3600;
|
|
10097
|
+
else if (part[2].startsWith("m")) seconds += value * 60;
|
|
10098
|
+
else seconds += value;
|
|
10099
|
+
}
|
|
10100
|
+
if (!matched && /^\d+$/.test(text)) return Number(text) * 60;
|
|
10101
|
+
return matched ? Math.round(seconds) : null;
|
|
10102
|
+
}
|
|
10103
|
+
function formatCurrency(amount, currency = "USD") {
|
|
10104
|
+
try {
|
|
10105
|
+
return new Intl.NumberFormat("en-US", { style: "currency", currency }).format(amount);
|
|
10106
|
+
} catch {
|
|
10107
|
+
return `$${amount.toFixed(2)}`;
|
|
10108
|
+
}
|
|
10109
|
+
}
|
|
10110
|
+
var TICK_MS = 250;
|
|
10111
|
+
function useStopwatch() {
|
|
10112
|
+
const [phase, setPhaseState] = useState("idle");
|
|
10113
|
+
const [elapsedMs, setElapsedMs] = useState(0);
|
|
10114
|
+
const accumulatedRef = useRef(0);
|
|
10115
|
+
const startedAtRef = useRef(0);
|
|
10116
|
+
const phaseRef = useRef("idle");
|
|
10117
|
+
const setPhase = useCallback((next) => {
|
|
10118
|
+
phaseRef.current = next;
|
|
10119
|
+
setPhaseState(next);
|
|
10120
|
+
}, []);
|
|
10121
|
+
useEffect(() => {
|
|
10122
|
+
if (phase !== "running") return;
|
|
10123
|
+
const id = setInterval(() => {
|
|
10124
|
+
setElapsedMs(accumulatedRef.current + (Date.now() - startedAtRef.current));
|
|
10125
|
+
}, TICK_MS);
|
|
10126
|
+
return () => clearInterval(id);
|
|
10127
|
+
}, [phase]);
|
|
10128
|
+
const start = useCallback(
|
|
10129
|
+
(fromMs = 0) => {
|
|
10130
|
+
accumulatedRef.current = fromMs;
|
|
10131
|
+
startedAtRef.current = Date.now();
|
|
10132
|
+
setElapsedMs(fromMs);
|
|
10133
|
+
setPhase("running");
|
|
10134
|
+
},
|
|
10135
|
+
[setPhase]
|
|
10136
|
+
);
|
|
10137
|
+
const pause = useCallback(() => {
|
|
10138
|
+
if (phaseRef.current !== "running") return;
|
|
10139
|
+
accumulatedRef.current += Date.now() - startedAtRef.current;
|
|
10140
|
+
setElapsedMs(accumulatedRef.current);
|
|
10141
|
+
setPhase("paused");
|
|
10142
|
+
}, [setPhase]);
|
|
10143
|
+
const resume = useCallback(() => {
|
|
10144
|
+
if (phaseRef.current !== "paused") return;
|
|
10145
|
+
startedAtRef.current = Date.now();
|
|
10146
|
+
setPhase("running");
|
|
10147
|
+
}, [setPhase]);
|
|
10148
|
+
const stop = useCallback(() => {
|
|
10149
|
+
if (phaseRef.current === "idle") return;
|
|
10150
|
+
if (phaseRef.current === "running") {
|
|
10151
|
+
accumulatedRef.current += Date.now() - startedAtRef.current;
|
|
10152
|
+
setElapsedMs(accumulatedRef.current);
|
|
10153
|
+
}
|
|
10154
|
+
setPhase("stopped");
|
|
10155
|
+
}, [setPhase]);
|
|
10156
|
+
const reset = useCallback(() => {
|
|
10157
|
+
accumulatedRef.current = 0;
|
|
10158
|
+
startedAtRef.current = 0;
|
|
10159
|
+
setElapsedMs(0);
|
|
10160
|
+
setPhase("idle");
|
|
10161
|
+
}, [setPhase]);
|
|
10162
|
+
return { phase, elapsedMs, isRunning: phase === "running", start, pause, resume, stop, reset };
|
|
10163
|
+
}
|
|
10164
|
+
var TimeLogger = forwardRef(function TimeLogger2({ className, children, ...props }, ref) {
|
|
10165
|
+
return /* @__PURE__ */ jsx(
|
|
10166
|
+
"div",
|
|
10167
|
+
{
|
|
10168
|
+
ref,
|
|
10169
|
+
className: cn("bg-surface text-fg-2 flex w-full flex-col", className),
|
|
10170
|
+
...props,
|
|
10171
|
+
children
|
|
10172
|
+
}
|
|
10173
|
+
);
|
|
10174
|
+
});
|
|
10175
|
+
TimeLogger.displayName = "TimeLogger";
|
|
10176
|
+
var TimeLoggerHeader = forwardRef(
|
|
10177
|
+
function TimeLoggerHeader2({ title = "Track Time", icon, loggedMinutes = 0, goalMinutes, className, ...props }, ref) {
|
|
10178
|
+
const hasGoal = goalMinutes != null;
|
|
10179
|
+
const pct = hasGoal && goalMinutes > 0 ? Math.min(100, loggedMinutes / goalMinutes * 100) : 0;
|
|
10180
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
|
|
10181
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3", children: [
|
|
10182
|
+
/* @__PURE__ */ jsxs("div", { className: "text-fg flex items-center gap-2 text-base font-semibold [&_svg]:size-[18px]", children: [
|
|
10183
|
+
/* @__PURE__ */ jsx("span", { className: "text-pro-fg", "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx(ClockIcon, {}) }),
|
|
10184
|
+
title
|
|
10185
|
+
] }),
|
|
10186
|
+
hasGoal && /* @__PURE__ */ jsxs("div", { className: "text-fg-3 font-mono text-[13px] tabular-nums", children: [
|
|
10187
|
+
/* @__PURE__ */ jsx("b", { className: "text-fg font-medium", children: formatDuration(loggedMinutes * 60) }),
|
|
10188
|
+
" /",
|
|
10189
|
+
" ",
|
|
10190
|
+
formatDuration(goalMinutes * 60)
|
|
10191
|
+
] })
|
|
10192
|
+
] }),
|
|
10193
|
+
hasGoal && /* @__PURE__ */ jsx(
|
|
10194
|
+
"div",
|
|
10195
|
+
{
|
|
10196
|
+
className: "bg-bg-3 relative h-[3px] w-full",
|
|
10197
|
+
role: "progressbar",
|
|
10198
|
+
"aria-label": "Daily goal progress",
|
|
10199
|
+
"aria-valuemin": 0,
|
|
10200
|
+
"aria-valuemax": goalMinutes,
|
|
10201
|
+
"aria-valuenow": Math.min(loggedMinutes, goalMinutes),
|
|
10202
|
+
children: /* @__PURE__ */ jsx(
|
|
10203
|
+
"div",
|
|
10204
|
+
{
|
|
10205
|
+
className: "bg-pro-fg h-full rounded-r-full transition-[width] duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
10206
|
+
style: { width: `${pct}%` }
|
|
10207
|
+
}
|
|
10208
|
+
)
|
|
10209
|
+
}
|
|
10210
|
+
)
|
|
10211
|
+
] });
|
|
10212
|
+
}
|
|
10213
|
+
);
|
|
10214
|
+
TimeLoggerHeader.displayName = "TimeLoggerHeader";
|
|
10215
|
+
var TimeLoggerContextRow = forwardRef(
|
|
10216
|
+
function TimeLoggerContextRow2({ client, engagement, avatar, onClientSelect, member, className, ...props }, ref) {
|
|
10217
|
+
const text = /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
|
|
10218
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg block truncate text-sm font-medium", children: client }),
|
|
10219
|
+
engagement && /* @__PURE__ */ jsx("span", { className: "text-fg-3 block truncate text-xs", children: engagement })
|
|
10220
|
+
] });
|
|
10221
|
+
return /* @__PURE__ */ jsxs(
|
|
10222
|
+
"div",
|
|
10223
|
+
{
|
|
10224
|
+
ref,
|
|
10225
|
+
className: cn("border-rule-soft flex items-center gap-2.5 border-t px-4 py-2.5", className),
|
|
10226
|
+
...props,
|
|
10227
|
+
children: [
|
|
10228
|
+
onClientSelect ? /* @__PURE__ */ jsxs(
|
|
10229
|
+
"button",
|
|
10230
|
+
{
|
|
10231
|
+
type: "button",
|
|
10232
|
+
onClick: onClientSelect,
|
|
10233
|
+
className: "rounded-btn hover:bg-surface-2 focus-visible:bg-surface-2 -m-1 flex min-w-0 flex-1 items-center gap-2.5 p-1 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
|
|
10234
|
+
children: [
|
|
10235
|
+
avatar,
|
|
10236
|
+
text
|
|
10237
|
+
]
|
|
10238
|
+
}
|
|
10239
|
+
) : /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2.5", children: [
|
|
10240
|
+
avatar,
|
|
10241
|
+
text
|
|
10242
|
+
] }),
|
|
10243
|
+
member && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: member })
|
|
10244
|
+
]
|
|
10245
|
+
}
|
|
10246
|
+
);
|
|
10247
|
+
}
|
|
10248
|
+
);
|
|
10249
|
+
TimeLoggerContextRow.displayName = "TimeLoggerContextRow";
|
|
10250
|
+
var TimeLoggerTimer = forwardRef(
|
|
10251
|
+
function TimeLoggerTimer2({
|
|
10252
|
+
phase,
|
|
10253
|
+
elapsedMs,
|
|
10254
|
+
value,
|
|
10255
|
+
onValueChange,
|
|
10256
|
+
placeholder = "Enter time (ex: 3h 20m) or start timer",
|
|
10257
|
+
onStart,
|
|
10258
|
+
onPause,
|
|
10259
|
+
onResume,
|
|
10260
|
+
onStop,
|
|
10261
|
+
className,
|
|
10262
|
+
...props
|
|
10263
|
+
}, ref) {
|
|
10264
|
+
const showClock = phase !== "idle";
|
|
10265
|
+
const canStop = phase === "running" || phase === "paused";
|
|
10266
|
+
return /* @__PURE__ */ jsxs(
|
|
10267
|
+
"div",
|
|
10268
|
+
{
|
|
10269
|
+
ref,
|
|
10270
|
+
className: cn("border-rule-soft flex items-center gap-2 border-t px-4 py-2.5", className),
|
|
10271
|
+
...props,
|
|
10272
|
+
children: [
|
|
10273
|
+
/* @__PURE__ */ jsx(
|
|
10274
|
+
"input",
|
|
10275
|
+
{
|
|
10276
|
+
className: cn(
|
|
10277
|
+
"text-fg placeholder:text-fg-4 min-w-0 flex-1 border-0 bg-transparent outline-none",
|
|
10278
|
+
showClock ? "font-mono text-[22px] font-medium tracking-tight tabular-nums" : "text-[15px]"
|
|
10279
|
+
),
|
|
10280
|
+
value: showClock ? formatClock(elapsedMs) : value ?? "",
|
|
10281
|
+
onChange: (event) => onValueChange?.(event.target.value),
|
|
10282
|
+
placeholder,
|
|
10283
|
+
readOnly: showClock,
|
|
10284
|
+
"aria-label": "Tracked time"
|
|
10285
|
+
}
|
|
10286
|
+
),
|
|
10287
|
+
/* @__PURE__ */ jsx(
|
|
10288
|
+
Button,
|
|
10289
|
+
{
|
|
10290
|
+
type: "button",
|
|
10291
|
+
variant: "secondary",
|
|
10292
|
+
size: "icon",
|
|
10293
|
+
className: "rounded-full",
|
|
10294
|
+
"aria-label": phase === "paused" ? "Resume timer" : "Pause timer",
|
|
10295
|
+
disabled: phase === "idle" || phase === "stopped",
|
|
10296
|
+
onClick: phase === "paused" ? onResume : onPause,
|
|
10297
|
+
children: phase === "paused" ? /* @__PURE__ */ jsx(PlayIcon, {}) : /* @__PURE__ */ jsx(PauseIcon, {})
|
|
10298
|
+
}
|
|
10299
|
+
),
|
|
10300
|
+
canStop ? /* @__PURE__ */ jsx(
|
|
10301
|
+
Button,
|
|
10302
|
+
{
|
|
10303
|
+
type: "button",
|
|
10304
|
+
variant: "destructive",
|
|
10305
|
+
size: "icon",
|
|
10306
|
+
className: "rounded-full",
|
|
10307
|
+
"aria-label": "Stop timer",
|
|
10308
|
+
onClick: onStop,
|
|
10309
|
+
children: /* @__PURE__ */ jsx(StopIcon, {})
|
|
10310
|
+
}
|
|
10311
|
+
) : /* @__PURE__ */ jsx(
|
|
10312
|
+
Button,
|
|
10313
|
+
{
|
|
10314
|
+
type: "button",
|
|
10315
|
+
variant: "primary",
|
|
10316
|
+
size: "icon",
|
|
10317
|
+
className: "rounded-full",
|
|
10318
|
+
"aria-label": "Start timer",
|
|
10319
|
+
onClick: onStart,
|
|
10320
|
+
children: /* @__PURE__ */ jsx(PlayIcon, {})
|
|
10321
|
+
}
|
|
10322
|
+
)
|
|
10323
|
+
]
|
|
10324
|
+
}
|
|
10325
|
+
);
|
|
10326
|
+
}
|
|
10327
|
+
);
|
|
10328
|
+
TimeLoggerTimer.displayName = "TimeLoggerTimer";
|
|
10329
|
+
var TimeLoggerField = forwardRef(
|
|
10330
|
+
function TimeLoggerField2({ icon, label, onSelect, trailing, muted, className, children, ...props }, ref) {
|
|
10331
|
+
const interactive = Boolean(onSelect);
|
|
10332
|
+
const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
10333
|
+
icon && /* @__PURE__ */ jsx(
|
|
10334
|
+
"span",
|
|
10335
|
+
{
|
|
10336
|
+
className: "text-fg-4 flex size-[17px] shrink-0 items-center justify-center [&_svg]:size-[17px]",
|
|
10337
|
+
"aria-hidden": "true",
|
|
10338
|
+
children: icon
|
|
10339
|
+
}
|
|
10340
|
+
),
|
|
10341
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
10342
|
+
label && /* @__PURE__ */ jsx("span", { className: "text-fg-3 block text-[11px] leading-tight", children: label }),
|
|
10343
|
+
/* @__PURE__ */ jsx("span", { className: cn("block truncate", muted ? "text-fg-3" : "text-fg-2"), children })
|
|
10344
|
+
] }),
|
|
10345
|
+
trailing !== void 0 ? trailing : interactive ? /* @__PURE__ */ jsx(ChevronRightIcon, { className: "text-fg-4 size-4 shrink-0" }) : null
|
|
10346
|
+
] });
|
|
10347
|
+
const classes = cn(
|
|
10348
|
+
"border-rule-soft flex w-full items-center gap-3 border-t px-4 py-2.5 text-left",
|
|
10349
|
+
interactive && "hover:bg-surface-2 focus-visible:bg-surface-2 cursor-pointer transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none motion-reduce:transition-none",
|
|
10350
|
+
className
|
|
10351
|
+
);
|
|
10352
|
+
if (interactive) {
|
|
10353
|
+
return /* @__PURE__ */ jsx(
|
|
10354
|
+
"button",
|
|
10355
|
+
{
|
|
10356
|
+
ref,
|
|
10357
|
+
type: "button",
|
|
10358
|
+
onClick: onSelect,
|
|
10359
|
+
className: classes,
|
|
10360
|
+
...props,
|
|
10361
|
+
children: inner
|
|
10362
|
+
}
|
|
10363
|
+
);
|
|
10364
|
+
}
|
|
10365
|
+
return /* @__PURE__ */ jsx("div", { ref, className: classes, ...props, children: inner });
|
|
10366
|
+
}
|
|
10367
|
+
);
|
|
10368
|
+
TimeLoggerField.displayName = "TimeLoggerField";
|
|
10369
|
+
var TimeLoggerNotes = forwardRef(
|
|
10370
|
+
function TimeLoggerNotes2({ value, onValueChange, icon, placeholder = "Add notes", className, ...props }, ref) {
|
|
10371
|
+
return /* @__PURE__ */ jsxs("div", { className: "border-rule-soft flex items-center gap-3 border-t px-4 py-2.5", children: [
|
|
10372
|
+
/* @__PURE__ */ jsx(
|
|
10373
|
+
"span",
|
|
10374
|
+
{
|
|
10375
|
+
className: "text-fg-4 flex size-[17px] shrink-0 items-center justify-center [&_svg]:size-[17px]",
|
|
10376
|
+
"aria-hidden": "true",
|
|
10377
|
+
children: icon ?? /* @__PURE__ */ jsx(FileTextIcon, {})
|
|
10378
|
+
}
|
|
10379
|
+
),
|
|
10380
|
+
/* @__PURE__ */ jsx(
|
|
10381
|
+
"input",
|
|
10382
|
+
{
|
|
10383
|
+
ref,
|
|
10384
|
+
type: "text",
|
|
10385
|
+
value: value ?? "",
|
|
10386
|
+
onChange: (event) => onValueChange?.(event.target.value),
|
|
10387
|
+
placeholder,
|
|
10388
|
+
"aria-label": "Notes",
|
|
10389
|
+
className: cn(
|
|
10390
|
+
"text-fg placeholder:text-fg-4 min-w-0 flex-1 border-0 bg-transparent text-sm outline-none",
|
|
10391
|
+
className
|
|
10392
|
+
),
|
|
10393
|
+
...props
|
|
10394
|
+
}
|
|
10395
|
+
)
|
|
10396
|
+
] });
|
|
10397
|
+
}
|
|
10398
|
+
);
|
|
10399
|
+
TimeLoggerNotes.displayName = "TimeLoggerNotes";
|
|
10400
|
+
var TimeLoggerBillable = forwardRef(
|
|
10401
|
+
function TimeLoggerBillable2({
|
|
10402
|
+
billable,
|
|
10403
|
+
onBillableChange,
|
|
10404
|
+
label,
|
|
10405
|
+
tiers,
|
|
10406
|
+
tierId,
|
|
10407
|
+
onTierChange,
|
|
10408
|
+
currency = "USD",
|
|
10409
|
+
amount,
|
|
10410
|
+
className,
|
|
10411
|
+
...props
|
|
10412
|
+
}, ref) {
|
|
10413
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex min-w-0 items-center gap-2.5", className), ...props, children: [
|
|
10414
|
+
/* @__PURE__ */ jsx(
|
|
10415
|
+
Switch,
|
|
10416
|
+
{
|
|
10417
|
+
size: "sm",
|
|
10418
|
+
checked: billable,
|
|
10419
|
+
onCheckedChange: onBillableChange,
|
|
10420
|
+
"aria-label": "Billable"
|
|
10421
|
+
}
|
|
10422
|
+
),
|
|
10423
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[13px] whitespace-nowrap", children: label ?? (billable ? "Billable" : "Non-billable") }),
|
|
10424
|
+
tiers && tiers.length > 0 && /* @__PURE__ */ jsxs(Popover, { children: [
|
|
10425
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
10426
|
+
"button",
|
|
10427
|
+
{
|
|
10428
|
+
type: "button",
|
|
10429
|
+
"aria-label": "Billing settings",
|
|
10430
|
+
className: "text-fg-4 hover:text-fg-2 hover:bg-bg-2 rounded-btn flex size-6 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none [&_svg]:size-4",
|
|
10431
|
+
children: /* @__PURE__ */ jsx(SettingsIcon, {})
|
|
10432
|
+
}
|
|
10433
|
+
) }),
|
|
10434
|
+
/* @__PURE__ */ jsxs(PopoverContent, { align: "start", side: "top", className: "w-56 p-1.5", children: [
|
|
10435
|
+
/* @__PURE__ */ jsxs("p", { className: "text-fg-3 px-2 pt-1 pb-1.5 font-mono text-[10px] tracking-wider uppercase", children: [
|
|
10436
|
+
"Pricing tier \xB7 ",
|
|
10437
|
+
currency
|
|
10438
|
+
] }),
|
|
10439
|
+
tiers.map((tier) => {
|
|
10440
|
+
const selected = tier.id === tierId;
|
|
10441
|
+
return /* @__PURE__ */ jsx(PopoverClose, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
10442
|
+
"button",
|
|
10443
|
+
{
|
|
10444
|
+
type: "button",
|
|
10445
|
+
onClick: () => onTierChange?.(tier.id),
|
|
10446
|
+
className: "hover:bg-surface-2 flex w-full items-center gap-2 rounded-md px-2 py-2 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
|
|
10447
|
+
children: [
|
|
10448
|
+
/* @__PURE__ */ jsx(
|
|
10449
|
+
"span",
|
|
10450
|
+
{
|
|
10451
|
+
className: cn(
|
|
10452
|
+
"flex-1 truncate text-[13px]",
|
|
10453
|
+
selected ? "text-pro-fg font-medium" : "text-fg"
|
|
10454
|
+
),
|
|
10455
|
+
children: tier.name
|
|
10456
|
+
}
|
|
10457
|
+
),
|
|
10458
|
+
/* @__PURE__ */ jsxs("span", { className: "text-fg-3 font-mono text-[12.5px] tabular-nums", children: [
|
|
10459
|
+
formatCurrency(tier.rate, currency),
|
|
10460
|
+
"/hr"
|
|
10461
|
+
] }),
|
|
10462
|
+
/* @__PURE__ */ jsx(
|
|
10463
|
+
CheckIcon,
|
|
10464
|
+
{
|
|
10465
|
+
className: cn(
|
|
10466
|
+
"text-pro-fg size-4 shrink-0",
|
|
10467
|
+
selected ? "opacity-100" : "opacity-0"
|
|
10468
|
+
)
|
|
10469
|
+
}
|
|
10470
|
+
)
|
|
10471
|
+
]
|
|
10472
|
+
}
|
|
10473
|
+
) }, tier.id);
|
|
10474
|
+
})
|
|
10475
|
+
] })
|
|
10476
|
+
] }),
|
|
10477
|
+
amount != null && /* @__PURE__ */ jsx("span", { className: "text-fg-2 font-mono text-[12.5px] font-medium tabular-nums", children: amount })
|
|
10478
|
+
] });
|
|
10479
|
+
}
|
|
10480
|
+
);
|
|
10481
|
+
TimeLoggerBillable.displayName = "TimeLoggerBillable";
|
|
10482
|
+
var TimeLoggerActions = forwardRef(
|
|
10483
|
+
function TimeLoggerActions2({ className, children, ...props }, ref) {
|
|
10484
|
+
return /* @__PURE__ */ jsx(
|
|
10485
|
+
"div",
|
|
10486
|
+
{
|
|
10487
|
+
ref,
|
|
10488
|
+
className: cn(
|
|
10489
|
+
"border-rule bg-surface-2 flex items-center gap-2 border-t px-4 py-2.5",
|
|
10490
|
+
className
|
|
10491
|
+
),
|
|
10492
|
+
...props,
|
|
10493
|
+
children
|
|
10494
|
+
}
|
|
10495
|
+
);
|
|
10496
|
+
}
|
|
10497
|
+
);
|
|
10498
|
+
TimeLoggerActions.displayName = "TimeLoggerActions";
|
|
10499
|
+
var TimeLoggerEntryList = forwardRef(
|
|
10500
|
+
function TimeLoggerEntryList2({ dayLabel, total, className, children, ...props }, ref) {
|
|
10501
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("border-bg-2 border-t-[7px]", className), ...props, children: [
|
|
10502
|
+
(dayLabel || total) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 pt-2.5 pb-1 text-xs", children: [
|
|
10503
|
+
dayLabel && /* @__PURE__ */ jsx("span", { className: "text-fg-3 font-medium", children: dayLabel }),
|
|
10504
|
+
total && /* @__PURE__ */ jsx("span", { className: "text-fg-2 font-mono tabular-nums", children: total })
|
|
10505
|
+
] }),
|
|
10506
|
+
children
|
|
10507
|
+
] });
|
|
10508
|
+
}
|
|
10509
|
+
);
|
|
10510
|
+
TimeLoggerEntryList.displayName = "TimeLoggerEntryList";
|
|
10511
|
+
var TimeLoggerEntry = forwardRef(
|
|
10512
|
+
function TimeLoggerEntry2({ title, meta, duration, onResume, onDelete, className, ...props }, ref) {
|
|
10513
|
+
return /* @__PURE__ */ jsxs(
|
|
10514
|
+
"div",
|
|
10515
|
+
{
|
|
10516
|
+
ref,
|
|
10517
|
+
className: cn("border-rule-soft flex items-center gap-3 border-t px-4 py-2", className),
|
|
10518
|
+
...props,
|
|
10519
|
+
children: [
|
|
10520
|
+
/* @__PURE__ */ jsx(
|
|
10521
|
+
"span",
|
|
10522
|
+
{
|
|
10523
|
+
"aria-hidden": "true",
|
|
10524
|
+
className: "border-pro-fg size-[15px] shrink-0 rounded-full border-[1.5px] shadow-[inset_0_0_0_3px_var(--color-pro-fg)]"
|
|
10525
|
+
}
|
|
10526
|
+
),
|
|
10527
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
10528
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg truncate text-[13px]", children: title }),
|
|
10529
|
+
meta && /* @__PURE__ */ jsx("p", { className: "text-fg-3 truncate text-[11.5px]", children: meta })
|
|
10530
|
+
] }),
|
|
10531
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-2 font-mono text-[13px] tabular-nums", children: duration }),
|
|
10532
|
+
onResume && /* @__PURE__ */ jsx(
|
|
10533
|
+
Button,
|
|
10534
|
+
{
|
|
10535
|
+
type: "button",
|
|
10536
|
+
variant: "ghost",
|
|
10537
|
+
size: "icon-sm",
|
|
10538
|
+
className: "text-fg-3 hover:text-pro-fg hover:bg-pro-bg rounded-full",
|
|
10539
|
+
"aria-label": "Resume entry",
|
|
10540
|
+
onClick: onResume,
|
|
10541
|
+
children: /* @__PURE__ */ jsx(PlayIcon, {})
|
|
10542
|
+
}
|
|
10543
|
+
),
|
|
10544
|
+
onDelete && /* @__PURE__ */ jsx(
|
|
10545
|
+
Button,
|
|
10546
|
+
{
|
|
10547
|
+
type: "button",
|
|
10548
|
+
variant: "ghost",
|
|
10549
|
+
size: "icon-sm",
|
|
10550
|
+
className: "text-fg-3 hover:text-danger-fg hover:bg-danger-bg rounded-full",
|
|
10551
|
+
"aria-label": "Delete entry",
|
|
10552
|
+
onClick: onDelete,
|
|
10553
|
+
children: /* @__PURE__ */ jsx(Trash2Icon, {})
|
|
10554
|
+
}
|
|
10555
|
+
)
|
|
10556
|
+
]
|
|
10557
|
+
}
|
|
10558
|
+
);
|
|
10559
|
+
}
|
|
10560
|
+
);
|
|
10561
|
+
TimeLoggerEntry.displayName = "TimeLoggerEntry";
|
|
10562
|
+
var TimeLoggerFooter = forwardRef(
|
|
10563
|
+
function TimeLoggerFooter2({ className, children, ...props }, ref) {
|
|
10564
|
+
return /* @__PURE__ */ jsx(
|
|
10565
|
+
"div",
|
|
10566
|
+
{
|
|
10567
|
+
ref,
|
|
10568
|
+
className: cn("border-rule flex gap-2 border-t px-4 py-2.5 [&>*]:flex-1", className),
|
|
10569
|
+
...props,
|
|
10570
|
+
children
|
|
10571
|
+
}
|
|
10572
|
+
);
|
|
10573
|
+
}
|
|
10574
|
+
);
|
|
10575
|
+
TimeLoggerFooter.displayName = "TimeLoggerFooter";
|
|
10576
|
+
var Toolbar = forwardRef(function Toolbar2({ className, children, ...props }, ref) {
|
|
10577
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn("flex items-center gap-2", className), ...props, children });
|
|
10578
|
+
});
|
|
10579
|
+
Toolbar.displayName = "Toolbar";
|
|
10580
|
+
var filterChipVariants = cva(
|
|
10581
|
+
cn(
|
|
10582
|
+
"inline-flex items-center gap-1.5 rounded-pill font-medium border",
|
|
10583
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
10584
|
+
"motion-reduce:transition-none",
|
|
10585
|
+
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
10586
|
+
"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled disabled:border-rule"
|
|
10587
|
+
),
|
|
10588
|
+
{
|
|
10589
|
+
variants: {
|
|
10590
|
+
active: {
|
|
10591
|
+
true: "bg-pro-bg text-pro-fg border-pro-fg/30 hover:bg-pro-bg-hover",
|
|
10592
|
+
false: "bg-bg-2 text-fg-2 border-rule hover:bg-bg-3"
|
|
10593
|
+
},
|
|
10594
|
+
// Control text scale shared with Button / MultiFilterPill: sm = 13px,
|
|
10595
|
+
// md = 14px, lg = 16px. Defaults to the dense `sm` tier (toolbar control).
|
|
10596
|
+
size: {
|
|
10597
|
+
sm: "h-8 px-3 text-[13px]",
|
|
10598
|
+
md: "h-9 px-3.5 text-sm",
|
|
10599
|
+
lg: "h-10 px-4 text-base"
|
|
10600
|
+
}
|
|
10601
|
+
},
|
|
10602
|
+
defaultVariants: {
|
|
10603
|
+
active: false,
|
|
9834
10604
|
size: "sm"
|
|
9835
10605
|
}
|
|
9836
10606
|
}
|
|
@@ -9852,6 +10622,151 @@ var FilterChip = forwardRef(function FilterChip2({ active = false, size, count,
|
|
|
9852
10622
|
);
|
|
9853
10623
|
});
|
|
9854
10624
|
FilterChip.displayName = "FilterChip";
|
|
10625
|
+
var BulkActionBarContext = React36.createContext({ tone: "surface" });
|
|
10626
|
+
function actionClasses(tone, destructive) {
|
|
10627
|
+
const base = cn(
|
|
10628
|
+
"inline-flex h-8 items-center gap-1.5 rounded-btn px-3 text-[13px] font-medium",
|
|
10629
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
10630
|
+
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
10631
|
+
"disabled:pointer-events-none disabled:opacity-45",
|
|
10632
|
+
"motion-reduce:transition-none",
|
|
10633
|
+
"[&_svg]:size-4 [&_svg]:shrink-0"
|
|
10634
|
+
);
|
|
10635
|
+
if (tone === "inverse") {
|
|
10636
|
+
return cn(
|
|
10637
|
+
base,
|
|
10638
|
+
"data-[state=open]:bg-selection-floating-active-bg",
|
|
10639
|
+
destructive ? "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active" : "text-selection-floating-muted-fg hover:bg-selection-floating-hover-bg hover:text-selection-floating-fg"
|
|
10640
|
+
);
|
|
10641
|
+
}
|
|
10642
|
+
return cn(
|
|
10643
|
+
base,
|
|
10644
|
+
"data-[state=open]:bg-control-active-bg",
|
|
10645
|
+
destructive ? "text-control-destructive-fg hover:bg-control-destructive-hover-bg" : "text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg"
|
|
10646
|
+
);
|
|
10647
|
+
}
|
|
10648
|
+
var BulkActionBarAction = React36.forwardRef(function BulkActionBarAction2({ asChild = false, destructive, className, type, ...props }, ref) {
|
|
10649
|
+
const { tone } = React36.use(BulkActionBarContext);
|
|
10650
|
+
const Comp = asChild ? Slot : "button";
|
|
10651
|
+
return /* @__PURE__ */ jsx(
|
|
10652
|
+
Comp,
|
|
10653
|
+
{
|
|
10654
|
+
ref,
|
|
10655
|
+
type: asChild ? void 0 : type ?? "button",
|
|
10656
|
+
className: cn(actionClasses(tone, destructive), className),
|
|
10657
|
+
...props
|
|
10658
|
+
}
|
|
10659
|
+
);
|
|
10660
|
+
});
|
|
10661
|
+
BulkActionBarAction.displayName = "BulkActionBarAction";
|
|
10662
|
+
function BulkActionBarSeparator({ className }) {
|
|
10663
|
+
const { tone } = React36.use(BulkActionBarContext);
|
|
10664
|
+
return /* @__PURE__ */ jsx(
|
|
10665
|
+
"span",
|
|
10666
|
+
{
|
|
10667
|
+
"aria-hidden": "true",
|
|
10668
|
+
className: cn(
|
|
10669
|
+
"h-4 w-px shrink-0",
|
|
10670
|
+
tone === "inverse" ? "bg-selection-floating-rule" : "bg-control-border",
|
|
10671
|
+
className
|
|
10672
|
+
)
|
|
10673
|
+
}
|
|
10674
|
+
);
|
|
10675
|
+
}
|
|
10676
|
+
function BulkActionBarClear({
|
|
10677
|
+
variant,
|
|
10678
|
+
clearLabel,
|
|
10679
|
+
clearDisabled,
|
|
10680
|
+
onClear
|
|
10681
|
+
}) {
|
|
10682
|
+
if (variant === "page-floating") {
|
|
10683
|
+
return /* @__PURE__ */ jsx(
|
|
10684
|
+
"button",
|
|
10685
|
+
{
|
|
10686
|
+
type: "button",
|
|
10687
|
+
onClick: onClear,
|
|
10688
|
+
disabled: clearDisabled,
|
|
10689
|
+
className: cn(
|
|
10690
|
+
"text-selection-floating-muted-fg ml-1 inline-flex size-7 items-center justify-center rounded-icon",
|
|
10691
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
10692
|
+
"hover:bg-selection-floating-hover-bg hover:text-selection-floating-fg",
|
|
10693
|
+
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
10694
|
+
"disabled:pointer-events-none disabled:opacity-45 motion-reduce:transition-none"
|
|
10695
|
+
),
|
|
10696
|
+
"aria-label": clearLabel,
|
|
10697
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
|
|
10698
|
+
}
|
|
10699
|
+
);
|
|
10700
|
+
}
|
|
10701
|
+
return /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onClear, disabled: clearDisabled, children: clearLabel });
|
|
10702
|
+
}
|
|
10703
|
+
function BulkActionBar({
|
|
10704
|
+
variant = "table-inline",
|
|
10705
|
+
selectedCount,
|
|
10706
|
+
label,
|
|
10707
|
+
children,
|
|
10708
|
+
onClear,
|
|
10709
|
+
clearLabel = "Clear selection",
|
|
10710
|
+
clearDisabled,
|
|
10711
|
+
footer,
|
|
10712
|
+
className,
|
|
10713
|
+
...props
|
|
10714
|
+
}) {
|
|
10715
|
+
if (selectedCount === 0) return null;
|
|
10716
|
+
const labelText = label ?? `${selectedCount} selected`;
|
|
10717
|
+
const tone = variant === "page-floating" ? "inverse" : "surface";
|
|
10718
|
+
const content = /* @__PURE__ */ jsxs(BulkActionBarContext, { value: { tone }, children: [
|
|
10719
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium tabular-nums", children: labelText }),
|
|
10720
|
+
/* @__PURE__ */ jsx(BulkActionBarSeparator, {}),
|
|
10721
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-1", children }),
|
|
10722
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-2 flex-1" }),
|
|
10723
|
+
/* @__PURE__ */ jsx(
|
|
10724
|
+
BulkActionBarClear,
|
|
10725
|
+
{
|
|
10726
|
+
variant,
|
|
10727
|
+
clearLabel,
|
|
10728
|
+
clearDisabled,
|
|
10729
|
+
onClear
|
|
10730
|
+
}
|
|
10731
|
+
)
|
|
10732
|
+
] });
|
|
10733
|
+
if (variant === "sidebar-anchored") {
|
|
10734
|
+
return /* @__PURE__ */ jsxs(
|
|
10735
|
+
"div",
|
|
10736
|
+
{
|
|
10737
|
+
className: cn(
|
|
10738
|
+
"fixed right-6 bottom-6 left-[calc(var(--shell-sidebar-w)+1.5rem)] z-[var(--z-sticky)]",
|
|
10739
|
+
className
|
|
10740
|
+
),
|
|
10741
|
+
...props,
|
|
10742
|
+
children: [
|
|
10743
|
+
/* @__PURE__ */ jsx("div", { className: "border-rule bg-surface text-fg flex items-center gap-3 rounded-card border px-6 py-3 shadow-card", children: content }),
|
|
10744
|
+
footer
|
|
10745
|
+
]
|
|
10746
|
+
}
|
|
10747
|
+
);
|
|
10748
|
+
}
|
|
10749
|
+
if (variant === "page-floating") {
|
|
10750
|
+
return /* @__PURE__ */ jsxs(
|
|
10751
|
+
"div",
|
|
10752
|
+
{
|
|
10753
|
+
className: cn(
|
|
10754
|
+
"fixed bottom-4 left-1/2 z-[var(--z-sticky)] -translate-x-1/2",
|
|
10755
|
+
className
|
|
10756
|
+
),
|
|
10757
|
+
...props,
|
|
10758
|
+
children: [
|
|
10759
|
+
/* @__PURE__ */ jsx("div", { className: "bg-selection-floating-bg text-selection-floating-fg flex items-center gap-2 rounded-card px-3.5 py-1.5 shadow-pop", children: content }),
|
|
10760
|
+
footer
|
|
10761
|
+
]
|
|
10762
|
+
}
|
|
10763
|
+
);
|
|
10764
|
+
}
|
|
10765
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("sticky bottom-4 z-[var(--z-sticky)] mt-3", className), ...props, children: [
|
|
10766
|
+
/* @__PURE__ */ jsx("div", { className: "border-rule bg-surface mx-auto flex max-w-3xl flex-wrap items-center gap-3 rounded-full border px-4 py-2 shadow-card", children: content }),
|
|
10767
|
+
footer
|
|
10768
|
+
] });
|
|
10769
|
+
}
|
|
9855
10770
|
var PrimaryAction = forwardRef(
|
|
9856
10771
|
function PrimaryAction2({ arrow, iconRight, children, className, ...props }, ref) {
|
|
9857
10772
|
return /* @__PURE__ */ jsx(
|
|
@@ -9938,6 +10853,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
|
|
|
9938
10853
|
});
|
|
9939
10854
|
KbdHint.displayName = "KbdHint";
|
|
9940
10855
|
|
|
9941
|
-
export { 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, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, Button, 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, Content15 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, 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, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EyeIcon, EyeOffIcon, Eyebrow, FileIcon, FileReturnIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, 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, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PenSignIcon, PencilIcon, PhoneIcon, PhoneInput, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, ReceiptIcon, ReplyIcon, RotateCcwIcon, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, 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, StarIcon, StarRating, Stat, StatusIcon, Stepper, StrikethroughIcon, SubmitButton, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TeamIcon, TeamMemberSelect, Textarea, 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, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, shadows, sidebarLinkBadgeVariants, spacing, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useToast, yearToIso };
|
|
10856
|
+
export { 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, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, 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, Content15 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, 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, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EyeIcon, EyeOffIcon, Eyebrow, FileIcon, FileReturnIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, 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, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PenSignIcon, PencilIcon, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, ReceiptIcon, ReplyIcon, RotateCcwIcon, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, 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, 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, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
|
|
9942
10857
|
//# sourceMappingURL=index.js.map
|
|
9943
10858
|
//# sourceMappingURL=index.js.map
|