@assure-one/design-system 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +777 -22
- package/dist/index.js +2070 -465
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tokens/index.d.ts +21 -6
- package/dist/tokens/index.js +27 -5
- package/dist/tokens/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import * as
|
|
3
|
-
import { forwardRef,
|
|
2
|
+
import * as React37 from 'react';
|
|
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';
|
|
6
6
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -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';
|
|
@@ -91,9 +91,9 @@ var colors = {
|
|
|
91
91
|
};
|
|
92
92
|
var typography = {
|
|
93
93
|
family: {
|
|
94
|
-
display: '"
|
|
95
|
-
body: '"
|
|
96
|
-
mono: '"
|
|
94
|
+
display: '"Plus Jakarta Sans", -apple-system, system-ui, sans-serif',
|
|
95
|
+
body: '"Plus Jakarta Sans", -apple-system, system-ui, sans-serif',
|
|
96
|
+
mono: '"Plus Jakarta Sans", -apple-system, system-ui, sans-serif'
|
|
97
97
|
},
|
|
98
98
|
weight: {
|
|
99
99
|
regular: 400,
|
|
@@ -194,7 +194,7 @@ var systemTokens = {
|
|
|
194
194
|
rule: "var(--color-rule)",
|
|
195
195
|
ruleSoft: "var(--color-rule-soft)",
|
|
196
196
|
ruleStrong: "var(--color-rule-strong)",
|
|
197
|
-
/* Accent (
|
|
197
|
+
/* Accent (purple) */
|
|
198
198
|
accent: "var(--color-accent)",
|
|
199
199
|
accent2: "var(--color-accent-2)",
|
|
200
200
|
accentTint: "var(--color-accent-tint)",
|
|
@@ -229,8 +229,30 @@ var systemTokens = {
|
|
|
229
229
|
warningLine: "var(--color-warning-line)",
|
|
230
230
|
dangerFg: "var(--color-danger-fg)",
|
|
231
231
|
dangerBg: "var(--color-danger-bg)",
|
|
232
|
-
dangerLine: "var(--color-danger-line)"
|
|
232
|
+
dangerLine: "var(--color-danger-line)",
|
|
233
|
+
/* Data-viz — chart series ramp + area gradient stops */
|
|
234
|
+
chart1: "var(--color-chart-1)",
|
|
235
|
+
chart2: "var(--color-chart-2)",
|
|
236
|
+
chart3: "var(--color-chart-3)",
|
|
237
|
+
chart4: "var(--color-chart-4)",
|
|
238
|
+
chartLine: "var(--color-chart-line)",
|
|
239
|
+
chartAreaFrom: "var(--color-chart-area-from)",
|
|
240
|
+
chartAreaTo: "var(--color-chart-area-to)",
|
|
241
|
+
/* Practice service tones — fill + track tint */
|
|
242
|
+
serviceTax: "var(--color-service-tax)",
|
|
243
|
+
serviceTaxBg: "var(--color-service-tax-bg)",
|
|
244
|
+
serviceAudit: "var(--color-service-audit)",
|
|
245
|
+
serviceAuditBg: "var(--color-service-audit-bg)",
|
|
246
|
+
serviceAccounting: "var(--color-service-accounting)",
|
|
247
|
+
serviceAccountingBg: "var(--color-service-accounting-bg)"
|
|
233
248
|
},
|
|
249
|
+
/** Ordered chart series ramp — index a series by position, cycle with `% 4`. */
|
|
250
|
+
chart: [
|
|
251
|
+
"var(--color-chart-1)",
|
|
252
|
+
"var(--color-chart-2)",
|
|
253
|
+
"var(--color-chart-3)",
|
|
254
|
+
"var(--color-chart-4)"
|
|
255
|
+
],
|
|
234
256
|
gradient: {
|
|
235
257
|
brand: "var(--gradient-brand)",
|
|
236
258
|
pro: "var(--gradient-pro)",
|
|
@@ -507,6 +529,45 @@ function BuildingIcon({ size = 24, ...props }) {
|
|
|
507
529
|
}
|
|
508
530
|
) });
|
|
509
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
|
+
}
|
|
510
571
|
function MapPinIcon({ size = 24, ...props }) {
|
|
511
572
|
return /* @__PURE__ */ jsxs(Icon, { size, ...props, children: [
|
|
512
573
|
/* @__PURE__ */ jsx(
|
|
@@ -2224,7 +2285,7 @@ function PauseIcon({ size = 24, ...props }) {
|
|
|
2224
2285
|
function StopIcon({ size = 24, ...props }) {
|
|
2225
2286
|
return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2", fill: "currentColor" }) });
|
|
2226
2287
|
}
|
|
2227
|
-
var Accordion =
|
|
2288
|
+
var Accordion = React37.forwardRef(function Accordion2({ className, ...props }, ref) {
|
|
2228
2289
|
return /* @__PURE__ */ jsx(
|
|
2229
2290
|
AccordionPrimitive.Root,
|
|
2230
2291
|
{
|
|
@@ -2235,11 +2296,11 @@ var Accordion = React36.forwardRef(function Accordion2({ className, ...props },
|
|
|
2235
2296
|
);
|
|
2236
2297
|
});
|
|
2237
2298
|
Accordion.displayName = AccordionPrimitive.Root.displayName;
|
|
2238
|
-
var AccordionItem =
|
|
2299
|
+
var AccordionItem = React37.forwardRef(function AccordionItem2({ className, ...props }, ref) {
|
|
2239
2300
|
return /* @__PURE__ */ jsx(AccordionPrimitive.Item, { ref, className: cn(className), ...props });
|
|
2240
2301
|
});
|
|
2241
2302
|
AccordionItem.displayName = AccordionPrimitive.Item.displayName;
|
|
2242
|
-
var AccordionTrigger =
|
|
2303
|
+
var AccordionTrigger = React37.forwardRef(function AccordionTrigger2({ children, className, ...props }, ref) {
|
|
2243
2304
|
return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
2244
2305
|
AccordionPrimitive.Trigger,
|
|
2245
2306
|
{
|
|
@@ -2268,7 +2329,7 @@ var AccordionTrigger = React36.forwardRef(function AccordionTrigger2({ children,
|
|
|
2268
2329
|
) });
|
|
2269
2330
|
});
|
|
2270
2331
|
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
|
|
2271
|
-
var AccordionContent =
|
|
2332
|
+
var AccordionContent = React37.forwardRef(function AccordionContent2({ children, className, ...props }, ref) {
|
|
2272
2333
|
return /* @__PURE__ */ jsx(
|
|
2273
2334
|
AccordionPrimitive.Content,
|
|
2274
2335
|
{
|
|
@@ -2288,7 +2349,7 @@ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
|
|
|
2288
2349
|
var AlertDialog = AlertDialogPrimitive.Root;
|
|
2289
2350
|
var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
2290
2351
|
var AlertDialogPortal = AlertDialogPrimitive.Portal;
|
|
2291
|
-
var AlertDialogOverlay =
|
|
2352
|
+
var AlertDialogOverlay = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2292
2353
|
AlertDialogPrimitive.Overlay,
|
|
2293
2354
|
{
|
|
2294
2355
|
ref,
|
|
@@ -2303,7 +2364,7 @@ var AlertDialogOverlay = React36.forwardRef(({ className, ...props }, ref) => /*
|
|
|
2303
2364
|
}
|
|
2304
2365
|
));
|
|
2305
2366
|
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
|
|
2306
|
-
var AlertDialogContent =
|
|
2367
|
+
var AlertDialogContent = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
|
|
2307
2368
|
/* @__PURE__ */ jsx(AlertDialogOverlay, {}),
|
|
2308
2369
|
/* @__PURE__ */ jsx(
|
|
2309
2370
|
AlertDialogPrimitive.Content,
|
|
@@ -2338,7 +2399,7 @@ var AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
|
2338
2399
|
}
|
|
2339
2400
|
);
|
|
2340
2401
|
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
2341
|
-
var AlertDialogTitle =
|
|
2402
|
+
var AlertDialogTitle = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2342
2403
|
AlertDialogPrimitive.Title,
|
|
2343
2404
|
{
|
|
2344
2405
|
ref,
|
|
@@ -2350,7 +2411,7 @@ var AlertDialogTitle = React36.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
2350
2411
|
}
|
|
2351
2412
|
));
|
|
2352
2413
|
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
|
|
2353
|
-
var AlertDialogDescription =
|
|
2414
|
+
var AlertDialogDescription = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2354
2415
|
AlertDialogPrimitive.Description,
|
|
2355
2416
|
{
|
|
2356
2417
|
ref,
|
|
@@ -2359,7 +2420,7 @@ var AlertDialogDescription = React36.forwardRef(({ className, ...props }, ref) =
|
|
|
2359
2420
|
}
|
|
2360
2421
|
));
|
|
2361
2422
|
AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
|
|
2362
|
-
var AlertDialogAction =
|
|
2423
|
+
var AlertDialogAction = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2363
2424
|
AlertDialogPrimitive.Action,
|
|
2364
2425
|
{
|
|
2365
2426
|
ref,
|
|
@@ -2375,7 +2436,7 @@ var AlertDialogAction = React36.forwardRef(({ className, ...props }, ref) => /*
|
|
|
2375
2436
|
}
|
|
2376
2437
|
));
|
|
2377
2438
|
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
|
|
2378
|
-
var AlertDialogCancel =
|
|
2439
|
+
var AlertDialogCancel = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2379
2440
|
AlertDialogPrimitive.Cancel,
|
|
2380
2441
|
{
|
|
2381
2442
|
ref,
|
|
@@ -2473,7 +2534,104 @@ var AlertDescription = forwardRef(function AlertDescription2({ className, ...pro
|
|
|
2473
2534
|
return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm", className), ...props });
|
|
2474
2535
|
});
|
|
2475
2536
|
AlertDescription.displayName = "AlertDescription";
|
|
2476
|
-
var
|
|
2537
|
+
var defaultFormat = (n) => n.toLocaleString();
|
|
2538
|
+
var AreaChart = forwardRef(function AreaChart2({ data, height = 140, formatValue = defaultFormat, showAxis = true, className, ...props }, ref) {
|
|
2539
|
+
const gradientId = useId();
|
|
2540
|
+
const wrapRef = useRef(null);
|
|
2541
|
+
const [width, setWidth] = useState(620);
|
|
2542
|
+
const [hover, setHover] = useState(null);
|
|
2543
|
+
useEffect(() => {
|
|
2544
|
+
const el = wrapRef.current;
|
|
2545
|
+
if (!el) return;
|
|
2546
|
+
const ro = new ResizeObserver((entries) => {
|
|
2547
|
+
for (const entry of entries) setWidth(entry.contentRect.width);
|
|
2548
|
+
});
|
|
2549
|
+
ro.observe(el);
|
|
2550
|
+
return () => ro.disconnect();
|
|
2551
|
+
}, []);
|
|
2552
|
+
const padX = 10;
|
|
2553
|
+
const padTop = 14;
|
|
2554
|
+
const padBot = 8;
|
|
2555
|
+
const max = Math.max(...data.map((d) => d.value), 1) * 1.15;
|
|
2556
|
+
const step = data.length > 1 ? (width - padX * 2) / (data.length - 1) : 0;
|
|
2557
|
+
const pts = data.map(
|
|
2558
|
+
(d, i) => [padX + i * step, height - padBot - d.value / max * (height - padTop - padBot)]
|
|
2559
|
+
);
|
|
2560
|
+
const line = pts.map((p, i) => `${i ? "L" : "M"}${p[0].toFixed(1)} ${p[1].toFixed(1)}`).join(" ");
|
|
2561
|
+
const area = pts.length > 0 ? `${line} L${pts[pts.length - 1][0].toFixed(1)} ${height} L${pts[0][0].toFixed(1)} ${height} Z` : "";
|
|
2562
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("w-full", className), ...props, children: [
|
|
2563
|
+
/* @__PURE__ */ jsxs("div", { ref: wrapRef, className: "relative w-full", children: [
|
|
2564
|
+
/* @__PURE__ */ jsxs(
|
|
2565
|
+
"svg",
|
|
2566
|
+
{
|
|
2567
|
+
width,
|
|
2568
|
+
height,
|
|
2569
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
2570
|
+
role: "img",
|
|
2571
|
+
"aria-label": "Area trend chart",
|
|
2572
|
+
onMouseLeave: () => setHover(null),
|
|
2573
|
+
children: [
|
|
2574
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
2575
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--color-chart-area-from)" }),
|
|
2576
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--color-chart-area-to)" })
|
|
2577
|
+
] }) }),
|
|
2578
|
+
area && /* @__PURE__ */ jsx("path", { d: area, fill: `url(#${gradientId})` }),
|
|
2579
|
+
line && /* @__PURE__ */ jsx(
|
|
2580
|
+
"path",
|
|
2581
|
+
{
|
|
2582
|
+
d: line,
|
|
2583
|
+
fill: "none",
|
|
2584
|
+
stroke: "var(--color-chart-line)",
|
|
2585
|
+
strokeWidth: "2.5",
|
|
2586
|
+
strokeLinecap: "round",
|
|
2587
|
+
strokeLinejoin: "round"
|
|
2588
|
+
}
|
|
2589
|
+
),
|
|
2590
|
+
pts.map((p, i) => /* @__PURE__ */ jsxs("g", { children: [
|
|
2591
|
+
/* @__PURE__ */ jsx(
|
|
2592
|
+
"circle",
|
|
2593
|
+
{
|
|
2594
|
+
cx: p[0],
|
|
2595
|
+
cy: p[1],
|
|
2596
|
+
r: hover === i ? 5.5 : 4,
|
|
2597
|
+
fill: "var(--color-surface)",
|
|
2598
|
+
stroke: "var(--color-chart-line)",
|
|
2599
|
+
strokeWidth: "2.5",
|
|
2600
|
+
className: "transition-[r] duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none"
|
|
2601
|
+
}
|
|
2602
|
+
),
|
|
2603
|
+
/* @__PURE__ */ jsx(
|
|
2604
|
+
"rect",
|
|
2605
|
+
{
|
|
2606
|
+
x: p[0] - (step || width) / 2,
|
|
2607
|
+
y: 0,
|
|
2608
|
+
width: step || width,
|
|
2609
|
+
height,
|
|
2610
|
+
fill: "transparent",
|
|
2611
|
+
onMouseEnter: () => setHover(i)
|
|
2612
|
+
}
|
|
2613
|
+
)
|
|
2614
|
+
] }, i))
|
|
2615
|
+
]
|
|
2616
|
+
}
|
|
2617
|
+
),
|
|
2618
|
+
hover != null && pts[hover] && /* @__PURE__ */ jsxs(
|
|
2619
|
+
"div",
|
|
2620
|
+
{
|
|
2621
|
+
className: "bg-fg text-bg pointer-events-none absolute top-0 z-[var(--z-tooltip)] -translate-x-1/2 -translate-y-1 rounded-[var(--radius-icon)] px-2 py-1 text-center shadow-[var(--shadow-pop)]",
|
|
2622
|
+
style: { left: `${pts[hover][0] / width * 100}%` },
|
|
2623
|
+
children: [
|
|
2624
|
+
/* @__PURE__ */ jsx("span", { className: "block text-xs font-semibold tabular-nums", children: formatValue(data[hover].value) }),
|
|
2625
|
+
/* @__PURE__ */ jsx("span", { className: "block text-[10px] opacity-70", children: data[hover].label })
|
|
2626
|
+
]
|
|
2627
|
+
}
|
|
2628
|
+
)
|
|
2629
|
+
] }),
|
|
2630
|
+
showAxis && /* @__PURE__ */ jsx("div", { className: "text-fg-4 mt-1.5 flex justify-between text-[11px] tabular-nums", children: data.map((d) => /* @__PURE__ */ jsx("span", { children: d.label }, d.label)) })
|
|
2631
|
+
] });
|
|
2632
|
+
});
|
|
2633
|
+
AreaChart.displayName = "AreaChart";
|
|
2634
|
+
var AspectRatio = React37.forwardRef(function AspectRatio2({ className, ratio = 16 / 9, ...props }, ref) {
|
|
2477
2635
|
return /* @__PURE__ */ jsx(
|
|
2478
2636
|
AspectRatioPrimitive.Root,
|
|
2479
2637
|
{
|
|
@@ -2485,6 +2643,292 @@ var AspectRatio = React36.forwardRef(function AspectRatio2({ className, ratio =
|
|
|
2485
2643
|
);
|
|
2486
2644
|
});
|
|
2487
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";
|
|
2488
2932
|
var avatarVariants = cva(
|
|
2489
2933
|
cn(
|
|
2490
2934
|
"relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full",
|
|
@@ -2526,7 +2970,7 @@ var statusDotSizes = {
|
|
|
2526
2970
|
function getInitials(name) {
|
|
2527
2971
|
return name.split(" ").map((part) => part[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
2528
2972
|
}
|
|
2529
|
-
var Avatar =
|
|
2973
|
+
var Avatar = React37.forwardRef(
|
|
2530
2974
|
function Avatar2({ src, alt, name, size = "md", variant = "initials", status, className, ...props }, ref) {
|
|
2531
2975
|
const initials = name ? getInitials(name) : "?";
|
|
2532
2976
|
const resolvedSize = size ?? "md";
|
|
@@ -2750,120 +3194,6 @@ var BreadcrumbSeparator = forwardRef(
|
|
|
2750
3194
|
}
|
|
2751
3195
|
);
|
|
2752
3196
|
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
|
|
2753
|
-
var spinnerVariants = cva(
|
|
2754
|
-
"inline-flex shrink-0 items-center justify-center [&_svg]:motion-reduce:animate-none",
|
|
2755
|
-
{
|
|
2756
|
-
variants: {
|
|
2757
|
-
size: {
|
|
2758
|
-
xs: "[&_svg]:size-3",
|
|
2759
|
-
sm: "[&_svg]:size-4",
|
|
2760
|
-
md: "[&_svg]:size-5",
|
|
2761
|
-
lg: "[&_svg]:size-6"
|
|
2762
|
-
},
|
|
2763
|
-
tone: {
|
|
2764
|
-
current: "text-current",
|
|
2765
|
-
muted: "text-fg-3",
|
|
2766
|
-
accent: "text-accent",
|
|
2767
|
-
success: "text-success-fg",
|
|
2768
|
-
warning: "text-warning-fg",
|
|
2769
|
-
destructive: "text-danger-fg"
|
|
2770
|
-
}
|
|
2771
|
-
},
|
|
2772
|
-
defaultVariants: {
|
|
2773
|
-
size: "md",
|
|
2774
|
-
tone: "current"
|
|
2775
|
-
}
|
|
2776
|
-
}
|
|
2777
|
-
);
|
|
2778
|
-
var Spinner = forwardRef(function Spinner2({ size, tone, label, className, ...props }, ref) {
|
|
2779
|
-
return /* @__PURE__ */ jsxs(
|
|
2780
|
-
"span",
|
|
2781
|
-
{
|
|
2782
|
-
ref,
|
|
2783
|
-
role: label ? "status" : void 0,
|
|
2784
|
-
"aria-live": label ? "polite" : void 0,
|
|
2785
|
-
className: cn(spinnerVariants({ size, tone }), className),
|
|
2786
|
-
...props,
|
|
2787
|
-
children: [
|
|
2788
|
-
/* @__PURE__ */ jsx(LoaderIcon, { className: "animate-spin", "aria-hidden": "true" }),
|
|
2789
|
-
label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
|
|
2790
|
-
]
|
|
2791
|
-
}
|
|
2792
|
-
);
|
|
2793
|
-
});
|
|
2794
|
-
Spinner.displayName = "Spinner";
|
|
2795
|
-
var buttonVariants = cva(
|
|
2796
|
-
cn(
|
|
2797
|
-
"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap",
|
|
2798
|
-
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
2799
|
-
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
2800
|
-
"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled",
|
|
2801
|
-
"motion-reduce:transition-none",
|
|
2802
|
-
"[&_svg]:size-4 [&_svg]:shrink-0"
|
|
2803
|
-
),
|
|
2804
|
-
{
|
|
2805
|
-
variants: {
|
|
2806
|
-
variant: {
|
|
2807
|
-
primary: "bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active",
|
|
2808
|
-
secondary: "bg-control-secondary-bg text-control-fg border border-control-border hover:bg-control-active-bg hover:border-control-border-strong",
|
|
2809
|
-
destructive: "bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active",
|
|
2810
|
-
success: "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
|
|
2811
|
-
ghost: "bg-control-bg text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg",
|
|
2812
|
-
outline: "border border-control-border-strong bg-control-bg text-control-fg hover:bg-control-hover-bg hover:border-control-border-hover",
|
|
2813
|
-
link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto",
|
|
2814
|
-
accent: "bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active",
|
|
2815
|
-
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"
|
|
2816
|
-
},
|
|
2817
|
-
size: {
|
|
2818
|
-
sm: "h-8 px-3 text-[13px] gap-1.5",
|
|
2819
|
-
md: "h-10 px-4 text-sm gap-2",
|
|
2820
|
-
lg: "h-12 px-6 text-base gap-2",
|
|
2821
|
-
// Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).
|
|
2822
|
-
// `icon-xs` / `icon-sm` are for dense in-row action stacks where
|
|
2823
|
-
// `size="icon"` (40×40) would visually crowd the row.
|
|
2824
|
-
"icon-xs": "size-6 [&_svg]:size-3.5",
|
|
2825
|
-
"icon-sm": "size-7 [&_svg]:size-4",
|
|
2826
|
-
icon: "size-10"
|
|
2827
|
-
}
|
|
2828
|
-
},
|
|
2829
|
-
defaultVariants: {
|
|
2830
|
-
variant: "primary",
|
|
2831
|
-
size: "md"
|
|
2832
|
-
}
|
|
2833
|
-
}
|
|
2834
|
-
);
|
|
2835
|
-
var Button = forwardRef(function Button2({
|
|
2836
|
-
variant,
|
|
2837
|
-
size,
|
|
2838
|
-
asChild = false,
|
|
2839
|
-
loading,
|
|
2840
|
-
iconLeft,
|
|
2841
|
-
iconRight,
|
|
2842
|
-
disabled,
|
|
2843
|
-
children,
|
|
2844
|
-
className,
|
|
2845
|
-
...props
|
|
2846
|
-
}, ref) {
|
|
2847
|
-
const Comp = asChild ? Slot : "button";
|
|
2848
|
-
if (asChild) {
|
|
2849
|
-
return /* @__PURE__ */ jsx(Comp, { ref, className: cn(buttonVariants({ variant, size }), className), ...props, children });
|
|
2850
|
-
}
|
|
2851
|
-
return /* @__PURE__ */ jsxs(
|
|
2852
|
-
Comp,
|
|
2853
|
-
{
|
|
2854
|
-
ref,
|
|
2855
|
-
disabled: disabled || loading,
|
|
2856
|
-
className: cn(buttonVariants({ variant, size }), className),
|
|
2857
|
-
...props,
|
|
2858
|
-
children: [
|
|
2859
|
-
loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
|
|
2860
|
-
children,
|
|
2861
|
-
iconRight && !loading && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
|
|
2862
|
-
]
|
|
2863
|
-
}
|
|
2864
|
-
);
|
|
2865
|
-
});
|
|
2866
|
-
Button.displayName = "Button";
|
|
2867
3197
|
var HIGHLIGHT_COLORS = {
|
|
2868
3198
|
primary: "after:bg-pro-fg",
|
|
2869
3199
|
success: "after:bg-success-fg",
|
|
@@ -2881,7 +3211,7 @@ function Calendar({
|
|
|
2881
3211
|
classNames,
|
|
2882
3212
|
...props
|
|
2883
3213
|
}) {
|
|
2884
|
-
const { modifiers, modifiersClassNames } =
|
|
3214
|
+
const { modifiers, modifiersClassNames } = React37.useMemo(() => {
|
|
2885
3215
|
const buckets = {};
|
|
2886
3216
|
for (const h of highlights) {
|
|
2887
3217
|
const key = h.color ?? "primary";
|
|
@@ -2896,7 +3226,7 @@ function Calendar({
|
|
|
2896
3226
|
}
|
|
2897
3227
|
return { modifiers: mods, modifiersClassNames: modClasses };
|
|
2898
3228
|
}, [highlights]);
|
|
2899
|
-
const disabledMatcher =
|
|
3229
|
+
const disabledMatcher = React37.useMemo(() => {
|
|
2900
3230
|
if (!minDate && !maxDate) return void 0;
|
|
2901
3231
|
if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];
|
|
2902
3232
|
if (minDate) return { before: minDate };
|
|
@@ -3028,7 +3358,42 @@ var CardAction = forwardRef(
|
|
|
3028
3358
|
}
|
|
3029
3359
|
);
|
|
3030
3360
|
CardAction.displayName = "CardAction";
|
|
3031
|
-
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 = React37.forwardRef(function Checkbox2({
|
|
3032
3397
|
label,
|
|
3033
3398
|
indeterminate,
|
|
3034
3399
|
checked,
|
|
@@ -3038,7 +3403,7 @@ var Checkbox = React36.forwardRef(function Checkbox2({
|
|
|
3038
3403
|
id: providedId,
|
|
3039
3404
|
...props
|
|
3040
3405
|
}, ref) {
|
|
3041
|
-
const generatedId =
|
|
3406
|
+
const generatedId = React37.useId();
|
|
3042
3407
|
const id = providedId ?? generatedId;
|
|
3043
3408
|
const resolvedChecked = indeterminate ? "indeterminate" : checked;
|
|
3044
3409
|
return /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
|
|
@@ -3079,7 +3444,7 @@ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
|
3079
3444
|
var SelectRoot = SelectPrimitive.Root;
|
|
3080
3445
|
var SelectGroup = SelectPrimitive.Group;
|
|
3081
3446
|
var SelectValue = SelectPrimitive.Value;
|
|
3082
|
-
var SelectTrigger =
|
|
3447
|
+
var SelectTrigger = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3083
3448
|
SelectPrimitive.Trigger,
|
|
3084
3449
|
{
|
|
3085
3450
|
ref,
|
|
@@ -3110,7 +3475,7 @@ var SelectTrigger = React36.forwardRef(({ className, children, ...props }, ref)
|
|
|
3110
3475
|
}
|
|
3111
3476
|
));
|
|
3112
3477
|
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
3113
|
-
var SelectScrollUpButton =
|
|
3478
|
+
var SelectScrollUpButton = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3114
3479
|
SelectPrimitive.ScrollUpButton,
|
|
3115
3480
|
{
|
|
3116
3481
|
ref,
|
|
@@ -3120,7 +3485,7 @@ var SelectScrollUpButton = React36.forwardRef(({ className, ...props }, ref) =>
|
|
|
3120
3485
|
}
|
|
3121
3486
|
));
|
|
3122
3487
|
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
3123
|
-
var SelectScrollDownButton =
|
|
3488
|
+
var SelectScrollDownButton = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3124
3489
|
SelectPrimitive.ScrollDownButton,
|
|
3125
3490
|
{
|
|
3126
3491
|
ref,
|
|
@@ -3130,7 +3495,7 @@ var SelectScrollDownButton = React36.forwardRef(({ className, ...props }, ref) =
|
|
|
3130
3495
|
}
|
|
3131
3496
|
));
|
|
3132
3497
|
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
3133
|
-
var SelectContent =
|
|
3498
|
+
var SelectContent = React37.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
3134
3499
|
SelectPrimitive.Content,
|
|
3135
3500
|
{
|
|
3136
3501
|
ref,
|
|
@@ -3164,7 +3529,7 @@ var SelectContent = React36.forwardRef(({ className, children, position = "poppe
|
|
|
3164
3529
|
}
|
|
3165
3530
|
) }));
|
|
3166
3531
|
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
3167
|
-
var SelectLabel =
|
|
3532
|
+
var SelectLabel = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3168
3533
|
SelectPrimitive.Label,
|
|
3169
3534
|
{
|
|
3170
3535
|
ref,
|
|
@@ -3176,7 +3541,7 @@ var SelectLabel = React36.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
3176
3541
|
}
|
|
3177
3542
|
));
|
|
3178
3543
|
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
3179
|
-
var SelectItem =
|
|
3544
|
+
var SelectItem = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3180
3545
|
SelectPrimitive.Item,
|
|
3181
3546
|
{
|
|
3182
3547
|
ref,
|
|
@@ -3197,7 +3562,7 @@ var SelectItem = React36.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
3197
3562
|
}
|
|
3198
3563
|
));
|
|
3199
3564
|
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
3200
|
-
var SelectSeparator =
|
|
3565
|
+
var SelectSeparator = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3201
3566
|
SelectPrimitive.Separator,
|
|
3202
3567
|
{
|
|
3203
3568
|
ref,
|
|
@@ -3282,11 +3647,11 @@ function ClientSelect({
|
|
|
3282
3647
|
] });
|
|
3283
3648
|
}
|
|
3284
3649
|
ClientSelect.displayName = "ClientSelect";
|
|
3285
|
-
var Collapsible =
|
|
3650
|
+
var Collapsible = React37.forwardRef(function Collapsible2({ className, ...props }, ref) {
|
|
3286
3651
|
return /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, { ref, className: cn(className), ...props });
|
|
3287
3652
|
});
|
|
3288
3653
|
Collapsible.displayName = CollapsiblePrimitive.Root.displayName;
|
|
3289
|
-
var CollapsibleTrigger =
|
|
3654
|
+
var CollapsibleTrigger = React37.forwardRef(function CollapsibleTrigger2({ className, ...props }, ref) {
|
|
3290
3655
|
return /* @__PURE__ */ jsx(
|
|
3291
3656
|
CollapsiblePrimitive.Trigger,
|
|
3292
3657
|
{
|
|
@@ -3301,7 +3666,7 @@ var CollapsibleTrigger = React36.forwardRef(function CollapsibleTrigger2({ class
|
|
|
3301
3666
|
);
|
|
3302
3667
|
});
|
|
3303
3668
|
CollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName;
|
|
3304
|
-
var CollapsibleContent =
|
|
3669
|
+
var CollapsibleContent = React37.forwardRef(function CollapsibleContent2({ className, ...props }, ref) {
|
|
3305
3670
|
return /* @__PURE__ */ jsx(
|
|
3306
3671
|
CollapsiblePrimitive.Content,
|
|
3307
3672
|
{
|
|
@@ -3378,7 +3743,7 @@ ComingSoon.displayName = "ComingSoon";
|
|
|
3378
3743
|
var Dialog = DialogPrimitive.Root;
|
|
3379
3744
|
var DialogTrigger = DialogPrimitive.Trigger;
|
|
3380
3745
|
var DialogPortal = DialogPrimitive.Portal;
|
|
3381
|
-
var DialogOverlay =
|
|
3746
|
+
var DialogOverlay = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3382
3747
|
DialogPrimitive.Overlay,
|
|
3383
3748
|
{
|
|
3384
3749
|
ref,
|
|
@@ -3399,7 +3764,7 @@ var dialogSizeStyles = {
|
|
|
3399
3764
|
lg: "max-w-2xl",
|
|
3400
3765
|
full: "max-w-[calc(100vw-2rem)]"
|
|
3401
3766
|
};
|
|
3402
|
-
var DialogContent =
|
|
3767
|
+
var DialogContent = React37.forwardRef(({ size = "md", showCloseButton = true, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
3403
3768
|
/* @__PURE__ */ jsx(DialogOverlay, {}),
|
|
3404
3769
|
/* @__PURE__ */ jsxs(
|
|
3405
3770
|
DialogPrimitive.Content,
|
|
@@ -3440,7 +3805,7 @@ var DialogContent = React36.forwardRef(({ size = "md", showCloseButton = true, c
|
|
|
3440
3805
|
)
|
|
3441
3806
|
] }));
|
|
3442
3807
|
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
3443
|
-
var DialogClose =
|
|
3808
|
+
var DialogClose = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Close, { ref, className: cn(className), ...props }));
|
|
3444
3809
|
DialogClose.displayName = "DialogClose";
|
|
3445
3810
|
var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex flex-col gap-1.5 pr-8", className), ...props });
|
|
3446
3811
|
DialogHeader.displayName = "DialogHeader";
|
|
@@ -3455,7 +3820,7 @@ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
|
3455
3820
|
}
|
|
3456
3821
|
);
|
|
3457
3822
|
DialogFooter.displayName = "DialogFooter";
|
|
3458
|
-
var DialogTitle =
|
|
3823
|
+
var DialogTitle = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3459
3824
|
DialogPrimitive.Title,
|
|
3460
3825
|
{
|
|
3461
3826
|
ref,
|
|
@@ -3467,7 +3832,7 @@ var DialogTitle = React36.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
3467
3832
|
}
|
|
3468
3833
|
));
|
|
3469
3834
|
DialogTitle.displayName = DialogPrimitive.Title.displayName;
|
|
3470
|
-
var DialogDescription =
|
|
3835
|
+
var DialogDescription = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3471
3836
|
DialogPrimitive.Description,
|
|
3472
3837
|
{
|
|
3473
3838
|
ref,
|
|
@@ -3497,17 +3862,17 @@ function CommandPalette({
|
|
|
3497
3862
|
onOpenChange,
|
|
3498
3863
|
placeholder = "Type a command or search..."
|
|
3499
3864
|
}) {
|
|
3500
|
-
const [internalOpen, setInternalOpen] =
|
|
3865
|
+
const [internalOpen, setInternalOpen] = React37.useState(false);
|
|
3501
3866
|
const isControlled = controlledOpen !== void 0;
|
|
3502
3867
|
const open = isControlled ? controlledOpen : internalOpen;
|
|
3503
|
-
const setOpen =
|
|
3868
|
+
const setOpen = React37.useCallback(
|
|
3504
3869
|
(value) => {
|
|
3505
3870
|
if (!isControlled) setInternalOpen(value);
|
|
3506
3871
|
onOpenChange?.(value);
|
|
3507
3872
|
},
|
|
3508
3873
|
[isControlled, onOpenChange]
|
|
3509
3874
|
);
|
|
3510
|
-
|
|
3875
|
+
React37.useEffect(() => {
|
|
3511
3876
|
function handleKeyDown(e) {
|
|
3512
3877
|
if ((e.metaKey || e.ctrlKey) && e.key === "k") {
|
|
3513
3878
|
e.preventDefault();
|
|
@@ -3662,10 +4027,10 @@ function ConfirmActionButton({
|
|
|
3662
4027
|
onOpenChange
|
|
3663
4028
|
}) {
|
|
3664
4029
|
const isControlled = open !== void 0;
|
|
3665
|
-
const [uncontrolledOpen, setUncontrolledOpen] =
|
|
4030
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React37.useState(defaultOpen);
|
|
3666
4031
|
const resolvedOpen = isControlled ? open : uncontrolledOpen;
|
|
3667
|
-
const [pending, setPending] =
|
|
3668
|
-
const setDialogOpen =
|
|
4032
|
+
const [pending, setPending] = React37.useState(false);
|
|
4033
|
+
const setDialogOpen = React37.useCallback(
|
|
3669
4034
|
(nextOpen) => {
|
|
3670
4035
|
onOpenChange?.(nextOpen);
|
|
3671
4036
|
if (!isControlled) {
|
|
@@ -3724,7 +4089,7 @@ var ContextMenuGroup = ContextMenuPrimitive.Group;
|
|
|
3724
4089
|
var ContextMenuPortal = ContextMenuPrimitive.Portal;
|
|
3725
4090
|
var ContextMenuSub = ContextMenuPrimitive.Sub;
|
|
3726
4091
|
var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
|
|
3727
|
-
var ContextMenuSubTrigger =
|
|
4092
|
+
var ContextMenuSubTrigger = React37.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3728
4093
|
ContextMenuPrimitive.SubTrigger,
|
|
3729
4094
|
{
|
|
3730
4095
|
ref,
|
|
@@ -3745,7 +4110,7 @@ var ContextMenuSubTrigger = React36.forwardRef(({ className, inset, children, ..
|
|
|
3745
4110
|
}
|
|
3746
4111
|
));
|
|
3747
4112
|
ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
|
|
3748
|
-
var ContextMenuSubContent =
|
|
4113
|
+
var ContextMenuSubContent = React37.forwardRef(({ className, ...props }, ref) => (
|
|
3749
4114
|
// Portal the sub-content to the body. The parent Content keeps a persistent
|
|
3750
4115
|
// `scale-100` transform (its open-state animation), which makes it the
|
|
3751
4116
|
// containing block for `position: fixed` descendants — and its
|
|
@@ -3768,7 +4133,7 @@ var ContextMenuSubContent = React36.forwardRef(({ className, ...props }, ref) =>
|
|
|
3768
4133
|
) })
|
|
3769
4134
|
));
|
|
3770
4135
|
ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
|
|
3771
|
-
var ContextMenuContent =
|
|
4136
|
+
var ContextMenuContent = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
3772
4137
|
ContextMenuPrimitive.Content,
|
|
3773
4138
|
{
|
|
3774
4139
|
ref,
|
|
@@ -3784,7 +4149,7 @@ var ContextMenuContent = React36.forwardRef(({ className, ...props }, ref) => /*
|
|
|
3784
4149
|
}
|
|
3785
4150
|
) }));
|
|
3786
4151
|
ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
|
|
3787
|
-
var ContextMenuItem =
|
|
4152
|
+
var ContextMenuItem = React37.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3788
4153
|
ContextMenuPrimitive.Item,
|
|
3789
4154
|
{
|
|
3790
4155
|
ref,
|
|
@@ -3802,7 +4167,7 @@ var ContextMenuItem = React36.forwardRef(({ className, destructive, inset, ...pr
|
|
|
3802
4167
|
}
|
|
3803
4168
|
));
|
|
3804
4169
|
ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
|
|
3805
|
-
var ContextMenuCheckboxItem =
|
|
4170
|
+
var ContextMenuCheckboxItem = React37.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3806
4171
|
ContextMenuPrimitive.CheckboxItem,
|
|
3807
4172
|
{
|
|
3808
4173
|
ref,
|
|
@@ -3822,7 +4187,7 @@ var ContextMenuCheckboxItem = React36.forwardRef(({ className, children, checked
|
|
|
3822
4187
|
}
|
|
3823
4188
|
));
|
|
3824
4189
|
ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
|
|
3825
|
-
var ContextMenuRadioItem =
|
|
4190
|
+
var ContextMenuRadioItem = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3826
4191
|
ContextMenuPrimitive.RadioItem,
|
|
3827
4192
|
{
|
|
3828
4193
|
ref,
|
|
@@ -3841,7 +4206,7 @@ var ContextMenuRadioItem = React36.forwardRef(({ className, children, ...props }
|
|
|
3841
4206
|
}
|
|
3842
4207
|
));
|
|
3843
4208
|
ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
|
|
3844
|
-
var ContextMenuLabel =
|
|
4209
|
+
var ContextMenuLabel = React37.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3845
4210
|
ContextMenuPrimitive.Label,
|
|
3846
4211
|
{
|
|
3847
4212
|
ref,
|
|
@@ -3854,7 +4219,7 @@ var ContextMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref)
|
|
|
3854
4219
|
}
|
|
3855
4220
|
));
|
|
3856
4221
|
ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
|
|
3857
|
-
var ContextMenuSeparator =
|
|
4222
|
+
var ContextMenuSeparator = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3858
4223
|
ContextMenuPrimitive.Separator,
|
|
3859
4224
|
{
|
|
3860
4225
|
ref,
|
|
@@ -3949,7 +4314,7 @@ var PopoverTrigger = PopoverPrimitive.Trigger;
|
|
|
3949
4314
|
var PopoverAnchor = PopoverPrimitive.Anchor;
|
|
3950
4315
|
var PopoverPortal = PopoverPrimitive.Portal;
|
|
3951
4316
|
var PopoverClose = PopoverPrimitive.Close;
|
|
3952
|
-
var PopoverContent =
|
|
4317
|
+
var PopoverContent = React37.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
3953
4318
|
PopoverPrimitive.Content,
|
|
3954
4319
|
{
|
|
3955
4320
|
ref,
|
|
@@ -4494,7 +4859,7 @@ var chipVariants = cva(
|
|
|
4494
4859
|
}
|
|
4495
4860
|
}
|
|
4496
4861
|
);
|
|
4497
|
-
var DismissibleChip =
|
|
4862
|
+
var DismissibleChip = React37.forwardRef(function DismissibleChip2({ label, onDismiss, variant, className, ...props }, ref) {
|
|
4498
4863
|
return /* @__PURE__ */ jsxs(
|
|
4499
4864
|
"button",
|
|
4500
4865
|
{
|
|
@@ -4511,13 +4876,130 @@ var DismissibleChip = React36.forwardRef(function DismissibleChip2({ label, onDi
|
|
|
4511
4876
|
}
|
|
4512
4877
|
);
|
|
4513
4878
|
});
|
|
4879
|
+
var RAMP = [
|
|
4880
|
+
"var(--color-chart-1)",
|
|
4881
|
+
"var(--color-chart-2)",
|
|
4882
|
+
"var(--color-chart-3)",
|
|
4883
|
+
"var(--color-chart-4)"
|
|
4884
|
+
];
|
|
4885
|
+
var DonutChart = forwardRef(function DonutChart2({
|
|
4886
|
+
segments,
|
|
4887
|
+
size = 132,
|
|
4888
|
+
strokeWidth = 16,
|
|
4889
|
+
centerLabel = "Total",
|
|
4890
|
+
center,
|
|
4891
|
+
legend = true,
|
|
4892
|
+
className,
|
|
4893
|
+
...props
|
|
4894
|
+
}, ref) {
|
|
4895
|
+
const [hover, setHover] = useState(null);
|
|
4896
|
+
const titleId = useId();
|
|
4897
|
+
const total = segments.reduce((sum, s) => sum + s.value, 0) || 1;
|
|
4898
|
+
const radius = (size - strokeWidth) / 2;
|
|
4899
|
+
const circumference = 2 * Math.PI * radius;
|
|
4900
|
+
let acc = 0;
|
|
4901
|
+
const arcs = segments.map((s, i) => {
|
|
4902
|
+
const frac = s.value / total;
|
|
4903
|
+
const arc = {
|
|
4904
|
+
...s,
|
|
4905
|
+
color: s.color ?? RAMP[i % RAMP.length],
|
|
4906
|
+
dash: frac * circumference,
|
|
4907
|
+
offset: acc * circumference
|
|
4908
|
+
};
|
|
4909
|
+
acc += frac;
|
|
4910
|
+
return arc;
|
|
4911
|
+
});
|
|
4912
|
+
const active = hover != null ? arcs[hover] : null;
|
|
4913
|
+
return /* @__PURE__ */ jsxs(
|
|
4914
|
+
"div",
|
|
4915
|
+
{
|
|
4916
|
+
ref,
|
|
4917
|
+
className: cn("flex items-center gap-6", className),
|
|
4918
|
+
role: "img",
|
|
4919
|
+
"aria-labelledby": titleId,
|
|
4920
|
+
...props,
|
|
4921
|
+
children: [
|
|
4922
|
+
/* @__PURE__ */ jsxs("span", { id: titleId, className: "sr-only", children: [
|
|
4923
|
+
"Donut chart: ",
|
|
4924
|
+
arcs.map((a) => `${a.label} ${a.value}`).join(", ")
|
|
4925
|
+
] }),
|
|
4926
|
+
/* @__PURE__ */ jsxs("div", { className: "relative shrink-0", style: { width: size, height: size }, children: [
|
|
4927
|
+
/* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, "aria-hidden": "true", children: [
|
|
4928
|
+
/* @__PURE__ */ jsx(
|
|
4929
|
+
"circle",
|
|
4930
|
+
{
|
|
4931
|
+
cx: size / 2,
|
|
4932
|
+
cy: size / 2,
|
|
4933
|
+
r: radius,
|
|
4934
|
+
fill: "none",
|
|
4935
|
+
stroke: "var(--color-bg-3)",
|
|
4936
|
+
strokeWidth
|
|
4937
|
+
}
|
|
4938
|
+
),
|
|
4939
|
+
arcs.map((s, i) => /* @__PURE__ */ jsx(
|
|
4940
|
+
"circle",
|
|
4941
|
+
{
|
|
4942
|
+
cx: size / 2,
|
|
4943
|
+
cy: size / 2,
|
|
4944
|
+
r: radius,
|
|
4945
|
+
fill: "none",
|
|
4946
|
+
stroke: s.color,
|
|
4947
|
+
strokeWidth: hover === i ? strokeWidth + 3 : strokeWidth,
|
|
4948
|
+
strokeDasharray: `${s.dash} ${circumference - s.dash}`,
|
|
4949
|
+
strokeDashoffset: -s.offset,
|
|
4950
|
+
strokeLinecap: "butt",
|
|
4951
|
+
transform: `rotate(-90 ${size / 2} ${size / 2})`,
|
|
4952
|
+
className: "cursor-pointer transition-[stroke-width,opacity] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4953
|
+
style: { opacity: hover != null && hover !== i ? 0.35 : 1 },
|
|
4954
|
+
onMouseEnter: () => setHover(i),
|
|
4955
|
+
onMouseLeave: () => setHover(null)
|
|
4956
|
+
},
|
|
4957
|
+
i
|
|
4958
|
+
))
|
|
4959
|
+
] }),
|
|
4960
|
+
/* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center text-center", children: center ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4961
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg text-2xl font-semibold tabular-nums", children: active ? active.value : total }),
|
|
4962
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: active ? active.label : centerLabel })
|
|
4963
|
+
] }) })
|
|
4964
|
+
] }),
|
|
4965
|
+
legend && /* @__PURE__ */ jsx("ul", { className: "flex min-w-0 flex-col gap-1.5", children: arcs.map((s, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
4966
|
+
"button",
|
|
4967
|
+
{
|
|
4968
|
+
type: "button",
|
|
4969
|
+
onMouseEnter: () => setHover(i),
|
|
4970
|
+
onMouseLeave: () => setHover(null),
|
|
4971
|
+
onFocus: () => setHover(i),
|
|
4972
|
+
onBlur: () => setHover(null),
|
|
4973
|
+
className: cn(
|
|
4974
|
+
"flex w-full items-center gap-2 rounded-[var(--radius-icon)] px-1.5 py-1 text-left text-sm transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4975
|
+
hover === i ? "bg-bg-2" : "hover:bg-bg-2"
|
|
4976
|
+
),
|
|
4977
|
+
children: [
|
|
4978
|
+
/* @__PURE__ */ jsx(
|
|
4979
|
+
"span",
|
|
4980
|
+
{
|
|
4981
|
+
"aria-hidden": "true",
|
|
4982
|
+
className: "size-2.5 shrink-0 rounded-[3px]",
|
|
4983
|
+
style: { background: s.color }
|
|
4984
|
+
}
|
|
4985
|
+
),
|
|
4986
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-2 min-w-0 flex-1 truncate", children: s.label }),
|
|
4987
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg tabular-nums", children: s.value })
|
|
4988
|
+
]
|
|
4989
|
+
}
|
|
4990
|
+
) }, i)) })
|
|
4991
|
+
]
|
|
4992
|
+
}
|
|
4993
|
+
);
|
|
4994
|
+
});
|
|
4995
|
+
DonutChart.displayName = "DonutChart";
|
|
4514
4996
|
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
4515
4997
|
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
4516
4998
|
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
4517
4999
|
var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
4518
5000
|
var DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
4519
5001
|
var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
4520
|
-
var DropdownMenuSubTrigger =
|
|
5002
|
+
var DropdownMenuSubTrigger = React37.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
4521
5003
|
DropdownMenuPrimitive.SubTrigger,
|
|
4522
5004
|
{
|
|
4523
5005
|
ref,
|
|
@@ -4538,7 +5020,7 @@ var DropdownMenuSubTrigger = React36.forwardRef(({ className, inset, children, .
|
|
|
4538
5020
|
}
|
|
4539
5021
|
));
|
|
4540
5022
|
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
4541
|
-
var DropdownMenuSubContent =
|
|
5023
|
+
var DropdownMenuSubContent = React37.forwardRef(({ className, ...props }, ref) => (
|
|
4542
5024
|
// Portal the sub-content to the body. The parent Content keeps a persistent
|
|
4543
5025
|
// `scale-100` transform (its open-state animation), which makes it the
|
|
4544
5026
|
// containing block for `position: fixed` descendants — and its
|
|
@@ -4561,7 +5043,7 @@ var DropdownMenuSubContent = React36.forwardRef(({ className, ...props }, ref) =
|
|
|
4561
5043
|
) })
|
|
4562
5044
|
));
|
|
4563
5045
|
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
4564
|
-
var DropdownMenuContent =
|
|
5046
|
+
var DropdownMenuContent = React37.forwardRef(({ className, sideOffset = 6, align = "start", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
4565
5047
|
DropdownMenuPrimitive.Content,
|
|
4566
5048
|
{
|
|
4567
5049
|
ref,
|
|
@@ -4579,7 +5061,7 @@ var DropdownMenuContent = React36.forwardRef(({ className, sideOffset = 6, align
|
|
|
4579
5061
|
}
|
|
4580
5062
|
) }));
|
|
4581
5063
|
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
4582
|
-
var DropdownMenuItem =
|
|
5064
|
+
var DropdownMenuItem = React37.forwardRef(({ className, destructive, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4583
5065
|
DropdownMenuPrimitive.Item,
|
|
4584
5066
|
{
|
|
4585
5067
|
ref,
|
|
@@ -4597,7 +5079,7 @@ var DropdownMenuItem = React36.forwardRef(({ className, destructive, inset, ...p
|
|
|
4597
5079
|
}
|
|
4598
5080
|
));
|
|
4599
5081
|
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
4600
|
-
var DropdownMenuCheckboxItem =
|
|
5082
|
+
var DropdownMenuCheckboxItem = React37.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
4601
5083
|
DropdownMenuPrimitive.CheckboxItem,
|
|
4602
5084
|
{
|
|
4603
5085
|
ref,
|
|
@@ -4617,7 +5099,7 @@ var DropdownMenuCheckboxItem = React36.forwardRef(({ className, children, checke
|
|
|
4617
5099
|
}
|
|
4618
5100
|
));
|
|
4619
5101
|
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
4620
|
-
var DropdownMenuRadioItem =
|
|
5102
|
+
var DropdownMenuRadioItem = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
4621
5103
|
DropdownMenuPrimitive.RadioItem,
|
|
4622
5104
|
{
|
|
4623
5105
|
ref,
|
|
@@ -4636,7 +5118,7 @@ var DropdownMenuRadioItem = React36.forwardRef(({ className, children, ...props
|
|
|
4636
5118
|
}
|
|
4637
5119
|
));
|
|
4638
5120
|
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
4639
|
-
var DropdownMenuLabel =
|
|
5121
|
+
var DropdownMenuLabel = React37.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4640
5122
|
DropdownMenuPrimitive.Label,
|
|
4641
5123
|
{
|
|
4642
5124
|
ref,
|
|
@@ -4649,7 +5131,7 @@ var DropdownMenuLabel = React36.forwardRef(({ className, inset, ...props }, ref)
|
|
|
4649
5131
|
}
|
|
4650
5132
|
));
|
|
4651
5133
|
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
4652
|
-
var DropdownMenuSeparator =
|
|
5134
|
+
var DropdownMenuSeparator = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4653
5135
|
DropdownMenuPrimitive.Separator,
|
|
4654
5136
|
{
|
|
4655
5137
|
ref,
|
|
@@ -4692,6 +5174,44 @@ var EmptyState = forwardRef(function EmptyState2({ icon, title, description, act
|
|
|
4692
5174
|
);
|
|
4693
5175
|
});
|
|
4694
5176
|
EmptyState.displayName = "EmptyState";
|
|
5177
|
+
var kindTile = {
|
|
5178
|
+
doc: "bg-danger-bg text-danger-fg",
|
|
5179
|
+
sheet: "bg-success-bg text-success-fg",
|
|
5180
|
+
image: "bg-accent-tint text-accent",
|
|
5181
|
+
generic: "bg-bg-3 text-fg-3"
|
|
5182
|
+
};
|
|
5183
|
+
var FileChip = forwardRef(function FileChip2({ name, meta, kind = "doc", icon, action, className, ...props }, ref) {
|
|
5184
|
+
return /* @__PURE__ */ jsxs(
|
|
5185
|
+
"div",
|
|
5186
|
+
{
|
|
5187
|
+
ref,
|
|
5188
|
+
className: cn(
|
|
5189
|
+
"border-rule bg-surface flex items-center gap-3 rounded-[var(--radius-input)] border p-2.5",
|
|
5190
|
+
className
|
|
5191
|
+
),
|
|
5192
|
+
...props,
|
|
5193
|
+
children: [
|
|
5194
|
+
/* @__PURE__ */ jsx(
|
|
5195
|
+
"span",
|
|
5196
|
+
{
|
|
5197
|
+
"aria-hidden": "true",
|
|
5198
|
+
className: cn(
|
|
5199
|
+
"flex size-9 shrink-0 items-center justify-center rounded-[var(--radius-icon)] [&_svg]:size-4.5",
|
|
5200
|
+
kindTile[kind]
|
|
5201
|
+
),
|
|
5202
|
+
children: icon ?? /* @__PURE__ */ jsx(FileTextIcon, {})
|
|
5203
|
+
}
|
|
5204
|
+
),
|
|
5205
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
5206
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg truncate text-sm font-medium", children: name }),
|
|
5207
|
+
meta != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 truncate text-xs", children: meta })
|
|
5208
|
+
] }),
|
|
5209
|
+
action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
|
|
5210
|
+
]
|
|
5211
|
+
}
|
|
5212
|
+
);
|
|
5213
|
+
});
|
|
5214
|
+
FileChip.displayName = "FileChip";
|
|
4695
5215
|
function FileUpload({
|
|
4696
5216
|
accept,
|
|
4697
5217
|
maxSize,
|
|
@@ -4864,7 +5384,7 @@ FormSection.displayName = "FormSection";
|
|
|
4864
5384
|
var HoverCard = HoverCardPrimitive.Root;
|
|
4865
5385
|
var HoverCardTrigger = HoverCardPrimitive.Trigger;
|
|
4866
5386
|
var HoverCardPortal = HoverCardPrimitive.Portal;
|
|
4867
|
-
var HoverCardContent =
|
|
5387
|
+
var HoverCardContent = React37.forwardRef(({ className, align = "center", side = "bottom", sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
4868
5388
|
HoverCardPrimitive.Content,
|
|
4869
5389
|
{
|
|
4870
5390
|
ref,
|
|
@@ -4883,6 +5403,40 @@ var HoverCardContent = React36.forwardRef(({ className, align = "center", side =
|
|
|
4883
5403
|
}
|
|
4884
5404
|
) }));
|
|
4885
5405
|
HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
|
|
5406
|
+
var iconTileVariants = cva(
|
|
5407
|
+
cn("relative grid shrink-0 place-items-center", "[&_svg]:shrink-0"),
|
|
5408
|
+
{
|
|
5409
|
+
variants: {
|
|
5410
|
+
tone: {
|
|
5411
|
+
pro: "bg-pro-bg text-pro-fg",
|
|
5412
|
+
neutral: "bg-bg-2 text-fg-3",
|
|
5413
|
+
info: "bg-accent-tint text-accent-2",
|
|
5414
|
+
success: "bg-success-bg text-success-fg",
|
|
5415
|
+
warning: "bg-warning-bg text-warning-fg",
|
|
5416
|
+
danger: "bg-danger-bg text-danger-fg",
|
|
5417
|
+
audit: "bg-[color-mix(in_srgb,var(--color-brand-audit)_12%,transparent)] text-brand-audit",
|
|
5418
|
+
books: "bg-[color-mix(in_srgb,var(--color-brand-books)_12%,transparent)] text-brand-books",
|
|
5419
|
+
tax: "bg-[color-mix(in_srgb,var(--color-brand-tax)_12%,transparent)] text-brand-tax"
|
|
5420
|
+
},
|
|
5421
|
+
size: {
|
|
5422
|
+
sm: "size-[30px] rounded-[8px] [&_svg]:size-4",
|
|
5423
|
+
md: "size-[38px] rounded-[10px] [&_svg]:size-[18px]",
|
|
5424
|
+
lg: "size-[42px] rounded-[12px] [&_svg]:size-5"
|
|
5425
|
+
}
|
|
5426
|
+
},
|
|
5427
|
+
defaultVariants: {
|
|
5428
|
+
tone: "pro",
|
|
5429
|
+
size: "md"
|
|
5430
|
+
}
|
|
5431
|
+
}
|
|
5432
|
+
);
|
|
5433
|
+
var IconTile = forwardRef(function IconTile2({ icon, tone, size, badge, className, ...props }, ref) {
|
|
5434
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn(iconTileVariants({ tone, size }), className), ...props, children: [
|
|
5435
|
+
icon,
|
|
5436
|
+
badge != null && /* @__PURE__ */ jsx("span", { className: "absolute -top-1.5 -right-1.5 z-10 flex", children: badge })
|
|
5437
|
+
] });
|
|
5438
|
+
});
|
|
5439
|
+
IconTile.displayName = "IconTile";
|
|
4886
5440
|
var inputVariants = cva(
|
|
4887
5441
|
[
|
|
4888
5442
|
"flex w-full rounded-input border bg-surface font-body text-fg",
|
|
@@ -5002,8 +5556,8 @@ function KeyboardShortcutsDialog({
|
|
|
5002
5556
|
sections,
|
|
5003
5557
|
hotkey = "?"
|
|
5004
5558
|
} = {}) {
|
|
5005
|
-
const [open, setOpen] =
|
|
5006
|
-
|
|
5559
|
+
const [open, setOpen] = React37.useState(false);
|
|
5560
|
+
React37.useEffect(() => {
|
|
5007
5561
|
if (hotkey === null) return;
|
|
5008
5562
|
function handleKeyDown(e) {
|
|
5009
5563
|
const target = e.target;
|
|
@@ -5041,7 +5595,7 @@ function KeyboardShortcutsDialog({
|
|
|
5041
5595
|
className: "flex items-center justify-between gap-3 py-1",
|
|
5042
5596
|
children: [
|
|
5043
5597
|
/* @__PURE__ */ jsx("span", { className: "text-fg text-sm", children: shortcut.description }),
|
|
5044
|
-
/* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: shortcut.keys.map((key, i) => /* @__PURE__ */ jsxs(
|
|
5598
|
+
/* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: shortcut.keys.map((key, i) => /* @__PURE__ */ jsxs(React37.Fragment, { children: [
|
|
5045
5599
|
i > 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-4 mx-0.5 text-[11px]", children: "then" }),
|
|
5046
5600
|
/* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: key })
|
|
5047
5601
|
] }, i)) })
|
|
@@ -5060,7 +5614,7 @@ function KeyboardShortcutsDialog({
|
|
|
5060
5614
|
var labelVariants = cva(
|
|
5061
5615
|
"text-[13px] font-medium leading-none text-fg select-none peer-disabled:cursor-not-allowed peer-disabled:text-fg-disabled has-[+input:disabled]:text-fg-disabled"
|
|
5062
5616
|
);
|
|
5063
|
-
var Label4 =
|
|
5617
|
+
var Label4 = React37.forwardRef(
|
|
5064
5618
|
function Label5({ children, required, className, ...props }, ref) {
|
|
5065
5619
|
return /* @__PURE__ */ jsxs(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
|
|
5066
5620
|
children,
|
|
@@ -5226,6 +5780,80 @@ function Logo({
|
|
|
5226
5780
|
}
|
|
5227
5781
|
);
|
|
5228
5782
|
}
|
|
5783
|
+
var MasterDetailLayout = forwardRef(
|
|
5784
|
+
function MasterDetailLayout2({
|
|
5785
|
+
list,
|
|
5786
|
+
detail,
|
|
5787
|
+
detailOpen = false,
|
|
5788
|
+
onBack,
|
|
5789
|
+
backLabel = "Back",
|
|
5790
|
+
listWidth = 340,
|
|
5791
|
+
className,
|
|
5792
|
+
style,
|
|
5793
|
+
...props
|
|
5794
|
+
}, ref) {
|
|
5795
|
+
const resolvedWidth = typeof listWidth === "number" ? `${listWidth}px` : listWidth;
|
|
5796
|
+
return /* @__PURE__ */ jsxs(
|
|
5797
|
+
"div",
|
|
5798
|
+
{
|
|
5799
|
+
ref,
|
|
5800
|
+
"data-detail-open": detailOpen ? "true" : "false",
|
|
5801
|
+
className: cn(
|
|
5802
|
+
"bg-surface relative flex h-full min-h-0 w-full overflow-hidden",
|
|
5803
|
+
className
|
|
5804
|
+
),
|
|
5805
|
+
style: { "--master-list-width": resolvedWidth, ...style },
|
|
5806
|
+
...props,
|
|
5807
|
+
children: [
|
|
5808
|
+
/* @__PURE__ */ jsx(
|
|
5809
|
+
"div",
|
|
5810
|
+
{
|
|
5811
|
+
className: cn(
|
|
5812
|
+
"bg-surface flex min-h-0 w-full flex-col overflow-auto",
|
|
5813
|
+
"md:w-[var(--master-list-width)] md:shrink-0 md:border-rule md:border-r"
|
|
5814
|
+
),
|
|
5815
|
+
children: list
|
|
5816
|
+
}
|
|
5817
|
+
),
|
|
5818
|
+
/* @__PURE__ */ jsxs(
|
|
5819
|
+
"div",
|
|
5820
|
+
{
|
|
5821
|
+
className: cn(
|
|
5822
|
+
"bg-surface-2 flex min-h-0 flex-col overflow-auto",
|
|
5823
|
+
// mobile: overlay the list and slide in from the right
|
|
5824
|
+
"max-md:absolute max-md:inset-0 max-md:z-[var(--z-modal)]",
|
|
5825
|
+
"max-md:transition-transform max-md:duration-[var(--duration-normal)] max-md:ease-[var(--ease-out-quart)]",
|
|
5826
|
+
"motion-reduce:transition-none",
|
|
5827
|
+
detailOpen ? "max-md:translate-x-0" : "max-md:pointer-events-none max-md:translate-x-full",
|
|
5828
|
+
// desktop: reset to a static, independently-scrolling flex column
|
|
5829
|
+
"md:static md:z-auto md:flex-1 md:translate-x-0 md:transition-none md:pointer-events-auto"
|
|
5830
|
+
),
|
|
5831
|
+
children: [
|
|
5832
|
+
onBack && /* @__PURE__ */ jsx("div", { className: "border-rule bg-surface sticky top-0 z-[var(--z-sticky)] flex h-12 shrink-0 items-center border-b px-2 md:hidden", children: /* @__PURE__ */ jsx(
|
|
5833
|
+
"button",
|
|
5834
|
+
{
|
|
5835
|
+
type: "button",
|
|
5836
|
+
onClick: onBack,
|
|
5837
|
+
"aria-label": backLabel,
|
|
5838
|
+
className: cn(
|
|
5839
|
+
"rounded-icon text-fg-3 inline-flex size-9 items-center justify-center",
|
|
5840
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
5841
|
+
"hover:bg-surface-2 hover:text-fg",
|
|
5842
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
5843
|
+
),
|
|
5844
|
+
children: /* @__PURE__ */ jsx(ArrowLeftIcon, { className: "size-4", "aria-hidden": "true" })
|
|
5845
|
+
}
|
|
5846
|
+
) }),
|
|
5847
|
+
detail
|
|
5848
|
+
]
|
|
5849
|
+
}
|
|
5850
|
+
)
|
|
5851
|
+
]
|
|
5852
|
+
}
|
|
5853
|
+
);
|
|
5854
|
+
}
|
|
5855
|
+
);
|
|
5856
|
+
MasterDetailLayout.displayName = "MasterDetailLayout";
|
|
5229
5857
|
var TRIGGER_SIZE = {
|
|
5230
5858
|
sm: "h-8 gap-1.5 px-2.5 text-[13px]",
|
|
5231
5859
|
md: "h-9 gap-2 px-3 text-sm",
|
|
@@ -5391,7 +6019,7 @@ function MultiSelectField({
|
|
|
5391
6019
|
size = "md",
|
|
5392
6020
|
id
|
|
5393
6021
|
}) {
|
|
5394
|
-
const selected =
|
|
6022
|
+
const selected = React37.useMemo(
|
|
5395
6023
|
() => new Set(value ? value.split(",").filter(Boolean) : []),
|
|
5396
6024
|
[value]
|
|
5397
6025
|
);
|
|
@@ -5404,7 +6032,7 @@ function MultiSelectField({
|
|
|
5404
6032
|
}
|
|
5405
6033
|
onChange(Array.from(next).join(","));
|
|
5406
6034
|
};
|
|
5407
|
-
const generatedId =
|
|
6035
|
+
const generatedId = React37.useId();
|
|
5408
6036
|
const groupId = id ?? generatedId;
|
|
5409
6037
|
return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), children: [
|
|
5410
6038
|
/* @__PURE__ */ jsx(
|
|
@@ -6233,12 +6861,12 @@ var ProgressRing = forwardRef(function ProgressRing2({ value, max = 100, size =
|
|
|
6233
6861
|
);
|
|
6234
6862
|
});
|
|
6235
6863
|
ProgressRing.displayName = "ProgressRing";
|
|
6236
|
-
var RadioGroup3 =
|
|
6864
|
+
var RadioGroup3 = React37.forwardRef(function RadioGroup4({ className, ...props }, ref) {
|
|
6237
6865
|
return /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, { ref, className: cn("grid gap-2", className), ...props });
|
|
6238
6866
|
});
|
|
6239
6867
|
RadioGroup3.displayName = RadioGroupPrimitive.Root.displayName;
|
|
6240
|
-
var RadioGroupItem =
|
|
6241
|
-
const generatedId =
|
|
6868
|
+
var RadioGroupItem = React37.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
|
|
6869
|
+
const generatedId = React37.useId();
|
|
6242
6870
|
const id = providedId ?? generatedId;
|
|
6243
6871
|
const root = /* @__PURE__ */ jsx(
|
|
6244
6872
|
RadioGroupPrimitive.Item,
|
|
@@ -6273,30 +6901,290 @@ var RadioGroupItem = React36.forwardRef(function RadioGroupItem2({ className, la
|
|
|
6273
6901
|
] });
|
|
6274
6902
|
});
|
|
6275
6903
|
RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
|
|
6276
|
-
var
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
|
|
6285
|
-
|
|
6904
|
+
var RAMP2 = [
|
|
6905
|
+
"var(--color-chart-1)",
|
|
6906
|
+
"var(--color-chart-2)",
|
|
6907
|
+
"var(--color-chart-3)",
|
|
6908
|
+
"var(--color-chart-4)"
|
|
6909
|
+
];
|
|
6910
|
+
var RankedBars = forwardRef(function RankedBars2({ items, className, ...props }, ref) {
|
|
6911
|
+
return /* @__PURE__ */ jsx("ul", { ref, className: cn("flex flex-col gap-4", className), ...props, children: items.map((bar, i) => {
|
|
6912
|
+
const up = (bar.change ?? 0) >= 0;
|
|
6913
|
+
const ChangeIcon = up ? TrendingUpIcon : TrendingDownIcon;
|
|
6914
|
+
return /* @__PURE__ */ jsxs("li", { className: "flex flex-col gap-1.5", children: [
|
|
6915
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
6916
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-2 text-sm font-medium", children: bar.label }),
|
|
6917
|
+
bar.value != null && /* @__PURE__ */ jsx("span", { className: "text-fg text-sm font-semibold tabular-nums", children: bar.value })
|
|
6918
|
+
] }),
|
|
6919
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
6920
|
+
/* @__PURE__ */ jsx("div", { className: "bg-bg-3 h-2 flex-1 overflow-hidden rounded-full", children: /* @__PURE__ */ jsx(
|
|
6921
|
+
"div",
|
|
6286
6922
|
{
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6923
|
+
className: "h-full rounded-full transition-[width] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
6924
|
+
style: {
|
|
6925
|
+
width: `${Math.min(100, Math.max(0, bar.pct))}%`,
|
|
6926
|
+
background: bar.color ?? RAMP2[i % RAMP2.length]
|
|
6927
|
+
}
|
|
6290
6928
|
}
|
|
6291
|
-
),
|
|
6292
|
-
/* @__PURE__ */
|
|
6929
|
+
) }),
|
|
6930
|
+
bar.change != null && /* @__PURE__ */ jsxs(
|
|
6931
|
+
"span",
|
|
6932
|
+
{
|
|
6933
|
+
className: cn(
|
|
6934
|
+
"inline-flex shrink-0 items-center gap-0.5 text-xs font-semibold tabular-nums",
|
|
6935
|
+
up ? "text-success-fg" : "text-danger-fg"
|
|
6936
|
+
),
|
|
6937
|
+
children: [
|
|
6938
|
+
/* @__PURE__ */ jsx(ChangeIcon, { className: "size-3", "aria-hidden": "true" }),
|
|
6939
|
+
/* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
6940
|
+
up ? "Up" : "Down",
|
|
6941
|
+
" "
|
|
6942
|
+
] }),
|
|
6943
|
+
Math.abs(bar.change),
|
|
6944
|
+
"%"
|
|
6945
|
+
]
|
|
6946
|
+
}
|
|
6947
|
+
)
|
|
6948
|
+
] }),
|
|
6949
|
+
bar.sublabel != null && /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: bar.sublabel })
|
|
6950
|
+
] }, i);
|
|
6951
|
+
}) });
|
|
6952
|
+
});
|
|
6953
|
+
RankedBars.displayName = "RankedBars";
|
|
6954
|
+
var SheetSideContext = React37.createContext({});
|
|
6955
|
+
var Sheet = ({ side, children, ...props }) => /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...props, children: /* @__PURE__ */ jsx(SheetSideContext, { value: { side }, children }) });
|
|
6956
|
+
Sheet.displayName = "Sheet";
|
|
6957
|
+
var SheetTrigger = DialogPrimitive.Trigger;
|
|
6958
|
+
var SheetClose = DialogPrimitive.Close;
|
|
6959
|
+
var SheetPortal = DialogPrimitive.Portal;
|
|
6960
|
+
var SheetOverlay = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
6961
|
+
DialogPrimitive.Overlay,
|
|
6962
|
+
{
|
|
6963
|
+
ref,
|
|
6964
|
+
className: cn(
|
|
6965
|
+
"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
|
|
6966
|
+
"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
|
|
6967
|
+
"data-[state=closed]:opacity-0 data-[state=open]:opacity-100",
|
|
6968
|
+
"motion-reduce:transition-none",
|
|
6969
|
+
className
|
|
6970
|
+
),
|
|
6971
|
+
...props
|
|
6972
|
+
}
|
|
6973
|
+
));
|
|
6974
|
+
SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
6975
|
+
var sheetVariants = cva(
|
|
6976
|
+
cn(
|
|
6977
|
+
"fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop",
|
|
6978
|
+
"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
|
|
6979
|
+
"motion-reduce:transition-none"
|
|
6980
|
+
),
|
|
6981
|
+
{
|
|
6982
|
+
variants: {
|
|
6983
|
+
side: {
|
|
6984
|
+
top: cn(
|
|
6985
|
+
"inset-x-0 top-0 border-b border-rule",
|
|
6986
|
+
"data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0"
|
|
6987
|
+
),
|
|
6988
|
+
bottom: cn(
|
|
6989
|
+
"inset-x-0 bottom-0 border-t border-rule max-h-[85vh]",
|
|
6990
|
+
"data-[state=closed]:translate-y-full data-[state=open]:translate-y-0"
|
|
6991
|
+
),
|
|
6992
|
+
left: cn(
|
|
6993
|
+
"inset-y-0 left-0 h-full w-3/4 max-w-sm border-r border-rule",
|
|
6994
|
+
"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0"
|
|
6995
|
+
),
|
|
6996
|
+
right: cn(
|
|
6997
|
+
"inset-y-0 right-0 h-full w-3/4 max-w-sm border-l border-rule",
|
|
6998
|
+
"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0"
|
|
6999
|
+
)
|
|
7000
|
+
}
|
|
7001
|
+
},
|
|
7002
|
+
defaultVariants: { side: "right" }
|
|
7003
|
+
}
|
|
7004
|
+
);
|
|
7005
|
+
var sheetWidthClasses = {
|
|
7006
|
+
sm: "w-[95vw] max-w-[95vw] sm:w-[420px]",
|
|
7007
|
+
md: "w-[95vw] max-w-[95vw] sm:w-[520px]",
|
|
7008
|
+
lg: "w-[95vw] max-w-[95vw] sm:w-[640px]",
|
|
7009
|
+
xl: "w-[95vw] max-w-[95vw] sm:w-[760px]",
|
|
7010
|
+
full: "w-full max-w-none"
|
|
7011
|
+
};
|
|
7012
|
+
var SheetContent = React37.forwardRef(
|
|
7013
|
+
({ side, width = "default", customWidth, className, children, showCloseButton = true, style, ...props }, ref) => {
|
|
7014
|
+
const ctx = React37.use(SheetSideContext);
|
|
7015
|
+
const resolvedSide = side ?? ctx.side ?? "right";
|
|
7016
|
+
const supportsWidth = resolvedSide === "left" || resolvedSide === "right";
|
|
7017
|
+
const widthClass = supportsWidth && width !== "default" ? sheetWidthClasses[width] : null;
|
|
7018
|
+
const widthStyle = supportsWidth && customWidth ? { width: customWidth, maxWidth: "95vw", ...style } : style;
|
|
7019
|
+
return /* @__PURE__ */ jsxs(SheetPortal, { children: [
|
|
7020
|
+
/* @__PURE__ */ jsx(SheetOverlay, {}),
|
|
7021
|
+
/* @__PURE__ */ jsxs(
|
|
7022
|
+
DialogPrimitive.Content,
|
|
7023
|
+
{
|
|
7024
|
+
ref,
|
|
7025
|
+
className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
|
|
7026
|
+
style: widthStyle,
|
|
7027
|
+
...props,
|
|
7028
|
+
children: [
|
|
7029
|
+
children,
|
|
7030
|
+
showCloseButton && /* @__PURE__ */ jsx(
|
|
7031
|
+
DialogPrimitive.Close,
|
|
7032
|
+
{
|
|
7033
|
+
className: cn(
|
|
7034
|
+
"absolute top-4 right-4 inline-flex size-7 items-center justify-center",
|
|
7035
|
+
"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
7036
|
+
"hover:bg-overlay-hover hover:text-fg",
|
|
7037
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
7038
|
+
"disabled:pointer-events-none"
|
|
7039
|
+
),
|
|
7040
|
+
"aria-label": "Close",
|
|
7041
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
|
|
7042
|
+
}
|
|
7043
|
+
)
|
|
7044
|
+
]
|
|
7045
|
+
}
|
|
7046
|
+
)
|
|
7047
|
+
] });
|
|
7048
|
+
}
|
|
7049
|
+
);
|
|
7050
|
+
SheetContent.displayName = DialogPrimitive.Content.displayName;
|
|
7051
|
+
var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className), ...props });
|
|
7052
|
+
SheetHeader.displayName = "SheetHeader";
|
|
7053
|
+
var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
7054
|
+
"div",
|
|
7055
|
+
{
|
|
7056
|
+
className: cn(
|
|
7057
|
+
"border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end",
|
|
7058
|
+
className
|
|
7059
|
+
),
|
|
7060
|
+
...props
|
|
7061
|
+
}
|
|
7062
|
+
);
|
|
7063
|
+
SheetFooter.displayName = "SheetFooter";
|
|
7064
|
+
var SheetTitle = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
7065
|
+
DialogPrimitive.Title,
|
|
7066
|
+
{
|
|
7067
|
+
ref,
|
|
7068
|
+
className: cn(
|
|
7069
|
+
"font-display text-fg text-base leading-tight font-medium tracking-tight",
|
|
7070
|
+
className
|
|
7071
|
+
),
|
|
7072
|
+
...props
|
|
7073
|
+
}
|
|
7074
|
+
));
|
|
7075
|
+
SheetTitle.displayName = DialogPrimitive.Title.displayName;
|
|
7076
|
+
var SheetDescription = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-fg-3 text-sm", className), ...props }));
|
|
7077
|
+
SheetDescription.displayName = DialogPrimitive.Description.displayName;
|
|
7078
|
+
var MOBILE_QUERY = "(max-width: 639.98px)";
|
|
7079
|
+
function useIsMobile() {
|
|
7080
|
+
const [state, setState] = React37.useState({ isMobile: false, mounted: false });
|
|
7081
|
+
React37.useEffect(() => {
|
|
7082
|
+
const mql = window.matchMedia(MOBILE_QUERY);
|
|
7083
|
+
const update = () => setState({ isMobile: mql.matches, mounted: true });
|
|
7084
|
+
update();
|
|
7085
|
+
mql.addEventListener("change", update);
|
|
7086
|
+
return () => mql.removeEventListener("change", update);
|
|
7087
|
+
}, []);
|
|
7088
|
+
return state;
|
|
7089
|
+
}
|
|
7090
|
+
function ResponsiveDialog({
|
|
7091
|
+
open,
|
|
7092
|
+
onOpenChange,
|
|
7093
|
+
title,
|
|
7094
|
+
description,
|
|
7095
|
+
children,
|
|
7096
|
+
footer,
|
|
7097
|
+
className,
|
|
7098
|
+
side = "bottom",
|
|
7099
|
+
size = "md"
|
|
7100
|
+
}) {
|
|
7101
|
+
const { isMobile, mounted } = useIsMobile();
|
|
7102
|
+
const close = React37.useCallback(() => onOpenChange(false), [onOpenChange]);
|
|
7103
|
+
const resolvedFooter = typeof footer === "function" ? footer(close) : footer;
|
|
7104
|
+
const hasHeader = Boolean(title || description);
|
|
7105
|
+
if (mounted && isMobile) {
|
|
7106
|
+
return /* @__PURE__ */ jsx(Sheet, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
|
|
7107
|
+
SheetContent,
|
|
7108
|
+
{
|
|
7109
|
+
side,
|
|
7110
|
+
className: cn(side === "bottom" && "rounded-t-card", className),
|
|
7111
|
+
children: [
|
|
7112
|
+
side === "bottom" && /* @__PURE__ */ jsx(
|
|
7113
|
+
"span",
|
|
7114
|
+
{
|
|
7115
|
+
"aria-hidden": "true",
|
|
7116
|
+
className: "mx-auto mt-2.5 h-1 w-9 shrink-0 rounded-full bg-[color:var(--color-rule-strong)]"
|
|
7117
|
+
}
|
|
7118
|
+
),
|
|
7119
|
+
hasHeader ? /* @__PURE__ */ jsxs(SheetHeader, { children: [
|
|
7120
|
+
/* @__PURE__ */ jsx(SheetTitle, { className: cn(!title && "sr-only"), children: title ?? "Dialog" }),
|
|
7121
|
+
description && /* @__PURE__ */ jsx(SheetDescription, { children: description })
|
|
7122
|
+
] }) : /* @__PURE__ */ jsx(SheetTitle, { className: "sr-only", children: "Dialog" }),
|
|
7123
|
+
/* @__PURE__ */ jsx(
|
|
7124
|
+
"div",
|
|
7125
|
+
{
|
|
7126
|
+
className: cn(
|
|
7127
|
+
"scrollbar-thin flex-1 overflow-y-auto px-6",
|
|
7128
|
+
!resolvedFooter && "pb-6"
|
|
7129
|
+
),
|
|
7130
|
+
children
|
|
7131
|
+
}
|
|
7132
|
+
),
|
|
7133
|
+
resolvedFooter && /* @__PURE__ */ jsx(SheetFooter, { children: resolvedFooter })
|
|
7134
|
+
]
|
|
7135
|
+
}
|
|
7136
|
+
) });
|
|
7137
|
+
}
|
|
7138
|
+
return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size, className, children: [
|
|
7139
|
+
hasHeader ? /* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
7140
|
+
/* @__PURE__ */ jsx(DialogTitle, { className: cn(!title && "sr-only"), children: title ?? "Dialog" }),
|
|
7141
|
+
description && /* @__PURE__ */ jsx(DialogDescription, { children: description })
|
|
7142
|
+
] }) : /* @__PURE__ */ jsx(DialogTitle, { className: "sr-only", children: "Dialog" }),
|
|
7143
|
+
children,
|
|
7144
|
+
resolvedFooter && /* @__PURE__ */ jsx(DialogFooter, { children: resolvedFooter })
|
|
7145
|
+
] }) });
|
|
7146
|
+
}
|
|
7147
|
+
ResponsiveDialog.displayName = "ResponsiveDialog";
|
|
7148
|
+
var RouteTransition = forwardRef(
|
|
7149
|
+
function RouteTransition2({ routeKey, className, children, ...props }, ref) {
|
|
7150
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsx(
|
|
7151
|
+
"div",
|
|
7152
|
+
{
|
|
7153
|
+
className: cn(
|
|
7154
|
+
"animate-in fade-in-0 slide-in-from-bottom-2",
|
|
7155
|
+
"duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]"
|
|
7156
|
+
),
|
|
7157
|
+
children
|
|
7158
|
+
},
|
|
7159
|
+
routeKey
|
|
7160
|
+
) });
|
|
7161
|
+
}
|
|
7162
|
+
);
|
|
7163
|
+
RouteTransition.displayName = "RouteTransition";
|
|
7164
|
+
var ScrollArea = React37.forwardRef(function ScrollArea2({ className, children, ...props }, ref) {
|
|
7165
|
+
return /* @__PURE__ */ jsxs(
|
|
7166
|
+
ScrollAreaPrimitive.Root,
|
|
7167
|
+
{
|
|
7168
|
+
ref,
|
|
7169
|
+
className: cn("relative overflow-hidden", className),
|
|
7170
|
+
...props,
|
|
7171
|
+
children: [
|
|
7172
|
+
/* @__PURE__ */ jsx(
|
|
7173
|
+
ScrollAreaPrimitive.Viewport,
|
|
7174
|
+
{
|
|
7175
|
+
tabIndex: 0,
|
|
7176
|
+
className: "h-full w-full rounded-[inherit] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
7177
|
+
children
|
|
7178
|
+
}
|
|
7179
|
+
),
|
|
7180
|
+
/* @__PURE__ */ jsx(ScrollBar, {}),
|
|
6293
7181
|
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
|
|
6294
7182
|
]
|
|
6295
7183
|
}
|
|
6296
7184
|
);
|
|
6297
7185
|
});
|
|
6298
7186
|
ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
|
|
6299
|
-
var ScrollBar =
|
|
7187
|
+
var ScrollBar = React37.forwardRef(function ScrollBar2({ className, orientation = "vertical", ...props }, ref) {
|
|
6300
7188
|
return /* @__PURE__ */ jsx(
|
|
6301
7189
|
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
6302
7190
|
{
|
|
@@ -6361,7 +7249,7 @@ var searchInputVariants = cva(
|
|
|
6361
7249
|
}
|
|
6362
7250
|
}
|
|
6363
7251
|
);
|
|
6364
|
-
var SearchInput =
|
|
7252
|
+
var SearchInput = React37.forwardRef(
|
|
6365
7253
|
function SearchInput2({
|
|
6366
7254
|
value,
|
|
6367
7255
|
onValueChange,
|
|
@@ -6374,8 +7262,8 @@ var SearchInput = React36.forwardRef(
|
|
|
6374
7262
|
...props
|
|
6375
7263
|
}, ref) {
|
|
6376
7264
|
const debouncedValue = useDebounce(value, debounceMs);
|
|
6377
|
-
const isFirstRender =
|
|
6378
|
-
|
|
7265
|
+
const isFirstRender = React37.useRef(true);
|
|
7266
|
+
React37.useEffect(() => {
|
|
6379
7267
|
if (isFirstRender.current) {
|
|
6380
7268
|
isFirstRender.current = false;
|
|
6381
7269
|
return;
|
|
@@ -6453,15 +7341,15 @@ function SearchSelect({
|
|
|
6453
7341
|
descriptionVariant = "inline"
|
|
6454
7342
|
}) {
|
|
6455
7343
|
const isSingleMode = value !== void 0 || onValueChange !== void 0;
|
|
6456
|
-
const singleSelectedOption =
|
|
7344
|
+
const singleSelectedOption = React37.useMemo(
|
|
6457
7345
|
() => isSingleMode && value ? options.find((o) => o.id === value) ?? null : null,
|
|
6458
7346
|
[isSingleMode, value, options]
|
|
6459
7347
|
);
|
|
6460
|
-
const selected =
|
|
7348
|
+
const selected = React37.useMemo(
|
|
6461
7349
|
() => isSingleMode ? singleSelectedOption ? [singleSelectedOption] : [] : selectedProp ?? [],
|
|
6462
7350
|
[isSingleMode, singleSelectedOption, selectedProp]
|
|
6463
7351
|
);
|
|
6464
|
-
const onSelect =
|
|
7352
|
+
const onSelect = React37.useCallback(
|
|
6465
7353
|
(option) => {
|
|
6466
7354
|
if (isSingleMode) {
|
|
6467
7355
|
onValueChange?.(option.id);
|
|
@@ -6471,7 +7359,7 @@ function SearchSelect({
|
|
|
6471
7359
|
},
|
|
6472
7360
|
[isSingleMode, onValueChange, onSelectProp]
|
|
6473
7361
|
);
|
|
6474
|
-
const onRemove =
|
|
7362
|
+
const onRemove = React37.useCallback(
|
|
6475
7363
|
(option) => {
|
|
6476
7364
|
if (isSingleMode) {
|
|
6477
7365
|
onValueChange?.("");
|
|
@@ -6482,15 +7370,15 @@ function SearchSelect({
|
|
|
6482
7370
|
[isSingleMode, onValueChange, onRemoveProp]
|
|
6483
7371
|
);
|
|
6484
7372
|
const closeOnSelect = isSingleMode || closeOnSelectProp;
|
|
6485
|
-
const [search, setSearch] =
|
|
6486
|
-
const [open, setOpen] =
|
|
6487
|
-
const [activeChip, setActiveChip] =
|
|
6488
|
-
const selectedIds =
|
|
6489
|
-
const filtered =
|
|
7373
|
+
const [search, setSearch] = React37.useState("");
|
|
7374
|
+
const [open, setOpen] = React37.useState(false);
|
|
7375
|
+
const [activeChip, setActiveChip] = React37.useState(null);
|
|
7376
|
+
const selectedIds = React37.useMemo(() => new Set(selected.map((s) => s.id)), [selected]);
|
|
7377
|
+
const filtered = React37.useMemo(
|
|
6490
7378
|
() => options.filter((opt) => !selectedIds.has(opt.id)),
|
|
6491
7379
|
[options, selectedIds]
|
|
6492
7380
|
);
|
|
6493
|
-
const groups =
|
|
7381
|
+
const groups = React37.useMemo(() => {
|
|
6494
7382
|
const order = [];
|
|
6495
7383
|
const byGroup = /* @__PURE__ */ new Map();
|
|
6496
7384
|
for (const opt of filtered) {
|
|
@@ -6502,25 +7390,25 @@ function SearchSelect({
|
|
|
6502
7390
|
}
|
|
6503
7391
|
return order.map((g) => [g, byGroup.get(g)]);
|
|
6504
7392
|
}, [filtered]);
|
|
6505
|
-
const hasGroups =
|
|
6506
|
-
const pinnedSet =
|
|
6507
|
-
const chips =
|
|
7393
|
+
const hasGroups = React37.useMemo(() => groups.some(([g]) => g != null), [groups]);
|
|
7394
|
+
const pinnedSet = React37.useMemo(() => new Set(pinnedGroups ?? []), [pinnedGroups]);
|
|
7395
|
+
const chips = React37.useMemo(() => {
|
|
6508
7396
|
if (!groupFilter || !hasGroups) return [];
|
|
6509
7397
|
return groups.map(([g]) => g).filter((g) => g != null && !pinnedSet.has(g));
|
|
6510
7398
|
}, [groupFilter, hasGroups, groups, pinnedSet]);
|
|
6511
|
-
const visibleGroups =
|
|
7399
|
+
const visibleGroups = React37.useMemo(() => {
|
|
6512
7400
|
if (chips.length > 0 && activeChip) {
|
|
6513
7401
|
return groups.filter(([g]) => g === activeChip);
|
|
6514
7402
|
}
|
|
6515
7403
|
return groups;
|
|
6516
7404
|
}, [groups, chips.length, activeChip]);
|
|
6517
7405
|
const trimmedSearch = search.trim();
|
|
6518
|
-
const hasExactMatch =
|
|
7406
|
+
const hasExactMatch = React37.useMemo(
|
|
6519
7407
|
() => options.some((opt) => opt.label.toLowerCase() === trimmedSearch.toLowerCase()),
|
|
6520
7408
|
[options, trimmedSearch]
|
|
6521
7409
|
);
|
|
6522
7410
|
const showCreate = !!onCreate && trimmedSearch.length > 0 && !hasExactMatch;
|
|
6523
|
-
const handleSelect =
|
|
7411
|
+
const handleSelect = React37.useCallback(
|
|
6524
7412
|
(option) => {
|
|
6525
7413
|
onSelect(option);
|
|
6526
7414
|
setSearch("");
|
|
@@ -6528,16 +7416,16 @@ function SearchSelect({
|
|
|
6528
7416
|
},
|
|
6529
7417
|
[onSelect, closeOnSelect]
|
|
6530
7418
|
);
|
|
6531
|
-
const handleCreate =
|
|
7419
|
+
const handleCreate = React37.useCallback(() => {
|
|
6532
7420
|
if (onCreate && trimmedSearch) {
|
|
6533
7421
|
onCreate(trimmedSearch);
|
|
6534
7422
|
setSearch("");
|
|
6535
7423
|
setOpen(false);
|
|
6536
7424
|
}
|
|
6537
7425
|
}, [onCreate, trimmedSearch]);
|
|
6538
|
-
const inputRef =
|
|
6539
|
-
const listboxId =
|
|
6540
|
-
const setInputRef =
|
|
7426
|
+
const inputRef = React37.useRef(null);
|
|
7427
|
+
const listboxId = React37.useId();
|
|
7428
|
+
const setInputRef = React37.useCallback((node) => {
|
|
6541
7429
|
inputRef.current = node;
|
|
6542
7430
|
node?.removeAttribute("aria-labelledby");
|
|
6543
7431
|
node?.setAttribute("aria-controls", listboxId);
|
|
@@ -6546,12 +7434,12 @@ function SearchSelect({
|
|
|
6546
7434
|
const singleValue = closeOnSelect ? selected[0] ?? null : null;
|
|
6547
7435
|
const showValue = singleValue !== null && !open;
|
|
6548
7436
|
const popoverOpen = open && !disabled;
|
|
6549
|
-
|
|
7437
|
+
React37.useEffect(() => {
|
|
6550
7438
|
inputRef.current?.removeAttribute("aria-labelledby");
|
|
6551
7439
|
inputRef.current?.setAttribute("aria-controls", listboxId);
|
|
6552
7440
|
inputRef.current?.removeAttribute("aria-activedescendant");
|
|
6553
7441
|
});
|
|
6554
|
-
|
|
7442
|
+
React37.useEffect(() => {
|
|
6555
7443
|
if (open && closeOnSelect) {
|
|
6556
7444
|
const raf = requestAnimationFrame(() => inputRef.current?.focus());
|
|
6557
7445
|
return () => cancelAnimationFrame(raf);
|
|
@@ -6957,7 +7845,46 @@ var SectionHead = forwardRef(function SectionHead2({ eyebrow, title, meta, class
|
|
|
6957
7845
|
);
|
|
6958
7846
|
});
|
|
6959
7847
|
SectionHead.displayName = "SectionHead";
|
|
6960
|
-
var
|
|
7848
|
+
var toneFill = {
|
|
7849
|
+
default: "var(--color-pro-fg)",
|
|
7850
|
+
success: "var(--color-success-fg)",
|
|
7851
|
+
warning: "var(--color-warning-fg)",
|
|
7852
|
+
destructive: "var(--color-danger-fg)",
|
|
7853
|
+
info: "var(--color-accent)",
|
|
7854
|
+
tax: "var(--color-service-tax)",
|
|
7855
|
+
audit: "var(--color-service-audit)",
|
|
7856
|
+
accounting: "var(--color-service-accounting)"
|
|
7857
|
+
};
|
|
7858
|
+
var SegmentedProgress = forwardRef(
|
|
7859
|
+
function SegmentedProgress2({ steps, current, tone = "default", thickness = 6, label, className, style, ...props }, ref) {
|
|
7860
|
+
const filled = Math.min(steps, Math.max(0, current));
|
|
7861
|
+
return /* @__PURE__ */ jsx(
|
|
7862
|
+
"div",
|
|
7863
|
+
{
|
|
7864
|
+
ref,
|
|
7865
|
+
role: "progressbar",
|
|
7866
|
+
"aria-valuenow": filled,
|
|
7867
|
+
"aria-valuemin": 0,
|
|
7868
|
+
"aria-valuemax": steps,
|
|
7869
|
+
"aria-label": label ?? `Step ${filled} of ${steps}`,
|
|
7870
|
+
className: cn("flex w-full items-center gap-1", className),
|
|
7871
|
+
style: { height: thickness, ...style },
|
|
7872
|
+
...props,
|
|
7873
|
+
children: Array.from({ length: steps }, (_, i) => /* @__PURE__ */ jsx(
|
|
7874
|
+
"span",
|
|
7875
|
+
{
|
|
7876
|
+
"aria-hidden": "true",
|
|
7877
|
+
className: "h-full flex-1 rounded-full transition-colors duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
7878
|
+
style: { background: i < filled ? toneFill[tone] : "var(--color-bg-3)" }
|
|
7879
|
+
},
|
|
7880
|
+
i
|
|
7881
|
+
))
|
|
7882
|
+
}
|
|
7883
|
+
);
|
|
7884
|
+
}
|
|
7885
|
+
);
|
|
7886
|
+
SegmentedProgress.displayName = "SegmentedProgress";
|
|
7887
|
+
var Separator4 = React37.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
|
|
6961
7888
|
return /* @__PURE__ */ jsx(
|
|
6962
7889
|
SeparatorPrimitive.Root,
|
|
6963
7890
|
{
|
|
@@ -6974,160 +7901,36 @@ var Separator4 = React36.forwardRef(function Separator5({ className, orientation
|
|
|
6974
7901
|
);
|
|
6975
7902
|
});
|
|
6976
7903
|
Separator4.displayName = SeparatorPrimitive.Root.displayName;
|
|
6977
|
-
var
|
|
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 = React36.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(
|
|
7904
|
+
var sideDrawerVariants = cva(
|
|
6999
7905
|
cn(
|
|
7000
|
-
"fixed z-[var(--z-modal)] flex flex-col
|
|
7906
|
+
"fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop",
|
|
7907
|
+
"font-body",
|
|
7001
7908
|
"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
|
|
7002
7909
|
"motion-reduce:transition-none"
|
|
7003
7910
|
),
|
|
7004
7911
|
{
|
|
7005
7912
|
variants: {
|
|
7006
7913
|
side: {
|
|
7007
|
-
|
|
7008
|
-
"
|
|
7009
|
-
"data-[state=closed]
|
|
7010
|
-
|
|
7011
|
-
|
|
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"
|
|
7914
|
+
right: cn(
|
|
7915
|
+
"right-0 border-l border-rule",
|
|
7916
|
+
"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0",
|
|
7917
|
+
"data-[state=open]:animate-in data-[state=open]:slide-in-from-right",
|
|
7918
|
+
"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right"
|
|
7014
7919
|
),
|
|
7015
7920
|
left: cn(
|
|
7016
|
-
"
|
|
7017
|
-
"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0"
|
|
7018
|
-
|
|
7019
|
-
|
|
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"
|
|
7921
|
+
"left-0 border-r border-rule",
|
|
7922
|
+
"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0",
|
|
7923
|
+
"data-[state=open]:animate-in data-[state=open]:slide-in-from-left",
|
|
7924
|
+
"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left"
|
|
7022
7925
|
)
|
|
7926
|
+
},
|
|
7927
|
+
width: {
|
|
7928
|
+
sm: "w-[420px] max-md:w-[95vw]",
|
|
7929
|
+
md: "w-[640px] max-lg:w-[80vw] max-md:w-[95vw]",
|
|
7930
|
+
lg: "w-[50vw] max-lg:w-[80vw] max-md:w-[95vw]"
|
|
7023
7931
|
}
|
|
7024
7932
|
},
|
|
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 = React36.forwardRef(
|
|
7036
|
-
({ side, width = "default", customWidth, className, children, showCloseButton = true, style, ...props }, ref) => {
|
|
7037
|
-
const ctx = React36.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 = React36.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 = React36.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 sideDrawerVariants = cva(
|
|
7102
|
-
cn(
|
|
7103
|
-
"fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop",
|
|
7104
|
-
"font-body",
|
|
7105
|
-
"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
|
|
7106
|
-
"motion-reduce:transition-none"
|
|
7107
|
-
),
|
|
7108
|
-
{
|
|
7109
|
-
variants: {
|
|
7110
|
-
side: {
|
|
7111
|
-
right: cn(
|
|
7112
|
-
"right-0 border-l border-rule",
|
|
7113
|
-
"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0",
|
|
7114
|
-
"data-[state=open]:animate-in data-[state=open]:slide-in-from-right",
|
|
7115
|
-
"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right"
|
|
7116
|
-
),
|
|
7117
|
-
left: cn(
|
|
7118
|
-
"left-0 border-r border-rule",
|
|
7119
|
-
"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0",
|
|
7120
|
-
"data-[state=open]:animate-in data-[state=open]:slide-in-from-left",
|
|
7121
|
-
"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left"
|
|
7122
|
-
)
|
|
7123
|
-
},
|
|
7124
|
-
width: {
|
|
7125
|
-
sm: "w-[420px] max-md:w-[95vw]",
|
|
7126
|
-
md: "w-[640px] max-lg:w-[80vw] max-md:w-[95vw]",
|
|
7127
|
-
lg: "w-[50vw] max-lg:w-[80vw] max-md:w-[95vw]"
|
|
7128
|
-
}
|
|
7129
|
-
},
|
|
7130
|
-
defaultVariants: { side: "right", width: "lg" }
|
|
7933
|
+
defaultVariants: { side: "right", width: "lg" }
|
|
7131
7934
|
}
|
|
7132
7935
|
);
|
|
7133
7936
|
function SideDrawer({
|
|
@@ -7213,7 +8016,7 @@ function SideDrawerFooter({ children, className }) {
|
|
|
7213
8016
|
SideDrawer.Header = SideDrawerHeader;
|
|
7214
8017
|
SideDrawer.Body = SideDrawerBody;
|
|
7215
8018
|
SideDrawer.Footer = SideDrawerFooter;
|
|
7216
|
-
var Slider =
|
|
8019
|
+
var Slider = React37.forwardRef(
|
|
7217
8020
|
function Slider2({
|
|
7218
8021
|
className,
|
|
7219
8022
|
label,
|
|
@@ -7225,7 +8028,7 @@ var Slider = React36.forwardRef(
|
|
|
7225
8028
|
defaultValue,
|
|
7226
8029
|
...props
|
|
7227
8030
|
}, ref) {
|
|
7228
|
-
const generatedId =
|
|
8031
|
+
const generatedId = React37.useId();
|
|
7229
8032
|
const id = providedId ?? generatedId;
|
|
7230
8033
|
const displayValue = (() => {
|
|
7231
8034
|
const v = value ?? defaultValue;
|
|
@@ -7358,6 +8161,52 @@ var Stat = forwardRef(function Stat2({ value, label, className, ...props }, ref)
|
|
|
7358
8161
|
] });
|
|
7359
8162
|
});
|
|
7360
8163
|
Stat.displayName = "Stat";
|
|
8164
|
+
var statusDotVariants = cva("relative inline-flex shrink-0 rounded-full bg-current", {
|
|
8165
|
+
variants: {
|
|
8166
|
+
tone: {
|
|
8167
|
+
danger: "text-danger-fg",
|
|
8168
|
+
warning: "text-warning-fg",
|
|
8169
|
+
info: "text-accent",
|
|
8170
|
+
success: "text-success-fg",
|
|
8171
|
+
pro: "text-pro-fg",
|
|
8172
|
+
neutral: "text-fg-4"
|
|
8173
|
+
},
|
|
8174
|
+
size: {
|
|
8175
|
+
sm: "size-[7px]",
|
|
8176
|
+
md: "size-[9px]"
|
|
8177
|
+
},
|
|
8178
|
+
ring: {
|
|
8179
|
+
true: "shadow-[0_0_0_2px_var(--color-surface)]",
|
|
8180
|
+
false: ""
|
|
8181
|
+
}
|
|
8182
|
+
},
|
|
8183
|
+
defaultVariants: {
|
|
8184
|
+
tone: "danger",
|
|
8185
|
+
size: "sm",
|
|
8186
|
+
ring: false
|
|
8187
|
+
}
|
|
8188
|
+
});
|
|
8189
|
+
var StatusDot = forwardRef(function StatusDot2({ tone, size, ring, pulse, className, ...props }, ref) {
|
|
8190
|
+
const ariaLabel = props["aria-label"];
|
|
8191
|
+
return /* @__PURE__ */ jsx(
|
|
8192
|
+
"span",
|
|
8193
|
+
{
|
|
8194
|
+
ref,
|
|
8195
|
+
role: ariaLabel ? "img" : void 0,
|
|
8196
|
+
"aria-hidden": ariaLabel ? void 0 : true,
|
|
8197
|
+
className: cn(statusDotVariants({ tone, size, ring }), className),
|
|
8198
|
+
...props,
|
|
8199
|
+
children: pulse && /* @__PURE__ */ jsx(
|
|
8200
|
+
"span",
|
|
8201
|
+
{
|
|
8202
|
+
"aria-hidden": "true",
|
|
8203
|
+
className: "absolute inset-0 inline-flex animate-ping rounded-full bg-current opacity-75 motion-reduce:hidden"
|
|
8204
|
+
}
|
|
8205
|
+
)
|
|
8206
|
+
}
|
|
8207
|
+
);
|
|
8208
|
+
});
|
|
8209
|
+
StatusDot.displayName = "StatusDot";
|
|
7361
8210
|
var CENTER = 8;
|
|
7362
8211
|
var RING_RADIUS = 6;
|
|
7363
8212
|
var STROKE_WIDTH = 2;
|
|
@@ -7478,6 +8327,25 @@ function StatusIcon({
|
|
|
7478
8327
|
}
|
|
7479
8328
|
);
|
|
7480
8329
|
}
|
|
8330
|
+
var statusMap = {
|
|
8331
|
+
requested: { variant: "warning", label: "Requested" },
|
|
8332
|
+
"in-review": { variant: "info", label: "In review" },
|
|
8333
|
+
"needs-revision": { variant: "destructive", label: "Needs revision" },
|
|
8334
|
+
accepted: { variant: "success", label: "Accepted" },
|
|
8335
|
+
signed: { variant: "success", label: "Signed" },
|
|
8336
|
+
approved: { variant: "success", label: "Approved" },
|
|
8337
|
+
paid: { variant: "success", label: "Paid" },
|
|
8338
|
+
complete: { variant: "success", label: "Complete" },
|
|
8339
|
+
draft: { variant: "secondary", label: "Draft" },
|
|
8340
|
+
pending: { variant: "secondary", label: "Pending" },
|
|
8341
|
+
overdue: { variant: "destructive", label: "Overdue" },
|
|
8342
|
+
declined: { variant: "destructive", label: "Declined" }
|
|
8343
|
+
};
|
|
8344
|
+
var StatusPill = forwardRef(function StatusPill2({ status, dot = true, children, ...props }, ref) {
|
|
8345
|
+
const { variant, label } = statusMap[status];
|
|
8346
|
+
return /* @__PURE__ */ jsx(Badge, { ref, variant, dot, ...props, children: children ?? label });
|
|
8347
|
+
});
|
|
8348
|
+
StatusPill.displayName = "StatusPill";
|
|
7481
8349
|
var Stepper = forwardRef(function Stepper2({ steps, currentStep, orientation = "horizontal", className, ...props }, ref) {
|
|
7482
8350
|
const isVertical = orientation === "vertical";
|
|
7483
8351
|
return /* @__PURE__ */ jsx(
|
|
@@ -7576,6 +8444,29 @@ var Stepper = forwardRef(function Stepper2({ steps, currentStep, orientation = "
|
|
|
7576
8444
|
);
|
|
7577
8445
|
});
|
|
7578
8446
|
Stepper.displayName = "Stepper";
|
|
8447
|
+
var StickyActionBar = forwardRef(
|
|
8448
|
+
function StickyActionBar2({ children, hint, offsetForMobileNav, className, ...props }, ref) {
|
|
8449
|
+
return /* @__PURE__ */ jsxs(
|
|
8450
|
+
"div",
|
|
8451
|
+
{
|
|
8452
|
+
ref,
|
|
8453
|
+
className: cn(
|
|
8454
|
+
"sticky inset-x-0 z-20 flex flex-wrap items-center gap-3",
|
|
8455
|
+
"border-t border-rule bg-surface/80 px-4 py-3 backdrop-blur-md sm:px-6",
|
|
8456
|
+
"supports-[backdrop-filter]:bg-surface/80",
|
|
8457
|
+
offsetForMobileNav ? "bottom-[calc(3.5rem_+_env(safe-area-inset-bottom))] sm:bottom-0" : "bottom-0",
|
|
8458
|
+
className
|
|
8459
|
+
),
|
|
8460
|
+
...props,
|
|
8461
|
+
children: [
|
|
8462
|
+
hint != null && /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-2 text-sm font-medium text-fg-3", children: hint }),
|
|
8463
|
+
/* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center gap-2", children })
|
|
8464
|
+
]
|
|
8465
|
+
}
|
|
8466
|
+
);
|
|
8467
|
+
}
|
|
8468
|
+
);
|
|
8469
|
+
StickyActionBar.displayName = "StickyActionBar";
|
|
7579
8470
|
var SubmitButton = forwardRef(function SubmitButton2({ pendingText, children, className, ...props }, ref) {
|
|
7580
8471
|
const { pending } = useFormStatus();
|
|
7581
8472
|
return /* @__PURE__ */ jsx(
|
|
@@ -7592,6 +8483,87 @@ var SubmitButton = forwardRef(function SubmitButton2({ pendingText, children, cl
|
|
|
7592
8483
|
);
|
|
7593
8484
|
});
|
|
7594
8485
|
SubmitButton.displayName = "SubmitButton";
|
|
8486
|
+
var suiteProgressFillVariants = cva("", {
|
|
8487
|
+
variants: {
|
|
8488
|
+
tone: {
|
|
8489
|
+
pro: "bg-brand-pro",
|
|
8490
|
+
audit: "bg-brand-audit",
|
|
8491
|
+
books: "bg-brand-books",
|
|
8492
|
+
tax: "bg-brand-tax"
|
|
8493
|
+
}
|
|
8494
|
+
},
|
|
8495
|
+
defaultVariants: { tone: "pro" }
|
|
8496
|
+
});
|
|
8497
|
+
var SIZE_STYLES = {
|
|
8498
|
+
sm: { row: "gap-2", track: "gap-0.5", segment: "h-1", text: "text-xs" },
|
|
8499
|
+
md: { row: "gap-3", track: "gap-1", segment: "h-[5px]", text: "text-sm" }
|
|
8500
|
+
};
|
|
8501
|
+
var SuiteProgress = forwardRef(
|
|
8502
|
+
function SuiteProgress2({
|
|
8503
|
+
value,
|
|
8504
|
+
total,
|
|
8505
|
+
showPercent = true,
|
|
8506
|
+
percent,
|
|
8507
|
+
tone = "pro",
|
|
8508
|
+
size = "md",
|
|
8509
|
+
label,
|
|
8510
|
+
segmentClassName,
|
|
8511
|
+
className,
|
|
8512
|
+
...props
|
|
8513
|
+
}, ref) {
|
|
8514
|
+
const styles = SIZE_STYLES[size];
|
|
8515
|
+
const safeTotal = Math.max(1, Math.floor(total));
|
|
8516
|
+
const safeValue = Math.min(safeTotal, Math.max(0, Math.floor(value)));
|
|
8517
|
+
const resolvedPercent = percent != null ? Math.min(100, Math.max(0, Math.round(percent))) : Math.round(safeValue / safeTotal * 100);
|
|
8518
|
+
return /* @__PURE__ */ jsxs(
|
|
8519
|
+
"div",
|
|
8520
|
+
{
|
|
8521
|
+
ref,
|
|
8522
|
+
role: "progressbar",
|
|
8523
|
+
"aria-valuenow": resolvedPercent,
|
|
8524
|
+
"aria-valuemin": 0,
|
|
8525
|
+
"aria-valuemax": 100,
|
|
8526
|
+
"aria-valuetext": `${safeValue} of ${safeTotal}`,
|
|
8527
|
+
"aria-label": label ?? "Progress",
|
|
8528
|
+
className: cn("flex items-center", styles.row, className),
|
|
8529
|
+
...props,
|
|
8530
|
+
children: [
|
|
8531
|
+
label && /* @__PURE__ */ jsx("span", { className: cn("text-fg-2 flex-none font-medium", styles.text), children: label }),
|
|
8532
|
+
/* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-1", styles.track), "aria-hidden": "true", children: Array.from({ length: safeTotal }, (_, i) => {
|
|
8533
|
+
const filled = i < safeValue;
|
|
8534
|
+
return /* @__PURE__ */ jsx(
|
|
8535
|
+
"div",
|
|
8536
|
+
{
|
|
8537
|
+
className: cn(
|
|
8538
|
+
"flex-1 rounded-full",
|
|
8539
|
+
styles.segment,
|
|
8540
|
+
"transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
8541
|
+
filled ? suiteProgressFillVariants({ tone }) : "bg-surface-3",
|
|
8542
|
+
segmentClassName
|
|
8543
|
+
)
|
|
8544
|
+
},
|
|
8545
|
+
i
|
|
8546
|
+
);
|
|
8547
|
+
}) }),
|
|
8548
|
+
showPercent && /* @__PURE__ */ jsxs(
|
|
8549
|
+
"span",
|
|
8550
|
+
{
|
|
8551
|
+
className: cn(
|
|
8552
|
+
"text-fg flex-none font-bold tracking-tight tabular-nums",
|
|
8553
|
+
styles.text
|
|
8554
|
+
),
|
|
8555
|
+
children: [
|
|
8556
|
+
resolvedPercent,
|
|
8557
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-4 ml-px text-[0.72em] font-semibold", children: "%" })
|
|
8558
|
+
]
|
|
8559
|
+
}
|
|
8560
|
+
)
|
|
8561
|
+
]
|
|
8562
|
+
}
|
|
8563
|
+
);
|
|
8564
|
+
}
|
|
8565
|
+
);
|
|
8566
|
+
SuiteProgress.displayName = "SuiteProgress";
|
|
7595
8567
|
var switchVariants = cva(
|
|
7596
8568
|
[
|
|
7597
8569
|
"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent",
|
|
@@ -7634,9 +8606,9 @@ var switchThumbVariants = cva(
|
|
|
7634
8606
|
}
|
|
7635
8607
|
}
|
|
7636
8608
|
);
|
|
7637
|
-
var Switch =
|
|
8609
|
+
var Switch = React37.forwardRef(
|
|
7638
8610
|
function Switch2({ label, size, className, id: providedId, ...props }, ref) {
|
|
7639
|
-
const generatedId =
|
|
8611
|
+
const generatedId = React37.useId();
|
|
7640
8612
|
const id = providedId ?? generatedId;
|
|
7641
8613
|
const root = /* @__PURE__ */ jsx(
|
|
7642
8614
|
SwitchPrimitive.Root,
|
|
@@ -7668,7 +8640,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
|
|
|
7668
8640
|
"div",
|
|
7669
8641
|
{
|
|
7670
8642
|
className: cn(
|
|
7671
|
-
"rounded-card border-rule bg-surface w-full overflow-x-auto border",
|
|
8643
|
+
"rounded-card border-rule-strong bg-surface w-full overflow-x-auto border shadow-quiet",
|
|
7672
8644
|
wrapperClassName
|
|
7673
8645
|
),
|
|
7674
8646
|
children: /* @__PURE__ */ jsx(
|
|
@@ -7733,10 +8705,11 @@ var TableHead = forwardRef(function TableHead2({ className, ...props }, ref) {
|
|
|
7733
8705
|
{
|
|
7734
8706
|
ref,
|
|
7735
8707
|
className: cn(
|
|
7736
|
-
//
|
|
7737
|
-
|
|
7738
|
-
"
|
|
7739
|
-
"text-
|
|
8708
|
+
// Sentence-case column labels in the body font (Plus Jakarta Sans),
|
|
8709
|
+
// quiet gray — not mono uppercase eyebrows.
|
|
8710
|
+
"h-11 px-4 py-2.5 text-left align-middle whitespace-nowrap",
|
|
8711
|
+
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
8712
|
+
"text-fg-3 bg-surface-2",
|
|
7740
8713
|
"border-rule border-b",
|
|
7741
8714
|
"[&:has([role=checkbox])]:pr-0",
|
|
7742
8715
|
className
|
|
@@ -7752,8 +8725,9 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
|
|
|
7752
8725
|
{
|
|
7753
8726
|
ref,
|
|
7754
8727
|
className: cn(
|
|
7755
|
-
//
|
|
7756
|
-
|
|
8728
|
+
// 13px, fg-2, soft 1px row divider, tabular nums; airier vertical
|
|
8729
|
+
// rhythm (py-3) for the taller rows in the catalog layout.
|
|
8730
|
+
"text-fg-2 px-4 py-3 align-middle text-[13px] tabular-nums",
|
|
7757
8731
|
"[&:has([role=checkbox])]:pr-0",
|
|
7758
8732
|
className
|
|
7759
8733
|
),
|
|
@@ -7768,18 +8742,18 @@ var TableCaption = forwardRef(
|
|
|
7768
8742
|
}
|
|
7769
8743
|
);
|
|
7770
8744
|
TableCaption.displayName = "TableCaption";
|
|
7771
|
-
var Tabs =
|
|
8745
|
+
var Tabs = React37.forwardRef(
|
|
7772
8746
|
function Tabs2({ className, ...props }, ref) {
|
|
7773
8747
|
return /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, className: cn(className), ...props });
|
|
7774
8748
|
}
|
|
7775
8749
|
);
|
|
7776
8750
|
Tabs.displayName = TabsPrimitive.Root.displayName;
|
|
7777
|
-
var TabsList =
|
|
8751
|
+
var TabsList = React37.forwardRef(function TabsList2({ className, ...props }, ref) {
|
|
7778
8752
|
return /* @__PURE__ */ jsx(
|
|
7779
8753
|
TabsPrimitive.List,
|
|
7780
8754
|
{
|
|
7781
8755
|
ref,
|
|
7782
|
-
className: cn("border-rule
|
|
8756
|
+
className: cn("border-rule flex items-center gap-0 border-b", className),
|
|
7783
8757
|
...props
|
|
7784
8758
|
}
|
|
7785
8759
|
);
|
|
@@ -7819,7 +8793,7 @@ var triggerVariants = cva(
|
|
|
7819
8793
|
}
|
|
7820
8794
|
}
|
|
7821
8795
|
);
|
|
7822
|
-
var TabsTrigger =
|
|
8796
|
+
var TabsTrigger = React37.forwardRef(function TabsTrigger2({ className, variant, ...props }, ref) {
|
|
7823
8797
|
return /* @__PURE__ */ jsx(
|
|
7824
8798
|
TabsPrimitive.Trigger,
|
|
7825
8799
|
{
|
|
@@ -7830,7 +8804,7 @@ var TabsTrigger = React36.forwardRef(function TabsTrigger2({ className, variant,
|
|
|
7830
8804
|
);
|
|
7831
8805
|
});
|
|
7832
8806
|
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
7833
|
-
var TabsContent =
|
|
8807
|
+
var TabsContent = React37.forwardRef(function TabsContent2({ className, ...props }, ref) {
|
|
7834
8808
|
return /* @__PURE__ */ jsx(
|
|
7835
8809
|
TabsPrimitive.Content,
|
|
7836
8810
|
{
|
|
@@ -7855,7 +8829,7 @@ function TeamMemberSelect({
|
|
|
7855
8829
|
placeholder = "Select team member...",
|
|
7856
8830
|
className
|
|
7857
8831
|
}) {
|
|
7858
|
-
const options =
|
|
8832
|
+
const options = React37.useMemo(() => {
|
|
7859
8833
|
const meBadge = /* @__PURE__ */ jsx(
|
|
7860
8834
|
Badge,
|
|
7861
8835
|
{
|
|
@@ -8185,10 +9159,10 @@ var itemVariants = cva(
|
|
|
8185
9159
|
}
|
|
8186
9160
|
}
|
|
8187
9161
|
);
|
|
8188
|
-
var ToggleGroupContext =
|
|
9162
|
+
var ToggleGroupContext = React37.createContext({
|
|
8189
9163
|
variant: "default"
|
|
8190
9164
|
});
|
|
8191
|
-
var ToggleGroup =
|
|
9165
|
+
var ToggleGroup = React37.forwardRef(function ToggleGroup2({ className, variant, children, ...props }, ref) {
|
|
8192
9166
|
return /* @__PURE__ */ jsx(
|
|
8193
9167
|
ToggleGroupPrimitive.Root,
|
|
8194
9168
|
{
|
|
@@ -8200,8 +9174,8 @@ var ToggleGroup = React36.forwardRef(function ToggleGroup2({ className, variant,
|
|
|
8200
9174
|
);
|
|
8201
9175
|
});
|
|
8202
9176
|
ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
|
|
8203
|
-
var ToggleGroupItem =
|
|
8204
|
-
const ctx =
|
|
9177
|
+
var ToggleGroupItem = React37.forwardRef(function ToggleGroupItem2({ className, variant, ...props }, ref) {
|
|
9178
|
+
const ctx = React37.useContext(ToggleGroupContext);
|
|
8205
9179
|
return /* @__PURE__ */ jsx(
|
|
8206
9180
|
ToggleGroupPrimitive.Item,
|
|
8207
9181
|
{
|
|
@@ -8220,7 +9194,7 @@ var Tooltip = ({ delayMs, delayDuration, children, ...props }) => {
|
|
|
8220
9194
|
return /* @__PURE__ */ jsx(TooltipPrimitive.Provider, { delayDuration: resolvedDelay, children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { delayDuration: resolvedDelay, ...props, children }) });
|
|
8221
9195
|
};
|
|
8222
9196
|
Tooltip.displayName = "Tooltip";
|
|
8223
|
-
var TooltipContent =
|
|
9197
|
+
var TooltipContent = React37.forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
8224
9198
|
TooltipPrimitive.Content,
|
|
8225
9199
|
{
|
|
8226
9200
|
ref,
|
|
@@ -8245,6 +9219,637 @@ var VisuallyHidden = forwardRef(
|
|
|
8245
9219
|
}
|
|
8246
9220
|
);
|
|
8247
9221
|
VisuallyHidden.displayName = "VisuallyHidden";
|
|
9222
|
+
function AiSpark({ size = 16, className }) {
|
|
9223
|
+
const id = useId();
|
|
9224
|
+
return /* @__PURE__ */ jsxs(
|
|
9225
|
+
"svg",
|
|
9226
|
+
{
|
|
9227
|
+
width: size,
|
|
9228
|
+
height: size * 12 / 16,
|
|
9229
|
+
viewBox: "0 0 16 12",
|
|
9230
|
+
fill: "none",
|
|
9231
|
+
className: cn("block shrink-0", className),
|
|
9232
|
+
"aria-hidden": "true",
|
|
9233
|
+
children: [
|
|
9234
|
+
/* @__PURE__ */ jsx(
|
|
9235
|
+
"path",
|
|
9236
|
+
{
|
|
9237
|
+
d: "M6.24553 5.34293C5.91553 5.23294 5.91553 4.76699 6.24553 4.657L8.18254 4.01207C8.60834 3.87011 8.99522 3.63094 9.31252 3.3135C9.62982 2.99607 9.8688 2.6091 10.0105 2.18327L10.6555 0.247473C10.7655 -0.0824911 11.2315 -0.0824912 11.3415 0.247473L11.9866 2.18427C12.1285 2.61002 12.3677 2.99686 12.6852 3.31412C13.0027 3.63139 13.3897 3.87035 13.8156 4.01207L15.7516 4.657C15.8238 4.68071 15.8868 4.72664 15.9314 4.78823C15.976 4.84982 16 4.92392 16 4.99996C16 5.07601 15.976 5.15011 15.9314 5.2117C15.8868 5.27329 15.8238 5.31921 15.7516 5.34293L13.8146 5.98786C13.3889 6.12971 13.0021 6.36874 12.6848 6.68599C12.3675 7.00324 12.1284 7.39001 11.9866 7.81566L11.3415 9.75245C11.3178 9.82471 11.2719 9.88763 11.2103 9.93223C11.1487 9.97684 11.0746 10.0009 10.9985 10.0009C10.9225 10.0009 10.8484 9.97684 10.7868 9.93223C10.7252 9.88763 10.6793 9.82471 10.6555 9.75245L10.0105 7.81566C9.86867 7.39001 9.62962 7.00324 9.31233 6.68599C8.99505 6.36874 8.60823 6.12971 8.18254 5.98786L6.24553 5.34293ZM1.14651 9.20551C1.1032 9.19117 1.06552 9.16355 1.03881 9.12658C1.0121 9.0896 0.99772 9.04515 0.99772 8.99954C0.99772 8.95392 1.0121 8.90947 1.03881 8.87249C1.06552 8.83552 1.1032 8.8079 1.14651 8.79356L2.30851 8.4066C2.82651 8.23362 3.23252 7.82766 3.40552 7.30972L3.79252 6.14784C3.80686 6.10454 3.83448 6.06686 3.87146 6.04015C3.90844 6.01345 3.9529 5.99907 3.99852 5.99907C4.04414 5.99907 4.0886 6.01345 4.12558 6.04015C4.16256 6.06686 4.19018 6.10454 4.20452 6.14784L4.59152 7.30972C4.67664 7.56516 4.82009 7.79728 5.0105 7.98767C5.20091 8.17806 5.43305 8.32149 5.68853 8.4066L6.85053 8.79356C6.89384 8.8079 6.93152 8.83551 6.95823 8.87249C6.98494 8.90947 6.99932 8.95392 6.99932 8.99954C6.99932 9.04515 6.98494 9.0896 6.95823 9.12658C6.93152 9.16355 6.89384 9.19117 6.85053 9.20551L5.68853 9.59247C5.43305 9.67758 5.20091 9.82101 5.0105 10.0114C4.82009 10.2018 4.67664 10.4339 4.59152 10.6894L4.20452 11.8512C4.19018 11.8945 4.16256 11.9322 4.12558 11.9589C4.0886 11.9856 4.04414 12 3.99852 12C3.9529 12 3.90844 11.9856 3.87146 11.9589C3.83448 11.9322 3.80686 11.8945 3.79252 11.8512L3.40552 10.6894C3.3204 10.4339 3.17695 10.2018 2.98654 10.0114C2.79613 9.82101 2.56399 9.67758 2.30851 9.59247L1.14651 9.20551ZM0.097503 2.13727C0.0690292 2.1274 0.0443387 2.1089 0.0268643 2.08435C0.00938996 2.0598 1.317e-09 2.03042 0 2.00029C-1.318e-09 1.97015 0.00938995 1.94077 0.0268643 1.91622C0.0443387 1.89167 0.0690292 1.87317 0.097503 1.8633L0.871506 1.60533C1.21751 1.49034 1.48851 1.21937 1.60351 0.873408L1.86151 0.0994903C1.87138 0.0710193 1.88988 0.0463306 1.91443 0.0288584C1.93899 0.0113861 1.96837 0.00199815 1.99851 0.00199814C2.02865 0.00199814 2.05803 0.0113861 2.08259 0.0288583C2.10714 0.0463306 2.12564 0.0710193 2.13551 0.0994903L2.39351 0.873408C2.45024 1.0439 2.54593 1.19882 2.673 1.32588C2.80006 1.45293 2.955 1.54861 3.12552 1.60533L3.89952 1.8633C3.92799 1.87317 3.95268 1.89167 3.97016 1.91622C3.98763 1.94077 3.99702 1.97015 3.99702 2.00029C3.99702 2.03042 3.98763 2.0598 3.97016 2.08435C3.95268 2.1089 3.92799 2.1274 3.89952 2.13727L3.12552 2.39524C2.955 2.45196 2.80006 2.54764 2.673 2.6747C2.54593 2.80175 2.45024 2.95667 2.39351 3.12717L2.13551 3.90008C2.12564 3.92855 2.10714 3.95324 2.08259 3.97071C2.05804 3.98819 2.02865 3.99757 1.99851 3.99757C1.96837 3.99757 1.93899 3.98819 1.91443 3.97071C1.88988 3.95324 1.87138 3.92855 1.86151 3.90008L1.60351 3.12617C1.48851 2.7802 1.21751 2.50923 0.871506 2.39424L0.097503 2.13727Z",
|
|
9238
|
+
fill: `url(#${id})`
|
|
9239
|
+
}
|
|
9240
|
+
),
|
|
9241
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
|
|
9242
|
+
"linearGradient",
|
|
9243
|
+
{
|
|
9244
|
+
id,
|
|
9245
|
+
x1: "0.265576",
|
|
9246
|
+
y1: "0.856805",
|
|
9247
|
+
x2: "13.5",
|
|
9248
|
+
y2: "12",
|
|
9249
|
+
gradientUnits: "userSpaceOnUse",
|
|
9250
|
+
children: [
|
|
9251
|
+
/* @__PURE__ */ jsx("stop", { stopColor: "#9E32FF" }),
|
|
9252
|
+
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#1BB6FF" })
|
|
9253
|
+
]
|
|
9254
|
+
}
|
|
9255
|
+
) })
|
|
9256
|
+
]
|
|
9257
|
+
}
|
|
9258
|
+
);
|
|
9259
|
+
}
|
|
9260
|
+
function Field({ label, value, confirmed }) {
|
|
9261
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
9262
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11px]", children: label }),
|
|
9263
|
+
/* @__PURE__ */ jsxs("span", { className: "text-fg inline-flex items-center gap-1 text-sm font-medium", children: [
|
|
9264
|
+
value,
|
|
9265
|
+
confirmed && /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg size-3", strokeWidth: 3 })
|
|
9266
|
+
] })
|
|
9267
|
+
] });
|
|
9268
|
+
}
|
|
9269
|
+
var AIReceiptPanel = forwardRef(function AIReceiptPanel2({ state = "idle", result, onAttach, onRemove, onViewFile, className, ...props }, ref) {
|
|
9270
|
+
if (state === "reading") {
|
|
9271
|
+
return /* @__PURE__ */ jsxs(
|
|
9272
|
+
"div",
|
|
9273
|
+
{
|
|
9274
|
+
ref,
|
|
9275
|
+
role: "status",
|
|
9276
|
+
"aria-live": "polite",
|
|
9277
|
+
className: cn(
|
|
9278
|
+
"border-rule bg-surface-2 flex items-center gap-3 rounded-[var(--radius-input)] border p-3",
|
|
9279
|
+
className
|
|
9280
|
+
),
|
|
9281
|
+
...props,
|
|
9282
|
+
children: [
|
|
9283
|
+
/* @__PURE__ */ jsx(AiSpark, { size: 18, className: "motion-safe:animate-pulse" }),
|
|
9284
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
9285
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: "Reading your receipt\u2026" }),
|
|
9286
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: "Pulling the vendor, amount and a suggested category." })
|
|
9287
|
+
] })
|
|
9288
|
+
]
|
|
9289
|
+
}
|
|
9290
|
+
);
|
|
9291
|
+
}
|
|
9292
|
+
if (state === "done" && result) {
|
|
9293
|
+
return /* @__PURE__ */ jsxs(
|
|
9294
|
+
"div",
|
|
9295
|
+
{
|
|
9296
|
+
ref,
|
|
9297
|
+
className: cn(
|
|
9298
|
+
"border-rule bg-surface-2 flex flex-col gap-3 rounded-[var(--radius-input)] border p-3",
|
|
9299
|
+
className
|
|
9300
|
+
),
|
|
9301
|
+
...props,
|
|
9302
|
+
children: [
|
|
9303
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
9304
|
+
/* @__PURE__ */ jsxs("span", { className: "text-fg-2 inline-flex items-center gap-1.5 text-xs font-semibold", children: [
|
|
9305
|
+
/* @__PURE__ */ jsx(AiSpark, { size: 14 }),
|
|
9306
|
+
" Auto-filled from receipt"
|
|
9307
|
+
] }),
|
|
9308
|
+
onRemove && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRemove, children: "Remove" })
|
|
9309
|
+
] }),
|
|
9310
|
+
/* @__PURE__ */ jsx(
|
|
9311
|
+
FileChip,
|
|
9312
|
+
{
|
|
9313
|
+
name: result.file.name,
|
|
9314
|
+
meta: result.file.meta,
|
|
9315
|
+
className: "bg-surface",
|
|
9316
|
+
action: onViewFile && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onViewFile, children: "View" })
|
|
9317
|
+
}
|
|
9318
|
+
),
|
|
9319
|
+
/* @__PURE__ */ jsxs("div", { className: "border-rule grid grid-cols-3 gap-3 border-t pt-3", children: [
|
|
9320
|
+
/* @__PURE__ */ jsx(Field, { label: "Vendor", value: result.vendor }),
|
|
9321
|
+
/* @__PURE__ */ jsx(Field, { label: "Amount", value: result.amount, confirmed: true }),
|
|
9322
|
+
/* @__PURE__ */ jsx(Field, { label: "Date", value: result.date, confirmed: true })
|
|
9323
|
+
] })
|
|
9324
|
+
]
|
|
9325
|
+
}
|
|
9326
|
+
);
|
|
9327
|
+
}
|
|
9328
|
+
return /* @__PURE__ */ jsxs(
|
|
9329
|
+
"button",
|
|
9330
|
+
{
|
|
9331
|
+
ref,
|
|
9332
|
+
type: "button",
|
|
9333
|
+
onClick: onAttach,
|
|
9334
|
+
className: cn(
|
|
9335
|
+
"group border-rule-strong bg-surface hover:border-pro-fg/50 hover:bg-pro-bg/40 flex w-full items-center gap-3 rounded-[var(--radius-input)] border-2 border-dashed p-3 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
|
|
9336
|
+
className
|
|
9337
|
+
),
|
|
9338
|
+
...props,
|
|
9339
|
+
children: [
|
|
9340
|
+
/* @__PURE__ */ jsx(AiSpark, { size: 19 }),
|
|
9341
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
9342
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg block text-sm font-medium", children: "Attach receipt \u2014 auto-fill with AI" }),
|
|
9343
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 block text-xs", children: "We'll read the vendor, amount & suggest a category" })
|
|
9344
|
+
] }),
|
|
9345
|
+
/* @__PURE__ */ jsx(UploadIcon, { className: "text-fg-3 size-4.5 shrink-0", "aria-hidden": "true" })
|
|
9346
|
+
]
|
|
9347
|
+
}
|
|
9348
|
+
);
|
|
9349
|
+
});
|
|
9350
|
+
AIReceiptPanel.displayName = "AIReceiptPanel";
|
|
9351
|
+
|
|
9352
|
+
// src/lib/service-tone.ts
|
|
9353
|
+
var toneToken = {
|
|
9354
|
+
tax: { fill: "var(--color-service-tax)", bg: "var(--color-service-tax-bg)" },
|
|
9355
|
+
audit: { fill: "var(--color-service-audit)", bg: "var(--color-service-audit-bg)" },
|
|
9356
|
+
accounting: {
|
|
9357
|
+
fill: "var(--color-service-accounting)",
|
|
9358
|
+
bg: "var(--color-service-accounting-bg)"
|
|
9359
|
+
},
|
|
9360
|
+
neutral: { fill: "var(--color-pro-fg)", bg: "var(--color-pro-bg)" }
|
|
9361
|
+
};
|
|
9362
|
+
function serviceToneStyle(tone) {
|
|
9363
|
+
const { fill, bg } = toneToken[tone];
|
|
9364
|
+
return { "--tone": fill, "--tone-bg": bg };
|
|
9365
|
+
}
|
|
9366
|
+
var SERVICE_TONES = ["tax", "audit", "accounting", "neutral"];
|
|
9367
|
+
var serviceToneLabel = {
|
|
9368
|
+
tax: "Tax",
|
|
9369
|
+
audit: "Audit",
|
|
9370
|
+
accounting: "Accounting",
|
|
9371
|
+
neutral: "General"
|
|
9372
|
+
};
|
|
9373
|
+
var urgencyTile = {
|
|
9374
|
+
default: "[background:var(--tone-bg)] [color:var(--tone)]",
|
|
9375
|
+
warning: "bg-warning-bg text-warning-fg",
|
|
9376
|
+
danger: "bg-danger-bg text-danger-fg"
|
|
9377
|
+
};
|
|
9378
|
+
var AttentionItem = forwardRef(function AttentionItem2({ icon, title, description, tone = "neutral", urgency = "default", action, onClick, className, style, ...props }, ref) {
|
|
9379
|
+
const interactive = Boolean(onClick);
|
|
9380
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9381
|
+
/* @__PURE__ */ jsx(
|
|
9382
|
+
"span",
|
|
9383
|
+
{
|
|
9384
|
+
"aria-hidden": "true",
|
|
9385
|
+
className: cn(
|
|
9386
|
+
"flex size-9 shrink-0 items-center justify-center rounded-[var(--radius-input)] [&_svg]:size-4.5",
|
|
9387
|
+
urgencyTile[urgency]
|
|
9388
|
+
),
|
|
9389
|
+
children: icon
|
|
9390
|
+
}
|
|
9391
|
+
),
|
|
9392
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
9393
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: title }),
|
|
9394
|
+
description != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-xs", children: description })
|
|
9395
|
+
] }),
|
|
9396
|
+
action ?? (interactive && /* @__PURE__ */ jsx(ArrowRightIcon, { className: "text-fg-4 size-4 shrink-0 self-center", "aria-hidden": "true" }))
|
|
9397
|
+
] });
|
|
9398
|
+
const rootClass = cn(
|
|
9399
|
+
"border-rule bg-surface flex items-start gap-3 rounded-[var(--radius-input)] border p-3 text-left",
|
|
9400
|
+
interactive && "w-full transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:bg-bg-2 focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
|
|
9401
|
+
className
|
|
9402
|
+
);
|
|
9403
|
+
const rootStyle = { ...serviceToneStyle(tone), ...style };
|
|
9404
|
+
if (interactive) {
|
|
9405
|
+
return /* @__PURE__ */ jsx(
|
|
9406
|
+
"button",
|
|
9407
|
+
{
|
|
9408
|
+
ref,
|
|
9409
|
+
type: "button",
|
|
9410
|
+
onClick,
|
|
9411
|
+
className: rootClass,
|
|
9412
|
+
style: rootStyle,
|
|
9413
|
+
...props,
|
|
9414
|
+
children: body
|
|
9415
|
+
}
|
|
9416
|
+
);
|
|
9417
|
+
}
|
|
9418
|
+
return /* @__PURE__ */ jsx("div", { ref, className: rootClass, style: rootStyle, ...props, children: body });
|
|
9419
|
+
});
|
|
9420
|
+
AttentionItem.displayName = "AttentionItem";
|
|
9421
|
+
var BottomNav = forwardRef(function BottomNav2({ tabs, value, onChange, className, ...props }, ref) {
|
|
9422
|
+
return /* @__PURE__ */ jsx(
|
|
9423
|
+
"nav",
|
|
9424
|
+
{
|
|
9425
|
+
ref,
|
|
9426
|
+
"aria-label": "Primary",
|
|
9427
|
+
className: cn(
|
|
9428
|
+
"border-rule bg-surface/95 sticky bottom-0 z-[var(--z-sticky)] flex items-stretch border-t pb-[env(safe-area-inset-bottom)] backdrop-blur",
|
|
9429
|
+
className
|
|
9430
|
+
),
|
|
9431
|
+
...props,
|
|
9432
|
+
children: tabs.map((tab) => {
|
|
9433
|
+
const active = tab.id === value;
|
|
9434
|
+
return /* @__PURE__ */ jsxs(
|
|
9435
|
+
"button",
|
|
9436
|
+
{
|
|
9437
|
+
type: "button",
|
|
9438
|
+
"aria-current": active ? "page" : void 0,
|
|
9439
|
+
onClick: () => onChange(tab.id),
|
|
9440
|
+
className: cn(
|
|
9441
|
+
"relative flex flex-1 flex-col items-center gap-1 px-1 py-2 text-[11px] font-medium transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
|
|
9442
|
+
active ? "text-pro-fg" : "text-fg-4 hover:text-fg-2"
|
|
9443
|
+
),
|
|
9444
|
+
children: [
|
|
9445
|
+
/* @__PURE__ */ jsxs("span", { className: "relative [&_svg]:size-5", children: [
|
|
9446
|
+
tab.icon,
|
|
9447
|
+
tab.badge != null && tab.badge !== false && /* @__PURE__ */ jsx(
|
|
9448
|
+
"span",
|
|
9449
|
+
{
|
|
9450
|
+
className: cn(
|
|
9451
|
+
"bg-danger-fg text-fg-on-danger absolute -top-1 -right-1.5 flex min-w-3.5 items-center justify-center rounded-full px-1 text-[9px] leading-none font-semibold tabular-nums",
|
|
9452
|
+
tab.badge === true && "size-2 min-w-0 px-0"
|
|
9453
|
+
),
|
|
9454
|
+
children: typeof tab.badge === "number" ? tab.badge : null
|
|
9455
|
+
}
|
|
9456
|
+
)
|
|
9457
|
+
] }),
|
|
9458
|
+
/* @__PURE__ */ jsx("span", { className: "max-w-full truncate", children: tab.label })
|
|
9459
|
+
]
|
|
9460
|
+
},
|
|
9461
|
+
tab.id
|
|
9462
|
+
);
|
|
9463
|
+
})
|
|
9464
|
+
}
|
|
9465
|
+
);
|
|
9466
|
+
});
|
|
9467
|
+
BottomNav.displayName = "BottomNav";
|
|
9468
|
+
function readOrder(storageKey) {
|
|
9469
|
+
if (!storageKey || typeof window === "undefined") return null;
|
|
9470
|
+
try {
|
|
9471
|
+
const raw = window.localStorage.getItem(storageKey);
|
|
9472
|
+
return raw ? JSON.parse(raw) : null;
|
|
9473
|
+
} catch {
|
|
9474
|
+
return null;
|
|
9475
|
+
}
|
|
9476
|
+
}
|
|
9477
|
+
var colsClass = {
|
|
9478
|
+
2: "lg:grid-cols-2",
|
|
9479
|
+
3: "lg:grid-cols-3",
|
|
9480
|
+
4: "lg:grid-cols-4"
|
|
9481
|
+
};
|
|
9482
|
+
var spanClass = {
|
|
9483
|
+
1: "",
|
|
9484
|
+
2: "lg:col-span-2",
|
|
9485
|
+
3: "lg:col-span-3"
|
|
9486
|
+
};
|
|
9487
|
+
var DashGrid = forwardRef(function DashGrid2({ widgets, storageKey, onReorder, columns = 3, className, ...props }, ref) {
|
|
9488
|
+
const [order, setOrder] = useState(() => {
|
|
9489
|
+
const stored = readOrder(storageKey);
|
|
9490
|
+
const ids = widgets.map((w) => w.id);
|
|
9491
|
+
if (!stored) return ids;
|
|
9492
|
+
const kept = stored.filter((id) => ids.includes(id));
|
|
9493
|
+
const added = ids.filter((id) => !kept.includes(id));
|
|
9494
|
+
return [...kept, ...added];
|
|
9495
|
+
});
|
|
9496
|
+
const [dragId, setDragId] = useState(null);
|
|
9497
|
+
const [overId, setOverId] = useState(null);
|
|
9498
|
+
const commit = (next) => {
|
|
9499
|
+
setOrder(next);
|
|
9500
|
+
onReorder?.(next);
|
|
9501
|
+
if (storageKey && typeof window !== "undefined") {
|
|
9502
|
+
try {
|
|
9503
|
+
window.localStorage.setItem(storageKey, JSON.stringify(next));
|
|
9504
|
+
} catch {
|
|
9505
|
+
}
|
|
9506
|
+
}
|
|
9507
|
+
};
|
|
9508
|
+
const move = (from, to) => {
|
|
9509
|
+
if (from === to) return;
|
|
9510
|
+
const next = [...order];
|
|
9511
|
+
const fromIdx = next.indexOf(from);
|
|
9512
|
+
const toIdx = next.indexOf(to);
|
|
9513
|
+
if (fromIdx < 0 || toIdx < 0) return;
|
|
9514
|
+
next.splice(toIdx, 0, next.splice(fromIdx, 1)[0]);
|
|
9515
|
+
commit(next);
|
|
9516
|
+
};
|
|
9517
|
+
const byId = new Map(widgets.map((w) => [w.id, w]));
|
|
9518
|
+
const ordered = order.map((id) => byId.get(id)).filter(Boolean);
|
|
9519
|
+
return /* @__PURE__ */ jsx(
|
|
9520
|
+
"div",
|
|
9521
|
+
{
|
|
9522
|
+
ref,
|
|
9523
|
+
suppressHydrationWarning: true,
|
|
9524
|
+
className: cn("grid grid-cols-1 gap-4 sm:grid-cols-2", colsClass[columns], className),
|
|
9525
|
+
...props,
|
|
9526
|
+
children: ordered.map((widget) => {
|
|
9527
|
+
const isDragging = dragId === widget.id;
|
|
9528
|
+
const isOver = overId === widget.id && dragId !== widget.id;
|
|
9529
|
+
return (
|
|
9530
|
+
// The wrapper is an HTML5 drag DROP target: onDragOver/onDrop carry
|
|
9531
|
+
// no click semantics and aren't keyboard-reachable by design — the
|
|
9532
|
+
// grab handle below is the focusable control. Pointer reordering is
|
|
9533
|
+
// an enhancement (same precedent as the sidebar hover-peek); there
|
|
9534
|
+
// is intentionally no keyboard analogue on the drop zone itself.
|
|
9535
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
9536
|
+
/* @__PURE__ */ jsxs(
|
|
9537
|
+
"div",
|
|
9538
|
+
{
|
|
9539
|
+
className: cn(
|
|
9540
|
+
"group/dash relative transition-[opacity,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
9541
|
+
spanClass[widget.span ?? 1],
|
|
9542
|
+
isDragging && "opacity-40",
|
|
9543
|
+
isOver && "rounded-card [box-shadow:var(--shadow-focus-ring)]"
|
|
9544
|
+
),
|
|
9545
|
+
onDragOver: (e) => {
|
|
9546
|
+
if (!dragId) return;
|
|
9547
|
+
e.preventDefault();
|
|
9548
|
+
setOverId(widget.id);
|
|
9549
|
+
},
|
|
9550
|
+
onDrop: (e) => {
|
|
9551
|
+
e.preventDefault();
|
|
9552
|
+
if (dragId) move(dragId, widget.id);
|
|
9553
|
+
setDragId(null);
|
|
9554
|
+
setOverId(null);
|
|
9555
|
+
},
|
|
9556
|
+
children: [
|
|
9557
|
+
/* @__PURE__ */ jsx(
|
|
9558
|
+
"button",
|
|
9559
|
+
{
|
|
9560
|
+
type: "button",
|
|
9561
|
+
"aria-label": `Reorder widget`,
|
|
9562
|
+
draggable: true,
|
|
9563
|
+
onDragStart: (e) => {
|
|
9564
|
+
setDragId(widget.id);
|
|
9565
|
+
e.dataTransfer.effectAllowed = "move";
|
|
9566
|
+
},
|
|
9567
|
+
onDragEnd: () => {
|
|
9568
|
+
setDragId(null);
|
|
9569
|
+
setOverId(null);
|
|
9570
|
+
},
|
|
9571
|
+
className: "absolute top-3 right-3 z-[var(--z-base)] flex cursor-grab touch-none items-center justify-center rounded-[var(--radius-icon)] p-1 text-fg-4 opacity-0 transition-opacity duration-[var(--duration-fast)] hover:bg-bg-2 hover:text-fg-2 focus-visible:opacity-100 focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] active:cursor-grabbing group-hover/dash:opacity-100 motion-reduce:transition-none",
|
|
9572
|
+
children: /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "grid grid-cols-2 gap-[3px]", children: Array.from({ length: 6 }, (_, i) => /* @__PURE__ */ jsx("span", { className: "size-[3px] rounded-full bg-current" }, i)) })
|
|
9573
|
+
}
|
|
9574
|
+
),
|
|
9575
|
+
widget.content
|
|
9576
|
+
]
|
|
9577
|
+
},
|
|
9578
|
+
widget.id
|
|
9579
|
+
)
|
|
9580
|
+
);
|
|
9581
|
+
})
|
|
9582
|
+
}
|
|
9583
|
+
);
|
|
9584
|
+
});
|
|
9585
|
+
DashGrid.displayName = "DashGrid";
|
|
9586
|
+
var toneToSegment = {
|
|
9587
|
+
tax: "tax",
|
|
9588
|
+
audit: "audit",
|
|
9589
|
+
accounting: "accounting",
|
|
9590
|
+
neutral: "default"
|
|
9591
|
+
};
|
|
9592
|
+
var EngagementCard = forwardRef(function EngagementCard2({
|
|
9593
|
+
service,
|
|
9594
|
+
serviceIcon,
|
|
9595
|
+
tone = "neutral",
|
|
9596
|
+
title,
|
|
9597
|
+
status,
|
|
9598
|
+
current,
|
|
9599
|
+
steps,
|
|
9600
|
+
stepLabel,
|
|
9601
|
+
eta,
|
|
9602
|
+
ring,
|
|
9603
|
+
onOpen,
|
|
9604
|
+
className,
|
|
9605
|
+
style,
|
|
9606
|
+
...props
|
|
9607
|
+
}, ref) {
|
|
9608
|
+
const pct = steps > 0 ? Math.round(current / steps * 100) : 0;
|
|
9609
|
+
const interactive = Boolean(onOpen);
|
|
9610
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9611
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
9612
|
+
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-sm font-semibold [color:var(--tone)] [&_svg]:size-[15px]", children: [
|
|
9613
|
+
serviceIcon,
|
|
9614
|
+
service
|
|
9615
|
+
] }),
|
|
9616
|
+
status
|
|
9617
|
+
] }),
|
|
9618
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg mt-2 text-base leading-snug font-medium", children: title }),
|
|
9619
|
+
stepLabel != null && /* @__PURE__ */ jsxs("p", { className: "text-fg-3 mt-1 text-xs", children: [
|
|
9620
|
+
stepLabel,
|
|
9621
|
+
" \xB7 Step ",
|
|
9622
|
+
current,
|
|
9623
|
+
" of ",
|
|
9624
|
+
steps
|
|
9625
|
+
] }),
|
|
9626
|
+
ring ? /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-3", children: [
|
|
9627
|
+
/* @__PURE__ */ jsx(
|
|
9628
|
+
ProgressRing,
|
|
9629
|
+
{
|
|
9630
|
+
value: pct,
|
|
9631
|
+
size: 52,
|
|
9632
|
+
strokeWidth: 6,
|
|
9633
|
+
label: `${pct}%`,
|
|
9634
|
+
className: "[&_circle:last-child]:[stroke:var(--tone)]"
|
|
9635
|
+
}
|
|
9636
|
+
),
|
|
9637
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: "complete" })
|
|
9638
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-3", children: [
|
|
9639
|
+
/* @__PURE__ */ jsx(SegmentedProgress, { steps, current, tone: toneToSegment[tone] }),
|
|
9640
|
+
/* @__PURE__ */ jsxs("span", { className: "shrink-0 text-sm font-semibold tabular-nums [color:var(--tone)]", children: [
|
|
9641
|
+
pct,
|
|
9642
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-4 text-xs font-normal", children: "%" })
|
|
9643
|
+
] })
|
|
9644
|
+
] }),
|
|
9645
|
+
/* @__PURE__ */ jsxs("div", { className: "border-rule-soft mt-3 flex items-center justify-between gap-2 border-t pt-3", children: [
|
|
9646
|
+
eta != null && /* @__PURE__ */ jsxs("span", { className: "text-fg-3 inline-flex items-center gap-1.5 text-xs [&_svg]:size-3.5", children: [
|
|
9647
|
+
/* @__PURE__ */ jsx(CalendarIcon, { "aria-hidden": "true" }),
|
|
9648
|
+
eta
|
|
9649
|
+
] }),
|
|
9650
|
+
interactive && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-xs font-medium [color:var(--tone)] [&_svg]:size-3.5", children: [
|
|
9651
|
+
"Open ",
|
|
9652
|
+
/* @__PURE__ */ jsx(ArrowRightIcon, { "aria-hidden": "true" })
|
|
9653
|
+
] })
|
|
9654
|
+
] })
|
|
9655
|
+
] });
|
|
9656
|
+
const rootClass = cn(
|
|
9657
|
+
"border-rule bg-surface block w-full rounded-card border p-4 text-left shadow-quiet",
|
|
9658
|
+
interactive && "transition-[border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-[color:var(--tone)] hover:shadow-card focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none",
|
|
9659
|
+
className
|
|
9660
|
+
);
|
|
9661
|
+
const rootStyle = { ...serviceToneStyle(tone), ...style };
|
|
9662
|
+
if (interactive) {
|
|
9663
|
+
return /* @__PURE__ */ jsx(
|
|
9664
|
+
"button",
|
|
9665
|
+
{
|
|
9666
|
+
ref,
|
|
9667
|
+
type: "button",
|
|
9668
|
+
onClick: onOpen,
|
|
9669
|
+
className: rootClass,
|
|
9670
|
+
style: rootStyle,
|
|
9671
|
+
...props,
|
|
9672
|
+
children: body
|
|
9673
|
+
}
|
|
9674
|
+
);
|
|
9675
|
+
}
|
|
9676
|
+
return /* @__PURE__ */ jsx("div", { ref, className: rootClass, style: rootStyle, ...props, children: body });
|
|
9677
|
+
});
|
|
9678
|
+
EngagementCard.displayName = "EngagementCard";
|
|
9679
|
+
var EngagementTimeline = forwardRef(
|
|
9680
|
+
function EngagementTimeline2({ tone = "neutral", className, style, children, ...props }, ref) {
|
|
9681
|
+
return /* @__PURE__ */ jsx(
|
|
9682
|
+
"ol",
|
|
9683
|
+
{
|
|
9684
|
+
ref,
|
|
9685
|
+
className: cn("flex flex-col", className),
|
|
9686
|
+
style: { ...serviceToneStyle(tone), ...style },
|
|
9687
|
+
...props,
|
|
9688
|
+
children
|
|
9689
|
+
}
|
|
9690
|
+
);
|
|
9691
|
+
}
|
|
9692
|
+
);
|
|
9693
|
+
EngagementTimeline.displayName = "EngagementTimeline";
|
|
9694
|
+
var stateBadge = {
|
|
9695
|
+
done: { label: "Done", className: "text-success-fg" },
|
|
9696
|
+
active: { label: "In progress", className: "[color:var(--tone)]" },
|
|
9697
|
+
todo: { label: "Upcoming", className: "text-fg-4" }
|
|
9698
|
+
};
|
|
9699
|
+
var EngagementTimelineStep = forwardRef(
|
|
9700
|
+
function EngagementTimelineStep2({ state, name, index, note, date, actions, last, className, ...props }, ref) {
|
|
9701
|
+
const badge = stateBadge[state];
|
|
9702
|
+
return /* @__PURE__ */ jsxs("li", { ref, className: cn("flex gap-3", className), ...props, children: [
|
|
9703
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
|
|
9704
|
+
/* @__PURE__ */ jsx(
|
|
9705
|
+
"span",
|
|
9706
|
+
{
|
|
9707
|
+
"aria-hidden": "true",
|
|
9708
|
+
className: cn(
|
|
9709
|
+
"flex size-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold tabular-nums",
|
|
9710
|
+
state === "done" && "bg-success-fg text-fg-on-success",
|
|
9711
|
+
state === "active" && "bg-surface border-2 [border-color:var(--tone)] [color:var(--tone)]",
|
|
9712
|
+
state === "todo" && "bg-bg-3 text-fg-4"
|
|
9713
|
+
),
|
|
9714
|
+
children: state === "done" ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4", strokeWidth: 3 }) : index
|
|
9715
|
+
}
|
|
9716
|
+
),
|
|
9717
|
+
!last && /* @__PURE__ */ jsx(
|
|
9718
|
+
"span",
|
|
9719
|
+
{
|
|
9720
|
+
"aria-hidden": "true",
|
|
9721
|
+
className: cn("w-0.5 flex-1", state === "done" ? "bg-success-line" : "bg-rule")
|
|
9722
|
+
}
|
|
9723
|
+
)
|
|
9724
|
+
] }),
|
|
9725
|
+
/* @__PURE__ */ jsxs("div", { className: cn("min-w-0 flex-1", last ? "pb-0" : "pb-6"), children: [
|
|
9726
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
9727
|
+
/* @__PURE__ */ jsx(
|
|
9728
|
+
"span",
|
|
9729
|
+
{
|
|
9730
|
+
className: cn(
|
|
9731
|
+
"text-sm font-medium",
|
|
9732
|
+
state === "todo" ? "text-fg-3" : "text-fg"
|
|
9733
|
+
),
|
|
9734
|
+
children: name
|
|
9735
|
+
}
|
|
9736
|
+
),
|
|
9737
|
+
/* @__PURE__ */ jsx("span", { className: cn("shrink-0 text-[11px] font-semibold", badge.className), children: badge.label })
|
|
9738
|
+
] }),
|
|
9739
|
+
note != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-xs", children: note }),
|
|
9740
|
+
state === "done" && date != null && /* @__PURE__ */ jsxs("p", { className: "text-success-fg mt-1 inline-flex items-center gap-1 text-[11px]", children: [
|
|
9741
|
+
/* @__PURE__ */ jsx(CheckIcon, { className: "size-3", strokeWidth: 3, "aria-hidden": "true" }),
|
|
9742
|
+
" Completed ",
|
|
9743
|
+
date
|
|
9744
|
+
] }),
|
|
9745
|
+
state === "active" && actions && /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: actions })
|
|
9746
|
+
] })
|
|
9747
|
+
] });
|
|
9748
|
+
}
|
|
9749
|
+
);
|
|
9750
|
+
EngagementTimelineStep.displayName = "EngagementTimelineStep";
|
|
9751
|
+
var INDENT = 18;
|
|
9752
|
+
var FolderTree = forwardRef(function FolderTree2({ nodes, activeId, onSelect, defaultOpenIds, openIds, onOpenChange, className, ...props }, ref) {
|
|
9753
|
+
const isControlled = openIds !== void 0;
|
|
9754
|
+
const [internalOpen, setInternalOpen] = useState(() => new Set(defaultOpenIds ?? []));
|
|
9755
|
+
const open = isControlled ? new Set(openIds) : internalOpen;
|
|
9756
|
+
const toggle = (id) => {
|
|
9757
|
+
const next = new Set(open);
|
|
9758
|
+
if (next.has(id)) next.delete(id);
|
|
9759
|
+
else next.add(id);
|
|
9760
|
+
if (isControlled) onOpenChange?.([...next]);
|
|
9761
|
+
else {
|
|
9762
|
+
setInternalOpen(next);
|
|
9763
|
+
onOpenChange?.([...next]);
|
|
9764
|
+
}
|
|
9765
|
+
};
|
|
9766
|
+
const renderNode = (node, depth) => {
|
|
9767
|
+
const hasChildren = Boolean(node.children?.length);
|
|
9768
|
+
const isOpen = open.has(node.id);
|
|
9769
|
+
const isActive = activeId === node.id;
|
|
9770
|
+
return /* @__PURE__ */ jsxs("li", { children: [
|
|
9771
|
+
/* @__PURE__ */ jsxs(
|
|
9772
|
+
"div",
|
|
9773
|
+
{
|
|
9774
|
+
className: cn(
|
|
9775
|
+
"group/row flex items-stretch rounded-[var(--radius-icon)]",
|
|
9776
|
+
isActive ? "bg-pro-bg" : "hover:bg-bg-2"
|
|
9777
|
+
),
|
|
9778
|
+
children: [
|
|
9779
|
+
/* @__PURE__ */ jsx(
|
|
9780
|
+
"button",
|
|
9781
|
+
{
|
|
9782
|
+
type: "button",
|
|
9783
|
+
"aria-expanded": hasChildren ? isOpen : void 0,
|
|
9784
|
+
"aria-label": isOpen ? `Collapse ${node.name}` : `Expand ${node.name}`,
|
|
9785
|
+
onClick: () => hasChildren && toggle(node.id),
|
|
9786
|
+
disabled: !hasChildren,
|
|
9787
|
+
className: "flex w-6 shrink-0 items-center justify-center self-stretch text-fg-4 disabled:opacity-0",
|
|
9788
|
+
style: { marginLeft: depth * INDENT },
|
|
9789
|
+
tabIndex: hasChildren ? 0 : -1,
|
|
9790
|
+
children: /* @__PURE__ */ jsx(
|
|
9791
|
+
ChevronRightIcon,
|
|
9792
|
+
{
|
|
9793
|
+
className: cn(
|
|
9794
|
+
"size-3.5 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
9795
|
+
isOpen && "rotate-90"
|
|
9796
|
+
),
|
|
9797
|
+
"aria-hidden": "true"
|
|
9798
|
+
}
|
|
9799
|
+
)
|
|
9800
|
+
}
|
|
9801
|
+
),
|
|
9802
|
+
/* @__PURE__ */ jsxs(
|
|
9803
|
+
"button",
|
|
9804
|
+
{
|
|
9805
|
+
type: "button",
|
|
9806
|
+
onClick: () => onSelect?.(node.id),
|
|
9807
|
+
"aria-current": isActive ? "true" : void 0,
|
|
9808
|
+
className: cn(
|
|
9809
|
+
"flex min-w-0 flex-1 items-center gap-2 py-1.5 pr-2 text-left text-sm focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
9810
|
+
isActive ? "text-pro-fg font-medium" : "text-fg-2"
|
|
9811
|
+
),
|
|
9812
|
+
children: [
|
|
9813
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "shrink-0 [&_svg]:size-4", children: isOpen && hasChildren ? /* @__PURE__ */ jsx(FolderOpenIcon, {}) : /* @__PURE__ */ jsx(FolderClosedIcon, {}) }),
|
|
9814
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: node.name }),
|
|
9815
|
+
node.count != null && /* @__PURE__ */ jsx("span", { className: "text-fg-4 shrink-0 text-xs tabular-nums", children: node.count })
|
|
9816
|
+
]
|
|
9817
|
+
}
|
|
9818
|
+
)
|
|
9819
|
+
]
|
|
9820
|
+
}
|
|
9821
|
+
),
|
|
9822
|
+
hasChildren && isOpen && /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: node.children.map((child) => renderNode(child, depth + 1)) })
|
|
9823
|
+
] }, node.id);
|
|
9824
|
+
};
|
|
9825
|
+
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)) }) });
|
|
9826
|
+
});
|
|
9827
|
+
FolderTree.displayName = "FolderTree";
|
|
9828
|
+
function renderAction(action) {
|
|
9829
|
+
return /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: action.onSelect, children: [
|
|
9830
|
+
action.icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-fg-3 [&_svg]:size-4", children: action.icon }),
|
|
9831
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
9832
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: action.label }),
|
|
9833
|
+
action.description && /* @__PURE__ */ jsx("span", { className: "text-fg-3 truncate text-xs", children: action.description })
|
|
9834
|
+
] }),
|
|
9835
|
+
action.shortcut && /* @__PURE__ */ jsx(DropdownMenuShortcut, { children: action.shortcut })
|
|
9836
|
+
] }, action.id);
|
|
9837
|
+
}
|
|
9838
|
+
var NewMenu = forwardRef(function NewMenu2({ actions, groups, triggerLabel = "New", trigger, align = "end" }, ref) {
|
|
9839
|
+
const sections = groups ?? (actions ? [{ actions }] : []);
|
|
9840
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
9841
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: trigger ?? /* @__PURE__ */ jsxs(Button, { ref, iconLeft: /* @__PURE__ */ jsx(PlusIcon, {}), children: [
|
|
9842
|
+
triggerLabel,
|
|
9843
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-70" })
|
|
9844
|
+
] }) }),
|
|
9845
|
+
/* @__PURE__ */ jsx(DropdownMenuContent, { align, className: "w-60", children: sections.map((section, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
9846
|
+
i > 0 && /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
9847
|
+
section.label && /* @__PURE__ */ jsx(DropdownMenuLabel, { children: section.label }),
|
|
9848
|
+
section.actions.map(renderAction)
|
|
9849
|
+
] }, i)) })
|
|
9850
|
+
] });
|
|
9851
|
+
});
|
|
9852
|
+
NewMenu.displayName = "NewMenu";
|
|
8248
9853
|
var Shell = forwardRef(function Shell2({ className, ...props }, ref) {
|
|
8249
9854
|
return /* @__PURE__ */ jsx("div", { ref, className: cn("bg-bg flex h-dvh w-full", className), ...props });
|
|
8250
9855
|
});
|
|
@@ -8280,7 +9885,7 @@ var Content16 = forwardRef(function Content17({ padTop, padBottom, className, st
|
|
|
8280
9885
|
);
|
|
8281
9886
|
});
|
|
8282
9887
|
Content16.displayName = "Content";
|
|
8283
|
-
var SidebarContext =
|
|
9888
|
+
var SidebarContext = React37.createContext(null);
|
|
8284
9889
|
var NOOP_CONTEXT = {
|
|
8285
9890
|
state: "expanded",
|
|
8286
9891
|
setState: () => {
|
|
@@ -8293,7 +9898,7 @@ var NOOP_CONTEXT = {
|
|
|
8293
9898
|
}
|
|
8294
9899
|
};
|
|
8295
9900
|
function useSidebarState() {
|
|
8296
|
-
return
|
|
9901
|
+
return React37.useContext(SidebarContext) ?? NOOP_CONTEXT;
|
|
8297
9902
|
}
|
|
8298
9903
|
var DEFAULT_SHORTCUT = "Mod+\\";
|
|
8299
9904
|
function readStorage(key) {
|
|
@@ -8313,16 +9918,16 @@ function SidebarProvider({
|
|
|
8313
9918
|
storageKey,
|
|
8314
9919
|
shortcut = DEFAULT_SHORTCUT
|
|
8315
9920
|
}) {
|
|
8316
|
-
const [uncontrolled, setUncontrolled] =
|
|
9921
|
+
const [uncontrolled, setUncontrolled] = React37.useState(
|
|
8317
9922
|
controlled ?? defaultState
|
|
8318
9923
|
);
|
|
8319
|
-
|
|
9924
|
+
React37.useEffect(() => {
|
|
8320
9925
|
if (controlled !== void 0) return;
|
|
8321
9926
|
const stored = readStorage(storageKey);
|
|
8322
9927
|
if (stored && stored !== uncontrolled) setUncontrolled(stored);
|
|
8323
9928
|
}, []);
|
|
8324
9929
|
const state = controlled ?? uncontrolled;
|
|
8325
|
-
const setState =
|
|
9930
|
+
const setState = React37.useCallback(
|
|
8326
9931
|
(next) => {
|
|
8327
9932
|
if (controlled === void 0) setUncontrolled(next);
|
|
8328
9933
|
onStateChange?.(next);
|
|
@@ -8335,11 +9940,11 @@ function SidebarProvider({
|
|
|
8335
9940
|
},
|
|
8336
9941
|
[controlled, onStateChange, storageKey]
|
|
8337
9942
|
);
|
|
8338
|
-
const toggle =
|
|
9943
|
+
const toggle = React37.useCallback(() => {
|
|
8339
9944
|
setState(state === "expanded" ? "rail" : "expanded");
|
|
8340
9945
|
}, [state, setState]);
|
|
8341
|
-
const [peekLockCount, setPeekLockCount] =
|
|
8342
|
-
const acquirePeekLock =
|
|
9946
|
+
const [peekLockCount, setPeekLockCount] = React37.useState(0);
|
|
9947
|
+
const acquirePeekLock = React37.useCallback(() => {
|
|
8343
9948
|
setPeekLockCount((n) => n + 1);
|
|
8344
9949
|
let released = false;
|
|
8345
9950
|
return () => {
|
|
@@ -8348,7 +9953,7 @@ function SidebarProvider({
|
|
|
8348
9953
|
setPeekLockCount((n) => Math.max(0, n - 1));
|
|
8349
9954
|
};
|
|
8350
9955
|
}, []);
|
|
8351
|
-
|
|
9956
|
+
React37.useEffect(() => {
|
|
8352
9957
|
if (!shortcut) return;
|
|
8353
9958
|
const parts = shortcut.split("+");
|
|
8354
9959
|
const key = parts.pop() ?? "";
|
|
@@ -8368,7 +9973,7 @@ function SidebarProvider({
|
|
|
8368
9973
|
window.addEventListener("keydown", onKey);
|
|
8369
9974
|
return () => window.removeEventListener("keydown", onKey);
|
|
8370
9975
|
}, [shortcut, toggle]);
|
|
8371
|
-
const value =
|
|
9976
|
+
const value = React37.useMemo(
|
|
8372
9977
|
() => ({ state, setState, toggle, collapsible: true, peekLockCount, acquirePeekLock }),
|
|
8373
9978
|
[state, setState, toggle, peekLockCount, acquirePeekLock]
|
|
8374
9979
|
);
|
|
@@ -8377,15 +9982,15 @@ function SidebarProvider({
|
|
|
8377
9982
|
SidebarProvider.displayName = "SidebarProvider";
|
|
8378
9983
|
var PEEK_ENTER_DELAY_MS = 100;
|
|
8379
9984
|
var PEEK_LEAVE_DELAY_MS = 200;
|
|
8380
|
-
var Sidebar =
|
|
9985
|
+
var Sidebar = React37.forwardRef(function Sidebar2({ className, collapsible = false, variant = "classic", onMouseEnter, onMouseLeave, style, ...props }, ref) {
|
|
8381
9986
|
const isFloating = variant === "floating";
|
|
8382
|
-
const ctx =
|
|
9987
|
+
const ctx = React37.useContext(SidebarContext);
|
|
8383
9988
|
const state = collapsible && ctx ? ctx.state : "expanded";
|
|
8384
9989
|
const peekLockCount = collapsible && ctx ? ctx.peekLockCount : 0;
|
|
8385
|
-
const [peek, setPeek] =
|
|
8386
|
-
const enterTimer =
|
|
8387
|
-
const leaveTimer =
|
|
8388
|
-
const clearTimers =
|
|
9990
|
+
const [peek, setPeek] = React37.useState(false);
|
|
9991
|
+
const enterTimer = React37.useRef(null);
|
|
9992
|
+
const leaveTimer = React37.useRef(null);
|
|
9993
|
+
const clearTimers = React37.useCallback(() => {
|
|
8389
9994
|
if (enterTimer.current != null) {
|
|
8390
9995
|
window.clearTimeout(enterTimer.current);
|
|
8391
9996
|
enterTimer.current = null;
|
|
@@ -8395,8 +10000,8 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
|
|
|
8395
10000
|
leaveTimer.current = null;
|
|
8396
10001
|
}
|
|
8397
10002
|
}, []);
|
|
8398
|
-
|
|
8399
|
-
|
|
10003
|
+
React37.useEffect(() => () => clearTimers(), [clearTimers]);
|
|
10004
|
+
React37.useEffect(() => {
|
|
8400
10005
|
if (state === "expanded") {
|
|
8401
10006
|
clearTimers();
|
|
8402
10007
|
setPeek(false);
|
|
@@ -8477,7 +10082,7 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
|
|
|
8477
10082
|
);
|
|
8478
10083
|
});
|
|
8479
10084
|
Sidebar.displayName = "Sidebar";
|
|
8480
|
-
var SidebarTrigger =
|
|
10085
|
+
var SidebarTrigger = React37.forwardRef(
|
|
8481
10086
|
function SidebarTrigger2({
|
|
8482
10087
|
className,
|
|
8483
10088
|
expandLabel = "Expand sidebar",
|
|
@@ -8485,7 +10090,7 @@ var SidebarTrigger = React36.forwardRef(
|
|
|
8485
10090
|
onClick,
|
|
8486
10091
|
...props
|
|
8487
10092
|
}, ref) {
|
|
8488
|
-
const ctx =
|
|
10093
|
+
const ctx = React37.useContext(SidebarContext);
|
|
8489
10094
|
if (!ctx) return null;
|
|
8490
10095
|
const { state, toggle } = ctx;
|
|
8491
10096
|
const label = state === "expanded" ? collapseLabel : expandLabel;
|
|
@@ -8516,14 +10121,14 @@ var SidebarTrigger = React36.forwardRef(
|
|
|
8516
10121
|
);
|
|
8517
10122
|
SidebarTrigger.displayName = "SidebarTrigger";
|
|
8518
10123
|
function useSidebarPeekLock(active) {
|
|
8519
|
-
const ctx =
|
|
8520
|
-
|
|
10124
|
+
const ctx = React37.useContext(SidebarContext);
|
|
10125
|
+
React37.useEffect(() => {
|
|
8521
10126
|
if (!active || !ctx) return;
|
|
8522
10127
|
const release = ctx.acquirePeekLock();
|
|
8523
10128
|
return release;
|
|
8524
10129
|
}, [active, ctx]);
|
|
8525
10130
|
}
|
|
8526
|
-
var SidebarPinButton =
|
|
10131
|
+
var SidebarPinButton = React37.forwardRef(
|
|
8527
10132
|
function SidebarPinButton2({
|
|
8528
10133
|
pinLabel = "Pin sidebar",
|
|
8529
10134
|
unpinLabel = "Unpin sidebar",
|
|
@@ -8531,7 +10136,7 @@ var SidebarPinButton = React36.forwardRef(
|
|
|
8531
10136
|
onClick,
|
|
8532
10137
|
...props
|
|
8533
10138
|
}, ref) {
|
|
8534
|
-
const ctx =
|
|
10139
|
+
const ctx = React37.useContext(SidebarContext);
|
|
8535
10140
|
if (!ctx || !ctx.collapsible) return null;
|
|
8536
10141
|
const { state, setState } = ctx;
|
|
8537
10142
|
const isPinned = state === "expanded";
|
|
@@ -8596,7 +10201,7 @@ function PinGlyph({
|
|
|
8596
10201
|
}
|
|
8597
10202
|
);
|
|
8598
10203
|
}
|
|
8599
|
-
var SidebarBrand =
|
|
10204
|
+
var SidebarBrand = React37.forwardRef(
|
|
8600
10205
|
function SidebarBrand2({ className, ...props }, ref) {
|
|
8601
10206
|
return /* @__PURE__ */ jsx(
|
|
8602
10207
|
"div",
|
|
@@ -8612,7 +10217,7 @@ var SidebarBrand = React36.forwardRef(
|
|
|
8612
10217
|
}
|
|
8613
10218
|
);
|
|
8614
10219
|
SidebarBrand.displayName = "SidebarBrand";
|
|
8615
|
-
var SidebarBrandText =
|
|
10220
|
+
var SidebarBrandText = React37.forwardRef(
|
|
8616
10221
|
function SidebarBrandText2({ className, ...props }, ref) {
|
|
8617
10222
|
return /* @__PURE__ */ jsx(
|
|
8618
10223
|
"span",
|
|
@@ -8637,16 +10242,16 @@ var SidebarBrandText = React36.forwardRef(
|
|
|
8637
10242
|
}
|
|
8638
10243
|
);
|
|
8639
10244
|
SidebarBrandText.displayName = "SidebarBrandText";
|
|
8640
|
-
var SidebarGroupScopeContext =
|
|
8641
|
-
var SidebarSection =
|
|
10245
|
+
var SidebarGroupScopeContext = React37.createContext(null);
|
|
10246
|
+
var SidebarSection = React37.forwardRef(
|
|
8642
10247
|
function SidebarSection2({ label, tone = "pro", className, children, ...props }, ref) {
|
|
8643
10248
|
const ariaLabel = typeof label === "string" ? label : typeof label === "number" ? String(label) : void 0;
|
|
8644
|
-
const [exclusiveId, setExclusiveIdState] =
|
|
8645
|
-
const setExclusive =
|
|
10249
|
+
const [exclusiveId, setExclusiveIdState] = React37.useState(null);
|
|
10250
|
+
const setExclusive = React37.useCallback(
|
|
8646
10251
|
(id) => setExclusiveIdState(id),
|
|
8647
10252
|
[]
|
|
8648
10253
|
);
|
|
8649
|
-
const scope =
|
|
10254
|
+
const scope = React37.useMemo(
|
|
8650
10255
|
() => ({ exclusiveId, setExclusive }),
|
|
8651
10256
|
[exclusiveId, setExclusive]
|
|
8652
10257
|
);
|
|
@@ -8699,12 +10304,12 @@ function getTextContent(node) {
|
|
|
8699
10304
|
if (node == null || typeof node === "boolean") return "";
|
|
8700
10305
|
if (typeof node === "string" || typeof node === "number") return String(node);
|
|
8701
10306
|
if (Array.isArray(node)) return node.map(getTextContent).filter(Boolean).join(" ");
|
|
8702
|
-
if (
|
|
10307
|
+
if (React37.isValidElement(node)) {
|
|
8703
10308
|
return getTextContent(node.props.children);
|
|
8704
10309
|
}
|
|
8705
10310
|
return "";
|
|
8706
10311
|
}
|
|
8707
|
-
var SidebarLink =
|
|
10312
|
+
var SidebarLink = React37.forwardRef(
|
|
8708
10313
|
function SidebarLink2({ href, icon, active = false, asChild, className, children, "aria-label": ariaLabel, ...props }, ref) {
|
|
8709
10314
|
const Comp = asChild ? Slot : "a";
|
|
8710
10315
|
const accessibleLabel = ariaLabel ?? (asChild ? void 0 : getTextContent(children) || void 0);
|
|
@@ -8775,7 +10380,7 @@ var SidebarLink = React36.forwardRef(
|
|
|
8775
10380
|
}
|
|
8776
10381
|
);
|
|
8777
10382
|
SidebarLink.displayName = "SidebarLink";
|
|
8778
|
-
var SidebarLinkLabel =
|
|
10383
|
+
var SidebarLinkLabel = React37.forwardRef(
|
|
8779
10384
|
function SidebarLinkLabel2({ className, ...props }, ref) {
|
|
8780
10385
|
return /* @__PURE__ */ jsx(
|
|
8781
10386
|
"span",
|
|
@@ -8800,7 +10405,7 @@ var SidebarLinkLabel = React36.forwardRef(
|
|
|
8800
10405
|
}
|
|
8801
10406
|
);
|
|
8802
10407
|
SidebarLinkLabel.displayName = "SidebarLinkLabel";
|
|
8803
|
-
var SidebarLinkAction =
|
|
10408
|
+
var SidebarLinkAction = React37.forwardRef(
|
|
8804
10409
|
function SidebarLinkAction2({ className, ...props }, ref) {
|
|
8805
10410
|
return /* @__PURE__ */ jsx(
|
|
8806
10411
|
"span",
|
|
@@ -8832,13 +10437,13 @@ var sidebarLinkBadgeVariants = cva(
|
|
|
8832
10437
|
defaultVariants: { tone: "default" }
|
|
8833
10438
|
}
|
|
8834
10439
|
);
|
|
8835
|
-
var SidebarLinkBadge =
|
|
10440
|
+
var SidebarLinkBadge = React37.forwardRef(
|
|
8836
10441
|
function SidebarLinkBadge2({ tone, className, ...props }, ref) {
|
|
8837
10442
|
return /* @__PURE__ */ jsx("span", { ref, className: cn(sidebarLinkBadgeVariants({ tone }), className), ...props });
|
|
8838
10443
|
}
|
|
8839
10444
|
);
|
|
8840
10445
|
SidebarLinkBadge.displayName = "SidebarLinkBadge";
|
|
8841
|
-
var SidebarLinkGroup =
|
|
10446
|
+
var SidebarLinkGroup = React37.forwardRef(
|
|
8842
10447
|
function SidebarLinkGroup2({
|
|
8843
10448
|
id: idProp,
|
|
8844
10449
|
icon,
|
|
@@ -8853,19 +10458,19 @@ var SidebarLinkGroup = React36.forwardRef(
|
|
|
8853
10458
|
children,
|
|
8854
10459
|
...props
|
|
8855
10460
|
}, ref) {
|
|
8856
|
-
const reactId =
|
|
10461
|
+
const reactId = React37.useId();
|
|
8857
10462
|
const id = idProp ?? reactId;
|
|
8858
|
-
const scope =
|
|
8859
|
-
const [uncontrolledOpen, setUncontrolledOpen] =
|
|
10463
|
+
const scope = React37.useContext(SidebarGroupScopeContext);
|
|
10464
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React37.useState(defaultOpen);
|
|
8860
10465
|
const open = controlled ?? uncontrolledOpen;
|
|
8861
|
-
const setOpen =
|
|
10466
|
+
const setOpen = React37.useCallback(
|
|
8862
10467
|
(next) => {
|
|
8863
10468
|
if (controlled === void 0) setUncontrolledOpen(next);
|
|
8864
10469
|
onOpenChange?.(next);
|
|
8865
10470
|
},
|
|
8866
10471
|
[controlled, onOpenChange]
|
|
8867
10472
|
);
|
|
8868
|
-
|
|
10473
|
+
React37.useEffect(() => {
|
|
8869
10474
|
if (scope?.exclusiveId && scope.exclusiveId !== id && open) {
|
|
8870
10475
|
setOpen(false);
|
|
8871
10476
|
}
|
|
@@ -8974,7 +10579,7 @@ var SidebarLinkGroup = React36.forwardRef(
|
|
|
8974
10579
|
}
|
|
8975
10580
|
);
|
|
8976
10581
|
SidebarLinkGroup.displayName = "SidebarLinkGroup";
|
|
8977
|
-
var SidebarFooter =
|
|
10582
|
+
var SidebarFooter = React37.forwardRef(
|
|
8978
10583
|
function SidebarFooter2({ className, ...props }, ref) {
|
|
8979
10584
|
return /* @__PURE__ */ jsx(
|
|
8980
10585
|
"div",
|
|
@@ -8991,7 +10596,7 @@ var SidebarFooter = React36.forwardRef(
|
|
|
8991
10596
|
}
|
|
8992
10597
|
);
|
|
8993
10598
|
SidebarFooter.displayName = "SidebarFooter";
|
|
8994
|
-
var SidebarUser =
|
|
10599
|
+
var SidebarUser = React37.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
|
|
8995
10600
|
return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex min-w-0 items-center gap-2.5", className), ...props, children: [
|
|
8996
10601
|
/* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
|
|
8997
10602
|
/* @__PURE__ */ jsxs(
|
|
@@ -9012,7 +10617,7 @@ var SidebarUser = React36.forwardRef(function SidebarUser2({ name, subtitle, ava
|
|
|
9012
10617
|
] });
|
|
9013
10618
|
});
|
|
9014
10619
|
SidebarUser.displayName = "SidebarUser";
|
|
9015
|
-
var SidebarBrandSwitcher =
|
|
10620
|
+
var SidebarBrandSwitcher = React37.forwardRef(
|
|
9016
10621
|
function SidebarBrandSwitcher2({
|
|
9017
10622
|
brand,
|
|
9018
10623
|
label,
|
|
@@ -9030,7 +10635,7 @@ var SidebarBrandSwitcher = React36.forwardRef(
|
|
|
9030
10635
|
contentClassName,
|
|
9031
10636
|
trailing
|
|
9032
10637
|
}, ref) {
|
|
9033
|
-
const [open, setOpen] =
|
|
10638
|
+
const [open, setOpen] = React37.useState(false);
|
|
9034
10639
|
useSidebarPeekLock(open);
|
|
9035
10640
|
const others = items.filter((p) => p.id !== current.id);
|
|
9036
10641
|
return (
|
|
@@ -9150,7 +10755,7 @@ function SidebarBrandSwitcherOtherRow({
|
|
|
9150
10755
|
unavailableBadge
|
|
9151
10756
|
}) {
|
|
9152
10757
|
const reachable = item.available !== false;
|
|
9153
|
-
const [launching, setLaunching] =
|
|
10758
|
+
const [launching, setLaunching] = React37.useState(false);
|
|
9154
10759
|
const handleSelect = async () => {
|
|
9155
10760
|
if (!reachable || launching || !onLaunch) return;
|
|
9156
10761
|
setLaunching(true);
|
|
@@ -9559,14 +11164,14 @@ var DataTable = forwardRef(function DataTable2({ withToolbar, className, childre
|
|
|
9559
11164
|
"div",
|
|
9560
11165
|
{
|
|
9561
11166
|
ref,
|
|
11167
|
+
"data-with-toolbar": withToolbar ? "true" : void 0,
|
|
9562
11168
|
className: cn(
|
|
9563
|
-
|
|
9564
|
-
//
|
|
11169
|
+
// Outer frame on the whole component: a single visible border +
|
|
11170
|
+
// quiet shadow wrapping the toolbar (if any) and the table as one
|
|
11171
|
+
// card. overflow-hidden clips the header/cell backgrounds to the
|
|
11172
|
+
// rounded corners.
|
|
11173
|
+
"w-full overflow-hidden rounded-card border border-rule-strong bg-surface shadow-quiet",
|
|
9565
11174
|
"[&_table]:bg-surface [&_table]:w-full [&_table]:border-collapse",
|
|
9566
|
-
"[&_table]:border-rule [&_table]:border",
|
|
9567
|
-
withToolbar ? "[&_table]:rounded-b-card [&_table]:border-t-0" : "[&_table]:rounded-card",
|
|
9568
|
-
// Clip cell backgrounds at the rounded corners.
|
|
9569
|
-
"[&_table]:overflow-hidden",
|
|
9570
11175
|
className
|
|
9571
11176
|
),
|
|
9572
11177
|
...props,
|
|
@@ -9583,7 +11188,7 @@ var DataTableToolbar = forwardRef(
|
|
|
9583
11188
|
ref,
|
|
9584
11189
|
className: cn(
|
|
9585
11190
|
"flex items-center gap-2 px-3 py-2.5",
|
|
9586
|
-
"
|
|
11191
|
+
"border-rule bg-surface border-b",
|
|
9587
11192
|
className
|
|
9588
11193
|
),
|
|
9589
11194
|
...props
|
|
@@ -9621,7 +11226,7 @@ var DataTableResultsCount = forwardRef(
|
|
|
9621
11226
|
"span",
|
|
9622
11227
|
{
|
|
9623
11228
|
ref,
|
|
9624
|
-
className: cn("text-fg-4 mr-1 font-
|
|
11229
|
+
className: cn("text-fg-4 mr-1 font-sans text-[11px] tabular-nums", className),
|
|
9625
11230
|
...props,
|
|
9626
11231
|
children: [
|
|
9627
11232
|
current.toLocaleString(),
|
|
@@ -9706,9 +11311,9 @@ var DataTableHeader = forwardRef(
|
|
|
9706
11311
|
scope: "col",
|
|
9707
11312
|
"aria-sort": ariaSort,
|
|
9708
11313
|
className: cn(
|
|
9709
|
-
"h-
|
|
9710
|
-
"font-
|
|
9711
|
-
"text-fg-
|
|
11314
|
+
"h-11 px-4 py-2.5 text-left align-middle whitespace-nowrap",
|
|
11315
|
+
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
11316
|
+
"text-fg-3 bg-surface-2",
|
|
9712
11317
|
"border-rule border-b",
|
|
9713
11318
|
"[&:has([role=checkbox])]:pr-0",
|
|
9714
11319
|
className
|
|
@@ -9721,9 +11326,9 @@ var DataTableHeader = forwardRef(
|
|
|
9721
11326
|
onClick: handleClick,
|
|
9722
11327
|
className: cn(
|
|
9723
11328
|
"-mx-1 -my-1 inline-flex items-center gap-1 rounded-[4px] px-1 py-1",
|
|
9724
|
-
"font-
|
|
9725
|
-
"text-fg-
|
|
9726
|
-
"hover:text-fg
|
|
11329
|
+
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
11330
|
+
"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
11331
|
+
"hover:text-fg",
|
|
9727
11332
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
9728
11333
|
),
|
|
9729
11334
|
children: [
|
|
@@ -9737,7 +11342,7 @@ var DataTableHeader = forwardRef(
|
|
|
9737
11342
|
}
|
|
9738
11343
|
);
|
|
9739
11344
|
DataTableHeader.displayName = "DataTableHeader";
|
|
9740
|
-
var cellBase = "px-
|
|
11345
|
+
var cellBase = "px-4 py-3 align-middle";
|
|
9741
11346
|
var DataTableCell = forwardRef(
|
|
9742
11347
|
function DataTableCell2({ className, ...props }, ref) {
|
|
9743
11348
|
return /* @__PURE__ */ jsx(
|
|
@@ -9775,7 +11380,7 @@ var DataTableCellMono = forwardRef(
|
|
|
9775
11380
|
"td",
|
|
9776
11381
|
{
|
|
9777
11382
|
ref,
|
|
9778
|
-
className: cn(cellBase, "font-
|
|
11383
|
+
className: cn(cellBase, "font-sans text-fg-2 text-[13px] tabular-nums", className),
|
|
9779
11384
|
style,
|
|
9780
11385
|
...props
|
|
9781
11386
|
}
|
|
@@ -9789,7 +11394,7 @@ var DataTableCellId = forwardRef(
|
|
|
9789
11394
|
"td",
|
|
9790
11395
|
{
|
|
9791
11396
|
ref,
|
|
9792
|
-
className: cn(cellBase, "font-
|
|
11397
|
+
className: cn(cellBase, "font-sans text-fg-4 text-xs tabular-nums", className),
|
|
9793
11398
|
style,
|
|
9794
11399
|
...props
|
|
9795
11400
|
}
|
|
@@ -9814,7 +11419,7 @@ var DataTableCellDue = forwardRef(
|
|
|
9814
11419
|
{
|
|
9815
11420
|
ref,
|
|
9816
11421
|
"data-due-state": ariaState,
|
|
9817
|
-
className: cn(cellBase, "font-
|
|
11422
|
+
className: cn(cellBase, "font-sans text-[13px] tabular-nums", tone, className),
|
|
9818
11423
|
style,
|
|
9819
11424
|
...props,
|
|
9820
11425
|
children: children ?? dueDateFormatter.format(value)
|
|
@@ -9840,8 +11445,8 @@ var DataTableCheckbox = forwardRef(
|
|
|
9840
11445
|
{
|
|
9841
11446
|
ref,
|
|
9842
11447
|
className: cn(
|
|
9843
|
-
"w-8 px-
|
|
9844
|
-
asHeader && "bg-surface-2 border-rule h-
|
|
11448
|
+
"w-8 px-4 py-3 pr-0 align-middle",
|
|
11449
|
+
asHeader && "bg-surface-2 border-rule h-11 border-b",
|
|
9845
11450
|
className
|
|
9846
11451
|
),
|
|
9847
11452
|
...props,
|
|
@@ -11067,7 +12672,7 @@ var FilterChip = forwardRef(function FilterChip2({ active = false, size, count,
|
|
|
11067
12672
|
);
|
|
11068
12673
|
});
|
|
11069
12674
|
FilterChip.displayName = "FilterChip";
|
|
11070
|
-
var BulkActionBarContext =
|
|
12675
|
+
var BulkActionBarContext = React37.createContext({ tone: "surface" });
|
|
11071
12676
|
function actionClasses(tone, destructive) {
|
|
11072
12677
|
const base = cn(
|
|
11073
12678
|
"inline-flex h-8 items-center gap-1.5 rounded-btn px-3 text-[13px] font-medium",
|
|
@@ -11090,8 +12695,8 @@ function actionClasses(tone, destructive) {
|
|
|
11090
12695
|
destructive ? "text-control-destructive-fg hover:bg-control-destructive-hover-bg" : "text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg"
|
|
11091
12696
|
);
|
|
11092
12697
|
}
|
|
11093
|
-
var BulkActionBarAction =
|
|
11094
|
-
const { tone } =
|
|
12698
|
+
var BulkActionBarAction = React37.forwardRef(function BulkActionBarAction2({ asChild = false, destructive, className, type, ...props }, ref) {
|
|
12699
|
+
const { tone } = React37.use(BulkActionBarContext);
|
|
11095
12700
|
const Comp = asChild ? Slot : "button";
|
|
11096
12701
|
return /* @__PURE__ */ jsx(
|
|
11097
12702
|
Comp,
|
|
@@ -11105,7 +12710,7 @@ var BulkActionBarAction = React36.forwardRef(function BulkActionBarAction2({ asC
|
|
|
11105
12710
|
});
|
|
11106
12711
|
BulkActionBarAction.displayName = "BulkActionBarAction";
|
|
11107
12712
|
function BulkActionBarSeparator({ className }) {
|
|
11108
|
-
const { tone } =
|
|
12713
|
+
const { tone } = React37.use(BulkActionBarContext);
|
|
11109
12714
|
return /* @__PURE__ */ jsx(
|
|
11110
12715
|
"span",
|
|
11111
12716
|
{
|
|
@@ -11305,6 +12910,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
|
|
|
11305
12910
|
});
|
|
11306
12911
|
KbdHint.displayName = "KbdHint";
|
|
11307
12912
|
|
|
11308
|
-
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, 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, 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, PhoneCountryInput, 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, getFlagEmoji, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
|
|
12913
|
+
export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, AreaChart, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, AttachmentChip, AttentionItem, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, BottomNav, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, COUNTRY_CODES, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryDivider, CategoryTag, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content16 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CountryFlag, CountrySelect, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentIcon, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileTypeBadge, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FolderUpIcon, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, IconTile, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LandmarkIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MasterDetailLayout, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, NewMenu, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PenSignIcon, PenToolIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, ResponsiveDialog, RotateCcwIcon, RouteTransition, SERVICE_TONES, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, SegmentedProgress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableKpiCard, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, StarIcon, StarRating, Stat, StatusDot, StatusIcon, StatusPill, Stepper, StickyActionBar, StopIcon, StrikethroughIcon, SubmitButton, SuiteProgress, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TeamIcon, TeamMemberSelect, Textarea, TimeLogger, TimeLoggerActions, TimeLoggerBillable, TimeLoggerContextRow, TimeLoggerEntry, TimeLoggerEntryList, TimeLoggerField, TimeLoggerFooter, TimeLoggerHeader, TimeLoggerNotes, TimeLoggerTimer, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, YEAR_DISPLAY_PLACEHOLDER, ZoomInIcon, ZoomOutIcon, alertVariants, applyMask, applyYearMask, attachmentChipVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, fileTypeBadgeVariants, fileTypeFromName, filterChipVariants, formatClock, formatCurrency, formatDuration, getFlagEmoji, iconTileVariants, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, statusDotVariants, suiteProgressFillVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
|
|
11309
12914
|
//# sourceMappingURL=index.js.map
|
|
11310
12915
|
//# sourceMappingURL=index.js.map
|