@craftzbay/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist-lib/components/patterns/AppShell.d.ts +9 -0
  4. package/dist-lib/components/patterns/Authentication.d.ts +45 -0
  5. package/dist-lib/components/patterns/DataTablePage.d.ts +1 -0
  6. package/dist-lib/components/patterns/FirstRunEmpty.d.ts +1 -0
  7. package/dist-lib/components/patterns/Onboarding.d.ts +1 -0
  8. package/dist-lib/components/patterns/Pricing.d.ts +1 -0
  9. package/dist-lib/components/patterns/RecordDetail.d.ts +1 -0
  10. package/dist-lib/components/patterns/Settings.d.ts +1 -0
  11. package/dist-lib/components/ui/Accordion.d.ts +21 -0
  12. package/dist-lib/components/ui/Alert.d.ts +35 -0
  13. package/dist-lib/components/ui/Avatar.d.ts +52 -0
  14. package/dist-lib/components/ui/Badge.d.ts +24 -0
  15. package/dist-lib/components/ui/Breadcrumbs.d.ts +31 -0
  16. package/dist-lib/components/ui/Button.d.ts +50 -0
  17. package/dist-lib/components/ui/Card.d.ts +37 -0
  18. package/dist-lib/components/ui/Checkbox.d.ts +28 -0
  19. package/dist-lib/components/ui/Combobox.d.ts +58 -0
  20. package/dist-lib/components/ui/CommandPalette.d.ts +109 -0
  21. package/dist-lib/components/ui/ContextMenu.d.ts +45 -0
  22. package/dist-lib/components/ui/DataGrid.d.ts +66 -0
  23. package/dist-lib/components/ui/DatePicker.d.ts +42 -0
  24. package/dist-lib/components/ui/Dialog.d.ts +62 -0
  25. package/dist-lib/components/ui/DropdownMenu.d.ts +47 -0
  26. package/dist-lib/components/ui/EmptyState.d.ts +31 -0
  27. package/dist-lib/components/ui/ErrorState.d.ts +29 -0
  28. package/dist-lib/components/ui/Form.d.ts +22 -0
  29. package/dist-lib/components/ui/IconButton.d.ts +34 -0
  30. package/dist-lib/components/ui/Input.d.ts +49 -0
  31. package/dist-lib/components/ui/Kbd.d.ts +16 -0
  32. package/dist-lib/components/ui/MultiSelect.d.ts +62 -0
  33. package/dist-lib/components/ui/Pagination.d.ts +32 -0
  34. package/dist-lib/components/ui/Popover.d.ts +16 -0
  35. package/dist-lib/components/ui/Progress.d.ts +40 -0
  36. package/dist-lib/components/ui/RadioGroup.d.ts +27 -0
  37. package/dist-lib/components/ui/ScrollArea.d.ts +13 -0
  38. package/dist-lib/components/ui/Select.d.ts +56 -0
  39. package/dist-lib/components/ui/Separator.d.ts +13 -0
  40. package/dist-lib/components/ui/Sheet.d.ts +46 -0
  41. package/dist-lib/components/ui/Sidebar.d.ts +67 -0
  42. package/dist-lib/components/ui/Skeleton.d.ts +26 -0
  43. package/dist-lib/components/ui/Slider.d.ts +33 -0
  44. package/dist-lib/components/ui/Spinner.d.ts +23 -0
  45. package/dist-lib/components/ui/Stepper.d.ts +34 -0
  46. package/dist-lib/components/ui/Switch.d.ts +33 -0
  47. package/dist-lib/components/ui/Table.d.ts +35 -0
  48. package/dist-lib/components/ui/Tabs.d.ts +32 -0
  49. package/dist-lib/components/ui/Textarea.d.ts +34 -0
  50. package/dist-lib/components/ui/Toast.d.ts +33 -0
  51. package/dist-lib/components/ui/Tooltip.d.ts +35 -0
  52. package/dist-lib/components/ui/TopNav.d.ts +33 -0
  53. package/dist-lib/hooks/use-media-query.d.ts +9 -0
  54. package/dist-lib/hooks/use-toast.d.ts +43 -0
  55. package/dist-lib/icons/index.d.ts +11 -0
  56. package/dist-lib/index.cjs +8 -0
  57. package/dist-lib/index.cjs.map +1 -0
  58. package/dist-lib/index.d.ts +58 -0
  59. package/dist-lib/index.js +4336 -0
  60. package/dist-lib/index.js.map +1 -0
  61. package/dist-lib/lib/cva.d.ts +6 -0
  62. package/dist-lib/lib/utils.d.ts +12 -0
  63. package/dist-lib/styles.css +1 -0
  64. package/package.json +118 -0
