@jinaan/uikit 0.1.5 → 0.1.6
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.js +41 -41
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/input.tsx +2 -2
- package/src/label.tsx +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as e, jsxs as s, Fragment as ve } from "react/jsx-runtime";
|
|
2
|
-
import { CircleNotch as ft, Robot as ht, Terminal as gt, Check as W, Copy as Le, XCircle as xt, Warning as vt, CheckCircle as Nt, Info as yt, Minus as wt, X as ae, CaretDown as O, MagnifyingGlass as Ct, Columns as St, Lock as
|
|
2
|
+
import { CircleNotch as ft, Robot as ht, Terminal as gt, Check as W, Copy as Le, XCircle as xt, Warning as vt, CheckCircle as Nt, Info as yt, Minus as wt, X as ae, CaretDown as O, MagnifyingGlass as Ct, Columns as St, Lock as kt, FunnelSimple as Te, WarningCircle as zt, CaretUp as Dt, CaretUpDown as Tt } from "@phosphor-icons/react";
|
|
3
3
|
import { forwardRef as p, useState as D, Children as Pt, isValidElement as It, useRef as pe, useEffect as V, useContext as Re, useCallback as Mt, createContext as Ae, useId as ne, useMemo as Pe } from "react";
|
|
4
4
|
import { Slot as Et } from "@radix-ui/react-slot";
|
|
5
5
|
import { cva as Ne } from "class-variance-authority";
|
|
@@ -9,7 +9,7 @@ import * as ye from "@radix-ui/react-avatar";
|
|
|
9
9
|
import * as Ie from "@radix-ui/react-checkbox";
|
|
10
10
|
import * as I from "@radix-ui/react-dialog";
|
|
11
11
|
import * as T from "@radix-ui/react-dropdown-menu";
|
|
12
|
-
import * as
|
|
12
|
+
import * as k from "@radix-ui/react-select";
|
|
13
13
|
import * as Lt from "@radix-ui/react-label";
|
|
14
14
|
import * as Rt from "@radix-ui/react-separator";
|
|
15
15
|
import * as U from "@radix-ui/react-tooltip";
|
|
@@ -74,9 +74,9 @@ const Bt = Ne(
|
|
|
74
74
|
children: g,
|
|
75
75
|
...y
|
|
76
76
|
}, C) => {
|
|
77
|
-
const
|
|
77
|
+
const z = l ? Et : "button", w = Ft[n ?? "md"];
|
|
78
78
|
return /* @__PURE__ */ e(
|
|
79
|
-
|
|
79
|
+
z,
|
|
80
80
|
{
|
|
81
81
|
ref: C,
|
|
82
82
|
"aria-busy": d || void 0,
|
|
@@ -560,7 +560,7 @@ function or({
|
|
|
560
560
|
},
|
|
561
561
|
[]
|
|
562
562
|
);
|
|
563
|
-
const
|
|
563
|
+
const z = (w) => {
|
|
564
564
|
if (w) {
|
|
565
565
|
h.current && clearTimeout(h.current), f(!1), C || c(!0), n == null || n(!0);
|
|
566
566
|
return;
|
|
@@ -580,7 +580,7 @@ function or({
|
|
|
580
580
|
I.Root,
|
|
581
581
|
{
|
|
582
582
|
open: g,
|
|
583
|
-
onOpenChange:
|
|
583
|
+
onOpenChange: z,
|
|
584
584
|
...i,
|
|
585
585
|
children: l
|
|
586
586
|
}
|
|
@@ -838,7 +838,7 @@ function $r({
|
|
|
838
838
|
onConfirm: g
|
|
839
839
|
}) {
|
|
840
840
|
var E;
|
|
841
|
-
const [y, C] = D(u ?? ((E = i[0]) == null ? void 0 : E.value) ?? ""),
|
|
841
|
+
const [y, C] = D(u ?? ((E = i[0]) == null ? void 0 : E.value) ?? ""), z = c ?? y;
|
|
842
842
|
return /* @__PURE__ */ s(or, { open: t, onOpenChange: r, children: [
|
|
843
843
|
n ? /* @__PURE__ */ e(Ve, { asChild: !0, children: n }) : null,
|
|
844
844
|
/* @__PURE__ */ s(
|
|
@@ -849,7 +849,7 @@ function $r({
|
|
|
849
849
|
children: [
|
|
850
850
|
/* @__PURE__ */ s(sr, { children: [
|
|
851
851
|
/* @__PURE__ */ e(cr, { children: /* @__PURE__ */ e(Xe, { className: "text-xl", children: l }) }),
|
|
852
|
-
/* @__PURE__ */ e(dr, { children: /* @__PURE__ */ e(br, { label: l, value:
|
|
852
|
+
/* @__PURE__ */ e(dr, { children: /* @__PURE__ */ e(br, { label: l, value: z, onChange: (N) => {
|
|
853
853
|
c === void 0 && C(N), d == null || d(N);
|
|
854
854
|
}, children: i.map((N) => /* @__PURE__ */ e(
|
|
855
855
|
pr,
|
|
@@ -872,7 +872,7 @@ function $r({
|
|
|
872
872
|
children: f
|
|
873
873
|
}
|
|
874
874
|
),
|
|
875
|
-
/* @__PURE__ */ e(S, { className: "flex-1", onClick: () => g == null ? void 0 : g(
|
|
875
|
+
/* @__PURE__ */ e(S, { className: "flex-1", onClick: () => g == null ? void 0 : g(z), children: h })
|
|
876
876
|
] })
|
|
877
877
|
]
|
|
878
878
|
}
|
|
@@ -906,7 +906,7 @@ const fr = {
|
|
|
906
906
|
sm: "h-[var(--control-h-sm)] text-sm",
|
|
907
907
|
md: "h-[var(--control-h-md)] text-sm",
|
|
908
908
|
lg: "h-[var(--control-h-lg)] text-sm",
|
|
909
|
-
xl: "h-[var(--control-h-xl)] rounded-
|
|
909
|
+
xl: "h-[var(--control-h-xl)] rounded-lg text-base"
|
|
910
910
|
}, hr = {
|
|
911
911
|
sm: "px-[var(--control-pad-x-sm)]",
|
|
912
912
|
md: "px-[var(--control-pad-x-md)]",
|
|
@@ -942,7 +942,7 @@ const fr = {
|
|
|
942
942
|
helperText: g,
|
|
943
943
|
id: y,
|
|
944
944
|
"aria-describedby": C,
|
|
945
|
-
disabled:
|
|
945
|
+
disabled: z,
|
|
946
946
|
readOnly: w,
|
|
947
947
|
...E
|
|
948
948
|
}, N) => {
|
|
@@ -952,7 +952,7 @@ const fr = {
|
|
|
952
952
|
ref: N,
|
|
953
953
|
id: X,
|
|
954
954
|
type: n,
|
|
955
|
-
disabled:
|
|
955
|
+
disabled: z,
|
|
956
956
|
readOnly: w,
|
|
957
957
|
"aria-invalid": h || void 0,
|
|
958
958
|
"aria-describedby": ie,
|
|
@@ -961,7 +961,7 @@ const fr = {
|
|
|
961
961
|
paddingInlineEnd: u || _ ? `calc(var(--control-pad-x-${l}) + var(--control-icon-${l}) + var(--control-gap))` : void 0
|
|
962
962
|
} : void 0,
|
|
963
963
|
className: o(
|
|
964
|
-
"flex w-full rounded-
|
|
964
|
+
"flex w-full rounded-md border bg-(--input-bg) text-(--input-fg) transition-colors",
|
|
965
965
|
fr[l],
|
|
966
966
|
hr[l],
|
|
967
967
|
"placeholder:text-(--input-placeholder)",
|
|
@@ -969,7 +969,7 @@ const fr = {
|
|
|
969
969
|
"focus-visible:outline-none focus-visible:border-(--input-border-focus) focus-visible:ring-2 focus-visible:ring-focus/30",
|
|
970
970
|
h && "border-error hover:border-error focus-visible:border-error focus-visible:ring-error/30",
|
|
971
971
|
!h && "border-(--input-border)",
|
|
972
|
-
|
|
972
|
+
z && "cursor-not-allowed bg-(--input-bg-disabled) opacity-60 hover:border-(--input-border)",
|
|
973
973
|
w && "cursor-default focus-visible:ring-0",
|
|
974
974
|
t
|
|
975
975
|
),
|
|
@@ -1097,8 +1097,8 @@ const xe = p(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
|
1097
1097
|
}
|
|
1098
1098
|
));
|
|
1099
1099
|
xe.displayName = "DropdownMenuSeparator";
|
|
1100
|
-
const xr =
|
|
1101
|
-
|
|
1100
|
+
const xr = k.Root, Vr = k.Group, vr = k.Value, Qe = p(({ className: t, children: r, variant: n = "field", ...l }, i) => /* @__PURE__ */ s(
|
|
1101
|
+
k.Trigger,
|
|
1102
1102
|
{
|
|
1103
1103
|
ref: i,
|
|
1104
1104
|
className: o(
|
|
@@ -1112,14 +1112,14 @@ const xr = z.Root, Vr = z.Group, vr = z.Value, Qe = p(({ className: t, children:
|
|
|
1112
1112
|
...l,
|
|
1113
1113
|
children: [
|
|
1114
1114
|
r,
|
|
1115
|
-
/* @__PURE__ */ e(
|
|
1115
|
+
/* @__PURE__ */ e(k.Icon, { asChild: !0, children: /* @__PURE__ */ e(O, { className: "size-3.5 text-subtle" }) })
|
|
1116
1116
|
]
|
|
1117
1117
|
}
|
|
1118
1118
|
));
|
|
1119
1119
|
Qe.displayName = "SelectTrigger";
|
|
1120
1120
|
const Ye = p(
|
|
1121
|
-
({ className: t, children: r, position: n = "popper", sideOffset: l = 8, ...i }, u) => /* @__PURE__ */ e(
|
|
1122
|
-
|
|
1121
|
+
({ className: t, children: r, position: n = "popper", sideOffset: l = 8, ...i }, u) => /* @__PURE__ */ e(k.Portal, { children: /* @__PURE__ */ e(
|
|
1122
|
+
k.Content,
|
|
1123
1123
|
{
|
|
1124
1124
|
ref: u,
|
|
1125
1125
|
position: n,
|
|
@@ -1135,13 +1135,13 @@ const Ye = p(
|
|
|
1135
1135
|
t
|
|
1136
1136
|
),
|
|
1137
1137
|
...i,
|
|
1138
|
-
children: /* @__PURE__ */ e(
|
|
1138
|
+
children: /* @__PURE__ */ e(k.Viewport, { className: "p-0", children: r })
|
|
1139
1139
|
}
|
|
1140
1140
|
) })
|
|
1141
1141
|
);
|
|
1142
1142
|
Ye.displayName = "SelectContent";
|
|
1143
1143
|
const Ze = p(({ className: t, children: r, ...n }, l) => /* @__PURE__ */ s(
|
|
1144
|
-
|
|
1144
|
+
k.Item,
|
|
1145
1145
|
{
|
|
1146
1146
|
ref: l,
|
|
1147
1147
|
className: o(
|
|
@@ -1150,14 +1150,14 @@ const Ze = p(({ className: t, children: r, ...n }, l) => /* @__PURE__ */ s(
|
|
|
1150
1150
|
),
|
|
1151
1151
|
...n,
|
|
1152
1152
|
children: [
|
|
1153
|
-
/* @__PURE__ */ e("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ e(
|
|
1154
|
-
/* @__PURE__ */ e(
|
|
1153
|
+
/* @__PURE__ */ e("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ e(k.ItemIndicator, { children: /* @__PURE__ */ e(W, { className: "size-3.5" }) }) }),
|
|
1154
|
+
/* @__PURE__ */ e(k.ItemText, { children: r })
|
|
1155
1155
|
]
|
|
1156
1156
|
}
|
|
1157
1157
|
));
|
|
1158
1158
|
Ze.displayName = "SelectItem";
|
|
1159
1159
|
const Nr = p(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
1160
|
-
|
|
1160
|
+
k.Label,
|
|
1161
1161
|
{
|
|
1162
1162
|
ref: n,
|
|
1163
1163
|
className: o("px-2 py-1.5 text-xs font-medium text-subtle", t),
|
|
@@ -1227,7 +1227,7 @@ function Wr({
|
|
|
1227
1227
|
tabs: g,
|
|
1228
1228
|
activeTab: y,
|
|
1229
1229
|
onTabChange: C,
|
|
1230
|
-
infoBanner:
|
|
1230
|
+
infoBanner: z,
|
|
1231
1231
|
selectable: w = !1,
|
|
1232
1232
|
bulkActions: E,
|
|
1233
1233
|
rowActions: N,
|
|
@@ -1247,7 +1247,7 @@ function Wr({
|
|
|
1247
1247
|
)
|
|
1248
1248
|
), [x, tt] = D(
|
|
1249
1249
|
X ?? null
|
|
1250
|
-
), [$, Q] = D(0), [L, rt] = D(F), [R, oe] = D(/* @__PURE__ */ new Set()), [at, se] = D([]), M = r.filter((a) => !Ce[a.id]),
|
|
1250
|
+
), [$, Q] = D(0), [L, rt] = D(F), [R, oe] = D(/* @__PURE__ */ new Set()), [at, se] = D([]), M = r.filter((a) => !Ce[a.id]), ke = r.filter((a) => Ce[a.id] && !a.required), de = (d ?? []).filter((a) => at.includes(a.id)), nt = (d ?? []).map((a) => `${a.id}:${a.value.join(",")}`).join("|"), Y = Pe(() => {
|
|
1251
1251
|
let a = t;
|
|
1252
1252
|
for (const b of d ?? [])
|
|
1253
1253
|
b.value.length > 0 && (a = a.filter((v) => b.match(v, b.value)));
|
|
@@ -1273,10 +1273,10 @@ function Wr({
|
|
|
1273
1273
|
a.sortable && tt(
|
|
1274
1274
|
(m) => (m == null ? void 0 : m.id) === a.id ? m.dir === "asc" ? { id: a.id, dir: "desc" } : null : { id: a.id, dir: "asc" }
|
|
1275
1275
|
);
|
|
1276
|
-
},
|
|
1276
|
+
}, ze = j.length > 0 && j.every((a) => R.has(n(a))), it = j.some((a) => R.has(n(a))), ot = t.filter((a) => R.has(n(a))), st = () => {
|
|
1277
1277
|
oe((a) => {
|
|
1278
1278
|
const m = new Set(a);
|
|
1279
|
-
return
|
|
1279
|
+
return ze ? j.forEach((b) => m.delete(n(b))) : j.forEach((b) => m.add(n(b))), m;
|
|
1280
1280
|
});
|
|
1281
1281
|
}, dt = (a) => {
|
|
1282
1282
|
oe((m) => {
|
|
@@ -1346,15 +1346,15 @@ function Wr({
|
|
|
1346
1346
|
className: "justify-between",
|
|
1347
1347
|
children: [
|
|
1348
1348
|
/* @__PURE__ */ e("span", { children: a.header }),
|
|
1349
|
-
a.required ? /* @__PURE__ */ e(
|
|
1349
|
+
a.required ? /* @__PURE__ */ e(kt, { className: "size-3.5 text-subtle", "aria-hidden": !0 }) : null
|
|
1350
1350
|
]
|
|
1351
1351
|
},
|
|
1352
1352
|
a.id
|
|
1353
1353
|
)),
|
|
1354
|
-
|
|
1354
|
+
ke.length > 0 ? /* @__PURE__ */ s(ve, { children: [
|
|
1355
1355
|
/* @__PURE__ */ e(xe, {}),
|
|
1356
1356
|
/* @__PURE__ */ e(re, { className: "text-[13px]", children: "Available columns" }),
|
|
1357
|
-
|
|
1357
|
+
ke.map((a) => /* @__PURE__ */ e(
|
|
1358
1358
|
te,
|
|
1359
1359
|
{
|
|
1360
1360
|
checked: !1,
|
|
@@ -1456,7 +1456,7 @@ function Wr({
|
|
|
1456
1456
|
}
|
|
1457
1457
|
)
|
|
1458
1458
|
] }) : null,
|
|
1459
|
-
|
|
1459
|
+
z,
|
|
1460
1460
|
w && R.size > 0 && /* @__PURE__ */ s("div", { className: "flex flex-wrap items-center gap-3 rounded-lg border border-line bg-elevated px-3 py-2 text-sm", children: [
|
|
1461
1461
|
/* @__PURE__ */ s("span", { className: "font-medium text-fg", children: [
|
|
1462
1462
|
R.size,
|
|
@@ -1506,7 +1506,7 @@ function Wr({
|
|
|
1506
1506
|
fe,
|
|
1507
1507
|
{
|
|
1508
1508
|
"aria-label": "Select all rows",
|
|
1509
|
-
checked:
|
|
1509
|
+
checked: ze ? !0 : it ? "indeterminate" : !1,
|
|
1510
1510
|
onCheckedChange: st
|
|
1511
1511
|
}
|
|
1512
1512
|
) }),
|
|
@@ -1542,7 +1542,7 @@ function Wr({
|
|
|
1542
1542
|
] })
|
|
1543
1543
|
),
|
|
1544
1544
|
children: l ? /* @__PURE__ */ e("div", { className: "space-y-2 p-4", children: [0, 1, 2].map((a) => /* @__PURE__ */ e("div", { className: "h-11 w-full animate-pulse rounded-lg bg-table-row-hover" }, a)) }) : i ? /* @__PURE__ */ s("div", { className: "flex min-h-88 flex-col items-center justify-center gap-4 px-6 py-16 text-center", children: [
|
|
1545
|
-
/* @__PURE__ */ e("div", { className: "flex size-(--table-empty-icon) items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-error [&_svg]:size-8", children: /* @__PURE__ */ e(
|
|
1545
|
+
/* @__PURE__ */ e("div", { className: "flex size-(--table-empty-icon) items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-error [&_svg]:size-8", children: /* @__PURE__ */ e(zt, { weight: "duotone" }) }),
|
|
1546
1546
|
/* @__PURE__ */ s("div", { className: "space-y-2", children: [
|
|
1547
1547
|
/* @__PURE__ */ e("p", { className: "text-[1.75rem] font-semibold text-table-header-active", children: i.title }),
|
|
1548
1548
|
i.description ? /* @__PURE__ */ e("p", { className: "mx-auto max-w-md text-base leading-relaxed text-table-muted", children: i.description }) : null
|
|
@@ -1665,7 +1665,7 @@ const Sr = p(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
|
1665
1665
|
{
|
|
1666
1666
|
ref: n,
|
|
1667
1667
|
className: o(
|
|
1668
|
-
"mb-
|
|
1668
|
+
"mb-2.5 block text-sm font-medium text-fg leading-none last:mb-0 peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
1669
1669
|
t
|
|
1670
1670
|
),
|
|
1671
1671
|
...r
|
|
@@ -1724,7 +1724,7 @@ function Jr({
|
|
|
1724
1724
|
}
|
|
1725
1725
|
);
|
|
1726
1726
|
}
|
|
1727
|
-
const
|
|
1727
|
+
const kr = p(({ className: t, orientation: r = "horizontal", decorative: n = !0, ...l }, i) => /* @__PURE__ */ e(
|
|
1728
1728
|
Rt.Root,
|
|
1729
1729
|
{
|
|
1730
1730
|
ref: i,
|
|
@@ -1738,7 +1738,7 @@ const zr = p(({ className: t, orientation: r = "horizontal", decorative: n = !0,
|
|
|
1738
1738
|
...l
|
|
1739
1739
|
}
|
|
1740
1740
|
));
|
|
1741
|
-
|
|
1741
|
+
kr.displayName = "Separator";
|
|
1742
1742
|
function Qr({ className: t, ...r }) {
|
|
1743
1743
|
return /* @__PURE__ */ e(
|
|
1744
1744
|
"div",
|
|
@@ -1748,7 +1748,7 @@ function Qr({ className: t, ...r }) {
|
|
|
1748
1748
|
}
|
|
1749
1749
|
);
|
|
1750
1750
|
}
|
|
1751
|
-
const Yr = U.Provider, Zr = U.Root, Or = U.Trigger,
|
|
1751
|
+
const Yr = U.Provider, Zr = U.Root, Or = U.Trigger, zr = p(({ className: t, sideOffset: r = 6, ...n }, l) => /* @__PURE__ */ e(U.Portal, { children: /* @__PURE__ */ e(
|
|
1752
1752
|
U.Content,
|
|
1753
1753
|
{
|
|
1754
1754
|
ref: l,
|
|
@@ -1766,7 +1766,7 @@ const Yr = U.Provider, Zr = U.Root, Or = U.Trigger, kr = p(({ className: t, side
|
|
|
1766
1766
|
...n
|
|
1767
1767
|
}
|
|
1768
1768
|
) }));
|
|
1769
|
-
|
|
1769
|
+
zr.displayName = "TooltipContent";
|
|
1770
1770
|
export {
|
|
1771
1771
|
_r as AgentPrompt,
|
|
1772
1772
|
Be as Avatar,
|
|
@@ -1819,7 +1819,7 @@ export {
|
|
|
1819
1819
|
Nr as SelectLabel,
|
|
1820
1820
|
Qe as SelectTrigger,
|
|
1821
1821
|
vr as SelectValue,
|
|
1822
|
-
|
|
1822
|
+
kr as Separator,
|
|
1823
1823
|
Qr as Skeleton,
|
|
1824
1824
|
At as Spinner,
|
|
1825
1825
|
Rr as Table,
|
|
@@ -1833,7 +1833,7 @@ export {
|
|
|
1833
1833
|
Xt as TableRow,
|
|
1834
1834
|
le as TableSurface,
|
|
1835
1835
|
Zr as Tooltip,
|
|
1836
|
-
|
|
1836
|
+
zr as TooltipContent,
|
|
1837
1837
|
Yr as TooltipProvider,
|
|
1838
1838
|
Or as TooltipTrigger,
|
|
1839
1839
|
$t as badgeVariants,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils.ts","../src/spinner.tsx","../src/button.tsx","../src/agent-prompt.tsx","../src/avatar.tsx","../src/badge.tsx","../src/callout.tsx","../src/table.tsx","../src/table-surface.tsx","../src/card.tsx","../src/checkbox.tsx","../src/dialog-motion.ts","../src/dialog.tsx","../src/radio-group.tsx","../src/choice-dialog.tsx","../src/code-block.tsx","../src/input.tsx","../src/dropdown-menu.tsx","../src/select.tsx","../src/table-empty-state.tsx","../src/data-table.tsx","../src/empty-state.tsx","../src/kbd.tsx","../src/label.tsx","../src/segmented.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/tooltip.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merge conditional class names with Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { CircleNotch } from \"@phosphor-icons/react\";\n\nimport { cn } from \"./utils\";\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <CircleNotch\n className={cn(\"size-4 animate-spin text-muted\", className)}\n weight=\"bold\"\n aria-hidden\n />\n );\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\n\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"./utils\";\n\nconst buttonVariants = cva(\n \"relative inline-flex select-none items-center justify-center gap-[var(--control-gap)] whitespace-nowrap rounded-[var(--control-radius)] border border-transparent font-medium transition-[color,background-color,border-color,box-shadow,transform] duration-[120ms] active:scale-[0.97] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-primary-inner)] bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] hover:bg-[var(--button-primary-hover)] active:bg-[var(--button-primary-active)]\",\n secondary:\n \"btn-fill btn-inner-border btn-interactive border-0 bg-[var(--button-secondary-bg)] text-fg hover:bg-[var(--button-surface-hover)] active:bg-[var(--button-surface-active)]\",\n outline:\n \"btn-interactive border-[var(--button-outline-border)] bg-transparent text-fg hover:border-fg/12 hover:bg-[var(--button-surface-hover)] active:border-fg/12 active:bg-[var(--button-surface-active)] dark:hover:border-[var(--button-outline-border)] dark:active:border-[var(--button-outline-border)]\",\n ghost:\n \"btn-inner-border btn-interactive border-0 text-muted hover:bg-[var(--button-surface-hover)] hover:text-fg active:bg-[var(--button-surface-active)]\",\n destructive:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-destructive-inner)] bg-[var(--button-destructive-bg)] text-[var(--button-destructive-fg)] hover:bg-[var(--button-destructive-hover)] active:bg-[var(--button-destructive-active)]\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-[var(--control-h-xs)] [--control-gap:var(--control-gap-xs)] px-[var(--control-pad-x-xs)] text-xs [&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"h-[var(--control-h-sm)] px-[var(--control-pad-x-sm)] text-sm [&_svg]:size-[var(--control-icon-sm)]\",\n md: \"h-[var(--control-h-md)] px-[var(--control-pad-x-md)] text-sm [&_svg]:size-[var(--control-icon-md)]\",\n lg: \"h-[var(--control-h-lg)] px-[var(--control-pad-x-lg)] text-sm [&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"rounded-[var(--control-radius-xl)] h-[var(--control-h-xl)] px-[var(--control-pad-x-xl)] text-base [&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"h-[var(--control-h-md)] w-[var(--control-h-md)] p-0 [&_svg]:size-[var(--control-icon-md)]\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\n/** Icon metrics per size, applied to icon wrappers so both stay aligned. */\nconst iconSize: Record<string, string> = {\n xs: \"[&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"[&_svg]:size-[var(--control-icon-sm)]\",\n md: \"[&_svg]:size-[var(--control-icon-md)]\",\n lg: \"[&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"[&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"[&_svg]:size-[var(--control-icon-md)]\",\n};\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n /** Optional icon rendered before the label. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered after the label (e.g. a chevron). */\n trailingIcon?: ReactNode;\n /** Square, content-free button. Provide `aria-label`. */\n iconOnly?: boolean;\n /** Show a spinner and block interaction while an action runs. */\n loading?: boolean;\n /** Stretch to the container width. */\n fullWidth?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n asChild = false,\n leadingIcon,\n trailingIcon,\n iconOnly = false,\n loading = false,\n fullWidth = false,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const icon = iconSize[size ?? \"md\"];\n\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n disabled={asChild ? undefined : disabled || loading}\n className={cn(\n buttonVariants({ variant, size }),\n iconOnly && \"aspect-square px-0\",\n fullWidth && \"w-full\",\n className,\n )}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? (\n <Spinner className={cn(\"text-current\", icon)} aria-hidden />\n ) : leadingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {leadingIcon}\n </span>\n ) : null}\n {children}\n {!loading && trailingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {trailingIcon}\n </span>\n ) : null}\n </>\n )}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import { Check, Copy, Robot, Terminal } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport { cn } from \"./utils\";\n\ninterface AgentPromptProps {\n /** Command or prompt text; copy copies this verbatim. */\n command: string;\n /** Overlapping dark tag above the pill. */\n tag?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\n/**\n * The \"Add Clerk auth to my app\" prompt pill: a dark tag overlapping a\n * rounded command field with a copy button.\n */\nexport function AgentPrompt({\n command,\n tag = \"Build with agents\",\n icon,\n className,\n}: AgentPromptProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <div className={cn(\"relative inline-flex max-w-full\", className)}>\n <span className=\"absolute -top-2.5 left-4 z-10 inline-flex items-center gap-1.5 rounded-md bg-fg px-2 py-1 text-[11px] font-medium text-canvas shadow-sm\">\n {icon ?? <Robot className=\"size-3.5\" weight=\"fill\" />}\n {tag}\n </span>\n <div className=\"mt-2 flex w-full items-center gap-2 rounded-xl border border-line bg-surface py-2 pl-3 pr-2 shadow-sm\">\n <Terminal className=\"size-4 shrink-0 text-subtle\" aria-hidden />\n <span className=\"truncate font-mono text-sm text-fg\">{command}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label=\"Copy prompt\"\n className=\"ml-auto\"\n onClick={copy}\n >\n {copied ? <Check className=\"text-success\" weight=\"bold\" /> : <Copy />}\n </Button>\n </div>\n </div>\n );\n}\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Avatar = forwardRef<\n ElementRef<typeof AvatarPrimitive.Root>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full border border-line\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = \"Avatar\";\n\nexport const AvatarImage = forwardRef<\n ElementRef<typeof AvatarPrimitive.Image>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\nexport const AvatarFallback = forwardRef<\n ElementRef<typeof AvatarPrimitive.Fallback>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex size-full items-center justify-center bg-elevated text-xs font-medium text-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-medium\",\n {\n variants: {\n variant: {\n neutral: \"border-line bg-elevated text-muted\",\n outline: \"border-line bg-transparent text-muted\",\n success: \"border-success/30 bg-success/10 text-success\",\n warning: \"border-warning/30 bg-warning/10 text-warning\",\n error: \"border-error/30 bg-error/10 text-error\",\n info: \"border-info/30 bg-info/10 text-info\",\n primary: \"border-primary/30 bg-primary/10 text-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n },\n);\n\nconst dotVariants = cva(\"size-1.5 shrink-0 rounded-full\", {\n variants: {\n variant: {\n neutral: \"bg-subtle\",\n outline: \"bg-subtle\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n error: \"bg-error\",\n info: \"bg-info\",\n primary: \"bg-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n});\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean;\n}\n\nexport function Badge({ className, variant, dot = false, children, ...props }: BadgeProps) {\n return (\n <span className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot ? <span className={cn(dotVariants({ variant }))} aria-hidden /> : null}\n {children}\n </span>\n );\n}\n\nexport { badgeVariants };\n","import {\n CheckCircle,\n Info,\n Warning,\n XCircle,\n} from \"@phosphor-icons/react\";\nimport type { Icon } from \"@phosphor-icons/react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype CalloutVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst variants: Record<\n CalloutVariant,\n { Icon: Icon; className: string; iconClassName: string }\n> = {\n info: {\n Icon: Info,\n className: \"border-info/30 bg-info/10\",\n iconClassName: \"text-info\",\n },\n success: {\n Icon: CheckCircle,\n className: \"border-success/30 bg-success/10\",\n iconClassName: \"text-success\",\n },\n warning: {\n Icon: Warning,\n className: \"border-warning/30 bg-warning/10\",\n iconClassName: \"text-warning\",\n },\n error: {\n Icon: XCircle,\n className: \"border-error/30 bg-error/10\",\n iconClassName: \"text-error\",\n },\n};\n\ninterface CalloutProps {\n variant?: CalloutVariant;\n title?: ReactNode;\n children?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\nexport function Callout({\n variant = \"info\",\n title,\n children,\n icon,\n className,\n}: CalloutProps) {\n const { Icon: DefaultIcon, className: tone, iconClassName } = variants[variant];\n return (\n <div\n role={variant === \"error\" ? \"alert\" : undefined}\n className={cn(\n \"flex items-start gap-2.5 rounded-lg border px-3.5 py-3 text-sm\",\n tone,\n className,\n )}\n >\n <span className={cn(\"mt-0.5 shrink-0 [&_svg]:size-4\", iconClassName)}>\n {icon ?? <DefaultIcon weight=\"fill\" />}\n </span>\n <div className=\"min-w-0 space-y-0.5\">\n {title ? <p className=\"font-medium text-fg\">{title}</p> : null}\n {children ? <div className=\"text-muted\">{children}</div> : null}\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Outer table shell: near-black surface with generous rounding that holds the\n * header row and the inset inner panel. Surface contrast, not borders/shadows.\n */\nexport function TableContainer({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-(--table-radius-outer) bg-table-container p-(--table-inset)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Inset panel holding the table body (and its empty/loading/error states). */\nexport function TablePanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-(--table-radius-panel) border border-table-panel-border bg-table-panel\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function Table({ className, ...props }: HTMLAttributes<HTMLTableElement>) {\n return (\n <table\n className={cn(\"w-full table-fixed border-collapse caption-bottom text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport function TableHeader({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <thead className={className} {...props} />;\n}\n\nexport function TableBody({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <tbody className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\n\nexport function TableRow({ className, ...props }: HTMLAttributes<HTMLTableRowElement>) {\n return (\n <tr\n className={cn(\n \"border-b border-table-panel-border transition-colors last:border-0 hover:bg-table-row-hover data-[state=selected]:bg-table-row-selected\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableHead({ className, ...props }: ThHTMLAttributes<HTMLTableCellElement>) {\n return (\n <th\n className={cn(\n \"h-(--table-header-h) whitespace-nowrap px-(--table-pad-x) text-left align-middle text-[0.8125rem] font-medium text-table-header\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableCell({ className, ...props }: TdHTMLAttributes<HTMLTableCellElement>) {\n return (\n <td\n className={cn(\n \"px-(--table-pad-x) py-3 align-middle text-sm text-table-row data-numeric:font-numeric data-numeric:tabular-nums\",\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport { TableContainer, TablePanel } from \"./table\";\nimport { cn } from \"./utils\";\n\nexport type TableSurfaceTone = \"default\" | \"muted\" | \"transparent\";\n\nexport interface TableSurfaceAction {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"ghost\" | \"destructive\";\n onClick?: () => void;\n href?: string;\n disabled?: boolean;\n}\n\ninterface TableSurfaceProps {\n /** Title above the header row. */\n title?: ReactNode;\n /** Supporting text under the title. */\n description?: ReactNode;\n /** Header row content (a single row of column cells). */\n header?: ReactNode;\n /** Panel content: the body table, or an empty / loading / error state. */\n children: ReactNode;\n /** Optional action at the top-right of the header band. */\n action?: ReactNode | TableSurfaceAction;\n /** Surface preset; `className` / `headerClassName` / `panelClassName` win. */\n tone?: TableSurfaceTone;\n /** Outer shell overrides (background, radius, padding, …). */\n className?: string;\n /** Header band overrides (background, text color, …). */\n headerClassName?: string;\n /** Inner panel overrides (background, border color, …). */\n panelClassName?: string;\n /** Minimum panel height; keeps empty states from collapsing. */\n minHeight?: string;\n}\n\nconst SHELL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-container\",\n muted: \"bg-surface border border-line\",\n transparent: \"bg-transparent\",\n};\n\nconst PANEL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-panel border-table-panel-border\",\n muted: \"bg-elevated border-line\",\n transparent: \"bg-transparent border-line\",\n};\n\nfunction isActionConfig(\n action: ReactNode | TableSurfaceAction,\n): action is TableSurfaceAction {\n return (\n typeof action === \"object\" &&\n action !== null &&\n \"label\" in action &&\n typeof (action as TableSurfaceAction).label === \"string\"\n );\n}\n\n/**\n * Layered table surface: an outer shell holding a header band and an inset\n * inner panel. Header and panel share one horizontal scroller so their columns\n * stay aligned; the optional action stays pinned to the header's top-right.\n * Colors come from the `--table-*` tokens and can be adjusted per surface with\n * `tone` plus `headerClassName` / `panelClassName`.\n */\nexport function TableSurface({\n title,\n description,\n header,\n children,\n action,\n tone = \"default\",\n className,\n headerClassName,\n panelClassName,\n minHeight,\n}: TableSurfaceProps) {\n const hasTitle = Boolean(title || description);\n const actionNode = isActionConfig(action) ? (\n <Button\n variant={action.variant ?? \"primary\"}\n size=\"xs\"\n leadingIcon={action.href ? undefined : action.icon}\n onClick={action.onClick}\n disabled={action.disabled}\n asChild={Boolean(action.href)}\n >\n {action.href ? (\n <a href={action.href}>\n {action.icon}\n {action.label}\n </a>\n ) : (\n action.label\n )}\n </Button>\n ) : (\n action\n );\n\n return (\n <TableContainer className={cn(\"relative\", SHELL_TONE[tone], className)}>\n <div className=\"overflow-x-auto\">\n {header || hasTitle ? (\n // Header rows must not inherit the body row hover surface.\n <div className={cn(\"[--table-row-hover:transparent]\", headerClassName)}>\n {hasTitle ? (\n <div\n className={cn(\n \"px-(--table-pad-x) pb-3 pt-4\",\n actionNode && \"pr-28\",\n )}\n >\n {title ? (\n <div className=\"text-sm font-semibold text-fg\">{title}</div>\n ) : null}\n {description ? (\n <div className=\"mt-0.5 text-sm text-muted\">{description}</div>\n ) : null}\n </div>\n ) : null}\n {header}\n </div>\n ) : null}\n <TablePanel\n className={cn(PANEL_TONE[tone], panelClassName)}\n style={minHeight ? { minHeight } : undefined}\n >\n {children}\n </TablePanel>\n </div>\n {actionNode ? (\n <div className=\"pointer-events-none absolute right-4 top-(--table-inset) flex h-(--table-header-h) items-center\">\n <div className=\"pointer-events-auto\">{actionNode}</div>\n </div>\n ) : null}\n </TableContainer>\n );\n}\n","import {\n Children,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\nimport { cn } from \"./utils\";\n\nfunction splitCardChildren(children: ReactNode): {\n header: ReactNode;\n body: ReactNode;\n} {\n const nodes = Children.toArray(children);\n const headers = nodes.filter(\n (child) => isValidElement(child) && child.type === CardHeader,\n );\n return {\n header: headers.length > 0 ? <>{headers}</> : undefined,\n body: nodes.filter((child) => !headers.includes(child)),\n };\n}\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { header, body } = splitCardChildren(children);\n return (\n <div ref={ref} {...props}>\n <TableSurface className={cn(\"shadow-xs\", className)} header={header}>\n {body}\n </TableSurface>\n </div>\n );\n },\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-1 px-5 py-4\",\n className,\n )}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<\n HTMLHeadingElement,\n HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-sm font-semibold text-fg\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"mt-1 border-t border-card-divider pt-2 text-sm text-muted\",\n \"first:mt-0 first:border-t-0 first:pt-0\",\n className,\n )}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-5 py-4\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 border-t border-line px-5 py-3\",\n className,\n )}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"@phosphor-icons/react\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer size-4 shrink-0 rounded border border-line-strong bg-transparent transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus/40\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:border-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] [--button-inner:var(--button-primary-inner)]\">\n {props.checked === \"indeterminate\" ? (\n <Minus className=\"size-3\" weight=\"bold\" />\n ) : (\n <Check className=\"size-3\" weight=\"bold\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = \"Checkbox\";\n","export interface DialogOriginRect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nexport interface DialogFlight {\n dx: number;\n dy: number;\n sx: number;\n sy: number;\n}\n\nfunction usable(rect: DialogOriginRect): boolean {\n return rect.width > 0 && rect.height > 0;\n}\n\nfunction clampScale(value: number): number {\n return Math.min(1, Math.max(0.1, value));\n}\n\n/**\n * Computes the transform that places a centered dialog over its caller.\n * `dx`/`dy` are viewport deltas; `sx`/`sy` scale the dialog down to the caller.\n */\nexport function computeDialogFlight(\n origin: DialogOriginRect,\n target: DialogOriginRect,\n): DialogFlight | null {\n if (!usable(origin) || !usable(target)) return null;\n return {\n dx: origin.left + origin.width / 2 - (target.left + target.width / 2),\n dy: origin.top + origin.height / 2 - (target.top + target.height / 2),\n sx: clampScale(origin.width / target.width),\n sy: clampScale(origin.height / target.height),\n };\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"@phosphor-icons/react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\n\nimport { computeDialogFlight, type DialogOriginRect } from \"./dialog-motion\";\nimport { cn } from \"./utils\";\n\nconst SOURCE_SELECTOR =\n 'button, a, [role=\"button\"], [role=\"menuitem\"], [data-dialog-origin]';\n\nlet lastSource: { rect: DialogOriginRect; at: number } | null = null;\nlet trackerInstalled = false;\n\nfunction rectOf(element: Element): DialogOriginRect | null {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return null;\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction rememberSource(target: EventTarget | null) {\n if (!(target instanceof Element)) return;\n const element = target.closest(SOURCE_SELECTOR);\n if (!element) return;\n const rect = rectOf(element);\n if (rect) lastSource = { rect, at: Date.now() };\n}\n\nfunction installSourceTracker() {\n if (trackerInstalled || typeof document === \"undefined\") return;\n trackerInstalled = true;\n document.addEventListener(\n \"pointerdown\",\n (event) => rememberSource(event.target),\n true,\n );\n document.addEventListener(\n \"keydown\",\n (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n rememberSource(document.activeElement);\n },\n true,\n );\n}\n\nfunction resolveOrigin(content: HTMLElement): DialogOriginRect | null {\n if (lastSource && Date.now() - lastSource.at < 2000) {\n const rect = lastSource.rect;\n lastSource = null;\n return rect;\n }\n lastSource = null;\n\n const active = document.activeElement;\n if (\n active instanceof Element &&\n active !== content &&\n !content.contains(active) &&\n active.matches(SOURCE_SELECTOR)\n ) {\n return rectOf(active);\n }\n return null;\n}\n\nconst DIALOG_CLOSE_MS = 250;\nconst DialogClosingContext = createContext(false);\n\n/** Dialog root; owns the delayed close so the fly-out can finish. */\nexport function Dialog({\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(\n defaultOpen ?? false,\n );\n const [closing, setClosing] = useState(false);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const open = controlledOpen ?? uncontrolledOpen;\n const openRef = useRef(open);\n openRef.current = open;\n const controlled = controlledOpen !== undefined;\n\n useEffect(() => installSourceTracker(), []);\n\n useEffect(() => {\n if (controlledOpen) setClosing(false);\n }, [controlledOpen]);\n\n useEffect(\n () => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n },\n [],\n );\n\n const handleOpenChange = (next: boolean) => {\n if (next) {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n setClosing(false);\n if (!controlled) setUncontrolledOpen(true);\n onOpenChange?.(true);\n return;\n }\n if (!open || closing) return;\n\n const reduced =\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (reduced) {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n return;\n }\n\n setClosing(true);\n closeTimer.current = setTimeout(() => {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n requestAnimationFrame(() => {\n // Restore the overlay only when a controlled parent vetoed the close.\n if (openRef.current) setClosing(false);\n });\n }, DIALOG_CLOSE_MS);\n };\n\n return (\n <DialogClosingContext.Provider value={closing}>\n <DialogPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </DialogPrimitive.Root>\n </DialogClosingContext.Provider>\n );\n}\n\nexport const DialogTrigger = forwardRef<\n ElementRef<typeof DialogPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>\n>(({ onClick, ...props }, ref) => (\n <DialogPrimitive.Trigger\n ref={ref}\n onClick={(event) => {\n rememberSource(event.currentTarget);\n onClick?.(event);\n }}\n {...props}\n />\n));\nDialogTrigger.displayName = \"DialogTrigger\";\n\nexport const DialogClose = DialogPrimitive.Close;\n\nfunction startDialogMotion(content: HTMLDivElement, retry = true) {\n if (content.dataset.dialogMotionStarted === \"true\") return;\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n return;\n }\n\n const target = rectOf(content);\n if (!target) {\n if (retry) {\n window.requestAnimationFrame(() => startDialogMotion(content, false));\n }\n return;\n }\n\n content.dataset.dialogMotionStarted = \"true\";\n const origin = resolveOrigin(content);\n const flight = origin ? computeDialogFlight(origin, target) : null;\n if (flight) {\n content.style.setProperty(\"--dialog-dx\", `${flight.dx}px`);\n content.style.setProperty(\"--dialog-dy\", `${flight.dy}px`);\n content.style.setProperty(\"--dialog-sx\", String(flight.sx));\n content.style.setProperty(\"--dialog-sy\", String(flight.sy));\n content.classList.add(\"dialog-fly-in\");\n } else {\n content.classList.add(\"dialog-pop-in\");\n }\n\n const clear = () => {\n content.classList.remove(\"dialog-fly-in\", \"dialog-pop-in\");\n content.style.removeProperty(\"--dialog-dx\");\n content.style.removeProperty(\"--dialog-dy\");\n content.style.removeProperty(\"--dialog-sx\");\n content.style.removeProperty(\"--dialog-sy\");\n };\n const onEnd = (event: AnimationEvent) => {\n if (event.target !== content) return;\n if (\n event.animationName !== \"dialog-fly-in\" &&\n event.animationName !== \"dialog-pop-in\"\n ) {\n return;\n }\n content.removeEventListener(\"animationend\", onEnd);\n clear();\n };\n content.addEventListener(\"animationend\", onEnd);\n}\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const closing = useContext(DialogClosingContext);\n const contentRef = useRef<HTMLDivElement>(null);\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n contentRef.current = node;\n if (node) startDialogMotion(node);\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n if (ref) {\n (ref as { current: HTMLDivElement | null }).current = node;\n }\n },\n [ref],\n );\n\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 overflow-hidden bg-overlay data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n !closing &&\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n closing && \"opacity-0 transition-opacity duration-200\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"dialog-noise pointer-events-none absolute inset-0\"\n />\n </DialogPrimitive.Overlay>\n <div className=\"pointer-events-none fixed inset-0 z-50 flex items-center justify-center overflow-y-auto p-4\">\n <DialogPrimitive.Content\n ref={setRef}\n className={cn(\n \"dialog-content pointer-events-auto relative flex max-h-[min(85vh,44rem)] w-full max-w-[22.4rem] flex-col gap-0 overflow-hidden will-change-[transform,opacity]\",\n \"rounded-2xl border border-(--dialog-shell-border) bg-(--dialog-shell-bg) pb-3 shadow-(--dialog-shell-shadow) sm:pb-4\",\n closing && \"dialog-closing\",\n \"focus:outline-none\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3.5 top-3.5 z-10 rounded-sm text-subtle transition-colors hover:text-fg focus-visible:outline-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n );\n});\nDialogContent.displayName = \"DialogContent\";\n\n/**\n * Elevated inner card inside the dialog shell. Flush to the shell's left, top\n * and right edges (the shell clips its top corners); the footer stays below on\n * the shell so the two surfaces read as distinct layers.\n */\nexport function DialogPanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"panel\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col overflow-hidden rounded-b-2xl border-x-0 border-t-0 border-b border-(--dialog-panel-border) bg-(--dialog-panel-bg) shadow-(--dialog-panel-shadow)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Scrollable region inside `DialogPanel`; keeps the footer pinned. */\nexport function DialogBody({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"body\"\n className={cn(\"min-h-0 flex-1 overflow-y-auto px-5 py-4\", className)}\n {...props}\n />\n );\n}\n\nexport function DialogHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"header\"\n className={cn(\n \"flex shrink-0 flex-col gap-1.5 border-b border-(--dialog-panel-border) px-5 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"footer\"\n className={cn(\n \"flex shrink-0 flex-col-reverse gap-2 px-3 pt-3 sm:flex-row sm:justify-end sm:px-4 sm:pt-3.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-base font-semibold text-fg\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n","import {\n createContext,\n useContext,\n useId,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { Badge } from \"./badge\";\nimport { cn } from \"./utils\";\n\ninterface RadioGroupContextValue {\n name: string;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps\n extends Omit<HTMLAttributes<HTMLFieldSetElement>, \"onChange\"> {\n /** Accessible group name; also the shared `name` for the native radios. */\n label: string;\n /** Selected value (controlled). */\n value?: string;\n /** Called with the newly selected value. */\n onChange?: (value: string) => void;\n /** Disables every option in the group. */\n disabled?: boolean;\n /** Shared `name` for the native inputs; generated when omitted. */\n name?: string;\n}\n\n/**\n * Vertical group of `RadioCard` options. Built on native `<input type=\"radio\">`\n * inside a `<fieldset>`, so arrow-key navigation, labels and forms work without\n * a dependency. Controlled via `value` / `onChange`.\n */\nexport function RadioGroup({\n label,\n value,\n onChange,\n disabled = false,\n name,\n className,\n children,\n ...props\n}: RadioGroupProps) {\n const generated = useId();\n const groupName = name ?? generated;\n\n return (\n <RadioGroupContext.Provider value={{ name: groupName, value, onChange, disabled }}>\n <fieldset className={cn(\"flex flex-col gap-6\", className)} {...props}>\n <legend className=\"sr-only\">{label}</legend>\n {children}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioCardProps {\n /** Value reported when this option is selected. */\n value: string;\n /** Primary label. */\n title: ReactNode;\n /** Supporting copy shown under the title. */\n description?: ReactNode;\n /** Optional pill rendered next to the title (e.g. \"Easiest\"). */\n badge?: ReactNode;\n /** Disables just this option. */\n disabled?: boolean;\n className?: string;\n}\n\n/** A single selectable option: radio indicator, title, optional badge + copy. */\nexport function RadioCard({\n value,\n title,\n description,\n badge,\n disabled = false,\n className,\n}: RadioCardProps) {\n const ctx = useContext(RadioGroupContext);\n const describedById = useId();\n if (!ctx) {\n throw new Error(\"RadioCard must be rendered inside a RadioGroup\");\n }\n\n const isDisabled = disabled || ctx.disabled;\n const isChecked = ctx.value === value;\n\n return (\n <label\n className={cn(\n \"group relative flex items-start gap-3\",\n isDisabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => ctx.onChange?.(value)}\n aria-describedby={description ? describedById : undefined}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden\n className={cn(\n \"mt-[5px] grid size-3.5 shrink-0 place-items-center rounded-full border-2 border-transparent bg-line-strong transition-colors\",\n \"peer-checked:border-4 peer-checked:border-primary peer-checked:bg-primary-fg\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-focus/40 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-canvas\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-base font-semibold text-fg\">{title}</span>\n {badge ? <Badge variant=\"primary\">{badge}</Badge> : null}\n </span>\n {description ? (\n <span id={describedById} className=\"mt-1 block text-sm text-muted\">\n {description}\n </span>\n ) : null}\n </span>\n </label>\n );\n}\n","import { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogPanel,\n DialogTitle,\n DialogTrigger,\n} from \"./dialog\";\nimport { RadioCard, RadioGroup } from \"./radio-group\";\n\nexport interface ChoiceOption {\n value: string;\n title: ReactNode;\n description?: ReactNode;\n badge?: ReactNode;\n}\n\nexport interface ChoiceDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Optional element that opens the dialog. */\n trigger?: ReactNode;\n /** Dialog heading. */\n title: string;\n /** Selectable options, rendered as radio cards. */\n options: ChoiceOption[];\n /** Initially selected value (uncontrolled). */\n defaultValue?: string;\n /** Selected value (controlled). */\n value?: string;\n onValueChange?: (value: string) => void;\n /** Footer labels. */\n cancelLabel?: string;\n confirmLabel?: string;\n /** Called with the selected value when the confirm button is pressed. */\n onConfirm?: (value: string) => void;\n}\n\n/**\n * Dialog for picking one option from a small set, styled as the\n * \"Create production instance\" reference: divided header, radio cards, and a\n * footer with an equal-width secondary Cancel plus primary Continue.\n */\nexport function ChoiceDialog({\n open,\n onOpenChange,\n trigger,\n title,\n options,\n defaultValue,\n value,\n onValueChange,\n cancelLabel = \"Cancel\",\n confirmLabel = \"Continue\",\n onConfirm,\n}: ChoiceDialogProps) {\n const [internal, setInternal] = useState(defaultValue ?? options[0]?.value ?? \"\");\n const selected = value ?? internal;\n\n const select = (next: string) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent\n aria-describedby={undefined}\n className=\"max-w-[29.4rem] [&>button]:hidden\"\n >\n <DialogPanel>\n <DialogHeader>\n <DialogTitle className=\"text-xl\">{title}</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <RadioGroup label={title} value={selected} onChange={select}>\n {options.map((option) => (\n <RadioCard\n key={option.value}\n value={option.value}\n title={option.title}\n description={option.description}\n badge={option.badge}\n />\n ))}\n </RadioGroup>\n </DialogBody>\n </DialogPanel>\n <DialogFooter className=\"gap-3 pt-2.5\">\n <Button\n variant=\"secondary\"\n className=\"flex-1\"\n onClick={() => onOpenChange?.(false)}\n >\n {cancelLabel}\n </Button>\n <Button className=\"flex-1\" onClick={() => onConfirm?.(selected)}>\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { Check, Copy } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface CodeBlockProps {\n code: string;\n /** Short label shown in the header (e.g. a filename or request line). */\n label?: ReactNode;\n language?: string;\n className?: string;\n}\n\nexport function CodeBlock({ code, label, className }: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <TableSurface\n className={className}\n header={\n <div className=\"flex h-(--table-header-h) items-center px-(--table-pad-x) pr-28\">\n <span className=\"truncate text-[13px] font-medium text-table-header\">\n {label}\n </span>\n </div>\n }\n action={{\n label: copied ? \"Copied\" : \"Copy\",\n icon: copied ? (\n <Check className=\"text-success\" weight=\"bold\" />\n ) : (\n <Copy />\n ),\n variant: \"ghost\",\n onClick: copy,\n }}\n panelClassName=\"min-w-0\"\n >\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-fg\">\n <code>{code}</code>\n </pre>\n </TableSurface>\n );\n}\n","import { X } from \"@phosphor-icons/react\";\nimport { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype InputSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst HEIGHT: Record<InputSize, string> = {\n sm: \"h-[var(--control-h-sm)] text-sm\",\n md: \"h-[var(--control-h-md)] text-sm\",\n lg: \"h-[var(--control-h-lg)] text-sm\",\n xl: \"h-[var(--control-h-xl)] rounded-[var(--control-radius-xl)] text-base\",\n};\n\nconst PAD_X: Record<InputSize, string> = {\n sm: \"px-[var(--control-pad-x-sm)]\",\n md: \"px-[var(--control-pad-x-md)]\",\n lg: \"px-[var(--control-pad-x-lg)]\",\n xl: \"px-[var(--control-pad-x-xl)]\",\n};\n\nconst LEAD_INSET: Record<InputSize, string> = {\n sm: \"left-[var(--control-pad-x-sm)]\",\n md: \"left-[var(--control-pad-x-md)]\",\n lg: \"left-[var(--control-pad-x-lg)]\",\n xl: \"left-[var(--control-pad-x-xl)]\",\n};\n\nconst TRAIL_INSET: Record<InputSize, string> = {\n sm: \"right-[var(--control-pad-x-sm)]\",\n md: \"right-[var(--control-pad-x-md)]\",\n lg: \"right-[var(--control-pad-x-lg)]\",\n xl: \"right-[var(--control-pad-x-xl)]\",\n};\n\nconst ICON: Record<InputSize, string> = {\n sm: \"size-[var(--control-icon-sm)]\",\n md: \"size-[var(--control-icon-md)]\",\n lg: \"size-[var(--control-icon-lg)]\",\n xl: \"size-[var(--control-icon-xl)]\",\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /** Control height preset. Defaults to `md`. */\n size?: InputSize;\n /** Optional icon rendered inside the field, before the text. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered inside the field, after the text. */\n trailingIcon?: ReactNode;\n /** Shows a real clear button when the field has a value. */\n onClear?: () => void;\n /** Error styling; also pairs with `helperText` for the message. */\n error?: boolean;\n /** Helper or error message shown below the field (wired to aria-describedby). */\n helperText?: string;\n /** Wrapper class when icons or a helper message render a container. */\n containerClassName?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n containerClassName,\n type = \"text\",\n size = \"md\",\n leadingIcon,\n trailingIcon,\n onClear,\n value,\n defaultValue,\n error = false,\n helperText,\n id,\n \"aria-describedby\": ariaDescribedBy,\n disabled,\n readOnly,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hasMessage = Boolean(helperText);\n const showClear = Boolean(onClear && (value !== undefined ? String(value).length > 0 : defaultValue !== undefined ? String(defaultValue).length > 0 : false));\n const messageId = hasMessage ? `${inputId}-description` : undefined;\n const describedBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n const field = (\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={error || undefined}\n aria-describedby={describedBy}\n style={\n leadingIcon || trailingIcon || showClear\n ? {\n paddingInlineStart: leadingIcon\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n paddingInlineEnd:\n trailingIcon || showClear\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n }\n : undefined\n }\n className={cn(\n \"flex w-full rounded-(--control-radius) border bg-(--input-bg) text-(--input-fg) transition-colors\",\n HEIGHT[size],\n PAD_X[size],\n \"placeholder:text-(--input-placeholder)\",\n \"hover:border-(--input-border-hover)\",\n \"focus-visible:outline-none focus-visible:border-(--input-border-focus) focus-visible:ring-2 focus-visible:ring-focus/30\",\n error &&\n \"border-error hover:border-error focus-visible:border-error focus-visible:ring-error/30\",\n !error && \"border-(--input-border)\",\n disabled &&\n \"cursor-not-allowed bg-(--input-bg-disabled) opacity-60 hover:border-(--input-border)\",\n readOnly && \"cursor-default focus-visible:ring-0\",\n className,\n )}\n value={value}\n defaultValue={defaultValue}\n {...props}\n />\n );\n\n // Bare input keeps the historical API when no compositional features are used.\n if (!leadingIcon && !trailingIcon && !showClear && !hasMessage) {\n return field;\n }\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n <div className=\"relative\">\n {leadingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n LEAD_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {leadingIcon}\n </span>\n </span>\n ) : null}\n {field}\n {showClear ? (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 flex items-center text-(--input-placeholder) transition-colors hover:text-(--input-fg)\",\n TRAIL_INSET[size],\n )}\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n <X />\n </span>\n </button>\n ) : trailingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n TRAIL_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {trailingIcon}\n </span>\n </span>\n ) : null}\n </div>\n {hasMessage ? (\n <p\n id={messageId}\n className={cn(\"mt-1.5 text-xs\", error ? \"text-error\" : \"text-muted\")}\n >\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\nInput.displayName = \"Input\";\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-[var(--button-secondary-bg)] p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-fg outline-none transition-colors\",\n \"focus:bg-[var(--menu-highlight)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"[&_svg]:size-4 [&_svg]:text-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"group relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none transition-colors focus:bg-[var(--menu-highlight)]\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 shrink-0 items-center justify-center rounded border border-line-strong bg-transparent transition-colors group-data-[state=checked]:border-primary\">\n <DropdownMenuPrimitive.ItemIndicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] [--button-inner:var(--button-primary-inner)]\">\n <Check className=\"size-3\" weight=\"bold\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-line\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CaretDown, Check } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<\n typeof SelectPrimitive.Trigger\n> {\n /** `field` fills a form; `inline` mimics the compact app dropdown. */\n variant?: \"field\" | \"inline\";\n}\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, children, variant = \"field\", ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-2 text-sm text-fg\",\n \"focus:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:truncate\",\n variant === \"field\" &&\n \"h-9 w-full rounded-md border border-line bg-surface px-3 focus:border-primary focus:ring-2 focus:ring-focus/30\",\n variant === \"inline\" &&\n \"btn-fill btn-inner-border btn-interactive h-8 w-auto rounded-(--control-radius) border-0 bg-(--button-secondary-bg) px-(--control-pad-x-sm) font-medium text-fg hover:bg-(--button-surface-hover) active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <CaretDown className=\"size-3.5 text-subtle\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(\n (\n { className, children, position = \"popper\", sideOffset = 8, ...props },\n ref,\n ) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"p-0\">\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n ),\n);\nSelectContent.displayName = \"SelectContent\";\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none focus:bg-(--menu-highlight) data-disabled:pointer-events-none data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\nexport const SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ninterface TableEmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\n/**\n * Centered, contextual empty state for a table panel: an 80px icon chip, a\n * large heading, supporting text, and an optional accent action.\n */\nexport function TableEmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: TableEmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex min-h-[22rem] flex-col items-center justify-center gap-5 px-6 py-16 text-center\",\n className,\n )}\n >\n {icon ? (\n <div className=\"flex size-[var(--table-empty-icon)] items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-table-muted [&_svg]:size-8\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-2\">\n <p className=\"text-[1.75rem] font-semibold leading-tight text-table-header-active\">\n {title}\n </p>\n {description ? (\n <p className=\"mx-auto max-w-md text-base leading-relaxed text-table-muted\">\n {description}\n </p>\n ) : null}\n </div>\n {action ? (\n <div className=\"text-sm font-medium text-table-accent\">{action}</div>\n ) : null}\n </div>\n );\n}\n","import {\n CaretDown,\n CaretUp,\n CaretUpDown,\n Columns as ColumnsIcon,\n FunnelSimple,\n Lock,\n MagnifyingGlass,\n WarningCircle,\n X,\n} from \"@phosphor-icons/react\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport { Button } from \"./button\";\nimport { Checkbox } from \"./checkbox\";\nimport { Input } from \"./input\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { TableBody, TableCell, TableRow } from \"./table\";\nimport { TableEmptyState } from \"./table-empty-state\";\nimport {\n TableSurface,\n type TableSurfaceAction,\n type TableSurfaceTone,\n} from \"./table-surface\";\nimport { cn } from \"./utils\";\n\nexport interface Column<T> {\n id: string;\n header: string;\n cell: (row: T) => ReactNode;\n sortable?: boolean;\n sortValue?: (row: T) => string | number | null | undefined;\n numeric?: boolean;\n defaultHidden?: boolean;\n align?: \"left\" | \"right\";\n className?: string;\n /** Column width for the fixed layout (e.g. \"18rem\", \"20%\"). Defaults to auto. */\n width?: string;\n /** Required columns stay visible and cannot be hidden. */\n required?: boolean;\n}\n\nexport interface DataTableFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DataTableFilter<T> {\n id: string;\n label: string;\n options: DataTableFilterOption[];\n value: string[];\n onChange: (value: string[]) => void;\n /** Return true when the row matches the selected filter values. */\n match: (row: T, values: string[]) => boolean;\n}\n\nexport interface BulkAction<T> {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"destructive\";\n onRun: (rows: T[]) => void | Promise<void>;\n disabled?: boolean;\n}\n\nexport interface TabDef {\n id: string;\n label: string;\n}\n\nexport interface DataTableError {\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\ninterface DataTableProps<T> {\n rows: T[];\n columns: Column<T>[];\n getRowId: (row: T) => string;\n\n loading?: boolean;\n error?: DataTableError | null;\n empty?: {\n icon?: ReactNode;\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n };\n\n search?: {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n keys: (row: T) => string;\n };\n filters?: DataTableFilter<T>[];\n toolbarStart?: ReactNode;\n toolbarEnd?: ReactNode;\n\n tabs?: TabDef[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n\n infoBanner?: ReactNode;\n\n selectable?: boolean;\n bulkActions?: BulkAction<T>[];\n\n rowActions?: (row: T) => ReactNode;\n onRowClick?: (row: T) => void;\n\n defaultSort?: { id: string; dir: \"asc\" | \"desc\" };\n pageSize?: number;\n pageSizeOptions?: number[];\n\n /** Surface preset for the table card. */\n tone?: TableSurfaceTone;\n /** Optional action pinned to the top-right of the header band. */\n headerAction?: ReactNode | TableSurfaceAction;\n /** Header band color/style overrides. */\n headerClassName?: string;\n /** Inner panel color/style overrides. */\n panelClassName?: string;\n\n className?: string;\n}\n\nconst HEADER_CELL =\n \"h-[var(--table-header-h)] whitespace-nowrap px-[var(--table-pad-x)] text-left align-middle text-[0.8125rem] font-medium\";\n\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .slice(0, 2)\n .map((p) => p[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n}\n\n/** Clerk-style identity cell: avatar + primary name + secondary line. */\nexport function DataTableIdentity({\n name,\n secondary,\n image,\n}: {\n name: string;\n secondary?: ReactNode;\n image?: string;\n}) {\n return (\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-8\">\n {image ? <AvatarImage src={image} alt=\"\" /> : null}\n <AvatarFallback>{initials(name)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-table-header-active\">{name}</div>\n {secondary ? <div className=\"truncate text-xs text-table-muted\">{secondary}</div> : null}\n </div>\n </div>\n );\n}\n\nexport function DataTable<T>({\n rows,\n columns,\n getRowId,\n loading = false,\n error,\n empty,\n search,\n filters,\n toolbarStart,\n toolbarEnd,\n tabs,\n activeTab,\n onTabChange,\n infoBanner,\n selectable = false,\n bulkActions,\n rowActions,\n onRowClick,\n defaultSort,\n pageSize: initialPageSize = 25,\n pageSizeOptions = [10, 25, 50, 100],\n tone,\n headerAction,\n headerClassName,\n panelClassName,\n className,\n}: DataTableProps<T>) {\n const [hidden, setHidden] = useState<Record<string, boolean>>(() =>\n Object.fromEntries(\n columns.filter((c) => c.defaultHidden && !c.required).map((c) => [c.id, true]),\n ),\n );\n const [sort, setSort] = useState<{ id: string; dir: \"asc\" | \"desc\" } | null>(\n defaultSort ?? null,\n );\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [activeFilterIds, setActiveFilterIds] = useState<string[]>([]);\n\n const visibleColumns = columns.filter((c) => !hidden[c.id]);\n const hiddenColumns = columns.filter((c) => hidden[c.id] && !c.required);\n const activeFilters = (filters ?? []).filter((f) => activeFilterIds.includes(f.id));\n const filterSignature = (filters ?? [])\n .map((f) => `${f.id}:${f.value.join(\",\")}`)\n .join(\"|\");\n\n const filtered = useMemo(() => {\n let next = rows;\n for (const filter of filters ?? []) {\n if (filter.value.length > 0) {\n next = next.filter((row) => filter.match(row, filter.value));\n }\n }\n if (!search || !search.value.trim()) return next;\n const q = search.value.trim().toLowerCase();\n return next.filter((r) => search.keys(r).toLowerCase().includes(q));\n }, [rows, search, filters]);\n\n const sorted = useMemo(() => {\n if (!sort) return filtered;\n const col = columns.find((c) => c.id === sort.id);\n if (!col?.sortValue) return filtered;\n const dir = sort.dir === \"asc\" ? 1 : -1;\n return [...filtered].sort((a, b) => {\n const av = col.sortValue!(a);\n const bv = col.sortValue!(b);\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (typeof av === \"number\" && typeof bv === \"number\") return (av - bv) * dir;\n return String(av).localeCompare(String(bv)) * dir;\n });\n }, [filtered, sort, columns]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n\n useEffect(() => {\n setPage(0);\n }, [search?.value, pageSize, sort?.id, sort?.dir, activeTab, filterSignature]);\n\n useEffect(() => {\n if (page > pageCount - 1) setPage(pageCount - 1);\n }, [page, pageCount]);\n\n const start = page * pageSize;\n const pageRows = sorted.slice(start, start + pageSize);\n\n const toggleSort = (col: Column<T>) => {\n if (!col.sortable) return;\n setSort((prev) =>\n prev?.id === col.id\n ? prev.dir === \"asc\"\n ? { id: col.id, dir: \"desc\" }\n : null\n : { id: col.id, dir: \"asc\" },\n );\n };\n\n const allSelected = pageRows.length > 0 && pageRows.every((r) => selected.has(getRowId(r)));\n const someSelected = pageRows.some((r) => selected.has(getRowId(r)));\n const selectedRows = rows.filter((r) => selected.has(getRowId(r)));\n\n const toggleAll = () => {\n setSelected((prev) => {\n const next = new Set(prev);\n if (allSelected) pageRows.forEach((r) => next.delete(getRowId(r)));\n else pageRows.forEach((r) => next.add(getRowId(r)));\n return next;\n });\n };\n\n const toggleOne = (id: string) => {\n setSelected((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const hasToolbar = Boolean(search || filters?.length || toolbarStart || toolbarEnd);\n\n // Fixed layout keeps header and body columns aligned across the two tables.\n // When no column declares a width, give the first column more room and split\n // the rest evenly so tables don't render as uniform stripes.\n const anyExplicitWidth = visibleColumns.some((c) => c.width);\n const restShare =\n visibleColumns.length > 1 ? (100 - 30) / (visibleColumns.length - 1) : 100;\n const dataWidths = visibleColumns.map((c, i) => {\n if (c.width) return c.width;\n if (anyExplicitWidth) return \"auto\";\n return `${i === 0 ? 30 : restShare}%`;\n });\n\n const colWidths = [\n ...(selectable ? [\"2.75rem\"] : []),\n ...dataWidths,\n ...(rowActions ? [\"11rem\"] : []),\n ];\n\n const ariaSort = (c: Column<T>) =>\n sort?.id === c.id ? (sort.dir === \"asc\" ? \"ascending\" : \"descending\") : undefined;\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {tabs && tabs.length > 0 && (\n <div className=\"flex items-center gap-1 border-b border-line\" role=\"tablist\">\n {tabs.map((t) => {\n const active = t.id === activeTab;\n return (\n <button\n key={t.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onTabChange?.(t.id)}\n className={cn(\n \"-mb-px border-b-2 px-3 py-2 text-sm transition-colors\",\n active\n ? \"border-fg font-medium text-fg\"\n : \"border-transparent text-muted hover:text-fg\",\n )}\n >\n {t.label}\n </button>\n );\n })}\n </div>\n )}\n\n {hasToolbar && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {search && (\n <Input\n type=\"search\"\n aria-label={search.placeholder ?? \"Search\"}\n placeholder={search.placeholder ?? \"Search...\"}\n value={search.value}\n onChange={(e) => search.onChange(e.target.value)}\n onClear={() => search.onChange(\"\")}\n leadingIcon={<MagnifyingGlass />}\n containerClassName=\"w-full sm:w-[280px]\"\n className=\"rounded-[6px] border-0 bg-surface shadow-xs ring-1 ring-line\"\n />\n )}\n {toolbarStart}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n leadingIcon={<ColumnsIcon />}\n trailingIcon={<CaretDown />}\n >\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-54\">\n <DropdownMenuLabel className=\"text-[13px]\">Active columns</DropdownMenuLabel>\n {visibleColumns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked\n disabled={c.required}\n onCheckedChange={() => setHidden((prev) => ({ ...prev, [c.id]: true }))}\n onSelect={(e) => e.preventDefault()}\n className=\"justify-between\"\n >\n <span>{c.header}</span>\n {c.required ? <Lock className=\"size-3.5 text-subtle\" aria-hidden /> : null}\n </DropdownMenuCheckboxItem>\n ))}\n {hiddenColumns.length > 0 ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-[13px]\">Available columns</DropdownMenuLabel>\n {hiddenColumns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked={false}\n onCheckedChange={() => setHidden((prev) => ({ ...prev, [c.id]: false }))}\n onSelect={(e) => e.preventDefault()}\n >\n {c.header}\n </DropdownMenuCheckboxItem>\n ))}\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n {filters && filters.length > 0 ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label=\"Add filter\"\n >\n <FunnelSimple />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-54\">\n {filters.map((filter) => (\n <DropdownMenuItem\n key={filter.id}\n onSelect={() =>\n setActiveFilterIds((prev) =>\n prev.includes(filter.id) ? prev : [...prev, filter.id],\n )\n }\n >\n {filter.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n {toolbarEnd ? <div className=\"flex-0 sm:ml-auto\">{toolbarEnd}</div> : null}\n </div>\n )}\n\n {activeFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeFilters.map((filter) => {\n const clear = () => {\n filter.onChange([]);\n setActiveFilterIds((prev) => prev.filter((id) => id !== filter.id));\n };\n\n return (\n <div key={filter.id} className=\"inline-flex items-center\">\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label={`Remove ${filter.label} filter`}\n className=\"rounded-r-none\"\n onClick={clear}\n >\n <X />\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"secondary\" size=\"md\" className=\"rounded-l-none pl-2\">\n <FunnelSimple />\n <span className=\"font-medium\">{filter.label}</span>\n <span className=\"h-4 w-px bg-line\" aria-hidden />\n <span className=\"text-muted\">\n {filter.value.length > 0\n ? `${filter.value.length} selected`\n : \"Enter value\"}\n </span>\n <CaretDown className=\"text-muted\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel className=\"text-[13px]\">\n Filter by {filter.label}\n </DropdownMenuLabel>\n {filter.options.map((option) => {\n const checked = filter.value.includes(option.value);\n return (\n <DropdownMenuCheckboxItem\n key={option.value}\n checked={checked}\n onCheckedChange={() =>\n filter.onChange(\n checked\n ? filter.value.filter((value) => value !== option.value)\n : [...filter.value, option.value],\n )\n }\n onSelect={(e) => e.preventDefault()}\n >\n {option.label}\n </DropdownMenuCheckboxItem>\n );\n })}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={clear}>Clear filter</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n })}\n <button\n type=\"button\"\n onClick={() => {\n for (const filter of activeFilters) filter.onChange([]);\n setActiveFilterIds([]);\n }}\n className=\"text-sm text-muted transition-colors hover:text-fg\"\n >\n Clear filters\n </button>\n </div>\n ) : null}\n\n {infoBanner}\n\n {selectable && selected.size > 0 && (\n <div className=\"flex flex-wrap items-center gap-3 rounded-lg border border-line bg-elevated px-3 py-2 text-sm\">\n <span className=\"font-medium text-fg\">{selected.size} selected</span>\n <div className=\"flex items-center gap-2\">\n {(bulkActions ?? []).map((a) => (\n <Button\n key={a.label}\n size=\"md\"\n variant={a.variant ?? \"outline\"}\n disabled={a.disabled}\n onClick={() => void a.onRun(selectedRows)}\n >\n {a.icon}\n {a.label}\n </Button>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => setSelected(new Set())}\n className=\"ml-auto inline-flex items-center gap-1 text-xs text-muted hover:text-fg\"\n >\n <X className=\"size-3.5\" />\n Clear\n </button>\n </div>\n )}\n\n <TableSurface\n action={headerAction}\n tone={tone}\n headerClassName={headerClassName}\n panelClassName={panelClassName}\n header={\n // Visible header: presentational so its controls stay focusable while\n // the body table carries the semantic column headers (sr-only).\n <table role=\"presentation\" className=\"w-full table-fixed border-collapse\">\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n <thead>\n <tr>\n {selectable && (\n <th className=\"h-(--table-header-h) w-11 px-4 align-middle\">\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected ? true : someSelected ? \"indeterminate\" : false}\n onCheckedChange={toggleAll}\n />\n </th>\n )}\n {visibleColumns.map((c) => (\n <th\n key={c.id}\n className={cn(HEADER_CELL, c.align === \"right\" && \"text-right\", c.className)}\n >\n {c.sortable ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Sort by ${c.header}`}\n onClick={() => toggleSort(c)}\n className={cn(\n \"h-auto gap-1.5 rounded-none px-0 py-0 text-[0.8125rem] text-table-header transition-colors [&_svg]:size-3.5\",\n \"hover:bg-transparent hover:text-table-header-active hover:shadow-none\",\n \"active:scale-100 active:bg-transparent active:shadow-none\",\n sort?.id === c.id && \"text-table-header-active\",\n )}\n >\n {c.header}\n {sort?.id === c.id ? (\n sort.dir === \"asc\" ? (\n <CaretUp className=\"size-3.5\" weight=\"bold\" />\n ) : (\n <CaretDown className=\"size-3.5\" weight=\"bold\" />\n )\n ) : (\n <CaretUpDown className=\"size-3.5 opacity-50\" />\n )}\n </Button>\n ) : (\n c.header\n )}\n </th>\n ))}\n {rowActions && (\n <th className=\"h-(--table-header-h) w-44 px-4 align-middle\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n </table>\n }\n >\n {loading ? (\n <div className=\"space-y-2 p-4\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-11 w-full animate-pulse rounded-lg bg-table-row-hover\" />\n ))}\n </div>\n ) : error ? (\n <div className=\"flex min-h-88 flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n <div className=\"flex size-(--table-empty-icon) items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-error [&_svg]:size-8\">\n <WarningCircle weight=\"duotone\" />\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-[1.75rem] font-semibold text-table-header-active\">\n {error.title}\n </p>\n {error.description ? (\n <p className=\"mx-auto max-w-md text-base leading-relaxed text-table-muted\">\n {error.description}\n </p>\n ) : null}\n </div>\n {error.action}\n </div>\n ) : pageRows.length === 0 ? (\n <TableEmptyState\n icon={empty?.icon}\n title={empty?.title ?? \"No results\"}\n description={typeof empty?.description === \"string\" ? empty.description : undefined}\n action={empty?.action}\n />\n ) : (\n <table className=\"w-full table-fixed border-collapse\">\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n {/* Semantic headers for assistive tech (visible header is presentational). */}\n <thead className=\"sr-only\">\n <tr>\n {selectable && <th scope=\"col\">Select</th>}\n {visibleColumns.map((c) => (\n <th key={c.id} scope=\"col\" aria-sort={ariaSort(c)}>\n {c.header}\n </th>\n ))}\n {rowActions && <th scope=\"col\">Actions</th>}\n </tr>\n </thead>\n <TableBody>\n {pageRows.map((row) => {\n const id = getRowId(row);\n const isSelected = selected.has(id);\n return (\n <TableRow\n key={id}\n data-state={isSelected ? \"selected\" : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"cursor-pointer\" : undefined}\n >\n {selectable && (\n <TableCell className=\"w-11 px-4\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected}\n onCheckedChange={() => toggleOne(id)}\n />\n </TableCell>\n )}\n {visibleColumns.map((c) => (\n <TableCell\n key={c.id}\n data-numeric={c.numeric ? \"\" : undefined}\n className={cn(c.align === \"right\" && \"text-right\", c.className)}\n >\n {c.cell(row)}\n </TableCell>\n ))}\n {rowActions && (\n <TableCell className=\"w-44 px-4 text-right\" onClick={(e) => e.stopPropagation()}>\n {rowActions(row)}\n </TableCell>\n )}\n </TableRow>\n );\n })}\n </TableBody>\n </table>\n )}\n </TableSurface>\n\n {!loading && !error && sorted.length > 0 && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 text-sm\">\n <span className=\"text-muted\">\n {start + 1}–{Math.min(start + pageSize, sorted.length)} of {sorted.length}\n </span>\n <div className=\"flex items-center gap-2\">\n <Select value={String(pageSize)} onValueChange={(v) => setPageSize(Number(v))}>\n <SelectTrigger aria-label=\"Rows per page\" className=\"w-27.5\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n} / page\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"outline\"\n size=\"md\"\n disabled={page <= 0}\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n >\n Previous\n </Button>\n <Button\n variant=\"outline\"\n size=\"md\"\n disabled={page >= pageCount - 1}\n onClick={() => setPage((p) => Math.min(pageCount - 1, p + 1))}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <TableSurface className={className}>\n <div className=\"flex flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n {icon ? (\n <div className=\"flex size-11 items-center justify-center rounded-xl border border-line bg-elevated text-subtle [&_svg]:size-6\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n {description ? (\n <p className=\"mx-auto max-w-sm text-sm text-muted\">{description}</p>\n ) : null}\n </div>\n {action}\n </div>\n </TableSurface>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/** Inline keyboard hint chip. */\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n \"inline-flex h-5 min-w-5 items-center justify-center rounded border border-line bg-elevated px-1.5 font-mono text-[11px] font-medium text-subtle\",\n className,\n )}\n {...props}\n />\n );\n}\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"mb-1 text-sm font-medium text-fg leading-none last:mb-0 peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n","import { useId, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n}\n\ninterface SegmentedProps<T extends string> {\n value: T;\n onValueChange: (value: T) => void;\n options: SegmentedOption<T>[];\n size?: \"sm\" | \"md\";\n className?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Single-choice control for a small set of options, styled after the Clerk\n * dashboard: a recessed track with an elevated selected pill. Implemented as a\n * `radiogroup` of native radios, so arrow-key roving and forms work natively.\n */\nexport function Segmented<T extends string>({\n value,\n onValueChange,\n options,\n size = \"sm\",\n className,\n ...rest\n}: SegmentedProps<T>) {\n const name = useId();\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={rest[\"aria-label\"]}\n className={cn(\n \"inline-flex w-fit items-center rounded-lg border border-line bg-canvas\",\n size === \"sm\" ? \"h-(--control-h-sm)\" : \"h-(--control-h-md)\",\n className,\n )}\n >\n {options.map((option) => {\n const active = option.value === value;\n return (\n <label\n key={option.value}\n className={cn(\n \"inline-flex h-full cursor-pointer items-center justify-center gap-1.5 rounded-md text-sm font-medium transition-colors\",\n \"has-focus-visible:ring-2 has-focus-visible:ring-focus/40\",\n size === \"sm\"\n ? \"px-(--control-pad-x-sm) [&_svg]:size-(--control-icon-sm)\"\n : \"px-(--control-pad-x-md) [&_svg]:size-(--control-icon-md)\",\n active\n ? \"btn-fill bg-(--button-secondary-bg) text-fg\"\n : \"text-muted hover:text-fg\",\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={active}\n onChange={() => onValueChange(option.value)}\n className=\"sr-only\"\n />\n {option.icon}\n {option.label}\n </label>\n );\n })}\n </div>\n );\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-line\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-elevated\", className)}\n {...props}\n />\n );\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-line bg-elevated px-2 py-1 text-xs text-fg shadow-md\",\n \"data-[state=delayed-open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=delayed-open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=delayed-open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1\",\n \"data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = \"TooltipContent\";\n"],"names":["cn","inputs","twMerge","clsx","Spinner","className","jsx","CircleNotch","buttonVariants","cva","iconSize","Button","forwardRef","variant","size","asChild","leadingIcon","trailingIcon","iconOnly","loading","fullWidth","disabled","children","props","ref","Comp","Slot","icon","jsxs","Fragment","AgentPrompt","command","tag","copied","setCopied","useState","copy","Robot","Terminal","Check","Copy","Avatar","AvatarPrimitive","AvatarImage","AvatarFallback","badgeVariants","dotVariants","Badge","dot","variants","Info","CheckCircle","Warning","XCircle","Callout","title","DefaultIcon","tone","iconClassName","TableContainer","TablePanel","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","SHELL_TONE","PANEL_TONE","isActionConfig","action","TableSurface","description","header","headerClassName","panelClassName","minHeight","hasTitle","actionNode","splitCardChildren","nodes","Children","headers","child","isValidElement","CardHeader","Card","body","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","CheckboxPrimitive","Minus","usable","rect","clampScale","value","computeDialogFlight","origin","target","SOURCE_SELECTOR","lastSource","trackerInstalled","rectOf","element","rememberSource","installSourceTracker","event","resolveOrigin","content","active","DIALOG_CLOSE_MS","DialogClosingContext","createContext","Dialog","controlledOpen","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","closing","setClosing","closeTimer","useRef","open","openRef","controlled","useEffect","handleOpenChange","next","DialogPrimitive","DialogTrigger","onClick","DialogClose","startDialogMotion","retry","flight","clear","onEnd","DialogContent","useContext","contentRef","setRef","useCallback","node","X","DialogPanel","DialogBody","DialogHeader","DialogFooter","DialogTitle","DialogDescription","RadioGroupContext","RadioGroup","label","onChange","name","generated","useId","groupName","RadioCard","badge","ctx","describedById","isDisabled","isChecked","_a","ChoiceDialog","trigger","options","defaultValue","onValueChange","cancelLabel","confirmLabel","onConfirm","internal","setInternal","selected","option","CodeBlock","code","HEIGHT","PAD_X","LEAD_INSET","TRAIL_INSET","ICON","Input","containerClassName","type","onClear","error","helperText","id","ariaDescribedBy","readOnly","autoId","inputId","hasMessage","showClear","messageId","describedBy","field","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuContent","sideOffset","DropdownMenuItem","inset","DropdownMenuCheckboxItem","checked","DropdownMenuLabel","DropdownMenuSeparator","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","CaretDown","SelectContent","position","SelectItem","SelectLabel","TableEmptyState","HEADER_CELL","initials","p","DataTableIdentity","secondary","image","DataTable","rows","columns","getRowId","empty","search","filters","toolbarStart","toolbarEnd","tabs","activeTab","onTabChange","infoBanner","selectable","bulkActions","rowActions","onRowClick","defaultSort","initialPageSize","pageSizeOptions","headerAction","hidden","setHidden","c","sort","setSort","page","setPage","pageSize","setPageSize","setSelected","activeFilterIds","setActiveFilterIds","visibleColumns","hiddenColumns","activeFilters","f","filterSignature","filtered","useMemo","filter","row","q","r","sorted","col","dir","a","b","av","bv","pageCount","start","pageRows","toggleSort","prev","allSelected","someSelected","selectedRows","toggleAll","toggleOne","hasToolbar","anyExplicitWidth","restShare","dataWidths","i","colWidths","ariaSort","t","e","MagnifyingGlass","ColumnsIcon","Lock","FunnelSimple","w","CaretUp","CaretUpDown","WarningCircle","isSelected","v","n","EmptyState","Kbd","Label","LabelPrimitive","Segmented","rest","Separator","orientation","decorative","SeparatorPrimitive","Skeleton","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils.ts","../src/spinner.tsx","../src/button.tsx","../src/agent-prompt.tsx","../src/avatar.tsx","../src/badge.tsx","../src/callout.tsx","../src/table.tsx","../src/table-surface.tsx","../src/card.tsx","../src/checkbox.tsx","../src/dialog-motion.ts","../src/dialog.tsx","../src/radio-group.tsx","../src/choice-dialog.tsx","../src/code-block.tsx","../src/input.tsx","../src/dropdown-menu.tsx","../src/select.tsx","../src/table-empty-state.tsx","../src/data-table.tsx","../src/empty-state.tsx","../src/kbd.tsx","../src/label.tsx","../src/segmented.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/tooltip.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merge conditional class names with Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { CircleNotch } from \"@phosphor-icons/react\";\n\nimport { cn } from \"./utils\";\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <CircleNotch\n className={cn(\"size-4 animate-spin text-muted\", className)}\n weight=\"bold\"\n aria-hidden\n />\n );\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\n\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"./utils\";\n\nconst buttonVariants = cva(\n \"relative inline-flex select-none items-center justify-center gap-[var(--control-gap)] whitespace-nowrap rounded-[var(--control-radius)] border border-transparent font-medium transition-[color,background-color,border-color,box-shadow,transform] duration-[120ms] active:scale-[0.97] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-primary-inner)] bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] hover:bg-[var(--button-primary-hover)] active:bg-[var(--button-primary-active)]\",\n secondary:\n \"btn-fill btn-inner-border btn-interactive border-0 bg-[var(--button-secondary-bg)] text-fg hover:bg-[var(--button-surface-hover)] active:bg-[var(--button-surface-active)]\",\n outline:\n \"btn-interactive border-[var(--button-outline-border)] bg-transparent text-fg hover:border-fg/12 hover:bg-[var(--button-surface-hover)] active:border-fg/12 active:bg-[var(--button-surface-active)] dark:hover:border-[var(--button-outline-border)] dark:active:border-[var(--button-outline-border)]\",\n ghost:\n \"btn-inner-border btn-interactive border-0 text-muted hover:bg-[var(--button-surface-hover)] hover:text-fg active:bg-[var(--button-surface-active)]\",\n destructive:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-destructive-inner)] bg-[var(--button-destructive-bg)] text-[var(--button-destructive-fg)] hover:bg-[var(--button-destructive-hover)] active:bg-[var(--button-destructive-active)]\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-[var(--control-h-xs)] [--control-gap:var(--control-gap-xs)] px-[var(--control-pad-x-xs)] text-xs [&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"h-[var(--control-h-sm)] px-[var(--control-pad-x-sm)] text-sm [&_svg]:size-[var(--control-icon-sm)]\",\n md: \"h-[var(--control-h-md)] px-[var(--control-pad-x-md)] text-sm [&_svg]:size-[var(--control-icon-md)]\",\n lg: \"h-[var(--control-h-lg)] px-[var(--control-pad-x-lg)] text-sm [&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"rounded-[var(--control-radius-xl)] h-[var(--control-h-xl)] px-[var(--control-pad-x-xl)] text-base [&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"h-[var(--control-h-md)] w-[var(--control-h-md)] p-0 [&_svg]:size-[var(--control-icon-md)]\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\n/** Icon metrics per size, applied to icon wrappers so both stay aligned. */\nconst iconSize: Record<string, string> = {\n xs: \"[&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"[&_svg]:size-[var(--control-icon-sm)]\",\n md: \"[&_svg]:size-[var(--control-icon-md)]\",\n lg: \"[&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"[&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"[&_svg]:size-[var(--control-icon-md)]\",\n};\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n /** Optional icon rendered before the label. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered after the label (e.g. a chevron). */\n trailingIcon?: ReactNode;\n /** Square, content-free button. Provide `aria-label`. */\n iconOnly?: boolean;\n /** Show a spinner and block interaction while an action runs. */\n loading?: boolean;\n /** Stretch to the container width. */\n fullWidth?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n asChild = false,\n leadingIcon,\n trailingIcon,\n iconOnly = false,\n loading = false,\n fullWidth = false,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const icon = iconSize[size ?? \"md\"];\n\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n disabled={asChild ? undefined : disabled || loading}\n className={cn(\n buttonVariants({ variant, size }),\n iconOnly && \"aspect-square px-0\",\n fullWidth && \"w-full\",\n className,\n )}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? (\n <Spinner className={cn(\"text-current\", icon)} aria-hidden />\n ) : leadingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {leadingIcon}\n </span>\n ) : null}\n {children}\n {!loading && trailingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {trailingIcon}\n </span>\n ) : null}\n </>\n )}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import { Check, Copy, Robot, Terminal } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport { cn } from \"./utils\";\n\ninterface AgentPromptProps {\n /** Command or prompt text; copy copies this verbatim. */\n command: string;\n /** Overlapping dark tag above the pill. */\n tag?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\n/**\n * The \"Add Clerk auth to my app\" prompt pill: a dark tag overlapping a\n * rounded command field with a copy button.\n */\nexport function AgentPrompt({\n command,\n tag = \"Build with agents\",\n icon,\n className,\n}: AgentPromptProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <div className={cn(\"relative inline-flex max-w-full\", className)}>\n <span className=\"absolute -top-2.5 left-4 z-10 inline-flex items-center gap-1.5 rounded-md bg-fg px-2 py-1 text-[11px] font-medium text-canvas shadow-sm\">\n {icon ?? <Robot className=\"size-3.5\" weight=\"fill\" />}\n {tag}\n </span>\n <div className=\"mt-2 flex w-full items-center gap-2 rounded-xl border border-line bg-surface py-2 pl-3 pr-2 shadow-sm\">\n <Terminal className=\"size-4 shrink-0 text-subtle\" aria-hidden />\n <span className=\"truncate font-mono text-sm text-fg\">{command}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label=\"Copy prompt\"\n className=\"ml-auto\"\n onClick={copy}\n >\n {copied ? <Check className=\"text-success\" weight=\"bold\" /> : <Copy />}\n </Button>\n </div>\n </div>\n );\n}\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Avatar = forwardRef<\n ElementRef<typeof AvatarPrimitive.Root>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full border border-line\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = \"Avatar\";\n\nexport const AvatarImage = forwardRef<\n ElementRef<typeof AvatarPrimitive.Image>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\nexport const AvatarFallback = forwardRef<\n ElementRef<typeof AvatarPrimitive.Fallback>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex size-full items-center justify-center bg-elevated text-xs font-medium text-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-medium\",\n {\n variants: {\n variant: {\n neutral: \"border-line bg-elevated text-muted\",\n outline: \"border-line bg-transparent text-muted\",\n success: \"border-success/30 bg-success/10 text-success\",\n warning: \"border-warning/30 bg-warning/10 text-warning\",\n error: \"border-error/30 bg-error/10 text-error\",\n info: \"border-info/30 bg-info/10 text-info\",\n primary: \"border-primary/30 bg-primary/10 text-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n },\n);\n\nconst dotVariants = cva(\"size-1.5 shrink-0 rounded-full\", {\n variants: {\n variant: {\n neutral: \"bg-subtle\",\n outline: \"bg-subtle\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n error: \"bg-error\",\n info: \"bg-info\",\n primary: \"bg-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n});\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean;\n}\n\nexport function Badge({ className, variant, dot = false, children, ...props }: BadgeProps) {\n return (\n <span className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot ? <span className={cn(dotVariants({ variant }))} aria-hidden /> : null}\n {children}\n </span>\n );\n}\n\nexport { badgeVariants };\n","import {\n CheckCircle,\n Info,\n Warning,\n XCircle,\n} from \"@phosphor-icons/react\";\nimport type { Icon } from \"@phosphor-icons/react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype CalloutVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst variants: Record<\n CalloutVariant,\n { Icon: Icon; className: string; iconClassName: string }\n> = {\n info: {\n Icon: Info,\n className: \"border-info/30 bg-info/10\",\n iconClassName: \"text-info\",\n },\n success: {\n Icon: CheckCircle,\n className: \"border-success/30 bg-success/10\",\n iconClassName: \"text-success\",\n },\n warning: {\n Icon: Warning,\n className: \"border-warning/30 bg-warning/10\",\n iconClassName: \"text-warning\",\n },\n error: {\n Icon: XCircle,\n className: \"border-error/30 bg-error/10\",\n iconClassName: \"text-error\",\n },\n};\n\ninterface CalloutProps {\n variant?: CalloutVariant;\n title?: ReactNode;\n children?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\nexport function Callout({\n variant = \"info\",\n title,\n children,\n icon,\n className,\n}: CalloutProps) {\n const { Icon: DefaultIcon, className: tone, iconClassName } = variants[variant];\n return (\n <div\n role={variant === \"error\" ? \"alert\" : undefined}\n className={cn(\n \"flex items-start gap-2.5 rounded-lg border px-3.5 py-3 text-sm\",\n tone,\n className,\n )}\n >\n <span className={cn(\"mt-0.5 shrink-0 [&_svg]:size-4\", iconClassName)}>\n {icon ?? <DefaultIcon weight=\"fill\" />}\n </span>\n <div className=\"min-w-0 space-y-0.5\">\n {title ? <p className=\"font-medium text-fg\">{title}</p> : null}\n {children ? <div className=\"text-muted\">{children}</div> : null}\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Outer table shell: near-black surface with generous rounding that holds the\n * header row and the inset inner panel. Surface contrast, not borders/shadows.\n */\nexport function TableContainer({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-(--table-radius-outer) bg-table-container p-(--table-inset)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Inset panel holding the table body (and its empty/loading/error states). */\nexport function TablePanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-(--table-radius-panel) border border-table-panel-border bg-table-panel\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function Table({ className, ...props }: HTMLAttributes<HTMLTableElement>) {\n return (\n <table\n className={cn(\"w-full table-fixed border-collapse caption-bottom text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport function TableHeader({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <thead className={className} {...props} />;\n}\n\nexport function TableBody({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <tbody className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\n\nexport function TableRow({ className, ...props }: HTMLAttributes<HTMLTableRowElement>) {\n return (\n <tr\n className={cn(\n \"border-b border-table-panel-border transition-colors last:border-0 hover:bg-table-row-hover data-[state=selected]:bg-table-row-selected\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableHead({ className, ...props }: ThHTMLAttributes<HTMLTableCellElement>) {\n return (\n <th\n className={cn(\n \"h-(--table-header-h) whitespace-nowrap px-(--table-pad-x) text-left align-middle text-[0.8125rem] font-medium text-table-header\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableCell({ className, ...props }: TdHTMLAttributes<HTMLTableCellElement>) {\n return (\n <td\n className={cn(\n \"px-(--table-pad-x) py-3 align-middle text-sm text-table-row data-numeric:font-numeric data-numeric:tabular-nums\",\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport { TableContainer, TablePanel } from \"./table\";\nimport { cn } from \"./utils\";\n\nexport type TableSurfaceTone = \"default\" | \"muted\" | \"transparent\";\n\nexport interface TableSurfaceAction {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"ghost\" | \"destructive\";\n onClick?: () => void;\n href?: string;\n disabled?: boolean;\n}\n\ninterface TableSurfaceProps {\n /** Title above the header row. */\n title?: ReactNode;\n /** Supporting text under the title. */\n description?: ReactNode;\n /** Header row content (a single row of column cells). */\n header?: ReactNode;\n /** Panel content: the body table, or an empty / loading / error state. */\n children: ReactNode;\n /** Optional action at the top-right of the header band. */\n action?: ReactNode | TableSurfaceAction;\n /** Surface preset; `className` / `headerClassName` / `panelClassName` win. */\n tone?: TableSurfaceTone;\n /** Outer shell overrides (background, radius, padding, …). */\n className?: string;\n /** Header band overrides (background, text color, …). */\n headerClassName?: string;\n /** Inner panel overrides (background, border color, …). */\n panelClassName?: string;\n /** Minimum panel height; keeps empty states from collapsing. */\n minHeight?: string;\n}\n\nconst SHELL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-container\",\n muted: \"bg-surface border border-line\",\n transparent: \"bg-transparent\",\n};\n\nconst PANEL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-panel border-table-panel-border\",\n muted: \"bg-elevated border-line\",\n transparent: \"bg-transparent border-line\",\n};\n\nfunction isActionConfig(\n action: ReactNode | TableSurfaceAction,\n): action is TableSurfaceAction {\n return (\n typeof action === \"object\" &&\n action !== null &&\n \"label\" in action &&\n typeof (action as TableSurfaceAction).label === \"string\"\n );\n}\n\n/**\n * Layered table surface: an outer shell holding a header band and an inset\n * inner panel. Header and panel share one horizontal scroller so their columns\n * stay aligned; the optional action stays pinned to the header's top-right.\n * Colors come from the `--table-*` tokens and can be adjusted per surface with\n * `tone` plus `headerClassName` / `panelClassName`.\n */\nexport function TableSurface({\n title,\n description,\n header,\n children,\n action,\n tone = \"default\",\n className,\n headerClassName,\n panelClassName,\n minHeight,\n}: TableSurfaceProps) {\n const hasTitle = Boolean(title || description);\n const actionNode = isActionConfig(action) ? (\n <Button\n variant={action.variant ?? \"primary\"}\n size=\"xs\"\n leadingIcon={action.href ? undefined : action.icon}\n onClick={action.onClick}\n disabled={action.disabled}\n asChild={Boolean(action.href)}\n >\n {action.href ? (\n <a href={action.href}>\n {action.icon}\n {action.label}\n </a>\n ) : (\n action.label\n )}\n </Button>\n ) : (\n action\n );\n\n return (\n <TableContainer className={cn(\"relative\", SHELL_TONE[tone], className)}>\n <div className=\"overflow-x-auto\">\n {header || hasTitle ? (\n // Header rows must not inherit the body row hover surface.\n <div className={cn(\"[--table-row-hover:transparent]\", headerClassName)}>\n {hasTitle ? (\n <div\n className={cn(\n \"px-(--table-pad-x) pb-3 pt-4\",\n actionNode && \"pr-28\",\n )}\n >\n {title ? (\n <div className=\"text-sm font-semibold text-fg\">{title}</div>\n ) : null}\n {description ? (\n <div className=\"mt-0.5 text-sm text-muted\">{description}</div>\n ) : null}\n </div>\n ) : null}\n {header}\n </div>\n ) : null}\n <TablePanel\n className={cn(PANEL_TONE[tone], panelClassName)}\n style={minHeight ? { minHeight } : undefined}\n >\n {children}\n </TablePanel>\n </div>\n {actionNode ? (\n <div className=\"pointer-events-none absolute right-4 top-(--table-inset) flex h-(--table-header-h) items-center\">\n <div className=\"pointer-events-auto\">{actionNode}</div>\n </div>\n ) : null}\n </TableContainer>\n );\n}\n","import {\n Children,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\nimport { cn } from \"./utils\";\n\nfunction splitCardChildren(children: ReactNode): {\n header: ReactNode;\n body: ReactNode;\n} {\n const nodes = Children.toArray(children);\n const headers = nodes.filter(\n (child) => isValidElement(child) && child.type === CardHeader,\n );\n return {\n header: headers.length > 0 ? <>{headers}</> : undefined,\n body: nodes.filter((child) => !headers.includes(child)),\n };\n}\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { header, body } = splitCardChildren(children);\n return (\n <div ref={ref} {...props}>\n <TableSurface className={cn(\"shadow-xs\", className)} header={header}>\n {body}\n </TableSurface>\n </div>\n );\n },\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-1 px-5 py-4\",\n className,\n )}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<\n HTMLHeadingElement,\n HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-sm font-semibold text-fg\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"mt-1 border-t border-card-divider pt-2 text-sm text-muted\",\n \"first:mt-0 first:border-t-0 first:pt-0\",\n className,\n )}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-5 py-4\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 border-t border-line px-5 py-3\",\n className,\n )}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"@phosphor-icons/react\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer size-4 shrink-0 rounded border border-line-strong bg-transparent transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus/40\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:border-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] [--button-inner:var(--button-primary-inner)]\">\n {props.checked === \"indeterminate\" ? (\n <Minus className=\"size-3\" weight=\"bold\" />\n ) : (\n <Check className=\"size-3\" weight=\"bold\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = \"Checkbox\";\n","export interface DialogOriginRect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nexport interface DialogFlight {\n dx: number;\n dy: number;\n sx: number;\n sy: number;\n}\n\nfunction usable(rect: DialogOriginRect): boolean {\n return rect.width > 0 && rect.height > 0;\n}\n\nfunction clampScale(value: number): number {\n return Math.min(1, Math.max(0.1, value));\n}\n\n/**\n * Computes the transform that places a centered dialog over its caller.\n * `dx`/`dy` are viewport deltas; `sx`/`sy` scale the dialog down to the caller.\n */\nexport function computeDialogFlight(\n origin: DialogOriginRect,\n target: DialogOriginRect,\n): DialogFlight | null {\n if (!usable(origin) || !usable(target)) return null;\n return {\n dx: origin.left + origin.width / 2 - (target.left + target.width / 2),\n dy: origin.top + origin.height / 2 - (target.top + target.height / 2),\n sx: clampScale(origin.width / target.width),\n sy: clampScale(origin.height / target.height),\n };\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"@phosphor-icons/react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\n\nimport { computeDialogFlight, type DialogOriginRect } from \"./dialog-motion\";\nimport { cn } from \"./utils\";\n\nconst SOURCE_SELECTOR =\n 'button, a, [role=\"button\"], [role=\"menuitem\"], [data-dialog-origin]';\n\nlet lastSource: { rect: DialogOriginRect; at: number } | null = null;\nlet trackerInstalled = false;\n\nfunction rectOf(element: Element): DialogOriginRect | null {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return null;\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction rememberSource(target: EventTarget | null) {\n if (!(target instanceof Element)) return;\n const element = target.closest(SOURCE_SELECTOR);\n if (!element) return;\n const rect = rectOf(element);\n if (rect) lastSource = { rect, at: Date.now() };\n}\n\nfunction installSourceTracker() {\n if (trackerInstalled || typeof document === \"undefined\") return;\n trackerInstalled = true;\n document.addEventListener(\n \"pointerdown\",\n (event) => rememberSource(event.target),\n true,\n );\n document.addEventListener(\n \"keydown\",\n (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n rememberSource(document.activeElement);\n },\n true,\n );\n}\n\nfunction resolveOrigin(content: HTMLElement): DialogOriginRect | null {\n if (lastSource && Date.now() - lastSource.at < 2000) {\n const rect = lastSource.rect;\n lastSource = null;\n return rect;\n }\n lastSource = null;\n\n const active = document.activeElement;\n if (\n active instanceof Element &&\n active !== content &&\n !content.contains(active) &&\n active.matches(SOURCE_SELECTOR)\n ) {\n return rectOf(active);\n }\n return null;\n}\n\nconst DIALOG_CLOSE_MS = 250;\nconst DialogClosingContext = createContext(false);\n\n/** Dialog root; owns the delayed close so the fly-out can finish. */\nexport function Dialog({\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(\n defaultOpen ?? false,\n );\n const [closing, setClosing] = useState(false);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const open = controlledOpen ?? uncontrolledOpen;\n const openRef = useRef(open);\n openRef.current = open;\n const controlled = controlledOpen !== undefined;\n\n useEffect(() => installSourceTracker(), []);\n\n useEffect(() => {\n if (controlledOpen) setClosing(false);\n }, [controlledOpen]);\n\n useEffect(\n () => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n },\n [],\n );\n\n const handleOpenChange = (next: boolean) => {\n if (next) {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n setClosing(false);\n if (!controlled) setUncontrolledOpen(true);\n onOpenChange?.(true);\n return;\n }\n if (!open || closing) return;\n\n const reduced =\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (reduced) {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n return;\n }\n\n setClosing(true);\n closeTimer.current = setTimeout(() => {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n requestAnimationFrame(() => {\n // Restore the overlay only when a controlled parent vetoed the close.\n if (openRef.current) setClosing(false);\n });\n }, DIALOG_CLOSE_MS);\n };\n\n return (\n <DialogClosingContext.Provider value={closing}>\n <DialogPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </DialogPrimitive.Root>\n </DialogClosingContext.Provider>\n );\n}\n\nexport const DialogTrigger = forwardRef<\n ElementRef<typeof DialogPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>\n>(({ onClick, ...props }, ref) => (\n <DialogPrimitive.Trigger\n ref={ref}\n onClick={(event) => {\n rememberSource(event.currentTarget);\n onClick?.(event);\n }}\n {...props}\n />\n));\nDialogTrigger.displayName = \"DialogTrigger\";\n\nexport const DialogClose = DialogPrimitive.Close;\n\nfunction startDialogMotion(content: HTMLDivElement, retry = true) {\n if (content.dataset.dialogMotionStarted === \"true\") return;\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n return;\n }\n\n const target = rectOf(content);\n if (!target) {\n if (retry) {\n window.requestAnimationFrame(() => startDialogMotion(content, false));\n }\n return;\n }\n\n content.dataset.dialogMotionStarted = \"true\";\n const origin = resolveOrigin(content);\n const flight = origin ? computeDialogFlight(origin, target) : null;\n if (flight) {\n content.style.setProperty(\"--dialog-dx\", `${flight.dx}px`);\n content.style.setProperty(\"--dialog-dy\", `${flight.dy}px`);\n content.style.setProperty(\"--dialog-sx\", String(flight.sx));\n content.style.setProperty(\"--dialog-sy\", String(flight.sy));\n content.classList.add(\"dialog-fly-in\");\n } else {\n content.classList.add(\"dialog-pop-in\");\n }\n\n const clear = () => {\n content.classList.remove(\"dialog-fly-in\", \"dialog-pop-in\");\n content.style.removeProperty(\"--dialog-dx\");\n content.style.removeProperty(\"--dialog-dy\");\n content.style.removeProperty(\"--dialog-sx\");\n content.style.removeProperty(\"--dialog-sy\");\n };\n const onEnd = (event: AnimationEvent) => {\n if (event.target !== content) return;\n if (\n event.animationName !== \"dialog-fly-in\" &&\n event.animationName !== \"dialog-pop-in\"\n ) {\n return;\n }\n content.removeEventListener(\"animationend\", onEnd);\n clear();\n };\n content.addEventListener(\"animationend\", onEnd);\n}\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const closing = useContext(DialogClosingContext);\n const contentRef = useRef<HTMLDivElement>(null);\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n contentRef.current = node;\n if (node) startDialogMotion(node);\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n if (ref) {\n (ref as { current: HTMLDivElement | null }).current = node;\n }\n },\n [ref],\n );\n\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 overflow-hidden bg-overlay data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n !closing &&\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n closing && \"opacity-0 transition-opacity duration-200\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"dialog-noise pointer-events-none absolute inset-0\"\n />\n </DialogPrimitive.Overlay>\n <div className=\"pointer-events-none fixed inset-0 z-50 flex items-center justify-center overflow-y-auto p-4\">\n <DialogPrimitive.Content\n ref={setRef}\n className={cn(\n \"dialog-content pointer-events-auto relative flex max-h-[min(85vh,44rem)] w-full max-w-[22.4rem] flex-col gap-0 overflow-hidden will-change-[transform,opacity]\",\n \"rounded-2xl border border-(--dialog-shell-border) bg-(--dialog-shell-bg) pb-3 shadow-(--dialog-shell-shadow) sm:pb-4\",\n closing && \"dialog-closing\",\n \"focus:outline-none\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3.5 top-3.5 z-10 rounded-sm text-subtle transition-colors hover:text-fg focus-visible:outline-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n );\n});\nDialogContent.displayName = \"DialogContent\";\n\n/**\n * Elevated inner card inside the dialog shell. Flush to the shell's left, top\n * and right edges (the shell clips its top corners); the footer stays below on\n * the shell so the two surfaces read as distinct layers.\n */\nexport function DialogPanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"panel\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col overflow-hidden rounded-b-2xl border-x-0 border-t-0 border-b border-(--dialog-panel-border) bg-(--dialog-panel-bg) shadow-(--dialog-panel-shadow)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Scrollable region inside `DialogPanel`; keeps the footer pinned. */\nexport function DialogBody({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"body\"\n className={cn(\"min-h-0 flex-1 overflow-y-auto px-5 py-4\", className)}\n {...props}\n />\n );\n}\n\nexport function DialogHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"header\"\n className={cn(\n \"flex shrink-0 flex-col gap-1.5 border-b border-(--dialog-panel-border) px-5 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"footer\"\n className={cn(\n \"flex shrink-0 flex-col-reverse gap-2 px-3 pt-3 sm:flex-row sm:justify-end sm:px-4 sm:pt-3.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-base font-semibold text-fg\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n","import {\n createContext,\n useContext,\n useId,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { Badge } from \"./badge\";\nimport { cn } from \"./utils\";\n\ninterface RadioGroupContextValue {\n name: string;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps\n extends Omit<HTMLAttributes<HTMLFieldSetElement>, \"onChange\"> {\n /** Accessible group name; also the shared `name` for the native radios. */\n label: string;\n /** Selected value (controlled). */\n value?: string;\n /** Called with the newly selected value. */\n onChange?: (value: string) => void;\n /** Disables every option in the group. */\n disabled?: boolean;\n /** Shared `name` for the native inputs; generated when omitted. */\n name?: string;\n}\n\n/**\n * Vertical group of `RadioCard` options. Built on native `<input type=\"radio\">`\n * inside a `<fieldset>`, so arrow-key navigation, labels and forms work without\n * a dependency. Controlled via `value` / `onChange`.\n */\nexport function RadioGroup({\n label,\n value,\n onChange,\n disabled = false,\n name,\n className,\n children,\n ...props\n}: RadioGroupProps) {\n const generated = useId();\n const groupName = name ?? generated;\n\n return (\n <RadioGroupContext.Provider value={{ name: groupName, value, onChange, disabled }}>\n <fieldset className={cn(\"flex flex-col gap-6\", className)} {...props}>\n <legend className=\"sr-only\">{label}</legend>\n {children}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioCardProps {\n /** Value reported when this option is selected. */\n value: string;\n /** Primary label. */\n title: ReactNode;\n /** Supporting copy shown under the title. */\n description?: ReactNode;\n /** Optional pill rendered next to the title (e.g. \"Easiest\"). */\n badge?: ReactNode;\n /** Disables just this option. */\n disabled?: boolean;\n className?: string;\n}\n\n/** A single selectable option: radio indicator, title, optional badge + copy. */\nexport function RadioCard({\n value,\n title,\n description,\n badge,\n disabled = false,\n className,\n}: RadioCardProps) {\n const ctx = useContext(RadioGroupContext);\n const describedById = useId();\n if (!ctx) {\n throw new Error(\"RadioCard must be rendered inside a RadioGroup\");\n }\n\n const isDisabled = disabled || ctx.disabled;\n const isChecked = ctx.value === value;\n\n return (\n <label\n className={cn(\n \"group relative flex items-start gap-3\",\n isDisabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => ctx.onChange?.(value)}\n aria-describedby={description ? describedById : undefined}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden\n className={cn(\n \"mt-[5px] grid size-3.5 shrink-0 place-items-center rounded-full border-2 border-transparent bg-line-strong transition-colors\",\n \"peer-checked:border-4 peer-checked:border-primary peer-checked:bg-primary-fg\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-focus/40 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-canvas\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-base font-semibold text-fg\">{title}</span>\n {badge ? <Badge variant=\"primary\">{badge}</Badge> : null}\n </span>\n {description ? (\n <span id={describedById} className=\"mt-1 block text-sm text-muted\">\n {description}\n </span>\n ) : null}\n </span>\n </label>\n );\n}\n","import { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogPanel,\n DialogTitle,\n DialogTrigger,\n} from \"./dialog\";\nimport { RadioCard, RadioGroup } from \"./radio-group\";\n\nexport interface ChoiceOption {\n value: string;\n title: ReactNode;\n description?: ReactNode;\n badge?: ReactNode;\n}\n\nexport interface ChoiceDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Optional element that opens the dialog. */\n trigger?: ReactNode;\n /** Dialog heading. */\n title: string;\n /** Selectable options, rendered as radio cards. */\n options: ChoiceOption[];\n /** Initially selected value (uncontrolled). */\n defaultValue?: string;\n /** Selected value (controlled). */\n value?: string;\n onValueChange?: (value: string) => void;\n /** Footer labels. */\n cancelLabel?: string;\n confirmLabel?: string;\n /** Called with the selected value when the confirm button is pressed. */\n onConfirm?: (value: string) => void;\n}\n\n/**\n * Dialog for picking one option from a small set, styled as the\n * \"Create production instance\" reference: divided header, radio cards, and a\n * footer with an equal-width secondary Cancel plus primary Continue.\n */\nexport function ChoiceDialog({\n open,\n onOpenChange,\n trigger,\n title,\n options,\n defaultValue,\n value,\n onValueChange,\n cancelLabel = \"Cancel\",\n confirmLabel = \"Continue\",\n onConfirm,\n}: ChoiceDialogProps) {\n const [internal, setInternal] = useState(defaultValue ?? options[0]?.value ?? \"\");\n const selected = value ?? internal;\n\n const select = (next: string) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent\n aria-describedby={undefined}\n className=\"max-w-[29.4rem] [&>button]:hidden\"\n >\n <DialogPanel>\n <DialogHeader>\n <DialogTitle className=\"text-xl\">{title}</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <RadioGroup label={title} value={selected} onChange={select}>\n {options.map((option) => (\n <RadioCard\n key={option.value}\n value={option.value}\n title={option.title}\n description={option.description}\n badge={option.badge}\n />\n ))}\n </RadioGroup>\n </DialogBody>\n </DialogPanel>\n <DialogFooter className=\"gap-3 pt-2.5\">\n <Button\n variant=\"secondary\"\n className=\"flex-1\"\n onClick={() => onOpenChange?.(false)}\n >\n {cancelLabel}\n </Button>\n <Button className=\"flex-1\" onClick={() => onConfirm?.(selected)}>\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { Check, Copy } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface CodeBlockProps {\n code: string;\n /** Short label shown in the header (e.g. a filename or request line). */\n label?: ReactNode;\n language?: string;\n className?: string;\n}\n\nexport function CodeBlock({ code, label, className }: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <TableSurface\n className={className}\n header={\n <div className=\"flex h-(--table-header-h) items-center px-(--table-pad-x) pr-28\">\n <span className=\"truncate text-[13px] font-medium text-table-header\">\n {label}\n </span>\n </div>\n }\n action={{\n label: copied ? \"Copied\" : \"Copy\",\n icon: copied ? (\n <Check className=\"text-success\" weight=\"bold\" />\n ) : (\n <Copy />\n ),\n variant: \"ghost\",\n onClick: copy,\n }}\n panelClassName=\"min-w-0\"\n >\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-fg\">\n <code>{code}</code>\n </pre>\n </TableSurface>\n );\n}\n","import { X } from \"@phosphor-icons/react\";\nimport { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype InputSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst HEIGHT: Record<InputSize, string> = {\n sm: \"h-[var(--control-h-sm)] text-sm\",\n md: \"h-[var(--control-h-md)] text-sm\",\n lg: \"h-[var(--control-h-lg)] text-sm\",\n xl: \"h-[var(--control-h-xl)] rounded-lg text-base\",\n};\n\nconst PAD_X: Record<InputSize, string> = {\n sm: \"px-[var(--control-pad-x-sm)]\",\n md: \"px-[var(--control-pad-x-md)]\",\n lg: \"px-[var(--control-pad-x-lg)]\",\n xl: \"px-[var(--control-pad-x-xl)]\",\n};\n\nconst LEAD_INSET: Record<InputSize, string> = {\n sm: \"left-[var(--control-pad-x-sm)]\",\n md: \"left-[var(--control-pad-x-md)]\",\n lg: \"left-[var(--control-pad-x-lg)]\",\n xl: \"left-[var(--control-pad-x-xl)]\",\n};\n\nconst TRAIL_INSET: Record<InputSize, string> = {\n sm: \"right-[var(--control-pad-x-sm)]\",\n md: \"right-[var(--control-pad-x-md)]\",\n lg: \"right-[var(--control-pad-x-lg)]\",\n xl: \"right-[var(--control-pad-x-xl)]\",\n};\n\nconst ICON: Record<InputSize, string> = {\n sm: \"size-[var(--control-icon-sm)]\",\n md: \"size-[var(--control-icon-md)]\",\n lg: \"size-[var(--control-icon-lg)]\",\n xl: \"size-[var(--control-icon-xl)]\",\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /** Control height preset. Defaults to `md`. */\n size?: InputSize;\n /** Optional icon rendered inside the field, before the text. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered inside the field, after the text. */\n trailingIcon?: ReactNode;\n /** Shows a real clear button when the field has a value. */\n onClear?: () => void;\n /** Error styling; also pairs with `helperText` for the message. */\n error?: boolean;\n /** Helper or error message shown below the field (wired to aria-describedby). */\n helperText?: string;\n /** Wrapper class when icons or a helper message render a container. */\n containerClassName?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n containerClassName,\n type = \"text\",\n size = \"md\",\n leadingIcon,\n trailingIcon,\n onClear,\n value,\n defaultValue,\n error = false,\n helperText,\n id,\n \"aria-describedby\": ariaDescribedBy,\n disabled,\n readOnly,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hasMessage = Boolean(helperText);\n const showClear = Boolean(onClear && (value !== undefined ? String(value).length > 0 : defaultValue !== undefined ? String(defaultValue).length > 0 : false));\n const messageId = hasMessage ? `${inputId}-description` : undefined;\n const describedBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n const field = (\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={error || undefined}\n aria-describedby={describedBy}\n style={\n leadingIcon || trailingIcon || showClear\n ? {\n paddingInlineStart: leadingIcon\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n paddingInlineEnd:\n trailingIcon || showClear\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n }\n : undefined\n }\n className={cn(\n \"flex w-full rounded-md border bg-(--input-bg) text-(--input-fg) transition-colors\",\n HEIGHT[size],\n PAD_X[size],\n \"placeholder:text-(--input-placeholder)\",\n \"hover:border-(--input-border-hover)\",\n \"focus-visible:outline-none focus-visible:border-(--input-border-focus) focus-visible:ring-2 focus-visible:ring-focus/30\",\n error &&\n \"border-error hover:border-error focus-visible:border-error focus-visible:ring-error/30\",\n !error && \"border-(--input-border)\",\n disabled &&\n \"cursor-not-allowed bg-(--input-bg-disabled) opacity-60 hover:border-(--input-border)\",\n readOnly && \"cursor-default focus-visible:ring-0\",\n className,\n )}\n value={value}\n defaultValue={defaultValue}\n {...props}\n />\n );\n\n // Bare input keeps the historical API when no compositional features are used.\n if (!leadingIcon && !trailingIcon && !showClear && !hasMessage) {\n return field;\n }\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n <div className=\"relative\">\n {leadingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n LEAD_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {leadingIcon}\n </span>\n </span>\n ) : null}\n {field}\n {showClear ? (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 flex items-center text-(--input-placeholder) transition-colors hover:text-(--input-fg)\",\n TRAIL_INSET[size],\n )}\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n <X />\n </span>\n </button>\n ) : trailingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n TRAIL_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {trailingIcon}\n </span>\n </span>\n ) : null}\n </div>\n {hasMessage ? (\n <p\n id={messageId}\n className={cn(\"mt-1.5 text-xs\", error ? \"text-error\" : \"text-muted\")}\n >\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\nInput.displayName = \"Input\";\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-[var(--button-secondary-bg)] p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-fg outline-none transition-colors\",\n \"focus:bg-[var(--menu-highlight)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"[&_svg]:size-4 [&_svg]:text-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"group relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none transition-colors focus:bg-[var(--menu-highlight)]\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 shrink-0 items-center justify-center rounded border border-line-strong bg-transparent transition-colors group-data-[state=checked]:border-primary\">\n <DropdownMenuPrimitive.ItemIndicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] [--button-inner:var(--button-primary-inner)]\">\n <Check className=\"size-3\" weight=\"bold\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-line\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CaretDown, Check } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<\n typeof SelectPrimitive.Trigger\n> {\n /** `field` fills a form; `inline` mimics the compact app dropdown. */\n variant?: \"field\" | \"inline\";\n}\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, children, variant = \"field\", ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-2 text-sm text-fg\",\n \"focus:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:truncate\",\n variant === \"field\" &&\n \"h-9 w-full rounded-md border border-line bg-surface px-3 focus:border-primary focus:ring-2 focus:ring-focus/30\",\n variant === \"inline\" &&\n \"btn-fill btn-inner-border btn-interactive h-8 w-auto rounded-(--control-radius) border-0 bg-(--button-secondary-bg) px-(--control-pad-x-sm) font-medium text-fg hover:bg-(--button-surface-hover) active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <CaretDown className=\"size-3.5 text-subtle\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(\n (\n { className, children, position = \"popper\", sideOffset = 8, ...props },\n ref,\n ) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"p-0\">\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n ),\n);\nSelectContent.displayName = \"SelectContent\";\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none focus:bg-(--menu-highlight) data-disabled:pointer-events-none data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\nexport const SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ninterface TableEmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\n/**\n * Centered, contextual empty state for a table panel: an 80px icon chip, a\n * large heading, supporting text, and an optional accent action.\n */\nexport function TableEmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: TableEmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex min-h-[22rem] flex-col items-center justify-center gap-5 px-6 py-16 text-center\",\n className,\n )}\n >\n {icon ? (\n <div className=\"flex size-[var(--table-empty-icon)] items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-table-muted [&_svg]:size-8\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-2\">\n <p className=\"text-[1.75rem] font-semibold leading-tight text-table-header-active\">\n {title}\n </p>\n {description ? (\n <p className=\"mx-auto max-w-md text-base leading-relaxed text-table-muted\">\n {description}\n </p>\n ) : null}\n </div>\n {action ? (\n <div className=\"text-sm font-medium text-table-accent\">{action}</div>\n ) : null}\n </div>\n );\n}\n","import {\n CaretDown,\n CaretUp,\n CaretUpDown,\n Columns as ColumnsIcon,\n FunnelSimple,\n Lock,\n MagnifyingGlass,\n WarningCircle,\n X,\n} from \"@phosphor-icons/react\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport { Button } from \"./button\";\nimport { Checkbox } from \"./checkbox\";\nimport { Input } from \"./input\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { TableBody, TableCell, TableRow } from \"./table\";\nimport { TableEmptyState } from \"./table-empty-state\";\nimport {\n TableSurface,\n type TableSurfaceAction,\n type TableSurfaceTone,\n} from \"./table-surface\";\nimport { cn } from \"./utils\";\n\nexport interface Column<T> {\n id: string;\n header: string;\n cell: (row: T) => ReactNode;\n sortable?: boolean;\n sortValue?: (row: T) => string | number | null | undefined;\n numeric?: boolean;\n defaultHidden?: boolean;\n align?: \"left\" | \"right\";\n className?: string;\n /** Column width for the fixed layout (e.g. \"18rem\", \"20%\"). Defaults to auto. */\n width?: string;\n /** Required columns stay visible and cannot be hidden. */\n required?: boolean;\n}\n\nexport interface DataTableFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DataTableFilter<T> {\n id: string;\n label: string;\n options: DataTableFilterOption[];\n value: string[];\n onChange: (value: string[]) => void;\n /** Return true when the row matches the selected filter values. */\n match: (row: T, values: string[]) => boolean;\n}\n\nexport interface BulkAction<T> {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"destructive\";\n onRun: (rows: T[]) => void | Promise<void>;\n disabled?: boolean;\n}\n\nexport interface TabDef {\n id: string;\n label: string;\n}\n\nexport interface DataTableError {\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\ninterface DataTableProps<T> {\n rows: T[];\n columns: Column<T>[];\n getRowId: (row: T) => string;\n\n loading?: boolean;\n error?: DataTableError | null;\n empty?: {\n icon?: ReactNode;\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n };\n\n search?: {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n keys: (row: T) => string;\n };\n filters?: DataTableFilter<T>[];\n toolbarStart?: ReactNode;\n toolbarEnd?: ReactNode;\n\n tabs?: TabDef[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n\n infoBanner?: ReactNode;\n\n selectable?: boolean;\n bulkActions?: BulkAction<T>[];\n\n rowActions?: (row: T) => ReactNode;\n onRowClick?: (row: T) => void;\n\n defaultSort?: { id: string; dir: \"asc\" | \"desc\" };\n pageSize?: number;\n pageSizeOptions?: number[];\n\n /** Surface preset for the table card. */\n tone?: TableSurfaceTone;\n /** Optional action pinned to the top-right of the header band. */\n headerAction?: ReactNode | TableSurfaceAction;\n /** Header band color/style overrides. */\n headerClassName?: string;\n /** Inner panel color/style overrides. */\n panelClassName?: string;\n\n className?: string;\n}\n\nconst HEADER_CELL =\n \"h-[var(--table-header-h)] whitespace-nowrap px-[var(--table-pad-x)] text-left align-middle text-[0.8125rem] font-medium\";\n\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .slice(0, 2)\n .map((p) => p[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n}\n\n/** Clerk-style identity cell: avatar + primary name + secondary line. */\nexport function DataTableIdentity({\n name,\n secondary,\n image,\n}: {\n name: string;\n secondary?: ReactNode;\n image?: string;\n}) {\n return (\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-8\">\n {image ? <AvatarImage src={image} alt=\"\" /> : null}\n <AvatarFallback>{initials(name)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-table-header-active\">{name}</div>\n {secondary ? <div className=\"truncate text-xs text-table-muted\">{secondary}</div> : null}\n </div>\n </div>\n );\n}\n\nexport function DataTable<T>({\n rows,\n columns,\n getRowId,\n loading = false,\n error,\n empty,\n search,\n filters,\n toolbarStart,\n toolbarEnd,\n tabs,\n activeTab,\n onTabChange,\n infoBanner,\n selectable = false,\n bulkActions,\n rowActions,\n onRowClick,\n defaultSort,\n pageSize: initialPageSize = 25,\n pageSizeOptions = [10, 25, 50, 100],\n tone,\n headerAction,\n headerClassName,\n panelClassName,\n className,\n}: DataTableProps<T>) {\n const [hidden, setHidden] = useState<Record<string, boolean>>(() =>\n Object.fromEntries(\n columns.filter((c) => c.defaultHidden && !c.required).map((c) => [c.id, true]),\n ),\n );\n const [sort, setSort] = useState<{ id: string; dir: \"asc\" | \"desc\" } | null>(\n defaultSort ?? null,\n );\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [activeFilterIds, setActiveFilterIds] = useState<string[]>([]);\n\n const visibleColumns = columns.filter((c) => !hidden[c.id]);\n const hiddenColumns = columns.filter((c) => hidden[c.id] && !c.required);\n const activeFilters = (filters ?? []).filter((f) => activeFilterIds.includes(f.id));\n const filterSignature = (filters ?? [])\n .map((f) => `${f.id}:${f.value.join(\",\")}`)\n .join(\"|\");\n\n const filtered = useMemo(() => {\n let next = rows;\n for (const filter of filters ?? []) {\n if (filter.value.length > 0) {\n next = next.filter((row) => filter.match(row, filter.value));\n }\n }\n if (!search || !search.value.trim()) return next;\n const q = search.value.trim().toLowerCase();\n return next.filter((r) => search.keys(r).toLowerCase().includes(q));\n }, [rows, search, filters]);\n\n const sorted = useMemo(() => {\n if (!sort) return filtered;\n const col = columns.find((c) => c.id === sort.id);\n if (!col?.sortValue) return filtered;\n const dir = sort.dir === \"asc\" ? 1 : -1;\n return [...filtered].sort((a, b) => {\n const av = col.sortValue!(a);\n const bv = col.sortValue!(b);\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (typeof av === \"number\" && typeof bv === \"number\") return (av - bv) * dir;\n return String(av).localeCompare(String(bv)) * dir;\n });\n }, [filtered, sort, columns]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n\n useEffect(() => {\n setPage(0);\n }, [search?.value, pageSize, sort?.id, sort?.dir, activeTab, filterSignature]);\n\n useEffect(() => {\n if (page > pageCount - 1) setPage(pageCount - 1);\n }, [page, pageCount]);\n\n const start = page * pageSize;\n const pageRows = sorted.slice(start, start + pageSize);\n\n const toggleSort = (col: Column<T>) => {\n if (!col.sortable) return;\n setSort((prev) =>\n prev?.id === col.id\n ? prev.dir === \"asc\"\n ? { id: col.id, dir: \"desc\" }\n : null\n : { id: col.id, dir: \"asc\" },\n );\n };\n\n const allSelected = pageRows.length > 0 && pageRows.every((r) => selected.has(getRowId(r)));\n const someSelected = pageRows.some((r) => selected.has(getRowId(r)));\n const selectedRows = rows.filter((r) => selected.has(getRowId(r)));\n\n const toggleAll = () => {\n setSelected((prev) => {\n const next = new Set(prev);\n if (allSelected) pageRows.forEach((r) => next.delete(getRowId(r)));\n else pageRows.forEach((r) => next.add(getRowId(r)));\n return next;\n });\n };\n\n const toggleOne = (id: string) => {\n setSelected((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const hasToolbar = Boolean(search || filters?.length || toolbarStart || toolbarEnd);\n\n // Fixed layout keeps header and body columns aligned across the two tables.\n // When no column declares a width, give the first column more room and split\n // the rest evenly so tables don't render as uniform stripes.\n const anyExplicitWidth = visibleColumns.some((c) => c.width);\n const restShare =\n visibleColumns.length > 1 ? (100 - 30) / (visibleColumns.length - 1) : 100;\n const dataWidths = visibleColumns.map((c, i) => {\n if (c.width) return c.width;\n if (anyExplicitWidth) return \"auto\";\n return `${i === 0 ? 30 : restShare}%`;\n });\n\n const colWidths = [\n ...(selectable ? [\"2.75rem\"] : []),\n ...dataWidths,\n ...(rowActions ? [\"11rem\"] : []),\n ];\n\n const ariaSort = (c: Column<T>) =>\n sort?.id === c.id ? (sort.dir === \"asc\" ? \"ascending\" : \"descending\") : undefined;\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {tabs && tabs.length > 0 && (\n <div className=\"flex items-center gap-1 border-b border-line\" role=\"tablist\">\n {tabs.map((t) => {\n const active = t.id === activeTab;\n return (\n <button\n key={t.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onTabChange?.(t.id)}\n className={cn(\n \"-mb-px border-b-2 px-3 py-2 text-sm transition-colors\",\n active\n ? \"border-fg font-medium text-fg\"\n : \"border-transparent text-muted hover:text-fg\",\n )}\n >\n {t.label}\n </button>\n );\n })}\n </div>\n )}\n\n {hasToolbar && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {search && (\n <Input\n type=\"search\"\n aria-label={search.placeholder ?? \"Search\"}\n placeholder={search.placeholder ?? \"Search...\"}\n value={search.value}\n onChange={(e) => search.onChange(e.target.value)}\n onClear={() => search.onChange(\"\")}\n leadingIcon={<MagnifyingGlass />}\n containerClassName=\"w-full sm:w-[280px]\"\n className=\"rounded-[6px] border-0 bg-surface shadow-xs ring-1 ring-line\"\n />\n )}\n {toolbarStart}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n leadingIcon={<ColumnsIcon />}\n trailingIcon={<CaretDown />}\n >\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-54\">\n <DropdownMenuLabel className=\"text-[13px]\">Active columns</DropdownMenuLabel>\n {visibleColumns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked\n disabled={c.required}\n onCheckedChange={() => setHidden((prev) => ({ ...prev, [c.id]: true }))}\n onSelect={(e) => e.preventDefault()}\n className=\"justify-between\"\n >\n <span>{c.header}</span>\n {c.required ? <Lock className=\"size-3.5 text-subtle\" aria-hidden /> : null}\n </DropdownMenuCheckboxItem>\n ))}\n {hiddenColumns.length > 0 ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-[13px]\">Available columns</DropdownMenuLabel>\n {hiddenColumns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked={false}\n onCheckedChange={() => setHidden((prev) => ({ ...prev, [c.id]: false }))}\n onSelect={(e) => e.preventDefault()}\n >\n {c.header}\n </DropdownMenuCheckboxItem>\n ))}\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n {filters && filters.length > 0 ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label=\"Add filter\"\n >\n <FunnelSimple />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-54\">\n {filters.map((filter) => (\n <DropdownMenuItem\n key={filter.id}\n onSelect={() =>\n setActiveFilterIds((prev) =>\n prev.includes(filter.id) ? prev : [...prev, filter.id],\n )\n }\n >\n {filter.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n {toolbarEnd ? <div className=\"flex-0 sm:ml-auto\">{toolbarEnd}</div> : null}\n </div>\n )}\n\n {activeFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeFilters.map((filter) => {\n const clear = () => {\n filter.onChange([]);\n setActiveFilterIds((prev) => prev.filter((id) => id !== filter.id));\n };\n\n return (\n <div key={filter.id} className=\"inline-flex items-center\">\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label={`Remove ${filter.label} filter`}\n className=\"rounded-r-none\"\n onClick={clear}\n >\n <X />\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"secondary\" size=\"md\" className=\"rounded-l-none pl-2\">\n <FunnelSimple />\n <span className=\"font-medium\">{filter.label}</span>\n <span className=\"h-4 w-px bg-line\" aria-hidden />\n <span className=\"text-muted\">\n {filter.value.length > 0\n ? `${filter.value.length} selected`\n : \"Enter value\"}\n </span>\n <CaretDown className=\"text-muted\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel className=\"text-[13px]\">\n Filter by {filter.label}\n </DropdownMenuLabel>\n {filter.options.map((option) => {\n const checked = filter.value.includes(option.value);\n return (\n <DropdownMenuCheckboxItem\n key={option.value}\n checked={checked}\n onCheckedChange={() =>\n filter.onChange(\n checked\n ? filter.value.filter((value) => value !== option.value)\n : [...filter.value, option.value],\n )\n }\n onSelect={(e) => e.preventDefault()}\n >\n {option.label}\n </DropdownMenuCheckboxItem>\n );\n })}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={clear}>Clear filter</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n })}\n <button\n type=\"button\"\n onClick={() => {\n for (const filter of activeFilters) filter.onChange([]);\n setActiveFilterIds([]);\n }}\n className=\"text-sm text-muted transition-colors hover:text-fg\"\n >\n Clear filters\n </button>\n </div>\n ) : null}\n\n {infoBanner}\n\n {selectable && selected.size > 0 && (\n <div className=\"flex flex-wrap items-center gap-3 rounded-lg border border-line bg-elevated px-3 py-2 text-sm\">\n <span className=\"font-medium text-fg\">{selected.size} selected</span>\n <div className=\"flex items-center gap-2\">\n {(bulkActions ?? []).map((a) => (\n <Button\n key={a.label}\n size=\"md\"\n variant={a.variant ?? \"outline\"}\n disabled={a.disabled}\n onClick={() => void a.onRun(selectedRows)}\n >\n {a.icon}\n {a.label}\n </Button>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => setSelected(new Set())}\n className=\"ml-auto inline-flex items-center gap-1 text-xs text-muted hover:text-fg\"\n >\n <X className=\"size-3.5\" />\n Clear\n </button>\n </div>\n )}\n\n <TableSurface\n action={headerAction}\n tone={tone}\n headerClassName={headerClassName}\n panelClassName={panelClassName}\n header={\n // Visible header: presentational so its controls stay focusable while\n // the body table carries the semantic column headers (sr-only).\n <table role=\"presentation\" className=\"w-full table-fixed border-collapse\">\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n <thead>\n <tr>\n {selectable && (\n <th className=\"h-(--table-header-h) w-11 px-4 align-middle\">\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected ? true : someSelected ? \"indeterminate\" : false}\n onCheckedChange={toggleAll}\n />\n </th>\n )}\n {visibleColumns.map((c) => (\n <th\n key={c.id}\n className={cn(HEADER_CELL, c.align === \"right\" && \"text-right\", c.className)}\n >\n {c.sortable ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Sort by ${c.header}`}\n onClick={() => toggleSort(c)}\n className={cn(\n \"h-auto gap-1.5 rounded-none px-0 py-0 text-[0.8125rem] text-table-header transition-colors [&_svg]:size-3.5\",\n \"hover:bg-transparent hover:text-table-header-active hover:shadow-none\",\n \"active:scale-100 active:bg-transparent active:shadow-none\",\n sort?.id === c.id && \"text-table-header-active\",\n )}\n >\n {c.header}\n {sort?.id === c.id ? (\n sort.dir === \"asc\" ? (\n <CaretUp className=\"size-3.5\" weight=\"bold\" />\n ) : (\n <CaretDown className=\"size-3.5\" weight=\"bold\" />\n )\n ) : (\n <CaretUpDown className=\"size-3.5 opacity-50\" />\n )}\n </Button>\n ) : (\n c.header\n )}\n </th>\n ))}\n {rowActions && (\n <th className=\"h-(--table-header-h) w-44 px-4 align-middle\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n </table>\n }\n >\n {loading ? (\n <div className=\"space-y-2 p-4\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-11 w-full animate-pulse rounded-lg bg-table-row-hover\" />\n ))}\n </div>\n ) : error ? (\n <div className=\"flex min-h-88 flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n <div className=\"flex size-(--table-empty-icon) items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-error [&_svg]:size-8\">\n <WarningCircle weight=\"duotone\" />\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-[1.75rem] font-semibold text-table-header-active\">\n {error.title}\n </p>\n {error.description ? (\n <p className=\"mx-auto max-w-md text-base leading-relaxed text-table-muted\">\n {error.description}\n </p>\n ) : null}\n </div>\n {error.action}\n </div>\n ) : pageRows.length === 0 ? (\n <TableEmptyState\n icon={empty?.icon}\n title={empty?.title ?? \"No results\"}\n description={typeof empty?.description === \"string\" ? empty.description : undefined}\n action={empty?.action}\n />\n ) : (\n <table className=\"w-full table-fixed border-collapse\">\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n {/* Semantic headers for assistive tech (visible header is presentational). */}\n <thead className=\"sr-only\">\n <tr>\n {selectable && <th scope=\"col\">Select</th>}\n {visibleColumns.map((c) => (\n <th key={c.id} scope=\"col\" aria-sort={ariaSort(c)}>\n {c.header}\n </th>\n ))}\n {rowActions && <th scope=\"col\">Actions</th>}\n </tr>\n </thead>\n <TableBody>\n {pageRows.map((row) => {\n const id = getRowId(row);\n const isSelected = selected.has(id);\n return (\n <TableRow\n key={id}\n data-state={isSelected ? \"selected\" : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"cursor-pointer\" : undefined}\n >\n {selectable && (\n <TableCell className=\"w-11 px-4\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected}\n onCheckedChange={() => toggleOne(id)}\n />\n </TableCell>\n )}\n {visibleColumns.map((c) => (\n <TableCell\n key={c.id}\n data-numeric={c.numeric ? \"\" : undefined}\n className={cn(c.align === \"right\" && \"text-right\", c.className)}\n >\n {c.cell(row)}\n </TableCell>\n ))}\n {rowActions && (\n <TableCell className=\"w-44 px-4 text-right\" onClick={(e) => e.stopPropagation()}>\n {rowActions(row)}\n </TableCell>\n )}\n </TableRow>\n );\n })}\n </TableBody>\n </table>\n )}\n </TableSurface>\n\n {!loading && !error && sorted.length > 0 && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 text-sm\">\n <span className=\"text-muted\">\n {start + 1}–{Math.min(start + pageSize, sorted.length)} of {sorted.length}\n </span>\n <div className=\"flex items-center gap-2\">\n <Select value={String(pageSize)} onValueChange={(v) => setPageSize(Number(v))}>\n <SelectTrigger aria-label=\"Rows per page\" className=\"w-27.5\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n} / page\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"outline\"\n size=\"md\"\n disabled={page <= 0}\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n >\n Previous\n </Button>\n <Button\n variant=\"outline\"\n size=\"md\"\n disabled={page >= pageCount - 1}\n onClick={() => setPage((p) => Math.min(pageCount - 1, p + 1))}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <TableSurface className={className}>\n <div className=\"flex flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n {icon ? (\n <div className=\"flex size-11 items-center justify-center rounded-xl border border-line bg-elevated text-subtle [&_svg]:size-6\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n {description ? (\n <p className=\"mx-auto max-w-sm text-sm text-muted\">{description}</p>\n ) : null}\n </div>\n {action}\n </div>\n </TableSurface>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/** Inline keyboard hint chip. */\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n \"inline-flex h-5 min-w-5 items-center justify-center rounded border border-line bg-elevated px-1.5 font-mono text-[11px] font-medium text-subtle\",\n className,\n )}\n {...props}\n />\n );\n}\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"mb-2.5 block text-sm font-medium text-fg leading-none last:mb-0 peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n","import { useId, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n}\n\ninterface SegmentedProps<T extends string> {\n value: T;\n onValueChange: (value: T) => void;\n options: SegmentedOption<T>[];\n size?: \"sm\" | \"md\";\n className?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Single-choice control for a small set of options, styled after the Clerk\n * dashboard: a recessed track with an elevated selected pill. Implemented as a\n * `radiogroup` of native radios, so arrow-key roving and forms work natively.\n */\nexport function Segmented<T extends string>({\n value,\n onValueChange,\n options,\n size = \"sm\",\n className,\n ...rest\n}: SegmentedProps<T>) {\n const name = useId();\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={rest[\"aria-label\"]}\n className={cn(\n \"inline-flex w-fit items-center rounded-lg border border-line bg-canvas\",\n size === \"sm\" ? \"h-(--control-h-sm)\" : \"h-(--control-h-md)\",\n className,\n )}\n >\n {options.map((option) => {\n const active = option.value === value;\n return (\n <label\n key={option.value}\n className={cn(\n \"inline-flex h-full cursor-pointer items-center justify-center gap-1.5 rounded-md text-sm font-medium transition-colors\",\n \"has-focus-visible:ring-2 has-focus-visible:ring-focus/40\",\n size === \"sm\"\n ? \"px-(--control-pad-x-sm) [&_svg]:size-(--control-icon-sm)\"\n : \"px-(--control-pad-x-md) [&_svg]:size-(--control-icon-md)\",\n active\n ? \"btn-fill bg-(--button-secondary-bg) text-fg\"\n : \"text-muted hover:text-fg\",\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={active}\n onChange={() => onValueChange(option.value)}\n className=\"sr-only\"\n />\n {option.icon}\n {option.label}\n </label>\n );\n })}\n </div>\n );\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-line\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-elevated\", className)}\n {...props}\n />\n );\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-line bg-elevated px-2 py-1 text-xs text-fg shadow-md\",\n \"data-[state=delayed-open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=delayed-open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=delayed-open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1\",\n \"data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = \"TooltipContent\";\n"],"names":["cn","inputs","twMerge","clsx","Spinner","className","jsx","CircleNotch","buttonVariants","cva","iconSize","Button","forwardRef","variant","size","asChild","leadingIcon","trailingIcon","iconOnly","loading","fullWidth","disabled","children","props","ref","Comp","Slot","icon","jsxs","Fragment","AgentPrompt","command","tag","copied","setCopied","useState","copy","Robot","Terminal","Check","Copy","Avatar","AvatarPrimitive","AvatarImage","AvatarFallback","badgeVariants","dotVariants","Badge","dot","variants","Info","CheckCircle","Warning","XCircle","Callout","title","DefaultIcon","tone","iconClassName","TableContainer","TablePanel","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","SHELL_TONE","PANEL_TONE","isActionConfig","action","TableSurface","description","header","headerClassName","panelClassName","minHeight","hasTitle","actionNode","splitCardChildren","nodes","Children","headers","child","isValidElement","CardHeader","Card","body","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","CheckboxPrimitive","Minus","usable","rect","clampScale","value","computeDialogFlight","origin","target","SOURCE_SELECTOR","lastSource","trackerInstalled","rectOf","element","rememberSource","installSourceTracker","event","resolveOrigin","content","active","DIALOG_CLOSE_MS","DialogClosingContext","createContext","Dialog","controlledOpen","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","closing","setClosing","closeTimer","useRef","open","openRef","controlled","useEffect","handleOpenChange","next","DialogPrimitive","DialogTrigger","onClick","DialogClose","startDialogMotion","retry","flight","clear","onEnd","DialogContent","useContext","contentRef","setRef","useCallback","node","X","DialogPanel","DialogBody","DialogHeader","DialogFooter","DialogTitle","DialogDescription","RadioGroupContext","RadioGroup","label","onChange","name","generated","useId","groupName","RadioCard","badge","ctx","describedById","isDisabled","isChecked","_a","ChoiceDialog","trigger","options","defaultValue","onValueChange","cancelLabel","confirmLabel","onConfirm","internal","setInternal","selected","option","CodeBlock","code","HEIGHT","PAD_X","LEAD_INSET","TRAIL_INSET","ICON","Input","containerClassName","type","onClear","error","helperText","id","ariaDescribedBy","readOnly","autoId","inputId","hasMessage","showClear","messageId","describedBy","field","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuContent","sideOffset","DropdownMenuItem","inset","DropdownMenuCheckboxItem","checked","DropdownMenuLabel","DropdownMenuSeparator","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","CaretDown","SelectContent","position","SelectItem","SelectLabel","TableEmptyState","HEADER_CELL","initials","p","DataTableIdentity","secondary","image","DataTable","rows","columns","getRowId","empty","search","filters","toolbarStart","toolbarEnd","tabs","activeTab","onTabChange","infoBanner","selectable","bulkActions","rowActions","onRowClick","defaultSort","initialPageSize","pageSizeOptions","headerAction","hidden","setHidden","c","sort","setSort","page","setPage","pageSize","setPageSize","setSelected","activeFilterIds","setActiveFilterIds","visibleColumns","hiddenColumns","activeFilters","f","filterSignature","filtered","useMemo","filter","row","q","r","sorted","col","dir","a","b","av","bv","pageCount","start","pageRows","toggleSort","prev","allSelected","someSelected","selectedRows","toggleAll","toggleOne","hasToolbar","anyExplicitWidth","restShare","dataWidths","i","colWidths","ariaSort","t","e","MagnifyingGlass","ColumnsIcon","Lock","FunnelSimple","w","CaretUp","CaretUpDown","WarningCircle","isSelected","v","n","EmptyState","Kbd","Label","LabelPrimitive","Segmented","rest","Separator","orientation","decorative","SeparatorPrimitive","Skeleton","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent"],"mappings":";;;;;;;;;;;;;;;AAIO,SAASA,KAAMC,GAA8B;AAClD,SAAOC,GAAQC,GAAKF,CAAM,CAAC;AAC7B;ACFO,SAASG,GAAQ,EAAE,WAAAC,KAAqC;AAC7D,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWP,EAAG,kCAAkCK,CAAS;AAAA,MACzD,QAAO;AAAA,MACP,eAAW;AAAA,IAAA;AAAA,EAAA;AAGjB;ACLA,MAAMG,KAAiBC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,WACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,QACF,aACE;AAAA,QACF,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAGMC,KAAmC;AAAA,EACvC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR,GAkBaC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,WAAAP;AAAA,IACA,SAAAQ;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,SAAAC,IAAU;AAAA,IACV,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAOV,IAAUW,KAAO,UACxBC,IAAOjB,GAASI,KAAQ,IAAI;AAElC,WACE,gBAAAR;AAAA,MAACmB;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,aAAWL,KAAW;AAAA,QACtB,UAAUJ,IAAU,SAAYM,KAAYF;AAAA,QAC5C,WAAWnB;AAAA,UACTQ,GAAe,EAAE,SAAAK,GAAS,MAAAC,GAAM;AAAA,UAChCI,KAAY;AAAA,UACZE,KAAa;AAAA,UACbf;AAAA,QAAA;AAAA,QAED,GAAGkB;AAAA,QAEH,UAAAR,IACCO,IAEA,gBAAAM,EAAAC,IAAA,EACG,UAAA;AAAA,UAAAV,IACC,gBAAAb,EAACF,MAAQ,WAAWJ,EAAG,gBAAgB2B,CAAI,GAAG,eAAW,GAAA,CAAC,IACxDX,IACF,gBAAAV,EAAC,QAAA,EAAK,WAAWN,EAAG,wBAAwB2B,CAAI,GAAG,eAAW,IAC3D,UAAAX,EAAA,CACH,IACE;AAAA,UACHM;AAAA,UACA,CAACH,KAAWF,IACX,gBAAAX,EAAC,QAAA,EAAK,WAAWN,EAAG,wBAAwB2B,CAAI,GAAG,eAAW,IAC3D,aACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAhB,EAAO,cAAc;ACxGd,SAASmB,GAAY;AAAA,EAC1B,SAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,MAAAL;AAAA,EACA,WAAAtB;AACF,GAAqB;AACnB,QAAM,CAAC4B,GAAQC,CAAS,IAAIC,EAAS,EAAK,GAEpCC,IAAO,YAAY;AACvB,QAAI;AACF,YAAM,UAAU,UAAU,UAAUL,CAAO,GAC3CG,EAAU,EAAI,GACd,OAAO,WAAW,MAAMA,EAAU,EAAK,GAAG,IAAI;AAAA,IAChD,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,2BACG,OAAA,EAAI,WAAWlC,EAAG,mCAAmCK,CAAS,GAC7D,UAAA;AAAA,IAAA,gBAAAuB,EAAC,QAAA,EAAK,WAAU,2IACb,UAAA;AAAA,MAAAD,KAAQ,gBAAArB,EAAC+B,IAAA,EAAM,WAAU,YAAW,QAAO,QAAO;AAAA,MAClDL;AAAA,IAAA,GACH;AAAA,IACA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,yGACb,UAAA;AAAA,MAAA,gBAAAtB,EAACgC,IAAA,EAAS,WAAU,+BAA8B,eAAW,IAAC;AAAA,MAC9D,gBAAAhC,EAAC,QAAA,EAAK,WAAU,sCAAsC,UAAAyB,GAAQ;AAAA,MAC9D,gBAAAzB;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAQ;AAAA,UACR,cAAW;AAAA,UACX,WAAU;AAAA,UACV,SAASyB;AAAA,UAER,UAAAH,sBAAUM,GAAA,EAAM,WAAU,gBAAe,QAAO,OAAA,CAAO,IAAK,gBAAAjC,EAACkC,IAAA,CAAA,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACrE,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;ACtDO,MAAMC,KAAS7B,EAGpB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACoC,GAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlB;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACDkB,GAAO,cAAc;AAEd,MAAME,KAAc/B,EAGzB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACoC,GAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlB;AAAA,IACA,WAAWxB,EAAG,wCAAwCK,CAAS;AAAA,IAC9D,GAAGkB;AAAA,EAAA;AACN,CACD;AACDoB,GAAY,cAAc;AAEnB,MAAMC,KAAiBhC,EAG5B,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACoC,GAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlB;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACDqB,GAAe,cAAc;ACxC7B,MAAMC,KAAgBpC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB,EAAE,SAAS,UAAA;AAAA,EAAU;AAE1C,GAEMqC,KAAcrC,GAAI,kCAAkC;AAAA,EACxD,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,iBAAiB,EAAE,SAAS,UAAA;AAC9B,CAAC;AAQM,SAASsC,GAAM,EAAE,WAAA1C,GAAW,SAAAQ,GAAS,KAAAmC,IAAM,IAAO,UAAA1B,GAAU,GAAGC,KAAqB;AACzF,SACE,gBAAAK,EAAC,QAAA,EAAK,WAAW5B,EAAG6C,GAAc,EAAE,SAAAhC,EAAA,CAAS,GAAGR,CAAS,GAAI,GAAGkB,GAC7D,UAAA;AAAA,IAAAyB,IAAM,gBAAA1C,EAAC,QAAA,EAAK,WAAWN,EAAG8C,GAAY,EAAE,SAAAjC,EAAA,CAAS,CAAC,GAAG,eAAW,GAAA,CAAC,IAAK;AAAA,IACtES;AAAA,EAAA,GACH;AAEJ;ACtCA,MAAM2B,KAGF;AAAA,EACF,MAAM;AAAA,IACJ,MAAMC;AAAA,IACN,WAAW;AAAA,IACX,eAAe;AAAA,EAAA;AAAA,EAEjB,SAAS;AAAA,IACP,MAAMC;AAAA,IACN,WAAW;AAAA,IACX,eAAe;AAAA,EAAA;AAAA,EAEjB,SAAS;AAAA,IACP,MAAMC;AAAA,IACN,WAAW;AAAA,IACX,eAAe;AAAA,EAAA;AAAA,EAEjB,OAAO;AAAA,IACL,MAAMC;AAAA,IACN,WAAW;AAAA,IACX,eAAe;AAAA,EAAA;AAEnB;AAUO,SAASC,GAAQ;AAAA,EACtB,SAAAzC,IAAU;AAAA,EACV,OAAA0C;AAAA,EACA,UAAAjC;AAAA,EACA,MAAAK;AAAA,EACA,WAAAtB;AACF,GAAiB;AACf,QAAM,EAAE,MAAMmD,GAAa,WAAWC,GAAM,eAAAC,EAAA,IAAkBT,GAASpC,CAAO;AAC9E,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAMf,MAAY,UAAU,UAAU;AAAA,MACtC,WAAWb;AAAA,QACT;AAAA,QACAyD;AAAA,QACApD;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWN,EAAG,kCAAkC0D,CAAa,GAChE,UAAA/B,KAAQ,gBAAArB,EAACkD,GAAA,EAAY,QAAO,OAAA,CAAO,GACtC;AAAA,QACA,gBAAA5B,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,UAAA2B,IAAQ,gBAAAjD,EAAC,KAAA,EAAE,WAAU,uBAAuB,aAAM,IAAO;AAAA,UACzDgB,IAAW,gBAAAhB,EAAC,OAAA,EAAI,WAAU,cAAc,UAAAgB,GAAS,IAAS;AAAA,QAAA,EAAA,CAC7D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACjEO,SAASqC,GAAe;AAAA,EAC7B,WAAAtD;AAAA,EACA,GAAGkB;AACL,GAAmC;AACjC,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAGO,SAASqC,GAAW;AAAA,EACzB,WAAAvD;AAAA,EACA,GAAGkB;AACL,GAAmC;AACjC,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,SAASsC,GAAM,EAAE,WAAAxD,GAAW,GAAGkB,KAA2C;AAC/E,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN,EAAG,6DAA6DK,CAAS;AAAA,MACnF,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,SAASuC,GAAY,EAAE,WAAAzD,GAAW,GAAGkB,KAAkD;AAC5F,SAAO,gBAAAjB,EAAC,SAAA,EAAM,WAAAD,GAAuB,GAAGkB,EAAA,CAAO;AACjD;AAEO,SAASwC,GAAU,EAAE,WAAA1D,GAAW,GAAGkB,KAAkD;AAC1F,SAAO,gBAAAjB,EAAC,WAAM,WAAWN,EAAG,8BAA8BK,CAAS,GAAI,GAAGkB,GAAO;AACnF;AAEO,SAASyC,GAAS,EAAE,WAAA3D,GAAW,GAAGkB,KAA8C;AACrF,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,SAAS0C,GAAU,EAAE,WAAA5D,GAAW,GAAGkB,KAAiD;AACzF,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,SAAS2C,GAAU,EAAE,WAAA7D,GAAW,GAAGkB,KAAiD;AACzF,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AClDA,MAAM4C,KAA+C;AAAA,EACnD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,aAAa;AACf,GAEMC,KAA+C;AAAA,EACnD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,aAAa;AACf;AAEA,SAASC,GACPC,GAC8B;AAC9B,SACE,OAAOA,KAAW,YAClBA,MAAW,QACX,WAAWA,KACX,OAAQA,EAA8B,SAAU;AAEpD;AASO,SAASC,GAAa;AAAA,EAC3B,OAAAhB;AAAA,EACA,aAAAiB;AAAA,EACA,QAAAC;AAAA,EACA,UAAAnD;AAAA,EACA,QAAAgD;AAAA,EACA,MAAAb,IAAO;AAAA,EACP,WAAApD;AAAA,EACA,iBAAAqE;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AACF,GAAsB;AACpB,QAAMC,IAAW,GAAQtB,KAASiB,IAC5BM,IAAaT,GAAeC,CAAM,IACtC,gBAAAhE;AAAA,IAACK;AAAA,IAAA;AAAA,MACC,SAAS2D,EAAO,WAAW;AAAA,MAC3B,MAAK;AAAA,MACL,aAAaA,EAAO,OAAO,SAAYA,EAAO;AAAA,MAC9C,SAASA,EAAO;AAAA,MAChB,UAAUA,EAAO;AAAA,MACjB,SAAS,EAAQA,EAAO;AAAA,MAEvB,YAAO,OACN,gBAAA1C,EAAC,KAAA,EAAE,MAAM0C,EAAO,MACb,UAAA;AAAA,QAAAA,EAAO;AAAA,QACPA,EAAO;AAAA,MAAA,EAAA,CACV,IAEAA,EAAO;AAAA,IAAA;AAAA,EAAA,IAIXA;AAGF,SACE,gBAAA1C,EAAC+B,MAAe,WAAW3D,EAAG,YAAYmE,GAAWV,CAAI,GAAGpD,CAAS,GACnE,UAAA;AAAA,IAAA,gBAAAuB,EAAC,OAAA,EAAI,WAAU,mBACZ,UAAA;AAAA,MAAA6C,KAAUI;AAAA;AAAA,0BAER,OAAA,EAAI,WAAW7E,EAAG,mCAAmC0E,CAAe,GAClE,UAAA;AAAA,UAAAG,IACC,gBAAAjD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW5B;AAAA,gBACT;AAAA,gBACA8E,KAAc;AAAA,cAAA;AAAA,cAGf,UAAA;AAAA,gBAAAvB,IACC,gBAAAjD,EAAC,OAAA,EAAI,WAAU,iCAAiC,aAAM,IACpD;AAAA,gBACHkE,IACC,gBAAAlE,EAAC,OAAA,EAAI,WAAU,6BAA6B,aAAY,IACtD;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,IAEJ;AAAA,UACHmE;AAAA,QAAA,EAAA,CACH;AAAA,UACE;AAAA,MACJ,gBAAAnE;AAAA,QAACsD;AAAA,QAAA;AAAA,UACC,WAAW5D,EAAGoE,GAAWX,CAAI,GAAGkB,CAAc;AAAA,UAC9C,OAAOC,IAAY,EAAE,WAAAA,EAAA,IAAc;AAAA,UAElC,UAAAtD;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF;AAAA,IACCwD,IACC,gBAAAxE,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uBAAuB,UAAAwE,EAAA,CAAW,EAAA,CACnD,IACE;AAAA,EAAA,GACN;AAEJ;ACpIA,SAASC,GAAkBzD,GAGzB;AACA,QAAM0D,IAAQC,GAAS,QAAQ3D,CAAQ,GACjC4D,IAAUF,EAAM;AAAA,IACpB,CAACG,MAAUC,GAAeD,CAAK,KAAKA,EAAM,SAASE;AAAA,EAAA;AAErD,SAAO;AAAA,IACL,QAAQH,EAAQ,SAAS,IAAI,gBAAA5E,EAAAuB,IAAA,EAAG,aAAQ,IAAM;AAAA,IAC9C,MAAMmD,EAAM,OAAO,CAACG,MAAU,CAACD,EAAQ,SAASC,CAAK,CAAC;AAAA,EAAA;AAE1D;AAEO,MAAMG,KAAO1E;AAAA,EAClB,CAAC,EAAE,WAAAP,GAAW,UAAAiB,GAAU,GAAGC,EAAA,GAASC,MAAQ;AAC1C,UAAM,EAAE,QAAAiD,GAAQ,MAAAc,MAASR,GAAkBzD,CAAQ;AACnD,WACE,gBAAAhB,EAAC,OAAA,EAAI,KAAAkB,GAAW,GAAGD,GACjB,UAAA,gBAAAjB,EAACiE,IAAA,EAAa,WAAWvE,EAAG,aAAaK,CAAS,GAAG,QAAAoE,GAClD,aACH,GACF;AAAA,EAEJ;AACF;AACAa,GAAK,cAAc;AAEZ,MAAMD,KAAazE,EAGxB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAkB;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACD8D,GAAW,cAAc;AAElB,MAAMG,KAAY5E,EAGvB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAkB;AAAA,IACA,WAAWxB,EAAG,iCAAiCK,CAAS;AAAA,IACvD,GAAGkB;AAAA,EAAA;AACN,CACD;AACDiE,GAAU,cAAc;AAEjB,MAAMC,KAAkB7E,EAG7B,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAkB;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACA;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACDkE,GAAgB,cAAc;AAEvB,MAAMC,KAAc9E,EAGzB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,KAASC,wBACzB,OAAA,EAAI,KAAAA,GAAU,WAAWxB,EAAG,aAAaK,CAAS,GAAI,GAAGkB,GAAO,CAClE;AACDmE,GAAY,cAAc;AAEnB,MAAMC,KAAa/E,EAGxB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAkB;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACDoE,GAAW,cAAc;ACjGlB,MAAMC,KAAWhF,EAGtB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACuF,GAAkB;AAAA,EAAlB;AAAA,IACC,KAAArE;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,IAEJ,UAAA,gBAAAjB,EAACuF,GAAkB,WAAlB,EAA4B,WAAU,0MACpC,UAAAtE,EAAM,YAAY,kBACjB,gBAAAjB,EAACwF,IAAA,EAAM,WAAU,UAAS,QAAO,QAAO,IAExC,gBAAAxF,EAACiC,KAAM,WAAU,UAAS,QAAO,OAAA,CAAO,EAAA,CAE5C;AAAA,EAAA;AACF,CACD;AACDqD,GAAS,cAAc;ACjBvB,SAASG,GAAOC,GAAiC;AAC/C,SAAOA,EAAK,QAAQ,KAAKA,EAAK,SAAS;AACzC;AAEA,SAASC,GAAWC,GAAuB;AACzC,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAKA,CAAK,CAAC;AACzC;AAMO,SAASC,GACdC,GACAC,GACqB;AACrB,SAAI,CAACN,GAAOK,CAAM,KAAK,CAACL,GAAOM,CAAM,IAAU,OACxC;AAAA,IACL,IAAID,EAAO,OAAOA,EAAO,QAAQ,KAAKC,EAAO,OAAOA,EAAO,QAAQ;AAAA,IACnE,IAAID,EAAO,MAAMA,EAAO,SAAS,KAAKC,EAAO,MAAMA,EAAO,SAAS;AAAA,IACnE,IAAIJ,GAAWG,EAAO,QAAQC,EAAO,KAAK;AAAA,IAC1C,IAAIJ,GAAWG,EAAO,SAASC,EAAO,MAAM;AAAA,EAAA;AAEhD;ACnBA,MAAMC,KACJ;AAEF,IAAIC,IAA4D,MAC5DC,KAAmB;AAEvB,SAASC,GAAOC,GAA2C;AACzD,QAAMV,IAAOU,EAAQ,sBAAA;AACrB,SAAIV,EAAK,SAAS,KAAKA,EAAK,UAAU,IAAU,OACzC;AAAA,IACL,MAAMA,EAAK;AAAA,IACX,KAAKA,EAAK;AAAA,IACV,OAAOA,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EAAA;AAEjB;AAEA,SAASW,GAAeN,GAA4B;AAClD,MAAI,EAAEA,aAAkB,SAAU;AAClC,QAAMK,IAAUL,EAAO,QAAQC,EAAe;AAC9C,MAAI,CAACI,EAAS;AACd,QAAMV,IAAOS,GAAOC,CAAO;AAC3B,EAAIV,MAAMO,IAAa,EAAE,MAAAP,GAAM,IAAI,KAAK,MAAI;AAC9C;AAEA,SAASY,KAAuB;AAC9B,EAAIJ,MAAoB,OAAO,WAAa,QAC5CA,KAAmB,IACnB,SAAS;AAAA,IACP;AAAA,IACA,CAACK,MAAUF,GAAeE,EAAM,MAAM;AAAA,IACtC;AAAA,EAAA,GAEF,SAAS;AAAA,IACP;AAAA,IACA,CAACA,MAAU;AACT,MAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,OAC3CF,GAAe,SAAS,aAAa;AAAA,IACvC;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,SAASG,GAAcC,GAA+C;AACpE,MAAIR,KAAc,KAAK,IAAA,IAAQA,EAAW,KAAK,KAAM;AACnD,UAAMP,IAAOO,EAAW;AACxB,WAAAA,IAAa,MACNP;AAAA,EACT;AACA,EAAAO,IAAa;AAEb,QAAMS,IAAS,SAAS;AACxB,SACEA,aAAkB,WAClBA,MAAWD,KACX,CAACA,EAAQ,SAASC,CAAM,KACxBA,EAAO,QAAQV,EAAe,IAEvBG,GAAOO,CAAM,IAEf;AACT;AAEA,MAAMC,KAAkB,KAClBC,KAAuBC,GAAc,EAAK;AAGzC,SAASC,GAAO;AAAA,EACrB,MAAMC;AAAA,EACN,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAjG;AAAA,EACA,GAAGC;AACL,GAA0D;AACxD,QAAM,CAACiG,GAAkBC,CAAmB,IAAItF;AAAA,IAC9CmF,KAAe;AAAA,EAAA,GAEX,CAACI,GAASC,CAAU,IAAIxF,EAAS,EAAK,GACtCyF,IAAaC,GAA6C,IAAI,GAC9DC,IAAOT,KAAkBG,GACzBO,IAAUF,GAAOC,CAAI;AAC3B,EAAAC,EAAQ,UAAUD;AAClB,QAAME,IAAaX,MAAmB;AAEtC,EAAAY,EAAU,MAAMrB,GAAA,GAAwB,EAAE,GAE1CqB,EAAU,MAAM;AACd,IAAIZ,OAA2B,EAAK;AAAA,EACtC,GAAG,CAACA,CAAc,CAAC,GAEnBY;AAAA,IACE,MAAM,MAAM;AACV,MAAIL,EAAW,WAAS,aAAaA,EAAW,OAAO;AAAA,IACzD;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,QAAMM,IAAmB,CAACC,MAAkB;AAC1C,QAAIA,GAAM;AACR,MAAIP,EAAW,WAAS,aAAaA,EAAW,OAAO,GACvDD,EAAW,EAAK,GACXK,KAAYP,EAAoB,EAAI,GACzCF,KAAA,QAAAA,EAAe;AACf;AAAA,IACF;AACA,QAAI,CAACO,KAAQJ,EAAS;AAMtB,QAHE,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe,cAC7B,OAAO,WAAW,kCAAkC,EAAE,SAC3C;AACX,MAAKM,KAAYP,EAAoB,EAAK,GAC1CF,KAAA,QAAAA,EAAe;AACf;AAAA,IACF;AAEA,IAAAI,EAAW,EAAI,GACfC,EAAW,UAAU,WAAW,MAAM;AACpC,MAAKI,KAAYP,EAAoB,EAAK,GAC1CF,KAAA,QAAAA,EAAe,KACf,sBAAsB,MAAM;AAE1B,QAAIQ,EAAQ,WAASJ,EAAW,EAAK;AAAA,MACvC,CAAC;AAAA,IACH,GAAGV,EAAe;AAAA,EACpB;AAEA,SACE,gBAAA3G,EAAC4G,GAAqB,UAArB,EAA8B,OAAOQ,GACpC,UAAA,gBAAApH;AAAA,IAAC8H,EAAgB;AAAA,IAAhB;AAAA,MACC,MAAAN;AAAA,MACA,cAAcI;AAAA,MACb,GAAG3G;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEO,MAAM+G,KAAgBzH,EAG3B,CAAC,EAAE,SAAA0H,GAAS,GAAG/G,EAAA,GAASC,MACxB,gBAAAlB;AAAA,EAAC8H,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAA5G;AAAA,IACA,SAAS,CAACqF,MAAU;AAClB,MAAAF,GAAeE,EAAM,aAAa,GAClCyB,KAAA,QAAAA,EAAUzB;AAAA,IACZ;AAAA,IACC,GAAGtF;AAAA,EAAA;AACN,CACD;AACD8G,GAAc,cAAc;AAErB,MAAME,KAAcH,EAAgB;AAE3C,SAASI,GAAkBzB,GAAyB0B,IAAQ,IAAM;AAEhE,MADI1B,EAAQ,QAAQ,wBAAwB,UAE1C,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe,cAC7B,OAAO,WAAW,kCAAkC,EAAE;AAEtD;AAGF,QAAMV,IAASI,GAAOM,CAAO;AAC7B,MAAI,CAACV,GAAQ;AACX,IAAIoC,KACF,OAAO,sBAAsB,MAAMD,GAAkBzB,GAAS,EAAK,CAAC;AAEtE;AAAA,EACF;AAEA,EAAAA,EAAQ,QAAQ,sBAAsB;AACtC,QAAMX,IAASU,GAAcC,CAAO,GAC9B2B,IAAStC,IAASD,GAAoBC,GAAQC,CAAM,IAAI;AAC9D,EAAIqC,KACF3B,EAAQ,MAAM,YAAY,eAAe,GAAG2B,EAAO,EAAE,IAAI,GACzD3B,EAAQ,MAAM,YAAY,eAAe,GAAG2B,EAAO,EAAE,IAAI,GACzD3B,EAAQ,MAAM,YAAY,eAAe,OAAO2B,EAAO,EAAE,CAAC,GAC1D3B,EAAQ,MAAM,YAAY,eAAe,OAAO2B,EAAO,EAAE,CAAC,GAC1D3B,EAAQ,UAAU,IAAI,eAAe,KAErCA,EAAQ,UAAU,IAAI,eAAe;AAGvC,QAAM4B,IAAQ,MAAM;AAClB,IAAA5B,EAAQ,UAAU,OAAO,iBAAiB,eAAe,GACzDA,EAAQ,MAAM,eAAe,aAAa,GAC1CA,EAAQ,MAAM,eAAe,aAAa,GAC1CA,EAAQ,MAAM,eAAe,aAAa,GAC1CA,EAAQ,MAAM,eAAe,aAAa;AAAA,EAC5C,GACM6B,IAAQ,CAAC/B,MAA0B;AACvC,IAAIA,EAAM,WAAWE,MAEnBF,EAAM,kBAAkB,mBACxBA,EAAM,kBAAkB,oBAI1BE,EAAQ,oBAAoB,gBAAgB6B,CAAK,GACjDD,EAAA;AAAA,EACF;AACA,EAAA5B,EAAQ,iBAAiB,gBAAgB6B,CAAK;AAChD;AAEO,MAAMC,KAAgBjI,EAG3B,CAAC,EAAE,WAAAP,GAAW,UAAAiB,GAAU,GAAGC,EAAA,GAASC,MAAQ;AAC5C,QAAMkG,IAAUoB,GAAW5B,EAAoB,GACzC6B,IAAalB,GAAuB,IAAI,GACxCmB,IAASC;AAAA,IACb,CAACC,MAAgC;AAG/B,UAFAH,EAAW,UAAUG,GACjBA,QAAwBA,CAAI,GAC5B,OAAO1H,KAAQ,YAAY;AAC7B,QAAAA,EAAI0H,CAAI;AACR;AAAA,MACF;AACA,MAAI1H,MACDA,EAA2C,UAAU0H;AAAA,IAE1D;AAAA,IACA,CAAC1H,CAAG;AAAA,EAAA;AAGN,SACE,gBAAAI,EAACwG,EAAgB,QAAhB,EACC,UAAA;AAAA,IAAA,gBAAA9H;AAAA,MAAC8H,EAAgB;AAAA,MAAhB;AAAA,QACC,WAAWpI;AAAA,UACT;AAAA,UACA,CAAC0H,KACC;AAAA,UACFA,KAAW;AAAA,QAAA;AAAA,QAGb,UAAA,gBAAApH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,IAEF,gBAAAA,EAAC,OAAA,EAAI,WAAU,+FACb,UAAA,gBAAAsB;AAAA,MAACwG,EAAgB;AAAA,MAAhB;AAAA,QACC,KAAKY;AAAA,QACL,WAAWhJ;AAAA,UACT;AAAA,UACA;AAAA,UACA0H,KAAW;AAAA,UACX;AAAA,UACArH;AAAA,QAAA;AAAA,QAED,GAAGkB;AAAA,QAEH,UAAA;AAAA,UAAAD;AAAA,UACD,gBAAAM,EAACwG,EAAgB,OAAhB,EAAsB,WAAU,qHAC/B,UAAA;AAAA,YAAA,gBAAA9H,EAAC6I,IAAA,EAAE,WAAU,SAAA,CAAS;AAAA,YACtB,gBAAA7I,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,UAAA,EAAA,CACjC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ,CAAC;AACDuI,GAAc,cAAc;AAOrB,SAASO,GAAY;AAAA,EAC1B,WAAA/I;AAAA,EACA,GAAGkB;AACL,GAAmC;AACjC,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAGO,SAAS8H,GAAW;AAAA,EACzB,WAAAhJ;AAAA,EACA,GAAGkB;AACL,GAAmC;AACjC,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWN,EAAG,4CAA4CK,CAAS;AAAA,MAClE,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,SAAS+H,GAAa;AAAA,EAC3B,WAAAjJ;AAAA,EACA,GAAGkB;AACL,GAAmC;AACjC,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,SAASgI,GAAa;AAAA,EAC3B,WAAAlJ;AAAA,EACA,GAAGkB;AACL,GAAmC;AACjC,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,MAAMiI,KAAc5I,EAGzB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAAC8H,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAA5G;AAAA,IACA,WAAWxB,EAAG,mCAAmCK,CAAS;AAAA,IACzD,GAAGkB;AAAA,EAAA;AACN,CACD;AACDiI,GAAY,cAAc;AAEnB,MAAMC,KAAoB7I,EAG/B,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAAC8H,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAA5G;AAAA,IACA,WAAWxB,EAAG,sBAAsBK,CAAS;AAAA,IAC5C,GAAGkB;AAAA,EAAA;AACN,CACD;AACDkI,GAAkB,cAAc;ACvWhC,MAAMC,KAAoBvC,GAA6C,IAAI;AAqBpE,SAASwC,GAAW;AAAA,EACzB,OAAAC;AAAA,EACA,OAAA1D;AAAA,EACA,UAAA2D;AAAA,EACA,UAAAxI,IAAW;AAAA,EACX,MAAAyI;AAAA,EACA,WAAAzJ;AAAA,EACA,UAAAiB;AAAA,EACA,GAAGC;AACL,GAAoB;AAClB,QAAMwI,IAAYC,GAAA,GACZC,IAAYH,KAAQC;AAE1B,SACE,gBAAAzJ,EAACoJ,GAAkB,UAAlB,EAA2B,OAAO,EAAE,MAAMO,GAAW,OAAA/D,GAAO,UAAA2D,GAAU,UAAAxI,KACrE,UAAA,gBAAAO,EAAC,cAAS,WAAW5B,EAAG,uBAAuBK,CAAS,GAAI,GAAGkB,GAC7D,UAAA;AAAA,IAAA,gBAAAjB,EAAC,UAAA,EAAO,WAAU,WAAW,UAAAsJ,GAAM;AAAA,IAClCtI;AAAA,EAAA,EAAA,CACH,EAAA,CACF;AAEJ;AAiBO,SAAS4I,GAAU;AAAA,EACxB,OAAAhE;AAAA,EACA,OAAA3C;AAAA,EACA,aAAAiB;AAAA,EACA,OAAA2F;AAAA,EACA,UAAA9I,IAAW;AAAA,EACX,WAAAhB;AACF,GAAmB;AACjB,QAAM+J,IAAMtB,GAAWY,EAAiB,GAClCW,IAAgBL,GAAA;AACtB,MAAI,CAACI;AACH,UAAM,IAAI,MAAM,gDAAgD;AAGlE,QAAME,IAAajJ,KAAY+I,EAAI,UAC7BG,IAAYH,EAAI,UAAUlE;AAEhC,SACE,gBAAAtE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW5B;AAAA,QACT;AAAA,QACAsK,IAAa,kCAAkC;AAAA,QAC/CjK;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAM8J,EAAI;AAAA,YACV,OAAAlE;AAAA,YACA,SAASqE;AAAA,YACT,UAAUD;AAAA,YACV,UAAU,MAAA;;AAAM,sBAAAE,IAAAJ,EAAI,aAAJ,gBAAAI,EAAA,KAAAJ,GAAelE;AAAA;AAAA,YAC/B,oBAAkB1B,IAAc6F,IAAgB;AAAA,YAChD,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ,gBAAA/J;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAWN;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAEF,gBAAA4B,EAAC,QAAA,EAAK,WAAU,kBACd,UAAA;AAAA,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,qCACd,UAAA;AAAA,YAAA,gBAAAtB,EAAC,QAAA,EAAK,WAAU,mCAAmC,UAAAiD,GAAM;AAAA,YACxD4G,IAAQ,gBAAA7J,EAACyC,IAAA,EAAM,SAAQ,WAAW,aAAM,IAAW;AAAA,UAAA,GACtD;AAAA,UACCyB,sBACE,QAAA,EAAK,IAAI6F,GAAe,WAAU,iCAChC,aACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACrFO,SAASI,GAAa;AAAA,EAC3B,MAAA3C;AAAA,EACA,cAAAP;AAAA,EACA,SAAAmD;AAAA,EACA,OAAAnH;AAAA,EACA,SAAAoH;AAAA,EACA,cAAAC;AAAA,EACA,OAAA1E;AAAA,EACA,eAAA2E;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,cAAAC,IAAe;AAAA,EACf,WAAAC;AACF,GAAsB;;AACpB,QAAM,CAACC,GAAUC,CAAW,IAAI/I,EAASyI,OAAgBJ,IAAAG,EAAQ,CAAC,MAAT,gBAAAH,EAAY,UAAS,EAAE,GAC1EW,IAAWjF,KAAS+E;AAO1B,SACE,gBAAArJ,EAACwF,IAAA,EAAO,MAAAU,GAAY,cAAAP,GACjB,UAAA;AAAA,IAAAmD,IAAU,gBAAApK,EAAC+H,IAAA,EAAc,SAAO,IAAE,aAAQ,IAAmB;AAAA,IAC9D,gBAAAzG;AAAA,MAACiH;AAAA,MAAA;AAAA,QACC,oBAAkB;AAAA,QAClB,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAjH,EAACwH,IAAA,EACC,UAAA;AAAA,YAAA,gBAAA9I,EAACgJ,MACC,UAAA,gBAAAhJ,EAACkJ,IAAA,EAAY,WAAU,WAAW,aAAM,EAAA,CAC1C;AAAA,YACA,gBAAAlJ,EAAC+I,IAAA,EACC,UAAA,gBAAA/I,EAACqJ,IAAA,EAAW,OAAOpG,GAAO,OAAO4H,GAAU,UAjBtC,CAAChD,MAAiB;AAC/B,cAAIjC,MAAU,UAAWgF,EAAY/C,CAAI,GACzC0C,KAAA,QAAAA,EAAgB1C;AAAA,YAClB,GAea,UAAAwC,EAAQ,IAAI,CAACS,MACZ,gBAAA9K;AAAA,cAAC4J;AAAA,cAAA;AAAA,gBAEC,OAAOkB,EAAO;AAAA,gBACd,OAAOA,EAAO;AAAA,gBACd,aAAaA,EAAO;AAAA,gBACpB,OAAOA,EAAO;AAAA,cAAA;AAAA,cAJTA,EAAO;AAAA,YAAA,CAMf,GACH,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UACA,gBAAAxJ,EAAC2H,IAAA,EAAa,WAAU,gBACtB,UAAA;AAAA,YAAA,gBAAAjJ;AAAA,cAACK;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACV,SAAS,MAAM4G,KAAA,gBAAAA,EAAe;AAAA,gBAE7B,UAAAuD;AAAA,cAAA;AAAA,YAAA;AAAA,YAEH,gBAAAxK,EAACK,KAAO,WAAU,UAAS,SAAS,MAAMqK,KAAA,gBAAAA,EAAYG,IACnD,UAAAJ,EAAA,CACH;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AChGO,SAASM,GAAU,EAAE,MAAAC,GAAM,OAAA1B,GAAO,WAAAvJ,KAA6B;AACpE,QAAM,CAAC4B,GAAQC,CAAS,IAAIC,EAAS,EAAK;AAY1C,SACE,gBAAA7B;AAAA,IAACiE;AAAA,IAAA;AAAA,MACC,WAAAlE;AAAA,MACA,QACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,mEACb,4BAAC,QAAA,EAAK,WAAU,sDACb,UAAAsJ,EAAA,CACH,EAAA,CACF;AAAA,MAEF,QAAQ;AAAA,QACN,OAAO3H,IAAS,WAAW;AAAA,QAC3B,MAAMA,IACJ,gBAAA3B,EAACiC,GAAA,EAAM,WAAU,gBAAe,QAAO,OAAA,CAAO,IAE9C,gBAAAjC,EAACkC,IAAA,CAAA,CAAK;AAAA,QAER,SAAS;AAAA,QACT,SA5BO,YAAY;AACvB,cAAI;AACF,kBAAM,UAAU,UAAU,UAAU8I,CAAI,GACxCpJ,EAAU,EAAI,GACd,OAAO,WAAW,MAAMA,EAAU,EAAK,GAAG,IAAI;AAAA,UAChD,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MAoBe;AAAA,MAEX,gBAAe;AAAA,MAEf,4BAAC,OAAA,EAAI,WAAU,iEACb,UAAA,gBAAA5B,EAAC,QAAA,EAAM,aAAK,EAAA,CACd;AAAA,IAAA;AAAA,EAAA;AAGN;AC9CA,MAAMiL,KAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAAmC;AAAA,EACvC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAAyC;AAAA,EAC7C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAAkC;AAAA,EACtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAoBaC,KAAQhL;AAAA,EACnB,CACE;AAAA,IACE,WAAAP;AAAA,IACA,oBAAAwL;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,MAAAhL,IAAO;AAAA,IACP,aAAAE;AAAA,IACA,cAAAC;AAAA,IACA,SAAA8K;AAAA,IACA,OAAA7F;AAAA,IACA,cAAA0E;AAAA,IACA,OAAAoB,IAAQ;AAAA,IACR,YAAAC;AAAA,IACA,IAAAC;AAAA,IACA,oBAAoBC;AAAA,IACpB,UAAA9K;AAAA,IACA,UAAA+K;AAAA,IACA,GAAG7K;AAAA,EAAA,GAELC,MACG;AACH,UAAM6K,IAASrC,GAAA,GACTsC,IAAUJ,KAAMG,GAChBE,IAAa,EAAQN,GACrBO,IAAY,GAAQT,MAAY7F,MAAU,SAAY,OAAOA,CAAK,EAAE,SAAS,IAAI0E,MAAiB,UAAY,OAAOA,CAAY,EAAE,SAAS,KAC5I6B,IAAYF,IAAa,GAAGD,CAAO,iBAAiB,QACpDI,KAAc,CAACP,GAAiBM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,QAExEE,IACJ,gBAAArM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAkB;AAAA,QACA,IAAI8K;AAAA,QACJ,MAAAR;AAAA,QACA,UAAAzK;AAAA,QACA,UAAA+K;AAAA,QACA,gBAAcJ,KAAS;AAAA,QACvB,oBAAkBU;AAAA,QAClB,OACE1L,KAAeC,KAAgBuL,IAC3B;AAAA,UACE,oBAAoBxL,IAChB,4BAA4BF,CAAI,0BAA0BA,CAAI,4BAC9D;AAAA,UACJ,kBACEG,KAAgBuL,IACZ,4BAA4B1L,CAAI,0BAA0BA,CAAI,4BAC9D;AAAA,QAAA,IAER;AAAA,QAEN,WAAWd;AAAA,UACT;AAAA,UACAuL,GAAOzK,CAAI;AAAA,UACX0K,GAAM1K,CAAI;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACAkL,KACE;AAAA,UACF,CAACA,KAAS;AAAA,UACV3K,KACE;AAAA,UACF+K,KAAY;AAAA,UACZ/L;AAAA,QAAA;AAAA,QAEF,OAAA6F;AAAA,QACA,cAAA0E;AAAA,QACC,GAAGrJ;AAAA,MAAA;AAAA,IAAA;AAKR,WAAI,CAACP,KAAe,CAACC,KAAgB,CAACuL,KAAa,CAACD,IAC3CI,sBAIN,OAAA,EAAI,WAAW3M,EAAG,UAAU6L,CAAkB,GAC7C,UAAA;AAAA,MAAA,gBAAAjK,EAAC,OAAA,EAAI,WAAU,YACZ,UAAA;AAAA,QAAAZ,IACC,gBAAAV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWN;AAAA,cACT;AAAA,cACAyL,GAAW3K,CAAI;AAAA,YAAA;AAAA,YAEjB,eAAW;AAAA,YAEX,UAAA,gBAAAR,EAAC,UAAK,WAAWN,EAAG,2CAA2C2L,GAAK7K,CAAI,CAAC,GACtE,UAAAE,EAAA,CACH;AAAA,UAAA;AAAA,QAAA,IAEA;AAAA,QACH2L;AAAA,QACAH,IACC,gBAAAlM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAASyL;AAAA,YACT,WAAW/L;AAAA,cACT;AAAA,cACA0L,GAAY5K,CAAI;AAAA,YAAA;AAAA,YAGlB,UAAA,gBAAAR,EAAC,QAAA,EAAK,WAAWN,EAAG,2CAA2C2L,GAAK7K,CAAI,CAAC,GACvE,UAAA,gBAAAR,EAAC6I,IAAA,CAAA,CAAE,EAAA,CACL;AAAA,UAAA;AAAA,QAAA,IAEAlI,IACF,gBAAAX;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWN;AAAA,cACT;AAAA,cACA0L,GAAY5K,CAAI;AAAA,YAAA;AAAA,YAElB,eAAW;AAAA,YAEX,UAAA,gBAAAR,EAAC,UAAK,WAAWN,EAAG,2CAA2C2L,GAAK7K,CAAI,CAAC,GACtE,UAAAG,EAAA,CACH;AAAA,UAAA;AAAA,QAAA,IAEA;AAAA,MAAA,GACN;AAAA,MACCsL,IACC,gBAAAjM;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAImM;AAAA,UACJ,WAAWzM,EAAG,kBAAkBgM,IAAQ,eAAe,YAAY;AAAA,UAElE,UAAAC;AAAA,QAAA;AAAA,MAAA,IAED;AAAA,IAAA,GACN;AAAA,EAEJ;AACF;AACAL,GAAM,cAAc;ACxLb,MAAMgB,KAAeC,EAAsB,MACrCC,KAAsBD,EAAsB,SAC5CE,KAAoBF,EAAsB,OAC1CG,KAAqBH,EAAsB,QAE3CI,KAAsBrM,EAGjC,CAAC,EAAE,WAAAP,GAAW,YAAA6M,IAAa,GAAG,GAAG3L,EAAA,GAASC,MAC1C,gBAAAlB,EAACuM,EAAsB,QAAtB,EACC,UAAA,gBAAAvM;AAAA,EAACuM,EAAsB;AAAA,EAAtB;AAAA,IACC,KAAArL;AAAA,IACA,YAAA0L;AAAA,IACA,WAAWlN;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,GACF,CACD;AACD0L,GAAoB,cAAc;AAE3B,MAAME,KAAmBvM,EAK9B,CAAC,EAAE,WAAAP,GAAW,OAAA+M,GAAO,GAAG7L,EAAA,GAASC,MACjC,gBAAAlB;AAAA,EAACuM,EAAsB;AAAA,EAAtB;AAAA,IACC,KAAArL;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACAoN,KAAS;AAAA,MACT/M;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACD4L,GAAiB,cAAc;AAExB,MAAME,KAA2BzM,EAGtC,CAAC,EAAE,WAAAP,GAAW,UAAAiB,GAAU,SAAAgM,GAAS,GAAG/L,KAASC,MAC7C,gBAAAI;AAAA,EAACiL,EAAsB;AAAA,EAAtB;AAAA,IACC,KAAArL;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAEF,SAAAiN;AAAA,IACC,GAAG/L;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAjB,EAAC,UAAK,WAAU,iLACd,UAAA,gBAAAA,EAACuM,EAAsB,eAAtB,EAAoC,WAAU,0MAC7C,UAAA,gBAAAvM,EAACiC,KAAM,WAAU,UAAS,QAAO,OAAA,CAAO,GAC1C,GACF;AAAA,MACCjB;AAAA,IAAA;AAAA,EAAA;AACH,CACD;AACD+L,GAAyB,cAAc;AAEhC,MAAME,KAAoB3M,EAG/B,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACuM,EAAsB;AAAA,EAAtB;AAAA,IACC,KAAArL;AAAA,IACA,WAAWxB,EAAG,+CAA+CK,CAAS;AAAA,IACrE,GAAGkB;AAAA,EAAA;AACN,CACD;AACDgM,GAAkB,cAAc;AAEzB,MAAMC,KAAwB5M,EAGnC,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACuM,EAAsB;AAAA,EAAtB;AAAA,IACC,KAAArL;AAAA,IACA,WAAWxB,EAAG,2BAA2BK,CAAS;AAAA,IACjD,GAAGkB;AAAA,EAAA;AACN,CACD;AACDiM,GAAsB,cAAc;AC9F7B,MAAMC,KAASC,EAAgB,MACzBC,KAAcD,EAAgB,OAC9BE,KAAcF,EAAgB,OAS9BG,KAAgBjN,EAG3B,CAAC,EAAE,WAAAP,GAAW,UAAAiB,GAAU,SAAAT,IAAU,SAAS,GAAGU,KAASC,MACvD,gBAAAI;AAAA,EAAC8L,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlM;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACAa,MAAY,WACV;AAAA,MACFA,MAAY,YACV;AAAA,MACFR;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,IAEH,UAAA;AAAA,MAAAD;AAAA,MACD,gBAAAhB,EAACoN,EAAgB,MAAhB,EAAqB,SAAO,IAC3B,UAAA,gBAAApN,EAACwN,GAAA,EAAU,WAAU,uBAAA,CAAuB,EAAA,CAC9C;AAAA,IAAA;AAAA,EAAA;AACF,CACD;AACDD,GAAc,cAAc;AAErB,MAAME,KAAgBnN;AAAA,EAI3B,CACE,EAAE,WAAAP,GAAW,UAAAiB,GAAU,UAAA0M,IAAW,UAAU,YAAAd,IAAa,GAAG,GAAG3L,KAC/DC,MAEA,gBAAAlB,EAACoN,EAAgB,QAAhB,EACC,UAAA,gBAAApN;AAAA,IAACoN,EAAgB;AAAA,IAAhB;AAAA,MACC,KAAAlM;AAAA,MACA,UAAAwM;AAAA,MACA,YAAAd;AAAA,MACA,WAAWlN;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,MAEJ,4BAACmM,EAAgB,UAAhB,EAAyB,WAAU,OACjC,UAAApM,EAAA,CACH;AAAA,IAAA;AAAA,EAAA,EACF,CACF;AAEJ;AACAyM,GAAc,cAAc;AAErB,MAAME,KAAarN,EAGxB,CAAC,EAAE,WAAAP,GAAW,UAAAiB,GAAU,GAAGC,EAAA,GAASC,MACpC,gBAAAI;AAAA,EAAC8L,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlM;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAjB,EAAC,QAAA,EAAK,WAAU,2DACd,UAAA,gBAAAA,EAACoN,EAAgB,eAAhB,EACC,UAAA,gBAAApN,EAACiC,GAAA,EAAM,WAAU,WAAA,CAAW,EAAA,CAC9B,GACF;AAAA,MACA,gBAAAjC,EAACoN,EAAgB,UAAhB,EAA0B,UAAApM,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AACtC,CACD;AACD2M,GAAW,cAAc;AAElB,MAAMC,KAActN,EAGzB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACoN,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlM;AAAA,IACA,WAAWxB,EAAG,+CAA+CK,CAAS;AAAA,IACrE,GAAGkB;AAAA,EAAA;AACN,CACD;AACD2M,GAAY,cAAc;ACjGnB,SAASC,GAAgB;AAAA,EAC9B,MAAAxM;AAAA,EACA,OAAA4B;AAAA,EACA,aAAAiB;AAAA,EACA,QAAAF;AAAA,EACA,WAAAjE;AACF,GAAyB;AACvB,SACE,gBAAAuB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW5B;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAAsB,IACC,gBAAArB,EAAC,OAAA,EAAI,WAAU,yKACZ,aACH,IACE;AAAA,QACJ,gBAAAsB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAAtB,EAAC,KAAA,EAAE,WAAU,uEACV,UAAAiD,GACH;AAAA,UACCiB,IACC,gBAAAlE,EAAC,KAAA,EAAE,WAAU,+DACV,aACH,IACE;AAAA,QAAA,GACN;AAAA,QACCgE,IACC,gBAAAhE,EAAC,OAAA,EAAI,WAAU,yCAAyC,aAAO,IAC7D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;AC8FA,MAAM8N,KACJ;AAEF,SAASC,GAASvE,GAAsB;AACtC,SAAOA,EACJ,MAAM,KAAK,EACX,MAAM,GAAG,CAAC,EACV,IAAI,CAACwE,MAAA;;AAAM,aAAA9D,IAAA8D,EAAE,CAAC,MAAH,gBAAA9D,EAAM,kBAAiB;AAAA,GAAE,EACpC,KAAK,EAAE;AACZ;AAGO,SAAS+D,GAAkB;AAAA,EAChC,MAAAzE;AAAA,EACA,WAAA0E;AAAA,EACA,OAAAC;AACF,GAIG;AACD,SACE,gBAAA7M,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAA,gBAAAA,EAACa,IAAA,EAAO,WAAU,UACf,UAAA;AAAA,MAAAgM,sBAAS9L,IAAA,EAAY,KAAK8L,GAAO,KAAI,IAAG,IAAK;AAAA,MAC9C,gBAAAnO,EAACsC,IAAA,EAAgB,UAAAyL,GAASvE,CAAI,EAAA,CAAE;AAAA,IAAA,GAClC;AAAA,IACA,gBAAAlI,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,MAAA,gBAAAtB,EAAC,OAAA,EAAI,WAAU,iDAAiD,UAAAwJ,GAAK;AAAA,MACpE0E,IAAY,gBAAAlO,EAAC,OAAA,EAAI,WAAU,qCAAqC,aAAU,IAAS;AAAA,IAAA,EAAA,CACtF;AAAA,EAAA,GACF;AAEJ;AAEO,SAASoO,GAAa;AAAA,EAC3B,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAA1N,IAAU;AAAA,EACV,OAAA6K;AAAA,EACA,OAAA8C;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAUC,IAAkB;AAAA,EAC5B,iBAAAC,IAAkB,CAAC,IAAI,IAAI,IAAI,GAAG;AAAA,EAClC,MAAApM;AAAA,EACA,cAAAqM;AAAA,EACA,iBAAApL;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAtE;AACF,GAAsB;AACpB,QAAM,CAAC0P,IAAQC,EAAS,IAAI7N;AAAA,IAAkC,MAC5D,OAAO;AAAA,MACLyM,EAAQ,OAAO,CAACqB,MAAMA,EAAE,iBAAiB,CAACA,EAAE,QAAQ,EAAE,IAAI,CAACA,MAAM,CAACA,EAAE,IAAI,EAAI,CAAC;AAAA,IAAA;AAAA,EAC/E,GAEI,CAACC,GAAMC,EAAO,IAAIhO;AAAA,IACtBwN,KAAe;AAAA,EAAA,GAEX,CAACS,GAAMC,CAAO,IAAIlO,EAAS,CAAC,GAC5B,CAACmO,GAAUC,EAAW,IAAIpO,EAASyN,CAAe,GAClD,CAACzE,GAAUqF,EAAW,IAAIrO,EAAsB,oBAAI,KAAK,GACzD,CAACsO,IAAiBC,EAAkB,IAAIvO,EAAmB,CAAA,CAAE,GAE7DwO,IAAiB/B,EAAQ,OAAO,CAACqB,MAAM,CAACF,GAAOE,EAAE,EAAE,CAAC,GACpDW,KAAgBhC,EAAQ,OAAO,CAACqB,MAAMF,GAAOE,EAAE,EAAE,KAAK,CAACA,EAAE,QAAQ,GACjEY,MAAiB7B,KAAW,CAAA,GAAI,OAAO,CAAC8B,MAAML,GAAgB,SAASK,EAAE,EAAE,CAAC,GAC5EC,MAAmB/B,KAAW,CAAA,GACjC,IAAI,CAAC8B,MAAM,GAAGA,EAAE,EAAE,IAAIA,EAAE,MAAM,KAAK,GAAG,CAAC,EAAE,EACzC,KAAK,GAAG,GAELE,IAAWC,GAAQ,MAAM;AAC7B,QAAI9I,IAAOwG;AACX,eAAWuC,KAAUlC,KAAW;AAC9B,MAAIkC,EAAO,MAAM,SAAS,MACxB/I,IAAOA,EAAK,OAAO,CAACgJ,MAAQD,EAAO,MAAMC,GAAKD,EAAO,KAAK,CAAC;AAG/D,QAAI,CAACnC,KAAU,CAACA,EAAO,MAAM,KAAA,EAAQ,QAAO5G;AAC5C,UAAMiJ,IAAIrC,EAAO,MAAM,KAAA,EAAO,YAAA;AAC9B,WAAO5G,EAAK,OAAO,CAACkJ,MAAMtC,EAAO,KAAKsC,CAAC,EAAE,YAAA,EAAc,SAASD,CAAC,CAAC;AAAA,EACpE,GAAG,CAACzC,GAAMI,GAAQC,CAAO,CAAC,GAEpBsC,IAASL,GAAQ,MAAM;AAC3B,QAAI,CAACf,EAAM,QAAOc;AAClB,UAAMO,IAAM3C,EAAQ,KAAK,CAACqB,MAAMA,EAAE,OAAOC,EAAK,EAAE;AAChD,QAAI,EAACqB,KAAA,QAAAA,EAAK,WAAW,QAAOP;AAC5B,UAAMQ,IAAMtB,EAAK,QAAQ,QAAQ,IAAI;AACrC,WAAO,CAAC,GAAGc,CAAQ,EAAE,KAAK,CAACS,GAAGC,MAAM;AAClC,YAAMC,IAAKJ,EAAI,UAAWE,CAAC,GACrBG,IAAKL,EAAI,UAAWG,CAAC;AAC3B,aAAIC,KAAM,QAAQC,KAAM,OAAa,IACjCD,KAAM,OAAa,IACnBC,KAAM,OAAa,KACnB,OAAOD,KAAO,YAAY,OAAOC,KAAO,YAAkBD,IAAKC,KAAMJ,IAClE,OAAOG,CAAE,EAAE,cAAc,OAAOC,CAAE,CAAC,IAAIJ;AAAA,IAChD,CAAC;AAAA,EACH,GAAG,CAACR,GAAUd,GAAMtB,CAAO,CAAC,GAEtBiD,IAAY,KAAK,IAAI,GAAG,KAAK,KAAKP,EAAO,SAAShB,CAAQ,CAAC;AAEjE,EAAArI,EAAU,MAAM;AACd,IAAAoI,EAAQ,CAAC;AAAA,EACX,GAAG,CAACtB,KAAA,gBAAAA,EAAQ,OAAOuB,GAAUJ,KAAA,gBAAAA,EAAM,IAAIA,KAAA,gBAAAA,EAAM,KAAKd,GAAW2B,EAAe,CAAC,GAE7E9I,EAAU,MAAM;AACd,IAAImI,IAAOyB,IAAY,KAAGxB,EAAQwB,IAAY,CAAC;AAAA,EACjD,GAAG,CAACzB,GAAMyB,CAAS,CAAC;AAEpB,QAAMC,IAAQ1B,IAAOE,GACfyB,IAAWT,EAAO,MAAMQ,GAAOA,IAAQxB,CAAQ,GAE/C0B,KAAa,CAACT,MAAmB;AACrC,IAAKA,EAAI,YACTpB;AAAA,MAAQ,CAAC8B,OACPA,KAAA,gBAAAA,EAAM,QAAOV,EAAI,KACbU,EAAK,QAAQ,QACX,EAAE,IAAIV,EAAI,IAAI,KAAK,WACnB,OACF,EAAE,IAAIA,EAAI,IAAI,KAAK,MAAA;AAAA,IAAM;AAAA,EAEjC,GAEMW,KAAcH,EAAS,SAAS,KAAKA,EAAS,MAAM,CAACV,MAAMlG,EAAS,IAAI0D,EAASwC,CAAC,CAAC,CAAC,GACpFc,KAAeJ,EAAS,KAAK,CAACV,MAAMlG,EAAS,IAAI0D,EAASwC,CAAC,CAAC,CAAC,GAC7De,KAAezD,EAAK,OAAO,CAAC0C,MAAMlG,EAAS,IAAI0D,EAASwC,CAAC,CAAC,CAAC,GAE3DgB,KAAY,MAAM;AACtB,IAAA7B,GAAY,CAACyB,MAAS;AACpB,YAAM9J,IAAO,IAAI,IAAI8J,CAAI;AACzB,aAAIC,KAAaH,EAAS,QAAQ,CAACV,MAAMlJ,EAAK,OAAO0G,EAASwC,CAAC,CAAC,CAAC,IAC5DU,EAAS,QAAQ,CAACV,MAAMlJ,EAAK,IAAI0G,EAASwC,CAAC,CAAC,CAAC,GAC3ClJ;AAAA,IACT,CAAC;AAAA,EACH,GAEMmK,KAAY,CAACpG,MAAe;AAChC,IAAAsE,GAAY,CAACyB,MAAS;AACpB,YAAM9J,IAAO,IAAI,IAAI8J,CAAI;AACzB,aAAI9J,EAAK,IAAI+D,CAAE,IAAG/D,EAAK,OAAO+D,CAAE,IAC3B/D,EAAK,IAAI+D,CAAE,GACT/D;AAAA,IACT,CAAC;AAAA,EACH,GAEMoK,KAAa,GAAQxD,KAAUC,KAAA,QAAAA,EAAS,UAAUC,KAAgBC,IAKlEsD,KAAmB7B,EAAe,KAAK,CAACV,MAAMA,EAAE,KAAK,GACrDwC,KACJ9B,EAAe,SAAS,IAAK,MAAaA,EAAe,SAAS,KAAK,KACnE+B,KAAa/B,EAAe,IAAI,CAACV,GAAG0C,MACpC1C,EAAE,QAAcA,EAAE,QAClBuC,KAAyB,SACtB,GAAGG,MAAM,IAAI,KAAKF,EAAS,GACnC,GAEKG,KAAY;AAAA,IAChB,GAAIrD,IAAa,CAAC,SAAS,IAAI,CAAA;AAAA,IAC/B,GAAGmD;AAAA,IACH,GAAIjD,IAAa,CAAC,OAAO,IAAI,CAAA;AAAA,EAAC,GAG1BoD,KAAW,CAAC5C,OAChBC,KAAA,gBAAAA,EAAM,QAAOD,EAAE,KAAMC,EAAK,QAAQ,QAAQ,cAAc,eAAgB;AAE1E,2BACG,OAAA,EAAI,WAAWlQ,EAAG,aAAaK,EAAS,GACtC,UAAA;AAAA,IAAA8O,KAAQA,EAAK,SAAS,KACrB,gBAAA7O,EAAC,OAAA,EAAI,WAAU,gDAA+C,MAAK,WAChE,UAAA6O,EAAK,IAAI,CAAC2D,MAAM;AACf,YAAM9L,IAAS8L,EAAE,OAAO1D;AACxB,aACE,gBAAA9O;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,iBAAe0G;AAAA,UACf,SAAS,MAAMqI,KAAA,gBAAAA,EAAcyD,EAAE;AAAA,UAC/B,WAAW9S;AAAA,YACT;AAAA,YACAgH,IACI,kCACA;AAAA,UAAA;AAAA,UAGL,UAAA8L,EAAE;AAAA,QAAA;AAAA,QAZEA,EAAE;AAAA,MAAA;AAAA,IAeb,CAAC,EAAA,CACH;AAAA,IAGDP,MACC,gBAAA3Q,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,MAAAmN,KACC,gBAAAzO;AAAA,QAACsL;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAYmD,EAAO,eAAe;AAAA,UAClC,aAAaA,EAAO,eAAe;AAAA,UACnC,OAAOA,EAAO;AAAA,UACd,UAAU,CAACgE,MAAMhE,EAAO,SAASgE,EAAE,OAAO,KAAK;AAAA,UAC/C,SAAS,MAAMhE,EAAO,SAAS,EAAE;AAAA,UACjC,+BAAciE,IAAA,EAAgB;AAAA,UAC9B,oBAAmB;AAAA,UACnB,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAGb/D;AAAA,wBACArC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAtM,EAACwM,IAAA,EAAoB,SAAO,IAC1B,UAAA,gBAAAxM;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,+BAAcsS,IAAA,EAAY;AAAA,YAC1B,gCAAenF,GAAA,EAAU;AAAA,YAC1B,UAAA;AAAA,UAAA;AAAA,QAAA,GAGH;AAAA,QACA,gBAAAlM,EAACqL,IAAA,EAAoB,OAAM,OAAM,WAAU,QACzC,UAAA;AAAA,UAAA,gBAAA3M,EAACiN,IAAA,EAAkB,WAAU,eAAc,UAAA,kBAAc;AAAA,UACxDoD,EAAe,IAAI,CAACV,MACnB,gBAAArO;AAAA,YAACyL;AAAA,YAAA;AAAA,cAEC,SAAO;AAAA,cACP,UAAU4C,EAAE;AAAA,cACZ,iBAAiB,MAAMD,GAAU,CAACiC,OAAU,EAAE,GAAGA,GAAM,CAAChC,EAAE,EAAE,GAAG,KAAO;AAAA,cACtE,UAAU,CAAC8C,MAAMA,EAAE,eAAA;AAAA,cACnB,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAzS,EAAC,QAAA,EAAM,YAAE,OAAA,CAAO;AAAA,gBACf2P,EAAE,WAAW,gBAAA3P,EAAC4S,IAAA,EAAK,WAAU,wBAAuB,eAAW,IAAC,IAAK;AAAA,cAAA;AAAA,YAAA;AAAA,YARjEjD,EAAE;AAAA,UAAA,CAUV;AAAA,UACAW,GAAc,SAAS,IACtB,gBAAAhP,EAAAC,IAAA,EACE,UAAA;AAAA,YAAA,gBAAAvB,EAACkN,IAAA,EAAsB;AAAA,YACvB,gBAAAlN,EAACiN,IAAA,EAAkB,WAAU,eAAc,UAAA,qBAAiB;AAAA,YAC3DqD,GAAc,IAAI,CAACX,MAClB,gBAAA3P;AAAA,cAAC+M;AAAA,cAAA;AAAA,gBAEC,SAAS;AAAA,gBACT,iBAAiB,MAAM2C,GAAU,CAACiC,OAAU,EAAE,GAAGA,GAAM,CAAChC,EAAE,EAAE,GAAG,KAAQ;AAAA,gBACvE,UAAU,CAAC8C,MAAMA,EAAE,eAAA;AAAA,gBAElB,UAAA9C,EAAE;AAAA,cAAA;AAAA,cALEA,EAAE;AAAA,YAAA,CAOV;AAAA,UAAA,EAAA,CACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA,GACF;AAAA,MACCjB,KAAWA,EAAQ,SAAS,sBAC1BpC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAtM,EAACwM,IAAA,EAAoB,SAAO,IAC1B,UAAA,gBAAAxM;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,UAAQ;AAAA,YACR,cAAW;AAAA,YAEX,4BAACwS,IAAA,CAAA,CAAa;AAAA,UAAA;AAAA,QAAA,GAElB;AAAA,QACA,gBAAA7S,EAAC2M,MAAoB,OAAM,SAAQ,WAAU,QAC1C,UAAA+B,EAAQ,IAAI,CAACkC,MACZ,gBAAA5Q;AAAA,UAAC6M;AAAA,UAAA;AAAA,YAEC,UAAU,MACRuD;AAAA,cAAmB,CAACuB,MAClBA,EAAK,SAASf,EAAO,EAAE,IAAIe,IAAO,CAAC,GAAGA,GAAMf,EAAO,EAAE;AAAA,YAAA;AAAA,YAIxD,UAAAA,EAAO;AAAA,UAAA;AAAA,UAPHA,EAAO;AAAA,QAAA,CASf,EAAA,CACH;AAAA,MAAA,EAAA,CACF,IACE;AAAA,MACHhC,IAAa,gBAAA5O,EAAC,OAAA,EAAI,WAAU,qBAAqB,aAAW,IAAS;AAAA,IAAA,GACxE;AAAA,IAGDuQ,GAAc,SAAS,IACtB,gBAAAjP,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,MAAAiP,GAAc,IAAI,CAACK,MAAW;AAC7B,cAAMvI,IAAQ,MAAM;AAClB,UAAAuI,EAAO,SAAS,EAAE,GAClBR,GAAmB,CAACuB,MAASA,EAAK,OAAO,CAAC/F,MAAOA,MAAOgF,EAAO,EAAE,CAAC;AAAA,QACpE;AAEA,eACE,gBAAAtP,EAAC,OAAA,EAAoB,WAAU,4BAC7B,UAAA;AAAA,UAAA,gBAAAtB;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,UAAQ;AAAA,cACR,cAAY,UAAUuQ,EAAO,KAAK;AAAA,cAClC,WAAU;AAAA,cACV,SAASvI;AAAA,cAET,4BAACQ,IAAA,CAAA,CAAE;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEJyD,IAAA,EACC,UAAA;AAAA,YAAA,gBAAAtM,EAACwM,IAAA,EAAoB,SAAO,IAC1B,UAAA,gBAAAlL,EAACjB,GAAA,EAAO,SAAQ,aAAY,MAAK,MAAK,WAAU,uBAC9C,UAAA;AAAA,cAAA,gBAAAL,EAAC6S,IAAA,EAAa;AAAA,cACd,gBAAA7S,EAAC,QAAA,EAAK,WAAU,eAAe,YAAO,OAAM;AAAA,cAC5C,gBAAAA,EAAC,QAAA,EAAK,WAAU,oBAAmB,eAAW,IAAC;AAAA,cAC/C,gBAAAA,EAAC,QAAA,EAAK,WAAU,cACb,UAAA4Q,EAAO,MAAM,SAAS,IACnB,GAAGA,EAAO,MAAM,MAAM,cACtB,eACN;AAAA,cACA,gBAAA5Q,EAACwN,GAAA,EAAU,WAAU,aAAA,CAAa;AAAA,YAAA,EAAA,CACpC,EAAA,CACF;AAAA,YACA,gBAAAlM,EAACqL,IAAA,EAAoB,OAAM,SAAQ,WAAU,QAC3C,UAAA;AAAA,cAAA,gBAAArL,EAAC2L,IAAA,EAAkB,WAAU,eAAc,UAAA;AAAA,gBAAA;AAAA,gBAC9B2D,EAAO;AAAA,cAAA,GACpB;AAAA,cACCA,EAAO,QAAQ,IAAI,CAAC9F,MAAW;AAC9B,sBAAMkC,IAAU4D,EAAO,MAAM,SAAS9F,EAAO,KAAK;AAClD,uBACE,gBAAA9K;AAAA,kBAAC+M;AAAA,kBAAA;AAAA,oBAEC,SAAAC;AAAA,oBACA,iBAAiB,MACf4D,EAAO;AAAA,sBACL5D,IACI4D,EAAO,MAAM,OAAO,CAAChL,MAAUA,MAAUkF,EAAO,KAAK,IACrD,CAAC,GAAG8F,EAAO,OAAO9F,EAAO,KAAK;AAAA,oBAAA;AAAA,oBAGtC,UAAU,CAAC2H,MAAMA,EAAE,eAAA;AAAA,oBAElB,UAAA3H,EAAO;AAAA,kBAAA;AAAA,kBAXHA,EAAO;AAAA,gBAAA;AAAA,cAclB,CAAC;AAAA,gCACAoC,IAAA,EAAsB;AAAA,cACvB,gBAAAlN,EAAC6M,IAAA,EAAiB,UAAUxE,GAAO,UAAA,eAAA,CAAY;AAAA,YAAA,EAAA,CACjD;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,GAnDQuI,EAAO,EAoDjB;AAAA,MAEJ,CAAC;AAAA,MACD,gBAAA5Q;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM;AACb,uBAAW4Q,KAAUL,GAAe,CAAAK,EAAO,SAAS,CAAA,CAAE;AACtD,YAAAR,GAAmB,CAAA,CAAE;AAAA,UACvB;AAAA,UACA,WAAU;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF,IACE;AAAA,IAEHpB;AAAA,IAEAC,KAAcpE,EAAS,OAAO,KAC7B,gBAAAvJ,EAAC,OAAA,EAAI,WAAU,iGACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,uBAAuB,UAAA;AAAA,QAAAuJ,EAAS;AAAA,QAAK;AAAA,MAAA,GAAS;AAAA,MAC9D,gBAAA7K,EAAC,SAAI,WAAU,2BACX,gBAAe,CAAA,GAAI,IAAI,CAAC,MACxB,gBAAAsB;AAAA,QAACjB;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,EAAE,WAAW;AAAA,UACtB,UAAU,EAAE;AAAA,UACZ,SAAS,MAAM,KAAK,EAAE,MAAMyR,EAAY;AAAA,UAEvC,UAAA;AAAA,YAAA,EAAE;AAAA,YACF,EAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAPE,EAAE;AAAA,MAAA,CASV,GACH;AAAA,MACA,gBAAAxQ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM4O,GAAY,oBAAI,KAAK;AAAA,UACpC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAlQ,EAAC6I,IAAA,EAAE,WAAU,WAAA,CAAW;AAAA,YAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAE5B,GACF;AAAA,IAGF,gBAAA7I;AAAA,MAACiE;AAAA,MAAA;AAAA,QACC,QAAQuL;AAAA,QACR,MAAArM;AAAA,QACA,iBAAAiB;AAAA,QACA,gBAAAC;AAAA,QACA;AAAA;AAAA;AAAA,UAGE,gBAAA/C,EAAC,SAAA,EAAM,MAAK,gBAAe,WAAU,sCACnC,UAAA;AAAA,YAAA,gBAAAtB,EAAC,YAAA,EACE,UAAAsS,GAAU,IAAI,CAACQ,GAAGT,MACjB,gBAAArS,EAAC,OAAA,EAAY,OAAO,EAAE,OAAO8S,EAAA,KAAnBT,CAAwB,CACnC,GACH;AAAA,YACA,gBAAArS,EAAC,SAAA,EACC,UAAA,gBAAAsB,EAAC,MAAA,EACE,UAAA;AAAA,cAAA2N,KACC,gBAAAjP,EAAC,MAAA,EAAG,WAAU,+CACZ,UAAA,gBAAAA;AAAA,gBAACsF;AAAA,gBAAA;AAAA,kBACC,cAAW;AAAA,kBACX,SAASsM,KAAc,KAAOC,KAAe,kBAAkB;AAAA,kBAC/D,iBAAiBE;AAAA,gBAAA;AAAA,cAAA,GAErB;AAAA,cAED1B,EAAe,IAAI,CAACV,MACnB,gBAAA3P;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAWN,EAAGoO,IAAa6B,EAAE,UAAU,WAAW,cAAcA,EAAE,SAAS;AAAA,kBAE1E,YAAE,WACD,gBAAArO;AAAA,oBAACjB;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAQ;AAAA,sBACR,MAAK;AAAA,sBACL,cAAY,WAAWsP,EAAE,MAAM;AAAA,sBAC/B,SAAS,MAAM+B,GAAW/B,CAAC;AAAA,sBAC3B,WAAWjQ;AAAA,wBACT;AAAA,wBACA;AAAA,wBACA;AAAA,yBACAkQ,KAAA,gBAAAA,EAAM,QAAOD,EAAE,MAAM;AAAA,sBAAA;AAAA,sBAGtB,UAAA;AAAA,wBAAAA,EAAE;AAAA,yBACFC,KAAA,gBAAAA,EAAM,QAAOD,EAAE,KACdC,EAAK,QAAQ,QACX,gBAAA5P,EAAC+S,IAAA,EAAQ,WAAU,YAAW,QAAO,QAAO,IAE5C,gBAAA/S,EAACwN,GAAA,EAAU,WAAU,YAAW,QAAO,QAAO,IAGhD,gBAAAxN,EAACgT,IAAA,EAAY,WAAU,sBAAA,CAAsB;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA,IAIjDrD,EAAE;AAAA,gBAAA;AAAA,gBA7BCA,EAAE;AAAA,cAAA,CAgCV;AAAA,cACAR,KACC,gBAAAnP,EAAC,MAAA,EAAG,WAAU,+CACZ,4BAAC,QAAA,EAAK,WAAU,WAAU,UAAA,UAAA,CAAO,EAAA,CACnC;AAAA,YAAA,EAAA,CAEJ,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA;AAAA,QAGG,UAAAa,IACC,gBAAAb,EAAC,OAAA,EAAI,WAAU,iBACZ,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAACqS,MACd,gBAAArS,EAAC,OAAA,EAAY,WAAU,0DAAA,GAAbqS,CAAuE,CAClF,EAAA,CACH,IACE3G,IACF,gBAAApK,EAAC,OAAA,EAAI,WAAU,mFACb,UAAA;AAAA,UAAA,gBAAAtB,EAAC,SAAI,WAAU,8JACb,4BAACiT,IAAA,EAAc,QAAO,WAAU,EAAA,CAClC;AAAA,UACA,gBAAA3R,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAtB,EAAC,KAAA,EAAE,WAAU,yDACV,UAAA0L,EAAM,OACT;AAAA,YACCA,EAAM,cACL,gBAAA1L,EAAC,KAAA,EAAE,WAAU,+DACV,UAAA0L,EAAM,aACT,IACE;AAAA,UAAA,GACN;AAAA,UACCA,EAAM;AAAA,QAAA,EAAA,CACT,IACE+F,EAAS,WAAW,IACtB,gBAAAzR;AAAA,UAAC6N;AAAA,UAAA;AAAA,YACC,MAAMW,KAAA,gBAAAA,EAAO;AAAA,YACb,QAAOA,KAAA,gBAAAA,EAAO,UAAS;AAAA,YACvB,aAAa,QAAOA,KAAA,gBAAAA,EAAO,gBAAgB,WAAWA,EAAM,cAAc;AAAA,YAC1E,QAAQA,KAAA,gBAAAA,EAAO;AAAA,UAAA;AAAA,QAAA,IAGjB,gBAAAlN,EAAC,SAAA,EAAM,WAAU,sCACf,UAAA;AAAA,UAAA,gBAAAtB,EAAC,YAAA,EACE,UAAAsS,GAAU,IAAI,CAACQ,GAAGT,MACjB,gBAAArS,EAAC,OAAA,EAAY,OAAO,EAAE,OAAO8S,EAAA,KAAnBT,CAAwB,CACnC,GACH;AAAA,UAEA,gBAAArS,EAAC,SAAA,EAAM,WAAU,WACf,4BAAC,MAAA,EACE,UAAA;AAAA,YAAAiP,KAAc,gBAAAjP,EAAC,MAAA,EAAG,OAAM,OAAM,UAAA,UAAM;AAAA,YACpCqQ,EAAe,IAAI,CAACV,MACnB,gBAAA3P,EAAC,QAAc,OAAM,OAAM,aAAWuS,GAAS5C,CAAC,GAC7C,UAAAA,EAAE,UADIA,EAAE,EAEX,CACD;AAAA,YACAR,KAAc,gBAAAnP,EAAC,MAAA,EAAG,OAAM,OAAM,UAAA,UAAA,CAAO;AAAA,UAAA,EAAA,CACxC,EAAA,CACF;AAAA,UACA,gBAAAA,EAACyD,IAAA,EACE,UAAAgO,EAAS,IAAI,CAACZ,MAAQ;AACrB,kBAAMjF,IAAK2C,EAASsC,CAAG,GACjBqC,IAAarI,EAAS,IAAIe,CAAE;AAClC,mBACE,gBAAAtK;AAAA,cAACoC;AAAA,cAAA;AAAA,gBAEC,cAAYwP,IAAa,aAAa;AAAA,gBACtC,SAAS9D,IAAa,MAAMA,EAAWyB,CAAG,IAAI;AAAA,gBAC9C,WAAWzB,IAAa,mBAAmB;AAAA,gBAE1C,UAAA;AAAA,kBAAAH,KACC,gBAAAjP,EAAC4D,MAAU,WAAU,aAAY,SAAS,CAAC6O,MAAMA,EAAE,gBAAA,GACjD,UAAA,gBAAAzS;AAAA,oBAACsF;AAAA,oBAAA;AAAA,sBACC,cAAW;AAAA,sBACX,SAAS4N;AAAA,sBACT,iBAAiB,MAAMlB,GAAUpG,CAAE;AAAA,oBAAA;AAAA,kBAAA,GAEvC;AAAA,kBAEDyE,EAAe,IAAI,CAACV,MACnB,gBAAA3P;AAAA,oBAAC4D;AAAA,oBAAA;AAAA,sBAEC,gBAAc+L,EAAE,UAAU,KAAK;AAAA,sBAC/B,WAAWjQ,EAAGiQ,EAAE,UAAU,WAAW,cAAcA,EAAE,SAAS;AAAA,sBAE7D,UAAAA,EAAE,KAAKkB,CAAG;AAAA,oBAAA;AAAA,oBAJNlB,EAAE;AAAA,kBAAA,CAMV;AAAA,kBACAR,KACC,gBAAAnP,EAAC4D,IAAA,EAAU,WAAU,wBAAuB,SAAS,CAAC6O,MAAMA,EAAE,gBAAA,GAC3D,UAAAtD,EAAW0B,CAAG,EAAA,CACjB;AAAA,gBAAA;AAAA,cAAA;AAAA,cA1BGjF;AAAA,YAAA;AAAA,UA8BX,CAAC,EAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAIP,CAAC/K,KAAW,CAAC6K,KAASsF,EAAO,SAAS,KACrC,gBAAA1P,EAAC,OAAA,EAAI,WAAU,6DACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,cACb,UAAA;AAAA,QAAAkQ,IAAQ;AAAA,QAAE;AAAA,QAAE,KAAK,IAAIA,IAAQxB,GAAUgB,EAAO,MAAM;AAAA,QAAE;AAAA,QAAKA,EAAO;AAAA,MAAA,GACrE;AAAA,MACA,gBAAA1P,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA,gBAAAA,EAAC6L,IAAA,EAAO,OAAO,OAAO6C,CAAQ,GAAG,eAAe,CAACmD,MAAMlD,GAAY,OAAOkD,CAAC,CAAC,GAC1E,UAAA;AAAA,UAAA,gBAAAnT,EAACuN,MAAc,cAAW,iBAAgB,WAAU,UAClD,UAAA,gBAAAvN,EAACsN,MAAY,EAAA,CACf;AAAA,UACA,gBAAAtN,EAACyN,IAAA,EACE,UAAA8B,EAAgB,IAAI,CAAC6D,MACpB,gBAAA9R,EAACqM,IAAA,EAAmB,OAAO,OAAOyF,CAAC,GAChC,UAAA;AAAA,YAAAA;AAAA,YAAE;AAAA,UAAA,EAAA,GADYA,CAEjB,CACD,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QACA,gBAAApT;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,UAAUyP,KAAQ;AAAA,YAClB,SAAS,MAAMC,EAAQ,CAAC/B,MAAM,KAAK,IAAI,GAAGA,IAAI,CAAC,CAAC;AAAA,YACjD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAAhO;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,UAAUyP,KAAQyB,IAAY;AAAA,YAC9B,SAAS,MAAMxB,EAAQ,CAAC/B,MAAM,KAAK,IAAIuD,IAAY,GAAGvD,IAAI,CAAC,CAAC;AAAA,YAC7D,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;ACluBO,SAASqF,GAAW,EAAE,MAAAhS,GAAM,OAAA4B,GAAO,aAAAiB,GAAa,QAAAF,GAAQ,WAAAjE,KAA8B;AAC3F,2BACGkE,IAAA,EAAa,WAAAlE,GACZ,UAAA,gBAAAuB,EAAC,OAAA,EAAI,WAAU,0EACZ,UAAA;AAAA,IAAAD,IACC,gBAAArB,EAAC,OAAA,EAAI,WAAU,iHACZ,aACH,IACE;AAAA,IACJ,gBAAAsB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAA,gBAAAtB,EAAC,KAAA,EAAE,WAAU,+BAA+B,UAAAiD,GAAM;AAAA,MACjDiB,IACC,gBAAAlE,EAAC,KAAA,EAAE,WAAU,uCAAuC,aAAY,IAC9D;AAAA,IAAA,GACN;AAAA,IACCgE;AAAA,EAAA,EAAA,CACH,EAAA,CACF;AAEJ;AC1BO,SAASsP,GAAI,EAAE,WAAAvT,GAAW,GAAGkB,KAAsC;AACxE,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,QACT;AAAA,QACAK;AAAA,MAAA;AAAA,MAED,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;ACVO,MAAMsS,KAAQjT,EAGnB,CAAC,EAAE,WAAAP,GAAW,GAAGkB,EAAA,GAASC,MAC1B,gBAAAlB;AAAA,EAACwT,GAAe;AAAA,EAAf;AAAA,IACC,KAAAtS;AAAA,IACA,WAAWxB;AAAA,MACT;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACDsS,GAAM,cAAc;ACMb,SAASE,GAA4B;AAAA,EAC1C,OAAA7N;AAAA,EACA,eAAA2E;AAAA,EACA,SAAAF;AAAA,EACA,MAAA7J,IAAO;AAAA,EACP,WAAAT;AAAA,EACA,GAAG2T;AACL,GAAsB;AACpB,QAAMlK,IAAOE,GAAA;AAEb,SACE,gBAAA1J;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY0T,EAAK,YAAY;AAAA,MAC7B,WAAWhU;AAAA,QACT;AAAA,QACAc,MAAS,OAAO,uBAAuB;AAAA,QACvCT;AAAA,MAAA;AAAA,MAGD,UAAAsK,EAAQ,IAAI,CAACS,MAAW;AACvB,cAAMpE,IAASoE,EAAO,UAAUlF;AAChC,eACE,gBAAAtE;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW5B;AAAA,cACT;AAAA,cACA;AAAA,cACAc,MAAS,OACL,6DACA;AAAA,cACJkG,IACI,gDACA;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAA1G;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAAwJ;AAAA,kBACA,OAAOsB,EAAO;AAAA,kBACd,SAASpE;AAAA,kBACT,UAAU,MAAM6D,EAAcO,EAAO,KAAK;AAAA,kBAC1C,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEXA,EAAO;AAAA,cACPA,EAAO;AAAA,YAAA;AAAA,UAAA;AAAA,UArBHA,EAAO;AAAA,QAAA;AAAA,MAwBlB,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;ACtEO,MAAM6I,KAAYrT,EAGvB,CAAC,EAAE,WAAAP,GAAW,aAAA6T,IAAc,cAAc,YAAAC,IAAa,IAAM,GAAG5S,EAAA,GAASC,MACzE,gBAAAlB;AAAA,EAAC8T,GAAmB;AAAA,EAAnB;AAAA,IACC,KAAA5S;AAAA,IACA,YAAA2S;AAAA,IACA,aAAAD;AAAA,IACA,WAAWlU;AAAA,MACT;AAAA,MACAkU,MAAgB,eAAe,gBAAgB;AAAA,MAC/C7T;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,CACD;AACD0S,GAAU,cAAc;ACjBjB,SAASI,GAAS,EAAE,WAAAhU,GAAW,GAAGkB,KAAyC;AAChF,SACE,gBAAAjB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWN,EAAG,wCAAwCK,CAAS;AAAA,MAC9D,GAAGkB;AAAA,IAAA;AAAA,EAAA;AAGV;ACNO,MAAM+S,KAAkBC,EAAiB,UACnCC,KAAUD,EAAiB,MAC3BE,KAAiBF,EAAiB,SAElCG,KAAiB9T,EAG5B,CAAC,EAAE,WAAAP,GAAW,YAAA6M,IAAa,GAAG,GAAG3L,EAAA,GAASC,MAC1C,gBAAAlB,EAACiU,EAAiB,QAAjB,EACC,UAAA,gBAAAjU;AAAA,EAACiU,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAA/S;AAAA,IACA,YAAA0L;AAAA,IACA,WAAWlN;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAK;AAAA,IAAA;AAAA,IAED,GAAGkB;AAAA,EAAA;AACN,GACF,CACD;AACDmT,GAAe,cAAc;"}
|
package/package.json
CHANGED
package/src/input.tsx
CHANGED
|
@@ -9,7 +9,7 @@ const HEIGHT: Record<InputSize, string> = {
|
|
|
9
9
|
sm: "h-[var(--control-h-sm)] text-sm",
|
|
10
10
|
md: "h-[var(--control-h-md)] text-sm",
|
|
11
11
|
lg: "h-[var(--control-h-lg)] text-sm",
|
|
12
|
-
xl: "h-[var(--control-h-xl)] rounded-
|
|
12
|
+
xl: "h-[var(--control-h-xl)] rounded-lg text-base",
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
const PAD_X: Record<InputSize, string> = {
|
|
@@ -110,7 +110,7 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
|
|
|
110
110
|
: undefined
|
|
111
111
|
}
|
|
112
112
|
className={cn(
|
|
113
|
-
"flex w-full rounded-
|
|
113
|
+
"flex w-full rounded-md border bg-(--input-bg) text-(--input-fg) transition-colors",
|
|
114
114
|
HEIGHT[size],
|
|
115
115
|
PAD_X[size],
|
|
116
116
|
"placeholder:text-(--input-placeholder)",
|
package/src/label.tsx
CHANGED
|
@@ -10,7 +10,7 @@ export const Label = forwardRef<
|
|
|
10
10
|
<LabelPrimitive.Root
|
|
11
11
|
ref={ref}
|
|
12
12
|
className={cn(
|
|
13
|
-
"mb-
|
|
13
|
+
"mb-2.5 block text-sm font-medium text-fg leading-none last:mb-0 peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
14
14
|
className,
|
|
15
15
|
)}
|
|
16
16
|
{...props}
|