@assure-one/design-system 1.1.0 → 1.2.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 +432 -14
- package/dist/index.js +1051 -36
- 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
2
|
import * as React36 from 'react';
|
|
3
|
-
import { forwardRef,
|
|
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';
|
|
@@ -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)",
|
|
@@ -2473,6 +2495,103 @@ var AlertDescription = forwardRef(function AlertDescription2({ className, ...pro
|
|
|
2473
2495
|
return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm", className), ...props });
|
|
2474
2496
|
});
|
|
2475
2497
|
AlertDescription.displayName = "AlertDescription";
|
|
2498
|
+
var defaultFormat = (n) => n.toLocaleString();
|
|
2499
|
+
var AreaChart = forwardRef(function AreaChart2({ data, height = 140, formatValue = defaultFormat, showAxis = true, className, ...props }, ref) {
|
|
2500
|
+
const gradientId = useId();
|
|
2501
|
+
const wrapRef = useRef(null);
|
|
2502
|
+
const [width, setWidth] = useState(620);
|
|
2503
|
+
const [hover, setHover] = useState(null);
|
|
2504
|
+
useEffect(() => {
|
|
2505
|
+
const el = wrapRef.current;
|
|
2506
|
+
if (!el) return;
|
|
2507
|
+
const ro = new ResizeObserver((entries) => {
|
|
2508
|
+
for (const entry of entries) setWidth(entry.contentRect.width);
|
|
2509
|
+
});
|
|
2510
|
+
ro.observe(el);
|
|
2511
|
+
return () => ro.disconnect();
|
|
2512
|
+
}, []);
|
|
2513
|
+
const padX = 10;
|
|
2514
|
+
const padTop = 14;
|
|
2515
|
+
const padBot = 8;
|
|
2516
|
+
const max = Math.max(...data.map((d) => d.value), 1) * 1.15;
|
|
2517
|
+
const step = data.length > 1 ? (width - padX * 2) / (data.length - 1) : 0;
|
|
2518
|
+
const pts = data.map(
|
|
2519
|
+
(d, i) => [padX + i * step, height - padBot - d.value / max * (height - padTop - padBot)]
|
|
2520
|
+
);
|
|
2521
|
+
const line = pts.map((p, i) => `${i ? "L" : "M"}${p[0].toFixed(1)} ${p[1].toFixed(1)}`).join(" ");
|
|
2522
|
+
const area = pts.length > 0 ? `${line} L${pts[pts.length - 1][0].toFixed(1)} ${height} L${pts[0][0].toFixed(1)} ${height} Z` : "";
|
|
2523
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("w-full", className), ...props, children: [
|
|
2524
|
+
/* @__PURE__ */ jsxs("div", { ref: wrapRef, className: "relative w-full", children: [
|
|
2525
|
+
/* @__PURE__ */ jsxs(
|
|
2526
|
+
"svg",
|
|
2527
|
+
{
|
|
2528
|
+
width,
|
|
2529
|
+
height,
|
|
2530
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
2531
|
+
role: "img",
|
|
2532
|
+
"aria-label": "Area trend chart",
|
|
2533
|
+
onMouseLeave: () => setHover(null),
|
|
2534
|
+
children: [
|
|
2535
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
2536
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--color-chart-area-from)" }),
|
|
2537
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--color-chart-area-to)" })
|
|
2538
|
+
] }) }),
|
|
2539
|
+
area && /* @__PURE__ */ jsx("path", { d: area, fill: `url(#${gradientId})` }),
|
|
2540
|
+
line && /* @__PURE__ */ jsx(
|
|
2541
|
+
"path",
|
|
2542
|
+
{
|
|
2543
|
+
d: line,
|
|
2544
|
+
fill: "none",
|
|
2545
|
+
stroke: "var(--color-chart-line)",
|
|
2546
|
+
strokeWidth: "2.5",
|
|
2547
|
+
strokeLinecap: "round",
|
|
2548
|
+
strokeLinejoin: "round"
|
|
2549
|
+
}
|
|
2550
|
+
),
|
|
2551
|
+
pts.map((p, i) => /* @__PURE__ */ jsxs("g", { children: [
|
|
2552
|
+
/* @__PURE__ */ jsx(
|
|
2553
|
+
"circle",
|
|
2554
|
+
{
|
|
2555
|
+
cx: p[0],
|
|
2556
|
+
cy: p[1],
|
|
2557
|
+
r: hover === i ? 5.5 : 4,
|
|
2558
|
+
fill: "var(--color-surface)",
|
|
2559
|
+
stroke: "var(--color-chart-line)",
|
|
2560
|
+
strokeWidth: "2.5",
|
|
2561
|
+
className: "transition-[r] duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none"
|
|
2562
|
+
}
|
|
2563
|
+
),
|
|
2564
|
+
/* @__PURE__ */ jsx(
|
|
2565
|
+
"rect",
|
|
2566
|
+
{
|
|
2567
|
+
x: p[0] - (step || width) / 2,
|
|
2568
|
+
y: 0,
|
|
2569
|
+
width: step || width,
|
|
2570
|
+
height,
|
|
2571
|
+
fill: "transparent",
|
|
2572
|
+
onMouseEnter: () => setHover(i)
|
|
2573
|
+
}
|
|
2574
|
+
)
|
|
2575
|
+
] }, i))
|
|
2576
|
+
]
|
|
2577
|
+
}
|
|
2578
|
+
),
|
|
2579
|
+
hover != null && pts[hover] && /* @__PURE__ */ jsxs(
|
|
2580
|
+
"div",
|
|
2581
|
+
{
|
|
2582
|
+
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)]",
|
|
2583
|
+
style: { left: `${pts[hover][0] / width * 100}%` },
|
|
2584
|
+
children: [
|
|
2585
|
+
/* @__PURE__ */ jsx("span", { className: "block text-xs font-semibold tabular-nums", children: formatValue(data[hover].value) }),
|
|
2586
|
+
/* @__PURE__ */ jsx("span", { className: "block text-[10px] opacity-70", children: data[hover].label })
|
|
2587
|
+
]
|
|
2588
|
+
}
|
|
2589
|
+
)
|
|
2590
|
+
] }),
|
|
2591
|
+
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)) })
|
|
2592
|
+
] });
|
|
2593
|
+
});
|
|
2594
|
+
AreaChart.displayName = "AreaChart";
|
|
2476
2595
|
var AspectRatio = React36.forwardRef(function AspectRatio2({ className, ratio = 16 / 9, ...props }, ref) {
|
|
2477
2596
|
return /* @__PURE__ */ jsx(
|
|
2478
2597
|
AspectRatioPrimitive.Root,
|
|
@@ -2794,7 +2913,7 @@ var Spinner = forwardRef(function Spinner2({ size, tone, label, className, ...pr
|
|
|
2794
2913
|
Spinner.displayName = "Spinner";
|
|
2795
2914
|
var buttonVariants = cva(
|
|
2796
2915
|
cn(
|
|
2797
|
-
"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap",
|
|
2916
|
+
"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap cursor-pointer",
|
|
2798
2917
|
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
2799
2918
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
2800
2919
|
"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled",
|
|
@@ -4511,6 +4630,123 @@ var DismissibleChip = React36.forwardRef(function DismissibleChip2({ label, onDi
|
|
|
4511
4630
|
}
|
|
4512
4631
|
);
|
|
4513
4632
|
});
|
|
4633
|
+
var RAMP = [
|
|
4634
|
+
"var(--color-chart-1)",
|
|
4635
|
+
"var(--color-chart-2)",
|
|
4636
|
+
"var(--color-chart-3)",
|
|
4637
|
+
"var(--color-chart-4)"
|
|
4638
|
+
];
|
|
4639
|
+
var DonutChart = forwardRef(function DonutChart2({
|
|
4640
|
+
segments,
|
|
4641
|
+
size = 132,
|
|
4642
|
+
strokeWidth = 16,
|
|
4643
|
+
centerLabel = "Total",
|
|
4644
|
+
center,
|
|
4645
|
+
legend = true,
|
|
4646
|
+
className,
|
|
4647
|
+
...props
|
|
4648
|
+
}, ref) {
|
|
4649
|
+
const [hover, setHover] = useState(null);
|
|
4650
|
+
const titleId = useId();
|
|
4651
|
+
const total = segments.reduce((sum, s) => sum + s.value, 0) || 1;
|
|
4652
|
+
const radius = (size - strokeWidth) / 2;
|
|
4653
|
+
const circumference = 2 * Math.PI * radius;
|
|
4654
|
+
let acc = 0;
|
|
4655
|
+
const arcs = segments.map((s, i) => {
|
|
4656
|
+
const frac = s.value / total;
|
|
4657
|
+
const arc = {
|
|
4658
|
+
...s,
|
|
4659
|
+
color: s.color ?? RAMP[i % RAMP.length],
|
|
4660
|
+
dash: frac * circumference,
|
|
4661
|
+
offset: acc * circumference
|
|
4662
|
+
};
|
|
4663
|
+
acc += frac;
|
|
4664
|
+
return arc;
|
|
4665
|
+
});
|
|
4666
|
+
const active = hover != null ? arcs[hover] : null;
|
|
4667
|
+
return /* @__PURE__ */ jsxs(
|
|
4668
|
+
"div",
|
|
4669
|
+
{
|
|
4670
|
+
ref,
|
|
4671
|
+
className: cn("flex items-center gap-6", className),
|
|
4672
|
+
role: "img",
|
|
4673
|
+
"aria-labelledby": titleId,
|
|
4674
|
+
...props,
|
|
4675
|
+
children: [
|
|
4676
|
+
/* @__PURE__ */ jsxs("span", { id: titleId, className: "sr-only", children: [
|
|
4677
|
+
"Donut chart: ",
|
|
4678
|
+
arcs.map((a) => `${a.label} ${a.value}`).join(", ")
|
|
4679
|
+
] }),
|
|
4680
|
+
/* @__PURE__ */ jsxs("div", { className: "relative shrink-0", style: { width: size, height: size }, children: [
|
|
4681
|
+
/* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, "aria-hidden": "true", children: [
|
|
4682
|
+
/* @__PURE__ */ jsx(
|
|
4683
|
+
"circle",
|
|
4684
|
+
{
|
|
4685
|
+
cx: size / 2,
|
|
4686
|
+
cy: size / 2,
|
|
4687
|
+
r: radius,
|
|
4688
|
+
fill: "none",
|
|
4689
|
+
stroke: "var(--color-bg-3)",
|
|
4690
|
+
strokeWidth
|
|
4691
|
+
}
|
|
4692
|
+
),
|
|
4693
|
+
arcs.map((s, i) => /* @__PURE__ */ jsx(
|
|
4694
|
+
"circle",
|
|
4695
|
+
{
|
|
4696
|
+
cx: size / 2,
|
|
4697
|
+
cy: size / 2,
|
|
4698
|
+
r: radius,
|
|
4699
|
+
fill: "none",
|
|
4700
|
+
stroke: s.color,
|
|
4701
|
+
strokeWidth: hover === i ? strokeWidth + 3 : strokeWidth,
|
|
4702
|
+
strokeDasharray: `${s.dash} ${circumference - s.dash}`,
|
|
4703
|
+
strokeDashoffset: -s.offset,
|
|
4704
|
+
strokeLinecap: "butt",
|
|
4705
|
+
transform: `rotate(-90 ${size / 2} ${size / 2})`,
|
|
4706
|
+
className: "cursor-pointer transition-[stroke-width,opacity] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
4707
|
+
style: { opacity: hover != null && hover !== i ? 0.35 : 1 },
|
|
4708
|
+
onMouseEnter: () => setHover(i),
|
|
4709
|
+
onMouseLeave: () => setHover(null)
|
|
4710
|
+
},
|
|
4711
|
+
i
|
|
4712
|
+
))
|
|
4713
|
+
] }),
|
|
4714
|
+
/* @__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: [
|
|
4715
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg text-2xl font-semibold tabular-nums", children: active ? active.value : total }),
|
|
4716
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: active ? active.label : centerLabel })
|
|
4717
|
+
] }) })
|
|
4718
|
+
] }),
|
|
4719
|
+
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(
|
|
4720
|
+
"button",
|
|
4721
|
+
{
|
|
4722
|
+
type: "button",
|
|
4723
|
+
onMouseEnter: () => setHover(i),
|
|
4724
|
+
onMouseLeave: () => setHover(null),
|
|
4725
|
+
onFocus: () => setHover(i),
|
|
4726
|
+
onBlur: () => setHover(null),
|
|
4727
|
+
className: cn(
|
|
4728
|
+
"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",
|
|
4729
|
+
hover === i ? "bg-bg-2" : "hover:bg-bg-2"
|
|
4730
|
+
),
|
|
4731
|
+
children: [
|
|
4732
|
+
/* @__PURE__ */ jsx(
|
|
4733
|
+
"span",
|
|
4734
|
+
{
|
|
4735
|
+
"aria-hidden": "true",
|
|
4736
|
+
className: "size-2.5 shrink-0 rounded-[3px]",
|
|
4737
|
+
style: { background: s.color }
|
|
4738
|
+
}
|
|
4739
|
+
),
|
|
4740
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-2 min-w-0 flex-1 truncate", children: s.label }),
|
|
4741
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg tabular-nums", children: s.value })
|
|
4742
|
+
]
|
|
4743
|
+
}
|
|
4744
|
+
) }, i)) })
|
|
4745
|
+
]
|
|
4746
|
+
}
|
|
4747
|
+
);
|
|
4748
|
+
});
|
|
4749
|
+
DonutChart.displayName = "DonutChart";
|
|
4514
4750
|
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
4515
4751
|
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
4516
4752
|
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
@@ -4692,6 +4928,44 @@ var EmptyState = forwardRef(function EmptyState2({ icon, title, description, act
|
|
|
4692
4928
|
);
|
|
4693
4929
|
});
|
|
4694
4930
|
EmptyState.displayName = "EmptyState";
|
|
4931
|
+
var kindTile = {
|
|
4932
|
+
doc: "bg-danger-bg text-danger-fg",
|
|
4933
|
+
sheet: "bg-success-bg text-success-fg",
|
|
4934
|
+
image: "bg-accent-tint text-accent",
|
|
4935
|
+
generic: "bg-bg-3 text-fg-3"
|
|
4936
|
+
};
|
|
4937
|
+
var FileChip = forwardRef(function FileChip2({ name, meta, kind = "doc", icon, action, className, ...props }, ref) {
|
|
4938
|
+
return /* @__PURE__ */ jsxs(
|
|
4939
|
+
"div",
|
|
4940
|
+
{
|
|
4941
|
+
ref,
|
|
4942
|
+
className: cn(
|
|
4943
|
+
"border-rule bg-surface flex items-center gap-3 rounded-[var(--radius-input)] border p-2.5",
|
|
4944
|
+
className
|
|
4945
|
+
),
|
|
4946
|
+
...props,
|
|
4947
|
+
children: [
|
|
4948
|
+
/* @__PURE__ */ jsx(
|
|
4949
|
+
"span",
|
|
4950
|
+
{
|
|
4951
|
+
"aria-hidden": "true",
|
|
4952
|
+
className: cn(
|
|
4953
|
+
"flex size-9 shrink-0 items-center justify-center rounded-[var(--radius-icon)] [&_svg]:size-4.5",
|
|
4954
|
+
kindTile[kind]
|
|
4955
|
+
),
|
|
4956
|
+
children: icon ?? /* @__PURE__ */ jsx(FileTextIcon, {})
|
|
4957
|
+
}
|
|
4958
|
+
),
|
|
4959
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
4960
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg truncate text-sm font-medium", children: name }),
|
|
4961
|
+
meta != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 truncate text-xs", children: meta })
|
|
4962
|
+
] }),
|
|
4963
|
+
action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
|
|
4964
|
+
]
|
|
4965
|
+
}
|
|
4966
|
+
);
|
|
4967
|
+
});
|
|
4968
|
+
FileChip.displayName = "FileChip";
|
|
4695
4969
|
function FileUpload({
|
|
4696
4970
|
accept,
|
|
4697
4971
|
maxSize,
|
|
@@ -6273,6 +6547,56 @@ var RadioGroupItem = React36.forwardRef(function RadioGroupItem2({ className, la
|
|
|
6273
6547
|
] });
|
|
6274
6548
|
});
|
|
6275
6549
|
RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
|
|
6550
|
+
var RAMP2 = [
|
|
6551
|
+
"var(--color-chart-1)",
|
|
6552
|
+
"var(--color-chart-2)",
|
|
6553
|
+
"var(--color-chart-3)",
|
|
6554
|
+
"var(--color-chart-4)"
|
|
6555
|
+
];
|
|
6556
|
+
var RankedBars = forwardRef(function RankedBars2({ items, className, ...props }, ref) {
|
|
6557
|
+
return /* @__PURE__ */ jsx("ul", { ref, className: cn("flex flex-col gap-4", className), ...props, children: items.map((bar, i) => {
|
|
6558
|
+
const up = (bar.change ?? 0) >= 0;
|
|
6559
|
+
const ChangeIcon = up ? TrendingUpIcon : TrendingDownIcon;
|
|
6560
|
+
return /* @__PURE__ */ jsxs("li", { className: "flex flex-col gap-1.5", children: [
|
|
6561
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
6562
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-2 text-sm font-medium", children: bar.label }),
|
|
6563
|
+
bar.value != null && /* @__PURE__ */ jsx("span", { className: "text-fg text-sm font-semibold tabular-nums", children: bar.value })
|
|
6564
|
+
] }),
|
|
6565
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
6566
|
+
/* @__PURE__ */ jsx("div", { className: "bg-bg-3 h-2 flex-1 overflow-hidden rounded-full", children: /* @__PURE__ */ jsx(
|
|
6567
|
+
"div",
|
|
6568
|
+
{
|
|
6569
|
+
className: "h-full rounded-full transition-[width] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
6570
|
+
style: {
|
|
6571
|
+
width: `${Math.min(100, Math.max(0, bar.pct))}%`,
|
|
6572
|
+
background: bar.color ?? RAMP2[i % RAMP2.length]
|
|
6573
|
+
}
|
|
6574
|
+
}
|
|
6575
|
+
) }),
|
|
6576
|
+
bar.change != null && /* @__PURE__ */ jsxs(
|
|
6577
|
+
"span",
|
|
6578
|
+
{
|
|
6579
|
+
className: cn(
|
|
6580
|
+
"inline-flex shrink-0 items-center gap-0.5 text-xs font-semibold tabular-nums",
|
|
6581
|
+
up ? "text-success-fg" : "text-danger-fg"
|
|
6582
|
+
),
|
|
6583
|
+
children: [
|
|
6584
|
+
/* @__PURE__ */ jsx(ChangeIcon, { className: "size-3", "aria-hidden": "true" }),
|
|
6585
|
+
/* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
6586
|
+
up ? "Up" : "Down",
|
|
6587
|
+
" "
|
|
6588
|
+
] }),
|
|
6589
|
+
Math.abs(bar.change),
|
|
6590
|
+
"%"
|
|
6591
|
+
]
|
|
6592
|
+
}
|
|
6593
|
+
)
|
|
6594
|
+
] }),
|
|
6595
|
+
bar.sublabel != null && /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: bar.sublabel })
|
|
6596
|
+
] }, i);
|
|
6597
|
+
}) });
|
|
6598
|
+
});
|
|
6599
|
+
RankedBars.displayName = "RankedBars";
|
|
6276
6600
|
var ScrollArea = React36.forwardRef(function ScrollArea2({ className, children, ...props }, ref) {
|
|
6277
6601
|
return /* @__PURE__ */ jsxs(
|
|
6278
6602
|
ScrollAreaPrimitive.Root,
|
|
@@ -6957,6 +7281,45 @@ var SectionHead = forwardRef(function SectionHead2({ eyebrow, title, meta, class
|
|
|
6957
7281
|
);
|
|
6958
7282
|
});
|
|
6959
7283
|
SectionHead.displayName = "SectionHead";
|
|
7284
|
+
var toneFill = {
|
|
7285
|
+
default: "var(--color-pro-fg)",
|
|
7286
|
+
success: "var(--color-success-fg)",
|
|
7287
|
+
warning: "var(--color-warning-fg)",
|
|
7288
|
+
destructive: "var(--color-danger-fg)",
|
|
7289
|
+
info: "var(--color-accent)",
|
|
7290
|
+
tax: "var(--color-service-tax)",
|
|
7291
|
+
audit: "var(--color-service-audit)",
|
|
7292
|
+
accounting: "var(--color-service-accounting)"
|
|
7293
|
+
};
|
|
7294
|
+
var SegmentedProgress = forwardRef(
|
|
7295
|
+
function SegmentedProgress2({ steps, current, tone = "default", thickness = 6, label, className, style, ...props }, ref) {
|
|
7296
|
+
const filled = Math.min(steps, Math.max(0, current));
|
|
7297
|
+
return /* @__PURE__ */ jsx(
|
|
7298
|
+
"div",
|
|
7299
|
+
{
|
|
7300
|
+
ref,
|
|
7301
|
+
role: "progressbar",
|
|
7302
|
+
"aria-valuenow": filled,
|
|
7303
|
+
"aria-valuemin": 0,
|
|
7304
|
+
"aria-valuemax": steps,
|
|
7305
|
+
"aria-label": label ?? `Step ${filled} of ${steps}`,
|
|
7306
|
+
className: cn("flex w-full items-center gap-1", className),
|
|
7307
|
+
style: { height: thickness, ...style },
|
|
7308
|
+
...props,
|
|
7309
|
+
children: Array.from({ length: steps }, (_, i) => /* @__PURE__ */ jsx(
|
|
7310
|
+
"span",
|
|
7311
|
+
{
|
|
7312
|
+
"aria-hidden": "true",
|
|
7313
|
+
className: "h-full flex-1 rounded-full transition-colors duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
7314
|
+
style: { background: i < filled ? toneFill[tone] : "var(--color-bg-3)" }
|
|
7315
|
+
},
|
|
7316
|
+
i
|
|
7317
|
+
))
|
|
7318
|
+
}
|
|
7319
|
+
);
|
|
7320
|
+
}
|
|
7321
|
+
);
|
|
7322
|
+
SegmentedProgress.displayName = "SegmentedProgress";
|
|
6960
7323
|
var Separator4 = React36.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
|
|
6961
7324
|
return /* @__PURE__ */ jsx(
|
|
6962
7325
|
SeparatorPrimitive.Root,
|
|
@@ -7478,6 +7841,25 @@ function StatusIcon({
|
|
|
7478
7841
|
}
|
|
7479
7842
|
);
|
|
7480
7843
|
}
|
|
7844
|
+
var statusMap = {
|
|
7845
|
+
requested: { variant: "warning", label: "Requested" },
|
|
7846
|
+
"in-review": { variant: "info", label: "In review" },
|
|
7847
|
+
"needs-revision": { variant: "destructive", label: "Needs revision" },
|
|
7848
|
+
accepted: { variant: "success", label: "Accepted" },
|
|
7849
|
+
signed: { variant: "success", label: "Signed" },
|
|
7850
|
+
approved: { variant: "success", label: "Approved" },
|
|
7851
|
+
paid: { variant: "success", label: "Paid" },
|
|
7852
|
+
complete: { variant: "success", label: "Complete" },
|
|
7853
|
+
draft: { variant: "secondary", label: "Draft" },
|
|
7854
|
+
pending: { variant: "secondary", label: "Pending" },
|
|
7855
|
+
overdue: { variant: "destructive", label: "Overdue" },
|
|
7856
|
+
declined: { variant: "destructive", label: "Declined" }
|
|
7857
|
+
};
|
|
7858
|
+
var StatusPill = forwardRef(function StatusPill2({ status, dot = true, children, ...props }, ref) {
|
|
7859
|
+
const { variant, label } = statusMap[status];
|
|
7860
|
+
return /* @__PURE__ */ jsx(Badge, { ref, variant, dot, ...props, children: children ?? label });
|
|
7861
|
+
});
|
|
7862
|
+
StatusPill.displayName = "StatusPill";
|
|
7481
7863
|
var Stepper = forwardRef(function Stepper2({ steps, currentStep, orientation = "horizontal", className, ...props }, ref) {
|
|
7482
7864
|
const isVertical = orientation === "vertical";
|
|
7483
7865
|
return /* @__PURE__ */ jsx(
|
|
@@ -7668,7 +8050,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
|
|
|
7668
8050
|
"div",
|
|
7669
8051
|
{
|
|
7670
8052
|
className: cn(
|
|
7671
|
-
"rounded-card border-rule bg-surface w-full overflow-x-auto border",
|
|
8053
|
+
"rounded-card border-rule-strong bg-surface w-full overflow-x-auto border shadow-quiet",
|
|
7672
8054
|
wrapperClassName
|
|
7673
8055
|
),
|
|
7674
8056
|
children: /* @__PURE__ */ jsx(
|
|
@@ -7733,10 +8115,11 @@ var TableHead = forwardRef(function TableHead2({ className, ...props }, ref) {
|
|
|
7733
8115
|
{
|
|
7734
8116
|
ref,
|
|
7735
8117
|
className: cn(
|
|
7736
|
-
//
|
|
7737
|
-
|
|
7738
|
-
"
|
|
7739
|
-
"text-
|
|
8118
|
+
// Sentence-case column labels in the body font (Plus Jakarta Sans),
|
|
8119
|
+
// quiet gray — not mono uppercase eyebrows.
|
|
8120
|
+
"h-11 px-4 py-2.5 text-left align-middle whitespace-nowrap",
|
|
8121
|
+
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
8122
|
+
"text-fg-3 bg-surface-2",
|
|
7740
8123
|
"border-rule border-b",
|
|
7741
8124
|
"[&:has([role=checkbox])]:pr-0",
|
|
7742
8125
|
className
|
|
@@ -7752,8 +8135,9 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
|
|
|
7752
8135
|
{
|
|
7753
8136
|
ref,
|
|
7754
8137
|
className: cn(
|
|
7755
|
-
//
|
|
7756
|
-
|
|
8138
|
+
// 13px, fg-2, soft 1px row divider, tabular nums; airier vertical
|
|
8139
|
+
// rhythm (py-3) for the taller rows in the catalog layout.
|
|
8140
|
+
"text-fg-2 px-4 py-3 align-middle text-[13px] tabular-nums",
|
|
7757
8141
|
"[&:has([role=checkbox])]:pr-0",
|
|
7758
8142
|
className
|
|
7759
8143
|
),
|
|
@@ -7779,7 +8163,7 @@ var TabsList = React36.forwardRef(function TabsList2({ className, ...props }, re
|
|
|
7779
8163
|
TabsPrimitive.List,
|
|
7780
8164
|
{
|
|
7781
8165
|
ref,
|
|
7782
|
-
className: cn("border-rule
|
|
8166
|
+
className: cn("border-rule flex items-center gap-0 border-b", className),
|
|
7783
8167
|
...props
|
|
7784
8168
|
}
|
|
7785
8169
|
);
|
|
@@ -8245,6 +8629,637 @@ var VisuallyHidden = forwardRef(
|
|
|
8245
8629
|
}
|
|
8246
8630
|
);
|
|
8247
8631
|
VisuallyHidden.displayName = "VisuallyHidden";
|
|
8632
|
+
function AiSpark({ size = 16, className }) {
|
|
8633
|
+
const id = useId();
|
|
8634
|
+
return /* @__PURE__ */ jsxs(
|
|
8635
|
+
"svg",
|
|
8636
|
+
{
|
|
8637
|
+
width: size,
|
|
8638
|
+
height: size * 12 / 16,
|
|
8639
|
+
viewBox: "0 0 16 12",
|
|
8640
|
+
fill: "none",
|
|
8641
|
+
className: cn("block shrink-0", className),
|
|
8642
|
+
"aria-hidden": "true",
|
|
8643
|
+
children: [
|
|
8644
|
+
/* @__PURE__ */ jsx(
|
|
8645
|
+
"path",
|
|
8646
|
+
{
|
|
8647
|
+
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",
|
|
8648
|
+
fill: `url(#${id})`
|
|
8649
|
+
}
|
|
8650
|
+
),
|
|
8651
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
|
|
8652
|
+
"linearGradient",
|
|
8653
|
+
{
|
|
8654
|
+
id,
|
|
8655
|
+
x1: "0.265576",
|
|
8656
|
+
y1: "0.856805",
|
|
8657
|
+
x2: "13.5",
|
|
8658
|
+
y2: "12",
|
|
8659
|
+
gradientUnits: "userSpaceOnUse",
|
|
8660
|
+
children: [
|
|
8661
|
+
/* @__PURE__ */ jsx("stop", { stopColor: "#9E32FF" }),
|
|
8662
|
+
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#1BB6FF" })
|
|
8663
|
+
]
|
|
8664
|
+
}
|
|
8665
|
+
) })
|
|
8666
|
+
]
|
|
8667
|
+
}
|
|
8668
|
+
);
|
|
8669
|
+
}
|
|
8670
|
+
function Field({ label, value, confirmed }) {
|
|
8671
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
8672
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-[11px]", children: label }),
|
|
8673
|
+
/* @__PURE__ */ jsxs("span", { className: "text-fg inline-flex items-center gap-1 text-sm font-medium", children: [
|
|
8674
|
+
value,
|
|
8675
|
+
confirmed && /* @__PURE__ */ jsx(CheckIcon, { className: "text-success-fg size-3", strokeWidth: 3 })
|
|
8676
|
+
] })
|
|
8677
|
+
] });
|
|
8678
|
+
}
|
|
8679
|
+
var AIReceiptPanel = forwardRef(function AIReceiptPanel2({ state = "idle", result, onAttach, onRemove, onViewFile, className, ...props }, ref) {
|
|
8680
|
+
if (state === "reading") {
|
|
8681
|
+
return /* @__PURE__ */ jsxs(
|
|
8682
|
+
"div",
|
|
8683
|
+
{
|
|
8684
|
+
ref,
|
|
8685
|
+
role: "status",
|
|
8686
|
+
"aria-live": "polite",
|
|
8687
|
+
className: cn(
|
|
8688
|
+
"border-rule bg-surface-2 flex items-center gap-3 rounded-[var(--radius-input)] border p-3",
|
|
8689
|
+
className
|
|
8690
|
+
),
|
|
8691
|
+
...props,
|
|
8692
|
+
children: [
|
|
8693
|
+
/* @__PURE__ */ jsx(AiSpark, { size: 18, className: "motion-safe:animate-pulse" }),
|
|
8694
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
8695
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: "Reading your receipt\u2026" }),
|
|
8696
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: "Pulling the vendor, amount and a suggested category." })
|
|
8697
|
+
] })
|
|
8698
|
+
]
|
|
8699
|
+
}
|
|
8700
|
+
);
|
|
8701
|
+
}
|
|
8702
|
+
if (state === "done" && result) {
|
|
8703
|
+
return /* @__PURE__ */ jsxs(
|
|
8704
|
+
"div",
|
|
8705
|
+
{
|
|
8706
|
+
ref,
|
|
8707
|
+
className: cn(
|
|
8708
|
+
"border-rule bg-surface-2 flex flex-col gap-3 rounded-[var(--radius-input)] border p-3",
|
|
8709
|
+
className
|
|
8710
|
+
),
|
|
8711
|
+
...props,
|
|
8712
|
+
children: [
|
|
8713
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
8714
|
+
/* @__PURE__ */ jsxs("span", { className: "text-fg-2 inline-flex items-center gap-1.5 text-xs font-semibold", children: [
|
|
8715
|
+
/* @__PURE__ */ jsx(AiSpark, { size: 14 }),
|
|
8716
|
+
" Auto-filled from receipt"
|
|
8717
|
+
] }),
|
|
8718
|
+
onRemove && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRemove, children: "Remove" })
|
|
8719
|
+
] }),
|
|
8720
|
+
/* @__PURE__ */ jsx(
|
|
8721
|
+
FileChip,
|
|
8722
|
+
{
|
|
8723
|
+
name: result.file.name,
|
|
8724
|
+
meta: result.file.meta,
|
|
8725
|
+
className: "bg-surface",
|
|
8726
|
+
action: onViewFile && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onViewFile, children: "View" })
|
|
8727
|
+
}
|
|
8728
|
+
),
|
|
8729
|
+
/* @__PURE__ */ jsxs("div", { className: "border-rule grid grid-cols-3 gap-3 border-t pt-3", children: [
|
|
8730
|
+
/* @__PURE__ */ jsx(Field, { label: "Vendor", value: result.vendor }),
|
|
8731
|
+
/* @__PURE__ */ jsx(Field, { label: "Amount", value: result.amount, confirmed: true }),
|
|
8732
|
+
/* @__PURE__ */ jsx(Field, { label: "Date", value: result.date, confirmed: true })
|
|
8733
|
+
] })
|
|
8734
|
+
]
|
|
8735
|
+
}
|
|
8736
|
+
);
|
|
8737
|
+
}
|
|
8738
|
+
return /* @__PURE__ */ jsxs(
|
|
8739
|
+
"button",
|
|
8740
|
+
{
|
|
8741
|
+
ref,
|
|
8742
|
+
type: "button",
|
|
8743
|
+
onClick: onAttach,
|
|
8744
|
+
className: cn(
|
|
8745
|
+
"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",
|
|
8746
|
+
className
|
|
8747
|
+
),
|
|
8748
|
+
...props,
|
|
8749
|
+
children: [
|
|
8750
|
+
/* @__PURE__ */ jsx(AiSpark, { size: 19 }),
|
|
8751
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
8752
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg block text-sm font-medium", children: "Attach receipt \u2014 auto-fill with AI" }),
|
|
8753
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 block text-xs", children: "We'll read the vendor, amount & suggest a category" })
|
|
8754
|
+
] }),
|
|
8755
|
+
/* @__PURE__ */ jsx(UploadIcon, { className: "text-fg-3 size-4.5 shrink-0", "aria-hidden": "true" })
|
|
8756
|
+
]
|
|
8757
|
+
}
|
|
8758
|
+
);
|
|
8759
|
+
});
|
|
8760
|
+
AIReceiptPanel.displayName = "AIReceiptPanel";
|
|
8761
|
+
|
|
8762
|
+
// src/lib/service-tone.ts
|
|
8763
|
+
var toneToken = {
|
|
8764
|
+
tax: { fill: "var(--color-service-tax)", bg: "var(--color-service-tax-bg)" },
|
|
8765
|
+
audit: { fill: "var(--color-service-audit)", bg: "var(--color-service-audit-bg)" },
|
|
8766
|
+
accounting: {
|
|
8767
|
+
fill: "var(--color-service-accounting)",
|
|
8768
|
+
bg: "var(--color-service-accounting-bg)"
|
|
8769
|
+
},
|
|
8770
|
+
neutral: { fill: "var(--color-pro-fg)", bg: "var(--color-pro-bg)" }
|
|
8771
|
+
};
|
|
8772
|
+
function serviceToneStyle(tone) {
|
|
8773
|
+
const { fill, bg } = toneToken[tone];
|
|
8774
|
+
return { "--tone": fill, "--tone-bg": bg };
|
|
8775
|
+
}
|
|
8776
|
+
var SERVICE_TONES = ["tax", "audit", "accounting", "neutral"];
|
|
8777
|
+
var serviceToneLabel = {
|
|
8778
|
+
tax: "Tax",
|
|
8779
|
+
audit: "Audit",
|
|
8780
|
+
accounting: "Accounting",
|
|
8781
|
+
neutral: "General"
|
|
8782
|
+
};
|
|
8783
|
+
var urgencyTile = {
|
|
8784
|
+
default: "[background:var(--tone-bg)] [color:var(--tone)]",
|
|
8785
|
+
warning: "bg-warning-bg text-warning-fg",
|
|
8786
|
+
danger: "bg-danger-bg text-danger-fg"
|
|
8787
|
+
};
|
|
8788
|
+
var AttentionItem = forwardRef(function AttentionItem2({ icon, title, description, tone = "neutral", urgency = "default", action, onClick, className, style, ...props }, ref) {
|
|
8789
|
+
const interactive = Boolean(onClick);
|
|
8790
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8791
|
+
/* @__PURE__ */ jsx(
|
|
8792
|
+
"span",
|
|
8793
|
+
{
|
|
8794
|
+
"aria-hidden": "true",
|
|
8795
|
+
className: cn(
|
|
8796
|
+
"flex size-9 shrink-0 items-center justify-center rounded-[var(--radius-input)] [&_svg]:size-4.5",
|
|
8797
|
+
urgencyTile[urgency]
|
|
8798
|
+
),
|
|
8799
|
+
children: icon
|
|
8800
|
+
}
|
|
8801
|
+
),
|
|
8802
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
8803
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg text-sm font-medium", children: title }),
|
|
8804
|
+
description != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-xs", children: description })
|
|
8805
|
+
] }),
|
|
8806
|
+
action ?? (interactive && /* @__PURE__ */ jsx(ArrowRightIcon, { className: "text-fg-4 size-4 shrink-0 self-center", "aria-hidden": "true" }))
|
|
8807
|
+
] });
|
|
8808
|
+
const rootClass = cn(
|
|
8809
|
+
"border-rule bg-surface flex items-start gap-3 rounded-[var(--radius-input)] border p-3 text-left",
|
|
8810
|
+
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",
|
|
8811
|
+
className
|
|
8812
|
+
);
|
|
8813
|
+
const rootStyle = { ...serviceToneStyle(tone), ...style };
|
|
8814
|
+
if (interactive) {
|
|
8815
|
+
return /* @__PURE__ */ jsx(
|
|
8816
|
+
"button",
|
|
8817
|
+
{
|
|
8818
|
+
ref,
|
|
8819
|
+
type: "button",
|
|
8820
|
+
onClick,
|
|
8821
|
+
className: rootClass,
|
|
8822
|
+
style: rootStyle,
|
|
8823
|
+
...props,
|
|
8824
|
+
children: body
|
|
8825
|
+
}
|
|
8826
|
+
);
|
|
8827
|
+
}
|
|
8828
|
+
return /* @__PURE__ */ jsx("div", { ref, className: rootClass, style: rootStyle, ...props, children: body });
|
|
8829
|
+
});
|
|
8830
|
+
AttentionItem.displayName = "AttentionItem";
|
|
8831
|
+
var BottomNav = forwardRef(function BottomNav2({ tabs, value, onChange, className, ...props }, ref) {
|
|
8832
|
+
return /* @__PURE__ */ jsx(
|
|
8833
|
+
"nav",
|
|
8834
|
+
{
|
|
8835
|
+
ref,
|
|
8836
|
+
"aria-label": "Primary",
|
|
8837
|
+
className: cn(
|
|
8838
|
+
"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",
|
|
8839
|
+
className
|
|
8840
|
+
),
|
|
8841
|
+
...props,
|
|
8842
|
+
children: tabs.map((tab) => {
|
|
8843
|
+
const active = tab.id === value;
|
|
8844
|
+
return /* @__PURE__ */ jsxs(
|
|
8845
|
+
"button",
|
|
8846
|
+
{
|
|
8847
|
+
type: "button",
|
|
8848
|
+
"aria-current": active ? "page" : void 0,
|
|
8849
|
+
onClick: () => onChange(tab.id),
|
|
8850
|
+
className: cn(
|
|
8851
|
+
"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",
|
|
8852
|
+
active ? "text-pro-fg" : "text-fg-4 hover:text-fg-2"
|
|
8853
|
+
),
|
|
8854
|
+
children: [
|
|
8855
|
+
/* @__PURE__ */ jsxs("span", { className: "relative [&_svg]:size-5", children: [
|
|
8856
|
+
tab.icon,
|
|
8857
|
+
tab.badge != null && tab.badge !== false && /* @__PURE__ */ jsx(
|
|
8858
|
+
"span",
|
|
8859
|
+
{
|
|
8860
|
+
className: cn(
|
|
8861
|
+
"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",
|
|
8862
|
+
tab.badge === true && "size-2 min-w-0 px-0"
|
|
8863
|
+
),
|
|
8864
|
+
children: typeof tab.badge === "number" ? tab.badge : null
|
|
8865
|
+
}
|
|
8866
|
+
)
|
|
8867
|
+
] }),
|
|
8868
|
+
/* @__PURE__ */ jsx("span", { className: "max-w-full truncate", children: tab.label })
|
|
8869
|
+
]
|
|
8870
|
+
},
|
|
8871
|
+
tab.id
|
|
8872
|
+
);
|
|
8873
|
+
})
|
|
8874
|
+
}
|
|
8875
|
+
);
|
|
8876
|
+
});
|
|
8877
|
+
BottomNav.displayName = "BottomNav";
|
|
8878
|
+
function readOrder(storageKey) {
|
|
8879
|
+
if (!storageKey || typeof window === "undefined") return null;
|
|
8880
|
+
try {
|
|
8881
|
+
const raw = window.localStorage.getItem(storageKey);
|
|
8882
|
+
return raw ? JSON.parse(raw) : null;
|
|
8883
|
+
} catch {
|
|
8884
|
+
return null;
|
|
8885
|
+
}
|
|
8886
|
+
}
|
|
8887
|
+
var colsClass = {
|
|
8888
|
+
2: "lg:grid-cols-2",
|
|
8889
|
+
3: "lg:grid-cols-3",
|
|
8890
|
+
4: "lg:grid-cols-4"
|
|
8891
|
+
};
|
|
8892
|
+
var spanClass = {
|
|
8893
|
+
1: "",
|
|
8894
|
+
2: "lg:col-span-2",
|
|
8895
|
+
3: "lg:col-span-3"
|
|
8896
|
+
};
|
|
8897
|
+
var DashGrid = forwardRef(function DashGrid2({ widgets, storageKey, onReorder, columns = 3, className, ...props }, ref) {
|
|
8898
|
+
const [order, setOrder] = useState(() => {
|
|
8899
|
+
const stored = readOrder(storageKey);
|
|
8900
|
+
const ids = widgets.map((w) => w.id);
|
|
8901
|
+
if (!stored) return ids;
|
|
8902
|
+
const kept = stored.filter((id) => ids.includes(id));
|
|
8903
|
+
const added = ids.filter((id) => !kept.includes(id));
|
|
8904
|
+
return [...kept, ...added];
|
|
8905
|
+
});
|
|
8906
|
+
const [dragId, setDragId] = useState(null);
|
|
8907
|
+
const [overId, setOverId] = useState(null);
|
|
8908
|
+
const commit = (next) => {
|
|
8909
|
+
setOrder(next);
|
|
8910
|
+
onReorder?.(next);
|
|
8911
|
+
if (storageKey && typeof window !== "undefined") {
|
|
8912
|
+
try {
|
|
8913
|
+
window.localStorage.setItem(storageKey, JSON.stringify(next));
|
|
8914
|
+
} catch {
|
|
8915
|
+
}
|
|
8916
|
+
}
|
|
8917
|
+
};
|
|
8918
|
+
const move = (from, to) => {
|
|
8919
|
+
if (from === to) return;
|
|
8920
|
+
const next = [...order];
|
|
8921
|
+
const fromIdx = next.indexOf(from);
|
|
8922
|
+
const toIdx = next.indexOf(to);
|
|
8923
|
+
if (fromIdx < 0 || toIdx < 0) return;
|
|
8924
|
+
next.splice(toIdx, 0, next.splice(fromIdx, 1)[0]);
|
|
8925
|
+
commit(next);
|
|
8926
|
+
};
|
|
8927
|
+
const byId = new Map(widgets.map((w) => [w.id, w]));
|
|
8928
|
+
const ordered = order.map((id) => byId.get(id)).filter(Boolean);
|
|
8929
|
+
return /* @__PURE__ */ jsx(
|
|
8930
|
+
"div",
|
|
8931
|
+
{
|
|
8932
|
+
ref,
|
|
8933
|
+
suppressHydrationWarning: true,
|
|
8934
|
+
className: cn("grid grid-cols-1 gap-4 sm:grid-cols-2", colsClass[columns], className),
|
|
8935
|
+
...props,
|
|
8936
|
+
children: ordered.map((widget) => {
|
|
8937
|
+
const isDragging = dragId === widget.id;
|
|
8938
|
+
const isOver = overId === widget.id && dragId !== widget.id;
|
|
8939
|
+
return (
|
|
8940
|
+
// The wrapper is an HTML5 drag DROP target: onDragOver/onDrop carry
|
|
8941
|
+
// no click semantics and aren't keyboard-reachable by design — the
|
|
8942
|
+
// grab handle below is the focusable control. Pointer reordering is
|
|
8943
|
+
// an enhancement (same precedent as the sidebar hover-peek); there
|
|
8944
|
+
// is intentionally no keyboard analogue on the drop zone itself.
|
|
8945
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
8946
|
+
/* @__PURE__ */ jsxs(
|
|
8947
|
+
"div",
|
|
8948
|
+
{
|
|
8949
|
+
className: cn(
|
|
8950
|
+
"group/dash relative transition-[opacity,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
8951
|
+
spanClass[widget.span ?? 1],
|
|
8952
|
+
isDragging && "opacity-40",
|
|
8953
|
+
isOver && "rounded-card [box-shadow:var(--shadow-focus-ring)]"
|
|
8954
|
+
),
|
|
8955
|
+
onDragOver: (e) => {
|
|
8956
|
+
if (!dragId) return;
|
|
8957
|
+
e.preventDefault();
|
|
8958
|
+
setOverId(widget.id);
|
|
8959
|
+
},
|
|
8960
|
+
onDrop: (e) => {
|
|
8961
|
+
e.preventDefault();
|
|
8962
|
+
if (dragId) move(dragId, widget.id);
|
|
8963
|
+
setDragId(null);
|
|
8964
|
+
setOverId(null);
|
|
8965
|
+
},
|
|
8966
|
+
children: [
|
|
8967
|
+
/* @__PURE__ */ jsx(
|
|
8968
|
+
"button",
|
|
8969
|
+
{
|
|
8970
|
+
type: "button",
|
|
8971
|
+
"aria-label": `Reorder widget`,
|
|
8972
|
+
draggable: true,
|
|
8973
|
+
onDragStart: (e) => {
|
|
8974
|
+
setDragId(widget.id);
|
|
8975
|
+
e.dataTransfer.effectAllowed = "move";
|
|
8976
|
+
},
|
|
8977
|
+
onDragEnd: () => {
|
|
8978
|
+
setDragId(null);
|
|
8979
|
+
setOverId(null);
|
|
8980
|
+
},
|
|
8981
|
+
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",
|
|
8982
|
+
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)) })
|
|
8983
|
+
}
|
|
8984
|
+
),
|
|
8985
|
+
widget.content
|
|
8986
|
+
]
|
|
8987
|
+
},
|
|
8988
|
+
widget.id
|
|
8989
|
+
)
|
|
8990
|
+
);
|
|
8991
|
+
})
|
|
8992
|
+
}
|
|
8993
|
+
);
|
|
8994
|
+
});
|
|
8995
|
+
DashGrid.displayName = "DashGrid";
|
|
8996
|
+
var toneToSegment = {
|
|
8997
|
+
tax: "tax",
|
|
8998
|
+
audit: "audit",
|
|
8999
|
+
accounting: "accounting",
|
|
9000
|
+
neutral: "default"
|
|
9001
|
+
};
|
|
9002
|
+
var EngagementCard = forwardRef(function EngagementCard2({
|
|
9003
|
+
service,
|
|
9004
|
+
serviceIcon,
|
|
9005
|
+
tone = "neutral",
|
|
9006
|
+
title,
|
|
9007
|
+
status,
|
|
9008
|
+
current,
|
|
9009
|
+
steps,
|
|
9010
|
+
stepLabel,
|
|
9011
|
+
eta,
|
|
9012
|
+
ring,
|
|
9013
|
+
onOpen,
|
|
9014
|
+
className,
|
|
9015
|
+
style,
|
|
9016
|
+
...props
|
|
9017
|
+
}, ref) {
|
|
9018
|
+
const pct = steps > 0 ? Math.round(current / steps * 100) : 0;
|
|
9019
|
+
const interactive = Boolean(onOpen);
|
|
9020
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9021
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
9022
|
+
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-sm font-semibold [color:var(--tone)] [&_svg]:size-[15px]", children: [
|
|
9023
|
+
serviceIcon,
|
|
9024
|
+
service
|
|
9025
|
+
] }),
|
|
9026
|
+
status
|
|
9027
|
+
] }),
|
|
9028
|
+
/* @__PURE__ */ jsx("p", { className: "text-fg mt-2 text-base leading-snug font-medium", children: title }),
|
|
9029
|
+
stepLabel != null && /* @__PURE__ */ jsxs("p", { className: "text-fg-3 mt-1 text-xs", children: [
|
|
9030
|
+
stepLabel,
|
|
9031
|
+
" \xB7 Step ",
|
|
9032
|
+
current,
|
|
9033
|
+
" of ",
|
|
9034
|
+
steps
|
|
9035
|
+
] }),
|
|
9036
|
+
ring ? /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-3", children: [
|
|
9037
|
+
/* @__PURE__ */ jsx(
|
|
9038
|
+
ProgressRing,
|
|
9039
|
+
{
|
|
9040
|
+
value: pct,
|
|
9041
|
+
size: 52,
|
|
9042
|
+
strokeWidth: 6,
|
|
9043
|
+
label: `${pct}%`,
|
|
9044
|
+
className: "[&_circle:last-child]:[stroke:var(--tone)]"
|
|
9045
|
+
}
|
|
9046
|
+
),
|
|
9047
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: "complete" })
|
|
9048
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-3", children: [
|
|
9049
|
+
/* @__PURE__ */ jsx(SegmentedProgress, { steps, current, tone: toneToSegment[tone] }),
|
|
9050
|
+
/* @__PURE__ */ jsxs("span", { className: "shrink-0 text-sm font-semibold tabular-nums [color:var(--tone)]", children: [
|
|
9051
|
+
pct,
|
|
9052
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-4 text-xs font-normal", children: "%" })
|
|
9053
|
+
] })
|
|
9054
|
+
] }),
|
|
9055
|
+
/* @__PURE__ */ jsxs("div", { className: "border-rule-soft mt-3 flex items-center justify-between gap-2 border-t pt-3", children: [
|
|
9056
|
+
eta != null && /* @__PURE__ */ jsxs("span", { className: "text-fg-3 inline-flex items-center gap-1.5 text-xs [&_svg]:size-3.5", children: [
|
|
9057
|
+
/* @__PURE__ */ jsx(CalendarIcon, { "aria-hidden": "true" }),
|
|
9058
|
+
eta
|
|
9059
|
+
] }),
|
|
9060
|
+
interactive && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-xs font-medium [color:var(--tone)] [&_svg]:size-3.5", children: [
|
|
9061
|
+
"Open ",
|
|
9062
|
+
/* @__PURE__ */ jsx(ArrowRightIcon, { "aria-hidden": "true" })
|
|
9063
|
+
] })
|
|
9064
|
+
] })
|
|
9065
|
+
] });
|
|
9066
|
+
const rootClass = cn(
|
|
9067
|
+
"border-rule bg-surface block w-full rounded-card border p-4 text-left shadow-quiet",
|
|
9068
|
+
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",
|
|
9069
|
+
className
|
|
9070
|
+
);
|
|
9071
|
+
const rootStyle = { ...serviceToneStyle(tone), ...style };
|
|
9072
|
+
if (interactive) {
|
|
9073
|
+
return /* @__PURE__ */ jsx(
|
|
9074
|
+
"button",
|
|
9075
|
+
{
|
|
9076
|
+
ref,
|
|
9077
|
+
type: "button",
|
|
9078
|
+
onClick: onOpen,
|
|
9079
|
+
className: rootClass,
|
|
9080
|
+
style: rootStyle,
|
|
9081
|
+
...props,
|
|
9082
|
+
children: body
|
|
9083
|
+
}
|
|
9084
|
+
);
|
|
9085
|
+
}
|
|
9086
|
+
return /* @__PURE__ */ jsx("div", { ref, className: rootClass, style: rootStyle, ...props, children: body });
|
|
9087
|
+
});
|
|
9088
|
+
EngagementCard.displayName = "EngagementCard";
|
|
9089
|
+
var EngagementTimeline = forwardRef(
|
|
9090
|
+
function EngagementTimeline2({ tone = "neutral", className, style, children, ...props }, ref) {
|
|
9091
|
+
return /* @__PURE__ */ jsx(
|
|
9092
|
+
"ol",
|
|
9093
|
+
{
|
|
9094
|
+
ref,
|
|
9095
|
+
className: cn("flex flex-col", className),
|
|
9096
|
+
style: { ...serviceToneStyle(tone), ...style },
|
|
9097
|
+
...props,
|
|
9098
|
+
children
|
|
9099
|
+
}
|
|
9100
|
+
);
|
|
9101
|
+
}
|
|
9102
|
+
);
|
|
9103
|
+
EngagementTimeline.displayName = "EngagementTimeline";
|
|
9104
|
+
var stateBadge = {
|
|
9105
|
+
done: { label: "Done", className: "text-success-fg" },
|
|
9106
|
+
active: { label: "In progress", className: "[color:var(--tone)]" },
|
|
9107
|
+
todo: { label: "Upcoming", className: "text-fg-4" }
|
|
9108
|
+
};
|
|
9109
|
+
var EngagementTimelineStep = forwardRef(
|
|
9110
|
+
function EngagementTimelineStep2({ state, name, index, note, date, actions, last, className, ...props }, ref) {
|
|
9111
|
+
const badge = stateBadge[state];
|
|
9112
|
+
return /* @__PURE__ */ jsxs("li", { ref, className: cn("flex gap-3", className), ...props, children: [
|
|
9113
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
|
|
9114
|
+
/* @__PURE__ */ jsx(
|
|
9115
|
+
"span",
|
|
9116
|
+
{
|
|
9117
|
+
"aria-hidden": "true",
|
|
9118
|
+
className: cn(
|
|
9119
|
+
"flex size-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold tabular-nums",
|
|
9120
|
+
state === "done" && "bg-success-fg text-fg-on-success",
|
|
9121
|
+
state === "active" && "bg-surface border-2 [border-color:var(--tone)] [color:var(--tone)]",
|
|
9122
|
+
state === "todo" && "bg-bg-3 text-fg-4"
|
|
9123
|
+
),
|
|
9124
|
+
children: state === "done" ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4", strokeWidth: 3 }) : index
|
|
9125
|
+
}
|
|
9126
|
+
),
|
|
9127
|
+
!last && /* @__PURE__ */ jsx(
|
|
9128
|
+
"span",
|
|
9129
|
+
{
|
|
9130
|
+
"aria-hidden": "true",
|
|
9131
|
+
className: cn("w-0.5 flex-1", state === "done" ? "bg-success-line" : "bg-rule")
|
|
9132
|
+
}
|
|
9133
|
+
)
|
|
9134
|
+
] }),
|
|
9135
|
+
/* @__PURE__ */ jsxs("div", { className: cn("min-w-0 flex-1", last ? "pb-0" : "pb-6"), children: [
|
|
9136
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
9137
|
+
/* @__PURE__ */ jsx(
|
|
9138
|
+
"span",
|
|
9139
|
+
{
|
|
9140
|
+
className: cn(
|
|
9141
|
+
"text-sm font-medium",
|
|
9142
|
+
state === "todo" ? "text-fg-3" : "text-fg"
|
|
9143
|
+
),
|
|
9144
|
+
children: name
|
|
9145
|
+
}
|
|
9146
|
+
),
|
|
9147
|
+
/* @__PURE__ */ jsx("span", { className: cn("shrink-0 text-[11px] font-semibold", badge.className), children: badge.label })
|
|
9148
|
+
] }),
|
|
9149
|
+
note != null && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-xs", children: note }),
|
|
9150
|
+
state === "done" && date != null && /* @__PURE__ */ jsxs("p", { className: "text-success-fg mt-1 inline-flex items-center gap-1 text-[11px]", children: [
|
|
9151
|
+
/* @__PURE__ */ jsx(CheckIcon, { className: "size-3", strokeWidth: 3, "aria-hidden": "true" }),
|
|
9152
|
+
" Completed ",
|
|
9153
|
+
date
|
|
9154
|
+
] }),
|
|
9155
|
+
state === "active" && actions && /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: actions })
|
|
9156
|
+
] })
|
|
9157
|
+
] });
|
|
9158
|
+
}
|
|
9159
|
+
);
|
|
9160
|
+
EngagementTimelineStep.displayName = "EngagementTimelineStep";
|
|
9161
|
+
var INDENT = 18;
|
|
9162
|
+
var FolderTree = forwardRef(function FolderTree2({ nodes, activeId, onSelect, defaultOpenIds, openIds, onOpenChange, className, ...props }, ref) {
|
|
9163
|
+
const isControlled = openIds !== void 0;
|
|
9164
|
+
const [internalOpen, setInternalOpen] = useState(() => new Set(defaultOpenIds ?? []));
|
|
9165
|
+
const open = isControlled ? new Set(openIds) : internalOpen;
|
|
9166
|
+
const toggle = (id) => {
|
|
9167
|
+
const next = new Set(open);
|
|
9168
|
+
if (next.has(id)) next.delete(id);
|
|
9169
|
+
else next.add(id);
|
|
9170
|
+
if (isControlled) onOpenChange?.([...next]);
|
|
9171
|
+
else {
|
|
9172
|
+
setInternalOpen(next);
|
|
9173
|
+
onOpenChange?.([...next]);
|
|
9174
|
+
}
|
|
9175
|
+
};
|
|
9176
|
+
const renderNode = (node, depth) => {
|
|
9177
|
+
const hasChildren = Boolean(node.children?.length);
|
|
9178
|
+
const isOpen = open.has(node.id);
|
|
9179
|
+
const isActive = activeId === node.id;
|
|
9180
|
+
return /* @__PURE__ */ jsxs("li", { children: [
|
|
9181
|
+
/* @__PURE__ */ jsxs(
|
|
9182
|
+
"div",
|
|
9183
|
+
{
|
|
9184
|
+
className: cn(
|
|
9185
|
+
"group/row flex items-stretch rounded-[var(--radius-icon)]",
|
|
9186
|
+
isActive ? "bg-pro-bg" : "hover:bg-bg-2"
|
|
9187
|
+
),
|
|
9188
|
+
children: [
|
|
9189
|
+
/* @__PURE__ */ jsx(
|
|
9190
|
+
"button",
|
|
9191
|
+
{
|
|
9192
|
+
type: "button",
|
|
9193
|
+
"aria-expanded": hasChildren ? isOpen : void 0,
|
|
9194
|
+
"aria-label": isOpen ? `Collapse ${node.name}` : `Expand ${node.name}`,
|
|
9195
|
+
onClick: () => hasChildren && toggle(node.id),
|
|
9196
|
+
disabled: !hasChildren,
|
|
9197
|
+
className: "flex w-6 shrink-0 items-center justify-center self-stretch text-fg-4 disabled:opacity-0",
|
|
9198
|
+
style: { marginLeft: depth * INDENT },
|
|
9199
|
+
tabIndex: hasChildren ? 0 : -1,
|
|
9200
|
+
children: /* @__PURE__ */ jsx(
|
|
9201
|
+
ChevronRightIcon,
|
|
9202
|
+
{
|
|
9203
|
+
className: cn(
|
|
9204
|
+
"size-3.5 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
9205
|
+
isOpen && "rotate-90"
|
|
9206
|
+
),
|
|
9207
|
+
"aria-hidden": "true"
|
|
9208
|
+
}
|
|
9209
|
+
)
|
|
9210
|
+
}
|
|
9211
|
+
),
|
|
9212
|
+
/* @__PURE__ */ jsxs(
|
|
9213
|
+
"button",
|
|
9214
|
+
{
|
|
9215
|
+
type: "button",
|
|
9216
|
+
onClick: () => onSelect?.(node.id),
|
|
9217
|
+
"aria-current": isActive ? "true" : void 0,
|
|
9218
|
+
className: cn(
|
|
9219
|
+
"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)]",
|
|
9220
|
+
isActive ? "text-pro-fg font-medium" : "text-fg-2"
|
|
9221
|
+
),
|
|
9222
|
+
children: [
|
|
9223
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "shrink-0 [&_svg]:size-4", children: isOpen && hasChildren ? /* @__PURE__ */ jsx(FolderOpenIcon, {}) : /* @__PURE__ */ jsx(FolderClosedIcon, {}) }),
|
|
9224
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: node.name }),
|
|
9225
|
+
node.count != null && /* @__PURE__ */ jsx("span", { className: "text-fg-4 shrink-0 text-xs tabular-nums", children: node.count })
|
|
9226
|
+
]
|
|
9227
|
+
}
|
|
9228
|
+
)
|
|
9229
|
+
]
|
|
9230
|
+
}
|
|
9231
|
+
),
|
|
9232
|
+
hasChildren && isOpen && /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: node.children.map((child) => renderNode(child, depth + 1)) })
|
|
9233
|
+
] }, node.id);
|
|
9234
|
+
};
|
|
9235
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn("w-full", className), ...props, children: /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: nodes.map((node) => renderNode(node, 0)) }) });
|
|
9236
|
+
});
|
|
9237
|
+
FolderTree.displayName = "FolderTree";
|
|
9238
|
+
function renderAction(action) {
|
|
9239
|
+
return /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: action.onSelect, children: [
|
|
9240
|
+
action.icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-fg-3 [&_svg]:size-4", children: action.icon }),
|
|
9241
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
9242
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: action.label }),
|
|
9243
|
+
action.description && /* @__PURE__ */ jsx("span", { className: "text-fg-3 truncate text-xs", children: action.description })
|
|
9244
|
+
] }),
|
|
9245
|
+
action.shortcut && /* @__PURE__ */ jsx(DropdownMenuShortcut, { children: action.shortcut })
|
|
9246
|
+
] }, action.id);
|
|
9247
|
+
}
|
|
9248
|
+
var NewMenu = forwardRef(function NewMenu2({ actions, groups, triggerLabel = "New", trigger, align = "end" }, ref) {
|
|
9249
|
+
const sections = groups ?? (actions ? [{ actions }] : []);
|
|
9250
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
9251
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: trigger ?? /* @__PURE__ */ jsxs(Button, { ref, iconLeft: /* @__PURE__ */ jsx(PlusIcon, {}), children: [
|
|
9252
|
+
triggerLabel,
|
|
9253
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-70" })
|
|
9254
|
+
] }) }),
|
|
9255
|
+
/* @__PURE__ */ jsx(DropdownMenuContent, { align, className: "w-60", children: sections.map((section, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
9256
|
+
i > 0 && /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
9257
|
+
section.label && /* @__PURE__ */ jsx(DropdownMenuLabel, { children: section.label }),
|
|
9258
|
+
section.actions.map(renderAction)
|
|
9259
|
+
] }, i)) })
|
|
9260
|
+
] });
|
|
9261
|
+
});
|
|
9262
|
+
NewMenu.displayName = "NewMenu";
|
|
8248
9263
|
var Shell = forwardRef(function Shell2({ className, ...props }, ref) {
|
|
8249
9264
|
return /* @__PURE__ */ jsx("div", { ref, className: cn("bg-bg flex h-dvh w-full", className), ...props });
|
|
8250
9265
|
});
|
|
@@ -9559,14 +10574,14 @@ var DataTable = forwardRef(function DataTable2({ withToolbar, className, childre
|
|
|
9559
10574
|
"div",
|
|
9560
10575
|
{
|
|
9561
10576
|
ref,
|
|
10577
|
+
"data-with-toolbar": withToolbar ? "true" : void 0,
|
|
9562
10578
|
className: cn(
|
|
9563
|
-
|
|
9564
|
-
//
|
|
10579
|
+
// Outer frame on the whole component: a single visible border +
|
|
10580
|
+
// quiet shadow wrapping the toolbar (if any) and the table as one
|
|
10581
|
+
// card. overflow-hidden clips the header/cell backgrounds to the
|
|
10582
|
+
// rounded corners.
|
|
10583
|
+
"w-full overflow-hidden rounded-card border border-rule-strong bg-surface shadow-quiet",
|
|
9565
10584
|
"[&_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
10585
|
className
|
|
9571
10586
|
),
|
|
9572
10587
|
...props,
|
|
@@ -9583,7 +10598,7 @@ var DataTableToolbar = forwardRef(
|
|
|
9583
10598
|
ref,
|
|
9584
10599
|
className: cn(
|
|
9585
10600
|
"flex items-center gap-2 px-3 py-2.5",
|
|
9586
|
-
"
|
|
10601
|
+
"border-rule bg-surface border-b",
|
|
9587
10602
|
className
|
|
9588
10603
|
),
|
|
9589
10604
|
...props
|
|
@@ -9621,7 +10636,7 @@ var DataTableResultsCount = forwardRef(
|
|
|
9621
10636
|
"span",
|
|
9622
10637
|
{
|
|
9623
10638
|
ref,
|
|
9624
|
-
className: cn("text-fg-4 mr-1 font-
|
|
10639
|
+
className: cn("text-fg-4 mr-1 font-sans text-[11px] tabular-nums", className),
|
|
9625
10640
|
...props,
|
|
9626
10641
|
children: [
|
|
9627
10642
|
current.toLocaleString(),
|
|
@@ -9706,9 +10721,9 @@ var DataTableHeader = forwardRef(
|
|
|
9706
10721
|
scope: "col",
|
|
9707
10722
|
"aria-sort": ariaSort,
|
|
9708
10723
|
className: cn(
|
|
9709
|
-
"h-
|
|
9710
|
-
"font-
|
|
9711
|
-
"text-fg-
|
|
10724
|
+
"h-11 px-4 py-2.5 text-left align-middle whitespace-nowrap",
|
|
10725
|
+
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
10726
|
+
"text-fg-3 bg-surface-2",
|
|
9712
10727
|
"border-rule border-b",
|
|
9713
10728
|
"[&:has([role=checkbox])]:pr-0",
|
|
9714
10729
|
className
|
|
@@ -9721,9 +10736,9 @@ var DataTableHeader = forwardRef(
|
|
|
9721
10736
|
onClick: handleClick,
|
|
9722
10737
|
className: cn(
|
|
9723
10738
|
"-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
|
|
10739
|
+
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
10740
|
+
"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
10741
|
+
"hover:text-fg",
|
|
9727
10742
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
9728
10743
|
),
|
|
9729
10744
|
children: [
|
|
@@ -9737,7 +10752,7 @@ var DataTableHeader = forwardRef(
|
|
|
9737
10752
|
}
|
|
9738
10753
|
);
|
|
9739
10754
|
DataTableHeader.displayName = "DataTableHeader";
|
|
9740
|
-
var cellBase = "px-
|
|
10755
|
+
var cellBase = "px-4 py-3 align-middle";
|
|
9741
10756
|
var DataTableCell = forwardRef(
|
|
9742
10757
|
function DataTableCell2({ className, ...props }, ref) {
|
|
9743
10758
|
return /* @__PURE__ */ jsx(
|
|
@@ -9775,7 +10790,7 @@ var DataTableCellMono = forwardRef(
|
|
|
9775
10790
|
"td",
|
|
9776
10791
|
{
|
|
9777
10792
|
ref,
|
|
9778
|
-
className: cn(cellBase, "font-
|
|
10793
|
+
className: cn(cellBase, "font-sans text-fg-2 text-[13px] tabular-nums", className),
|
|
9779
10794
|
style,
|
|
9780
10795
|
...props
|
|
9781
10796
|
}
|
|
@@ -9789,7 +10804,7 @@ var DataTableCellId = forwardRef(
|
|
|
9789
10804
|
"td",
|
|
9790
10805
|
{
|
|
9791
10806
|
ref,
|
|
9792
|
-
className: cn(cellBase, "font-
|
|
10807
|
+
className: cn(cellBase, "font-sans text-fg-4 text-xs tabular-nums", className),
|
|
9793
10808
|
style,
|
|
9794
10809
|
...props
|
|
9795
10810
|
}
|
|
@@ -9814,7 +10829,7 @@ var DataTableCellDue = forwardRef(
|
|
|
9814
10829
|
{
|
|
9815
10830
|
ref,
|
|
9816
10831
|
"data-due-state": ariaState,
|
|
9817
|
-
className: cn(cellBase, "font-
|
|
10832
|
+
className: cn(cellBase, "font-sans text-[13px] tabular-nums", tone, className),
|
|
9818
10833
|
style,
|
|
9819
10834
|
...props,
|
|
9820
10835
|
children: children ?? dueDateFormatter.format(value)
|
|
@@ -9840,8 +10855,8 @@ var DataTableCheckbox = forwardRef(
|
|
|
9840
10855
|
{
|
|
9841
10856
|
ref,
|
|
9842
10857
|
className: cn(
|
|
9843
|
-
"w-8 px-
|
|
9844
|
-
asHeader && "bg-surface-2 border-rule h-
|
|
10858
|
+
"w-8 px-4 py-3 pr-0 align-middle",
|
|
10859
|
+
asHeader && "bg-surface-2 border-rule h-11 border-b",
|
|
9845
10860
|
className
|
|
9846
10861
|
),
|
|
9847
10862
|
...props,
|
|
@@ -11305,6 +12320,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
|
|
|
11305
12320
|
});
|
|
11306
12321
|
KbdHint.displayName = "KbdHint";
|
|
11307
12322
|
|
|
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 };
|
|
12323
|
+
export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, AreaChart, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, AttentionItem, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, BottomNav, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, COUNTRY_CODES, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content16 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CountryFlag, CountrySelect, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentIcon, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, NewMenu, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PenSignIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, RotateCcwIcon, SERVICE_TONES, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, SegmentedProgress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableKpiCard, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, StarIcon, StarRating, Stat, StatusIcon, StatusPill, Stepper, StopIcon, StrikethroughIcon, SubmitButton, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TeamIcon, TeamMemberSelect, Textarea, TimeLogger, TimeLoggerActions, TimeLoggerBillable, TimeLoggerContextRow, TimeLoggerEntry, TimeLoggerEntryList, TimeLoggerField, TimeLoggerFooter, TimeLoggerHeader, TimeLoggerNotes, TimeLoggerTimer, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, YEAR_DISPLAY_PLACEHOLDER, ZoomInIcon, ZoomOutIcon, alertVariants, applyMask, applyYearMask, badgeVariants, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, filterChipVariants, formatClock, formatCurrency, formatDuration, getFlagEmoji, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
|
|
11309
12324
|
//# sourceMappingURL=index.js.map
|
|
11310
12325
|
//# sourceMappingURL=index.js.map
|