@@ -0,0 +1,4336 @@
1
+ import { clsx as ka } from "clsx";
2
+ import { twMerge as Ca } from "tailwind-merge";
3
+ import { useState as y, useEffect as ke, useCallback as ie, forwardRef as d, useId as W, useMemo as Ce, useContext as xe, createContext as Ye, useRef as yt } from "react";
4
+ import { AlertCircle as Sa, AlertTriangle as ve, ArrowDown as wt, ArrowLeft as kt, ArrowRight as Ne, ArrowUp as Ct, ArrowUpDown as St, Bell as Je, Calendar as zt, Check as J, CheckCircle2 as Se, ChevronDown as je, ChevronLeft as Ze, ChevronRight as le, ChevronUp as Tt, ChevronsLeft as et, ChevronsRight as tt, ChevronsUpDown as Fe, Circle as at, Copy as za, CornerDownLeft as Ta, CreditCard as It, Download as Mt, Edit2 as Dt, Ellipsis as Ia, ExternalLink as Pt, Eye as At, EyeOff as _t, Filter as jt, Folder as rt, GripVertical as Ma, HelpCircle as Da, Home as Ft, Info as nt, Link2 as Pa, Loader2 as Re, Lock as Rt, Mail as Bt, Menu as Aa, Minus as Lt, Moon as _a, MoreHorizontal as $t, Plus as _e, Search as Be, Settings as ot, Sun as ja, Trash2 as st, Upload as it, User as Ot, Users as Le, X as Y, XCircle as $e } from "lucide-react";
5
+ import { jsx as e, jsxs as s, Fragment as te } from "react/jsx-runtime";
6
+ import * as ye from "@radix-ui/react-accordion";
7
+ import { cva as G } from "class-variance-authority";
8
+ import { cva as Eo } from "class-variance-authority";
9
+ import * as qe from "@radix-ui/react-avatar";
10
+ import { Slot as Et } from "@radix-ui/react-slot";
11
+ import * as pt from "@radix-ui/react-checkbox";
12
+ import * as z from "@radix-ui/react-popover";
13
+ import { Command as I } from "cmdk";
14
+ import * as S from "@radix-ui/react-dialog";
15
+ import * as D from "@radix-ui/react-context-menu";
16
+ import * as P from "@radix-ui/react-dropdown-menu";
17
+ import { DayPicker as Gt } from "react-day-picker";
18
+ import * as Fa from "@radix-ui/react-label";
19
+ import { FormProvider as Ra, Controller as Ba, useFormContext as La } from "react-hook-form";
20
+ import * as M from "@radix-ui/react-select";
21
+ import * as ht from "@radix-ui/react-progress";
22
+ import * as Qe from "@radix-ui/react-radio-group";
23
+ import * as be from "@radix-ui/react-scroll-area";
24
+ import * as $a from "@radix-ui/react-separator";
25
+ import * as ze from "@radix-ui/react-slider";
26
+ import * as bt from "@radix-ui/react-switch";
27
+ import * as Oe from "@radix-ui/react-tabs";
28
+ import * as de from "@radix-ui/react-toast";
29
+ import * as we from "@radix-ui/react-tooltip";
30
+ function l(...n) {
31
+ return Ca(ka(n));
32
+ }
33
+ let xt = 0;
34
+ function Qn(n = "ds") {
35
+ return xt += 1, `${n}-${xt}`;
36
+ }
37
+ function Oa(n) {
38
+ const [t, a] = y(() => typeof window > "u" ? !1 : window.matchMedia(n).matches);
39
+ return ke(() => {
40
+ if (typeof window > "u") return;
41
+ const r = window.matchMedia(n), o = (i) => a(i.matches);
42
+ return a(r.matches), r.addEventListener("change", o), () => r.removeEventListener("change", o);
43
+ }, [n]), t;
44
+ }
45
+ function Xn() {
46
+ return Oa("(prefers-reduced-motion: reduce)");
47
+ }
48
+ const ne = {
49
+ toasts: [],
50
+ listeners: /* @__PURE__ */ new Set(),
51
+ emit() {
52
+ for (const n of this.listeners) n(this.toasts);
53
+ },
54
+ push(n) {
55
+ const t = n.id ?? `t_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`, a = { open: !0, duration: 5e3, variant: "default", ...n, id: t };
56
+ return this.toasts = [a, ...this.toasts].slice(0, 3), this.emit(), t;
57
+ },
58
+ dismiss(n) {
59
+ this.toasts = this.toasts.map((t) => t.id === n ? { ...t, open: !1 } : t), this.emit();
60
+ },
61
+ remove(n) {
62
+ this.toasts = this.toasts.filter((t) => t.id !== n), this.emit();
63
+ }
64
+ };
65
+ function Yn() {
66
+ const [n, t] = y(() => [...ne.toasts]);
67
+ ke(() => {
68
+ const i = (c) => t([...c]);
69
+ return ne.listeners.add(i), () => {
70
+ ne.listeners.delete(i);
71
+ };
72
+ }, []);
73
+ const a = ie((i) => ne.push(i), []), r = ie((i) => ne.dismiss(i), []), o = ie((i) => ne.remove(i), []);
74
+ return { toasts: n, push: a, dismiss: r, remove: o };
75
+ }
76
+ const Jn = (n) => ne.push(n), Zn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
77
+ __proto__: null,
78
+ AlertCircle: Sa,
79
+ AlertTriangle: ve,
80
+ ArrowDown: wt,
81
+ ArrowLeft: kt,
82
+ ArrowRight: Ne,
83
+ ArrowUp: Ct,
84
+ ArrowUpDown: St,
85
+ Bell: Je,
86
+ Calendar: zt,
87
+ Check: J,
88
+ CheckCircle2: Se,
89
+ ChevronDown: je,
90
+ ChevronLeft: Ze,
91
+ ChevronRight: le,
92
+ ChevronUp: Tt,
93
+ ChevronsLeft: et,
94
+ ChevronsRight: tt,
95
+ ChevronsUpDown: Fe,
96
+ Circle: at,
97
+ Copy: za,
98
+ CornerDownLeft: Ta,
99
+ CreditCard: It,
100
+ Download: Mt,
101
+ Edit2: Dt,
102
+ Ellipsis: Ia,
103
+ ExternalLink: Pt,
104
+ Eye: At,
105
+ EyeOff: _t,
106
+ Filter: jt,
107
+ Folder: rt,
108
+ GripVertical: Ma,
109
+ HelpCircle: Da,
110
+ Home: Ft,
111
+ Info: nt,
112
+ Link2: Pa,
113
+ Loader2: Re,
114
+ Lock: Rt,
115
+ Mail: Bt,
116
+ Menu: Aa,
117
+ Minus: Lt,
118
+ Moon: _a,
119
+ MoreHorizontal: $t,
120
+ Plus: _e,
121
+ Search: Be,
122
+ Settings: ot,
123
+ Sun: ja,
124
+ Trash2: st,
125
+ Upload: it,
126
+ User: Ot,
127
+ Users: Le,
128
+ X: Y,
129
+ XCircle: $e
130
+ }, Symbol.toStringTag, { value: "Module" })), eo = ye.Root, Ea = d(function({ className: t, ...a }, r) {
131
+ return /* @__PURE__ */ e(ye.Item, { ref: r, className: l("border-b border-border", t), ...a });
132
+ });
133
+ Ea.displayName = "AccordionItem";
134
+ const Ga = d(function({ className: t, children: a, ...r }, o) {
135
+ return /* @__PURE__ */ e(ye.Header, { className: "flex", children: /* @__PURE__ */ s(
136
+ ye.Trigger,
137
+ {
138
+ ref: o,
139
+ className: l(
140
+ "flex flex-1 items-center justify-between gap-2 py-4 text-left text-sm font-medium text-foreground",
141
+ "outline-none transition-colors duration-[var(--duration-fast)]",
142
+ "hover:text-accent",
143
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
144
+ "[&[data-state=open]>svg]:rotate-180",
145
+ t
146
+ ),
147
+ ...r,
148
+ children: [
149
+ a,
150
+ /* @__PURE__ */ e(
151
+ je,
152
+ {
153
+ className: "size-4 shrink-0 text-foreground-subtle transition-transform duration-[var(--duration-base)]",
154
+ "aria-hidden": !0
155
+ }
156
+ )
157
+ ]
158
+ }
159
+ ) });
160
+ });
161
+ Ga.displayName = "AccordionTrigger";
162
+ const Va = d(function({ className: t, children: a, ...r }, o) {
163
+ return /* @__PURE__ */ e(
164
+ ye.Content,
165
+ {
166
+ ref: o,
167
+ className: l(
168
+ "overflow-hidden text-sm text-foreground-muted",
169
+ "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
170
+ ),
171
+ ...r,
172
+ children: /* @__PURE__ */ e("div", { className: l("pb-4 pt-0", t), children: a })
173
+ }
174
+ );
175
+ });
176
+ Va.displayName = "AccordionContent";
177
+ const Ha = G(
178
+ ["relative flex w-full gap-3 rounded-lg border p-4", "text-sm"],
179
+ {
180
+ variants: {
181
+ variant: {
182
+ default: "border-border bg-background-subtle text-foreground",
183
+ info: "border-info-border-soft bg-info-soft text-info-text",
184
+ success: "border-success-border-soft bg-success-soft text-success-text",
185
+ warning: "border-warning-border-soft bg-warning-soft text-warning-text",
186
+ danger: "border-danger-border-soft bg-danger-soft text-danger-text"
187
+ }
188
+ },
189
+ defaultVariants: { variant: "default" }
190
+ }
191
+ ), Wa = {
192
+ default: null,
193
+ info: /* @__PURE__ */ e(nt, { className: "size-4 shrink-0 mt-0.5", "aria-hidden": !0 }),
194
+ success: /* @__PURE__ */ e(Se, { className: "size-4 shrink-0 mt-0.5", "aria-hidden": !0 }),
195
+ warning: /* @__PURE__ */ e(ve, { className: "size-4 shrink-0 mt-0.5", "aria-hidden": !0 }),
196
+ danger: /* @__PURE__ */ e($e, { className: "size-4 shrink-0 mt-0.5", "aria-hidden": !0 })
197
+ }, Ee = d(function({ className: t, variant: a = "default", title: r, dismissible: o, onDismiss: i, icon: c, children: u, ...m }, f) {
198
+ const [p, b] = y(!0);
199
+ if (!p) return null;
200
+ const g = () => {
201
+ b(!1), i == null || i();
202
+ }, h = c === !1 ? null : c ?? Wa[a ?? "default"];
203
+ return /* @__PURE__ */ s("div", { ref: f, role: "alert", className: l(Ha({ variant: a }), t), ...m, children: [
204
+ h,
205
+ /* @__PURE__ */ s("div", { className: "flex-1 min-w-0", children: [
206
+ r && /* @__PURE__ */ e("h5", { className: "font-medium leading-tight mb-1", children: r }),
207
+ /* @__PURE__ */ e("div", { className: "text-sm leading-relaxed [&_p]:leading-relaxed", children: u })
208
+ ] }),
209
+ o && /* @__PURE__ */ e(
210
+ "button",
211
+ {
212
+ type: "button",
213
+ "aria-label": "Dismiss",
214
+ onClick: g,
215
+ className: l(
216
+ "inline-flex size-6 shrink-0 items-center justify-center rounded-md",
217
+ "hover:bg-current/10 outline-none",
218
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
219
+ ),
220
+ children: /* @__PURE__ */ e(Y, { className: "size-3.5", "aria-hidden": !0 })
221
+ }
222
+ )
223
+ ] });
224
+ });
225
+ Ee.displayName = "Alert";
226
+ const Vt = {
227
+ xs: "size-5 text-[10px]",
228
+ sm: "size-6 text-xs",
229
+ md: "size-8 text-xs",
230
+ lg: "size-10 text-sm",
231
+ xl: "size-12 text-base"
232
+ }, Ua = G(
233
+ [
234
+ "relative inline-flex shrink-0 overflow-hidden rounded-full",
235
+ "bg-background-muted text-foreground-muted"
236
+ ],
237
+ {
238
+ variants: {
239
+ size: Vt
240
+ },
241
+ defaultVariants: { size: "md" }
242
+ }
243
+ ), Ka = {
244
+ online: "bg-success",
245
+ busy: "bg-danger",
246
+ away: "bg-warning",
247
+ offline: "bg-foreground-subtle"
248
+ }, H = d(
249
+ function({ className: t, size: a, src: r, alt: o, fallback: i, status: c, ...u }, m) {
250
+ return /* @__PURE__ */ s(qe.Root, { ref: m, className: l(Ua({ size: a }), t), ...u, children: [
251
+ r && /* @__PURE__ */ e(
252
+ qe.Image,
253
+ {
254
+ src: r,
255
+ alt: o ?? "",
256
+ className: "aspect-square size-full object-cover"
257
+ }
258
+ ),
259
+ /* @__PURE__ */ e(
260
+ qe.Fallback,
261
+ {
262
+ delayMs: r ? 200 : 0,
263
+ className: "flex size-full items-center justify-center bg-background-muted font-medium uppercase",
264
+ children: i ?? "?"
265
+ }
266
+ ),
267
+ c && /* @__PURE__ */ e(
268
+ "span",
269
+ {
270
+ "aria-label": `Status: ${c}`,
271
+ className: l(
272
+ "absolute bottom-0 right-0 block size-1/4 rounded-full ring-2 ring-background",
273
+ Ka[c]
274
+ )
275
+ }
276
+ )
277
+ ] });
278
+ }
279
+ );
280
+ H.displayName = "Avatar";
281
+ const qa = d(function({ max: t = 4, size: a = "md", className: r, children: o, ...i }, c) {
282
+ const u = Array.isArray(o) ? o : [o], m = u.slice(0, t), f = u.length - m.length;
283
+ return /* @__PURE__ */ s("div", { ref: c, className: l("flex items-center -space-x-2", r), ...i, children: [
284
+ m.map((p, b) => /* @__PURE__ */ e("div", { className: "ring-2 ring-background rounded-full", children: p }, b)),
285
+ f > 0 && /* @__PURE__ */ s(
286
+ "div",
287
+ {
288
+ className: l(
289
+ "inline-flex items-center justify-center rounded-full bg-background-muted text-foreground-muted ring-2 ring-background",
290
+ Vt[a],
291
+ "font-medium"
292
+ ),
293
+ "aria-label": `${f} more`,
294
+ children: [
295
+ "+",
296
+ f
297
+ ]
298
+ }
299
+ )
300
+ ] });
301
+ });
302
+ qa.displayName = "AvatarGroup";
303
+ const Qa = G(
304
+ [
305
+ "inline-flex items-center gap-1 rounded-full px-2 py-0.5",
306
+ "text-xs font-medium whitespace-nowrap"
307
+ ],
308
+ {
309
+ variants: {
310
+ variant: {
311
+ subtle: "",
312
+ outline: "border bg-transparent"
313
+ },
314
+ tone: {
315
+ neutral: "",
316
+ accent: "",
317
+ success: "",
318
+ warning: "",
319
+ danger: "",
320
+ info: ""
321
+ }
322
+ },
323
+ compoundVariants: [
324
+ // Subtle — coloured fill + matching text.
325
+ { variant: "subtle", tone: "neutral", class: "bg-background-muted text-foreground-muted" },
326
+ { variant: "subtle", tone: "accent", class: "bg-accent-soft text-on-accent-soft" },
327
+ { variant: "subtle", tone: "success", class: "bg-success-soft text-success-text" },
328
+ { variant: "subtle", tone: "warning", class: "bg-warning-soft text-warning-text" },
329
+ { variant: "subtle", tone: "danger", class: "bg-danger-soft text-danger-text" },
330
+ { variant: "subtle", tone: "info", class: "bg-info-soft text-info-text" },
331
+ // Outline — coloured border + text, transparent fill.
332
+ { variant: "outline", tone: "neutral", class: "border-border text-foreground-muted" },
333
+ { variant: "outline", tone: "accent", class: "border-accent text-accent" },
334
+ { variant: "outline", tone: "success", class: "border-success-border-soft text-success-text" },
335
+ { variant: "outline", tone: "warning", class: "border-warning-border-soft text-warning-text" },
336
+ { variant: "outline", tone: "danger", class: "border-danger-border-soft text-danger-text" },
337
+ { variant: "outline", tone: "info", class: "border-info-border-soft text-info-text" }
338
+ ],
339
+ defaultVariants: { variant: "subtle", tone: "neutral" }
340
+ }
341
+ ), Xa = {
342
+ neutral: "bg-foreground-subtle",
343
+ accent: "bg-accent",
344
+ success: "bg-success",
345
+ warning: "bg-warning",
346
+ danger: "bg-danger",
347
+ info: "bg-info"
348
+ }, X = d(function({ className: t, variant: a, tone: r = "neutral", dot: o, children: i, ...c }, u) {
349
+ return /* @__PURE__ */ s("span", { ref: u, className: l(Qa({ variant: a, tone: r }), t), ...c, children: [
350
+ o && /* @__PURE__ */ e(
351
+ "span",
352
+ {
353
+ "aria-hidden": !0,
354
+ className: l("inline-block size-1.5 rounded-full", Xa[r ?? "neutral"])
355
+ }
356
+ ),
357
+ i
358
+ ] });
359
+ });
360
+ X.displayName = "Badge";
361
+ const Ht = d(function({ items: t, maxItems: a = 4, renderLink: r, className: o, ...i }, c) {
362
+ const m = t.length > a ? [t[0], { collapsed: !0 }, ...t.slice(-2)] : t;
363
+ return /* @__PURE__ */ e("nav", { ref: c, "aria-label": "Breadcrumb", className: l("text-sm", o), ...i, children: /* @__PURE__ */ e("ol", { className: "flex flex-wrap items-center gap-1.5 text-foreground-subtle", children: m.map((f, p) => {
364
+ const b = p === m.length - 1;
365
+ if ("collapsed" in f)
366
+ return /* @__PURE__ */ s("li", { className: "flex items-center gap-1.5", children: [
367
+ /* @__PURE__ */ e($t, { className: "size-4", "aria-hidden": !0 }),
368
+ /* @__PURE__ */ e(le, { className: "size-3.5", "aria-hidden": !0 })
369
+ ] }, `ellipsis-${p}`);
370
+ const g = f, h = b ? /* @__PURE__ */ e("span", { "aria-current": "page", className: "font-medium text-foreground", children: g.label }) : g.href ? r ? r(g.href, g.label) : /* @__PURE__ */ e(
371
+ "a",
372
+ {
373
+ href: g.href,
374
+ className: "hover:text-foreground transition-colors duration-[var(--duration-fast)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm",
375
+ children: g.label
376
+ }
377
+ ) : /* @__PURE__ */ e("span", { children: g.label });
378
+ return /* @__PURE__ */ s("li", { className: "flex items-center gap-1.5", children: [
379
+ h,
380
+ !b && /* @__PURE__ */ e(le, { className: "size-3.5", "aria-hidden": !0 })
381
+ ] }, p);
382
+ }) }) });
383
+ });
384
+ Ht.displayName = "Breadcrumbs";
385
+ const Ya = G(
386
+ [
387
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap",
388
+ "rounded-md text-sm font-medium",
389
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
390
+ "outline-none",
391
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
392
+ "focus-visible:ring-offset-background",
393
+ "disabled:pointer-events-none disabled:opacity-50",
394
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0"
395
+ ],
396
+ {
397
+ variants: {
398
+ variant: {
399
+ primary: [
400
+ "bg-accent text-on-accent",
401
+ "hover:bg-accent-700",
402
+ "active:bg-accent-800"
403
+ ],
404
+ secondary: [
405
+ "bg-background-muted text-foreground border border-border",
406
+ "hover:bg-neutral-200 dark:hover:bg-neutral-800",
407
+ "active:bg-neutral-300 dark:active:bg-neutral-700"
408
+ ],
409
+ outline: [
410
+ "border border-border bg-transparent text-foreground",
411
+ "hover:bg-background-muted",
412
+ "active:bg-background-subtle"
413
+ ],
414
+ ghost: [
415
+ "bg-transparent text-foreground",
416
+ "hover:bg-background-muted",
417
+ "active:bg-background-subtle"
418
+ ],
419
+ destructive: [
420
+ "bg-danger text-on-danger",
421
+ "hover:bg-danger-700",
422
+ "active:bg-danger-800"
423
+ ],
424
+ link: [
425
+ "bg-transparent text-accent underline-offset-4 px-0",
426
+ "hover:underline",
427
+ "active:text-accent-700"
428
+ ]
429
+ },
430
+ size: {
431
+ sm: "h-8 px-3 text-xs [&_svg]:size-4",
432
+ md: "h-9 px-3.5 text-sm [&_svg]:size-4",
433
+ lg: "h-10 px-4 text-sm [&_svg]:size-5",
434
+ icon: "h-9 w-9 [&_svg]:size-4"
435
+ }
436
+ },
437
+ compoundVariants: [
438
+ // The `link` variant ignores horizontal padding from the size variant.
439
+ { variant: "link", size: "sm", class: "h-auto px-0" },
440
+ { variant: "link", size: "md", class: "h-auto px-0" },
441
+ { variant: "link", size: "lg", class: "h-auto px-0" }
442
+ ],
443
+ defaultVariants: {
444
+ variant: "primary",
445
+ size: "md"
446
+ }
447
+ }
448
+ ), w = d(function({
449
+ className: t,
450
+ variant: a,
451
+ size: r,
452
+ asChild: o = !1,
453
+ loading: i = !1,
454
+ leadingIcon: c,
455
+ trailingIcon: u,
456
+ disabled: m,
457
+ children: f,
458
+ type: p = "button",
459
+ ...b
460
+ }, g) {
461
+ return /* @__PURE__ */ s(
462
+ o ? Et : "button",
463
+ {
464
+ ref: g,
465
+ type: o ? void 0 : p,
466
+ "aria-busy": i || void 0,
467
+ disabled: o ? void 0 : m || i,
468
+ "data-loading": i || void 0,
469
+ className: l(Ya({ variant: a, size: r }), t),
470
+ ...b,
471
+ children: [
472
+ i ? /* @__PURE__ */ e(Re, { className: "animate-spin", "aria-hidden": "true" }) : c,
473
+ f,
474
+ !i && u
475
+ ]
476
+ }
477
+ );
478
+ });
479
+ w.displayName = "Button";
480
+ const Ja = G(
481
+ [
482
+ "rounded-lg border bg-card text-card-foreground",
483
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]"
484
+ ],
485
+ {
486
+ variants: {
487
+ variant: {
488
+ default: "border-border",
489
+ interactive: "border-border hover:border-border-strong hover:bg-background-subtle cursor-pointer"
490
+ },
491
+ padding: {
492
+ none: "",
493
+ sm: "p-4",
494
+ md: "p-5",
495
+ lg: "p-6"
496
+ }
497
+ },
498
+ defaultVariants: {
499
+ variant: "default",
500
+ padding: "md"
501
+ }
502
+ }
503
+ ), j = d(function({ className: t, variant: a, padding: r, ...o }, i) {
504
+ return /* @__PURE__ */ e("div", { ref: i, className: l(Ja({ variant: a, padding: r }), t), ...o });
505
+ });
506
+ j.displayName = "Card";
507
+ const F = d(
508
+ function({ className: t, ...a }, r) {
509
+ return /* @__PURE__ */ e(
510
+ "div",
511
+ {
512
+ ref: r,
513
+ className: l("flex flex-col gap-1 pb-4", t),
514
+ ...a
515
+ }
516
+ );
517
+ }
518
+ );
519
+ F.displayName = "CardHeader";
520
+ const $ = d(
521
+ function({ className: t, ...a }, r) {
522
+ return /* @__PURE__ */ e(
523
+ "h3",
524
+ {
525
+ ref: r,
526
+ className: l("text-base font-semibold text-foreground leading-tight", t),
527
+ ...a
528
+ }
529
+ );
530
+ }
531
+ );
532
+ $.displayName = "CardTitle";
533
+ const Q = d(function({ className: t, ...a }, r) {
534
+ return /* @__PURE__ */ e(
535
+ "p",
536
+ {
537
+ ref: r,
538
+ className: l("text-sm text-foreground-muted", t),
539
+ ...a
540
+ }
541
+ );
542
+ });
543
+ Q.displayName = "CardDescription";
544
+ const R = d(
545
+ function({ className: t, ...a }, r) {
546
+ return /* @__PURE__ */ e("div", { ref: r, className: l("text-sm text-foreground", t), ...a });
547
+ }
548
+ );
549
+ R.displayName = "CardContent";
550
+ const Za = d(
551
+ function({ className: t, ...a }, r) {
552
+ return /* @__PURE__ */ e(
553
+ "div",
554
+ {
555
+ ref: r,
556
+ className: l("flex items-center gap-2 pt-4", t),
557
+ ...a
558
+ }
559
+ );
560
+ }
561
+ );
562
+ Za.displayName = "CardFooter";
563
+ const De = d(
564
+ function({ className: t, label: a, description: r, error: o, hideLabel: i, id: c, disabled: u, ...m }, f) {
565
+ const p = W(), b = c ?? p, g = r ? `${b}-desc` : void 0, h = o ? `${b}-error` : void 0;
566
+ return /* @__PURE__ */ s("div", { className: l("flex flex-col gap-1", t), children: [
567
+ /* @__PURE__ */ s("div", { className: "flex items-start gap-2.5", children: [
568
+ /* @__PURE__ */ e(
569
+ pt.Root,
570
+ {
571
+ ref: f,
572
+ id: b,
573
+ disabled: u,
574
+ "aria-describedby": h ?? g,
575
+ "aria-invalid": !!o || void 0,
576
+ className: l(
577
+ "peer mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-sm border",
578
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
579
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
580
+ "data-[state=checked]:bg-accent data-[state=checked]:border-accent data-[state=checked]:text-on-accent",
581
+ "data-[state=indeterminate]:bg-accent data-[state=indeterminate]:border-accent data-[state=indeterminate]:text-on-accent",
582
+ "disabled:cursor-not-allowed disabled:opacity-50",
583
+ o ? "border-danger" : "border-border-strong"
584
+ ),
585
+ ...m,
586
+ children: /* @__PURE__ */ e(pt.Indicator, { className: "flex items-center justify-center", children: m.checked === "indeterminate" ? /* @__PURE__ */ e(Lt, { className: "size-3", "aria-hidden": !0, strokeWidth: 3 }) : /* @__PURE__ */ e(J, { className: "size-3", "aria-hidden": !0, strokeWidth: 3 }) })
587
+ }
588
+ ),
589
+ a && /* @__PURE__ */ s("div", { className: l("flex flex-col gap-0.5", i && "sr-only"), children: [
590
+ /* @__PURE__ */ e(
591
+ "label",
592
+ {
593
+ htmlFor: b,
594
+ className: l(
595
+ "text-sm text-foreground select-none",
596
+ u && "opacity-50 cursor-not-allowed"
597
+ ),
598
+ children: a
599
+ }
600
+ ),
601
+ r && /* @__PURE__ */ e("p", { id: g, className: "text-xs text-foreground-subtle", children: r })
602
+ ] })
603
+ ] }),
604
+ o && /* @__PURE__ */ e("p", { id: h, role: "alert", className: "text-xs text-danger-text", children: o })
605
+ ] });
606
+ }
607
+ );
608
+ De.displayName = "Checkbox";
609
+ const er = d(function({
610
+ value: t,
611
+ onChange: a,
612
+ options: r,
613
+ loadOptions: o,
614
+ label: i,
615
+ helperText: c,
616
+ error: u,
617
+ placeholder: m = "Select…",
618
+ searchPlaceholder: f = "Search…",
619
+ emptyText: p = "No results.",
620
+ clearable: b = !0,
621
+ disabled: g,
622
+ size: h = "md",
623
+ className: x
624
+ }, k) {
625
+ const v = W(), B = `${v}-helper`, V = `${v}-error`, [A, O] = y(!1), [L, C] = y(""), [U, K] = y([]), [ae, ce] = y(!1), E = o ? U : r ?? [];
626
+ ke(() => {
627
+ if (!o || !A) return;
628
+ let _ = !1;
629
+ return ce(!0), o(L).then((Ke) => {
630
+ _ || K(Ke);
631
+ }).finally(() => {
632
+ _ || ce(!1);
633
+ }), () => {
634
+ _ = !0;
635
+ };
636
+ }, [L, A, o]);
637
+ const q = Ce(
638
+ () => E.find((_) => _.value === t) ?? null,
639
+ [E, t]
640
+ ), re = h === "sm" ? "h-8" : h === "lg" ? "h-10" : "h-9", N = h === "sm" ? "px-2.5" : h === "lg" ? "px-3.5" : "px-3", Z = ie(
641
+ (_) => {
642
+ _.stopPropagation(), a(null);
643
+ },
644
+ [a]
645
+ ), Ue = !!u;
646
+ return /* @__PURE__ */ s("div", { ref: k, className: l("flex flex-col gap-1.5", x), children: [
647
+ i && /* @__PURE__ */ e("label", { htmlFor: v, className: "text-sm font-medium text-foreground", children: i }),
648
+ /* @__PURE__ */ s(z.Root, { open: A, onOpenChange: O, children: [
649
+ /* @__PURE__ */ e(z.Trigger, { asChild: !0, children: /* @__PURE__ */ s(
650
+ "button",
651
+ {
652
+ id: v,
653
+ type: "button",
654
+ role: "combobox",
655
+ "aria-expanded": A,
656
+ "aria-invalid": Ue || void 0,
657
+ "aria-describedby": Ue ? V : c ? B : void 0,
658
+ disabled: g,
659
+ className: l(
660
+ "inline-flex w-full items-center justify-between gap-2 rounded-md border bg-card text-sm text-foreground",
661
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
662
+ "outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
663
+ "disabled:opacity-50 disabled:cursor-not-allowed",
664
+ re,
665
+ N,
666
+ Ue ? "border-danger focus-visible:border-danger focus-visible:ring-danger" : "border-border focus-visible:border-accent focus-visible:ring-ring"
667
+ ),
668
+ children: [
669
+ /* @__PURE__ */ e("span", { className: l("truncate", !q && "text-foreground-subtle"), children: q ? q.label : m }),
670
+ /* @__PURE__ */ s("span", { className: "ml-2 flex items-center gap-1 shrink-0", children: [
671
+ b && q && !g && /* @__PURE__ */ e(
672
+ "span",
673
+ {
674
+ role: "button",
675
+ tabIndex: -1,
676
+ onClick: Z,
677
+ "aria-label": "Clear selection",
678
+ className: "text-foreground-subtle hover:text-foreground",
679
+ children: /* @__PURE__ */ e(Y, { className: "size-4", "aria-hidden": !0 })
680
+ }
681
+ ),
682
+ /* @__PURE__ */ e(Fe, { className: "size-4 text-foreground-subtle", "aria-hidden": !0 })
683
+ ] })
684
+ ]
685
+ }
686
+ ) }),
687
+ /* @__PURE__ */ e(z.Portal, { children: /* @__PURE__ */ e(
688
+ z.Content,
689
+ {
690
+ align: "start",
691
+ sideOffset: 4,
692
+ className: l(
693
+ "z-[var(--z-popover)] w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md",
694
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
695
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
696
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"
697
+ ),
698
+ children: /* @__PURE__ */ s(I, { shouldFilter: !o, className: "flex h-full w-full flex-col", children: [
699
+ /* @__PURE__ */ s("div", { className: "flex items-center border-b border-border px-3", children: [
700
+ /* @__PURE__ */ e(
701
+ I.Input,
702
+ {
703
+ value: L,
704
+ onValueChange: C,
705
+ placeholder: f,
706
+ className: "flex h-9 w-full bg-transparent py-2 text-sm outline-none placeholder:text-foreground-subtle"
707
+ }
708
+ ),
709
+ ae && /* @__PURE__ */ e(Re, { className: "size-4 animate-spin text-foreground-subtle", "aria-hidden": !0 })
710
+ ] }),
711
+ /* @__PURE__ */ s(I.List, { className: "max-h-64 overflow-y-auto p-1", children: [
712
+ E.map((_) => {
713
+ const Ke = _.value === t;
714
+ return /* @__PURE__ */ s(
715
+ I.Item,
716
+ {
717
+ value: _.value,
718
+ disabled: _.disabled,
719
+ onSelect: (wa) => {
720
+ a(wa), O(!1);
721
+ },
722
+ className: l(
723
+ "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground",
724
+ "data-[selected=true]:bg-background-muted",
725
+ "data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none"
726
+ ),
727
+ children: [
728
+ /* @__PURE__ */ e("span", { className: "flex-1", children: _.label }),
729
+ _.description && /* @__PURE__ */ e("span", { className: "text-xs text-foreground-subtle", children: _.description }),
730
+ Ke && /* @__PURE__ */ e(J, { className: "size-4 text-accent", "aria-hidden": !0 })
731
+ ]
732
+ },
733
+ _.value
734
+ );
735
+ }),
736
+ !ae && E.length === 0 && /* @__PURE__ */ e(I.Empty, { className: "px-2 py-6 text-center text-sm text-foreground-subtle", children: p })
737
+ ] })
738
+ ] })
739
+ }
740
+ ) })
741
+ ] }),
742
+ u ? /* @__PURE__ */ e("p", { id: V, role: "alert", className: "text-xs text-danger-text", children: u }) : c ? /* @__PURE__ */ e("p", { id: B, className: "text-xs text-foreground-subtle", children: c }) : null
743
+ ] });
744
+ });
745
+ er.displayName = "Combobox";
746
+ const tr = d(function({ className: t, ...a }, r) {
747
+ return /* @__PURE__ */ e(
748
+ I,
749
+ {
750
+ ref: r,
751
+ className: l(
752
+ "flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground",
753
+ t
754
+ ),
755
+ ...a
756
+ }
757
+ );
758
+ });
759
+ tr.displayName = "Command";
760
+ const ar = d(function({ className: t, ...a }, r) {
761
+ return /* @__PURE__ */ s("div", { className: "flex items-center gap-2 border-b border-border px-3", "cmdk-input-wrapper": "", children: [
762
+ /* @__PURE__ */ e(Be, { className: "size-4 shrink-0 text-foreground-subtle", "aria-hidden": !0 }),
763
+ /* @__PURE__ */ e(
764
+ I.Input,
765
+ {
766
+ ref: r,
767
+ className: l(
768
+ "flex h-11 w-full bg-transparent py-3 text-sm outline-none",
769
+ "placeholder:text-foreground-subtle disabled:cursor-not-allowed disabled:opacity-50",
770
+ t
771
+ ),
772
+ ...a
773
+ }
774
+ )
775
+ ] });
776
+ });
777
+ ar.displayName = "CommandInput";
778
+ const rr = d(function({ className: t, ...a }, r) {
779
+ return /* @__PURE__ */ e(
780
+ I.List,
781
+ {
782
+ ref: r,
783
+ className: l("max-h-[320px] overflow-y-auto p-1", t),
784
+ ...a
785
+ }
786
+ );
787
+ });
788
+ rr.displayName = "CommandList";
789
+ const nr = d(function(t, a) {
790
+ return /* @__PURE__ */ e(
791
+ I.Empty,
792
+ {
793
+ ref: a,
794
+ className: "py-8 text-center text-sm text-foreground-subtle",
795
+ ...t
796
+ }
797
+ );
798
+ });
799
+ nr.displayName = "CommandEmpty";
800
+ const or = d(function({ className: t, ...a }, r) {
801
+ return /* @__PURE__ */ e(
802
+ I.Group,
803
+ {
804
+ ref: r,
805
+ className: l(
806
+ "overflow-hidden text-foreground p-1",
807
+ "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5",
808
+ "[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
809
+ "[&_[cmdk-group-heading]]:text-foreground-subtle",
810
+ t
811
+ ),
812
+ ...a
813
+ }
814
+ );
815
+ });
816
+ or.displayName = "CommandGroup";
817
+ const sr = d(function({ className: t, ...a }, r) {
818
+ return /* @__PURE__ */ e(
819
+ I.Separator,
820
+ {
821
+ ref: r,
822
+ className: l("-mx-1 my-1 h-px bg-border", t),
823
+ ...a
824
+ }
825
+ );
826
+ });
827
+ sr.displayName = "CommandSeparator";
828
+ const ir = d(function({ className: t, ...a }, r) {
829
+ return /* @__PURE__ */ e(
830
+ I.Item,
831
+ {
832
+ ref: r,
833
+ className: l(
834
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none",
835
+ "data-[selected=true]:bg-background-muted data-[selected=true]:text-foreground",
836
+ "data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
837
+ "[&_svg]:size-4 [&_svg]:text-foreground-subtle",
838
+ t
839
+ ),
840
+ ...a
841
+ }
842
+ );
843
+ });
844
+ ir.displayName = "CommandItem";
845
+ function to({ children: n, className: t }) {
846
+ return /* @__PURE__ */ e(
847
+ "span",
848
+ {
849
+ className: l(
850
+ "ml-auto inline-flex items-center gap-0.5 text-xs tracking-widest text-foreground-subtle font-mono",
851
+ t
852
+ ),
853
+ children: n
854
+ }
855
+ );
856
+ }
857
+ function ao({ open: n, onOpenChange: t, children: a, title: r = "Command palette" }) {
858
+ return /* @__PURE__ */ e(S.Root, { open: n, onOpenChange: t, children: /* @__PURE__ */ s(S.Portal, { children: [
859
+ /* @__PURE__ */ e(
860
+ S.Overlay,
861
+ {
862
+ className: l(
863
+ "fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]",
864
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
865
+ "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0"
866
+ )
867
+ }
868
+ ),
869
+ /* @__PURE__ */ s(
870
+ S.Content,
871
+ {
872
+ className: l(
873
+ "fixed left-1/2 top-[20%] z-[var(--z-modal)] -translate-x-1/2",
874
+ "w-[calc(100%-2rem)] max-w-[640px] overflow-hidden",
875
+ "rounded-lg border border-border bg-popover text-popover-foreground shadow-lg",
876
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
877
+ "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
878
+ "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95"
879
+ ),
880
+ children: [
881
+ /* @__PURE__ */ e(S.Title, { className: "sr-only", children: r }),
882
+ a
883
+ ]
884
+ }
885
+ )
886
+ ] }) });
887
+ }
888
+ function ro(n) {
889
+ const [t, a] = y(0);
890
+ ke(() => {
891
+ const r = (o) => {
892
+ o.key === "k" && (o.metaKey || o.ctrlKey) && (o.preventDefault(), n(!0), a((i) => i + 1));
893
+ };
894
+ return window.addEventListener("keydown", r), () => window.removeEventListener("keydown", r);
895
+ }, [n]);
896
+ }
897
+ const no = D.Root, oo = D.Trigger, so = D.Group, lr = D.Portal, io = D.Sub, lo = D.RadioGroup, Ge = l(
898
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none",
899
+ "data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground",
900
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
901
+ ), dr = d(function({ className: t, children: a, ...r }, o) {
902
+ return /* @__PURE__ */ s(
903
+ D.SubTrigger,
904
+ {
905
+ ref: o,
906
+ className: l(Ge, "data-[state=open]:bg-background-muted", t),
907
+ ...r,
908
+ children: [
909
+ a,
910
+ /* @__PURE__ */ e(le, { className: "ml-auto size-4 text-foreground-subtle", "aria-hidden": !0 })
911
+ ]
912
+ }
913
+ );
914
+ });
915
+ dr.displayName = "ContextMenuSubTrigger";
916
+ const cr = d(function({ className: t, ...a }, r) {
917
+ return /* @__PURE__ */ e(
918
+ D.SubContent,
919
+ {
920
+ ref: r,
921
+ className: l(
922
+ "z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md",
923
+ t
924
+ ),
925
+ ...a
926
+ }
927
+ );
928
+ });
929
+ cr.displayName = "ContextMenuSubContent";
930
+ const ur = d(function({ className: t, ...a }, r) {
931
+ return /* @__PURE__ */ e(lr, { children: /* @__PURE__ */ e(
932
+ D.Content,
933
+ {
934
+ ref: r,
935
+ className: l(
936
+ "z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md",
937
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
938
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
939
+ t
940
+ ),
941
+ ...a
942
+ }
943
+ ) });
944
+ });
945
+ ur.displayName = "ContextMenuContent";
946
+ const mr = d(function({ className: t, destructive: a, ...r }, o) {
947
+ return /* @__PURE__ */ e(
948
+ D.Item,
949
+ {
950
+ ref: o,
951
+ className: l(
952
+ Ge,
953
+ a && "text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text",
954
+ t
955
+ ),
956
+ ...r
957
+ }
958
+ );
959
+ });
960
+ mr.displayName = "ContextMenuItem";
961
+ const fr = d(function({ className: t, children: a, ...r }, o) {
962
+ return /* @__PURE__ */ s(
963
+ D.CheckboxItem,
964
+ {
965
+ ref: o,
966
+ className: l(Ge, "pl-8", t),
967
+ ...r,
968
+ children: [
969
+ /* @__PURE__ */ e("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ e(D.ItemIndicator, { children: /* @__PURE__ */ e(J, { className: "size-4 text-accent", "aria-hidden": !0 }) }) }),
970
+ a
971
+ ]
972
+ }
973
+ );
974
+ });
975
+ fr.displayName = "ContextMenuCheckboxItem";
976
+ const gr = d(function({ className: t, children: a, ...r }, o) {
977
+ return /* @__PURE__ */ s(
978
+ D.RadioItem,
979
+ {
980
+ ref: o,
981
+ className: l(Ge, "pl-8", t),
982
+ ...r,
983
+ children: [
984
+ /* @__PURE__ */ e("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ e(D.ItemIndicator, { children: /* @__PURE__ */ e(at, { className: "size-2 fill-accent text-accent", "aria-hidden": !0 }) }) }),
985
+ a
986
+ ]
987
+ }
988
+ );
989
+ });
990
+ gr.displayName = "ContextMenuRadioItem";
991
+ const pr = d(function({ className: t, ...a }, r) {
992
+ return /* @__PURE__ */ e(
993
+ D.Label,
994
+ {
995
+ ref: r,
996
+ className: l("px-2 py-1.5 text-xs font-medium text-foreground-subtle", t),
997
+ ...a
998
+ }
999
+ );
1000
+ });
1001
+ pr.displayName = "ContextMenuLabel";
1002
+ const hr = d(function({ className: t, ...a }, r) {
1003
+ return /* @__PURE__ */ e(
1004
+ D.Separator,
1005
+ {
1006
+ ref: r,
1007
+ className: l("-mx-1 my-1 h-px bg-border", t),
1008
+ ...a
1009
+ }
1010
+ );
1011
+ });
1012
+ hr.displayName = "ContextMenuSeparator";
1013
+ function br({ className: n, ...t }) {
1014
+ return /* @__PURE__ */ e(
1015
+ "span",
1016
+ {
1017
+ className: l("ml-auto text-xs tracking-widest text-foreground-subtle font-mono", n),
1018
+ ...t
1019
+ }
1020
+ );
1021
+ }
1022
+ br.displayName = "ContextMenuShortcut";
1023
+ const xr = P.Root, vr = P.Trigger, co = P.Group, Nr = P.Portal, uo = P.Sub, mo = P.RadioGroup, Ve = l(
1024
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none",
1025
+ "data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground",
1026
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1027
+ "transition-colors duration-[var(--duration-fast)]"
1028
+ ), yr = d(function({ className: t, inset: a, children: r, ...o }, i) {
1029
+ return /* @__PURE__ */ s(
1030
+ P.SubTrigger,
1031
+ {
1032
+ ref: i,
1033
+ className: l(Ve, "data-[state=open]:bg-background-muted", a && "pl-8", t),
1034
+ ...o,
1035
+ children: [
1036
+ r,
1037
+ /* @__PURE__ */ e(le, { className: "ml-auto size-4 text-foreground-subtle", "aria-hidden": !0 })
1038
+ ]
1039
+ }
1040
+ );
1041
+ });
1042
+ yr.displayName = "DropdownMenuSubTrigger";
1043
+ const wr = d(function({ className: t, ...a }, r) {
1044
+ return /* @__PURE__ */ e(
1045
+ P.SubContent,
1046
+ {
1047
+ ref: r,
1048
+ className: l(
1049
+ "z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md",
1050
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1051
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1052
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1053
+ t
1054
+ ),
1055
+ ...a
1056
+ }
1057
+ );
1058
+ });
1059
+ wr.displayName = "DropdownMenuSubContent";
1060
+ const Wt = d(function({ className: t, sideOffset: a = 4, align: r = "end", ...o }, i) {
1061
+ return /* @__PURE__ */ e(Nr, { children: /* @__PURE__ */ e(
1062
+ P.Content,
1063
+ {
1064
+ ref: i,
1065
+ sideOffset: a,
1066
+ align: r,
1067
+ className: l(
1068
+ "z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md",
1069
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1070
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1071
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1072
+ "data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1",
1073
+ t
1074
+ ),
1075
+ ...o
1076
+ }
1077
+ ) });
1078
+ });
1079
+ Wt.displayName = "DropdownMenuContent";
1080
+ const kr = d(function({ className: t, inset: a, destructive: r, ...o }, i) {
1081
+ return /* @__PURE__ */ e(
1082
+ P.Item,
1083
+ {
1084
+ ref: i,
1085
+ className: l(
1086
+ Ve,
1087
+ a && "pl-8",
1088
+ r && "text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text",
1089
+ t
1090
+ ),
1091
+ ...o
1092
+ }
1093
+ );
1094
+ });
1095
+ kr.displayName = "DropdownMenuItem";
1096
+ const Ut = d(function({ className: t, children: a, checked: r, ...o }, i) {
1097
+ return /* @__PURE__ */ s(
1098
+ P.CheckboxItem,
1099
+ {
1100
+ ref: i,
1101
+ checked: r,
1102
+ className: l(Ve, "pl-8", t),
1103
+ ...o,
1104
+ children: [
1105
+ /* @__PURE__ */ e("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ e(P.ItemIndicator, { children: /* @__PURE__ */ e(J, { className: "size-4 text-accent", "aria-hidden": !0 }) }) }),
1106
+ a
1107
+ ]
1108
+ }
1109
+ );
1110
+ });
1111
+ Ut.displayName = "DropdownMenuCheckboxItem";
1112
+ const Cr = d(function({ className: t, children: a, ...r }, o) {
1113
+ return /* @__PURE__ */ s(
1114
+ P.RadioItem,
1115
+ {
1116
+ ref: o,
1117
+ className: l(Ve, "pl-8", t),
1118
+ ...r,
1119
+ children: [
1120
+ /* @__PURE__ */ e("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ e(P.ItemIndicator, { children: /* @__PURE__ */ e(at, { className: "size-2 fill-accent text-accent", "aria-hidden": !0 }) }) }),
1121
+ a
1122
+ ]
1123
+ }
1124
+ );
1125
+ });
1126
+ Cr.displayName = "DropdownMenuRadioItem";
1127
+ const Kt = d(function({ className: t, inset: a, ...r }, o) {
1128
+ return /* @__PURE__ */ e(
1129
+ P.Label,
1130
+ {
1131
+ ref: o,
1132
+ className: l(
1133
+ "px-2 py-1.5 text-xs font-medium text-foreground-subtle",
1134
+ a && "pl-8",
1135
+ t
1136
+ ),
1137
+ ...r
1138
+ }
1139
+ );
1140
+ });
1141
+ Kt.displayName = "DropdownMenuLabel";
1142
+ const qt = d(function({ className: t, ...a }, r) {
1143
+ return /* @__PURE__ */ e(
1144
+ P.Separator,
1145
+ {
1146
+ ref: r,
1147
+ className: l("-mx-1 my-1 h-px bg-border", t),
1148
+ ...a
1149
+ }
1150
+ );
1151
+ });
1152
+ qt.displayName = "DropdownMenuSeparator";
1153
+ function Sr({ className: n, ...t }) {
1154
+ return /* @__PURE__ */ e(
1155
+ "span",
1156
+ {
1157
+ className: l("ml-auto text-xs tracking-widest text-foreground-subtle font-mono", n),
1158
+ ...t
1159
+ }
1160
+ );
1161
+ }
1162
+ Sr.displayName = "DropdownMenuShortcut";
1163
+ const zr = G(
1164
+ [
1165
+ "inline-flex items-center justify-center shrink-0",
1166
+ "rounded-md",
1167
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
1168
+ "outline-none",
1169
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1170
+ "focus-visible:ring-offset-background",
1171
+ "disabled:pointer-events-none disabled:opacity-50",
1172
+ "[&_svg]:pointer-events-none"
1173
+ ],
1174
+ {
1175
+ variants: {
1176
+ variant: {
1177
+ primary: "bg-accent text-on-accent hover:bg-accent-700 active:bg-accent-800",
1178
+ secondary: "bg-background-muted text-foreground border border-border hover:bg-neutral-200 dark:hover:bg-neutral-800",
1179
+ outline: "border border-border bg-transparent text-foreground hover:bg-background-muted",
1180
+ ghost: "bg-transparent text-foreground-muted hover:bg-background-muted hover:text-foreground",
1181
+ destructive: "bg-danger text-on-danger hover:bg-danger-700 active:bg-danger-800"
1182
+ },
1183
+ size: {
1184
+ sm: "h-7 w-7 [&_svg]:size-3.5",
1185
+ md: "h-8 w-8 [&_svg]:size-4",
1186
+ lg: "h-10 w-10 [&_svg]:size-5"
1187
+ }
1188
+ },
1189
+ defaultVariants: {
1190
+ variant: "ghost",
1191
+ size: "md"
1192
+ }
1193
+ }
1194
+ ), lt = d(function({ className: t, variant: a, size: r, icon: o, loading: i, disabled: c, type: u = "button", ...m }, f) {
1195
+ return /* @__PURE__ */ e(
1196
+ "button",
1197
+ {
1198
+ ref: f,
1199
+ type: u,
1200
+ "aria-busy": i || void 0,
1201
+ disabled: c || i,
1202
+ className: l(zr({ variant: a, size: r }), t),
1203
+ ...m,
1204
+ children: i ? /* @__PURE__ */ e(Re, { className: "animate-spin", "aria-hidden": "true" }) : o
1205
+ }
1206
+ );
1207
+ });
1208
+ lt.displayName = "IconButton";
1209
+ const Tr = G(
1210
+ [
1211
+ "group inline-flex items-center w-full",
1212
+ "rounded-md border bg-card text-sm",
1213
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
1214
+ "has-disabled:opacity-50 has-disabled:pointer-events-none",
1215
+ "focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-offset-background"
1216
+ ],
1217
+ {
1218
+ variants: {
1219
+ size: {
1220
+ sm: "h-8 px-2.5 gap-1.5",
1221
+ md: "h-9 px-3 gap-2",
1222
+ lg: "h-10 px-3.5 gap-2"
1223
+ },
1224
+ tone: {
1225
+ default: "border-border focus-within:border-accent focus-within:ring-ring",
1226
+ error: "border-danger focus-within:border-danger focus-within:ring-danger"
1227
+ }
1228
+ },
1229
+ defaultVariants: {
1230
+ size: "md",
1231
+ tone: "default"
1232
+ }
1233
+ }
1234
+ ), Ir = G([
1235
+ "flex-1 min-w-0 bg-transparent outline-none",
1236
+ "placeholder:text-foreground-subtle",
1237
+ "text-foreground",
1238
+ "disabled:cursor-not-allowed"
1239
+ ]), T = d(function({
1240
+ className: t,
1241
+ type: a = "text",
1242
+ size: r,
1243
+ tone: o,
1244
+ label: i,
1245
+ helperText: c,
1246
+ error: u,
1247
+ prefix: m,
1248
+ suffix: f,
1249
+ clearable: p,
1250
+ onClear: b,
1251
+ hideLabel: g,
1252
+ id: h,
1253
+ disabled: x,
1254
+ value: k,
1255
+ ...v
1256
+ }, B) {
1257
+ const V = W(), A = h ?? V, O = `${A}-helper`, L = `${A}-error`, [C, U] = y(!1), K = a === "password" ? C ? "text" : "password" : a, ae = !!u, ce = ae ? "error" : o, E = m ?? (a === "search" ? /* @__PURE__ */ e(Be, { className: "size-4 text-foreground-subtle", "aria-hidden": !0 }) : null), q = k !== void 0 && k !== "" && k !== null;
1258
+ return /* @__PURE__ */ s("div", { className: l("flex flex-col gap-1.5", t), children: [
1259
+ i && /* @__PURE__ */ e(
1260
+ "label",
1261
+ {
1262
+ htmlFor: A,
1263
+ className: l(
1264
+ "text-sm font-medium text-foreground",
1265
+ g && "sr-only"
1266
+ ),
1267
+ children: i
1268
+ }
1269
+ ),
1270
+ /* @__PURE__ */ s("div", { className: l(Tr({ size: r, tone: ce })), children: [
1271
+ E && /* @__PURE__ */ e("span", { className: "flex items-center text-foreground-subtle [&_svg]:size-4", children: E }),
1272
+ /* @__PURE__ */ e(
1273
+ "input",
1274
+ {
1275
+ ref: B,
1276
+ id: A,
1277
+ type: K,
1278
+ disabled: x,
1279
+ value: k,
1280
+ "aria-invalid": ae || void 0,
1281
+ "aria-describedby": u ? L : c ? O : void 0,
1282
+ className: l(Ir()),
1283
+ ...v
1284
+ }
1285
+ ),
1286
+ p && q && /* @__PURE__ */ e(
1287
+ "button",
1288
+ {
1289
+ type: "button",
1290
+ onClick: b,
1291
+ tabIndex: -1,
1292
+ "aria-label": "Clear input",
1293
+ className: "flex items-center text-foreground-subtle hover:text-foreground",
1294
+ children: /* @__PURE__ */ e(Y, { className: "size-4", "aria-hidden": !0 })
1295
+ }
1296
+ ),
1297
+ a === "password" && /* @__PURE__ */ e(
1298
+ "button",
1299
+ {
1300
+ type: "button",
1301
+ onClick: () => U((re) => !re),
1302
+ tabIndex: -1,
1303
+ "aria-label": C ? "Hide password" : "Show password",
1304
+ "aria-pressed": C,
1305
+ className: "flex items-center text-foreground-subtle hover:text-foreground",
1306
+ children: C ? /* @__PURE__ */ e(_t, { className: "size-4", "aria-hidden": !0 }) : /* @__PURE__ */ e(At, { className: "size-4", "aria-hidden": !0 })
1307
+ }
1308
+ ),
1309
+ f && /* @__PURE__ */ e("span", { className: "flex items-center text-foreground-subtle [&_svg]:size-4", children: f })
1310
+ ] }),
1311
+ u ? /* @__PURE__ */ e("p", { id: L, role: "alert", className: "text-xs text-danger-text", children: u }) : c ? /* @__PURE__ */ e("p", { id: O, className: "text-xs text-foreground-subtle", children: c }) : null
1312
+ ] });
1313
+ });
1314
+ T.displayName = "Input";
1315
+ const dt = d(
1316
+ function({ className: t, ...a }, r) {
1317
+ return /* @__PURE__ */ e("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ e(
1318
+ "table",
1319
+ {
1320
+ ref: r,
1321
+ className: l("w-full caption-bottom text-sm border-collapse", t),
1322
+ ...a
1323
+ }
1324
+ ) });
1325
+ }
1326
+ );
1327
+ dt.displayName = "Table";
1328
+ const ct = d(
1329
+ function({ className: t, ...a }, r) {
1330
+ return /* @__PURE__ */ e(
1331
+ "thead",
1332
+ {
1333
+ ref: r,
1334
+ className: l(
1335
+ "sticky top-0 z-10 bg-background-subtle text-foreground-muted",
1336
+ "[&_tr]:border-b [&_tr]:border-border",
1337
+ t
1338
+ ),
1339
+ ...a
1340
+ }
1341
+ );
1342
+ }
1343
+ );
1344
+ ct.displayName = "TableHeader";
1345
+ const ut = d(
1346
+ function({ className: t, ...a }, r) {
1347
+ return /* @__PURE__ */ e(
1348
+ "tbody",
1349
+ {
1350
+ ref: r,
1351
+ className: l("[&_tr:last-child]:border-0", t),
1352
+ ...a
1353
+ }
1354
+ );
1355
+ }
1356
+ );
1357
+ ut.displayName = "TableBody";
1358
+ const Mr = d(
1359
+ function({ className: t, ...a }, r) {
1360
+ return /* @__PURE__ */ e(
1361
+ "tfoot",
1362
+ {
1363
+ ref: r,
1364
+ className: l("border-t border-border bg-background-subtle font-medium", t),
1365
+ ...a
1366
+ }
1367
+ );
1368
+ }
1369
+ );
1370
+ Mr.displayName = "TableFooter";
1371
+ const oe = d(function({ className: t, selected: a, ...r }, o) {
1372
+ return /* @__PURE__ */ e(
1373
+ "tr",
1374
+ {
1375
+ ref: o,
1376
+ "data-selected": a || void 0,
1377
+ className: l(
1378
+ "border-b border-border transition-colors duration-[var(--duration-fast)]",
1379
+ "hover:bg-background-subtle",
1380
+ "data-[selected]:bg-accent-soft data-[selected]:hover:bg-accent-soft",
1381
+ t
1382
+ ),
1383
+ ...r
1384
+ }
1385
+ );
1386
+ });
1387
+ oe.displayName = "TableRow";
1388
+ const se = d(function({ className: t, ...a }, r) {
1389
+ return /* @__PURE__ */ e(
1390
+ "th",
1391
+ {
1392
+ ref: r,
1393
+ className: l(
1394
+ "h-10 px-3 text-left align-middle text-xs font-medium uppercase tracking-wide text-foreground-subtle",
1395
+ "[&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0",
1396
+ t
1397
+ ),
1398
+ ...a
1399
+ }
1400
+ );
1401
+ });
1402
+ se.displayName = "TableHead";
1403
+ const ee = d(function({ className: t, ...a }, r) {
1404
+ return /* @__PURE__ */ e(
1405
+ "td",
1406
+ {
1407
+ ref: r,
1408
+ className: l("px-3 py-3 align-middle text-foreground", t),
1409
+ ...a
1410
+ }
1411
+ );
1412
+ });
1413
+ ee.displayName = "TableCell";
1414
+ const Dr = d(
1415
+ function({ className: t, ...a }, r) {
1416
+ return /* @__PURE__ */ e(
1417
+ "caption",
1418
+ {
1419
+ ref: r,
1420
+ className: l("mt-4 text-sm text-foreground-subtle", t),
1421
+ ...a
1422
+ }
1423
+ );
1424
+ }
1425
+ );
1426
+ Dr.displayName = "TableCaption";
1427
+ const Qt = d(
1428
+ function({ sortKey: t, currentSort: a, onSortChange: r, children: o, className: i, ...c }, u) {
1429
+ const m = (a == null ? void 0 : a.key) === t, f = m ? a == null ? void 0 : a.direction : void 0, p = () => {
1430
+ r(t, m && f === "asc" ? "desc" : "asc");
1431
+ };
1432
+ return /* @__PURE__ */ e(se, { ref: u, className: l("p-0", i), "aria-sort": m ? f === "asc" ? "ascending" : "descending" : "none", ...c, children: /* @__PURE__ */ s(
1433
+ "button",
1434
+ {
1435
+ type: "button",
1436
+ onClick: p,
1437
+ className: l(
1438
+ "inline-flex h-10 w-full items-center gap-1.5 px-3 outline-none",
1439
+ "transition-colors duration-[var(--duration-fast)]",
1440
+ "hover:text-foreground focus-visible:text-foreground",
1441
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-sm",
1442
+ m && "text-foreground"
1443
+ ),
1444
+ children: [
1445
+ o,
1446
+ f === "asc" ? /* @__PURE__ */ e(Ct, { className: "size-3.5", "aria-hidden": !0 }) : f === "desc" ? /* @__PURE__ */ e(wt, { className: "size-3.5", "aria-hidden": !0 }) : /* @__PURE__ */ e(St, { className: "size-3.5 opacity-40", "aria-hidden": !0 })
1447
+ ]
1448
+ }
1449
+ ) });
1450
+ }
1451
+ );
1452
+ Qt.displayName = "TableSortHeader";
1453
+ const Xt = d(function({ className: t, variant: a, ...r }, o) {
1454
+ return /* @__PURE__ */ e(
1455
+ "div",
1456
+ {
1457
+ ref: o,
1458
+ "aria-hidden": !0,
1459
+ className: l(
1460
+ "animate-pulse bg-background-muted",
1461
+ a === "text" && "h-3 rounded-sm",
1462
+ a === "circle" && "rounded-full aspect-square",
1463
+ a === "avatar" && "size-8 rounded-full",
1464
+ a === "card" && "rounded-lg",
1465
+ !a && "rounded-md",
1466
+ t
1467
+ ),
1468
+ ...r
1469
+ }
1470
+ );
1471
+ });
1472
+ Xt.displayName = "Skeleton";
1473
+ function Pr({
1474
+ columns: n,
1475
+ rows: t,
1476
+ loading: a,
1477
+ sort: r,
1478
+ onSortChange: o,
1479
+ filter: i,
1480
+ emptyState: c,
1481
+ className: u
1482
+ }) {
1483
+ const [m, f] = y({}), p = Ce(() => n.filter((g) => !m[g.key]), [n, m]), b = () => a ? Array.from({ length: 5 }).map((g, h) => /* @__PURE__ */ e(oe, { children: p.map((x) => /* @__PURE__ */ e(ee, { children: /* @__PURE__ */ e(Xt, { variant: "text", className: "w-3/4" }) }, x.key)) }, `skel-${h}`)) : t.length === 0 ? /* @__PURE__ */ e(oe, { children: /* @__PURE__ */ e(ee, { colSpan: p.length, className: "h-32 text-center", children: c ?? /* @__PURE__ */ e("span", { className: "text-foreground-subtle", children: "No results." }) }) }) : t.map((g) => /* @__PURE__ */ e(oe, { children: p.map((h) => /* @__PURE__ */ e(
1484
+ ee,
1485
+ {
1486
+ className: l(h.align === "right" && "text-right tabular"),
1487
+ children: h.cell ? h.cell(g) : g[h.key]
1488
+ },
1489
+ h.key
1490
+ )) }, g.id));
1491
+ return /* @__PURE__ */ s("div", { className: l("flex flex-col gap-3", u), children: [
1492
+ /* @__PURE__ */ s("div", { className: "flex items-center justify-between gap-2", children: [
1493
+ i ? /* @__PURE__ */ e(
1494
+ T,
1495
+ {
1496
+ type: "search",
1497
+ placeholder: i.placeholder ?? "Filter…",
1498
+ value: i.value,
1499
+ onChange: (g) => i.onChange(g.target.value),
1500
+ clearable: !0,
1501
+ onClear: () => i.onChange(""),
1502
+ className: "max-w-sm w-full",
1503
+ hideLabel: !0,
1504
+ label: "Filter rows"
1505
+ }
1506
+ ) : /* @__PURE__ */ e("div", {}),
1507
+ /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ s(xr, { children: [
1508
+ /* @__PURE__ */ e(vr, { asChild: !0, children: /* @__PURE__ */ e(lt, { "aria-label": "Column visibility", icon: /* @__PURE__ */ e(ot, {}), variant: "outline" }) }),
1509
+ /* @__PURE__ */ s(Wt, { children: [
1510
+ /* @__PURE__ */ e(Kt, { children: "Columns" }),
1511
+ /* @__PURE__ */ e(qt, {}),
1512
+ n.map((g) => /* @__PURE__ */ e(
1513
+ Ut,
1514
+ {
1515
+ checked: !m[g.key],
1516
+ onCheckedChange: (h) => f((x) => ({ ...x, [g.key]: !h })),
1517
+ children: g.header
1518
+ },
1519
+ g.key
1520
+ ))
1521
+ ] })
1522
+ ] }) })
1523
+ ] }),
1524
+ /* @__PURE__ */ e("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ s(dt, { children: [
1525
+ /* @__PURE__ */ e("colgroup", { children: p.map((g) => /* @__PURE__ */ e("col", { style: g.width ? { width: g.width } : void 0 }, g.key)) }),
1526
+ /* @__PURE__ */ e(ct, { children: /* @__PURE__ */ e(oe, { children: p.map(
1527
+ (g) => g.sortable && o ? /* @__PURE__ */ e(
1528
+ Qt,
1529
+ {
1530
+ sortKey: g.key,
1531
+ currentSort: r ?? null,
1532
+ onSortChange: (h, x) => o({ key: h, direction: x }),
1533
+ children: g.header
1534
+ },
1535
+ g.key
1536
+ ) : /* @__PURE__ */ e(se, { className: l(g.align === "right" && "text-right"), children: g.header }, g.key)
1537
+ ) }) }),
1538
+ /* @__PURE__ */ e(ut, { children: b() })
1539
+ ] }) })
1540
+ ] });
1541
+ }
1542
+ const Yt = {
1543
+ root: "p-3",
1544
+ month: "space-y-2",
1545
+ caption: "flex items-center justify-between px-1 pb-2",
1546
+ caption_label: "text-sm font-medium text-foreground",
1547
+ nav: "flex items-center gap-1",
1548
+ nav_button: "inline-flex size-7 items-center justify-center rounded-md text-foreground-muted hover:bg-background-muted hover:text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring",
1549
+ table: "w-full border-collapse",
1550
+ head_row: "flex",
1551
+ head_cell: "w-9 text-xs font-medium text-foreground-subtle",
1552
+ row: "flex w-full mt-1",
1553
+ cell: "relative size-9 p-0 text-center",
1554
+ day: "inline-flex size-9 items-center justify-center rounded-md text-sm text-foreground transition-colors outline-none hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring",
1555
+ day_selected: "bg-accent text-on-accent hover:bg-accent hover:text-on-accent",
1556
+ day_today: "font-semibold text-accent",
1557
+ day_outside: "text-foreground-subtle opacity-50",
1558
+ day_disabled: "text-foreground-subtle opacity-50 pointer-events-none",
1559
+ day_range_start: "rounded-l-md",
1560
+ day_range_end: "rounded-r-md",
1561
+ day_range_middle: "bg-accent-soft text-on-accent-soft rounded-none"
1562
+ }, Jt = {
1563
+ IconLeft: () => /* @__PURE__ */ e(Ze, { className: "size-4", "aria-hidden": !0 }),
1564
+ IconRight: () => /* @__PURE__ */ e(le, { className: "size-4", "aria-hidden": !0 })
1565
+ };
1566
+ function Pe(n) {
1567
+ return n ? n.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" }) : "";
1568
+ }
1569
+ function Zt({
1570
+ label: n,
1571
+ placeholder: t,
1572
+ hasValue: a,
1573
+ children: r,
1574
+ error: o,
1575
+ fieldId: i,
1576
+ disabled: c
1577
+ }) {
1578
+ return /* @__PURE__ */ s("div", { className: "flex flex-col gap-1.5", children: [
1579
+ n && /* @__PURE__ */ e("label", { htmlFor: i, className: "text-sm font-medium text-foreground", children: n }),
1580
+ /* @__PURE__ */ e(z.Trigger, { asChild: !0, children: /* @__PURE__ */ s(
1581
+ "button",
1582
+ {
1583
+ id: i,
1584
+ type: "button",
1585
+ disabled: c,
1586
+ "aria-invalid": !!o || void 0,
1587
+ className: l(
1588
+ "inline-flex h-9 w-full items-center justify-start gap-2 rounded-md border bg-card px-3 text-left text-sm",
1589
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
1590
+ "outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
1591
+ "disabled:opacity-50 disabled:cursor-not-allowed",
1592
+ o ? "border-danger focus-visible:border-danger focus-visible:ring-danger" : "border-border focus-visible:border-accent focus-visible:ring-ring",
1593
+ !a && "text-foreground-subtle"
1594
+ ),
1595
+ children: [
1596
+ /* @__PURE__ */ e(zt, { className: "size-4 text-foreground-subtle", "aria-hidden": !0 }),
1597
+ /* @__PURE__ */ e("span", { className: "truncate", children: a ? r : t })
1598
+ ]
1599
+ }
1600
+ ) }),
1601
+ o && /* @__PURE__ */ e("p", { role: "alert", className: "text-xs text-danger-text", children: o })
1602
+ ] });
1603
+ }
1604
+ const Ar = d(function({ value: t, onChange: a, label: r, placeholder: o = "Pick a date", error: i, disabled: c, fromDate: u, toDate: m, className: f }, p) {
1605
+ const b = W(), [g, h] = y(!1);
1606
+ return /* @__PURE__ */ e("div", { ref: p, className: l(f), children: /* @__PURE__ */ s(z.Root, { open: g, onOpenChange: h, children: [
1607
+ /* @__PURE__ */ e(
1608
+ Zt,
1609
+ {
1610
+ label: r,
1611
+ placeholder: o,
1612
+ hasValue: !!t,
1613
+ error: i,
1614
+ fieldId: b,
1615
+ disabled: c,
1616
+ children: Pe(t)
1617
+ }
1618
+ ),
1619
+ /* @__PURE__ */ e(z.Portal, { children: /* @__PURE__ */ e(
1620
+ z.Content,
1621
+ {
1622
+ align: "start",
1623
+ sideOffset: 4,
1624
+ className: "z-[var(--z-popover)] rounded-lg border border-border bg-popover text-popover-foreground shadow-md",
1625
+ children: /* @__PURE__ */ e(
1626
+ Gt,
1627
+ {
1628
+ mode: "single",
1629
+ selected: t,
1630
+ onSelect: (x) => {
1631
+ a(x ?? void 0), x && h(!1);
1632
+ },
1633
+ fromDate: u,
1634
+ toDate: m,
1635
+ classNames: Yt,
1636
+ components: Jt
1637
+ }
1638
+ )
1639
+ }
1640
+ ) })
1641
+ ] }) });
1642
+ });
1643
+ Ar.displayName = "DatePicker";
1644
+ const _r = d(function({ value: t, onChange: a, label: r, placeholder: o = "Pick a range", error: i, disabled: c, fromDate: u, toDate: m, className: f }, p) {
1645
+ const b = W(), [g, h] = y(!1), x = !!(t != null && t.from);
1646
+ return /* @__PURE__ */ e("div", { ref: p, className: l(f), children: /* @__PURE__ */ s(z.Root, { open: g, onOpenChange: h, children: [
1647
+ /* @__PURE__ */ e(
1648
+ Zt,
1649
+ {
1650
+ label: r,
1651
+ placeholder: o,
1652
+ hasValue: x,
1653
+ error: i,
1654
+ fieldId: b,
1655
+ disabled: c,
1656
+ children: t != null && t.from && t.to ? `${Pe(t.from)} – ${Pe(t.to)}` : t != null && t.from ? Pe(t.from) : ""
1657
+ }
1658
+ ),
1659
+ /* @__PURE__ */ e(z.Portal, { children: /* @__PURE__ */ e(
1660
+ z.Content,
1661
+ {
1662
+ align: "start",
1663
+ sideOffset: 4,
1664
+ className: "z-[var(--z-popover)] rounded-lg border border-border bg-popover text-popover-foreground shadow-md",
1665
+ children: /* @__PURE__ */ e(
1666
+ Gt,
1667
+ {
1668
+ mode: "range",
1669
+ selected: t,
1670
+ onSelect: a,
1671
+ numberOfMonths: 2,
1672
+ fromDate: u,
1673
+ toDate: m,
1674
+ classNames: Yt,
1675
+ components: Jt
1676
+ }
1677
+ )
1678
+ }
1679
+ ) })
1680
+ ] }) });
1681
+ });
1682
+ _r.displayName = "DateRangePicker";
1683
+ const jr = S.Root, fo = S.Trigger, Fr = S.Portal, Rr = S.Close, ea = d(function({ className: t, ...a }, r) {
1684
+ return /* @__PURE__ */ e(
1685
+ S.Overlay,
1686
+ {
1687
+ ref: r,
1688
+ className: l(
1689
+ "fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]",
1690
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1691
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1692
+ t
1693
+ ),
1694
+ ...a
1695
+ }
1696
+ );
1697
+ });
1698
+ ea.displayName = "DialogOverlay";
1699
+ const ta = d(function({ className: t, children: a, showClose: r = !0, size: o = "md", ...i }, c) {
1700
+ return /* @__PURE__ */ s(Fr, { children: [
1701
+ /* @__PURE__ */ e(ea, {}),
1702
+ /* @__PURE__ */ s(
1703
+ S.Content,
1704
+ {
1705
+ ref: c,
1706
+ className: l(
1707
+ "fixed left-1/2 top-1/2 z-[var(--z-modal)] -translate-x-1/2 -translate-y-1/2",
1708
+ "w-[calc(100%-2rem)] rounded-lg border border-border bg-card text-card-foreground shadow-lg",
1709
+ "p-6",
1710
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1711
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1712
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1713
+ o === "sm" && "max-w-[400px]",
1714
+ o === "md" && "max-w-[520px]",
1715
+ o === "lg" && "max-w-[720px]",
1716
+ t
1717
+ ),
1718
+ ...i,
1719
+ children: [
1720
+ a,
1721
+ r && /* @__PURE__ */ e(
1722
+ S.Close,
1723
+ {
1724
+ "aria-label": "Close",
1725
+ className: l(
1726
+ "absolute right-4 top-4 inline-flex size-8 items-center justify-center rounded-md text-foreground-subtle",
1727
+ "hover:bg-background-muted hover:text-foreground",
1728
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
1729
+ "transition-colors duration-[var(--duration-fast)]"
1730
+ ),
1731
+ children: /* @__PURE__ */ e(Y, { className: "size-4", "aria-hidden": !0 })
1732
+ }
1733
+ )
1734
+ ]
1735
+ }
1736
+ )
1737
+ ] });
1738
+ });
1739
+ ta.displayName = "DialogContent";
1740
+ function aa({ className: n, ...t }) {
1741
+ return /* @__PURE__ */ e("div", { className: l("flex flex-col gap-1 pb-4", n), ...t });
1742
+ }
1743
+ aa.displayName = "DialogHeader";
1744
+ function ra({ className: n, ...t }) {
1745
+ return /* @__PURE__ */ e(
1746
+ "div",
1747
+ {
1748
+ className: l("flex flex-col-reverse gap-2 pt-6 sm:flex-row sm:justify-end", n),
1749
+ ...t
1750
+ }
1751
+ );
1752
+ }
1753
+ ra.displayName = "DialogFooter";
1754
+ const na = d(function({ className: t, ...a }, r) {
1755
+ return /* @__PURE__ */ e(
1756
+ S.Title,
1757
+ {
1758
+ ref: r,
1759
+ className: l("text-lg font-semibold text-foreground leading-tight", t),
1760
+ ...a
1761
+ }
1762
+ );
1763
+ });
1764
+ na.displayName = "DialogTitle";
1765
+ const oa = d(function({ className: t, ...a }, r) {
1766
+ return /* @__PURE__ */ e(
1767
+ S.Description,
1768
+ {
1769
+ ref: r,
1770
+ className: l("text-sm text-foreground-muted", t),
1771
+ ...a
1772
+ }
1773
+ );
1774
+ });
1775
+ oa.displayName = "DialogDescription";
1776
+ function Br({
1777
+ open: n,
1778
+ onOpenChange: t,
1779
+ title: a,
1780
+ description: r,
1781
+ confirmLabel: o = "Confirm",
1782
+ cancelLabel: i = "Cancel",
1783
+ confirmVariant: c = "primary",
1784
+ onConfirm: u,
1785
+ loading: m
1786
+ }) {
1787
+ return /* @__PURE__ */ e(jr, { open: n, onOpenChange: t, children: /* @__PURE__ */ s(ta, { size: "sm", children: [
1788
+ /* @__PURE__ */ s(aa, { children: [
1789
+ /* @__PURE__ */ e(na, { children: a }),
1790
+ r && /* @__PURE__ */ e(oa, { children: r })
1791
+ ] }),
1792
+ /* @__PURE__ */ s(ra, { children: [
1793
+ /* @__PURE__ */ e(Rr, { asChild: !0, children: /* @__PURE__ */ e(w, { variant: "outline", children: i }) }),
1794
+ /* @__PURE__ */ e(w, { variant: c, loading: m, onClick: u, children: o })
1795
+ ] })
1796
+ ] }) });
1797
+ }
1798
+ Br.displayName = "ConfirmationDialog";
1799
+ const mt = d(function({ icon: t, title: a, description: r, action: o, secondaryAction: i, className: c, ...u }, m) {
1800
+ return /* @__PURE__ */ s(
1801
+ "div",
1802
+ {
1803
+ ref: m,
1804
+ className: l(
1805
+ "flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-background-subtle p-10 text-center",
1806
+ c
1807
+ ),
1808
+ ...u,
1809
+ children: [
1810
+ t && /* @__PURE__ */ e("div", { className: "inline-flex size-12 items-center justify-center rounded-full bg-background-muted text-foreground-muted [&_svg]:size-6", children: t }),
1811
+ /* @__PURE__ */ e("h3", { className: "text-base font-semibold text-foreground leading-tight", children: a }),
1812
+ r && /* @__PURE__ */ e("p", { className: "max-w-md text-sm text-foreground-muted leading-relaxed", children: r }),
1813
+ (o || i) && /* @__PURE__ */ s("div", { className: "mt-2 flex items-center gap-2", children: [
1814
+ o,
1815
+ i
1816
+ ] })
1817
+ ]
1818
+ }
1819
+ );
1820
+ });
1821
+ mt.displayName = "EmptyState";
1822
+ const Lr = {
1823
+ 404: {
1824
+ icon: /* @__PURE__ */ e(ve, {}),
1825
+ title: "Page not found",
1826
+ description: "We couldn't find what you were looking for."
1827
+ },
1828
+ 500: {
1829
+ icon: /* @__PURE__ */ e($e, {}),
1830
+ title: "Something went wrong",
1831
+ description: "We're looking into it. Please try again in a moment."
1832
+ },
1833
+ generic: {
1834
+ icon: /* @__PURE__ */ e(ve, {}),
1835
+ title: "Unexpected error",
1836
+ description: "Something interrupted this action."
1837
+ }
1838
+ }, $r = d(function({ variant: t = "generic", title: a, description: r, action: o, onRetry: i, className: c, ...u }, m) {
1839
+ const f = Lr[t];
1840
+ return /* @__PURE__ */ s(
1841
+ "div",
1842
+ {
1843
+ ref: m,
1844
+ role: "alert",
1845
+ className: l(
1846
+ "flex flex-col items-center justify-center gap-3 rounded-lg border border-border bg-background-subtle p-10 text-center",
1847
+ c
1848
+ ),
1849
+ ...u,
1850
+ children: [
1851
+ /* @__PURE__ */ e("div", { className: "inline-flex size-12 items-center justify-center rounded-full bg-danger-soft text-danger-text [&_svg]:size-6", children: f.icon }),
1852
+ /* @__PURE__ */ e("h3", { className: "text-base font-semibold text-foreground leading-tight", children: a ?? f.title }),
1853
+ /* @__PURE__ */ e("p", { className: "max-w-md text-sm text-foreground-muted leading-relaxed", children: r ?? f.description }),
1854
+ (o || i) && /* @__PURE__ */ e("div", { className: "mt-2 flex items-center gap-2", children: o ?? /* @__PURE__ */ e(w, { onClick: i, variant: "outline", children: "Try again" }) })
1855
+ ]
1856
+ }
1857
+ );
1858
+ });
1859
+ $r.displayName = "ErrorState";
1860
+ const go = Ra, sa = Ye(null);
1861
+ function po(n) {
1862
+ return /* @__PURE__ */ e(sa.Provider, { value: { name: n.name }, children: /* @__PURE__ */ e(Ba, { ...n }) });
1863
+ }
1864
+ const ia = Ye(null);
1865
+ function He() {
1866
+ const n = xe(sa), t = xe(ia), { getFieldState: a, formState: r } = La();
1867
+ if (!n)
1868
+ throw new Error("useFormField must be used inside <FormField>");
1869
+ const o = a(n.name, r), i = (t == null ? void 0 : t.id) ?? "";
1870
+ return {
1871
+ id: i,
1872
+ name: n.name,
1873
+ formItemId: `${i}-item`,
1874
+ formDescriptionId: `${i}-desc`,
1875
+ formMessageId: `${i}-error`,
1876
+ ...o
1877
+ };
1878
+ }
1879
+ const Or = d(
1880
+ function({ className: t, ...a }, r) {
1881
+ const o = W();
1882
+ return /* @__PURE__ */ e(ia.Provider, { value: { id: o }, children: /* @__PURE__ */ e("div", { ref: r, className: l("flex flex-col gap-1.5", t), ...a }) });
1883
+ }
1884
+ );
1885
+ Or.displayName = "FormItem";
1886
+ const Er = d(function({ className: t, ...a }, r) {
1887
+ const { formItemId: o, error: i } = He();
1888
+ return /* @__PURE__ */ e(
1889
+ Fa.Root,
1890
+ {
1891
+ ref: r,
1892
+ htmlFor: o,
1893
+ className: l(
1894
+ "text-sm font-medium text-foreground",
1895
+ i && "text-danger-text",
1896
+ t
1897
+ ),
1898
+ ...a
1899
+ }
1900
+ );
1901
+ });
1902
+ Er.displayName = "FormLabel";
1903
+ const Gr = d(
1904
+ function(t, a) {
1905
+ const { error: r, formItemId: o, formDescriptionId: i, formMessageId: c } = He();
1906
+ return /* @__PURE__ */ e(
1907
+ Et,
1908
+ {
1909
+ ref: a,
1910
+ id: o,
1911
+ "aria-describedby": r ? `${i} ${c}` : i,
1912
+ "aria-invalid": !!r,
1913
+ ...t
1914
+ }
1915
+ );
1916
+ }
1917
+ );
1918
+ Gr.displayName = "FormControl";
1919
+ const Vr = d(
1920
+ function({ className: t, ...a }, r) {
1921
+ const { formDescriptionId: o } = He();
1922
+ return /* @__PURE__ */ e(
1923
+ "p",
1924
+ {
1925
+ ref: r,
1926
+ id: o,
1927
+ className: l("text-xs text-foreground-subtle", t),
1928
+ ...a
1929
+ }
1930
+ );
1931
+ }
1932
+ );
1933
+ Vr.displayName = "FormDescription";
1934
+ const Hr = d(
1935
+ function({ className: t, children: a, ...r }, o) {
1936
+ const { error: i, formMessageId: c } = He(), u = i ? String((i == null ? void 0 : i.message) ?? "") : a;
1937
+ return u ? /* @__PURE__ */ e(
1938
+ "p",
1939
+ {
1940
+ ref: o,
1941
+ id: c,
1942
+ role: "alert",
1943
+ className: l("text-xs text-danger-text", t),
1944
+ ...r,
1945
+ children: u
1946
+ }
1947
+ ) : null;
1948
+ }
1949
+ );
1950
+ Hr.displayName = "FormError";
1951
+ const Wr = d(function({ size: t = "sm", className: a, ...r }, o) {
1952
+ return /* @__PURE__ */ e(
1953
+ "kbd",
1954
+ {
1955
+ ref: o,
1956
+ className: l(
1957
+ "inline-flex items-center justify-center rounded border border-border bg-background-subtle font-mono",
1958
+ "text-foreground-muted shadow-xs",
1959
+ t === "sm" ? "h-5 min-w-5 px-1 text-[10px]" : "h-6 min-w-6 px-1.5 text-xs",
1960
+ a
1961
+ ),
1962
+ ...r
1963
+ }
1964
+ );
1965
+ });
1966
+ Wr.displayName = "Kbd";
1967
+ const Ur = d(function({
1968
+ options: t,
1969
+ value: a,
1970
+ onChange: r,
1971
+ label: o,
1972
+ helperText: i,
1973
+ error: c,
1974
+ placeholder: u = "Select…",
1975
+ emptyText: m = "No results.",
1976
+ maxVisibleChips: f = 4,
1977
+ clearable: p = !0,
1978
+ disabled: b,
1979
+ className: g
1980
+ }, h) {
1981
+ const x = W(), k = x, v = `${x}-helper`, B = `${x}-error`, [V, A] = y(!1), [O, L] = y(""), C = yt(null), U = Ce(
1982
+ () => t.filter((N) => a.includes(N.value)),
1983
+ [t, a]
1984
+ ), K = ie(
1985
+ (N) => {
1986
+ a.includes(N) ? r(a.filter((Z) => Z !== N)) : r([...a, N]);
1987
+ },
1988
+ [a, r]
1989
+ ), ae = ie(() => r([]), [r]), ce = (N) => {
1990
+ N.key === "Backspace" && O === "" && a.length > 0 && r(a.slice(0, -1));
1991
+ }, E = U.slice(0, f), q = U.length - E.length, re = !!c;
1992
+ return /* @__PURE__ */ s("div", { ref: h, className: l("flex flex-col gap-1.5", g), children: [
1993
+ o && /* @__PURE__ */ e("label", { htmlFor: k, className: "text-sm font-medium text-foreground", children: o }),
1994
+ /* @__PURE__ */ s(z.Root, { open: V, onOpenChange: A, children: [
1995
+ /* @__PURE__ */ e(z.Trigger, { asChild: !0, children: /* @__PURE__ */ s(
1996
+ "div",
1997
+ {
1998
+ role: "combobox",
1999
+ "aria-expanded": V,
2000
+ "aria-controls": `${k}-list`,
2001
+ "aria-haspopup": "listbox",
2002
+ id: k,
2003
+ tabIndex: b ? -1 : 0,
2004
+ onKeyDown: ce,
2005
+ "aria-disabled": b || void 0,
2006
+ "aria-invalid": re || void 0,
2007
+ "aria-describedby": re ? B : i ? v : void 0,
2008
+ className: l(
2009
+ "flex w-full min-h-9 cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-card px-2 py-1 text-sm",
2010
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
2011
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2012
+ re ? "border-danger focus-visible:border-danger focus-visible:ring-danger" : "border-border focus-visible:border-accent focus-visible:ring-ring",
2013
+ b && "opacity-50 pointer-events-none"
2014
+ ),
2015
+ onClick: () => {
2016
+ var N;
2017
+ return (N = C.current) == null ? void 0 : N.focus();
2018
+ },
2019
+ children: [
2020
+ E.length === 0 && /* @__PURE__ */ e("span", { className: "text-foreground-subtle px-1", children: u }),
2021
+ E.map((N) => /* @__PURE__ */ s(
2022
+ "span",
2023
+ {
2024
+ className: "inline-flex items-center gap-1 rounded-md bg-accent-soft px-1.5 py-0.5 text-xs font-medium text-on-accent-soft",
2025
+ children: [
2026
+ N.label,
2027
+ /* @__PURE__ */ e(
2028
+ "button",
2029
+ {
2030
+ type: "button",
2031
+ "aria-label": `Remove ${N.label}`,
2032
+ className: "inline-flex items-center text-on-accent-soft hover:text-foreground",
2033
+ onClick: (Z) => {
2034
+ Z.stopPropagation(), K(N.value);
2035
+ },
2036
+ children: /* @__PURE__ */ e(Y, { className: "size-3", "aria-hidden": !0 })
2037
+ }
2038
+ )
2039
+ ]
2040
+ },
2041
+ N.value
2042
+ )),
2043
+ q > 0 && /* @__PURE__ */ s("span", { className: "rounded-md bg-background-muted px-1.5 py-0.5 text-xs font-medium text-foreground-muted", children: [
2044
+ "+",
2045
+ q,
2046
+ " more"
2047
+ ] }),
2048
+ /* @__PURE__ */ e(
2049
+ "input",
2050
+ {
2051
+ ref: C,
2052
+ value: O,
2053
+ onChange: (N) => L(N.target.value),
2054
+ onFocus: () => A(!0),
2055
+ className: "flex-1 min-w-[8ch] bg-transparent text-sm outline-none placeholder:text-foreground-subtle",
2056
+ placeholder: (U.length === 0, ""),
2057
+ disabled: b
2058
+ }
2059
+ ),
2060
+ /* @__PURE__ */ s("span", { className: "ml-auto flex items-center gap-1", children: [
2061
+ p && U.length > 0 && /* @__PURE__ */ e(
2062
+ "button",
2063
+ {
2064
+ type: "button",
2065
+ "aria-label": "Clear all",
2066
+ onClick: (N) => {
2067
+ N.stopPropagation(), ae();
2068
+ },
2069
+ className: "text-foreground-subtle hover:text-foreground",
2070
+ children: /* @__PURE__ */ e(Y, { className: "size-4", "aria-hidden": !0 })
2071
+ }
2072
+ ),
2073
+ /* @__PURE__ */ e(Fe, { className: "size-4 text-foreground-subtle", "aria-hidden": !0 })
2074
+ ] })
2075
+ ]
2076
+ }
2077
+ ) }),
2078
+ /* @__PURE__ */ e(z.Portal, { children: /* @__PURE__ */ e(
2079
+ z.Content,
2080
+ {
2081
+ align: "start",
2082
+ sideOffset: 4,
2083
+ className: l(
2084
+ "z-[var(--z-popover)] w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md",
2085
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
2086
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2087
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"
2088
+ ),
2089
+ onOpenAutoFocus: (N) => N.preventDefault(),
2090
+ children: /* @__PURE__ */ e(I, { shouldFilter: !1, className: "flex h-full w-full flex-col", children: /* @__PURE__ */ s(
2091
+ I.List,
2092
+ {
2093
+ id: `${k}-list`,
2094
+ className: "max-h-64 overflow-y-auto p-1",
2095
+ children: [
2096
+ t.filter((N) => N.label.toLowerCase().includes(O.toLowerCase())).map((N) => {
2097
+ const Z = a.includes(N.value);
2098
+ return /* @__PURE__ */ s(
2099
+ I.Item,
2100
+ {
2101
+ value: N.value,
2102
+ disabled: N.disabled,
2103
+ onSelect: () => K(N.value),
2104
+ className: l(
2105
+ "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground",
2106
+ "data-[selected=true]:bg-background-muted",
2107
+ "data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none"
2108
+ ),
2109
+ children: [
2110
+ /* @__PURE__ */ e(
2111
+ "span",
2112
+ {
2113
+ "aria-hidden": !0,
2114
+ className: l(
2115
+ "flex size-4 items-center justify-center rounded-sm border",
2116
+ Z ? "border-accent bg-accent text-on-accent" : "border-border"
2117
+ ),
2118
+ children: Z && /* @__PURE__ */ e(J, { className: "size-3", "aria-hidden": !0 })
2119
+ }
2120
+ ),
2121
+ /* @__PURE__ */ e("span", { className: "flex-1", children: N.label }),
2122
+ N.description && /* @__PURE__ */ e("span", { className: "text-xs text-foreground-subtle", children: N.description })
2123
+ ]
2124
+ },
2125
+ N.value
2126
+ );
2127
+ }),
2128
+ /* @__PURE__ */ e(I.Empty, { className: "px-2 py-6 text-center text-sm text-foreground-subtle", children: m })
2129
+ ]
2130
+ }
2131
+ ) })
2132
+ }
2133
+ ) })
2134
+ ] }),
2135
+ c ? /* @__PURE__ */ e("p", { id: B, role: "alert", className: "text-xs text-danger-text", children: c }) : i ? /* @__PURE__ */ e("p", { id: v, className: "text-xs text-foreground-subtle", children: i }) : null
2136
+ ] });
2137
+ });
2138
+ Ur.displayName = "MultiSelect";
2139
+ const la = M.Root, ho = M.Value, ft = d(function({ className: t, placeholder: a, size: r = "md", tone: o = "default", ...i }, c) {
2140
+ return /* @__PURE__ */ s(
2141
+ M.Trigger,
2142
+ {
2143
+ ref: c,
2144
+ className: l(
2145
+ "inline-flex w-full items-center justify-between gap-2 rounded-md border bg-card text-sm text-foreground",
2146
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
2147
+ "outline-none",
2148
+ "focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2149
+ "disabled:opacity-50 disabled:cursor-not-allowed",
2150
+ "data-[placeholder]:text-foreground-subtle",
2151
+ r === "sm" && "h-8 px-2.5",
2152
+ r === "md" && "h-9 px-3",
2153
+ r === "lg" && "h-10 px-3.5",
2154
+ o === "default" ? "border-border focus-visible:border-accent focus-visible:ring-ring" : "border-danger focus-visible:border-danger focus-visible:ring-danger",
2155
+ t
2156
+ ),
2157
+ ...i,
2158
+ children: [
2159
+ /* @__PURE__ */ e(M.Value, { placeholder: a }),
2160
+ /* @__PURE__ */ e(M.Icon, { asChild: !0, children: /* @__PURE__ */ e(Fe, { className: "size-4 text-foreground-subtle shrink-0", "aria-hidden": !0 }) })
2161
+ ]
2162
+ }
2163
+ );
2164
+ });
2165
+ ft.displayName = "SelectTrigger";
2166
+ const da = "flex h-6 cursor-default items-center justify-center text-foreground-subtle", ca = d(function({ className: t, ...a }, r) {
2167
+ return /* @__PURE__ */ e(M.ScrollUpButton, { ref: r, className: l(da, t), ...a, children: /* @__PURE__ */ e(Tt, { className: "size-4", "aria-hidden": !0 }) });
2168
+ });
2169
+ ca.displayName = "SelectScrollUpButton";
2170
+ const ua = d(function({ className: t, ...a }, r) {
2171
+ return /* @__PURE__ */ e(M.ScrollDownButton, { ref: r, className: l(da, t), ...a, children: /* @__PURE__ */ e(je, { className: "size-4", "aria-hidden": !0 }) });
2172
+ });
2173
+ ua.displayName = "SelectScrollDownButton";
2174
+ const gt = d(function({ className: t, children: a, position: r = "popper", ...o }, i) {
2175
+ return /* @__PURE__ */ e(M.Portal, { children: /* @__PURE__ */ s(
2176
+ M.Content,
2177
+ {
2178
+ ref: i,
2179
+ position: r,
2180
+ className: l(
2181
+ "z-[var(--z-popover)] min-w-[var(--radix-select-trigger-width)] max-h-96",
2182
+ "overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground",
2183
+ "shadow-md",
2184
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
2185
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2186
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
2187
+ r === "popper" && "data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1",
2188
+ t
2189
+ ),
2190
+ ...o,
2191
+ children: [
2192
+ /* @__PURE__ */ e(ca, {}),
2193
+ /* @__PURE__ */ e(M.Viewport, { className: "p-1", children: a }),
2194
+ /* @__PURE__ */ e(ua, {})
2195
+ ]
2196
+ }
2197
+ ) });
2198
+ });
2199
+ gt.displayName = "SelectContent";
2200
+ const ma = d(function({ className: t, ...a }, r) {
2201
+ return /* @__PURE__ */ e(
2202
+ M.Label,
2203
+ {
2204
+ ref: r,
2205
+ className: l("px-2 py-1.5 text-xs font-medium text-foreground-subtle", t),
2206
+ ...a
2207
+ }
2208
+ );
2209
+ });
2210
+ ma.displayName = "SelectLabel";
2211
+ const me = d(function({ className: t, children: a, leadingIcon: r, ...o }, i) {
2212
+ return /* @__PURE__ */ s(
2213
+ M.Item,
2214
+ {
2215
+ ref: i,
2216
+ className: l(
2217
+ "relative flex w-full cursor-default select-none items-center gap-2",
2218
+ "rounded-sm px-2 py-1.5 pr-8 text-sm text-foreground outline-none",
2219
+ "data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground",
2220
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2221
+ t
2222
+ ),
2223
+ ...o,
2224
+ children: [
2225
+ r && /* @__PURE__ */ e("span", { className: "flex items-center text-foreground-subtle [&_svg]:size-4", children: r }),
2226
+ /* @__PURE__ */ e(M.ItemText, { children: a }),
2227
+ /* @__PURE__ */ e("span", { className: "absolute right-2 flex items-center justify-center", children: /* @__PURE__ */ e(M.ItemIndicator, { children: /* @__PURE__ */ e(J, { className: "size-4 text-accent", "aria-hidden": !0 }) }) })
2228
+ ]
2229
+ }
2230
+ );
2231
+ });
2232
+ me.displayName = "SelectItem";
2233
+ const Kr = d(function({ className: t, ...a }, r) {
2234
+ return /* @__PURE__ */ e(
2235
+ M.Separator,
2236
+ {
2237
+ ref: r,
2238
+ className: l("-mx-1 my-1 h-px bg-border", t),
2239
+ ...a
2240
+ }
2241
+ );
2242
+ });
2243
+ Kr.displayName = "SelectSeparator";
2244
+ const qr = d(function({ label: t, children: a, ...r }, o) {
2245
+ return /* @__PURE__ */ s(M.Group, { ref: o, ...r, children: [
2246
+ t && /* @__PURE__ */ e(ma, { children: t }),
2247
+ a
2248
+ ] });
2249
+ });
2250
+ qr.displayName = "SelectGroup";
2251
+ function Qr(n, t, a = 7) {
2252
+ if (t <= a) return Array.from({ length: t }, (u, m) => m + 1);
2253
+ const r = 1, o = [], i = Math.max(2, n - r), c = Math.min(t - 1, n + r);
2254
+ o.push(1), i > 2 && o.push("gap");
2255
+ for (let u = i; u <= c; u++) o.push(u);
2256
+ return c < t - 1 && o.push("gap"), o.push(t), o;
2257
+ }
2258
+ const fa = d(function({
2259
+ page: t,
2260
+ pageCount: a,
2261
+ onPageChange: r,
2262
+ totalItems: o,
2263
+ pageSize: i,
2264
+ pageSizeOptions: c,
2265
+ onPageSizeChange: u,
2266
+ showJump: m = !0,
2267
+ className: f,
2268
+ ...p
2269
+ }, b) {
2270
+ const g = Ce(() => Qr(t, a), [t, a]), h = i ? (t - 1) * i + 1 : void 0, x = i && o ? Math.min(t * i, o) : void 0, k = (v) => {
2271
+ v < 1 || v > a || v === t || r(v);
2272
+ };
2273
+ return /* @__PURE__ */ s(
2274
+ "nav",
2275
+ {
2276
+ ref: b,
2277
+ "aria-label": "Pagination",
2278
+ className: l("flex flex-wrap items-center justify-between gap-3", f),
2279
+ ...p,
2280
+ children: [
2281
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-3 text-sm text-foreground-muted", children: [
2282
+ o !== void 0 && i !== void 0 && /* @__PURE__ */ s("span", { className: "tabular", children: [
2283
+ "Showing ",
2284
+ h,
2285
+ "–",
2286
+ x,
2287
+ " of ",
2288
+ o
2289
+ ] }),
2290
+ c && u && i !== void 0 && /* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
2291
+ /* @__PURE__ */ e("label", { htmlFor: "page-size", className: "sr-only", children: "Rows per page" }),
2292
+ /* @__PURE__ */ s(la, { value: String(i), onValueChange: (v) => u(Number(v)), children: [
2293
+ /* @__PURE__ */ e(ft, { size: "sm", className: "w-20" }),
2294
+ /* @__PURE__ */ e(gt, { children: c.map((v) => /* @__PURE__ */ s(me, { value: String(v), children: [
2295
+ v,
2296
+ " / page"
2297
+ ] }, v)) })
2298
+ ] })
2299
+ ] })
2300
+ ] }),
2301
+ /* @__PURE__ */ s("ul", { className: "flex items-center gap-1", children: [
2302
+ m && /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
2303
+ "button",
2304
+ {
2305
+ type: "button",
2306
+ "aria-label": "Go to first page",
2307
+ disabled: t === 1,
2308
+ onClick: () => k(1),
2309
+ className: Te,
2310
+ children: /* @__PURE__ */ e(et, { className: "size-4", "aria-hidden": !0 })
2311
+ }
2312
+ ) }),
2313
+ /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
2314
+ "button",
2315
+ {
2316
+ type: "button",
2317
+ "aria-label": "Previous page",
2318
+ disabled: t === 1,
2319
+ onClick: () => k(t - 1),
2320
+ className: Te,
2321
+ children: /* @__PURE__ */ e(Ze, { className: "size-4", "aria-hidden": !0 })
2322
+ }
2323
+ ) }),
2324
+ g.map(
2325
+ (v, B) => v === "gap" ? /* @__PURE__ */ e("li", { className: "px-2 text-foreground-subtle", children: "…" }, `gap-${B}`) : /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
2326
+ "button",
2327
+ {
2328
+ type: "button",
2329
+ "aria-label": `Page ${v}`,
2330
+ "aria-current": v === t ? "page" : void 0,
2331
+ onClick: () => k(v),
2332
+ className: l(
2333
+ "inline-flex size-8 items-center justify-center rounded-md text-sm tabular outline-none",
2334
+ "transition-colors duration-[var(--duration-fast)]",
2335
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2336
+ v === t ? "bg-accent text-on-accent font-medium" : "text-foreground-muted hover:bg-background-muted hover:text-foreground"
2337
+ ),
2338
+ children: v
2339
+ }
2340
+ ) }, v)
2341
+ ),
2342
+ /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
2343
+ "button",
2344
+ {
2345
+ type: "button",
2346
+ "aria-label": "Next page",
2347
+ disabled: t === a,
2348
+ onClick: () => k(t + 1),
2349
+ className: Te,
2350
+ children: /* @__PURE__ */ e(le, { className: "size-4", "aria-hidden": !0 })
2351
+ }
2352
+ ) }),
2353
+ m && /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
2354
+ "button",
2355
+ {
2356
+ type: "button",
2357
+ "aria-label": "Go to last page",
2358
+ disabled: t === a,
2359
+ onClick: () => k(a),
2360
+ className: Te,
2361
+ children: /* @__PURE__ */ e(tt, { className: "size-4", "aria-hidden": !0 })
2362
+ }
2363
+ ) })
2364
+ ] })
2365
+ ]
2366
+ }
2367
+ );
2368
+ });
2369
+ fa.displayName = "Pagination";
2370
+ const Te = l(
2371
+ "inline-flex size-8 items-center justify-center rounded-md text-foreground-muted",
2372
+ "transition-colors duration-[var(--duration-fast)]",
2373
+ "hover:bg-background-muted hover:text-foreground",
2374
+ "disabled:opacity-50 disabled:pointer-events-none",
2375
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
2376
+ ), bo = z.Root, xo = z.Trigger, vo = z.Anchor, No = z.Close, Xr = d(function({ className: t, align: a = "center", sideOffset: r = 4, ...o }, i) {
2377
+ return /* @__PURE__ */ e(z.Portal, { children: /* @__PURE__ */ e(
2378
+ z.Content,
2379
+ {
2380
+ ref: i,
2381
+ align: a,
2382
+ sideOffset: r,
2383
+ className: l(
2384
+ "z-[var(--z-popover)] w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-md",
2385
+ "outline-none",
2386
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
2387
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2388
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
2389
+ "data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1",
2390
+ "data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1",
2391
+ t
2392
+ ),
2393
+ ...o
2394
+ }
2395
+ ) });
2396
+ });
2397
+ Xr.displayName = "PopoverContent";
2398
+ const Yr = { sm: "h-1", md: "h-1.5", lg: "h-2" }, Jr = {
2399
+ accent: "bg-accent",
2400
+ success: "bg-success",
2401
+ warning: "bg-warning",
2402
+ danger: "bg-danger"
2403
+ }, Zr = d(
2404
+ function({ className: t, value: a, size: r = "md", tone: o = "accent", ...i }, c) {
2405
+ const u = a == null;
2406
+ return /* @__PURE__ */ s(
2407
+ ht.Root,
2408
+ {
2409
+ ref: c,
2410
+ value: u ? void 0 : a,
2411
+ className: l(
2412
+ "relative w-full overflow-hidden rounded-full bg-background-muted",
2413
+ Yr[r],
2414
+ t
2415
+ ),
2416
+ ...i,
2417
+ children: [
2418
+ /* @__PURE__ */ e(
2419
+ ht.Indicator,
2420
+ {
2421
+ className: l(
2422
+ "h-full w-full flex-1 transition-transform",
2423
+ Jr[o],
2424
+ u && "animate-[progressIndeterminate_1.4s_ease-in-out_infinite] origin-left"
2425
+ ),
2426
+ style: u ? void 0 : { transform: `translateX(-${100 - (a ?? 0)}%)` }
2427
+ }
2428
+ ),
2429
+ /* @__PURE__ */ e("style", { children: `
2430
+ @keyframes progressIndeterminate {
2431
+ 0% { transform: translateX(-100%) scaleX(0.6); }
2432
+ 50% { transform: translateX(0%) scaleX(0.4); }
2433
+ 100% { transform: translateX(100%) scaleX(0.6); }
2434
+ }
2435
+ ` })
2436
+ ]
2437
+ }
2438
+ );
2439
+ }
2440
+ );
2441
+ Zr.displayName = "Progress";
2442
+ const en = {
2443
+ accent: "stroke-accent",
2444
+ success: "stroke-success",
2445
+ warning: "stroke-warning",
2446
+ danger: "stroke-danger"
2447
+ }, tn = d(function({ value: t, size: a = 36, thickness: r = 3, className: o, tone: i = "accent", ...c }, u) {
2448
+ const m = t === void 0, f = (a - r) / 2, p = 2 * Math.PI * f, b = m ? 0 : p - Math.min(100, Math.max(0, t)) / 100 * p;
2449
+ return /* @__PURE__ */ s(
2450
+ "svg",
2451
+ {
2452
+ ref: u,
2453
+ width: a,
2454
+ height: a,
2455
+ viewBox: `0 0 ${a} ${a}`,
2456
+ role: "progressbar",
2457
+ "aria-valuemin": 0,
2458
+ "aria-valuemax": 100,
2459
+ "aria-valuenow": m ? void 0 : t,
2460
+ className: l("shrink-0", m && "animate-spin", o),
2461
+ ...c,
2462
+ children: [
2463
+ /* @__PURE__ */ e(
2464
+ "circle",
2465
+ {
2466
+ cx: a / 2,
2467
+ cy: a / 2,
2468
+ r: f,
2469
+ strokeWidth: r,
2470
+ className: "stroke-background-muted fill-none"
2471
+ }
2472
+ ),
2473
+ /* @__PURE__ */ e(
2474
+ "circle",
2475
+ {
2476
+ cx: a / 2,
2477
+ cy: a / 2,
2478
+ r: f,
2479
+ strokeWidth: r,
2480
+ strokeLinecap: "round",
2481
+ strokeDasharray: p,
2482
+ strokeDashoffset: m ? p * 0.7 : b,
2483
+ className: l(en[i], "fill-none transition-[stroke-dashoffset]"),
2484
+ transform: `rotate(-90 ${a / 2} ${a / 2})`
2485
+ }
2486
+ )
2487
+ ]
2488
+ }
2489
+ );
2490
+ });
2491
+ tn.displayName = "ProgressCircle";
2492
+ const ga = d(function({ className: t, orientation: a = "vertical", ...r }, o) {
2493
+ return /* @__PURE__ */ e(
2494
+ Qe.Root,
2495
+ {
2496
+ ref: o,
2497
+ className: l(
2498
+ "flex gap-3",
2499
+ a === "vertical" ? "flex-col" : "flex-row flex-wrap",
2500
+ t
2501
+ ),
2502
+ ...r
2503
+ }
2504
+ );
2505
+ });
2506
+ ga.displayName = "RadioGroup";
2507
+ const Ae = d(function({ className: t, label: a, description: r, hideLabel: o, id: i, disabled: c, ...u }, m) {
2508
+ const f = W(), p = i ?? f, b = r ? `${p}-desc` : void 0;
2509
+ return /* @__PURE__ */ s("div", { className: l("flex items-start gap-2.5", t), children: [
2510
+ /* @__PURE__ */ e(
2511
+ Qe.Item,
2512
+ {
2513
+ ref: m,
2514
+ id: p,
2515
+ disabled: c,
2516
+ "aria-describedby": b,
2517
+ className: l(
2518
+ "mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border bg-card",
2519
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
2520
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2521
+ "data-[state=checked]:border-accent",
2522
+ "disabled:cursor-not-allowed disabled:opacity-50",
2523
+ "border-border-strong"
2524
+ ),
2525
+ ...u,
2526
+ children: /* @__PURE__ */ e(Qe.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ e("span", { className: "size-2 rounded-full bg-accent", "aria-hidden": !0 }) })
2527
+ }
2528
+ ),
2529
+ a && /* @__PURE__ */ s("div", { className: l("flex flex-col gap-0.5", o && "sr-only"), children: [
2530
+ /* @__PURE__ */ e(
2531
+ "label",
2532
+ {
2533
+ htmlFor: p,
2534
+ className: l(
2535
+ "text-sm text-foreground select-none",
2536
+ c && "opacity-50 cursor-not-allowed"
2537
+ ),
2538
+ children: a
2539
+ }
2540
+ ),
2541
+ r && /* @__PURE__ */ e("p", { id: b, className: "text-xs text-foreground-subtle", children: r })
2542
+ ] })
2543
+ ] });
2544
+ });
2545
+ Ae.displayName = "RadioItem";
2546
+ const an = d(function({ className: t, children: a, ...r }, o) {
2547
+ return /* @__PURE__ */ s(
2548
+ be.Root,
2549
+ {
2550
+ ref: o,
2551
+ className: l("relative overflow-hidden", t),
2552
+ ...r,
2553
+ children: [
2554
+ /* @__PURE__ */ e(be.Viewport, { className: "h-full w-full rounded-[inherit]", children: a }),
2555
+ /* @__PURE__ */ e(pa, {}),
2556
+ /* @__PURE__ */ e(be.Corner, {})
2557
+ ]
2558
+ }
2559
+ );
2560
+ });
2561
+ an.displayName = "ScrollArea";
2562
+ const pa = d(function({ className: t, orientation: a = "vertical", ...r }, o) {
2563
+ return /* @__PURE__ */ e(
2564
+ be.ScrollAreaScrollbar,
2565
+ {
2566
+ ref: o,
2567
+ orientation: a,
2568
+ className: l(
2569
+ "flex touch-none select-none transition-colors duration-[var(--duration-fast)]",
2570
+ a === "vertical" && "h-full w-2 border-l border-l-transparent p-px",
2571
+ a === "horizontal" && "h-2 flex-col border-t border-t-transparent p-px",
2572
+ t
2573
+ ),
2574
+ ...r,
2575
+ children: /* @__PURE__ */ e(be.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border-strong" })
2576
+ }
2577
+ );
2578
+ });
2579
+ pa.displayName = "ScrollBar";
2580
+ const fe = d(function({ className: t, orientation: a = "horizontal", decorative: r = !0, ...o }, i) {
2581
+ return /* @__PURE__ */ e(
2582
+ $a.Root,
2583
+ {
2584
+ ref: i,
2585
+ orientation: a,
2586
+ decorative: r,
2587
+ className: l(
2588
+ "shrink-0 bg-border",
2589
+ a === "horizontal" ? "h-px w-full" : "h-full w-px",
2590
+ t
2591
+ ),
2592
+ ...o
2593
+ }
2594
+ );
2595
+ });
2596
+ fe.displayName = "Separator";
2597
+ const yo = S.Root, wo = S.Trigger, ko = S.Close, rn = S.Portal, ha = d(function({ className: t, ...a }, r) {
2598
+ return /* @__PURE__ */ e(
2599
+ S.Overlay,
2600
+ {
2601
+ ref: r,
2602
+ className: l(
2603
+ "fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]",
2604
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
2605
+ "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
2606
+ t
2607
+ ),
2608
+ ...a
2609
+ }
2610
+ );
2611
+ });
2612
+ ha.displayName = "SheetOverlay";
2613
+ const nn = G(
2614
+ [
2615
+ "fixed z-[var(--z-modal)] bg-card text-card-foreground shadow-lg",
2616
+ "flex flex-col gap-4 p-6",
2617
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
2618
+ "data-[state=closed]:duration-[var(--duration-base)] data-[state=open]:duration-[var(--duration-slow)]"
2619
+ ],
2620
+ {
2621
+ variants: {
2622
+ side: {
2623
+ top: "inset-x-0 top-0 border-b border-border data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top",
2624
+ bottom: "inset-x-0 bottom-0 border-t border-border data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom",
2625
+ left: "inset-y-0 left-0 h-full w-3/4 max-w-md border-r border-border data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left",
2626
+ right: "inset-y-0 right-0 h-full w-3/4 max-w-md border-l border-border data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right"
2627
+ }
2628
+ },
2629
+ defaultVariants: { side: "right" }
2630
+ }
2631
+ ), on = d(function({ className: t, children: a, side: r = "right", showClose: o = !0, ...i }, c) {
2632
+ return /* @__PURE__ */ s(rn, { children: [
2633
+ /* @__PURE__ */ e(ha, {}),
2634
+ /* @__PURE__ */ s(S.Content, { ref: c, className: l(nn({ side: r }), t), ...i, children: [
2635
+ a,
2636
+ o && /* @__PURE__ */ e(
2637
+ S.Close,
2638
+ {
2639
+ "aria-label": "Close",
2640
+ className: l(
2641
+ "absolute right-4 top-4 inline-flex size-8 items-center justify-center rounded-md text-foreground-subtle",
2642
+ "hover:bg-background-muted hover:text-foreground",
2643
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
2644
+ "transition-colors duration-[var(--duration-fast)]"
2645
+ ),
2646
+ children: /* @__PURE__ */ e(Y, { className: "size-4", "aria-hidden": !0 })
2647
+ }
2648
+ )
2649
+ ] })
2650
+ ] });
2651
+ });
2652
+ on.displayName = "SheetContent";
2653
+ function sn({ className: n, ...t }) {
2654
+ return /* @__PURE__ */ e("div", { className: l("flex flex-col gap-1", n), ...t });
2655
+ }
2656
+ sn.displayName = "SheetHeader";
2657
+ function ln({ className: n, ...t }) {
2658
+ return /* @__PURE__ */ e(
2659
+ "div",
2660
+ {
2661
+ className: l("mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end", n),
2662
+ ...t
2663
+ }
2664
+ );
2665
+ }
2666
+ ln.displayName = "SheetFooter";
2667
+ const dn = d(function({ className: t, ...a }, r) {
2668
+ return /* @__PURE__ */ e(
2669
+ S.Title,
2670
+ {
2671
+ ref: r,
2672
+ className: l("text-lg font-semibold text-foreground leading-tight", t),
2673
+ ...a
2674
+ }
2675
+ );
2676
+ });
2677
+ dn.displayName = "SheetTitle";
2678
+ const cn = d(function({ className: t, ...a }, r) {
2679
+ return /* @__PURE__ */ e(
2680
+ S.Description,
2681
+ {
2682
+ ref: r,
2683
+ className: l("text-sm text-foreground-muted", t),
2684
+ ...a
2685
+ }
2686
+ );
2687
+ });
2688
+ cn.displayName = "SheetDescription";
2689
+ const We = Ye({ collapsed: !1 }), ba = d(function({
2690
+ defaultCollapsed: t = !1,
2691
+ collapsed: a,
2692
+ onCollapsedChange: r,
2693
+ footer: o,
2694
+ className: i,
2695
+ children: c,
2696
+ ...u
2697
+ }, m) {
2698
+ const [f, p] = y(t), b = a ?? f, g = (h) => {
2699
+ a === void 0 && p(h), r == null || r(h);
2700
+ };
2701
+ return /* @__PURE__ */ e(We.Provider, { value: { collapsed: b }, children: /* @__PURE__ */ s(
2702
+ "aside",
2703
+ {
2704
+ ref: m,
2705
+ "aria-label": "Primary",
2706
+ className: l(
2707
+ "sticky top-0 hidden md:flex h-screen shrink-0 flex-col gap-2 border-r border-border bg-background-subtle",
2708
+ "transition-[width] duration-[var(--duration-base)] ease-[var(--ease-out)]",
2709
+ b ? "w-14" : "w-60",
2710
+ i
2711
+ ),
2712
+ ...u,
2713
+ children: [
2714
+ /* @__PURE__ */ e("div", { className: "flex-1 overflow-y-auto py-3", children: c }),
2715
+ o && /* @__PURE__ */ e("div", { className: "border-t border-border p-2", children: o }),
2716
+ /* @__PURE__ */ s(
2717
+ "button",
2718
+ {
2719
+ type: "button",
2720
+ onClick: () => g(!b),
2721
+ "aria-label": b ? "Expand sidebar" : "Collapse sidebar",
2722
+ "aria-expanded": !b,
2723
+ className: l(
2724
+ "flex h-8 items-center gap-2 mx-2 mb-2 rounded-md px-2 text-foreground-subtle",
2725
+ "hover:bg-background-muted hover:text-foreground outline-none",
2726
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2727
+ "transition-colors duration-[var(--duration-fast)]"
2728
+ ),
2729
+ children: [
2730
+ b ? /* @__PURE__ */ e(tt, { className: "size-4", "aria-hidden": !0 }) : /* @__PURE__ */ e(et, { className: "size-4", "aria-hidden": !0 }),
2731
+ !b && /* @__PURE__ */ e("span", { className: "text-xs font-medium", children: "Collapse" })
2732
+ ]
2733
+ }
2734
+ )
2735
+ ]
2736
+ }
2737
+ ) });
2738
+ });
2739
+ ba.displayName = "Sidebar";
2740
+ function Xe({ label: n, className: t, children: a, ...r }) {
2741
+ const { collapsed: o } = xe(We);
2742
+ return /* @__PURE__ */ s("div", { className: l("mb-3", t), ...r, children: [
2743
+ n && !o && /* @__PURE__ */ e("div", { className: "px-4 pb-1 pt-2 text-xs font-medium text-foreground-subtle uppercase tracking-wide", children: n }),
2744
+ /* @__PURE__ */ e("ul", { className: "flex flex-col gap-px", children: a })
2745
+ ] });
2746
+ }
2747
+ Xe.displayName = "SidebarSection";
2748
+ function ue({
2749
+ icon: n,
2750
+ active: t,
2751
+ href: a,
2752
+ trailing: r,
2753
+ sub: o,
2754
+ className: i,
2755
+ children: c,
2756
+ ...u
2757
+ }) {
2758
+ const { collapsed: m } = xe(We);
2759
+ return /* @__PURE__ */ e("li", { children: /* @__PURE__ */ s(
2760
+ a ? "a" : "button",
2761
+ {
2762
+ href: a,
2763
+ "aria-current": t ? "page" : void 0,
2764
+ className: l(
2765
+ "mx-2 flex h-8 items-center gap-2 rounded-md px-2 text-sm outline-none",
2766
+ "transition-colors duration-[var(--duration-fast)]",
2767
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2768
+ t ? "bg-background-muted text-foreground font-medium" : "text-foreground-muted hover:bg-background-muted hover:text-foreground",
2769
+ o && !m && "ml-6",
2770
+ m && "justify-center",
2771
+ i
2772
+ ),
2773
+ ...u,
2774
+ children: [
2775
+ n && /* @__PURE__ */ e("span", { className: "flex shrink-0 items-center [&_svg]:size-4", children: n }),
2776
+ !m && /* @__PURE__ */ e("span", { className: "flex-1 truncate text-left", children: c }),
2777
+ !m && r && /* @__PURE__ */ e("span", { className: "ml-auto", children: r })
2778
+ ]
2779
+ }
2780
+ ) });
2781
+ }
2782
+ ue.displayName = "SidebarItem";
2783
+ function un({ icon: n, label: t, defaultOpen: a = !0, children: r }) {
2784
+ const { collapsed: o } = xe(We), [i, c] = y(a);
2785
+ return o ? /* @__PURE__ */ e(te, { children: r }) : /* @__PURE__ */ s("li", { children: [
2786
+ /* @__PURE__ */ s(
2787
+ "button",
2788
+ {
2789
+ type: "button",
2790
+ onClick: () => c((u) => !u),
2791
+ "aria-expanded": i,
2792
+ className: l(
2793
+ "mx-2 flex h-8 w-[calc(100%-1rem)] items-center gap-2 rounded-md px-2 text-sm text-foreground-muted outline-none",
2794
+ "transition-colors duration-[var(--duration-fast)]",
2795
+ "hover:bg-background-muted hover:text-foreground",
2796
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
2797
+ ),
2798
+ children: [
2799
+ n && /* @__PURE__ */ e("span", { className: "flex shrink-0 items-center [&_svg]:size-4", children: n }),
2800
+ /* @__PURE__ */ e("span", { className: "flex-1 text-left", children: t }),
2801
+ /* @__PURE__ */ e(je, { className: l("size-3.5 transition-transform", i && "rotate-180"), "aria-hidden": !0 })
2802
+ ]
2803
+ }
2804
+ ),
2805
+ i && /* @__PURE__ */ e("ul", { className: "flex flex-col gap-px", children: r })
2806
+ ] });
2807
+ }
2808
+ un.displayName = "SidebarGroup";
2809
+ const mn = d(
2810
+ function({
2811
+ className: t,
2812
+ label: a,
2813
+ showValue: r,
2814
+ formatValue: o = (f) => String(f),
2815
+ value: i,
2816
+ defaultValue: c,
2817
+ ...u
2818
+ }, m) {
2819
+ const f = i ?? c ?? [0], p = f.length > 1;
2820
+ return /* @__PURE__ */ s("div", { className: l("flex flex-col gap-2", t), children: [
2821
+ (a || r) && /* @__PURE__ */ s("div", { className: "flex items-center justify-between", children: [
2822
+ a && /* @__PURE__ */ e("span", { className: "text-sm font-medium text-foreground", children: a }),
2823
+ r && /* @__PURE__ */ e("span", { className: "text-xs tabular text-foreground-muted font-mono", children: p ? `${o(f[0])} – ${o(f[1])}` : o(f[0]) })
2824
+ ] }),
2825
+ /* @__PURE__ */ s(
2826
+ ze.Root,
2827
+ {
2828
+ ref: m,
2829
+ value: i,
2830
+ defaultValue: c,
2831
+ className: "relative flex w-full touch-none select-none items-center",
2832
+ ...u,
2833
+ children: [
2834
+ /* @__PURE__ */ e(ze.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-full bg-background-muted", children: /* @__PURE__ */ e(ze.Range, { className: "absolute h-full bg-accent" }) }),
2835
+ f.map((b, g) => /* @__PURE__ */ e(
2836
+ ze.Thumb,
2837
+ {
2838
+ className: l(
2839
+ "block size-4 rounded-full border-2 border-accent bg-card shadow-sm",
2840
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2841
+ "transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out)]",
2842
+ "hover:scale-110 disabled:pointer-events-none disabled:opacity-50"
2843
+ ),
2844
+ "aria-label": p ? g === 0 ? "Minimum" : "Maximum" : a ? String(a) : "Value"
2845
+ },
2846
+ g
2847
+ ))
2848
+ ]
2849
+ }
2850
+ )
2851
+ ] });
2852
+ }
2853
+ );
2854
+ mn.displayName = "Slider";
2855
+ const fn = { sm: "size-3.5", md: "size-4", lg: "size-6" }, gn = {
2856
+ accent: "text-accent",
2857
+ neutral: "text-foreground-subtle",
2858
+ "on-accent": "text-on-accent"
2859
+ }, pn = d(function({ className: t, tone: a = "accent", size: r = "md", label: o, decorative: i, ...c }, u) {
2860
+ return /* @__PURE__ */ s(
2861
+ "svg",
2862
+ {
2863
+ ref: u,
2864
+ viewBox: "0 0 24 24",
2865
+ role: i ? void 0 : "status",
2866
+ "aria-label": i ? void 0 : o ?? "Loading",
2867
+ "aria-hidden": i || void 0,
2868
+ className: l("animate-spin", fn[r], gn[a], t),
2869
+ ...c,
2870
+ children: [
2871
+ /* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2.5", strokeOpacity: 0.2, fill: "none" }),
2872
+ /* @__PURE__ */ e(
2873
+ "path",
2874
+ {
2875
+ d: "M12 2a10 10 0 0 1 10 10",
2876
+ stroke: "currentColor",
2877
+ strokeWidth: "2.5",
2878
+ strokeLinecap: "round",
2879
+ fill: "none"
2880
+ }
2881
+ )
2882
+ ]
2883
+ }
2884
+ );
2885
+ });
2886
+ pn.displayName = "Spinner";
2887
+ const xa = d(function({ steps: t, current: a, orientation: r = "horizontal", className: o, ...i }, c) {
2888
+ return /* @__PURE__ */ e(
2889
+ "ol",
2890
+ {
2891
+ ref: c,
2892
+ "aria-label": "Progress",
2893
+ className: l(
2894
+ r === "horizontal" ? "flex w-full items-center" : "flex flex-col gap-6",
2895
+ o
2896
+ ),
2897
+ ...i,
2898
+ children: t.map((u, m) => {
2899
+ const f = m < a ? "complete" : m === a ? "current" : "upcoming", p = m === t.length - 1;
2900
+ return /* @__PURE__ */ s(
2901
+ "li",
2902
+ {
2903
+ "aria-current": f === "current" ? "step" : void 0,
2904
+ className: l(
2905
+ r === "horizontal" ? "flex flex-1 items-center gap-3 last:flex-initial" : "flex items-start gap-3"
2906
+ ),
2907
+ children: [
2908
+ /* @__PURE__ */ s("div", { className: l(r === "horizontal" ? "flex items-center gap-3" : "flex flex-col items-center"), children: [
2909
+ /* @__PURE__ */ e(
2910
+ "span",
2911
+ {
2912
+ "aria-hidden": !0,
2913
+ className: l(
2914
+ "inline-flex size-7 items-center justify-center rounded-full text-xs font-semibold transition-colors",
2915
+ f === "complete" && "bg-accent text-on-accent",
2916
+ f === "current" && "bg-card border-2 border-accent text-accent",
2917
+ f === "upcoming" && "bg-background-muted text-foreground-subtle border border-border"
2918
+ ),
2919
+ children: f === "complete" ? /* @__PURE__ */ e(J, { className: "size-4" }) : m + 1
2920
+ }
2921
+ ),
2922
+ r === "vertical" && !p && /* @__PURE__ */ e(
2923
+ "span",
2924
+ {
2925
+ className: l(
2926
+ "mt-1 w-px flex-1 min-h-6",
2927
+ m < a ? "bg-accent" : "bg-border"
2928
+ )
2929
+ }
2930
+ )
2931
+ ] }),
2932
+ /* @__PURE__ */ s("div", { className: l("flex flex-col", r === "horizontal" && "min-w-0"), children: [
2933
+ /* @__PURE__ */ e(
2934
+ "span",
2935
+ {
2936
+ className: l(
2937
+ "text-sm font-medium",
2938
+ f === "upcoming" ? "text-foreground-subtle" : "text-foreground"
2939
+ ),
2940
+ children: u.title
2941
+ }
2942
+ ),
2943
+ r === "vertical" && u.description && /* @__PURE__ */ e("p", { className: "text-xs text-foreground-muted mt-0.5", children: u.description })
2944
+ ] }),
2945
+ r === "horizontal" && !p && /* @__PURE__ */ e(
2946
+ "span",
2947
+ {
2948
+ "aria-hidden": !0,
2949
+ className: l(
2950
+ "h-px flex-1 mx-2",
2951
+ m < a ? "bg-accent" : "bg-border"
2952
+ )
2953
+ }
2954
+ )
2955
+ ]
2956
+ },
2957
+ m
2958
+ );
2959
+ })
2960
+ }
2961
+ );
2962
+ });
2963
+ xa.displayName = "Stepper";
2964
+ const hn = {
2965
+ sm: "h-4 w-7",
2966
+ md: "h-5 w-9"
2967
+ }, bn = {
2968
+ sm: "size-3 data-[state=checked]:translate-x-3",
2969
+ md: "size-4 data-[state=checked]:translate-x-4"
2970
+ }, ge = d(
2971
+ function({
2972
+ className: t,
2973
+ label: a,
2974
+ description: r,
2975
+ labelPosition: o = "after",
2976
+ size: i = "md",
2977
+ hideLabel: c,
2978
+ id: u,
2979
+ disabled: m,
2980
+ ...f
2981
+ }, p) {
2982
+ const b = W(), g = u ?? b, h = r ? `${g}-desc` : void 0, x = /* @__PURE__ */ e(
2983
+ bt.Root,
2984
+ {
2985
+ ref: p,
2986
+ id: g,
2987
+ disabled: m,
2988
+ "aria-describedby": h,
2989
+ className: l(
2990
+ "peer inline-flex shrink-0 items-center rounded-full border-2 border-transparent",
2991
+ "transition-colors duration-[var(--duration-base)] ease-[var(--ease-out)]",
2992
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
2993
+ "disabled:cursor-not-allowed disabled:opacity-50",
2994
+ "data-[state=checked]:bg-accent data-[state=unchecked]:bg-neutral-300 dark:data-[state=unchecked]:bg-neutral-700",
2995
+ hn[i]
2996
+ ),
2997
+ ...f,
2998
+ children: /* @__PURE__ */ e(
2999
+ bt.Thumb,
3000
+ {
3001
+ className: l(
3002
+ "pointer-events-none block rounded-full bg-white shadow-sm",
3003
+ "transition-transform duration-[var(--duration-base)] ease-[var(--ease-out)]",
3004
+ "translate-x-0",
3005
+ bn[i]
3006
+ )
3007
+ }
3008
+ )
3009
+ }
3010
+ ), k = a && /* @__PURE__ */ s("div", { className: l("flex flex-col gap-0.5 select-none", c && "sr-only"), children: [
3011
+ /* @__PURE__ */ e(
3012
+ "label",
3013
+ {
3014
+ htmlFor: g,
3015
+ className: l(
3016
+ "text-sm text-foreground",
3017
+ m && "opacity-50 cursor-not-allowed"
3018
+ ),
3019
+ children: a
3020
+ }
3021
+ ),
3022
+ r && /* @__PURE__ */ e("p", { id: h, className: "text-xs text-foreground-subtle", children: r })
3023
+ ] });
3024
+ return /* @__PURE__ */ s("div", { className: l("inline-flex items-center gap-2.5", t), children: [
3025
+ o === "before" && k,
3026
+ x,
3027
+ o === "after" && k
3028
+ ] });
3029
+ }
3030
+ );
3031
+ ge.displayName = "Switch";
3032
+ const xn = Oe.Root, vn = G("inline-flex items-center", {
3033
+ variants: {
3034
+ variant: {
3035
+ underline: "gap-4 border-b border-border w-full",
3036
+ pills: "gap-1 rounded-lg bg-background-muted p-1"
3037
+ },
3038
+ size: {
3039
+ sm: "h-9 text-xs",
3040
+ md: "h-10 text-sm",
3041
+ lg: "h-11 text-sm"
3042
+ }
3043
+ },
3044
+ defaultVariants: { variant: "underline", size: "md" }
3045
+ }), va = d(
3046
+ function({ className: t, variant: a, size: r, ...o }, i) {
3047
+ return /* @__PURE__ */ e(
3048
+ Oe.List,
3049
+ {
3050
+ ref: i,
3051
+ "data-variant": a,
3052
+ className: l(vn({ variant: a, size: r }), t),
3053
+ ...o
3054
+ }
3055
+ );
3056
+ }
3057
+ );
3058
+ va.displayName = "TabsList";
3059
+ const pe = d(function({ className: t, ...a }, r) {
3060
+ return /* @__PURE__ */ e(
3061
+ Oe.Trigger,
3062
+ {
3063
+ ref: r,
3064
+ className: l(
3065
+ "inline-flex items-center gap-2 whitespace-nowrap font-medium",
3066
+ "outline-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
3067
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3068
+ "disabled:pointer-events-none disabled:opacity-50",
3069
+ // Underline variant
3070
+ "[[data-variant=underline]_&]:relative [[data-variant=underline]_&]:h-full",
3071
+ "[[data-variant=underline]_&]:px-1 [[data-variant=underline]_&]:text-foreground-muted",
3072
+ "[[data-variant=underline]_&]:hover:text-foreground",
3073
+ "[[data-variant=underline]_&]:data-[state=active]:text-foreground",
3074
+ "[[data-variant=underline]_&]:data-[state=active]:after:absolute",
3075
+ "[[data-variant=underline]_&]:data-[state=active]:after:inset-x-0",
3076
+ "[[data-variant=underline]_&]:data-[state=active]:after:-bottom-px",
3077
+ "[[data-variant=underline]_&]:data-[state=active]:after:h-0.5",
3078
+ "[[data-variant=underline]_&]:data-[state=active]:after:bg-accent",
3079
+ // Pills variant
3080
+ "[[data-variant=pills]_&]:h-full [[data-variant=pills]_&]:rounded-md [[data-variant=pills]_&]:px-3",
3081
+ "[[data-variant=pills]_&]:text-foreground-muted",
3082
+ "[[data-variant=pills]_&]:hover:text-foreground",
3083
+ "[[data-variant=pills]_&]:data-[state=active]:bg-card",
3084
+ "[[data-variant=pills]_&]:data-[state=active]:text-foreground",
3085
+ "[[data-variant=pills]_&]:data-[state=active]:shadow-xs",
3086
+ t
3087
+ ),
3088
+ ...a
3089
+ }
3090
+ );
3091
+ });
3092
+ pe.displayName = "TabsTrigger";
3093
+ const he = d(function({ className: t, ...a }, r) {
3094
+ return /* @__PURE__ */ e(
3095
+ Oe.Content,
3096
+ {
3097
+ ref: r,
3098
+ className: l(
3099
+ "mt-4 outline-none",
3100
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3101
+ t
3102
+ ),
3103
+ ...a
3104
+ }
3105
+ );
3106
+ });
3107
+ he.displayName = "TabsContent";
3108
+ const Nn = d(function({
3109
+ className: t,
3110
+ label: a,
3111
+ helperText: r,
3112
+ error: o,
3113
+ autoResize: i,
3114
+ minRows: c = 3,
3115
+ maxRows: u = 12,
3116
+ hideLabel: m,
3117
+ id: f,
3118
+ onChange: p,
3119
+ value: b,
3120
+ defaultValue: g,
3121
+ ...h
3122
+ }, x) {
3123
+ const k = W(), v = f ?? k, B = `${v}-helper`, V = `${v}-error`, A = yt(null), O = (C) => {
3124
+ A.current = C, typeof x == "function" ? x(C) : x && (x.current = C);
3125
+ }, L = ie(() => {
3126
+ const C = A.current;
3127
+ if (!C || !i) return;
3128
+ C.style.height = "auto";
3129
+ const K = (parseFloat(getComputedStyle(C).lineHeight) || 20) * u;
3130
+ C.style.height = `${Math.min(C.scrollHeight, K)}px`, C.style.overflowY = C.scrollHeight > K ? "auto" : "hidden";
3131
+ }, [i, u]);
3132
+ return ke(() => {
3133
+ i && L();
3134
+ }, [i, L, b, g]), /* @__PURE__ */ s("div", { className: l("flex flex-col gap-1.5", t), children: [
3135
+ a && /* @__PURE__ */ e(
3136
+ "label",
3137
+ {
3138
+ htmlFor: v,
3139
+ className: l(
3140
+ "text-sm font-medium text-foreground",
3141
+ m && "sr-only"
3142
+ ),
3143
+ children: a
3144
+ }
3145
+ ),
3146
+ /* @__PURE__ */ e(
3147
+ "textarea",
3148
+ {
3149
+ ref: O,
3150
+ id: v,
3151
+ rows: c,
3152
+ value: b,
3153
+ defaultValue: g,
3154
+ onChange: (C) => {
3155
+ p == null || p(C), i && L();
3156
+ },
3157
+ "aria-invalid": !!o || void 0,
3158
+ "aria-describedby": o ? V : r ? B : void 0,
3159
+ className: l(
3160
+ "rounded-md border bg-card px-3 py-2 text-sm text-foreground",
3161
+ "placeholder:text-foreground-subtle",
3162
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]",
3163
+ "outline-none",
3164
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
3165
+ "focus-visible:ring-offset-background",
3166
+ "disabled:opacity-50 disabled:cursor-not-allowed",
3167
+ o ? "border-danger focus-visible:border-danger focus-visible:ring-danger" : "border-border focus-visible:border-accent",
3168
+ i ? "resize-none" : "resize-y min-h-20"
3169
+ ),
3170
+ ...h
3171
+ }
3172
+ ),
3173
+ o ? /* @__PURE__ */ e("p", { id: V, role: "alert", className: "text-xs text-danger-text", children: o }) : r ? /* @__PURE__ */ e("p", { id: B, className: "text-xs text-foreground-subtle", children: r }) : null
3174
+ ] });
3175
+ });
3176
+ Nn.displayName = "Textarea";
3177
+ const Co = de.Provider, yn = d(function({ className: t, ...a }, r) {
3178
+ return /* @__PURE__ */ e(
3179
+ de.Viewport,
3180
+ {
3181
+ ref: r,
3182
+ className: l(
3183
+ "fixed bottom-0 right-0 z-[var(--z-toast)] flex max-h-screen w-full flex-col-reverse gap-2 p-6",
3184
+ "sm:bottom-auto sm:top-4 sm:right-4 sm:max-w-sm sm:flex-col",
3185
+ t
3186
+ ),
3187
+ ...a
3188
+ }
3189
+ );
3190
+ });
3191
+ yn.displayName = "ToastViewport";
3192
+ const wn = G(
3193
+ [
3194
+ "group pointer-events-auto relative flex w-full items-start gap-3",
3195
+ "overflow-hidden rounded-lg border p-4 pr-8 shadow-md",
3196
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
3197
+ "data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-right-full",
3198
+ "data-[state=closed]:slide-out-to-right-full",
3199
+ "data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)]",
3200
+ "data-[swipe=cancel]:translate-x-0 data-[swipe=cancel]:transition-transform",
3201
+ "data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)]"
3202
+ ],
3203
+ {
3204
+ variants: {
3205
+ variant: {
3206
+ default: "border-border bg-card text-card-foreground",
3207
+ success: "border-success-border-soft bg-success-soft text-success-text",
3208
+ warning: "border-warning-border-soft bg-warning-soft text-warning-text",
3209
+ danger: "border-danger-border-soft bg-danger-soft text-danger-text",
3210
+ info: "border-info-border-soft bg-info-soft text-info-text"
3211
+ }
3212
+ },
3213
+ defaultVariants: { variant: "default" }
3214
+ }
3215
+ ), kn = {
3216
+ default: null,
3217
+ success: /* @__PURE__ */ e(Se, { className: "size-5 text-success-text shrink-0 mt-0.5", "aria-hidden": !0 }),
3218
+ warning: /* @__PURE__ */ e(ve, { className: "size-5 text-warning-text shrink-0 mt-0.5", "aria-hidden": !0 }),
3219
+ danger: /* @__PURE__ */ e($e, { className: "size-5 text-danger-text shrink-0 mt-0.5", "aria-hidden": !0 }),
3220
+ info: /* @__PURE__ */ e(nt, { className: "size-5 text-info-text shrink-0 mt-0.5", "aria-hidden": !0 })
3221
+ }, Cn = d(
3222
+ function({ className: t, variant: a = "default", children: r, ...o }, i) {
3223
+ return /* @__PURE__ */ s(de.Root, { ref: i, className: l(wn({ variant: a }), t), ...o, children: [
3224
+ kn[a ?? "default"],
3225
+ /* @__PURE__ */ e("div", { className: "flex-1 space-y-1", children: r })
3226
+ ] });
3227
+ }
3228
+ );
3229
+ Cn.displayName = "Toast";
3230
+ const Sn = d(function({ className: t, ...a }, r) {
3231
+ return /* @__PURE__ */ e(
3232
+ de.Title,
3233
+ {
3234
+ ref: r,
3235
+ className: l("text-sm font-medium", t),
3236
+ ...a
3237
+ }
3238
+ );
3239
+ });
3240
+ Sn.displayName = "ToastTitle";
3241
+ const zn = d(function({ className: t, ...a }, r) {
3242
+ return /* @__PURE__ */ e(
3243
+ de.Description,
3244
+ {
3245
+ ref: r,
3246
+ className: l("text-sm opacity-90", t),
3247
+ ...a
3248
+ }
3249
+ );
3250
+ });
3251
+ zn.displayName = "ToastDescription";
3252
+ const Tn = d(function({ className: t, ...a }, r) {
3253
+ return /* @__PURE__ */ e(
3254
+ de.Action,
3255
+ {
3256
+ ref: r,
3257
+ className: l(
3258
+ "inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-current bg-transparent px-3 text-sm font-medium",
3259
+ "transition-colors hover:bg-current/10 outline-none",
3260
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
3261
+ t
3262
+ ),
3263
+ ...a
3264
+ }
3265
+ );
3266
+ });
3267
+ Tn.displayName = "ToastAction";
3268
+ const In = d(function({ className: t, ...a }, r) {
3269
+ return /* @__PURE__ */ e(
3270
+ de.Close,
3271
+ {
3272
+ ref: r,
3273
+ "aria-label": "Close",
3274
+ className: l(
3275
+ "absolute right-2 top-2 inline-flex size-7 items-center justify-center rounded-md text-foreground-subtle",
3276
+ "opacity-0 transition-opacity group-hover:opacity-100 hover:text-foreground",
3277
+ "outline-none focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring",
3278
+ t
3279
+ ),
3280
+ "toast-close": "",
3281
+ ...a,
3282
+ children: /* @__PURE__ */ e(Y, { className: "size-4", "aria-hidden": !0 })
3283
+ }
3284
+ );
3285
+ });
3286
+ In.displayName = "ToastClose";
3287
+ const So = ({
3288
+ delayDuration: n = 500,
3289
+ skipDelayDuration: t = 200,
3290
+ ...a
3291
+ }) => /* @__PURE__ */ e(
3292
+ we.Provider,
3293
+ {
3294
+ delayDuration: n,
3295
+ skipDelayDuration: t,
3296
+ ...a
3297
+ }
3298
+ ), Mn = we.Root, Dn = we.Trigger, Na = d(function({ className: t, sideOffset: a = 4, ...r }, o) {
3299
+ return /* @__PURE__ */ e(we.Portal, { children: /* @__PURE__ */ e(
3300
+ we.Content,
3301
+ {
3302
+ ref: o,
3303
+ sideOffset: a,
3304
+ className: l(
3305
+ "z-[var(--z-tooltip)] overflow-hidden rounded-md px-2 py-1 text-xs font-medium",
3306
+ "bg-neutral-900 text-neutral-50",
3307
+ "dark:bg-neutral-50 dark:text-neutral-900",
3308
+ "shadow-sm max-w-xs",
3309
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
3310
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
3311
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
3312
+ t
3313
+ ),
3314
+ ...r
3315
+ }
3316
+ ) });
3317
+ });
3318
+ Na.displayName = "TooltipContent";
3319
+ function Pn({
3320
+ children: n,
3321
+ label: t,
3322
+ side: a = "top",
3323
+ align: r = "center",
3324
+ disabled: o,
3325
+ delayDuration: i
3326
+ }) {
3327
+ return o ? /* @__PURE__ */ e(te, { children: n }) : /* @__PURE__ */ s(Mn, { delayDuration: i, children: [
3328
+ /* @__PURE__ */ e(Dn, { asChild: !0, children: n }),
3329
+ /* @__PURE__ */ e(Na, { side: a, align: r, children: t })
3330
+ ] });
3331
+ }
3332
+ Pn.displayName = "Tooltip";
3333
+ const ya = d(function({ logo: t, nav: a, search: r, actions: o, className: i, ...c }, u) {
3334
+ return /* @__PURE__ */ s(
3335
+ "header",
3336
+ {
3337
+ ref: u,
3338
+ className: l(
3339
+ "sticky top-0 z-[var(--z-sticky)] flex h-14 w-full items-center gap-4",
3340
+ "border-b border-border bg-background/80 px-4 backdrop-blur",
3341
+ "supports-[backdrop-filter]:bg-background/60",
3342
+ i
3343
+ ),
3344
+ ...c,
3345
+ children: [
3346
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-6 shrink-0", children: [
3347
+ t,
3348
+ a && /* @__PURE__ */ e("nav", { className: "hidden md:flex items-center gap-1", children: a })
3349
+ ] }),
3350
+ r && /* @__PURE__ */ e("div", { className: "flex-1 max-w-md mx-auto", children: r }),
3351
+ o && /* @__PURE__ */ e("div", { className: "ml-auto flex items-center gap-2 shrink-0", children: o })
3352
+ ]
3353
+ }
3354
+ );
3355
+ });
3356
+ ya.displayName = "TopNav";
3357
+ const An = d(function({ href: t, active: a, className: r, children: o, ...i }, c) {
3358
+ return /* @__PURE__ */ e(
3359
+ "a",
3360
+ {
3361
+ ref: c,
3362
+ href: t,
3363
+ "aria-current": a ? "page" : void 0,
3364
+ className: l(
3365
+ "inline-flex h-9 items-center rounded-md px-3 text-sm font-medium outline-none",
3366
+ "transition-colors duration-[var(--duration-fast)]",
3367
+ a ? "text-foreground" : "text-foreground-muted hover:text-foreground",
3368
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3369
+ r
3370
+ ),
3371
+ ...i,
3372
+ children: o
3373
+ }
3374
+ );
3375
+ });
3376
+ An.displayName = "TopNavLink";
3377
+ function zo({ brand: n, title: t, subtitle: a, children: r, footer: o }) {
3378
+ return /* @__PURE__ */ e("main", { className: "grid min-h-screen place-items-center bg-background-subtle px-4 py-12", children: /* @__PURE__ */ s("div", { className: "w-full max-w-[400px] space-y-6", children: [
3379
+ n && /* @__PURE__ */ e("div", { className: "flex justify-center", children: n }),
3380
+ /* @__PURE__ */ s("div", { className: "space-y-2 text-center", children: [
3381
+ /* @__PURE__ */ e("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: t }),
3382
+ a && /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted", children: a })
3383
+ ] }),
3384
+ /* @__PURE__ */ e("div", { className: "rounded-lg border border-border bg-card p-6", children: r }),
3385
+ o && /* @__PURE__ */ e("p", { className: "text-center text-sm text-foreground-muted", children: o })
3386
+ ] }) });
3387
+ }
3388
+ function To({ onSubmit: n, loading: t, error: a, forgotHref: r = "/forgot" }) {
3389
+ const [o, i] = y(""), [c, u] = y("");
3390
+ return /* @__PURE__ */ s("form", { onSubmit: (f) => {
3391
+ f.preventDefault(), n({ email: o, password: c });
3392
+ }, className: "space-y-4", children: [
3393
+ a && /* @__PURE__ */ e(Ee, { variant: "danger", children: a }),
3394
+ /* @__PURE__ */ e(
3395
+ T,
3396
+ {
3397
+ type: "email",
3398
+ label: "Email",
3399
+ value: o,
3400
+ onChange: (f) => i(f.target.value),
3401
+ autoComplete: "email",
3402
+ required: !0
3403
+ }
3404
+ ),
3405
+ /* @__PURE__ */ e(
3406
+ T,
3407
+ {
3408
+ type: "password",
3409
+ label: "Password",
3410
+ value: c,
3411
+ onChange: (f) => u(f.target.value),
3412
+ autoComplete: "current-password",
3413
+ required: !0
3414
+ }
3415
+ ),
3416
+ /* @__PURE__ */ e("div", { className: "flex items-center justify-between text-sm", children: /* @__PURE__ */ e(
3417
+ "a",
3418
+ {
3419
+ href: r,
3420
+ className: "font-medium text-accent hover:underline outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm",
3421
+ children: "Forgot password?"
3422
+ }
3423
+ ) }),
3424
+ /* @__PURE__ */ e(w, { type: "submit", loading: t, className: "w-full", trailingIcon: /* @__PURE__ */ e(Ne, {}), children: "Sign in" })
3425
+ ] });
3426
+ }
3427
+ function Io({ onSubmit: n, loading: t, error: a }) {
3428
+ const [r, o] = y(""), [i, c] = y(""), [u, m] = y("");
3429
+ return /* @__PURE__ */ s(
3430
+ "form",
3431
+ {
3432
+ onSubmit: (f) => {
3433
+ f.preventDefault(), n({ name: r, email: i, password: u });
3434
+ },
3435
+ className: "space-y-4",
3436
+ children: [
3437
+ a && /* @__PURE__ */ e(Ee, { variant: "danger", children: a }),
3438
+ /* @__PURE__ */ e(T, { label: "Full name", value: r, onChange: (f) => o(f.target.value), required: !0 }),
3439
+ /* @__PURE__ */ e(
3440
+ T,
3441
+ {
3442
+ type: "email",
3443
+ label: "Work email",
3444
+ value: i,
3445
+ onChange: (f) => c(f.target.value),
3446
+ autoComplete: "email",
3447
+ required: !0
3448
+ }
3449
+ ),
3450
+ /* @__PURE__ */ e(
3451
+ T,
3452
+ {
3453
+ type: "password",
3454
+ label: "Password",
3455
+ helperText: "At least 8 characters.",
3456
+ value: u,
3457
+ onChange: (f) => m(f.target.value),
3458
+ autoComplete: "new-password",
3459
+ required: !0
3460
+ }
3461
+ ),
3462
+ /* @__PURE__ */ e(w, { type: "submit", loading: t, className: "w-full", children: "Create account" }),
3463
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-subtle text-center", children: "By signing up you agree to our Terms of Service and Privacy Policy." })
3464
+ ]
3465
+ }
3466
+ );
3467
+ }
3468
+ function Mo({ onSubmit: n, loading: t, error: a }) {
3469
+ const [r, o] = y("");
3470
+ return /* @__PURE__ */ s(
3471
+ "form",
3472
+ {
3473
+ onSubmit: (i) => {
3474
+ i.preventDefault(), n(r);
3475
+ },
3476
+ className: "space-y-4",
3477
+ children: [
3478
+ a && /* @__PURE__ */ e(Ee, { variant: "danger", children: a }),
3479
+ /* @__PURE__ */ e(
3480
+ T,
3481
+ {
3482
+ type: "email",
3483
+ label: "Email",
3484
+ helperText: "We'll send a reset link if an account exists.",
3485
+ value: r,
3486
+ onChange: (i) => o(i.target.value),
3487
+ autoComplete: "email",
3488
+ required: !0
3489
+ }
3490
+ ),
3491
+ /* @__PURE__ */ e(w, { type: "submit", loading: t, className: "w-full", leadingIcon: /* @__PURE__ */ e(Bt, {}), children: "Send reset link" })
3492
+ ]
3493
+ }
3494
+ );
3495
+ }
3496
+ function Do({ email: n, onResend: t }) {
3497
+ return /* @__PURE__ */ s("div", { className: "space-y-4 text-center", children: [
3498
+ /* @__PURE__ */ e("div", { className: "mx-auto inline-flex size-12 items-center justify-center rounded-full bg-success-soft text-success-text", children: /* @__PURE__ */ e(Se, { className: "size-6", "aria-hidden": !0 }) }),
3499
+ /* @__PURE__ */ s("p", { className: "text-sm text-foreground-muted", children: [
3500
+ "We sent a sign-in link to",
3501
+ " ",
3502
+ /* @__PURE__ */ e("span", { className: "font-medium text-foreground", children: n }),
3503
+ ". Open it on this device to continue."
3504
+ ] }),
3505
+ /* @__PURE__ */ e(fe, {}),
3506
+ /* @__PURE__ */ s("p", { className: "text-xs text-foreground-subtle", children: [
3507
+ "Didn't get it?",
3508
+ " ",
3509
+ /* @__PURE__ */ e(
3510
+ "button",
3511
+ {
3512
+ type: "button",
3513
+ onClick: t,
3514
+ className: "font-medium text-accent hover:underline outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm",
3515
+ children: "Resend"
3516
+ }
3517
+ )
3518
+ ] })
3519
+ ] });
3520
+ }
3521
+ function Po({ children: n, brand: t }) {
3522
+ return /* @__PURE__ */ s("div", { className: "flex min-h-screen w-full bg-background", children: [
3523
+ /* @__PURE__ */ s(
3524
+ ba,
3525
+ {
3526
+ defaultCollapsed: !1,
3527
+ footer: /* @__PURE__ */ e(ue, { icon: /* @__PURE__ */ e(H, { fallback: "BO", size: "xs" }), className: "!h-10", children: "Bay Otgonbayar" }),
3528
+ children: [
3529
+ /* @__PURE__ */ s(Xe, { label: "Workspace", children: [
3530
+ /* @__PURE__ */ e(ue, { icon: /* @__PURE__ */ e(Ft, {}), active: !0, children: "Home" }),
3531
+ /* @__PURE__ */ e(ue, { icon: /* @__PURE__ */ e(rt, {}), children: "Projects" }),
3532
+ /* @__PURE__ */ e(ue, { icon: /* @__PURE__ */ e(Le, {}), trailing: /* @__PURE__ */ e(X, { tone: "accent", children: "3" }), children: "Members" })
3533
+ ] }),
3534
+ /* @__PURE__ */ e(Xe, { label: "Account", children: /* @__PURE__ */ e(ue, { icon: /* @__PURE__ */ e(ot, {}), children: "Settings" }) })
3535
+ ]
3536
+ }
3537
+ ),
3538
+ /* @__PURE__ */ s("div", { className: "flex flex-1 flex-col min-w-0", children: [
3539
+ /* @__PURE__ */ e(
3540
+ ya,
3541
+ {
3542
+ logo: t,
3543
+ search: /* @__PURE__ */ e(
3544
+ T,
3545
+ {
3546
+ type: "search",
3547
+ placeholder: "Search…",
3548
+ hideLabel: !0,
3549
+ label: "Search",
3550
+ prefix: /* @__PURE__ */ e(Be, {})
3551
+ }
3552
+ ),
3553
+ actions: /* @__PURE__ */ s(te, { children: [
3554
+ /* @__PURE__ */ e(lt, { "aria-label": "Notifications", icon: /* @__PURE__ */ e(Je, {}), variant: "ghost" }),
3555
+ /* @__PURE__ */ e(H, { size: "sm", fallback: "BO" })
3556
+ ] })
3557
+ }
3558
+ ),
3559
+ /* @__PURE__ */ e("main", { className: "flex-1 overflow-y-auto p-6 md:p-8", children: n })
3560
+ ] })
3561
+ ] });
3562
+ }
3563
+ const _n = [
3564
+ { label: "Active users", value: "2,840", delta: { value: "+12%", positive: !0 } },
3565
+ { label: "Sessions today", value: "8,402", delta: { value: "+4%", positive: !0 } },
3566
+ { label: "Open issues", value: "14", delta: { value: "−6%", positive: !0 } },
3567
+ { label: "Error rate", value: "0.32%", delta: { value: "+0.05%", positive: !1 } }
3568
+ ], jn = [
3569
+ { id: "1", who: { name: "Anu B.", initials: "AB" }, action: "merged", target: "feat/segments", when: "12m ago" },
3570
+ { id: "2", who: { name: "Bat E.", initials: "BE" }, action: "opened", target: "fix/login-flow", when: "34m ago" },
3571
+ { id: "3", who: { name: "Tuya G.", initials: "TG" }, action: "commented on", target: "Q2 OKRs", when: "1h ago" },
3572
+ { id: "4", who: { name: "Khulan O.", initials: "KO" }, action: "archived", target: "old-billing-spike", when: "3h ago" }
3573
+ ];
3574
+ function Ao() {
3575
+ return /* @__PURE__ */ s("div", { className: "space-y-8", children: [
3576
+ /* @__PURE__ */ s("header", { className: "flex items-end justify-between gap-4", children: [
3577
+ /* @__PURE__ */ s("div", { children: [
3578
+ /* @__PURE__ */ e("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Overview" }),
3579
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted mt-1", children: "What's happening across your workspace today." })
3580
+ ] }),
3581
+ /* @__PURE__ */ e("div", { className: "hidden md:flex items-center gap-2", children: /* @__PURE__ */ e(X, { tone: "neutral", variant: "outline", children: "Last 7 days" }) })
3582
+ ] }),
3583
+ /* @__PURE__ */ e("section", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4", children: _n.map((n) => /* @__PURE__ */ s(j, { children: [
3584
+ /* @__PURE__ */ e(F, { className: "pb-2", children: /* @__PURE__ */ e(Q, { children: n.label }) }),
3585
+ /* @__PURE__ */ e(R, { children: /* @__PURE__ */ s("div", { className: "flex items-baseline gap-2", children: [
3586
+ /* @__PURE__ */ e("span", { className: "text-2xl font-semibold tabular text-foreground", children: n.value }),
3587
+ n.delta && /* @__PURE__ */ e(
3588
+ "span",
3589
+ {
3590
+ className: n.delta.positive ? "text-xs font-medium text-success-text tabular" : "text-xs font-medium text-danger-text tabular",
3591
+ children: n.delta.value
3592
+ }
3593
+ )
3594
+ ] }) })
3595
+ ] }, n.label)) }),
3596
+ /* @__PURE__ */ s(j, { children: [
3597
+ /* @__PURE__ */ s(F, { children: [
3598
+ /* @__PURE__ */ e($, { children: "Active users" }),
3599
+ /* @__PURE__ */ e(Q, { children: "Distinct sessions per day, last 30 days." })
3600
+ ] }),
3601
+ /* @__PURE__ */ e(R, { children: /* @__PURE__ */ e(
3602
+ "div",
3603
+ {
3604
+ role: "img",
3605
+ "aria-label": "Active users sparkline",
3606
+ className: "h-48 w-full rounded-md border border-dashed border-border bg-background-subtle"
3607
+ }
3608
+ ) })
3609
+ ] }),
3610
+ /* @__PURE__ */ s(j, { padding: "none", children: [
3611
+ /* @__PURE__ */ e(F, { className: "px-5 pt-5", children: /* @__PURE__ */ e($, { children: "Recent activity" }) }),
3612
+ /* @__PURE__ */ s(dt, { children: [
3613
+ /* @__PURE__ */ e(ct, { children: /* @__PURE__ */ s(oe, { children: [
3614
+ /* @__PURE__ */ e(se, { children: "Who" }),
3615
+ /* @__PURE__ */ e(se, { children: "Action" }),
3616
+ /* @__PURE__ */ e(se, { children: "Target" }),
3617
+ /* @__PURE__ */ e(se, { className: "text-right", children: "When" })
3618
+ ] }) }),
3619
+ /* @__PURE__ */ e(ut, { children: jn.map((n) => /* @__PURE__ */ s(oe, { children: [
3620
+ /* @__PURE__ */ e(ee, { children: /* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
3621
+ /* @__PURE__ */ e(H, { size: "xs", fallback: n.who.initials }),
3622
+ /* @__PURE__ */ e("span", { className: "text-foreground", children: n.who.name })
3623
+ ] }) }),
3624
+ /* @__PURE__ */ e(ee, { className: "text-foreground-muted", children: n.action }),
3625
+ /* @__PURE__ */ e(ee, { children: /* @__PURE__ */ e(X, { tone: "neutral", variant: "outline", children: n.target }) }),
3626
+ /* @__PURE__ */ e(ee, { className: "text-right tabular text-foreground-subtle", children: n.when })
3627
+ ] }, n.id)) })
3628
+ ] })
3629
+ ] })
3630
+ ] });
3631
+ }
3632
+ const Fn = [
3633
+ { id: "profile", label: "Profile", icon: /* @__PURE__ */ e(Ot, {}) },
3634
+ { id: "security", label: "Security", icon: /* @__PURE__ */ e(Rt, {}) },
3635
+ { id: "notifications", label: "Notifications", icon: /* @__PURE__ */ e(Je, {}) },
3636
+ { id: "billing", label: "Billing", icon: /* @__PURE__ */ e(It, {}) },
3637
+ { id: "team", label: "Team", icon: /* @__PURE__ */ e(Le, {}) }
3638
+ ];
3639
+ function _o() {
3640
+ const [n, t] = y("profile");
3641
+ return /* @__PURE__ */ s("div", { className: "mx-auto max-w-5xl space-y-8", children: [
3642
+ /* @__PURE__ */ s("header", { children: [
3643
+ /* @__PURE__ */ e("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Settings" }),
3644
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted mt-1", children: "Manage your account, preferences, and billing." })
3645
+ ] }),
3646
+ /* @__PURE__ */ s("div", { className: "grid gap-8 md:grid-cols-[200px_1fr]", children: [
3647
+ /* @__PURE__ */ e("nav", { "aria-label": "Settings sections", className: "md:sticky md:top-20 md:self-start", children: /* @__PURE__ */ e("ul", { className: "flex flex-col gap-px", children: Fn.map((a) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ s(
3648
+ "a",
3649
+ {
3650
+ href: `#${a.id}`,
3651
+ onClick: () => t(a.id),
3652
+ className: l(
3653
+ "flex h-9 items-center gap-2 rounded-md px-2 text-sm transition-colors duration-[var(--duration-fast)] outline-none",
3654
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3655
+ n === a.id ? "bg-background-muted text-foreground font-medium" : "text-foreground-muted hover:bg-background-muted hover:text-foreground"
3656
+ ),
3657
+ "aria-current": n === a.id ? "page" : void 0,
3658
+ children: [
3659
+ /* @__PURE__ */ e("span", { className: "[&_svg]:size-4", children: a.icon }),
3660
+ a.label
3661
+ ]
3662
+ }
3663
+ ) }, a.id)) }) }),
3664
+ /* @__PURE__ */ s("div", { className: "space-y-8", children: [
3665
+ /* @__PURE__ */ e("section", { id: "profile", children: /* @__PURE__ */ s(j, { children: [
3666
+ /* @__PURE__ */ s(F, { children: [
3667
+ /* @__PURE__ */ e($, { children: "Profile" }),
3668
+ /* @__PURE__ */ e(Q, { children: "Visible to your teammates." })
3669
+ ] }),
3670
+ /* @__PURE__ */ s(R, { className: "space-y-4", children: [
3671
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-4", children: [
3672
+ /* @__PURE__ */ e(H, { size: "xl", fallback: "BO" }),
3673
+ /* @__PURE__ */ s("div", { children: [
3674
+ /* @__PURE__ */ e(w, { variant: "outline", size: "sm", children: "Change photo" }),
3675
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-subtle mt-2", children: "JPG or PNG, max 2 MB." })
3676
+ ] })
3677
+ ] }),
3678
+ /* @__PURE__ */ e(fe, {}),
3679
+ /* @__PURE__ */ s("div", { className: "grid gap-4 sm:grid-cols-2", children: [
3680
+ /* @__PURE__ */ e(T, { label: "First name", defaultValue: "Bay" }),
3681
+ /* @__PURE__ */ e(T, { label: "Last name", defaultValue: "Otgonbayar" })
3682
+ ] }),
3683
+ /* @__PURE__ */ e(T, { label: "Display email", type: "email", defaultValue: "bay@company.com" }),
3684
+ /* @__PURE__ */ e("div", { className: "flex justify-end", children: /* @__PURE__ */ e(w, { children: "Save changes" }) })
3685
+ ] })
3686
+ ] }) }),
3687
+ /* @__PURE__ */ e("section", { id: "security", children: /* @__PURE__ */ s(j, { children: [
3688
+ /* @__PURE__ */ s(F, { children: [
3689
+ /* @__PURE__ */ e($, { children: "Security" }),
3690
+ /* @__PURE__ */ e(Q, { children: "How you sign in and protect your account." })
3691
+ ] }),
3692
+ /* @__PURE__ */ s(R, { className: "space-y-4", children: [
3693
+ /* @__PURE__ */ e(T, { label: "Current password", type: "password" }),
3694
+ /* @__PURE__ */ e(T, { label: "New password", type: "password", helperText: "At least 8 characters." }),
3695
+ /* @__PURE__ */ e(fe, {}),
3696
+ /* @__PURE__ */ s("div", { className: "flex items-center justify-between", children: [
3697
+ /* @__PURE__ */ s("div", { children: [
3698
+ /* @__PURE__ */ e("p", { className: "text-sm font-medium text-foreground", children: "Two-factor authentication" }),
3699
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-subtle", children: "Required for admin accounts on production." })
3700
+ ] }),
3701
+ /* @__PURE__ */ e(ge, { defaultChecked: !0 })
3702
+ ] }),
3703
+ /* @__PURE__ */ e("div", { className: "flex justify-end", children: /* @__PURE__ */ e(w, { children: "Update password" }) })
3704
+ ] })
3705
+ ] }) }),
3706
+ /* @__PURE__ */ e("section", { id: "notifications", children: /* @__PURE__ */ s(j, { children: [
3707
+ /* @__PURE__ */ s(F, { children: [
3708
+ /* @__PURE__ */ e($, { children: "Notifications" }),
3709
+ /* @__PURE__ */ e(Q, { children: "Choose what we email and ping you about." })
3710
+ ] }),
3711
+ /* @__PURE__ */ s(R, { className: "space-y-4", children: [
3712
+ /* @__PURE__ */ e(ge, { label: "Product updates", description: "A short note when we ship something.", defaultChecked: !0 }),
3713
+ /* @__PURE__ */ e(fe, {}),
3714
+ /* @__PURE__ */ e(ge, { label: "Mentions", description: "When a teammate @ mentions you in a comment.", defaultChecked: !0 }),
3715
+ /* @__PURE__ */ e(fe, {}),
3716
+ /* @__PURE__ */ e(ge, { label: "Weekly digest", description: "A Monday-morning summary of last week's activity." })
3717
+ ] })
3718
+ ] }) }),
3719
+ /* @__PURE__ */ e("section", { id: "billing", children: /* @__PURE__ */ s(j, { children: [
3720
+ /* @__PURE__ */ s(F, { children: [
3721
+ /* @__PURE__ */ e($, { children: "Billing" }),
3722
+ /* @__PURE__ */ e(Q, { children: "Your plan, invoices, and payment method." })
3723
+ ] }),
3724
+ /* @__PURE__ */ s(R, { className: "space-y-4", children: [
3725
+ /* @__PURE__ */ s("div", { className: "rounded-md border border-border bg-background-subtle p-4", children: [
3726
+ /* @__PURE__ */ e("p", { className: "text-sm font-medium text-foreground", children: "Team — $20/user/month" }),
3727
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-subtle mt-1", children: "Renews on 1 June 2026 · 12 seats" })
3728
+ ] }),
3729
+ /* @__PURE__ */ s("div", { className: "flex justify-end gap-2", children: [
3730
+ /* @__PURE__ */ e(w, { variant: "outline", children: "Manage seats" }),
3731
+ /* @__PURE__ */ e(w, { children: "Upgrade plan" })
3732
+ ] })
3733
+ ] })
3734
+ ] }) }),
3735
+ /* @__PURE__ */ e("section", { id: "team", children: /* @__PURE__ */ s(j, { children: [
3736
+ /* @__PURE__ */ s(F, { children: [
3737
+ /* @__PURE__ */ e($, { children: "Team" }),
3738
+ /* @__PURE__ */ e(Q, { children: "Invite teammates and manage roles." })
3739
+ ] }),
3740
+ /* @__PURE__ */ s(R, { className: "space-y-4", children: [
3741
+ /* @__PURE__ */ s("div", { className: "flex gap-2", children: [
3742
+ /* @__PURE__ */ e(
3743
+ T,
3744
+ {
3745
+ type: "email",
3746
+ placeholder: "teammate@company.com",
3747
+ hideLabel: !0,
3748
+ label: "Invite email",
3749
+ className: "flex-1"
3750
+ }
3751
+ ),
3752
+ /* @__PURE__ */ e(w, { children: "Send invite" })
3753
+ ] }),
3754
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-subtle", children: "Invited members will receive a sign-up link by email." })
3755
+ ] })
3756
+ ] }) })
3757
+ ] })
3758
+ ] })
3759
+ ] });
3760
+ }
3761
+ const Rn = [
3762
+ { id: "p1", name: "Pulse onboarding", status: "active", owner: "Anu B.", updatedAt: "2 hours ago" },
3763
+ { id: "p2", name: "Q2 OKRs rollout", status: "active", owner: "Bat E.", updatedAt: "Yesterday" },
3764
+ { id: "p3", name: "Legacy export", status: "paused", owner: "Tuya G.", updatedAt: "3 days ago" },
3765
+ { id: "p4", name: "Billing spike", status: "archived", owner: "Khulan O.", updatedAt: "Last week" },
3766
+ { id: "p5", name: "Marketing refresh", status: "active", owner: "Anu B.", updatedAt: "Last week" }
3767
+ ], vt = {
3768
+ active: { tone: "success", label: "Active" },
3769
+ paused: { tone: "warning", label: "Paused" },
3770
+ archived: { tone: "neutral", label: "Archived" }
3771
+ };
3772
+ function jo() {
3773
+ const [n, t] = y(""), [a, r] = y("all"), [o, i] = y([]), [c, u] = y(1), [m, f] = y(10), p = Ce(() => Rn.filter((h) => {
3774
+ const x = h.name.toLowerCase().includes(n.toLowerCase()), k = a === "all" || h.status === a;
3775
+ return x && k;
3776
+ }), [n, a]), b = p.length > 0 && o.length === p.length, g = o.length > 0 && !b;
3777
+ return /* @__PURE__ */ s("div", { className: "space-y-6", children: [
3778
+ /* @__PURE__ */ s("header", { className: "flex items-end justify-between gap-4", children: [
3779
+ /* @__PURE__ */ s("div", { children: [
3780
+ /* @__PURE__ */ e("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Projects" }),
3781
+ /* @__PURE__ */ s("p", { className: "text-sm text-foreground-muted mt-1", children: [
3782
+ p.length,
3783
+ " project",
3784
+ p.length === 1 ? "" : "s",
3785
+ " match your filters."
3786
+ ] })
3787
+ ] }),
3788
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
3789
+ /* @__PURE__ */ e(w, { variant: "outline", leadingIcon: /* @__PURE__ */ e(it, {}), children: "Import" }),
3790
+ /* @__PURE__ */ e(w, { leadingIcon: /* @__PURE__ */ e(_e, {}), children: "New project" })
3791
+ ] })
3792
+ ] }),
3793
+ /* @__PURE__ */ s("div", { className: "flex flex-wrap items-center gap-2", children: [
3794
+ /* @__PURE__ */ s(la, { value: a, onValueChange: r, children: [
3795
+ /* @__PURE__ */ e(ft, { className: "w-36", placeholder: "Status" }),
3796
+ /* @__PURE__ */ s(gt, { children: [
3797
+ /* @__PURE__ */ e(me, { value: "all", children: "All statuses" }),
3798
+ /* @__PURE__ */ e(me, { value: "active", children: "Active" }),
3799
+ /* @__PURE__ */ e(me, { value: "paused", children: "Paused" }),
3800
+ /* @__PURE__ */ e(me, { value: "archived", children: "Archived" })
3801
+ ] })
3802
+ ] }),
3803
+ /* @__PURE__ */ e(w, { variant: "outline", size: "sm", leadingIcon: /* @__PURE__ */ e(jt, {}), children: "More filters" })
3804
+ ] }),
3805
+ o.length > 0 && /* @__PURE__ */ s("div", { className: "flex items-center justify-between rounded-md border border-border bg-background-subtle px-4 py-2", children: [
3806
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-3", children: [
3807
+ /* @__PURE__ */ e(
3808
+ De,
3809
+ {
3810
+ checked: b ? !0 : g ? "indeterminate" : !1,
3811
+ onCheckedChange: (h) => i(h ? p.map((x) => x.id) : []),
3812
+ "aria-label": "Select all"
3813
+ }
3814
+ ),
3815
+ /* @__PURE__ */ s("span", { className: "text-sm text-foreground", children: [
3816
+ o.length,
3817
+ " selected"
3818
+ ] })
3819
+ ] }),
3820
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
3821
+ /* @__PURE__ */ e(w, { variant: "ghost", size: "sm", leadingIcon: /* @__PURE__ */ e(Mt, {}), children: "Export" }),
3822
+ /* @__PURE__ */ e(w, { variant: "ghost", size: "sm", leadingIcon: /* @__PURE__ */ e(st, {}), children: "Delete" })
3823
+ ] })
3824
+ ] }),
3825
+ /* @__PURE__ */ e(
3826
+ Pr,
3827
+ {
3828
+ rows: p.slice((c - 1) * m, c * m),
3829
+ filter: { value: n, onChange: t, placeholder: "Search projects…" },
3830
+ emptyState: /* @__PURE__ */ e(
3831
+ mt,
3832
+ {
3833
+ title: "No projects match",
3834
+ description: "Try adjusting filters or creating a new project.",
3835
+ action: /* @__PURE__ */ e(w, { leadingIcon: /* @__PURE__ */ e(_e, {}), children: "New project" }),
3836
+ className: "border-0 bg-transparent"
3837
+ }
3838
+ ),
3839
+ columns: [
3840
+ {
3841
+ key: "select",
3842
+ header: /* @__PURE__ */ e(
3843
+ De,
3844
+ {
3845
+ checked: b ? !0 : g ? "indeterminate" : !1,
3846
+ onCheckedChange: (h) => i(h ? p.map((x) => x.id) : []),
3847
+ "aria-label": "Select all rows"
3848
+ }
3849
+ ),
3850
+ width: "32px",
3851
+ cell: (h) => /* @__PURE__ */ e(
3852
+ De,
3853
+ {
3854
+ checked: o.includes(h.id),
3855
+ onCheckedChange: (x) => i((k) => x ? [...k, h.id] : k.filter((v) => v !== h.id)),
3856
+ "aria-label": `Select ${h.name}`
3857
+ }
3858
+ )
3859
+ },
3860
+ { key: "name", header: "Name", sortable: !0, cell: (h) => /* @__PURE__ */ e("span", { className: "font-medium text-foreground", children: h.name }) },
3861
+ {
3862
+ key: "status",
3863
+ header: "Status",
3864
+ cell: (h) => /* @__PURE__ */ e(X, { tone: vt[h.status].tone, dot: !0, children: vt[h.status].label })
3865
+ },
3866
+ { key: "owner", header: "Owner" },
3867
+ { key: "updatedAt", header: "Updated", align: "right" }
3868
+ ]
3869
+ }
3870
+ ),
3871
+ /* @__PURE__ */ e(
3872
+ fa,
3873
+ {
3874
+ page: c,
3875
+ pageCount: Math.max(1, Math.ceil(p.length / m)),
3876
+ onPageChange: u,
3877
+ totalItems: p.length,
3878
+ pageSize: m,
3879
+ pageSizeOptions: [10, 20, 50],
3880
+ onPageSizeChange: (h) => {
3881
+ f(h), u(1);
3882
+ }
3883
+ }
3884
+ )
3885
+ ] });
3886
+ }
3887
+ function Fo() {
3888
+ return /* @__PURE__ */ s("div", { className: "space-y-6", children: [
3889
+ /* @__PURE__ */ e(
3890
+ Ht,
3891
+ {
3892
+ items: [
3893
+ { label: "Projects", href: "/projects" },
3894
+ { label: "Pulse onboarding" }
3895
+ ]
3896
+ }
3897
+ ),
3898
+ /* @__PURE__ */ s("header", { className: "flex items-start justify-between gap-4", children: [
3899
+ /* @__PURE__ */ s("div", { className: "space-y-2", children: [
3900
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-3", children: [
3901
+ /* @__PURE__ */ e("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Pulse onboarding" }),
3902
+ /* @__PURE__ */ e(X, { tone: "success", dot: !0, children: "Active" })
3903
+ ] }),
3904
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted max-w-2xl", children: "Self-serve onboarding flow for new admins. Owns the first 5 minutes of every workspace." })
3905
+ ] }),
3906
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
3907
+ /* @__PURE__ */ e(w, { variant: "outline", leadingIcon: /* @__PURE__ */ e(Dt, {}), children: "Edit" }),
3908
+ /* @__PURE__ */ e(w, { variant: "outline", leadingIcon: /* @__PURE__ */ e(st, {}), children: "Archive" }),
3909
+ /* @__PURE__ */ e(w, { trailingIcon: /* @__PURE__ */ e(Pt, {}), children: "Open in app" })
3910
+ ] })
3911
+ ] }),
3912
+ /* @__PURE__ */ s("div", { className: "grid gap-6 lg:grid-cols-[1fr_320px]", children: [
3913
+ /* @__PURE__ */ e("div", { className: "min-w-0", children: /* @__PURE__ */ s(xn, { defaultValue: "overview", children: [
3914
+ /* @__PURE__ */ s(va, { children: [
3915
+ /* @__PURE__ */ e(pe, { value: "overview", children: "Overview" }),
3916
+ /* @__PURE__ */ e(pe, { value: "activity", children: "Activity" }),
3917
+ /* @__PURE__ */ e(pe, { value: "files", children: "Files" }),
3918
+ /* @__PURE__ */ e(pe, { value: "settings", children: "Settings" })
3919
+ ] }),
3920
+ /* @__PURE__ */ e(he, { value: "overview", className: "space-y-4", children: /* @__PURE__ */ s(j, { children: [
3921
+ /* @__PURE__ */ e(F, { children: /* @__PURE__ */ e($, { children: "Summary" }) }),
3922
+ /* @__PURE__ */ s(R, { className: "space-y-2 text-foreground-muted leading-relaxed", children: [
3923
+ /* @__PURE__ */ e("p", { children: "The Pulse onboarding flow walks new admins through workspace creation, teammate invites, and first-data import in under five minutes." }),
3924
+ /* @__PURE__ */ e("p", { children: "Completion rate sits at 71% (week-over-week +4 pts) and median time to finish is 4 m 22 s." })
3925
+ ] })
3926
+ ] }) }),
3927
+ /* @__PURE__ */ e(he, { value: "activity", children: /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted", children: "Activity feed appears here." }) }),
3928
+ /* @__PURE__ */ e(he, { value: "files", children: /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted", children: "Linked documents appear here." }) }),
3929
+ /* @__PURE__ */ e(he, { value: "settings", children: /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted", children: "Project settings appear here." }) })
3930
+ ] }) }),
3931
+ /* @__PURE__ */ s("aside", { className: "space-y-4", children: [
3932
+ /* @__PURE__ */ s(j, { children: [
3933
+ /* @__PURE__ */ e(F, { children: /* @__PURE__ */ e($, { children: "Details" }) }),
3934
+ /* @__PURE__ */ s(R, { className: "space-y-3 text-sm", children: [
3935
+ /* @__PURE__ */ e(Ie, { label: "Owner", value: /* @__PURE__ */ s(te, { children: [
3936
+ /* @__PURE__ */ e(H, { size: "xs", fallback: "AB" }),
3937
+ " Anu B."
3938
+ ] }) }),
3939
+ /* @__PURE__ */ e(Ie, { label: "Created", value: "12 Feb 2026" }),
3940
+ /* @__PURE__ */ e(Ie, { label: "Updated", value: "2 hours ago" }),
3941
+ /* @__PURE__ */ e(Ie, { label: "Tags", value: /* @__PURE__ */ s(te, { children: [
3942
+ /* @__PURE__ */ e(X, { tone: "accent", children: "growth" }),
3943
+ " ",
3944
+ /* @__PURE__ */ e(X, { tone: "neutral", variant: "outline", children: "v2" })
3945
+ ] }) })
3946
+ ] })
3947
+ ] }),
3948
+ /* @__PURE__ */ s(j, { children: [
3949
+ /* @__PURE__ */ e(F, { children: /* @__PURE__ */ e($, { children: "Watchers" }) }),
3950
+ /* @__PURE__ */ e(R, { children: /* @__PURE__ */ s("div", { className: "flex -space-x-2", children: [
3951
+ /* @__PURE__ */ e(H, { fallback: "AB" }),
3952
+ /* @__PURE__ */ e(H, { fallback: "BE" }),
3953
+ /* @__PURE__ */ e(H, { fallback: "TG" }),
3954
+ /* @__PURE__ */ e(H, { fallback: "+2" })
3955
+ ] }) })
3956
+ ] })
3957
+ ] })
3958
+ ] })
3959
+ ] });
3960
+ }
3961
+ function Ie({ label: n, value: t }) {
3962
+ return /* @__PURE__ */ s("div", { className: "flex items-center justify-between gap-3", children: [
3963
+ /* @__PURE__ */ e("span", { className: "text-foreground-subtle", children: n }),
3964
+ /* @__PURE__ */ e("span", { className: "flex items-center gap-1.5 text-foreground", children: t })
3965
+ ] });
3966
+ }
3967
+ const Me = [
3968
+ { title: "Workspace" },
3969
+ { title: "Invite team" },
3970
+ { title: "Connect data" },
3971
+ { title: "Done" }
3972
+ ];
3973
+ function Ro() {
3974
+ const [n, t] = y(0), a = () => t((o) => Math.min(o + 1, Me.length - 1)), r = () => t((o) => Math.max(o - 1, 0));
3975
+ return /* @__PURE__ */ s("div", { className: "mx-auto max-w-2xl space-y-8 py-12", children: [
3976
+ /* @__PURE__ */ e(xa, { steps: Me, current: n }),
3977
+ /* @__PURE__ */ s(j, { children: [
3978
+ /* @__PURE__ */ s(F, { children: [
3979
+ /* @__PURE__ */ e($, { children: Nt[n].title }),
3980
+ /* @__PURE__ */ e(Q, { children: Nt[n].description })
3981
+ ] }),
3982
+ /* @__PURE__ */ s(R, { className: "space-y-4", children: [
3983
+ n === 0 && /* @__PURE__ */ s(te, { children: [
3984
+ /* @__PURE__ */ e(T, { label: "Workspace name", placeholder: "Acme Inc." }),
3985
+ /* @__PURE__ */ e(T, { label: "URL slug", prefix: /* @__PURE__ */ e("span", { children: "acme.app/" }), placeholder: "acme" })
3986
+ ] }),
3987
+ n === 1 && /* @__PURE__ */ s(te, { children: [
3988
+ /* @__PURE__ */ e(
3989
+ T,
3990
+ {
3991
+ type: "email",
3992
+ label: "Invite by email",
3993
+ placeholder: "teammate@company.com",
3994
+ helperText: "Separate multiple emails with commas."
3995
+ }
3996
+ ),
3997
+ /* @__PURE__ */ s(ga, { defaultValue: "member", children: [
3998
+ /* @__PURE__ */ e(Ae, { value: "admin", label: "Admin", description: "Can manage workspace and billing." }),
3999
+ /* @__PURE__ */ e(Ae, { value: "member", label: "Member", description: "Can create and edit projects." }),
4000
+ /* @__PURE__ */ e(Ae, { value: "viewer", label: "Viewer", description: "Read-only access." })
4001
+ ] })
4002
+ ] }),
4003
+ n === 2 && /* @__PURE__ */ s(te, { children: [
4004
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted", children: "Connect your data source so we can populate your first dashboard." }),
4005
+ /* @__PURE__ */ e("div", { className: "grid grid-cols-2 gap-2", children: ["Postgres", "BigQuery", "Snowflake", "CSV upload"].map((o) => /* @__PURE__ */ s(
4006
+ "button",
4007
+ {
4008
+ type: "button",
4009
+ className: "rounded-lg border border-border bg-card p-4 text-left hover:border-border-strong hover:bg-background-subtle transition-colors duration-[var(--duration-fast)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
4010
+ children: [
4011
+ /* @__PURE__ */ e("p", { className: "font-medium text-foreground", children: o }),
4012
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-subtle mt-1", children: "Quick setup with SSO" })
4013
+ ]
4014
+ },
4015
+ o
4016
+ )) })
4017
+ ] }),
4018
+ n === 3 && /* @__PURE__ */ s("div", { className: "flex flex-col items-center gap-3 py-6 text-center", children: [
4019
+ /* @__PURE__ */ e(Se, { className: "size-10 text-success-text", "aria-hidden": !0 }),
4020
+ /* @__PURE__ */ e("p", { className: "text-base font-medium text-foreground", children: "You're all set." }),
4021
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted max-w-sm", children: "Your workspace is ready. We've sent invites and your first dashboard is loading." })
4022
+ ] })
4023
+ ] })
4024
+ ] }),
4025
+ /* @__PURE__ */ s("div", { className: "flex items-center justify-between", children: [
4026
+ /* @__PURE__ */ e(w, { variant: "ghost", leadingIcon: /* @__PURE__ */ e(kt, {}), onClick: r, disabled: n === 0, children: "Back" }),
4027
+ n < Me.length - 1 ? /* @__PURE__ */ e(w, { trailingIcon: /* @__PURE__ */ e(Ne, {}), onClick: a, children: n === Me.length - 2 ? "Finish" : "Continue" }) : /* @__PURE__ */ e(w, { children: "Open workspace" })
4028
+ ] })
4029
+ ] });
4030
+ }
4031
+ const Nt = [
4032
+ { title: "Create your workspace", description: "A workspace is where your team and projects live." },
4033
+ { title: "Invite your team", description: "You can always invite more people later." },
4034
+ { title: "Connect a data source", description: "Pick one — others can be added in settings." },
4035
+ { title: "Welcome aboard", description: "We've set up your starting dashboard." }
4036
+ ], Bn = [
4037
+ {
4038
+ name: "Starter",
4039
+ price: "$0",
4040
+ cadence: "forever",
4041
+ description: "For individuals exploring the product.",
4042
+ features: ["Up to 3 projects", "Community support", "Single workspace"],
4043
+ cta: "Start free"
4044
+ },
4045
+ {
4046
+ name: "Team",
4047
+ price: "$20",
4048
+ cadence: "per user / month",
4049
+ description: "For small teams running real workloads.",
4050
+ features: [
4051
+ "Unlimited projects",
4052
+ "Email support, 24h response",
4053
+ "SSO via Google & Microsoft",
4054
+ "Audit log (30 days)"
4055
+ ],
4056
+ cta: "Start 14-day trial",
4057
+ highlighted: !0
4058
+ },
4059
+ {
4060
+ name: "Enterprise",
4061
+ price: "Custom",
4062
+ cadence: "annual",
4063
+ description: "For organisations with custom requirements.",
4064
+ features: [
4065
+ "Everything in Team",
4066
+ "SAML SSO + SCIM",
4067
+ "Dedicated CSM",
4068
+ "SOC 2 report + DPA",
4069
+ "Audit log (unlimited)"
4070
+ ],
4071
+ cta: "Talk to sales"
4072
+ }
4073
+ ];
4074
+ function Bo() {
4075
+ return /* @__PURE__ */ s("div", { className: "mx-auto max-w-5xl space-y-8 py-16", children: [
4076
+ /* @__PURE__ */ s("header", { className: "text-center space-y-3", children: [
4077
+ /* @__PURE__ */ e("h1", { className: "text-3xl font-semibold tracking-tight text-foreground", children: "Plans that scale with your team" }),
4078
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted max-w-xl mx-auto", children: "Start free, upgrade when you need more. All paid plans include a 14-day trial — no credit card required." })
4079
+ ] }),
4080
+ /* @__PURE__ */ e("div", { className: "grid gap-4 md:grid-cols-3", children: Bn.map((n) => /* @__PURE__ */ s(
4081
+ "div",
4082
+ {
4083
+ className: l(
4084
+ "flex flex-col gap-6 rounded-lg border bg-card p-6",
4085
+ n.highlighted ? "border-accent shadow-sm" : "border-border"
4086
+ ),
4087
+ children: [
4088
+ /* @__PURE__ */ s("div", { className: "space-y-2", children: [
4089
+ /* @__PURE__ */ s("div", { className: "flex items-center justify-between", children: [
4090
+ /* @__PURE__ */ e("h2", { className: "text-base font-semibold text-foreground", children: n.name }),
4091
+ n.highlighted && /* @__PURE__ */ e(X, { tone: "accent", children: "Most popular" })
4092
+ ] }),
4093
+ /* @__PURE__ */ e("p", { className: "text-sm text-foreground-muted", children: n.description })
4094
+ ] }),
4095
+ /* @__PURE__ */ s("div", { className: "flex items-baseline gap-1.5", children: [
4096
+ /* @__PURE__ */ e("span", { className: "text-3xl font-semibold tabular text-foreground", children: n.price }),
4097
+ /* @__PURE__ */ e("span", { className: "text-sm text-foreground-subtle", children: n.cadence })
4098
+ ] }),
4099
+ /* @__PURE__ */ e("ul", { className: "space-y-2 text-sm", children: n.features.map((t) => /* @__PURE__ */ s("li", { className: "flex items-start gap-2 text-foreground", children: [
4100
+ /* @__PURE__ */ e(J, { className: "size-4 text-accent shrink-0 mt-0.5", "aria-hidden": !0 }),
4101
+ t
4102
+ ] }, t)) }),
4103
+ /* @__PURE__ */ e(
4104
+ w,
4105
+ {
4106
+ variant: n.highlighted ? "primary" : "outline",
4107
+ className: "mt-auto w-full",
4108
+ children: n.cta
4109
+ }
4110
+ )
4111
+ ]
4112
+ },
4113
+ n.name
4114
+ )) })
4115
+ ] });
4116
+ }
4117
+ const Ln = [
4118
+ {
4119
+ icon: /* @__PURE__ */ e(_e, {}),
4120
+ title: "Create a project",
4121
+ description: "Track a real piece of work end-to-end.",
4122
+ cta: "New project"
4123
+ },
4124
+ {
4125
+ icon: /* @__PURE__ */ e(it, {}),
4126
+ title: "Import existing data",
4127
+ description: "CSV, Postgres, BigQuery, or Snowflake — connect in a minute.",
4128
+ cta: "Connect source"
4129
+ },
4130
+ {
4131
+ icon: /* @__PURE__ */ e(Le, {}),
4132
+ title: "Invite your team",
4133
+ description: "Workspaces are better with teammates. We'll send the invites.",
4134
+ cta: "Invite people"
4135
+ }
4136
+ ];
4137
+ function Lo() {
4138
+ return /* @__PURE__ */ s("div", { className: "mx-auto max-w-3xl space-y-8 py-12", children: [
4139
+ /* @__PURE__ */ e(
4140
+ mt,
4141
+ {
4142
+ icon: /* @__PURE__ */ e(rt, { className: "size-6" }),
4143
+ title: "Your workspace is ready",
4144
+ description: "Start with one of the steps below — you can always come back to the others.",
4145
+ action: /* @__PURE__ */ e(w, { trailingIcon: /* @__PURE__ */ e(Ne, {}), children: "Open tutorial" })
4146
+ }
4147
+ ),
4148
+ /* @__PURE__ */ e("div", { className: "grid gap-3 md:grid-cols-3", children: Ln.map((n) => /* @__PURE__ */ e(j, { variant: "interactive", children: /* @__PURE__ */ s(R, { className: "space-y-3", children: [
4149
+ /* @__PURE__ */ e("div", { className: "inline-flex size-9 items-center justify-center rounded-md bg-accent-soft text-on-accent-soft [&_svg]:size-4", children: n.icon }),
4150
+ /* @__PURE__ */ s("div", { className: "space-y-1", children: [
4151
+ /* @__PURE__ */ e("h3", { className: "text-sm font-semibold text-foreground", children: n.title }),
4152
+ /* @__PURE__ */ e("p", { className: "text-xs text-foreground-muted leading-relaxed", children: n.description })
4153
+ ] }),
4154
+ /* @__PURE__ */ e(w, { variant: "ghost", size: "sm", trailingIcon: /* @__PURE__ */ e(Ne, {}), children: n.cta })
4155
+ ] }) }, n.title)) })
4156
+ ] });
4157
+ }
4158
+ export {
4159
+ eo as Accordion,
4160
+ Va as AccordionContent,
4161
+ Ea as AccordionItem,
4162
+ Ga as AccordionTrigger,
4163
+ Ee as Alert,
4164
+ Po as AppShell,
4165
+ zo as AuthLayout,
4166
+ H as Avatar,
4167
+ qa as AvatarGroup,
4168
+ X as Badge,
4169
+ Ht as Breadcrumbs,
4170
+ w as Button,
4171
+ j as Card,
4172
+ R as CardContent,
4173
+ Q as CardDescription,
4174
+ Za as CardFooter,
4175
+ F as CardHeader,
4176
+ $ as CardTitle,
4177
+ De as Checkbox,
4178
+ er as Combobox,
4179
+ tr as Command,
4180
+ ao as CommandDialog,
4181
+ nr as CommandEmpty,
4182
+ or as CommandGroup,
4183
+ ar as CommandInput,
4184
+ ir as CommandItem,
4185
+ rr as CommandList,
4186
+ sr as CommandSeparator,
4187
+ to as CommandShortcut,
4188
+ Br as ConfirmationDialog,
4189
+ no as ContextMenu,
4190
+ fr as ContextMenuCheckboxItem,
4191
+ ur as ContextMenuContent,
4192
+ so as ContextMenuGroup,
4193
+ mr as ContextMenuItem,
4194
+ pr as ContextMenuLabel,
4195
+ lr as ContextMenuPortal,
4196
+ lo as ContextMenuRadioGroup,
4197
+ gr as ContextMenuRadioItem,
4198
+ hr as ContextMenuSeparator,
4199
+ br as ContextMenuShortcut,
4200
+ io as ContextMenuSub,
4201
+ cr as ContextMenuSubContent,
4202
+ dr as ContextMenuSubTrigger,
4203
+ oo as ContextMenuTrigger,
4204
+ Ao as Dashboard,
4205
+ Pr as DataGrid,
4206
+ jo as DataTablePage,
4207
+ Ar as DatePicker,
4208
+ _r as DateRangePicker,
4209
+ jr as Dialog,
4210
+ Rr as DialogClose,
4211
+ ta as DialogContent,
4212
+ oa as DialogDescription,
4213
+ ra as DialogFooter,
4214
+ aa as DialogHeader,
4215
+ ea as DialogOverlay,
4216
+ Fr as DialogPortal,
4217
+ na as DialogTitle,
4218
+ fo as DialogTrigger,
4219
+ xr as DropdownMenu,
4220
+ Ut as DropdownMenuCheckboxItem,
4221
+ Wt as DropdownMenuContent,
4222
+ co as DropdownMenuGroup,
4223
+ kr as DropdownMenuItem,
4224
+ Kt as DropdownMenuLabel,
4225
+ Nr as DropdownMenuPortal,
4226
+ mo as DropdownMenuRadioGroup,
4227
+ Cr as DropdownMenuRadioItem,
4228
+ qt as DropdownMenuSeparator,
4229
+ Sr as DropdownMenuShortcut,
4230
+ uo as DropdownMenuSub,
4231
+ wr as DropdownMenuSubContent,
4232
+ yr as DropdownMenuSubTrigger,
4233
+ vr as DropdownMenuTrigger,
4234
+ mt as EmptyState,
4235
+ $r as ErrorState,
4236
+ Lo as FirstRunEmpty,
4237
+ Mo as ForgotPasswordForm,
4238
+ go as Form,
4239
+ Gr as FormControl,
4240
+ Vr as FormDescription,
4241
+ Hr as FormError,
4242
+ po as FormField,
4243
+ Or as FormItem,
4244
+ Er as FormLabel,
4245
+ lt as IconButton,
4246
+ Zn as Icons,
4247
+ T as Input,
4248
+ Wr as Kbd,
4249
+ Do as MagicLinkSent,
4250
+ Ur as MultiSelect,
4251
+ Ro as Onboarding,
4252
+ fa as Pagination,
4253
+ bo as Popover,
4254
+ vo as PopoverAnchor,
4255
+ No as PopoverClose,
4256
+ Xr as PopoverContent,
4257
+ xo as PopoverTrigger,
4258
+ Bo as Pricing,
4259
+ Zr as Progress,
4260
+ tn as ProgressCircle,
4261
+ ga as RadioGroup,
4262
+ Ae as RadioItem,
4263
+ Fo as RecordDetail,
4264
+ an as ScrollArea,
4265
+ pa as ScrollBar,
4266
+ la as Select,
4267
+ gt as SelectContent,
4268
+ qr as SelectGroup,
4269
+ me as SelectItem,
4270
+ ma as SelectLabel,
4271
+ ua as SelectScrollDownButton,
4272
+ ca as SelectScrollUpButton,
4273
+ Kr as SelectSeparator,
4274
+ ft as SelectTrigger,
4275
+ ho as SelectValue,
4276
+ fe as Separator,
4277
+ _o as SettingsPage,
4278
+ yo as Sheet,
4279
+ ko as SheetClose,
4280
+ on as SheetContent,
4281
+ cn as SheetDescription,
4282
+ ln as SheetFooter,
4283
+ sn as SheetHeader,
4284
+ rn as SheetPortal,
4285
+ dn as SheetTitle,
4286
+ wo as SheetTrigger,
4287
+ ba as Sidebar,
4288
+ un as SidebarGroup,
4289
+ ue as SidebarItem,
4290
+ Xe as SidebarSection,
4291
+ To as SignInForm,
4292
+ Io as SignUpForm,
4293
+ Xt as Skeleton,
4294
+ mn as Slider,
4295
+ pn as Spinner,
4296
+ xa as Stepper,
4297
+ ge as Switch,
4298
+ dt as Table,
4299
+ ut as TableBody,
4300
+ Dr as TableCaption,
4301
+ ee as TableCell,
4302
+ Mr as TableFooter,
4303
+ se as TableHead,
4304
+ ct as TableHeader,
4305
+ oe as TableRow,
4306
+ Qt as TableSortHeader,
4307
+ xn as Tabs,
4308
+ he as TabsContent,
4309
+ va as TabsList,
4310
+ pe as TabsTrigger,
4311
+ Nn as Textarea,
4312
+ Cn as Toast,
4313
+ Tn as ToastAction,
4314
+ In as ToastClose,
4315
+ zn as ToastDescription,
4316
+ Co as ToastProvider,
4317
+ Sn as ToastTitle,
4318
+ yn as ToastViewport,
4319
+ Pn as Tooltip,
4320
+ Na as TooltipContent,
4321
+ So as TooltipProvider,
4322
+ Mn as TooltipRoot,
4323
+ Dn as TooltipTrigger,
4324
+ ya as TopNav,
4325
+ An as TopNavLink,
4326
+ l as cn,
4327
+ Eo as cva,
4328
+ Jn as toast,
4329
+ Qn as uid,
4330
+ ro as useCommandPaletteShortcut,
4331
+ He as useFormField,
4332
+ Oa as useMediaQuery,
4333
+ Xn as usePrefersReducedMotion,
4334
+ Yn as useToast
4335
+ };
4336
+ //# sourceMappingURL=index.js.map