@jinaan/uikit 0.1.1 → 0.1.2
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/data-table.d.ts.map +1 -1
- package/dist/index.js +74 -70
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/data-table.tsx +7 -3
package/dist/data-table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../src/data-table.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../src/data-table.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as e, jsxs as i, Fragment as De } from "react/jsx-runtime";
|
|
2
2
|
import { CircleNotch as tt, Robot as at, Terminal as rt, Check as V, Copy as Te, XCircle as nt, Warning as lt, CheckCircle as st, Info as it, Minus as ot, X as be, CaretDown as Q, MagnifyingGlass as dt, Columns as ct, Lock as mt, FunnelSimple as ye, WarningCircle as ut, CaretUp as bt, CaretUpDown as pt } from "@phosphor-icons/react";
|
|
3
3
|
import { forwardRef as b, useState as D, useContext as ht, useId as te, createContext as ft, useMemo as we, useEffect as Ce } from "react";
|
|
4
|
-
import { Slot as
|
|
4
|
+
import { Slot as vt } from "@radix-ui/react-slot";
|
|
5
5
|
import { cva as pe } from "class-variance-authority";
|
|
6
|
-
import { clsx as
|
|
6
|
+
import { clsx as xt } from "clsx";
|
|
7
7
|
import { twMerge as gt } from "tailwind-merge";
|
|
8
8
|
import * as he from "@radix-ui/react-avatar";
|
|
9
9
|
import * as ze from "@radix-ui/react-checkbox";
|
|
@@ -14,7 +14,7 @@ import * as Nt from "@radix-ui/react-label";
|
|
|
14
14
|
import * as yt from "@radix-ui/react-separator";
|
|
15
15
|
import * as q from "@radix-ui/react-tooltip";
|
|
16
16
|
function l(...t) {
|
|
17
|
-
return gt(
|
|
17
|
+
return gt(xt(t));
|
|
18
18
|
}
|
|
19
19
|
function wt({ className: t }) {
|
|
20
20
|
return /* @__PURE__ */ e(
|
|
@@ -70,17 +70,17 @@ const Ct = pe(
|
|
|
70
70
|
iconOnly: c = !1,
|
|
71
71
|
loading: m = !1,
|
|
72
72
|
fullWidth: h = !1,
|
|
73
|
-
disabled:
|
|
73
|
+
disabled: x,
|
|
74
74
|
children: g,
|
|
75
75
|
...I
|
|
76
76
|
}, k) => {
|
|
77
|
-
const S = s ?
|
|
77
|
+
const S = s ? vt : "button", y = zt[n ?? "md"];
|
|
78
78
|
return /* @__PURE__ */ e(
|
|
79
79
|
S,
|
|
80
80
|
{
|
|
81
81
|
ref: k,
|
|
82
82
|
"aria-busy": m || void 0,
|
|
83
|
-
disabled: s ? void 0 :
|
|
83
|
+
disabled: s ? void 0 : x || m,
|
|
84
84
|
className: l(
|
|
85
85
|
Ct({ variant: r, size: n }),
|
|
86
86
|
c && "aspect-square px-0",
|
|
@@ -98,7 +98,7 @@ const Ct = pe(
|
|
|
98
98
|
}
|
|
99
99
|
);
|
|
100
100
|
w.displayName = "Button";
|
|
101
|
-
function
|
|
101
|
+
function va({
|
|
102
102
|
command: t,
|
|
103
103
|
tag: r = "Build with agents",
|
|
104
104
|
icon: n,
|
|
@@ -145,7 +145,7 @@ const Ie = b(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
|
145
145
|
}
|
|
146
146
|
));
|
|
147
147
|
Ie.displayName = "Avatar";
|
|
148
|
-
const
|
|
148
|
+
const _e = b(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
149
149
|
he.Image,
|
|
150
150
|
{
|
|
151
151
|
ref: n,
|
|
@@ -153,8 +153,8 @@ const je = b(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
|
153
153
|
...r
|
|
154
154
|
}
|
|
155
155
|
));
|
|
156
|
-
|
|
157
|
-
const
|
|
156
|
+
_e.displayName = "AvatarImage";
|
|
157
|
+
const je = b(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
158
158
|
he.Fallback,
|
|
159
159
|
{
|
|
160
160
|
ref: n,
|
|
@@ -165,7 +165,7 @@ const _e = b(({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
|
165
165
|
...r
|
|
166
166
|
}
|
|
167
167
|
));
|
|
168
|
-
|
|
168
|
+
je.displayName = "AvatarFallback";
|
|
169
169
|
const kt = pe(
|
|
170
170
|
"inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-medium",
|
|
171
171
|
{
|
|
@@ -224,7 +224,7 @@ const Tt = {
|
|
|
224
224
|
iconClassName: "text-error"
|
|
225
225
|
}
|
|
226
226
|
};
|
|
227
|
-
function
|
|
227
|
+
function xa({
|
|
228
228
|
variant: t = "info",
|
|
229
229
|
title: r,
|
|
230
230
|
children: n,
|
|
@@ -265,7 +265,7 @@ const It = b(
|
|
|
265
265
|
)
|
|
266
266
|
);
|
|
267
267
|
It.displayName = "Card";
|
|
268
|
-
const
|
|
268
|
+
const _t = b(
|
|
269
269
|
({ className: t, ...r }, n) => /* @__PURE__ */ e(
|
|
270
270
|
"div",
|
|
271
271
|
{
|
|
@@ -275,11 +275,11 @@ const jt = b(
|
|
|
275
275
|
}
|
|
276
276
|
)
|
|
277
277
|
);
|
|
278
|
-
|
|
279
|
-
const
|
|
278
|
+
_t.displayName = "CardHeader";
|
|
279
|
+
const jt = b(
|
|
280
280
|
({ className: t, ...r }, n) => /* @__PURE__ */ e("h2", { ref: n, className: l("text-sm font-semibold text-fg", t), ...r })
|
|
281
281
|
);
|
|
282
|
-
|
|
282
|
+
jt.displayName = "CardTitle";
|
|
283
283
|
const Pt = b(({ className: t, ...r }, n) => /* @__PURE__ */ e("p", { ref: n, className: l("text-sm text-muted", t), ...r }));
|
|
284
284
|
Pt.displayName = "CardDescription";
|
|
285
285
|
const Mt = b(
|
|
@@ -420,8 +420,8 @@ function Gt({
|
|
|
420
420
|
children: c,
|
|
421
421
|
...m
|
|
422
422
|
}) {
|
|
423
|
-
const h = te(),
|
|
424
|
-
return /* @__PURE__ */ e(Le.Provider, { value: { name:
|
|
423
|
+
const h = te(), x = d ?? h;
|
|
424
|
+
return /* @__PURE__ */ e(Le.Provider, { value: { name: x, value: r, onChange: n, disabled: s }, children: /* @__PURE__ */ i("fieldset", { className: l("flex flex-col gap-6", u), ...m, children: [
|
|
425
425
|
/* @__PURE__ */ e("legend", { className: "sr-only", children: t }),
|
|
426
426
|
c
|
|
427
427
|
] }) });
|
|
@@ -437,7 +437,7 @@ function qt({
|
|
|
437
437
|
const c = ht(Le), m = te();
|
|
438
438
|
if (!c)
|
|
439
439
|
throw new Error("RadioCard must be rendered inside a RadioGroup");
|
|
440
|
-
const h = d || c.disabled,
|
|
440
|
+
const h = d || c.disabled, x = c.value === t;
|
|
441
441
|
return /* @__PURE__ */ i(
|
|
442
442
|
"label",
|
|
443
443
|
{
|
|
@@ -453,7 +453,7 @@ function qt({
|
|
|
453
453
|
type: "radio",
|
|
454
454
|
name: c.name,
|
|
455
455
|
value: t,
|
|
456
|
-
checked:
|
|
456
|
+
checked: x,
|
|
457
457
|
disabled: h,
|
|
458
458
|
onChange: () => {
|
|
459
459
|
var g;
|
|
@@ -495,7 +495,7 @@ function Na({
|
|
|
495
495
|
value: c,
|
|
496
496
|
onValueChange: m,
|
|
497
497
|
cancelLabel: h = "Cancel",
|
|
498
|
-
confirmLabel:
|
|
498
|
+
confirmLabel: x = "Continue",
|
|
499
499
|
onConfirm: g
|
|
500
500
|
}) {
|
|
501
501
|
var P;
|
|
@@ -533,7 +533,7 @@ function Na({
|
|
|
533
533
|
children: h
|
|
534
534
|
}
|
|
535
535
|
),
|
|
536
|
-
/* @__PURE__ */ e(w, { className: "flex-1", onClick: () => g == null ? void 0 : g(S), children:
|
|
536
|
+
/* @__PURE__ */ e(w, { className: "flex-1", onClick: () => g == null ? void 0 : g(S), children: x })
|
|
537
537
|
] })
|
|
538
538
|
]
|
|
539
539
|
}
|
|
@@ -609,7 +609,7 @@ const Vt = {
|
|
|
609
609
|
onClear: c,
|
|
610
610
|
value: m,
|
|
611
611
|
defaultValue: h,
|
|
612
|
-
error:
|
|
612
|
+
error: x = !1,
|
|
613
613
|
helperText: g,
|
|
614
614
|
id: I,
|
|
615
615
|
"aria-describedby": k,
|
|
@@ -625,7 +625,7 @@ const Vt = {
|
|
|
625
625
|
type: n,
|
|
626
626
|
disabled: S,
|
|
627
627
|
readOnly: y,
|
|
628
|
-
"aria-invalid":
|
|
628
|
+
"aria-invalid": x || void 0,
|
|
629
629
|
"aria-describedby": ae,
|
|
630
630
|
style: d || u || M ? {
|
|
631
631
|
paddingInlineStart: d ? `calc(var(--control-pad-x-${s}) + var(--control-icon-${s}) + var(--control-gap))` : void 0,
|
|
@@ -638,8 +638,8 @@ const Vt = {
|
|
|
638
638
|
"placeholder:text-[var(--input-placeholder)]",
|
|
639
639
|
"hover:border-[var(--input-border-hover)]",
|
|
640
640
|
"focus-visible:outline-none focus-visible:border-[var(--input-border-focus)] focus-visible:ring-2 focus-visible:ring-focus/30",
|
|
641
|
-
|
|
642
|
-
!
|
|
641
|
+
x && "border-error hover:border-error focus-visible:border-error focus-visible:ring-error/30",
|
|
642
|
+
!x && "border-[var(--input-border)]",
|
|
643
643
|
S && "cursor-not-allowed bg-[var(--input-bg-disabled)] opacity-60 hover:border-[var(--input-border)]",
|
|
644
644
|
y && "cursor-default focus-visible:ring-0",
|
|
645
645
|
t
|
|
@@ -691,7 +691,7 @@ const Vt = {
|
|
|
691
691
|
"p",
|
|
692
692
|
{
|
|
693
693
|
id: W,
|
|
694
|
-
className: l("mt-1.5 text-xs",
|
|
694
|
+
className: l("mt-1.5 text-xs", x ? "text-error" : "text-muted"),
|
|
695
695
|
children: g
|
|
696
696
|
}
|
|
697
697
|
) : null
|
|
@@ -1006,8 +1006,8 @@ function Ta({
|
|
|
1006
1006
|
}) {
|
|
1007
1007
|
return /* @__PURE__ */ i("div", { className: "flex items-center gap-3", children: [
|
|
1008
1008
|
/* @__PURE__ */ i(Ie, { className: "size-8", children: [
|
|
1009
|
-
n ? /* @__PURE__ */ e(
|
|
1010
|
-
/* @__PURE__ */ e(
|
|
1009
|
+
n ? /* @__PURE__ */ e(_e, { src: n, alt: "" }) : null,
|
|
1010
|
+
/* @__PURE__ */ e(je, { children: sa(t) })
|
|
1011
1011
|
] }),
|
|
1012
1012
|
/* @__PURE__ */ i("div", { className: "min-w-0", children: [
|
|
1013
1013
|
/* @__PURE__ */ e("div", { className: "truncate font-medium text-table-header-active", children: t }),
|
|
@@ -1025,7 +1025,7 @@ function Ia({
|
|
|
1025
1025
|
search: c,
|
|
1026
1026
|
filters: m,
|
|
1027
1027
|
toolbarStart: h,
|
|
1028
|
-
toolbarEnd:
|
|
1028
|
+
toolbarEnd: x,
|
|
1029
1029
|
tabs: g,
|
|
1030
1030
|
activeTab: I,
|
|
1031
1031
|
onTabChange: k,
|
|
@@ -1043,16 +1043,16 @@ function Ia({
|
|
|
1043
1043
|
panelClassName: Fe,
|
|
1044
1044
|
className: He
|
|
1045
1045
|
}) {
|
|
1046
|
-
const [fe,
|
|
1046
|
+
const [fe, ve] = D(
|
|
1047
1047
|
() => Object.fromEntries(
|
|
1048
1048
|
r.filter((a) => a.defaultHidden && !a.required).map((a) => [a.id, !0])
|
|
1049
1049
|
)
|
|
1050
1050
|
), [f, $e] = D(
|
|
1051
1051
|
O ?? null
|
|
1052
|
-
), [R, X] = D(0), [L, Ge] = D(B), [E, re] = D(/* @__PURE__ */ new Set()), [qe, ne] = D([]),
|
|
1052
|
+
), [R, X] = D(0), [L, Ge] = D(B), [E, re] = D(/* @__PURE__ */ new Set()), [qe, ne] = D([]), _ = r.filter((a) => !fe[a.id]), xe = r.filter((a) => fe[a.id] && !a.required), le = (m ?? []).filter((a) => qe.includes(a.id)), Ve = (m ?? []).map((a) => `${a.id}:${a.value.join(",")}`).join("|"), K = we(() => {
|
|
1053
1053
|
let a = t;
|
|
1054
1054
|
for (const p of m ?? [])
|
|
1055
|
-
p.value.length > 0 && (a = a.filter((
|
|
1055
|
+
p.value.length > 0 && (a = a.filter((v) => p.match(v, p.value)));
|
|
1056
1056
|
if (!c || !c.value.trim()) return a;
|
|
1057
1057
|
const o = c.value.trim().toLowerCase();
|
|
1058
1058
|
return a.filter((p) => c.keys(p).toLowerCase().includes(o));
|
|
@@ -1061,8 +1061,8 @@ function Ia({
|
|
|
1061
1061
|
const a = r.find((p) => p.id === f.id);
|
|
1062
1062
|
if (!(a != null && a.sortValue)) return K;
|
|
1063
1063
|
const o = f.dir === "asc" ? 1 : -1;
|
|
1064
|
-
return [...K].sort((p,
|
|
1065
|
-
const $ = a.sortValue(p), G = a.sortValue(
|
|
1064
|
+
return [...K].sort((p, v) => {
|
|
1065
|
+
const $ = a.sortValue(p), G = a.sortValue(v);
|
|
1066
1066
|
return $ == null && G == null ? 0 : $ == null ? 1 : G == null ? -1 : typeof $ == "number" && typeof G == "number" ? ($ - G) * o : String($).localeCompare(String(G)) * o;
|
|
1067
1067
|
});
|
|
1068
1068
|
}, [K, f, r]), H = Math.max(1, Math.ceil(F.length / L));
|
|
@@ -1071,21 +1071,21 @@ function Ia({
|
|
|
1071
1071
|
}, [c == null ? void 0 : c.value, L, f == null ? void 0 : f.id, f == null ? void 0 : f.dir, I, Ve]), Ce(() => {
|
|
1072
1072
|
R > H - 1 && X(H - 1);
|
|
1073
1073
|
}, [R, H]);
|
|
1074
|
-
const J = R * L,
|
|
1074
|
+
const J = R * L, j = F.slice(J, J + L), Oe = (a) => {
|
|
1075
1075
|
a.sortable && $e(
|
|
1076
1076
|
(o) => (o == null ? void 0 : o.id) === a.id ? o.dir === "asc" ? { id: a.id, dir: "desc" } : null : { id: a.id, dir: "asc" }
|
|
1077
1077
|
);
|
|
1078
|
-
}, ge =
|
|
1078
|
+
}, ge = j.length > 0 && j.every((a) => E.has(n(a))), We = j.some((a) => E.has(n(a))), Ue = t.filter((a) => E.has(n(a))), Xe = () => {
|
|
1079
1079
|
re((a) => {
|
|
1080
1080
|
const o = new Set(a);
|
|
1081
|
-
return ge ?
|
|
1081
|
+
return ge ? j.forEach((p) => o.delete(n(p))) : j.forEach((p) => o.add(n(p))), o;
|
|
1082
1082
|
});
|
|
1083
1083
|
}, Ke = (a) => {
|
|
1084
1084
|
re((o) => {
|
|
1085
1085
|
const p = new Set(o);
|
|
1086
1086
|
return p.has(a) ? p.delete(a) : p.add(a), p;
|
|
1087
1087
|
});
|
|
1088
|
-
}, Je = !!(c || m != null && m.length || h ||
|
|
1088
|
+
}, Je = !!(c || m != null && m.length || h || x), Qe = _.some((a) => a.width), Ye = _.length > 1 ? 70 / (_.length - 1) : 100, Ze = _.map((a, o) => a.width ? a.width : Qe ? "auto" : `${o === 0 ? 30 : Ye}%`), Ne = [
|
|
1089
1089
|
...y ? ["2.75rem"] : [],
|
|
1090
1090
|
...Ze,
|
|
1091
1091
|
...N ? ["11rem"] : []
|
|
@@ -1140,12 +1140,12 @@ function Ia({
|
|
|
1140
1140
|
) }),
|
|
1141
1141
|
/* @__PURE__ */ i(Y, { align: "end", className: "w-54", children: [
|
|
1142
1142
|
/* @__PURE__ */ e(ee, { className: "text-[13px]", children: "Active columns" }),
|
|
1143
|
-
|
|
1143
|
+
_.map((a) => /* @__PURE__ */ i(
|
|
1144
1144
|
Z,
|
|
1145
1145
|
{
|
|
1146
1146
|
checked: !0,
|
|
1147
1147
|
disabled: a.required,
|
|
1148
|
-
onCheckedChange: () =>
|
|
1148
|
+
onCheckedChange: () => ve((o) => ({ ...o, [a.id]: !0 })),
|
|
1149
1149
|
onSelect: (o) => o.preventDefault(),
|
|
1150
1150
|
className: "justify-between",
|
|
1151
1151
|
children: [
|
|
@@ -1155,14 +1155,14 @@ function Ia({
|
|
|
1155
1155
|
},
|
|
1156
1156
|
a.id
|
|
1157
1157
|
)),
|
|
1158
|
-
|
|
1158
|
+
xe.length > 0 ? /* @__PURE__ */ i(De, { children: [
|
|
1159
1159
|
/* @__PURE__ */ e(ue, {}),
|
|
1160
1160
|
/* @__PURE__ */ e(ee, { className: "text-[13px]", children: "Available columns" }),
|
|
1161
|
-
|
|
1161
|
+
xe.map((a) => /* @__PURE__ */ e(
|
|
1162
1162
|
Z,
|
|
1163
1163
|
{
|
|
1164
1164
|
checked: !1,
|
|
1165
|
-
onCheckedChange: () =>
|
|
1165
|
+
onCheckedChange: () => ve((o) => ({ ...o, [a.id]: !1 })),
|
|
1166
1166
|
onSelect: (o) => o.preventDefault(),
|
|
1167
1167
|
children: a.header
|
|
1168
1168
|
},
|
|
@@ -1194,7 +1194,7 @@ function Ia({
|
|
|
1194
1194
|
a.id
|
|
1195
1195
|
)) })
|
|
1196
1196
|
] }) : null,
|
|
1197
|
-
|
|
1197
|
+
x ? /* @__PURE__ */ e("div", { className: "flex-0 sm:ml-auto [&_button]:h-8 [&_button]:rounded-[6px]", children: x }) : null
|
|
1198
1198
|
] }),
|
|
1199
1199
|
le.length > 0 ? /* @__PURE__ */ i("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
1200
1200
|
le.map((a) => /* @__PURE__ */ i(ie, { children: [
|
|
@@ -1225,9 +1225,9 @@ function Ia({
|
|
|
1225
1225
|
{
|
|
1226
1226
|
checked: p,
|
|
1227
1227
|
onCheckedChange: () => a.onChange(
|
|
1228
|
-
p ? a.value.filter((
|
|
1228
|
+
p ? a.value.filter((v) => v !== o.value) : [...a.value, o.value]
|
|
1229
1229
|
),
|
|
1230
|
-
onSelect: (
|
|
1230
|
+
onSelect: (v) => v.preventDefault(),
|
|
1231
1231
|
children: o.label
|
|
1232
1232
|
},
|
|
1233
1233
|
o.value
|
|
@@ -1312,18 +1312,22 @@ function Ia({
|
|
|
1312
1312
|
onCheckedChange: Xe
|
|
1313
1313
|
}
|
|
1314
1314
|
) }),
|
|
1315
|
-
|
|
1315
|
+
_.map((a) => /* @__PURE__ */ e(
|
|
1316
1316
|
"th",
|
|
1317
1317
|
{
|
|
1318
1318
|
className: l(la, a.align === "right" && "text-right", a.className),
|
|
1319
1319
|
children: a.sortable ? /* @__PURE__ */ i(
|
|
1320
|
-
|
|
1320
|
+
w,
|
|
1321
1321
|
{
|
|
1322
1322
|
type: "button",
|
|
1323
|
+
variant: "ghost",
|
|
1324
|
+
size: "xs",
|
|
1323
1325
|
"aria-label": `Sort by ${a.header}`,
|
|
1324
1326
|
onClick: () => Oe(a),
|
|
1325
1327
|
className: l(
|
|
1326
|
-
"
|
|
1328
|
+
"h-auto gap-1.5 rounded-none px-0 py-0 text-[0.8125rem] text-table-header transition-colors [&_svg]:size-3.5",
|
|
1329
|
+
"hover:bg-transparent hover:text-table-header-active hover:shadow-none",
|
|
1330
|
+
"active:scale-100 active:bg-transparent active:shadow-none",
|
|
1327
1331
|
(f == null ? void 0 : f.id) === a.id && "text-table-header-active"
|
|
1328
1332
|
),
|
|
1329
1333
|
children: [
|
|
@@ -1346,7 +1350,7 @@ function Ia({
|
|
|
1346
1350
|
d.description ? /* @__PURE__ */ e("p", { className: "mx-auto max-w-md text-base leading-relaxed text-table-muted", children: d.description }) : null
|
|
1347
1351
|
] }),
|
|
1348
1352
|
d.action
|
|
1349
|
-
] }) :
|
|
1353
|
+
] }) : j.length === 0 ? /* @__PURE__ */ e(
|
|
1350
1354
|
ea,
|
|
1351
1355
|
{
|
|
1352
1356
|
icon: u == null ? void 0 : u.icon,
|
|
@@ -1358,10 +1362,10 @@ function Ia({
|
|
|
1358
1362
|
/* @__PURE__ */ e("colgroup", { children: Ne.map((a, o) => /* @__PURE__ */ e("col", { style: { width: a } }, o)) }),
|
|
1359
1363
|
/* @__PURE__ */ e("thead", { className: "sr-only", children: /* @__PURE__ */ i("tr", { children: [
|
|
1360
1364
|
y && /* @__PURE__ */ e("th", { scope: "col", children: "Select" }),
|
|
1361
|
-
|
|
1365
|
+
_.map((a) => /* @__PURE__ */ e("th", { scope: "col", "aria-sort": et(a), children: a.header }, a.id)),
|
|
1362
1366
|
N && /* @__PURE__ */ e("th", { scope: "col", children: "Actions" })
|
|
1363
1367
|
] }) }),
|
|
1364
|
-
/* @__PURE__ */ e(Yt, { children:
|
|
1368
|
+
/* @__PURE__ */ e(Yt, { children: j.map((a) => {
|
|
1365
1369
|
const o = n(a), p = E.has(o);
|
|
1366
1370
|
return /* @__PURE__ */ i(
|
|
1367
1371
|
Zt,
|
|
@@ -1370,7 +1374,7 @@ function Ia({
|
|
|
1370
1374
|
onClick: A ? () => A(a) : void 0,
|
|
1371
1375
|
className: A ? "cursor-pointer" : void 0,
|
|
1372
1376
|
children: [
|
|
1373
|
-
y && /* @__PURE__ */ e(de, { className: "w-11 px-4", onClick: (
|
|
1377
|
+
y && /* @__PURE__ */ e(de, { className: "w-11 px-4", onClick: (v) => v.stopPropagation(), children: /* @__PURE__ */ e(
|
|
1374
1378
|
ce,
|
|
1375
1379
|
{
|
|
1376
1380
|
"aria-label": "Select row",
|
|
@@ -1378,16 +1382,16 @@ function Ia({
|
|
|
1378
1382
|
onCheckedChange: () => Ke(o)
|
|
1379
1383
|
}
|
|
1380
1384
|
) }),
|
|
1381
|
-
|
|
1385
|
+
_.map((v) => /* @__PURE__ */ e(
|
|
1382
1386
|
de,
|
|
1383
1387
|
{
|
|
1384
|
-
"data-numeric":
|
|
1385
|
-
className: l(
|
|
1386
|
-
children:
|
|
1388
|
+
"data-numeric": v.numeric ? "" : void 0,
|
|
1389
|
+
className: l(v.align === "right" && "text-right", v.className),
|
|
1390
|
+
children: v.cell(a)
|
|
1387
1391
|
},
|
|
1388
|
-
|
|
1392
|
+
v.id
|
|
1389
1393
|
)),
|
|
1390
|
-
N && /* @__PURE__ */ e(de, { className: "w-44 px-4 text-right", onClick: (
|
|
1394
|
+
N && /* @__PURE__ */ e(de, { className: "w-44 px-4 text-right", onClick: (v) => v.stopPropagation(), children: N(a) })
|
|
1391
1395
|
]
|
|
1392
1396
|
},
|
|
1393
1397
|
o
|
|
@@ -1436,7 +1440,7 @@ function Ia({
|
|
|
1436
1440
|
] })
|
|
1437
1441
|
] });
|
|
1438
1442
|
}
|
|
1439
|
-
function
|
|
1443
|
+
function _a({ icon: t, title: r, description: n, action: s, className: d }) {
|
|
1440
1444
|
return /* @__PURE__ */ i(
|
|
1441
1445
|
"div",
|
|
1442
1446
|
{
|
|
@@ -1455,7 +1459,7 @@ function ja({ icon: t, title: r, description: n, action: s, className: d }) {
|
|
|
1455
1459
|
}
|
|
1456
1460
|
);
|
|
1457
1461
|
}
|
|
1458
|
-
function
|
|
1462
|
+
function ja({ className: t, ...r }) {
|
|
1459
1463
|
return /* @__PURE__ */ e(
|
|
1460
1464
|
"kbd",
|
|
1461
1465
|
{
|
|
@@ -1575,19 +1579,19 @@ const La = q.Provider, Ea = q.Root, Aa = q.Trigger, da = b(({ className: t, side
|
|
|
1575
1579
|
) }));
|
|
1576
1580
|
da.displayName = "TooltipContent";
|
|
1577
1581
|
export {
|
|
1578
|
-
|
|
1582
|
+
va as AgentPrompt,
|
|
1579
1583
|
Ie as Avatar,
|
|
1580
|
-
|
|
1581
|
-
|
|
1584
|
+
je as AvatarFallback,
|
|
1585
|
+
_e as AvatarImage,
|
|
1582
1586
|
Dt as Badge,
|
|
1583
1587
|
w as Button,
|
|
1584
|
-
|
|
1588
|
+
xa as Callout,
|
|
1585
1589
|
It as Card,
|
|
1586
1590
|
Mt as CardContent,
|
|
1587
1591
|
Pt as CardDescription,
|
|
1588
1592
|
Lt as CardFooter,
|
|
1589
|
-
|
|
1590
|
-
|
|
1593
|
+
_t as CardHeader,
|
|
1594
|
+
jt as CardTitle,
|
|
1591
1595
|
ce as Checkbox,
|
|
1592
1596
|
Na as ChoiceDialog,
|
|
1593
1597
|
ya as CodeBlock,
|
|
@@ -1612,9 +1616,9 @@ export {
|
|
|
1612
1616
|
Ca as DropdownMenuPortal,
|
|
1613
1617
|
ue as DropdownMenuSeparator,
|
|
1614
1618
|
oe as DropdownMenuTrigger,
|
|
1615
|
-
|
|
1619
|
+
_a as EmptyState,
|
|
1616
1620
|
Ee as Input,
|
|
1617
|
-
|
|
1621
|
+
ja as Kbd,
|
|
1618
1622
|
ia as Label,
|
|
1619
1623
|
qt as RadioCard,
|
|
1620
1624
|
Gt as RadioGroup,
|
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/card.tsx","../src/checkbox.tsx","../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.tsx","../src/table-empty-state.tsx","../src/table-surface.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-none focus-visible:ring-2 focus-visible:ring-focus/40 focus-visible:ring-offset-1 focus-visible:ring-offset-canvas 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=\"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 { forwardRef, type HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-card border border-line bg-surface shadow-xs\",\n className,\n )}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-1 border-b border-line px-5 py-4\", className)}\n {...props}\n />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h2 ref={ref} className={cn(\"text-sm font-semibold text-fg\", className)} {...props} />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted\", className)} {...props} />\n));\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-5 py-4\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-3 border-t border-line px-5 py-3\", className)}\n {...props}\n />\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-surface 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 data-[state=checked]:bg-primary data-[state=checked]:text-primary-fg\",\n \"data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-fg\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\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","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-overlay backdrop-blur-[1px] data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0\" />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-1/2 top-1/2 z-50 flex max-h-[min(85vh,44rem)] w-full max-w-[22.4rem] -translate-x-1/2 -translate-y-1/2 flex-col gap-0 overflow-hidden\",\n \"rounded-2xl border border-[var(--dialog-shell-border)] bg-[var(--dialog-shell-bg)] pb-3 shadow-[var(--dialog-shell-shadow)] sm:pb-4\",\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-[state=open]:slide-in-from-top-2 duration-200 ease-out\",\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 </DialogPrimitive.Portal>\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({ className, ...props }: 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-[var(--dialog-panel-border)] bg-[var(--dialog-panel-bg)] shadow-[var(--dialog-panel-shadow)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Scrollable region inside `DialogPanel`; keeps the footer pinned. */\nexport function DialogBody({ className, ...props }: 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({ className, ...props }: 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-[var(--dialog-panel-border)] px-5 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({ className, ...props }: 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-0.5 grid size-4.5 shrink-0 place-items-center rounded-full border-2 border-transparent bg-line-strong transition-colors\",\n \"peer-checked:border-[5px] 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 { Button } from \"./button\";\nimport { cn } from \"./utils\";\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 <div\n className={cn(\n \"overflow-hidden rounded-lg border border-line bg-canvas\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-2 border-b border-line px-3 py-2\">\n <span className=\"truncate text-xs font-medium text-subtle\">{label}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n leadingIcon={\n copied ? <Check className=\"text-success\" weight=\"bold\" /> : <Copy />\n }\n onClick={copy}\n >\n {copied ? \"Copied\" : \"Copy\"}\n </Button>\n </div>\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-fg\">\n <code>{code}</code>\n </pre>\n </div>\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-[var(--control-radius)] border bg-[var(--input-bg)] text-[var(--input-fg)] transition-colors\",\n HEIGHT[size],\n PAD_X[size],\n \"placeholder:text-[var(--input-placeholder)]\",\n \"hover:border-[var(--input-border-hover)]\",\n \"focus-visible:outline-none focus-visible:border-[var(--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-[var(--input-border)]\",\n disabled &&\n \"cursor-not-allowed bg-[var(--input-bg-disabled)] opacity-60 hover:border-[var(--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-[var(--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-[var(--input-placeholder)] transition-colors hover:text-[var(--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-[var(--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 = 6, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-surface p-1 shadow-md\",\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> & { inset?: boolean }\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-elevated 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 \"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-elevated\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\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 { forwardRef, type ComponentPropsWithoutRef, type ElementRef } 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 const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between gap-2 rounded-md border border-line bg-surface px-3 text-sm text-fg\",\n \"focus:outline-none focus:border-primary focus:ring-2 focus:ring-focus/30 disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:truncate\",\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>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-lg border border-line bg-surface p-1 shadow-md\",\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\">{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\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-elevated 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 { 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 { 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 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 /** 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 header,\n children,\n action,\n tone = \"default\",\n className,\n headerClassName,\n panelClassName,\n minHeight,\n}: TableSurfaceProps) {\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 ? (\n // Header rows must not inherit the body row hover surface.\n <div className={cn(\"[--table-row-hover:transparent]\", headerClassName)}>\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 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\nconst TOOLBAR_BUTTON =\n \"rounded-[6px] bg-surface text-fg shadow-xs ring-1 ring-line hover:bg-elevated hover:text-fg active:bg-elevated\";\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 size=\"sm\"\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=\"sm\"\n leadingIcon={<ColumnsIcon />}\n trailingIcon={<CaretDown />}\n className={TOOLBAR_BUTTON}\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=\"sm\"\n iconOnly\n aria-label=\"Add filter\"\n className={TOOLBAR_BUTTON}\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 ? (\n <div className=\"flex-0 sm:ml-auto [&_button]:h-8 [&_button]:rounded-[6px]\">\n {toolbarEnd}\n </div>\n ) : null}\n </div>\n )}\n\n {activeFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeFilters.map((filter) => (\n <DropdownMenu key={filter.id}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"rounded-[6px] bg-surface shadow-xs\"\n >\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\n onSelect={() => {\n filter.onChange([]);\n setActiveFilterIds((prev) => prev.filter((id) => id !== filter.id));\n }}\n >\n Clear filter\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\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=\"sm\"\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-[var(--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 aria-label={`Sort by ${c.header}`}\n onClick={() => toggleSort(c)}\n className={cn(\n \"inline-flex items-center gap-1.5 transition-colors hover:text-table-header-active\",\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-[var(--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-[22rem] flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\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-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=\"h-8 w-[110px]\">\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=\"sm\"\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=\"sm\"\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 { cn } from \"./utils\";\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 <div\n className={cn(\n \"flex flex-col items-center justify-center gap-4 rounded-card border border-line bg-surface px-6 py-16 text-center\",\n className,\n )}\n >\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 );\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 \"text-sm font-medium text-fg leading-none 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","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","CheckboxPrimitive","Minus","Dialog","DialogPrimitive","DialogTrigger","DialogClose","DialogContent","X","DialogPanel","DialogBody","DialogHeader","DialogFooter","DialogTitle","DialogDescription","RadioGroupContext","createContext","RadioGroup","label","value","onChange","name","generated","useId","groupName","RadioCard","description","badge","ctx","useContext","describedById","isDisabled","isChecked","_a","ChoiceDialog","open","onOpenChange","trigger","options","defaultValue","onValueChange","cancelLabel","confirmLabel","onConfirm","internal","setInternal","selected","next","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","TableContainer","TablePanel","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","TableEmptyState","action","SHELL_TONE","PANEL_TONE","isActionConfig","TableSurface","header","headerClassName","panelClassName","minHeight","actionNode","HEADER_CELL","TOOLBAR_BUTTON","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","useEffect","start","pageRows","toggleSort","prev","allSelected","someSelected","selectedRows","toggleAll","toggleOne","hasToolbar","anyExplicitWidth","restShare","dataWidths","i","colWidths","ariaSort","t","active","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/card.tsx","../src/checkbox.tsx","../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.tsx","../src/table-empty-state.tsx","../src/table-surface.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-none focus-visible:ring-2 focus-visible:ring-focus/40 focus-visible:ring-offset-1 focus-visible:ring-offset-canvas 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=\"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 { forwardRef, type HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-card border border-line bg-surface shadow-xs\",\n className,\n )}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-1 border-b border-line px-5 py-4\", className)}\n {...props}\n />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h2 ref={ref} className={cn(\"text-sm font-semibold text-fg\", className)} {...props} />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted\", className)} {...props} />\n));\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-5 py-4\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-3 border-t border-line px-5 py-3\", className)}\n {...props}\n />\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-surface 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 data-[state=checked]:bg-primary data-[state=checked]:text-primary-fg\",\n \"data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-fg\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\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","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-overlay backdrop-blur-[1px] data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0\" />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-1/2 top-1/2 z-50 flex max-h-[min(85vh,44rem)] w-full max-w-[22.4rem] -translate-x-1/2 -translate-y-1/2 flex-col gap-0 overflow-hidden\",\n \"rounded-2xl border border-[var(--dialog-shell-border)] bg-[var(--dialog-shell-bg)] pb-3 shadow-[var(--dialog-shell-shadow)] sm:pb-4\",\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-[state=open]:slide-in-from-top-2 duration-200 ease-out\",\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 </DialogPrimitive.Portal>\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({ className, ...props }: 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-[var(--dialog-panel-border)] bg-[var(--dialog-panel-bg)] shadow-[var(--dialog-panel-shadow)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Scrollable region inside `DialogPanel`; keeps the footer pinned. */\nexport function DialogBody({ className, ...props }: 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({ className, ...props }: 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-[var(--dialog-panel-border)] px-5 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({ className, ...props }: 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-0.5 grid size-4.5 shrink-0 place-items-center rounded-full border-2 border-transparent bg-line-strong transition-colors\",\n \"peer-checked:border-[5px] 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 { Button } from \"./button\";\nimport { cn } from \"./utils\";\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 <div\n className={cn(\n \"overflow-hidden rounded-lg border border-line bg-canvas\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-2 border-b border-line px-3 py-2\">\n <span className=\"truncate text-xs font-medium text-subtle\">{label}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n leadingIcon={\n copied ? <Check className=\"text-success\" weight=\"bold\" /> : <Copy />\n }\n onClick={copy}\n >\n {copied ? \"Copied\" : \"Copy\"}\n </Button>\n </div>\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-fg\">\n <code>{code}</code>\n </pre>\n </div>\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-[var(--control-radius)] border bg-[var(--input-bg)] text-[var(--input-fg)] transition-colors\",\n HEIGHT[size],\n PAD_X[size],\n \"placeholder:text-[var(--input-placeholder)]\",\n \"hover:border-[var(--input-border-hover)]\",\n \"focus-visible:outline-none focus-visible:border-[var(--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-[var(--input-border)]\",\n disabled &&\n \"cursor-not-allowed bg-[var(--input-bg-disabled)] opacity-60 hover:border-[var(--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-[var(--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-[var(--input-placeholder)] transition-colors hover:text-[var(--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-[var(--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 = 6, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-surface p-1 shadow-md\",\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> & { inset?: boolean }\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-elevated 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 \"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-elevated\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\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 { forwardRef, type ComponentPropsWithoutRef, type ElementRef } 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 const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between gap-2 rounded-md border border-line bg-surface px-3 text-sm text-fg\",\n \"focus:outline-none focus:border-primary focus:ring-2 focus:ring-focus/30 disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:truncate\",\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>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-lg border border-line bg-surface p-1 shadow-md\",\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\">{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\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-elevated 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 { 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 { 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 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 /** 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 header,\n children,\n action,\n tone = \"default\",\n className,\n headerClassName,\n panelClassName,\n minHeight,\n}: TableSurfaceProps) {\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 ? (\n // Header rows must not inherit the body row hover surface.\n <div className={cn(\"[--table-row-hover:transparent]\", headerClassName)}>\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 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\nconst TOOLBAR_BUTTON =\n \"rounded-[6px] bg-surface text-fg shadow-xs ring-1 ring-line hover:bg-elevated hover:text-fg active:bg-elevated\";\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 size=\"sm\"\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=\"sm\"\n leadingIcon={<ColumnsIcon />}\n trailingIcon={<CaretDown />}\n className={TOOLBAR_BUTTON}\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=\"sm\"\n iconOnly\n aria-label=\"Add filter\"\n className={TOOLBAR_BUTTON}\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 ? (\n <div className=\"flex-0 sm:ml-auto [&_button]:h-8 [&_button]:rounded-[6px]\">\n {toolbarEnd}\n </div>\n ) : null}\n </div>\n )}\n\n {activeFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeFilters.map((filter) => (\n <DropdownMenu key={filter.id}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"rounded-[6px] bg-surface shadow-xs\"\n >\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\n onSelect={() => {\n filter.onChange([]);\n setActiveFilterIds((prev) => prev.filter((id) => id !== filter.id));\n }}\n >\n Clear filter\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\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=\"sm\"\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-[var(--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-[var(--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-[22rem] flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\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-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=\"h-8 w-[110px]\">\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=\"sm\"\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=\"sm\"\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 { cn } from \"./utils\";\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 <div\n className={cn(\n \"flex flex-col items-center justify-center gap-4 rounded-card border border-line bg-surface px-6 py-16 text-center\",\n className,\n )}\n >\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 );\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 \"text-sm font-medium text-fg leading-none 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","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","CheckboxPrimitive","Minus","Dialog","DialogPrimitive","DialogTrigger","DialogClose","DialogContent","X","DialogPanel","DialogBody","DialogHeader","DialogFooter","DialogTitle","DialogDescription","RadioGroupContext","createContext","RadioGroup","label","value","onChange","name","generated","useId","groupName","RadioCard","description","badge","ctx","useContext","describedById","isDisabled","isChecked","_a","ChoiceDialog","open","onOpenChange","trigger","options","defaultValue","onValueChange","cancelLabel","confirmLabel","onConfirm","internal","setInternal","selected","next","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","TableContainer","TablePanel","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","TableEmptyState","action","SHELL_TONE","PANEL_TONE","isActionConfig","TableSurface","header","headerClassName","panelClassName","minHeight","actionNode","HEADER_CELL","TOOLBAR_BUTTON","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","useEffect","start","pageRows","toggleSort","prev","allSelected","someSelected","selectedRows","toggleAll","toggleOne","hasToolbar","anyExplicitWidth","restShare","dataWidths","i","colWidths","ariaSort","t","active","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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"}
|
package/package.json
CHANGED
package/src/data-table.tsx
CHANGED
|
@@ -581,12 +581,16 @@ export function DataTable<T>({
|
|
|
581
581
|
className={cn(HEADER_CELL, c.align === "right" && "text-right", c.className)}
|
|
582
582
|
>
|
|
583
583
|
{c.sortable ? (
|
|
584
|
-
<
|
|
584
|
+
<Button
|
|
585
585
|
type="button"
|
|
586
|
+
variant="ghost"
|
|
587
|
+
size="xs"
|
|
586
588
|
aria-label={`Sort by ${c.header}`}
|
|
587
589
|
onClick={() => toggleSort(c)}
|
|
588
590
|
className={cn(
|
|
589
|
-
"
|
|
591
|
+
"h-auto gap-1.5 rounded-none px-0 py-0 text-[0.8125rem] text-table-header transition-colors [&_svg]:size-3.5",
|
|
592
|
+
"hover:bg-transparent hover:text-table-header-active hover:shadow-none",
|
|
593
|
+
"active:scale-100 active:bg-transparent active:shadow-none",
|
|
590
594
|
sort?.id === c.id && "text-table-header-active",
|
|
591
595
|
)}
|
|
592
596
|
>
|
|
@@ -600,7 +604,7 @@ export function DataTable<T>({
|
|
|
600
604
|
) : (
|
|
601
605
|
<CaretUpDown className="size-3.5 opacity-50" />
|
|
602
606
|
)}
|
|
603
|
-
</
|
|
607
|
+
</Button>
|
|
604
608
|
) : (
|
|
605
609
|
c.header
|
|
606
610
|
)}
|