@assure-one/design-system 1.0.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 +472 -14
- package/dist/index.js +1415 -38
- 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 +3 -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';
|
|
@@ -25,6 +25,7 @@ import * as LabelPrimitive from '@radix-ui/react-label';
|
|
|
25
25
|
import Link from 'next/link';
|
|
26
26
|
import Image2 from 'next/image';
|
|
27
27
|
import { OTPInput as OTPInput$1, REGEXP_ONLY_DIGITS } from 'input-otp';
|
|
28
|
+
import * as AllFlags from 'country-flag-icons/react/3x2';
|
|
28
29
|
import * as ProgressPrimitive from '@radix-ui/react-progress';
|
|
29
30
|
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
30
31
|
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
@@ -90,9 +91,9 @@ var colors = {
|
|
|
90
91
|
};
|
|
91
92
|
var typography = {
|
|
92
93
|
family: {
|
|
93
|
-
display: '"
|
|
94
|
-
body: '"
|
|
95
|
-
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'
|
|
96
97
|
},
|
|
97
98
|
weight: {
|
|
98
99
|
regular: 400,
|
|
@@ -193,7 +194,7 @@ var systemTokens = {
|
|
|
193
194
|
rule: "var(--color-rule)",
|
|
194
195
|
ruleSoft: "var(--color-rule-soft)",
|
|
195
196
|
ruleStrong: "var(--color-rule-strong)",
|
|
196
|
-
/* Accent (
|
|
197
|
+
/* Accent (purple) */
|
|
197
198
|
accent: "var(--color-accent)",
|
|
198
199
|
accent2: "var(--color-accent-2)",
|
|
199
200
|
accentTint: "var(--color-accent-tint)",
|
|
@@ -228,8 +229,30 @@ var systemTokens = {
|
|
|
228
229
|
warningLine: "var(--color-warning-line)",
|
|
229
230
|
dangerFg: "var(--color-danger-fg)",
|
|
230
231
|
dangerBg: "var(--color-danger-bg)",
|
|
231
|
-
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)"
|
|
232
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
|
+
],
|
|
233
256
|
gradient: {
|
|
234
257
|
brand: "var(--gradient-brand)",
|
|
235
258
|
pro: "var(--gradient-pro)",
|
|
@@ -2472,6 +2495,103 @@ var AlertDescription = forwardRef(function AlertDescription2({ className, ...pro
|
|
|
2472
2495
|
return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm", className), ...props });
|
|
2473
2496
|
});
|
|
2474
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";
|
|
2475
2595
|
var AspectRatio = React36.forwardRef(function AspectRatio2({ className, ratio = 16 / 9, ...props }, ref) {
|
|
2476
2596
|
return /* @__PURE__ */ jsx(
|
|
2477
2597
|
AspectRatioPrimitive.Root,
|
|
@@ -2793,7 +2913,7 @@ var Spinner = forwardRef(function Spinner2({ size, tone, label, className, ...pr
|
|
|
2793
2913
|
Spinner.displayName = "Spinner";
|
|
2794
2914
|
var buttonVariants = cva(
|
|
2795
2915
|
cn(
|
|
2796
|
-
"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",
|
|
2797
2917
|
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
2798
2918
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
2799
2919
|
"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled",
|
|
@@ -4510,6 +4630,123 @@ var DismissibleChip = React36.forwardRef(function DismissibleChip2({ label, onDi
|
|
|
4510
4630
|
}
|
|
4511
4631
|
);
|
|
4512
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";
|
|
4513
4750
|
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
4514
4751
|
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
4515
4752
|
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
@@ -4691,6 +4928,44 @@ var EmptyState = forwardRef(function EmptyState2({ icon, title, description, act
|
|
|
4691
4928
|
);
|
|
4692
4929
|
});
|
|
4693
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";
|
|
4694
4969
|
function FileUpload({
|
|
4695
4970
|
accept,
|
|
4696
4971
|
maxSize,
|
|
@@ -5684,6 +5959,367 @@ var PhoneInput = forwardRef(function PhoneInput2({ value, defaultValue, onChange
|
|
|
5684
5959
|
] });
|
|
5685
5960
|
});
|
|
5686
5961
|
PhoneInput.displayName = "PhoneInput";
|
|
5962
|
+
|
|
5963
|
+
// src/lib/country-codes.ts
|
|
5964
|
+
var COUNTRY_CODES = [
|
|
5965
|
+
{ iso: "US", name: "United States", dialCode: "+1" },
|
|
5966
|
+
{ iso: "CA", name: "Canada", dialCode: "+1" },
|
|
5967
|
+
{ iso: "GB", name: "United Kingdom", dialCode: "+44" },
|
|
5968
|
+
{ iso: "AU", name: "Australia", dialCode: "+61" },
|
|
5969
|
+
{ iso: "IN", name: "India", dialCode: "+91" },
|
|
5970
|
+
{ iso: "AF", name: "Afghanistan", dialCode: "+93" },
|
|
5971
|
+
{ iso: "AL", name: "Albania", dialCode: "+355" },
|
|
5972
|
+
{ iso: "DZ", name: "Algeria", dialCode: "+213" },
|
|
5973
|
+
{ iso: "AD", name: "Andorra", dialCode: "+376" },
|
|
5974
|
+
{ iso: "AO", name: "Angola", dialCode: "+244" },
|
|
5975
|
+
{ iso: "AG", name: "Antigua and Barbuda", dialCode: "+1268" },
|
|
5976
|
+
{ iso: "AR", name: "Argentina", dialCode: "+54" },
|
|
5977
|
+
{ iso: "AM", name: "Armenia", dialCode: "+374" },
|
|
5978
|
+
{ iso: "AT", name: "Austria", dialCode: "+43" },
|
|
5979
|
+
{ iso: "AZ", name: "Azerbaijan", dialCode: "+994" },
|
|
5980
|
+
{ iso: "BS", name: "Bahamas", dialCode: "+1242" },
|
|
5981
|
+
{ iso: "BH", name: "Bahrain", dialCode: "+973" },
|
|
5982
|
+
{ iso: "BD", name: "Bangladesh", dialCode: "+880" },
|
|
5983
|
+
{ iso: "BB", name: "Barbados", dialCode: "+1246" },
|
|
5984
|
+
{ iso: "BY", name: "Belarus", dialCode: "+375" },
|
|
5985
|
+
{ iso: "BE", name: "Belgium", dialCode: "+32" },
|
|
5986
|
+
{ iso: "BZ", name: "Belize", dialCode: "+501" },
|
|
5987
|
+
{ iso: "BJ", name: "Benin", dialCode: "+229" },
|
|
5988
|
+
{ iso: "BT", name: "Bhutan", dialCode: "+975" },
|
|
5989
|
+
{ iso: "BO", name: "Bolivia", dialCode: "+591" },
|
|
5990
|
+
{ iso: "BA", name: "Bosnia and Herzegovina", dialCode: "+387" },
|
|
5991
|
+
{ iso: "BW", name: "Botswana", dialCode: "+267" },
|
|
5992
|
+
{ iso: "BR", name: "Brazil", dialCode: "+55" },
|
|
5993
|
+
{ iso: "BN", name: "Brunei", dialCode: "+673" },
|
|
5994
|
+
{ iso: "BG", name: "Bulgaria", dialCode: "+359" },
|
|
5995
|
+
{ iso: "BF", name: "Burkina Faso", dialCode: "+226" },
|
|
5996
|
+
{ iso: "BI", name: "Burundi", dialCode: "+257" },
|
|
5997
|
+
{ iso: "KH", name: "Cambodia", dialCode: "+855" },
|
|
5998
|
+
{ iso: "CM", name: "Cameroon", dialCode: "+237" },
|
|
5999
|
+
{ iso: "CV", name: "Cape Verde", dialCode: "+238" },
|
|
6000
|
+
{ iso: "CF", name: "Central African Republic", dialCode: "+236" },
|
|
6001
|
+
{ iso: "TD", name: "Chad", dialCode: "+235" },
|
|
6002
|
+
{ iso: "CL", name: "Chile", dialCode: "+56" },
|
|
6003
|
+
{ iso: "CN", name: "China", dialCode: "+86" },
|
|
6004
|
+
{ iso: "CO", name: "Colombia", dialCode: "+57" },
|
|
6005
|
+
{ iso: "KM", name: "Comoros", dialCode: "+269" },
|
|
6006
|
+
{ iso: "CG", name: "Congo", dialCode: "+242" },
|
|
6007
|
+
{ iso: "CD", name: "Congo, DR", dialCode: "+243" },
|
|
6008
|
+
{ iso: "CR", name: "Costa Rica", dialCode: "+506" },
|
|
6009
|
+
{ iso: "HR", name: "Croatia", dialCode: "+385" },
|
|
6010
|
+
{ iso: "CU", name: "Cuba", dialCode: "+53" },
|
|
6011
|
+
{ iso: "CY", name: "Cyprus", dialCode: "+357" },
|
|
6012
|
+
{ iso: "CZ", name: "Czech Republic", dialCode: "+420" },
|
|
6013
|
+
{ iso: "DK", name: "Denmark", dialCode: "+45" },
|
|
6014
|
+
{ iso: "DJ", name: "Djibouti", dialCode: "+253" },
|
|
6015
|
+
{ iso: "DM", name: "Dominica", dialCode: "+1767" },
|
|
6016
|
+
{ iso: "DO", name: "Dominican Republic", dialCode: "+1809" },
|
|
6017
|
+
{ iso: "EC", name: "Ecuador", dialCode: "+593" },
|
|
6018
|
+
{ iso: "EG", name: "Egypt", dialCode: "+20" },
|
|
6019
|
+
{ iso: "SV", name: "El Salvador", dialCode: "+503" },
|
|
6020
|
+
{ iso: "GQ", name: "Equatorial Guinea", dialCode: "+240" },
|
|
6021
|
+
{ iso: "ER", name: "Eritrea", dialCode: "+291" },
|
|
6022
|
+
{ iso: "EE", name: "Estonia", dialCode: "+372" },
|
|
6023
|
+
{ iso: "SZ", name: "Eswatini", dialCode: "+268" },
|
|
6024
|
+
{ iso: "ET", name: "Ethiopia", dialCode: "+251" },
|
|
6025
|
+
{ iso: "FJ", name: "Fiji", dialCode: "+679" },
|
|
6026
|
+
{ iso: "FI", name: "Finland", dialCode: "+358" },
|
|
6027
|
+
{ iso: "FR", name: "France", dialCode: "+33" },
|
|
6028
|
+
{ iso: "GA", name: "Gabon", dialCode: "+241" },
|
|
6029
|
+
{ iso: "GM", name: "Gambia", dialCode: "+220" },
|
|
6030
|
+
{ iso: "GE", name: "Georgia", dialCode: "+995" },
|
|
6031
|
+
{ iso: "DE", name: "Germany", dialCode: "+49" },
|
|
6032
|
+
{ iso: "GH", name: "Ghana", dialCode: "+233" },
|
|
6033
|
+
{ iso: "GR", name: "Greece", dialCode: "+30" },
|
|
6034
|
+
{ iso: "GD", name: "Grenada", dialCode: "+1473" },
|
|
6035
|
+
{ iso: "GT", name: "Guatemala", dialCode: "+502" },
|
|
6036
|
+
{ iso: "GN", name: "Guinea", dialCode: "+224" },
|
|
6037
|
+
{ iso: "GW", name: "Guinea-Bissau", dialCode: "+245" },
|
|
6038
|
+
{ iso: "GY", name: "Guyana", dialCode: "+592" },
|
|
6039
|
+
{ iso: "HT", name: "Haiti", dialCode: "+509" },
|
|
6040
|
+
{ iso: "HN", name: "Honduras", dialCode: "+504" },
|
|
6041
|
+
{ iso: "HK", name: "Hong Kong", dialCode: "+852" },
|
|
6042
|
+
{ iso: "HU", name: "Hungary", dialCode: "+36" },
|
|
6043
|
+
{ iso: "IS", name: "Iceland", dialCode: "+354" },
|
|
6044
|
+
{ iso: "ID", name: "Indonesia", dialCode: "+62" },
|
|
6045
|
+
{ iso: "IR", name: "Iran", dialCode: "+98" },
|
|
6046
|
+
{ iso: "IQ", name: "Iraq", dialCode: "+964" },
|
|
6047
|
+
{ iso: "IE", name: "Ireland", dialCode: "+353" },
|
|
6048
|
+
{ iso: "IL", name: "Israel", dialCode: "+972" },
|
|
6049
|
+
{ iso: "IT", name: "Italy", dialCode: "+39" },
|
|
6050
|
+
{ iso: "CI", name: "Ivory Coast", dialCode: "+225" },
|
|
6051
|
+
{ iso: "JM", name: "Jamaica", dialCode: "+1876" },
|
|
6052
|
+
{ iso: "JP", name: "Japan", dialCode: "+81" },
|
|
6053
|
+
{ iso: "JO", name: "Jordan", dialCode: "+962" },
|
|
6054
|
+
{ iso: "KZ", name: "Kazakhstan", dialCode: "+7" },
|
|
6055
|
+
{ iso: "KE", name: "Kenya", dialCode: "+254" },
|
|
6056
|
+
{ iso: "KI", name: "Kiribati", dialCode: "+686" },
|
|
6057
|
+
{ iso: "KW", name: "Kuwait", dialCode: "+965" },
|
|
6058
|
+
{ iso: "KG", name: "Kyrgyzstan", dialCode: "+996" },
|
|
6059
|
+
{ iso: "LA", name: "Laos", dialCode: "+856" },
|
|
6060
|
+
{ iso: "LV", name: "Latvia", dialCode: "+371" },
|
|
6061
|
+
{ iso: "LB", name: "Lebanon", dialCode: "+961" },
|
|
6062
|
+
{ iso: "LS", name: "Lesotho", dialCode: "+266" },
|
|
6063
|
+
{ iso: "LR", name: "Liberia", dialCode: "+231" },
|
|
6064
|
+
{ iso: "LY", name: "Libya", dialCode: "+218" },
|
|
6065
|
+
{ iso: "LI", name: "Liechtenstein", dialCode: "+423" },
|
|
6066
|
+
{ iso: "LT", name: "Lithuania", dialCode: "+370" },
|
|
6067
|
+
{ iso: "LU", name: "Luxembourg", dialCode: "+352" },
|
|
6068
|
+
{ iso: "MO", name: "Macau", dialCode: "+853" },
|
|
6069
|
+
{ iso: "MG", name: "Madagascar", dialCode: "+261" },
|
|
6070
|
+
{ iso: "MW", name: "Malawi", dialCode: "+265" },
|
|
6071
|
+
{ iso: "MY", name: "Malaysia", dialCode: "+60" },
|
|
6072
|
+
{ iso: "MV", name: "Maldives", dialCode: "+960" },
|
|
6073
|
+
{ iso: "ML", name: "Mali", dialCode: "+223" },
|
|
6074
|
+
{ iso: "MT", name: "Malta", dialCode: "+356" },
|
|
6075
|
+
{ iso: "MH", name: "Marshall Islands", dialCode: "+692" },
|
|
6076
|
+
{ iso: "MR", name: "Mauritania", dialCode: "+222" },
|
|
6077
|
+
{ iso: "MU", name: "Mauritius", dialCode: "+230" },
|
|
6078
|
+
{ iso: "MX", name: "Mexico", dialCode: "+52" },
|
|
6079
|
+
{ iso: "FM", name: "Micronesia", dialCode: "+691" },
|
|
6080
|
+
{ iso: "MD", name: "Moldova", dialCode: "+373" },
|
|
6081
|
+
{ iso: "MC", name: "Monaco", dialCode: "+377" },
|
|
6082
|
+
{ iso: "MN", name: "Mongolia", dialCode: "+976" },
|
|
6083
|
+
{ iso: "ME", name: "Montenegro", dialCode: "+382" },
|
|
6084
|
+
{ iso: "MA", name: "Morocco", dialCode: "+212" },
|
|
6085
|
+
{ iso: "MZ", name: "Mozambique", dialCode: "+258" },
|
|
6086
|
+
{ iso: "MM", name: "Myanmar", dialCode: "+95" },
|
|
6087
|
+
{ iso: "NA", name: "Namibia", dialCode: "+264" },
|
|
6088
|
+
{ iso: "NR", name: "Nauru", dialCode: "+674" },
|
|
6089
|
+
{ iso: "NP", name: "Nepal", dialCode: "+977" },
|
|
6090
|
+
{ iso: "NL", name: "Netherlands", dialCode: "+31" },
|
|
6091
|
+
{ iso: "NZ", name: "New Zealand", dialCode: "+64" },
|
|
6092
|
+
{ iso: "NI", name: "Nicaragua", dialCode: "+505" },
|
|
6093
|
+
{ iso: "NE", name: "Niger", dialCode: "+227" },
|
|
6094
|
+
{ iso: "NG", name: "Nigeria", dialCode: "+234" },
|
|
6095
|
+
{ iso: "KP", name: "North Korea", dialCode: "+850" },
|
|
6096
|
+
{ iso: "MK", name: "North Macedonia", dialCode: "+389" },
|
|
6097
|
+
{ iso: "NO", name: "Norway", dialCode: "+47" },
|
|
6098
|
+
{ iso: "OM", name: "Oman", dialCode: "+968" },
|
|
6099
|
+
{ iso: "PK", name: "Pakistan", dialCode: "+92" },
|
|
6100
|
+
{ iso: "PW", name: "Palau", dialCode: "+680" },
|
|
6101
|
+
{ iso: "PS", name: "Palestine", dialCode: "+970" },
|
|
6102
|
+
{ iso: "PA", name: "Panama", dialCode: "+507" },
|
|
6103
|
+
{ iso: "PG", name: "Papua New Guinea", dialCode: "+675" },
|
|
6104
|
+
{ iso: "PY", name: "Paraguay", dialCode: "+595" },
|
|
6105
|
+
{ iso: "PE", name: "Peru", dialCode: "+51" },
|
|
6106
|
+
{ iso: "PH", name: "Philippines", dialCode: "+63" },
|
|
6107
|
+
{ iso: "PL", name: "Poland", dialCode: "+48" },
|
|
6108
|
+
{ iso: "PT", name: "Portugal", dialCode: "+351" },
|
|
6109
|
+
{ iso: "PR", name: "Puerto Rico", dialCode: "+1787" },
|
|
6110
|
+
{ iso: "QA", name: "Qatar", dialCode: "+974" },
|
|
6111
|
+
{ iso: "RO", name: "Romania", dialCode: "+40" },
|
|
6112
|
+
{ iso: "RU", name: "Russia", dialCode: "+7" },
|
|
6113
|
+
{ iso: "RW", name: "Rwanda", dialCode: "+250" },
|
|
6114
|
+
{ iso: "KN", name: "Saint Kitts and Nevis", dialCode: "+1869" },
|
|
6115
|
+
{ iso: "LC", name: "Saint Lucia", dialCode: "+1758" },
|
|
6116
|
+
{ iso: "VC", name: "Saint Vincent", dialCode: "+1784" },
|
|
6117
|
+
{ iso: "WS", name: "Samoa", dialCode: "+685" },
|
|
6118
|
+
{ iso: "SM", name: "San Marino", dialCode: "+378" },
|
|
6119
|
+
{ iso: "ST", name: "Sao Tome and Principe", dialCode: "+239" },
|
|
6120
|
+
{ iso: "SA", name: "Saudi Arabia", dialCode: "+966" },
|
|
6121
|
+
{ iso: "SN", name: "Senegal", dialCode: "+221" },
|
|
6122
|
+
{ iso: "RS", name: "Serbia", dialCode: "+381" },
|
|
6123
|
+
{ iso: "SC", name: "Seychelles", dialCode: "+248" },
|
|
6124
|
+
{ iso: "SL", name: "Sierra Leone", dialCode: "+232" },
|
|
6125
|
+
{ iso: "SG", name: "Singapore", dialCode: "+65" },
|
|
6126
|
+
{ iso: "SK", name: "Slovakia", dialCode: "+421" },
|
|
6127
|
+
{ iso: "SI", name: "Slovenia", dialCode: "+386" },
|
|
6128
|
+
{ iso: "SB", name: "Solomon Islands", dialCode: "+677" },
|
|
6129
|
+
{ iso: "SO", name: "Somalia", dialCode: "+252" },
|
|
6130
|
+
{ iso: "ZA", name: "South Africa", dialCode: "+27" },
|
|
6131
|
+
{ iso: "KR", name: "South Korea", dialCode: "+82" },
|
|
6132
|
+
{ iso: "SS", name: "South Sudan", dialCode: "+211" },
|
|
6133
|
+
{ iso: "ES", name: "Spain", dialCode: "+34" },
|
|
6134
|
+
{ iso: "LK", name: "Sri Lanka", dialCode: "+94" },
|
|
6135
|
+
{ iso: "SD", name: "Sudan", dialCode: "+249" },
|
|
6136
|
+
{ iso: "SR", name: "Suriname", dialCode: "+597" },
|
|
6137
|
+
{ iso: "SE", name: "Sweden", dialCode: "+46" },
|
|
6138
|
+
{ iso: "CH", name: "Switzerland", dialCode: "+41" },
|
|
6139
|
+
{ iso: "SY", name: "Syria", dialCode: "+963" },
|
|
6140
|
+
{ iso: "TW", name: "Taiwan", dialCode: "+886" },
|
|
6141
|
+
{ iso: "TJ", name: "Tajikistan", dialCode: "+992" },
|
|
6142
|
+
{ iso: "TZ", name: "Tanzania", dialCode: "+255" },
|
|
6143
|
+
{ iso: "TH", name: "Thailand", dialCode: "+66" },
|
|
6144
|
+
{ iso: "TL", name: "Timor-Leste", dialCode: "+670" },
|
|
6145
|
+
{ iso: "TG", name: "Togo", dialCode: "+228" },
|
|
6146
|
+
{ iso: "TO", name: "Tonga", dialCode: "+676" },
|
|
6147
|
+
{ iso: "TT", name: "Trinidad and Tobago", dialCode: "+1868" },
|
|
6148
|
+
{ iso: "TN", name: "Tunisia", dialCode: "+216" },
|
|
6149
|
+
{ iso: "TR", name: "Turkey", dialCode: "+90" },
|
|
6150
|
+
{ iso: "TM", name: "Turkmenistan", dialCode: "+993" },
|
|
6151
|
+
{ iso: "TV", name: "Tuvalu", dialCode: "+688" },
|
|
6152
|
+
{ iso: "UG", name: "Uganda", dialCode: "+256" },
|
|
6153
|
+
{ iso: "UA", name: "Ukraine", dialCode: "+380" },
|
|
6154
|
+
{ iso: "AE", name: "United Arab Emirates", dialCode: "+971" },
|
|
6155
|
+
{ iso: "UY", name: "Uruguay", dialCode: "+598" },
|
|
6156
|
+
{ iso: "UZ", name: "Uzbekistan", dialCode: "+998" },
|
|
6157
|
+
{ iso: "VU", name: "Vanuatu", dialCode: "+678" },
|
|
6158
|
+
{ iso: "VE", name: "Venezuela", dialCode: "+58" },
|
|
6159
|
+
{ iso: "VN", name: "Vietnam", dialCode: "+84" },
|
|
6160
|
+
{ iso: "YE", name: "Yemen", dialCode: "+967" },
|
|
6161
|
+
{ iso: "ZM", name: "Zambia", dialCode: "+260" },
|
|
6162
|
+
{ iso: "ZW", name: "Zimbabwe", dialCode: "+263" }
|
|
6163
|
+
];
|
|
6164
|
+
function getFlagEmoji(iso) {
|
|
6165
|
+
return iso.toUpperCase().split("").map((c) => String.fromCodePoint(127456 + c.charCodeAt(0) - 65)).join("");
|
|
6166
|
+
}
|
|
6167
|
+
function parsePhoneForEditing(phone) {
|
|
6168
|
+
if (!phone || !phone.startsWith("+")) {
|
|
6169
|
+
return { iso: "US", localPhone: phone };
|
|
6170
|
+
}
|
|
6171
|
+
const sorted = [...COUNTRY_CODES].sort((a, b) => b.dialCode.length - a.dialCode.length);
|
|
6172
|
+
for (const c of sorted) {
|
|
6173
|
+
if (phone.startsWith(c.dialCode)) {
|
|
6174
|
+
return { iso: c.iso, localPhone: phone.slice(c.dialCode.length).trimStart() };
|
|
6175
|
+
}
|
|
6176
|
+
}
|
|
6177
|
+
return { iso: "US", localPhone: phone };
|
|
6178
|
+
}
|
|
6179
|
+
function CountryFlag({ iso }) {
|
|
6180
|
+
const Flag = AllFlags[iso];
|
|
6181
|
+
if (!Flag) return /* @__PURE__ */ jsx("span", { className: "text-[10px] font-mono", children: iso });
|
|
6182
|
+
return /* @__PURE__ */ jsx(Flag, { style: { width: 20, height: 14, borderRadius: 2, display: "block", flexShrink: 0 } });
|
|
6183
|
+
}
|
|
6184
|
+
function CountrySelect({
|
|
6185
|
+
value,
|
|
6186
|
+
onChange,
|
|
6187
|
+
disabled
|
|
6188
|
+
}) {
|
|
6189
|
+
const [open, setOpen] = useState(false);
|
|
6190
|
+
const [search, setSearch] = useState("");
|
|
6191
|
+
const searchRef = useRef(null);
|
|
6192
|
+
const selected = COUNTRY_CODES.find((c) => c.iso === value) ?? COUNTRY_CODES[0];
|
|
6193
|
+
const filtered = useMemo(() => {
|
|
6194
|
+
const q = search.toLowerCase();
|
|
6195
|
+
if (!q) return COUNTRY_CODES;
|
|
6196
|
+
return COUNTRY_CODES.filter(
|
|
6197
|
+
(c) => c.name.toLowerCase().includes(q) || c.dialCode.includes(q) || c.iso.toLowerCase().includes(q)
|
|
6198
|
+
);
|
|
6199
|
+
}, [search]);
|
|
6200
|
+
return /* @__PURE__ */ jsxs(
|
|
6201
|
+
PopoverPrimitive.Root,
|
|
6202
|
+
{
|
|
6203
|
+
modal: true,
|
|
6204
|
+
open,
|
|
6205
|
+
onOpenChange: (next) => {
|
|
6206
|
+
setOpen(next);
|
|
6207
|
+
if (!next) setSearch("");
|
|
6208
|
+
},
|
|
6209
|
+
children: [
|
|
6210
|
+
/* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
6211
|
+
"button",
|
|
6212
|
+
{
|
|
6213
|
+
type: "button",
|
|
6214
|
+
disabled,
|
|
6215
|
+
"aria-label": "Select country code",
|
|
6216
|
+
className: "flex h-10 w-[90px] shrink-0 items-center gap-1.5 rounded-lg border border-input bg-input-background px-2.5 text-sm text-foreground focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
6217
|
+
children: [
|
|
6218
|
+
/* @__PURE__ */ jsx(CountryFlag, { iso: selected.iso }),
|
|
6219
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: selected.dialCode }),
|
|
6220
|
+
/* @__PURE__ */ jsx("svg", { className: "ml-auto size-3 shrink-0 text-muted-foreground", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" }) })
|
|
6221
|
+
]
|
|
6222
|
+
}
|
|
6223
|
+
) }),
|
|
6224
|
+
/* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
6225
|
+
PopoverPrimitive.Content,
|
|
6226
|
+
{
|
|
6227
|
+
side: "bottom",
|
|
6228
|
+
align: "start",
|
|
6229
|
+
sideOffset: 4,
|
|
6230
|
+
style: { zIndex: 9999, minWidth: 248 },
|
|
6231
|
+
className: "rounded-xl border border-border bg-popover shadow-xl outline-none",
|
|
6232
|
+
onOpenAutoFocus: (e) => {
|
|
6233
|
+
e.preventDefault();
|
|
6234
|
+
searchRef.current?.focus({ preventScroll: true });
|
|
6235
|
+
},
|
|
6236
|
+
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
6237
|
+
onKeyDown: (e) => {
|
|
6238
|
+
if (e.key !== "Escape") e.stopPropagation();
|
|
6239
|
+
},
|
|
6240
|
+
children: [
|
|
6241
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-t-xl border-b border-border px-3 py-2.5", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 rounded-lg border border-input bg-input-background px-2.5", children: [
|
|
6242
|
+
/* @__PURE__ */ jsxs("svg", { className: "size-3.5 shrink-0 text-muted-foreground", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
|
|
6243
|
+
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
|
|
6244
|
+
/* @__PURE__ */ jsx("path", { d: "m21 21-4.35-4.35" })
|
|
6245
|
+
] }),
|
|
6246
|
+
/* @__PURE__ */ jsx(
|
|
6247
|
+
"input",
|
|
6248
|
+
{
|
|
6249
|
+
ref: searchRef,
|
|
6250
|
+
value: search,
|
|
6251
|
+
onChange: (e) => setSearch(e.target.value),
|
|
6252
|
+
onKeyDown: (e) => e.stopPropagation(),
|
|
6253
|
+
placeholder: "Search country or code...",
|
|
6254
|
+
className: "h-8 flex-1 bg-transparent text-xs text-foreground placeholder:text-muted-foreground focus:outline-none"
|
|
6255
|
+
}
|
|
6256
|
+
)
|
|
6257
|
+
] }) }),
|
|
6258
|
+
/* @__PURE__ */ jsx(
|
|
6259
|
+
"div",
|
|
6260
|
+
{
|
|
6261
|
+
className: "max-h-56 overflow-y-auto rounded-b-xl",
|
|
6262
|
+
style: { overscrollBehavior: "contain" },
|
|
6263
|
+
onWheel: (e) => e.stopPropagation(),
|
|
6264
|
+
children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-4 py-3 text-center text-xs text-muted-foreground", children: "No countries found" }) : filtered.map((c) => /* @__PURE__ */ jsxs(
|
|
6265
|
+
"button",
|
|
6266
|
+
{
|
|
6267
|
+
type: "button",
|
|
6268
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
6269
|
+
onClick: () => {
|
|
6270
|
+
onChange(c.iso);
|
|
6271
|
+
setOpen(false);
|
|
6272
|
+
setSearch("");
|
|
6273
|
+
},
|
|
6274
|
+
className: cn(
|
|
6275
|
+
"flex w-full items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-muted/60",
|
|
6276
|
+
c.iso === value && "bg-primary/5"
|
|
6277
|
+
),
|
|
6278
|
+
children: [
|
|
6279
|
+
/* @__PURE__ */ jsx(CountryFlag, { iso: c.iso }),
|
|
6280
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-xs text-foreground", children: c.name }),
|
|
6281
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: c.dialCode })
|
|
6282
|
+
]
|
|
6283
|
+
},
|
|
6284
|
+
c.iso
|
|
6285
|
+
))
|
|
6286
|
+
}
|
|
6287
|
+
)
|
|
6288
|
+
]
|
|
6289
|
+
}
|
|
6290
|
+
) })
|
|
6291
|
+
]
|
|
6292
|
+
}
|
|
6293
|
+
);
|
|
6294
|
+
}
|
|
6295
|
+
function PhoneCountryInput({
|
|
6296
|
+
countryIso,
|
|
6297
|
+
localPhone,
|
|
6298
|
+
onCountryChange,
|
|
6299
|
+
onPhoneChange,
|
|
6300
|
+
placeholder,
|
|
6301
|
+
error,
|
|
6302
|
+
disabled,
|
|
6303
|
+
id
|
|
6304
|
+
}) {
|
|
6305
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
6306
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
6307
|
+
/* @__PURE__ */ jsx(CountrySelect, { value: countryIso, onChange: onCountryChange, disabled }),
|
|
6308
|
+
/* @__PURE__ */ jsx(
|
|
6309
|
+
Input,
|
|
6310
|
+
{
|
|
6311
|
+
id,
|
|
6312
|
+
value: localPhone,
|
|
6313
|
+
onChange: (e) => onPhoneChange(e.target.value),
|
|
6314
|
+
placeholder: placeholder ?? "(555) 555-0100",
|
|
6315
|
+
disabled,
|
|
6316
|
+
className: "flex-1"
|
|
6317
|
+
}
|
|
6318
|
+
)
|
|
6319
|
+
] }),
|
|
6320
|
+
error && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-destructive", children: error })
|
|
6321
|
+
] });
|
|
6322
|
+
}
|
|
5687
6323
|
var BARS = [
|
|
5688
6324
|
{ x: 1.5, y: 9, height: 5 },
|
|
5689
6325
|
// bar 1 (shortest)
|
|
@@ -5911,6 +6547,56 @@ var RadioGroupItem = React36.forwardRef(function RadioGroupItem2({ className, la
|
|
|
5911
6547
|
] });
|
|
5912
6548
|
});
|
|
5913
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";
|
|
5914
6600
|
var ScrollArea = React36.forwardRef(function ScrollArea2({ className, children, ...props }, ref) {
|
|
5915
6601
|
return /* @__PURE__ */ jsxs(
|
|
5916
6602
|
ScrollAreaPrimitive.Root,
|
|
@@ -6595,6 +7281,45 @@ var SectionHead = forwardRef(function SectionHead2({ eyebrow, title, meta, class
|
|
|
6595
7281
|
);
|
|
6596
7282
|
});
|
|
6597
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";
|
|
6598
7323
|
var Separator4 = React36.forwardRef(function Separator5({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
|
|
6599
7324
|
return /* @__PURE__ */ jsx(
|
|
6600
7325
|
SeparatorPrimitive.Root,
|
|
@@ -7116,6 +7841,25 @@ function StatusIcon({
|
|
|
7116
7841
|
}
|
|
7117
7842
|
);
|
|
7118
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";
|
|
7119
7863
|
var Stepper = forwardRef(function Stepper2({ steps, currentStep, orientation = "horizontal", className, ...props }, ref) {
|
|
7120
7864
|
const isVertical = orientation === "vertical";
|
|
7121
7865
|
return /* @__PURE__ */ jsx(
|
|
@@ -7306,7 +8050,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
|
|
|
7306
8050
|
"div",
|
|
7307
8051
|
{
|
|
7308
8052
|
className: cn(
|
|
7309
|
-
"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",
|
|
7310
8054
|
wrapperClassName
|
|
7311
8055
|
),
|
|
7312
8056
|
children: /* @__PURE__ */ jsx(
|
|
@@ -7371,10 +8115,11 @@ var TableHead = forwardRef(function TableHead2({ className, ...props }, ref) {
|
|
|
7371
8115
|
{
|
|
7372
8116
|
ref,
|
|
7373
8117
|
className: cn(
|
|
7374
|
-
//
|
|
7375
|
-
|
|
7376
|
-
"
|
|
7377
|
-
"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",
|
|
7378
8123
|
"border-rule border-b",
|
|
7379
8124
|
"[&:has([role=checkbox])]:pr-0",
|
|
7380
8125
|
className
|
|
@@ -7390,8 +8135,9 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
|
|
|
7390
8135
|
{
|
|
7391
8136
|
ref,
|
|
7392
8137
|
className: cn(
|
|
7393
|
-
//
|
|
7394
|
-
|
|
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",
|
|
7395
8141
|
"[&:has([role=checkbox])]:pr-0",
|
|
7396
8142
|
className
|
|
7397
8143
|
),
|
|
@@ -7417,7 +8163,7 @@ var TabsList = React36.forwardRef(function TabsList2({ className, ...props }, re
|
|
|
7417
8163
|
TabsPrimitive.List,
|
|
7418
8164
|
{
|
|
7419
8165
|
ref,
|
|
7420
|
-
className: cn("border-rule
|
|
8166
|
+
className: cn("border-rule flex items-center gap-0 border-b", className),
|
|
7421
8167
|
...props
|
|
7422
8168
|
}
|
|
7423
8169
|
);
|
|
@@ -7883,6 +8629,637 @@ var VisuallyHidden = forwardRef(
|
|
|
7883
8629
|
}
|
|
7884
8630
|
);
|
|
7885
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";
|
|
7886
9263
|
var Shell = forwardRef(function Shell2({ className, ...props }, ref) {
|
|
7887
9264
|
return /* @__PURE__ */ jsx("div", { ref, className: cn("bg-bg flex h-dvh w-full", className), ...props });
|
|
7888
9265
|
});
|
|
@@ -7898,7 +9275,7 @@ var Main = forwardRef(function Main2({ className, ...props }, ref) {
|
|
|
7898
9275
|
);
|
|
7899
9276
|
});
|
|
7900
9277
|
Main.displayName = "Main";
|
|
7901
|
-
var
|
|
9278
|
+
var Content16 = forwardRef(function Content17({ padTop, padBottom, className, style, ...props }, ref) {
|
|
7902
9279
|
const paddingStyle = padTop || padBottom ? {
|
|
7903
9280
|
...padTop ? { paddingTop: padTop } : null,
|
|
7904
9281
|
...padBottom ? { paddingBottom: padBottom } : null,
|
|
@@ -7917,7 +9294,7 @@ var Content15 = forwardRef(function Content16({ padTop, padBottom, className, st
|
|
|
7917
9294
|
}
|
|
7918
9295
|
);
|
|
7919
9296
|
});
|
|
7920
|
-
|
|
9297
|
+
Content16.displayName = "Content";
|
|
7921
9298
|
var SidebarContext = React36.createContext(null);
|
|
7922
9299
|
var NOOP_CONTEXT = {
|
|
7923
9300
|
state: "expanded",
|
|
@@ -9197,14 +10574,14 @@ var DataTable = forwardRef(function DataTable2({ withToolbar, className, childre
|
|
|
9197
10574
|
"div",
|
|
9198
10575
|
{
|
|
9199
10576
|
ref,
|
|
10577
|
+
"data-with-toolbar": withToolbar ? "true" : void 0,
|
|
9200
10578
|
className: cn(
|
|
9201
|
-
|
|
9202
|
-
//
|
|
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",
|
|
9203
10584
|
"[&_table]:bg-surface [&_table]:w-full [&_table]:border-collapse",
|
|
9204
|
-
"[&_table]:border-rule [&_table]:border",
|
|
9205
|
-
withToolbar ? "[&_table]:rounded-b-card [&_table]:border-t-0" : "[&_table]:rounded-card",
|
|
9206
|
-
// Clip cell backgrounds at the rounded corners.
|
|
9207
|
-
"[&_table]:overflow-hidden",
|
|
9208
10585
|
className
|
|
9209
10586
|
),
|
|
9210
10587
|
...props,
|
|
@@ -9221,7 +10598,7 @@ var DataTableToolbar = forwardRef(
|
|
|
9221
10598
|
ref,
|
|
9222
10599
|
className: cn(
|
|
9223
10600
|
"flex items-center gap-2 px-3 py-2.5",
|
|
9224
|
-
"
|
|
10601
|
+
"border-rule bg-surface border-b",
|
|
9225
10602
|
className
|
|
9226
10603
|
),
|
|
9227
10604
|
...props
|
|
@@ -9259,7 +10636,7 @@ var DataTableResultsCount = forwardRef(
|
|
|
9259
10636
|
"span",
|
|
9260
10637
|
{
|
|
9261
10638
|
ref,
|
|
9262
|
-
className: cn("text-fg-4 mr-1 font-
|
|
10639
|
+
className: cn("text-fg-4 mr-1 font-sans text-[11px] tabular-nums", className),
|
|
9263
10640
|
...props,
|
|
9264
10641
|
children: [
|
|
9265
10642
|
current.toLocaleString(),
|
|
@@ -9344,9 +10721,9 @@ var DataTableHeader = forwardRef(
|
|
|
9344
10721
|
scope: "col",
|
|
9345
10722
|
"aria-sort": ariaSort,
|
|
9346
10723
|
className: cn(
|
|
9347
|
-
"h-
|
|
9348
|
-
"font-
|
|
9349
|
-
"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",
|
|
9350
10727
|
"border-rule border-b",
|
|
9351
10728
|
"[&:has([role=checkbox])]:pr-0",
|
|
9352
10729
|
className
|
|
@@ -9359,9 +10736,9 @@ var DataTableHeader = forwardRef(
|
|
|
9359
10736
|
onClick: handleClick,
|
|
9360
10737
|
className: cn(
|
|
9361
10738
|
"-mx-1 -my-1 inline-flex items-center gap-1 rounded-[4px] px-1 py-1",
|
|
9362
|
-
"font-
|
|
9363
|
-
"text-fg-
|
|
9364
|
-
"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",
|
|
9365
10742
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
9366
10743
|
),
|
|
9367
10744
|
children: [
|
|
@@ -9375,7 +10752,7 @@ var DataTableHeader = forwardRef(
|
|
|
9375
10752
|
}
|
|
9376
10753
|
);
|
|
9377
10754
|
DataTableHeader.displayName = "DataTableHeader";
|
|
9378
|
-
var cellBase = "px-
|
|
10755
|
+
var cellBase = "px-4 py-3 align-middle";
|
|
9379
10756
|
var DataTableCell = forwardRef(
|
|
9380
10757
|
function DataTableCell2({ className, ...props }, ref) {
|
|
9381
10758
|
return /* @__PURE__ */ jsx(
|
|
@@ -9413,7 +10790,7 @@ var DataTableCellMono = forwardRef(
|
|
|
9413
10790
|
"td",
|
|
9414
10791
|
{
|
|
9415
10792
|
ref,
|
|
9416
|
-
className: cn(cellBase, "font-
|
|
10793
|
+
className: cn(cellBase, "font-sans text-fg-2 text-[13px] tabular-nums", className),
|
|
9417
10794
|
style,
|
|
9418
10795
|
...props
|
|
9419
10796
|
}
|
|
@@ -9427,7 +10804,7 @@ var DataTableCellId = forwardRef(
|
|
|
9427
10804
|
"td",
|
|
9428
10805
|
{
|
|
9429
10806
|
ref,
|
|
9430
|
-
className: cn(cellBase, "font-
|
|
10807
|
+
className: cn(cellBase, "font-sans text-fg-4 text-xs tabular-nums", className),
|
|
9431
10808
|
style,
|
|
9432
10809
|
...props
|
|
9433
10810
|
}
|
|
@@ -9452,7 +10829,7 @@ var DataTableCellDue = forwardRef(
|
|
|
9452
10829
|
{
|
|
9453
10830
|
ref,
|
|
9454
10831
|
"data-due-state": ariaState,
|
|
9455
|
-
className: cn(cellBase, "font-
|
|
10832
|
+
className: cn(cellBase, "font-sans text-[13px] tabular-nums", tone, className),
|
|
9456
10833
|
style,
|
|
9457
10834
|
...props,
|
|
9458
10835
|
children: children ?? dueDateFormatter.format(value)
|
|
@@ -9478,8 +10855,8 @@ var DataTableCheckbox = forwardRef(
|
|
|
9478
10855
|
{
|
|
9479
10856
|
ref,
|
|
9480
10857
|
className: cn(
|
|
9481
|
-
"w-8 px-
|
|
9482
|
-
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",
|
|
9483
10860
|
className
|
|
9484
10861
|
),
|
|
9485
10862
|
...props,
|
|
@@ -10943,6 +12320,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
|
|
|
10943
12320
|
});
|
|
10944
12321
|
KbdHint.displayName = "KbdHint";
|
|
10945
12322
|
|
|
10946
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton,
|
|
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 };
|
|
10947
12324
|
//# sourceMappingURL=index.js.map
|
|
10948
12325
|
//# sourceMappingURL=index.js.map
|