@nextlyhq/ui 0.0.2-alpha.5 → 0.0.2-alpha.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,85 +1,227 @@
1
- 'use strict';
2
-
3
- var reactSlot = require('@radix-ui/react-slot');
4
- var classVarianceAuthority = require('class-variance-authority');
5
- var React5 = require('react');
6
- var clsx = require('clsx');
7
- var tailwindMerge = require('tailwind-merge');
8
- var jsxRuntime = require('react/jsx-runtime');
9
- var reactLabel = require('@radix-ui/react-label');
10
- var SeparatorPrimitive = require('@radix-ui/react-separator');
11
- var CheckboxPrimitive = require('@radix-ui/react-checkbox');
12
- var lucideReact = require('lucide-react');
13
- var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
14
- var reactSwitch = require('@radix-ui/react-switch');
15
- var CollapsiblePrimitive = require('@radix-ui/react-collapsible');
16
- var AccordionPrimitive = require('@radix-ui/react-accordion');
17
- var reactAvatar = require('@radix-ui/react-avatar');
18
- var reactTabs = require('@radix-ui/react-tabs');
19
- var reactTooltip = require('@radix-ui/react-tooltip');
20
- var PopoverPrimitive = require('@radix-ui/react-popover');
21
- var DialogPrimitive = require('@radix-ui/react-dialog');
22
- var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
23
- var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
24
- var SelectPrimitive = require('@radix-ui/react-select');
25
- var cmdk = require('cmdk');
26
- var sonner = require('sonner');
27
-
28
- function _interopNamespace(e) {
29
- if (e && e.__esModule) return e;
30
- var n = Object.create(null);
31
- if (e) {
32
- Object.keys(e).forEach(function (k) {
33
- if (k !== 'default') {
34
- var d = Object.getOwnPropertyDescriptor(e, k);
35
- Object.defineProperty(n, k, d.get ? d : {
36
- enumerable: true,
37
- get: function () { return e[k]; }
38
- });
39
- }
40
- });
1
+ "use client";
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
41
18
  }
42
- n.default = e;
43
- return Object.freeze(n);
44
- }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
45
30
 
46
- var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
47
- var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
48
- var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
49
- var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
50
- var CollapsiblePrimitive__namespace = /*#__PURE__*/_interopNamespace(CollapsiblePrimitive);
51
- var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
52
- var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
53
- var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
54
- var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
55
- var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
56
- var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
31
+ // src/index.ts
32
+ var index_exports = {};
33
+ __export(index_exports, {
34
+ Accordion: () => Accordion,
35
+ AccordionContent: () => AccordionContent,
36
+ AccordionItem: () => AccordionItem,
37
+ AccordionTrigger: () => AccordionTrigger,
38
+ Alert: () => Alert,
39
+ AlertDescription: () => AlertDescription,
40
+ AlertDialog: () => AlertDialog,
41
+ AlertDialogAction: () => AlertDialogAction,
42
+ AlertDialogCancel: () => AlertDialogCancel,
43
+ AlertDialogContent: () => AlertDialogContent,
44
+ AlertDialogDescription: () => AlertDialogDescription,
45
+ AlertDialogFooter: () => AlertDialogFooter,
46
+ AlertDialogHeader: () => AlertDialogHeader,
47
+ AlertDialogOverlay: () => AlertDialogOverlay,
48
+ AlertDialogPortal: () => AlertDialogPortal,
49
+ AlertDialogTitle: () => AlertDialogTitle,
50
+ AlertDialogTrigger: () => AlertDialogTrigger,
51
+ AlertTitle: () => AlertTitle,
52
+ Avatar: () => Avatar,
53
+ AvatarFallback: () => AvatarFallback,
54
+ AvatarImage: () => AvatarImage,
55
+ Badge: () => Badge,
56
+ Button: () => Button,
57
+ Card: () => Card,
58
+ CardAction: () => CardAction,
59
+ CardContent: () => CardContent,
60
+ CardDescription: () => CardDescription,
61
+ CardFooter: () => CardFooter,
62
+ CardHeader: () => CardHeader,
63
+ CardTitle: () => CardTitle,
64
+ Checkbox: () => Checkbox,
65
+ Collapsible: () => Collapsible,
66
+ CollapsibleContent: () => CollapsibleContent2,
67
+ CollapsibleTrigger: () => CollapsibleTrigger2,
68
+ Command: () => Command,
69
+ CommandDialog: () => CommandDialog,
70
+ CommandEmpty: () => CommandEmpty,
71
+ CommandGroup: () => CommandGroup,
72
+ CommandInput: () => CommandInput,
73
+ CommandItem: () => CommandItem,
74
+ CommandList: () => CommandList,
75
+ CommandSeparator: () => CommandSeparator,
76
+ CommandShortcut: () => CommandShortcut,
77
+ Dialog: () => Dialog,
78
+ DialogClose: () => DialogClose,
79
+ DialogContent: () => DialogContent,
80
+ DialogDescription: () => DialogDescription,
81
+ DialogFooter: () => DialogFooter,
82
+ DialogHeader: () => DialogHeader,
83
+ DialogOverlay: () => DialogOverlay,
84
+ DialogPortal: () => DialogPortal,
85
+ DialogTitle: () => DialogTitle,
86
+ DialogTrigger: () => DialogTrigger,
87
+ DropdownMenu: () => DropdownMenu,
88
+ DropdownMenuCheckboxItem: () => DropdownMenuCheckboxItem,
89
+ DropdownMenuContent: () => DropdownMenuContent,
90
+ DropdownMenuGroup: () => DropdownMenuGroup,
91
+ DropdownMenuItem: () => DropdownMenuItem,
92
+ DropdownMenuLabel: () => DropdownMenuLabel,
93
+ DropdownMenuPortal: () => DropdownMenuPortal,
94
+ DropdownMenuRadioGroup: () => DropdownMenuRadioGroup,
95
+ DropdownMenuRadioItem: () => DropdownMenuRadioItem,
96
+ DropdownMenuSeparator: () => DropdownMenuSeparator,
97
+ DropdownMenuShortcut: () => DropdownMenuShortcut,
98
+ DropdownMenuSub: () => DropdownMenuSub,
99
+ DropdownMenuSubContent: () => DropdownMenuSubContent,
100
+ DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
101
+ DropdownMenuTrigger: () => DropdownMenuTrigger,
102
+ FormLabelWithTooltip: () => FormLabelWithTooltip,
103
+ Grid: () => Grid,
104
+ Input: () => Input,
105
+ Label: () => Label,
106
+ Popover: () => Popover,
107
+ PopoverAnchor: () => PopoverAnchor,
108
+ PopoverContent: () => PopoverContent,
109
+ PopoverTrigger: () => PopoverTrigger,
110
+ PortalProvider: () => PortalProvider,
111
+ Progress: () => Progress,
112
+ RadioGroup: () => RadioGroup,
113
+ RadioGroupItem: () => RadioGroupItem,
114
+ Select: () => Select,
115
+ SelectContent: () => SelectContent,
116
+ SelectGroup: () => SelectGroup,
117
+ SelectItem: () => SelectItem,
118
+ SelectLabel: () => SelectLabel,
119
+ SelectScrollDownButton: () => SelectScrollDownButton,
120
+ SelectScrollUpButton: () => SelectScrollUpButton,
121
+ SelectSeparator: () => SelectSeparator,
122
+ SelectTrigger: () => SelectTrigger,
123
+ SelectValue: () => SelectValue,
124
+ Separator: () => Separator,
125
+ Sheet: () => Sheet,
126
+ SheetClose: () => SheetClose,
127
+ SheetContent: () => SheetContent,
128
+ SheetDescription: () => SheetDescription,
129
+ SheetFooter: () => SheetFooter,
130
+ SheetHeader: () => SheetHeader,
131
+ SheetOverlay: () => SheetOverlay,
132
+ SheetPortal: () => SheetPortal,
133
+ SheetTitle: () => SheetTitle,
134
+ SheetTrigger: () => SheetTrigger,
135
+ Skeleton: () => Skeleton,
136
+ Spinner: () => Spinner,
137
+ Stack: () => Stack,
138
+ Stat: () => Stat,
139
+ Switch: () => Switch,
140
+ Table: () => Table,
141
+ TableBody: () => TableBody,
142
+ TableCaption: () => TableCaption,
143
+ TableCell: () => TableCell,
144
+ TableEmpty: () => TableEmpty,
145
+ TableError: () => TableError,
146
+ TableFooter: () => TableFooter,
147
+ TableHead: () => TableHead,
148
+ TableHeader: () => TableHeader,
149
+ TableLoading: () => TableLoading,
150
+ TableRow: () => TableRow,
151
+ TableSearch: () => TableSearch,
152
+ TableSkeleton: () => TableSkeleton,
153
+ Tabs: () => Tabs,
154
+ TabsContent: () => TabsContent,
155
+ TabsList: () => TabsList,
156
+ TabsTrigger: () => TabsTrigger,
157
+ Textarea: () => Textarea,
158
+ Toaster: () => Toaster,
159
+ Tooltip: () => Tooltip,
160
+ TooltipContent: () => TooltipContent,
161
+ TooltipProvider: () => TooltipProvider,
162
+ TooltipTrigger: () => TooltipTrigger,
163
+ alertVariants: () => alertVariants,
164
+ avatarVariants: () => avatarVariants,
165
+ badgeVariants: () => badgeVariants,
166
+ buttonVariants: () => buttonVariants,
167
+ cardVariants: () => cardVariants,
168
+ dialogContentVariants: () => dialogContentVariants,
169
+ inputVariants: () => inputVariants,
170
+ progressVariants: () => progressVariants,
171
+ selectTriggerVariants: () => selectTriggerVariants,
172
+ sheetVariants: () => sheetVariants,
173
+ spinnerVariants: () => spinnerVariants,
174
+ toast: () => import_sonner.toast,
175
+ usePortalContainer: () => usePortalContainer
176
+ });
177
+ module.exports = __toCommonJS(index_exports);
57
178
 
58
179
  // src/components/button.tsx
180
+ var import_react_slot = require("@radix-ui/react-slot");
181
+ var import_class_variance_authority = require("class-variance-authority");
182
+ var React = __toESM(require("react"), 1);
183
+ var import_react = require("react");
184
+
185
+ // src/lib/utils.ts
186
+ var import_clsx = require("clsx");
187
+ var import_tailwind_merge = require("tailwind-merge");
59
188
  function cn(...inputs) {
60
- return tailwindMerge.twMerge(clsx.clsx(inputs));
189
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
61
190
  }
62
- var buttonVariants = classVarianceAuthority.cva(
63
- "inline-flex items-center justify-center whitespace-nowrap rounded-none text-sm font-medium cursor-pointer transition-all duration-150 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-[0.98] [&_svg]:text-current",
191
+
192
+ // src/components/button.tsx
193
+ var import_jsx_runtime = require("react/jsx-runtime");
194
+ var buttonVariants = (0, import_class_variance_authority.cva)(
195
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-all duration-150 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-[0.98] [&_svg]:text-current",
64
196
  {
65
197
  variants: {
66
198
  variant: {
67
199
  default: "bg-primary text-primary-foreground border border-transparent hover:opacity-90",
68
200
  primary: "bg-primary text-primary-foreground border border-transparent hover:opacity-90",
69
- destructive: "bg-destructive text-destructive-foreground border border-transparent hover:opacity-90",
70
- outline: "border border-primary/10 text-foreground hover-unified bg-background",
71
- secondary: "bg-background border border-primary/10 text-foreground hover:bg-primary/5",
201
+ // Solid fill uses the emphasis token so white on-color text stays AA in
202
+ // dark mode (the base token is the readable text color, too light here).
203
+ // Hover darkens to a deeper shade instead of opacity-90, which would
204
+ // composite the fill toward the page and drop white text under 4.5:1.
205
+ destructive: "bg-destructive-solid text-destructive-foreground border border-transparent hover:bg-destructive-700",
206
+ // border-border is the decorative separator token, and it is the right
207
+ // one here: a button is identified by its label and fill, so its edge
208
+ // carries no meaning on its own and is not held to the 3:1 minimum that
209
+ // border-input meets for controls identified by their boundary. It is
210
+ // still used in preference to a faint primary alpha, which reads as a
211
+ // tint of the brand colour rather than as an edge.
212
+ outline: "border border-border text-foreground hover-unified bg-background",
213
+ secondary: "bg-background border border-border text-foreground hover:bg-primary/5",
72
214
  ghost: "text-foreground border border-transparent hover-unified",
73
215
  link: "text-primary border border-transparent underline-offset-4 hover:underline"
74
216
  },
75
217
  size: {
76
- default: "h-10 px-6 py-2",
77
- sm: "h-9 px-4 text-[13px]",
78
- md: "h-10 px-6 text-sm",
79
- lg: "h-11 px-8 text-base",
80
- icon: "h-10 w-10 p-0",
81
- "icon-sm": "h-9 w-9 p-0",
82
- "icon-lg": "h-11 w-11 p-0"
218
+ default: "h-[var(--nx-control-height)] px-6 py-2",
219
+ sm: "h-[var(--nx-control-height-md)] px-4 text-sm",
220
+ md: "h-[var(--nx-control-height)] px-6 text-sm",
221
+ lg: "h-[var(--nx-control-height-lg)] px-8 text-base",
222
+ icon: "h-[var(--nx-control-height)] w-[var(--nx-control-height)] p-0",
223
+ "icon-sm": "h-[var(--nx-control-height-md)] w-[var(--nx-control-height-md)] p-0",
224
+ "icon-lg": "h-[var(--nx-control-height-lg)] w-[var(--nx-control-height-lg)] p-0"
83
225
  }
84
226
  },
85
227
  defaultVariants: {
@@ -88,7 +230,7 @@ var buttonVariants = classVarianceAuthority.cva(
88
230
  }
89
231
  }
90
232
  );
91
- var Button = React5.forwardRef(
233
+ var Button = (0, import_react.forwardRef)(
92
234
  ({
93
235
  className,
94
236
  variant = "default",
@@ -97,9 +239,9 @@ var Button = React5.forwardRef(
97
239
  children,
98
240
  ...props
99
241
  }, ref) => {
100
- const Comp = asChild ? reactSlot.Slot : "button";
101
- const hasMultipleChildren = React5__namespace.Children.count(children) > 1;
102
- return /* @__PURE__ */ jsxRuntime.jsx(
242
+ const Comp = asChild ? import_react_slot.Slot : "button";
243
+ const hasMultipleChildren = React.Children.count(children) > 1;
244
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
103
245
  Comp,
104
246
  {
105
247
  "data-slot": `button.${variant}`,
@@ -115,14 +257,19 @@ var Button = React5.forwardRef(
115
257
  }
116
258
  );
117
259
  Button.displayName = "Button";
118
- var inputVariants = classVarianceAuthority.cva(
119
- "file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-none border border-input bg-background text-sm transition-all duration-150 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus:ring-0 focus:ring-offset-0 focus:outline-none focus:!border-primary focus-visible:!border-primary aria-invalid:border-destructive aria-invalid:focus:!border-destructive data-[invalid=true]:border-destructive data-[invalid=true]:focus:!border-destructive",
260
+
261
+ // src/components/input.tsx
262
+ var import_class_variance_authority2 = require("class-variance-authority");
263
+ var import_react2 = require("react");
264
+ var import_jsx_runtime2 = require("react/jsx-runtime");
265
+ var inputVariants = (0, import_class_variance_authority2.cva)(
266
+ "file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-md border border-input bg-background text-sm transition-all duration-150 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus:ring-0 focus:ring-offset-0 focus:outline-none focus:border-primary! focus-visible:border-primary! aria-invalid:border-destructive aria-invalid:focus:border-destructive! data-[invalid=true]:border-destructive data-[invalid=true]:focus:border-destructive!",
120
267
  {
121
268
  variants: {
122
269
  size: {
123
- sm: "h-8 px-2.5 py-2 text-sm",
124
- default: "h-10 px-3 py-2.5 text-sm",
125
- lg: "h-11 px-4 py-3 text-base"
270
+ sm: "h-[var(--nx-control-height-sm)] px-2.5 py-2 text-sm",
271
+ default: "h-[var(--nx-control-height)] px-3 py-2.5 text-sm",
272
+ lg: "h-[var(--nx-control-height-lg)] px-4 py-3 text-base"
126
273
  }
127
274
  },
128
275
  defaultVariants: {
@@ -130,9 +277,9 @@ var inputVariants = classVarianceAuthority.cva(
130
277
  }
131
278
  }
132
279
  );
133
- var Input = React5.forwardRef(
280
+ var Input = (0, import_react2.forwardRef)(
134
281
  ({ className, type, size, ...props }, ref) => {
135
- return /* @__PURE__ */ jsxRuntime.jsx(
282
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
136
283
  "input",
137
284
  {
138
285
  type,
@@ -145,14 +292,20 @@ var Input = React5.forwardRef(
145
292
  }
146
293
  );
147
294
  Input.displayName = "Input";
148
- var Textarea = React5.forwardRef(({ className, ...props }, ref) => {
149
- return /* @__PURE__ */ jsxRuntime.jsx(
295
+
296
+ // src/components/textarea.tsx
297
+ var import_react3 = require("react");
298
+ var import_jsx_runtime3 = require("react/jsx-runtime");
299
+ var Textarea = (0, import_react3.forwardRef)(({ className, ...props }, ref) => {
300
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
150
301
  "textarea",
151
302
  {
152
303
  "data-slot": "textarea",
153
304
  className: cn(
154
- "flex min-h-[80px] w-full rounded-none border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground placeholder:opacity-50 transition-all duration-200 focus:!border-primary focus-visible:!border-primary focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 resize-y",
155
- "aria-invalid:border-destructive aria-invalid:focus:!border-destructive",
305
+ // hover:border-primary (full strength) keeps the hover boundary more
306
+ // visible than the resting border-input, not a fainter alpha of it.
307
+ "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground placeholder:opacity-50 transition-all duration-200 focus:border-primary! focus-visible:border-primary! focus:outline-none hover:border-primary disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 resize-y",
308
+ "aria-invalid:border-destructive aria-invalid:focus:border-destructive!",
156
309
  className
157
310
  ),
158
311
  ref,
@@ -161,9 +314,13 @@ var Textarea = React5.forwardRef(({ className, ...props }, ref) => {
161
314
  );
162
315
  });
163
316
  Textarea.displayName = "Textarea";
317
+
318
+ // src/components/label.tsx
319
+ var import_react_label = require("@radix-ui/react-label");
320
+ var import_jsx_runtime4 = require("react/jsx-runtime");
164
321
  function Label({ className, ...props }) {
165
- return /* @__PURE__ */ jsxRuntime.jsx(
166
- reactLabel.Root,
322
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
323
+ import_react_label.Root,
167
324
  {
168
325
  "data-slot": "label",
169
326
  className: cn(
@@ -174,17 +331,121 @@ function Label({ className, ...props }) {
174
331
  }
175
332
  );
176
333
  }
177
- var badgeVariants = classVarianceAuthority.cva(
178
- "inline-flex items-center rounded-none px-2.5 py-0.5 h-[22px] text-xs font-medium transition-colors",
334
+
335
+ // src/components/form-label-with-tooltip.tsx
336
+ var import_lucide_react = require("lucide-react");
337
+ var React2 = __toESM(require("react"), 1);
338
+
339
+ // src/components/tooltip.tsx
340
+ var import_react_tooltip = require("@radix-ui/react-tooltip");
341
+ var import_react5 = require("react");
342
+
343
+ // src/providers/portal-provider.tsx
344
+ var import_react4 = require("react");
345
+ var import_jsx_runtime5 = require("react/jsx-runtime");
346
+ var PortalContext = (0, import_react4.createContext)({ container: null });
347
+ function PortalProvider({ container, children }) {
348
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PortalContext.Provider, { value: { container }, children });
349
+ }
350
+ function usePortalContainer() {
351
+ const { container } = (0, import_react4.useContext)(PortalContext);
352
+ return container ?? void 0;
353
+ }
354
+
355
+ // src/components/tooltip.tsx
356
+ var import_jsx_runtime6 = require("react/jsx-runtime");
357
+ var TooltipProvider = import_react_tooltip.Provider;
358
+ var Tooltip = import_react_tooltip.Root;
359
+ var TooltipTrigger = import_react_tooltip.Trigger;
360
+ var TooltipContent = (0, import_react5.forwardRef)(({ className, sideOffset = 4, ...props }, ref) => {
361
+ const portalContainer = usePortalContainer();
362
+ return (
363
+ // Portalled for the same reason as every other overlay here, plus one
364
+ // specific to the tooltip: the positioner measures against the nearest
365
+ // containing block, and it counts `container-type` as one while the
366
+ // browser does not. Left inline under a `@container` element, the content
367
+ // is offset by that element's own position. Portalling lifts it out of any
368
+ // such ancestor, so the two agree again.
369
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_tooltip.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
370
+ import_react_tooltip.Content,
371
+ {
372
+ ref,
373
+ sideOffset,
374
+ "data-slot": "tooltip-content",
375
+ className: cn(
376
+ "z-50 overflow-hidden rounded-lg px-3 py-1.5 text-xs shadow-lg border border-border bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
377
+ className
378
+ ),
379
+ ...props
380
+ }
381
+ ) })
382
+ );
383
+ });
384
+ TooltipContent.displayName = import_react_tooltip.Content.displayName;
385
+
386
+ // src/components/form-label-with-tooltip.tsx
387
+ var import_jsx_runtime7 = require("react/jsx-runtime");
388
+ var FormLabelWithTooltip = React2.forwardRef(
389
+ ({
390
+ className,
391
+ labelClassName,
392
+ tooltipClassName,
393
+ label,
394
+ description,
395
+ required,
396
+ ...props
397
+ }, ref) => {
398
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: cn("flex items-center gap-2", className), children: [
399
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Label, { ref, className: labelClassName, ...props, children: [
400
+ label,
401
+ required && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-destructive ml-1", children: "*" })
402
+ ] }),
403
+ description && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Tooltip, { delayDuration: 200, children: [
404
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
405
+ TooltipTrigger,
406
+ {
407
+ type: "button",
408
+ tabIndex: -1,
409
+ className: "shrink-0 text-muted-foreground hover:text-foreground focus:outline-none focus:text-foreground transition-colors cursor-help",
410
+ children: [
411
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react.Info, { className: "h-3.5 w-3.5" }),
412
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "sr-only", children: "Toggle description" })
413
+ ]
414
+ }
415
+ ),
416
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
417
+ TooltipContent,
418
+ {
419
+ side: "right",
420
+ className: cn(
421
+ "max-w-[250px] text-xs break-words relative z-[100] shadow-md border border-border bg-primary text-primary-foreground px-3 py-2 rounded-lg",
422
+ tooltipClassName
423
+ ),
424
+ children: description
425
+ }
426
+ )
427
+ ] }) })
428
+ ] });
429
+ }
430
+ );
431
+ FormLabelWithTooltip.displayName = "FormLabelWithTooltip";
432
+
433
+ // src/components/badge.tsx
434
+ var import_class_variance_authority3 = require("class-variance-authority");
435
+ var import_jsx_runtime8 = require("react/jsx-runtime");
436
+ var badgeVariants = (0, import_class_variance_authority3.cva)(
437
+ "inline-flex items-center rounded-sm px-2.5 py-0.5 h-[22px] text-xs font-medium transition-colors",
179
438
  {
180
439
  variants: {
181
440
  variant: {
182
- default: "bg-primary/5 text-slate-900 dark:bg-slate-800 dark:text-slate-100",
183
- primary: "bg-primary/5 text-primary dark:bg-primary/20 dark:text-primary-foreground/90",
184
- success: "bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-100",
185
- warning: "bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-100",
186
- destructive: "bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-100",
187
- outline: "border !border-primary/5 bg-transparent text-slate-700 dark:text-slate-300 dark:!border-primary/5"
441
+ // Clear, legible chip in both modes (was bg-primary/5 at ~5% opacity,
442
+ // which was nearly invisible on dark backgrounds).
443
+ default: "bg-muted text-foreground",
444
+ primary: "bg-primary/10 text-primary dark:bg-primary/20",
445
+ success: "bg-success-100 text-success-700 dark:bg-success-900 dark:text-success-100",
446
+ warning: "bg-warning-100 text-warning-700 dark:bg-warning-900 dark:text-warning-100",
447
+ destructive: "bg-destructive-100 text-destructive-700 dark:bg-destructive-900 dark:text-destructive-100",
448
+ outline: "border border-border! bg-transparent text-foreground dark:text-muted-foreground dark:border-border!"
188
449
  }
189
450
  },
190
451
  defaultVariants: {
@@ -193,7 +454,7 @@ var badgeVariants = classVarianceAuthority.cva(
193
454
  }
194
455
  );
195
456
  function Badge({ className, variant = "default", ...props }) {
196
- return /* @__PURE__ */ jsxRuntime.jsx(
457
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
197
458
  "div",
198
459
  {
199
460
  "data-slot": `badge.${variant}`,
@@ -202,8 +463,13 @@ function Badge({ className, variant = "default", ...props }) {
202
463
  }
203
464
  );
204
465
  }
205
- var cardVariants = classVarianceAuthority.cva(
206
- "bg-card text-foreground rounded-none border border-primary/5 transition-all duration-200",
466
+
467
+ // src/components/card.tsx
468
+ var import_class_variance_authority4 = require("class-variance-authority");
469
+ var import_react6 = require("react");
470
+ var import_jsx_runtime9 = require("react/jsx-runtime");
471
+ var cardVariants = (0, import_class_variance_authority4.cva)(
472
+ "bg-card text-foreground rounded-lg border border-border transition-all duration-200",
207
473
  {
208
474
  variants: {
209
475
  variant: {
@@ -217,9 +483,9 @@ var cardVariants = classVarianceAuthority.cva(
217
483
  }
218
484
  }
219
485
  );
220
- var Card = React5.forwardRef(
486
+ var Card = (0, import_react6.forwardRef)(
221
487
  ({ className, variant, ...props }, ref) => {
222
- return /* @__PURE__ */ jsxRuntime.jsx(
488
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
223
489
  "div",
224
490
  {
225
491
  ref,
@@ -231,16 +497,23 @@ var Card = React5.forwardRef(
231
497
  }
232
498
  );
233
499
  Card.displayName = "Card";
234
- var CardHeader = React5.forwardRef(
500
+ var CardHeader = (0, import_react6.forwardRef)(
235
501
  ({ className, noBorder = false, ...props }, ref) => {
236
- return /* @__PURE__ */ jsxRuntime.jsx(
502
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
237
503
  "div",
238
504
  {
239
505
  ref,
240
506
  "data-slot": "card-header",
241
507
  className: cn(
242
- "flex flex-col p-4",
243
- !noBorder && "border-b border-primary/5",
508
+ // Mirrors CardFooter: a header that carries its own tint runs the full
509
+ // width of the card, so at a nonzero --radius it would paint square
510
+ // across the card's curved top corners. `inherit` takes the parent's
511
+ // computed radius rather than restating a step. It only helps when the
512
+ // header is a direct child of the card; a header nested inside another
513
+ // wrapper inherits that wrapper's radius instead, and such a card needs
514
+ // `overflow-hidden` to clip the fill.
515
+ "flex flex-col rounded-t-[inherit] p-4",
516
+ !noBorder && "border-b border-border",
244
517
  className
245
518
  ),
246
519
  ...props
@@ -249,9 +522,9 @@ var CardHeader = React5.forwardRef(
249
522
  }
250
523
  );
251
524
  CardHeader.displayName = "CardHeader";
252
- var CardTitle = React5.forwardRef(
525
+ var CardTitle = (0, import_react6.forwardRef)(
253
526
  ({ className, ...props }, ref) => {
254
- return /* @__PURE__ */ jsxRuntime.jsx(
527
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
255
528
  "h3",
256
529
  {
257
530
  ref,
@@ -263,9 +536,9 @@ var CardTitle = React5.forwardRef(
263
536
  }
264
537
  );
265
538
  CardTitle.displayName = "CardTitle";
266
- var CardDescription = React5.forwardRef(
539
+ var CardDescription = (0, import_react6.forwardRef)(
267
540
  ({ className, ...props }, ref) => {
268
- return /* @__PURE__ */ jsxRuntime.jsx(
541
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
269
542
  "p",
270
543
  {
271
544
  ref,
@@ -277,9 +550,9 @@ var CardDescription = React5.forwardRef(
277
550
  }
278
551
  );
279
552
  CardDescription.displayName = "CardDescription";
280
- var CardAction = React5.forwardRef(
553
+ var CardAction = (0, import_react6.forwardRef)(
281
554
  ({ className, ...props }, ref) => {
282
- return /* @__PURE__ */ jsxRuntime.jsx(
555
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
283
556
  "div",
284
557
  {
285
558
  ref,
@@ -291,9 +564,9 @@ var CardAction = React5.forwardRef(
291
564
  }
292
565
  );
293
566
  CardAction.displayName = "CardAction";
294
- var CardContent = React5.forwardRef(
567
+ var CardContent = (0, import_react6.forwardRef)(
295
568
  ({ className, ...props }, ref) => {
296
- return /* @__PURE__ */ jsxRuntime.jsx(
569
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
297
570
  "div",
298
571
  {
299
572
  ref,
@@ -305,15 +578,21 @@ var CardContent = React5.forwardRef(
305
578
  }
306
579
  );
307
580
  CardContent.displayName = "CardContent";
308
- var CardFooter = React5.forwardRef(
581
+ var CardFooter = (0, import_react6.forwardRef)(
309
582
  ({ className, ...props }, ref) => {
310
- return /* @__PURE__ */ jsxRuntime.jsx(
583
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
311
584
  "div",
312
585
  {
313
586
  ref,
314
587
  "data-slot": "card-footer",
315
588
  className: cn(
316
- "flex items-center px-6 py-4 border-t border-primary/5 bg-primary/5",
589
+ // The footer's tint runs the full width of the card, so at a nonzero
590
+ // --radius it would paint square across the card's curved bottom
591
+ // corners. `inherit` takes the card's own computed radius rather than
592
+ // restating a step, so a card whose radius is overridden stays
593
+ // matched, and it can never disagree with the card at any --radius,
594
+ // including the shipped 0 where `rounded-lg` is 0.
595
+ "flex items-center px-6 py-4 border-t border-border bg-primary/5 rounded-b-[inherit]",
317
596
  className
318
597
  ),
319
598
  ...props
@@ -322,15 +601,80 @@ var CardFooter = React5.forwardRef(
322
601
  }
323
602
  );
324
603
  CardFooter.displayName = "CardFooter";
325
- var alertVariants = classVarianceAuthority.cva(
326
- "relative flex items-start gap-3 rounded-none border border-primary/5 p-4 text-sm transition-colors duration-150",
604
+
605
+ // src/components/layout.tsx
606
+ var import_react7 = require("react");
607
+ var import_jsx_runtime10 = require("react/jsx-runtime");
608
+ var GAP = {
609
+ 0: "gap-0",
610
+ 1: "gap-1",
611
+ 2: "gap-2",
612
+ 3: "gap-3",
613
+ 4: "gap-4",
614
+ 6: "gap-6",
615
+ 8: "gap-8"
616
+ };
617
+ var COLS = {
618
+ 1: "grid-cols-1",
619
+ 2: "grid-cols-2",
620
+ 3: "grid-cols-3",
621
+ 4: "grid-cols-4",
622
+ 6: "grid-cols-6"
623
+ };
624
+ var Stack = (0, import_react7.forwardRef)(
625
+ ({ direction = "col", gap = 4, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
626
+ "div",
627
+ {
628
+ ref,
629
+ className: cn(
630
+ "flex",
631
+ direction === "col" ? "flex-col" : "flex-row",
632
+ GAP[gap],
633
+ className
634
+ ),
635
+ ...props
636
+ }
637
+ )
638
+ );
639
+ Stack.displayName = "Stack";
640
+ var Grid = (0, import_react7.forwardRef)(
641
+ ({ cols = 2, gap = 4, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
642
+ "div",
643
+ {
644
+ ref,
645
+ className: cn("grid", COLS[cols], GAP[gap], className),
646
+ ...props
647
+ }
648
+ )
649
+ );
650
+ Grid.displayName = "Grid";
651
+ var Stat = (0, import_react7.forwardRef)(
652
+ ({ label, value, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { ref, className: cn("flex flex-col gap-1", className), ...props, children: [
653
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-sm text-muted-foreground", children: label }),
654
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-2xl font-semibold text-foreground", children: value })
655
+ ] })
656
+ );
657
+ Stat.displayName = "Stat";
658
+
659
+ // src/components/alert.tsx
660
+ var import_class_variance_authority5 = require("class-variance-authority");
661
+ var import_react8 = require("react");
662
+ var import_jsx_runtime11 = require("react/jsx-runtime");
663
+ var alertVariants = (0, import_class_variance_authority5.cva)(
664
+ "relative flex items-start gap-3 rounded-md border border-border p-4 text-sm transition-colors duration-150",
327
665
  {
328
666
  variants: {
329
667
  variant: {
330
- info: "border-primary/5 bg-primary/5 text-primary dark:border-primary/30 dark:bg-primary/5 dark:text-primary-foreground/90",
331
- success: "border-green-200 bg-green-50 text-green-900 dark:border-green-900 dark:bg-green-950 dark:text-green-100",
332
- warning: "border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-100",
333
- destructive: "border-red-200 bg-red-50 text-red-900 dark:border-red-900 dark:bg-red-950 dark:text-red-100"
668
+ // text-primary is mode-correct (dark ink on light in light mode, light
669
+ // ink on dark in dark mode); the previous dark text override rendered
670
+ // dark slate on the dark tint at about 1:1.
671
+ info: "bg-primary/5 text-primary",
672
+ // dark:border-l-* re-asserts the strong base accent on the left after
673
+ // the dark:border-*-900 all-sides rule, so the meaningful accent stays
674
+ // visible in dark mode instead of collapsing to the faint -900 shade.
675
+ success: "border-success-200 bg-success-50 text-success-900 border-l-4 border-l-success dark:border-success-900 dark:border-l-success dark:bg-success-950 dark:text-success-100",
676
+ warning: "border-warning-200 bg-warning-50 text-warning-900 border-l-4 border-l-warning dark:border-warning-900 dark:border-l-warning dark:bg-warning-950 dark:text-warning-100",
677
+ destructive: "border-destructive-200 bg-destructive-50 text-destructive-900 border-l-4 border-l-destructive dark:border-destructive-900 dark:border-l-destructive dark:bg-destructive-950 dark:text-destructive-100"
334
678
  }
335
679
  },
336
680
  defaultVariants: {
@@ -338,9 +682,9 @@ var alertVariants = classVarianceAuthority.cva(
338
682
  }
339
683
  }
340
684
  );
341
- var Alert = React5.forwardRef(
685
+ var Alert = (0, import_react8.forwardRef)(
342
686
  ({ className, variant = "info", role = "alert", ...props }, ref) => {
343
- return /* @__PURE__ */ jsxRuntime.jsx(
687
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
344
688
  "div",
345
689
  {
346
690
  ref,
@@ -353,9 +697,9 @@ var Alert = React5.forwardRef(
353
697
  }
354
698
  );
355
699
  Alert.displayName = "Alert";
356
- var AlertTitle = React5.forwardRef(
700
+ var AlertTitle = (0, import_react8.forwardRef)(
357
701
  ({ className, ...props }, ref) => {
358
- return /* @__PURE__ */ jsxRuntime.jsx(
702
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
359
703
  "h5",
360
704
  {
361
705
  ref,
@@ -370,9 +714,9 @@ var AlertTitle = React5.forwardRef(
370
714
  }
371
715
  );
372
716
  AlertTitle.displayName = "AlertTitle";
373
- var AlertDescription = React5.forwardRef(
717
+ var AlertDescription = (0, import_react8.forwardRef)(
374
718
  ({ className, ...props }, ref) => {
375
- return /* @__PURE__ */ jsxRuntime.jsx(
719
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
376
720
  "div",
377
721
  {
378
722
  ref,
@@ -384,14 +728,18 @@ var AlertDescription = React5.forwardRef(
384
728
  }
385
729
  );
386
730
  AlertDescription.displayName = "AlertDescription";
731
+
732
+ // src/components/separator.tsx
733
+ var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"), 1);
734
+ var import_jsx_runtime12 = require("react/jsx-runtime");
387
735
  function Separator({
388
736
  className,
389
737
  orientation = "horizontal",
390
738
  decorative = true,
391
739
  ...props
392
740
  }) {
393
- return /* @__PURE__ */ jsxRuntime.jsx(
394
- SeparatorPrimitive__namespace.Root,
741
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
742
+ SeparatorPrimitive.Root,
395
743
  {
396
744
  "data-slot": "separator",
397
745
  decorative,
@@ -404,16 +752,20 @@ function Separator({
404
752
  }
405
753
  );
406
754
  }
407
- var Skeleton = React5__namespace.forwardRef(
755
+
756
+ // src/components/skeleton.tsx
757
+ var React3 = __toESM(require("react"), 1);
758
+ var import_jsx_runtime13 = require("react/jsx-runtime");
759
+ var Skeleton = React3.forwardRef(
408
760
  ({ className, ...props }, ref) => {
409
- return /* @__PURE__ */ jsxRuntime.jsx(
761
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
410
762
  "div",
411
763
  {
412
764
  ref,
413
765
  "data-slot": "skeleton",
414
766
  "aria-hidden": "true",
415
767
  className: cn(
416
- "bg-primary/5 animate-pulse rounded-none motion-reduce:animate-none",
768
+ "bg-primary/5 animate-pulse rounded-md motion-reduce:animate-none",
417
769
  className
418
770
  ),
419
771
  ...props
@@ -422,11 +774,16 @@ var Skeleton = React5__namespace.forwardRef(
422
774
  }
423
775
  );
424
776
  Skeleton.displayName = "Skeleton";
425
- var progressVariants = classVarianceAuthority.cva("h-full rounded-none transition-all", {
777
+
778
+ // src/components/progress.tsx
779
+ var import_class_variance_authority6 = require("class-variance-authority");
780
+ var React4 = __toESM(require("react"), 1);
781
+ var import_jsx_runtime14 = require("react/jsx-runtime");
782
+ var progressVariants = (0, import_class_variance_authority6.cva)("h-full rounded-none transition-all", {
426
783
  variants: {
427
784
  variant: {
428
785
  default: "bg-primary-500",
429
- success: "bg-green-500",
786
+ success: "bg-success-500",
430
787
  error: "bg-destructive"
431
788
  }
432
789
  },
@@ -434,7 +791,7 @@ var progressVariants = classVarianceAuthority.cva("h-full rounded-none transitio
434
791
  variant: "default"
435
792
  }
436
793
  });
437
- var Progress = React5__namespace.forwardRef(
794
+ var Progress = React4.forwardRef(
438
795
  ({
439
796
  value,
440
797
  max = 100,
@@ -445,7 +802,7 @@ var Progress = React5__namespace.forwardRef(
445
802
  }, ref) => {
446
803
  const clampedValue = Math.min(Math.max(0, value), max);
447
804
  const percentage = clampedValue / max * 100;
448
- return /* @__PURE__ */ jsxRuntime.jsx(
805
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
449
806
  "div",
450
807
  {
451
808
  ref,
@@ -455,11 +812,11 @@ var Progress = React5__namespace.forwardRef(
455
812
  "aria-valuemax": max,
456
813
  "aria-label": ariaLabel || `Progress: ${Math.round(percentage)}%`,
457
814
  className: cn(
458
- "relative h-2 w-full overflow-hidden rounded-none bg-accent",
815
+ "relative h-2 w-full overflow-hidden rounded-full bg-accent",
459
816
  className
460
817
  ),
461
818
  ...props,
462
- children: /* @__PURE__ */ jsxRuntime.jsx(
819
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
463
820
  "div",
464
821
  {
465
822
  className: cn(progressVariants({ variant })),
@@ -474,29 +831,42 @@ var Progress = React5__namespace.forwardRef(
474
831
  }
475
832
  );
476
833
  Progress.displayName = "Progress";
477
- var Checkbox = React5.forwardRef(({ className, indeterminate, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
478
- CheckboxPrimitive__namespace.Root,
834
+
835
+ // src/components/checkbox.tsx
836
+ var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"), 1);
837
+ var import_lucide_react2 = require("lucide-react");
838
+ var import_react9 = require("react");
839
+ var import_jsx_runtime15 = require("react/jsx-runtime");
840
+ var Checkbox = (0, import_react9.forwardRef)(({ className, indeterminate, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
841
+ CheckboxPrimitive.Root,
479
842
  {
480
843
  ref,
481
844
  "data-slot": "checkbox",
482
845
  className: cn(
483
- "peer h-4 w-4 shrink-0 rounded-none border border-primary/5 ring-offset-background focus:!border-primary focus-visible:!border-primary focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:!border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200",
846
+ // Resting border uses border-input (a visible 3:1 boundary); the checked
847
+ // state switches to border-primary below, keeping the two states distinct.
848
+ "peer relative h-4 w-4 shrink-0 rounded-sm border border-input ring-offset-background before:absolute before:left-1/2 before:top-1/2 before:h-6 before:w-6 before:-translate-x-1/2 before:-translate-y-1/2 before:content-[''] focus:border-primary! focus-visible:border-primary! focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:border-destructive! aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary transition-all duration-200",
484
849
  className
485
850
  ),
486
851
  ...props,
487
- children: /* @__PURE__ */ jsxRuntime.jsx(
488
- CheckboxPrimitive__namespace.Indicator,
852
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
853
+ CheckboxPrimitive.Indicator,
489
854
  {
490
855
  className: cn("flex items-center justify-center text-current"),
491
- children: indeterminate ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "h-3 w-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3" })
856
+ children: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react2.Minus, { className: "h-3 w-3" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react2.Check, { className: "h-3 w-3" })
492
857
  }
493
858
  )
494
859
  }
495
860
  ));
496
861
  Checkbox.displayName = "Checkbox";
497
- var RadioGroup = React5.forwardRef(({ className, ...props }, ref) => {
498
- return /* @__PURE__ */ jsxRuntime.jsx(
499
- RadioGroupPrimitive__namespace.Root,
862
+
863
+ // src/components/radio-group.tsx
864
+ var RadioGroupPrimitive = __toESM(require("@radix-ui/react-radio-group"), 1);
865
+ var import_react10 = require("react");
866
+ var import_jsx_runtime16 = require("react/jsx-runtime");
867
+ var RadioGroup = (0, import_react10.forwardRef)(({ className, ...props }, ref) => {
868
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
869
+ RadioGroupPrimitive.Root,
500
870
  {
501
871
  className: cn("grid gap-2", className),
502
872
  ...props,
@@ -506,53 +876,74 @@ var RadioGroup = React5.forwardRef(({ className, ...props }, ref) => {
506
876
  );
507
877
  });
508
878
  RadioGroup.displayName = "RadioGroup";
509
- var RadioGroupItem = React5.forwardRef(({ className, ...props }, ref) => {
510
- return /* @__PURE__ */ jsxRuntime.jsx(
511
- RadioGroupPrimitive__namespace.Item,
879
+ var RadioGroupItem = (0, import_react10.forwardRef)(({ className, ...props }, ref) => {
880
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
881
+ RadioGroupPrimitive.Item,
512
882
  {
513
883
  ref,
514
884
  "data-slot": "radio-group-item",
515
885
  className: cn(
516
- "peer h-4 w-4 shrink-0 rounded-none border border-primary/5 bg-background cursor-pointer transition-all duration-150 focus:!border-primary focus-visible:!border-primary focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:!border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50 hover:border-primary/30 data-[state=checked]:border-primary data-[state=checked]:border-[5px]",
886
+ // Unchecked outline uses primary/40 (clearly visible) instead of primary/5
887
+ // (~5% opacity, effectively invisible); hover strengthens above the resting state.
888
+ // Resting border uses border-input (a visible 3:1 boundary); the checked
889
+ // state switches to border-primary below, keeping the two states distinct.
890
+ // rounded-full is fixed rather than derived from --radius: the circle is
891
+ // what tells the user only one option can be chosen. The thick checked
892
+ // border leaves a background-coloured core, and because the border's
893
+ // inner edge is curved too that core reads as a round dot.
894
+ "peer h-4 w-4 shrink-0 rounded-full border border-input bg-background cursor-pointer transition-all duration-150 focus:border-primary! focus-visible:border-primary! focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:border-destructive! aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50 hover:border-primary/70 data-[state=checked]:border-primary data-[state=checked]:border-[5px]",
517
895
  className
518
896
  ),
519
897
  ...props,
520
- children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Indicator, {})
898
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(RadioGroupPrimitive.Indicator, { className: "block size-full rounded-full" })
521
899
  }
522
900
  );
523
901
  });
524
902
  RadioGroupItem.displayName = "RadioGroupItem";
903
+
904
+ // src/components/switch.tsx
905
+ var import_react_switch = require("@radix-ui/react-switch");
906
+ var import_jsx_runtime17 = require("react/jsx-runtime");
525
907
  function Switch({ className, ...props }) {
526
- return /* @__PURE__ */ jsxRuntime.jsx(
527
- reactSwitch.Root,
908
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
909
+ import_react_switch.Root,
528
910
  {
529
911
  "data-slot": "switch",
530
912
  className: cn(
531
- "peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-none border border-primary/5 transition-all outline-none focus-visible:border-primary aria-invalid:border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50",
532
- "data-[state=checked]:bg-primary data-[state=checked]:!border-primary",
533
- "data-[state=unchecked]:bg-input data-[state=unchecked]:border-primary/5 dark:data-[state=unchecked]:bg-input/80",
913
+ "peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-border transition-all outline-none focus-visible:border-primary aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50",
914
+ "data-[state=checked]:bg-primary data-[state=checked]:border-primary!",
915
+ "data-[state=unchecked]:bg-input data-[state=unchecked]:border-border dark:data-[state=unchecked]:bg-input/80",
534
916
  className
535
917
  ),
536
918
  ...props,
537
- children: /* @__PURE__ */ jsxRuntime.jsx(
538
- reactSwitch.Thumb,
919
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
920
+ import_react_switch.Thumb,
539
921
  {
540
922
  "data-slot": "switch-thumb",
541
923
  className: cn(
542
- "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-none ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
924
+ "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
543
925
  )
544
926
  }
545
927
  )
546
928
  }
547
929
  );
548
930
  }
549
- var Collapsible = CollapsiblePrimitive__namespace.Root;
550
- var CollapsibleTrigger2 = CollapsiblePrimitive__namespace.CollapsibleTrigger;
551
- var CollapsibleContent2 = CollapsiblePrimitive__namespace.CollapsibleContent;
552
- var Accordion = AccordionPrimitive__namespace.Root;
553
- var AccordionItem = React5.forwardRef(
554
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
555
- AccordionPrimitive__namespace.Item,
931
+
932
+ // src/components/collapsible.tsx
933
+ var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"), 1);
934
+ var Collapsible = CollapsiblePrimitive.Root;
935
+ var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
936
+ var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
937
+
938
+ // src/components/accordion.tsx
939
+ var AccordionPrimitive = __toESM(require("@radix-ui/react-accordion"), 1);
940
+ var import_lucide_react3 = require("lucide-react");
941
+ var import_react11 = require("react");
942
+ var import_jsx_runtime18 = require("react/jsx-runtime");
943
+ var Accordion = AccordionPrimitive.Root;
944
+ var AccordionItem = (0, import_react11.forwardRef)(
945
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
946
+ AccordionPrimitive.Item,
556
947
  {
557
948
  ref,
558
949
  "data-slot": "accordion-item",
@@ -562,9 +953,9 @@ var AccordionItem = React5.forwardRef(
562
953
  )
563
954
  );
564
955
  AccordionItem.displayName = "AccordionItem";
565
- var AccordionTrigger = React5.forwardRef(
566
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", "data-slot": "accordion-header", children: /* @__PURE__ */ jsxRuntime.jsxs(
567
- AccordionPrimitive__namespace.Trigger,
956
+ var AccordionTrigger = (0, import_react11.forwardRef)(
957
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AccordionPrimitive.Header, { className: "flex", "data-slot": "accordion-header", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
958
+ AccordionPrimitive.Trigger,
568
959
  {
569
960
  ref,
570
961
  "data-slot": "accordion-trigger",
@@ -575,27 +966,33 @@ var AccordionTrigger = React5.forwardRef(
575
966
  ...props,
576
967
  children: [
577
968
  children,
578
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-150" })
969
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react3.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-150 will-change-transform" })
579
970
  ]
580
971
  }
581
972
  ) })
582
973
  );
583
- AccordionTrigger.displayName = AccordionPrimitive__namespace.Trigger.displayName;
584
- var AccordionContent = React5.forwardRef(
585
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
586
- AccordionPrimitive__namespace.Content,
974
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
975
+ var AccordionContent = (0, import_react11.forwardRef)(
976
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
977
+ AccordionPrimitive.Content,
587
978
  {
588
979
  ref,
589
980
  "data-slot": "accordion-content",
590
- className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
981
+ className: "overflow-hidden text-sm transition-all will-change-[height] transform-[translateZ(0)] data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
591
982
  ...props,
592
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pb-4 pt-0", className), children })
983
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: cn("pb-4 pt-0", className), children })
593
984
  }
594
985
  )
595
986
  );
596
- AccordionContent.displayName = AccordionPrimitive__namespace.Content.displayName;
597
- var avatarVariants = classVarianceAuthority.cva(
598
- "relative inline-flex shrink-0 overflow-hidden rounded-none items-center justify-center bg-primary/5 text-muted-foreground",
987
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
988
+
989
+ // src/components/avatar.tsx
990
+ var import_react_avatar = require("@radix-ui/react-avatar");
991
+ var import_class_variance_authority7 = require("class-variance-authority");
992
+ var import_react12 = require("react");
993
+ var import_jsx_runtime19 = require("react/jsx-runtime");
994
+ var avatarVariants = (0, import_class_variance_authority7.cva)(
995
+ "relative inline-flex shrink-0 overflow-hidden rounded-full items-center justify-center bg-primary/5 text-muted-foreground",
599
996
  {
600
997
  variants: {
601
998
  size: {
@@ -623,11 +1020,11 @@ var fallbackTextSizeMap = {
623
1020
  "2xl": "text-2xl"
624
1021
  // 24px for 80px avatar
625
1022
  };
626
- var AvatarSizeContext = React5.createContext("md");
627
- var Avatar = React5.forwardRef(
1023
+ var AvatarSizeContext = (0, import_react12.createContext)("md");
1024
+ var Avatar = (0, import_react12.forwardRef)(
628
1025
  ({ className, size = "md", ...props }, ref) => {
629
- return /* @__PURE__ */ jsxRuntime.jsx(AvatarSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsxRuntime.jsx(
630
- reactAvatar.Root,
1026
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AvatarSizeContext.Provider, { value: size, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1027
+ import_react_avatar.Root,
631
1028
  {
632
1029
  ref,
633
1030
  "data-slot": "avatar",
@@ -638,10 +1035,10 @@ var Avatar = React5.forwardRef(
638
1035
  }
639
1036
  );
640
1037
  Avatar.displayName = "Avatar";
641
- var AvatarImage = React5.forwardRef(
1038
+ var AvatarImage = (0, import_react12.forwardRef)(
642
1039
  ({ className, ...props }, ref) => {
643
- return /* @__PURE__ */ jsxRuntime.jsx(
644
- reactAvatar.Image,
1040
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1041
+ import_react_avatar.Image,
645
1042
  {
646
1043
  ref,
647
1044
  "data-slot": "avatar-image",
@@ -652,17 +1049,17 @@ var AvatarImage = React5.forwardRef(
652
1049
  }
653
1050
  );
654
1051
  AvatarImage.displayName = "AvatarImage";
655
- var AvatarFallback = React5.forwardRef(
1052
+ var AvatarFallback = (0, import_react12.forwardRef)(
656
1053
  ({ className, children, ...props }, ref) => {
657
- const size = React5.useContext(AvatarSizeContext) || "md";
1054
+ const size = (0, import_react12.useContext)(AvatarSizeContext) || "md";
658
1055
  const textSize = fallbackTextSizeMap[size];
659
- return /* @__PURE__ */ jsxRuntime.jsx(
660
- reactAvatar.Fallback,
1056
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1057
+ import_react_avatar.Fallback,
661
1058
  {
662
1059
  ref,
663
1060
  "data-slot": "avatar-fallback",
664
1061
  className: cn(
665
- "bg-primary/5 text-muted-foreground flex size-full items-center justify-center rounded-none font-medium",
1062
+ "bg-primary/5 text-muted-foreground flex size-full items-center justify-center rounded-full font-medium",
666
1063
  textSize,
667
1064
  className
668
1065
  ),
@@ -673,14 +1070,20 @@ var AvatarFallback = React5.forwardRef(
673
1070
  }
674
1071
  );
675
1072
  AvatarFallback.displayName = "AvatarFallback";
676
- var Tabs = reactTabs.Root;
677
- var TabsList = React5.forwardRef(
678
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
679
- reactTabs.List,
1073
+
1074
+ // src/components/tabs.tsx
1075
+ var import_react_tabs = require("@radix-ui/react-tabs");
1076
+ var import_react13 = require("react");
1077
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1078
+ var Tabs = import_react_tabs.Root;
1079
+ var TabsList = (0, import_react13.forwardRef)(
1080
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1081
+ import_react_tabs.List,
680
1082
  {
681
1083
  ref,
682
1084
  "data-slot": "tabs-list",
683
1085
  className: cn(
1086
+ // Square corners: underline tabs, so the list never draws a rounded surface.
684
1087
  "inline-flex h-10 items-center justify-center gap-1 rounded-none p-0 text-muted-foreground",
685
1088
  className
686
1089
  ),
@@ -688,101 +1091,93 @@ var TabsList = React5.forwardRef(
688
1091
  }
689
1092
  )
690
1093
  );
691
- TabsList.displayName = reactTabs.List.displayName;
692
- var TabsTrigger = React5.forwardRef(
693
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
694
- reactTabs.Trigger,
1094
+ TabsList.displayName = import_react_tabs.List.displayName;
1095
+ var TabsTrigger = (0, import_react13.forwardRef)(
1096
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1097
+ import_react_tabs.Trigger,
695
1098
  {
696
1099
  ref,
697
1100
  "data-slot": "tabs-trigger",
698
1101
  className: cn(
699
- "inline-flex items-center justify-center whitespace-nowrap rounded-none bg-transparent px-4 py-2 text-sm font-medium cursor-pointer transition-all duration-200 border-b-2 relative -mb-0.5 data-[state=active]:!border-b-primary data-[state=active]:text-primary data-[state=inactive]:border-transparent data-[state=inactive]:text-muted-foreground hover:text-primary hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
1102
+ // Square corners: the active state is a 2px bottom border that has to
1103
+ // run the full width of the trigger.
1104
+ "inline-flex items-center justify-center whitespace-nowrap rounded-none bg-transparent px-4 py-2 text-sm font-medium cursor-pointer transition-all duration-200 border-b-2 relative -mb-0.5 data-[state=active]:border-b-primary! data-[state=active]:text-primary data-[state=inactive]:border-transparent data-[state=inactive]:text-muted-foreground hover:text-primary hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
700
1105
  className
701
1106
  ),
702
1107
  ...props
703
1108
  }
704
1109
  )
705
1110
  );
706
- TabsTrigger.displayName = reactTabs.Trigger.displayName;
707
- var TabsContent = React5.forwardRef(
708
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
709
- reactTabs.Content,
1111
+ TabsTrigger.displayName = import_react_tabs.Trigger.displayName;
1112
+ var TabsContent = (0, import_react13.forwardRef)(
1113
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1114
+ import_react_tabs.Content,
710
1115
  {
711
1116
  ref,
712
1117
  "data-slot": "tabs-content",
713
1118
  className: cn(
714
- "mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2",
1119
+ "mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
715
1120
  className
716
1121
  ),
717
1122
  ...props
718
1123
  }
719
1124
  )
720
1125
  );
721
- TabsContent.displayName = reactTabs.Content.displayName;
722
- var TooltipProvider = reactTooltip.Provider;
723
- var Tooltip = reactTooltip.Root;
724
- var TooltipTrigger = reactTooltip.Trigger;
725
- var TooltipContent = React5.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
726
- reactTooltip.Content,
727
- {
728
- ref,
729
- sideOffset,
730
- "data-slot": "tooltip-content",
731
- className: cn(
732
- "z-50 overflow-hidden rounded-none px-3 py-1.5 text-xs shadow-lg border border-primary/5 bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
733
- className
734
- ),
735
- ...props
736
- }
737
- ));
738
- TooltipContent.displayName = reactTooltip.Content.displayName;
739
- var PortalContext = React5.createContext({ container: null });
740
- function PortalProvider({ container, children }) {
741
- return /* @__PURE__ */ jsxRuntime.jsx(PortalContext.Provider, { value: { container }, children });
742
- }
743
- function usePortalContainer() {
744
- const { container } = React5.useContext(PortalContext);
745
- return container ?? void 0;
746
- }
747
- var Popover = PopoverPrimitive__namespace.Root;
748
- var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
749
- var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
750
- var PopoverContent = React5__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => {
1126
+ TabsContent.displayName = import_react_tabs.Content.displayName;
1127
+
1128
+ // src/components/popover.tsx
1129
+ var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"), 1);
1130
+ var React5 = __toESM(require("react"), 1);
1131
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1132
+ var Popover = PopoverPrimitive.Root;
1133
+ var PopoverTrigger = PopoverPrimitive.Trigger;
1134
+ var PopoverAnchor = PopoverPrimitive.Anchor;
1135
+ var PopoverContent = React5.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => {
751
1136
  const portalContainer = usePortalContainer();
752
- return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
753
- PopoverPrimitive__namespace.Content,
1137
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(PopoverPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1138
+ PopoverPrimitive.Content,
754
1139
  {
755
1140
  ref,
756
1141
  align,
757
1142
  sideOffset,
758
1143
  "data-slot": "popover-content",
759
1144
  className: cn(
760
- "z-[100] w-72 rounded-none border border-primary/5 bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
1145
+ "z-[100] w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
761
1146
  className
762
1147
  ),
763
1148
  ...props
764
1149
  }
765
1150
  ) });
766
1151
  });
767
- PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
768
- var Dialog = DialogPrimitive__namespace.Root;
769
- var DialogTrigger = DialogPrimitive__namespace.Trigger;
770
- var DialogPortal = DialogPrimitive__namespace.Portal;
771
- var DialogClose = DialogPrimitive__namespace.Close;
772
- var DialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
773
- DialogPrimitive__namespace.Overlay,
1152
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1153
+
1154
+ // src/components/dialog.tsx
1155
+ var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
1156
+ var import_class_variance_authority8 = require("class-variance-authority");
1157
+ var import_lucide_react4 = require("lucide-react");
1158
+ var import_react14 = require("react");
1159
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1160
+ var Dialog = DialogPrimitive.Root;
1161
+ var DialogTrigger = DialogPrimitive.Trigger;
1162
+ var DialogPortal = DialogPrimitive.Portal;
1163
+ var DialogClose = DialogPrimitive.Close;
1164
+ var DialogOverlay = (0, import_react14.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1165
+ DialogPrimitive.Overlay,
774
1166
  {
775
1167
  ref,
776
1168
  "data-slot": "dialog-overlay",
777
1169
  className: cn(
1170
+ // A modal scrim: a black wash is the point, so it stays a literal
1171
+ // rather than a surface token. Painting it from `background` would
1172
+ // make it a white veil in light mode and near-invisible in dark.
778
1173
  "fixed inset-0 z-50 bg-black/80 backdrop-blur-sm transition-opacity duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
779
1174
  className
780
1175
  ),
781
1176
  ...props
782
1177
  }
783
1178
  ));
784
- DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
785
- var dialogContentVariants = classVarianceAuthority.cva("", {
1179
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
1180
+ var dialogContentVariants = (0, import_class_variance_authority8.cva)("", {
786
1181
  variants: {
787
1182
  size: {
788
1183
  sm: "max-w-sm",
@@ -796,31 +1191,31 @@ var dialogContentVariants = classVarianceAuthority.cva("", {
796
1191
  size: "md"
797
1192
  }
798
1193
  });
799
- var DialogContent = React5.forwardRef(({ className, children, size, ...props }, ref) => {
1194
+ var DialogContent = (0, import_react14.forwardRef)(({ className, children, size, ...props }, ref) => {
800
1195
  const portalContainer = usePortalContainer();
801
- return /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { container: portalContainer, children: [
802
- /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
803
- /* @__PURE__ */ jsxRuntime.jsxs(
804
- DialogPrimitive__namespace.Content,
1196
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DialogPortal, { container: portalContainer, children: [
1197
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogOverlay, {}),
1198
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1199
+ DialogPrimitive.Content,
805
1200
  {
806
1201
  ref,
807
1202
  "data-slot": "dialog-content",
808
1203
  className: cn(
809
- "fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-primary/5 bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
1204
+ "fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-lg duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
810
1205
  dialogContentVariants({ size }),
811
1206
  className
812
1207
  ),
813
1208
  ...props,
814
1209
  children: [
815
1210
  children,
816
- /* @__PURE__ */ jsxRuntime.jsxs(
817
- DialogPrimitive__namespace.Close,
1211
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1212
+ DialogPrimitive.Close,
818
1213
  {
819
1214
  "data-slot": "dialog-close",
820
- className: "absolute right-4 top-4 rounded-none p-1 text-muted-foreground cursor-pointer transition-colors duration-150 hover-unified focus:outline-none focus:ring-2 focus:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed",
1215
+ className: "absolute right-4 top-4 rounded-md p-1 text-muted-foreground cursor-pointer transition-colors duration-150 hover-unified focus:outline-none focus:ring-2 focus:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed",
821
1216
  children: [
822
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
823
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
1217
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react4.X, { className: "h-4 w-4" }),
1218
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "sr-only", children: "Close" })
824
1219
  ]
825
1220
  }
826
1221
  )
@@ -829,9 +1224,9 @@ var DialogContent = React5.forwardRef(({ className, children, size, ...props },
829
1224
  )
830
1225
  ] });
831
1226
  });
832
- DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
833
- var DialogHeader = React5.forwardRef(
834
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1227
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
1228
+ var DialogHeader = (0, import_react14.forwardRef)(
1229
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
835
1230
  "div",
836
1231
  {
837
1232
  ref,
@@ -844,8 +1239,8 @@ var DialogHeader = React5.forwardRef(
844
1239
  )
845
1240
  );
846
1241
  DialogHeader.displayName = "DialogHeader";
847
- var DialogFooter = React5.forwardRef(
848
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1242
+ var DialogFooter = (0, import_react14.forwardRef)(
1243
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
849
1244
  "div",
850
1245
  {
851
1246
  ref,
@@ -858,8 +1253,8 @@ var DialogFooter = React5.forwardRef(
858
1253
  )
859
1254
  );
860
1255
  DialogFooter.displayName = "DialogFooter";
861
- var DialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
862
- DialogPrimitive__namespace.Title,
1256
+ var DialogTitle = (0, import_react14.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1257
+ DialogPrimitive.Title,
863
1258
  {
864
1259
  ref,
865
1260
  className: cn(
@@ -869,41 +1264,49 @@ var DialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
869
1264
  ...props
870
1265
  }
871
1266
  ));
872
- DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
873
- var DialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
874
- DialogPrimitive__namespace.Description,
1267
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
1268
+ var DialogDescription = (0, import_react14.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1269
+ DialogPrimitive.Description,
875
1270
  {
876
1271
  ref,
877
1272
  className: cn("text-sm text-muted-foreground", className),
878
1273
  ...props
879
1274
  }
880
1275
  ));
881
- DialogDescription.displayName = DialogPrimitive__namespace.Description.displayName;
882
- var AlertDialog = AlertDialogPrimitive__namespace.Root;
883
- var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
884
- var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
885
- var AlertDialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
886
- AlertDialogPrimitive__namespace.Overlay,
1276
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
1277
+
1278
+ // src/components/alert-dialog.tsx
1279
+ var AlertDialogPrimitive = __toESM(require("@radix-ui/react-alert-dialog"), 1);
1280
+ var import_react15 = require("react");
1281
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1282
+ var AlertDialog = AlertDialogPrimitive.Root;
1283
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
1284
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
1285
+ var AlertDialogOverlay = (0, import_react15.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1286
+ AlertDialogPrimitive.Overlay,
887
1287
  {
888
1288
  ref,
889
1289
  className: cn(
1290
+ // A modal scrim: a black wash is the point, so it stays a literal
1291
+ // rather than a surface token. Painting it from `background` would
1292
+ // make it a white veil in light mode and near-invisible in dark.
890
1293
  "fixed inset-0 z-50 bg-black/80 backdrop-blur-sm transition-opacity duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
891
1294
  className
892
1295
  ),
893
1296
  ...props
894
1297
  }
895
1298
  ));
896
- AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
897
- var AlertDialogContent = React5.forwardRef(({ className, ...props }, ref) => {
1299
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
1300
+ var AlertDialogContent = (0, import_react15.forwardRef)(({ className, ...props }, ref) => {
898
1301
  const portalContainer = usePortalContainer();
899
- return /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogPortal, { container: portalContainer, children: [
900
- /* @__PURE__ */ jsxRuntime.jsx(AlertDialogOverlay, {}),
901
- /* @__PURE__ */ jsxRuntime.jsx(
902
- AlertDialogPrimitive__namespace.Content,
1302
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(AlertDialogPortal, { container: portalContainer, children: [
1303
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(AlertDialogOverlay, {}),
1304
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1305
+ AlertDialogPrimitive.Content,
903
1306
  {
904
1307
  ref,
905
1308
  className: cn(
906
- "fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-primary/5 bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
1309
+ "fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-lg duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
907
1310
  className
908
1311
  ),
909
1312
  ...props
@@ -911,9 +1314,9 @@ var AlertDialogContent = React5.forwardRef(({ className, ...props }, ref) => {
911
1314
  )
912
1315
  ] });
913
1316
  });
914
- AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.displayName;
915
- var AlertDialogHeader = React5.forwardRef(
916
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1317
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
1318
+ var AlertDialogHeader = (0, import_react15.forwardRef)(
1319
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
917
1320
  "div",
918
1321
  {
919
1322
  ref,
@@ -926,8 +1329,8 @@ var AlertDialogHeader = React5.forwardRef(
926
1329
  )
927
1330
  );
928
1331
  AlertDialogHeader.displayName = "AlertDialogHeader";
929
- var AlertDialogFooter = React5.forwardRef(
930
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1332
+ var AlertDialogFooter = (0, import_react15.forwardRef)(
1333
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
931
1334
  "div",
932
1335
  {
933
1336
  ref,
@@ -940,8 +1343,8 @@ var AlertDialogFooter = React5.forwardRef(
940
1343
  )
941
1344
  );
942
1345
  AlertDialogFooter.displayName = "AlertDialogFooter";
943
- var AlertDialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
944
- AlertDialogPrimitive__namespace.Title,
1346
+ var AlertDialogTitle = (0, import_react15.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1347
+ AlertDialogPrimitive.Title,
945
1348
  {
946
1349
  ref,
947
1350
  className: cn(
@@ -951,18 +1354,18 @@ var AlertDialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @_
951
1354
  ...props
952
1355
  }
953
1356
  ));
954
- AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
955
- var AlertDialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
956
- AlertDialogPrimitive__namespace.Description,
1357
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
1358
+ var AlertDialogDescription = (0, import_react15.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1359
+ AlertDialogPrimitive.Description,
957
1360
  {
958
1361
  ref,
959
1362
  className: cn("text-sm text-muted-foreground", className),
960
1363
  ...props
961
1364
  }
962
1365
  ));
963
- AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
964
- var AlertDialogAction = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
965
- AlertDialogPrimitive__namespace.Action,
1366
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
1367
+ var AlertDialogAction = (0, import_react15.forwardRef)(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1368
+ AlertDialogPrimitive.Action,
966
1369
  {
967
1370
  ref,
968
1371
  className: cn(buttonVariants({ variant: "destructive" }), className),
@@ -970,9 +1373,9 @@ var AlertDialogAction = React5.forwardRef(({ className, children, ...props }, re
970
1373
  children
971
1374
  }
972
1375
  ));
973
- AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
974
- var AlertDialogCancel = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
975
- AlertDialogPrimitive__namespace.Cancel,
1376
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
1377
+ var AlertDialogCancel = (0, import_react15.forwardRef)(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1378
+ AlertDialogPrimitive.Cancel,
976
1379
  {
977
1380
  ref,
978
1381
  className: cn(
@@ -984,106 +1387,117 @@ var AlertDialogCancel = React5.forwardRef(({ className, children, ...props }, re
984
1387
  children
985
1388
  }
986
1389
  ));
987
- AlertDialogCancel.displayName = AlertDialogPrimitive__namespace.Cancel.displayName;
988
- var DropdownMenu = DropdownMenuPrimitive__namespace.Root;
989
- var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
990
- var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
991
- var DropdownMenuPortal = DropdownMenuPrimitive__namespace.Portal;
992
- var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
993
- var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
994
- var DropdownMenuSubTrigger = React5__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
995
- DropdownMenuPrimitive__namespace.SubTrigger,
1390
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
1391
+
1392
+ // src/components/dropdown-menu.tsx
1393
+ var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
1394
+ var import_lucide_react5 = require("lucide-react");
1395
+ var React6 = __toESM(require("react"), 1);
1396
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1397
+ var DropdownMenu = DropdownMenuPrimitive.Root;
1398
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1399
+ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1400
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1401
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1402
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1403
+ var menuItemBase = "cursor-pointer transition-colors data-[highlighted]:bg-muted data-[highlighted]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
1404
+ var DropdownMenuSubTrigger = React6.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1405
+ DropdownMenuPrimitive.SubTrigger,
996
1406
  {
997
1407
  ref,
998
1408
  className: cn(
999
- "flex cursor-default select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none hover-unified focus:bg-primary/5 focus:text-primary data-[state=open]:bg-primary/5 data-[state=open]:text-primary [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1409
+ "flex select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-muted data-[state=open]:text-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1410
+ menuItemBase,
1000
1411
  inset && "pl-8",
1001
1412
  className
1002
1413
  ),
1003
1414
  ...props,
1004
1415
  children: [
1005
1416
  children,
1006
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "ml-auto" })
1417
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react5.ChevronRight, { className: "ml-auto" })
1007
1418
  ]
1008
1419
  }
1009
1420
  ));
1010
- DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
1011
- var DropdownMenuSubContent = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1012
- DropdownMenuPrimitive__namespace.SubContent,
1421
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1422
+ var DropdownMenuSubContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1423
+ DropdownMenuPrimitive.SubContent,
1013
1424
  {
1014
1425
  ref,
1015
1426
  className: cn(
1016
- "z-50 min-w-[8rem] overflow-hidden rounded-none border border-primary/5 bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1427
+ "z-50 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1017
1428
  className
1018
1429
  ),
1019
1430
  ...props
1020
1431
  }
1021
1432
  ));
1022
- DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
1023
- var DropdownMenuContent = React5__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
1433
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1434
+ var DropdownMenuContent = React6.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
1024
1435
  const portalContainer = usePortalContainer();
1025
- return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
1026
- DropdownMenuPrimitive__namespace.Content,
1436
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DropdownMenuPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1437
+ DropdownMenuPrimitive.Content,
1027
1438
  {
1028
1439
  ref,
1029
1440
  sideOffset,
1030
1441
  className: cn(
1031
- "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-none border border-primary/5 bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1442
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1032
1443
  className
1033
1444
  ),
1034
1445
  ...props
1035
1446
  }
1036
1447
  ) });
1037
1448
  });
1038
- DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
1039
- var DropdownMenuItem = React5__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1040
- DropdownMenuPrimitive__namespace.Item,
1449
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1450
+ var DropdownMenuItem = React6.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1451
+ DropdownMenuPrimitive.Item,
1041
1452
  {
1042
1453
  ref,
1043
1454
  className: cn(
1044
- "relative flex cursor-pointer select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1455
+ "relative flex select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1456
+ menuItemBase,
1045
1457
  inset && "pl-8",
1046
1458
  className
1047
1459
  ),
1048
1460
  ...props
1049
1461
  }
1050
1462
  ));
1051
- DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
1052
- var DropdownMenuCheckboxItem = React5__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1053
- DropdownMenuPrimitive__namespace.CheckboxItem,
1463
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1464
+ var DropdownMenuCheckboxItem = React6.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1465
+ DropdownMenuPrimitive.CheckboxItem,
1054
1466
  {
1055
1467
  ref,
1056
1468
  className: cn(
1057
- "relative flex cursor-default select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover-primary-light focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1469
+ "relative flex select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none",
1470
+ menuItemBase,
1058
1471
  className
1059
1472
  ),
1060
1473
  checked,
1061
1474
  ...props,
1062
1475
  children: [
1063
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" }) }) }),
1476
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react5.Check, { className: "h-4 w-4" }) }) }),
1064
1477
  children
1065
1478
  ]
1066
1479
  }
1067
1480
  ));
1068
- DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
1069
- var DropdownMenuRadioItem = React5__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1070
- DropdownMenuPrimitive__namespace.RadioItem,
1481
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1482
+ var DropdownMenuRadioItem = React6.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1483
+ DropdownMenuPrimitive.RadioItem,
1071
1484
  {
1072
1485
  ref,
1073
1486
  className: cn(
1074
- "relative flex cursor-default select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover-primary-light focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1487
+ "relative flex select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none",
1488
+ menuItemBase,
1075
1489
  className
1076
1490
  ),
1077
1491
  ...props,
1078
1492
  children: [
1079
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-2 w-2 fill-current" }) }) }),
1493
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react5.Circle, { className: "h-2 w-2 fill-current" }) }) }),
1080
1494
  children
1081
1495
  ]
1082
1496
  }
1083
1497
  ));
1084
- DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
1085
- var DropdownMenuLabel = React5__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1086
- DropdownMenuPrimitive__namespace.Label,
1498
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1499
+ var DropdownMenuLabel = React6.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1500
+ DropdownMenuPrimitive.Label,
1087
1501
  {
1088
1502
  ref,
1089
1503
  className: cn(
@@ -1094,18 +1508,18 @@ var DropdownMenuLabel = React5__namespace.forwardRef(({ className, inset, ...pro
1094
1508
  ...props
1095
1509
  }
1096
1510
  ));
1097
- DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
1098
- var DropdownMenuSeparator = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1099
- DropdownMenuPrimitive__namespace.Separator,
1511
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1512
+ var DropdownMenuSeparator = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1513
+ DropdownMenuPrimitive.Separator,
1100
1514
  {
1101
1515
  ref,
1102
1516
  className: cn("-mx-1 my-1 h-px bg-primary/5", className),
1103
1517
  ...props
1104
1518
  }
1105
1519
  ));
1106
- DropdownMenuSeparator.displayName = DropdownMenuPrimitive__namespace.Separator.displayName;
1107
- var DropdownMenuShortcut = React5__namespace.forwardRef(({ className, ...props }, ref) => {
1108
- return /* @__PURE__ */ jsxRuntime.jsx(
1520
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1521
+ var DropdownMenuShortcut = React6.forwardRef(({ className, ...props }, ref) => {
1522
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1109
1523
  "span",
1110
1524
  {
1111
1525
  ref,
@@ -1115,27 +1529,36 @@ var DropdownMenuShortcut = React5__namespace.forwardRef(({ className, ...props }
1115
1529
  );
1116
1530
  });
1117
1531
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1532
+
1533
+ // src/components/select.tsx
1534
+ var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
1535
+ var import_class_variance_authority9 = require("class-variance-authority");
1536
+ var import_lucide_react6 = require("lucide-react");
1537
+ var import_react16 = require("react");
1538
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1118
1539
  function Select({ ...props }) {
1119
- return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Root, { "data-slot": "select", ...props });
1540
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.Root, { "data-slot": "select", ...props });
1120
1541
  }
1121
1542
  function SelectGroup({
1122
1543
  ...props
1123
1544
  }) {
1124
- return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Group, { "data-slot": "select-group", ...props });
1545
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.Group, { "data-slot": "select-group", ...props });
1125
1546
  }
1126
1547
  function SelectValue({
1127
1548
  ...props
1128
1549
  }) {
1129
- return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Value, { "data-slot": "select-value", ...props });
1550
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
1130
1551
  }
1131
- var selectTriggerVariants = classVarianceAuthority.cva(
1132
- "flex w-full items-center justify-between gap-2 rounded-none border border-input bg-background px-3 text-sm text-foreground cursor-pointer transition-all duration-150 focus:!border-primary focus-visible:!border-primary focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 data-[placeholder]:text-muted-foreground aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:!border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
1552
+ var selectTriggerVariants = (0, import_class_variance_authority9.cva)(
1553
+ // hover:border-primary (full strength) keeps the hover boundary more visible
1554
+ // than the resting border-input, not a fainter alpha of it.
1555
+ "flex w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 text-sm text-foreground cursor-pointer transition-all duration-150 focus:border-primary! focus-visible:border-primary! focus:outline-none hover:border-primary disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 data-[placeholder]:text-muted-foreground aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:border-destructive! [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
1133
1556
  {
1134
1557
  variants: {
1135
1558
  size: {
1136
- sm: "h-8 text-sm",
1137
- default: "h-10 text-sm",
1138
- lg: "h-11 text-base"
1559
+ sm: "h-[var(--nx-control-height-sm)] text-sm",
1560
+ default: "h-[var(--nx-control-height)] text-sm",
1561
+ lg: "h-[var(--nx-control-height-lg)] text-base"
1139
1562
  }
1140
1563
  },
1141
1564
  defaultVariants: {
@@ -1143,9 +1566,9 @@ var selectTriggerVariants = classVarianceAuthority.cva(
1143
1566
  }
1144
1567
  }
1145
1568
  );
1146
- var SelectTrigger = React5.forwardRef(({ className, size, children, ...props }, ref) => {
1147
- return /* @__PURE__ */ jsxRuntime.jsxs(
1148
- SelectPrimitive__namespace.Trigger,
1569
+ var SelectTrigger = (0, import_react16.forwardRef)(({ className, size, children, ...props }, ref) => {
1570
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1571
+ SelectPrimitive.Trigger,
1149
1572
  {
1150
1573
  ref,
1151
1574
  "data-slot": "select-trigger",
@@ -1153,7 +1576,7 @@ var SelectTrigger = React5.forwardRef(({ className, size, children, ...props },
1153
1576
  ...props,
1154
1577
  children: [
1155
1578
  children,
1156
- /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4 opacity-50" }) })
1579
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronDown, { className: "size-4 opacity-50" }) })
1157
1580
  ]
1158
1581
  }
1159
1582
  );
@@ -1166,21 +1589,21 @@ function SelectContent({
1166
1589
  ...props
1167
1590
  }) {
1168
1591
  const portalContainer = usePortalContainer();
1169
- return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
1170
- SelectPrimitive__namespace.Content,
1592
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1593
+ SelectPrimitive.Content,
1171
1594
  {
1172
1595
  "data-slot": "select-content",
1173
1596
  className: cn(
1174
- "bg-popover text-popover-foreground border border-primary/5 shadow-none rounded-none z-9999 max-h-(--radix-select-content-available-height) min-w-32 overflow-hidden data-[state=open]:animate-zoom-in-95 data-[state=closed]:animate-zoom-out-95 data-[side=bottom]:animate-slide-in-from-top-2 data-[side=left]:animate-slide-in-from-right-2 data-[side=right]:animate-slide-in-from-left-2 data-[side=top]:animate-slide-in-from-bottom-2",
1597
+ "bg-popover text-popover-foreground border border-border shadow-none rounded-lg z-9999 max-h-(--radix-select-content-available-height) min-w-32 overflow-hidden data-[state=open]:animate-zoom-in-95 data-[state=closed]:animate-zoom-out-95 data-[side=bottom]:animate-slide-in-from-top-2 data-[side=left]:animate-slide-in-from-right-2 data-[side=right]:animate-slide-in-from-left-2 data-[side=top]:animate-slide-in-from-bottom-2",
1175
1598
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
1176
1599
  className
1177
1600
  ),
1178
1601
  position,
1179
1602
  ...props,
1180
1603
  children: [
1181
- /* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
1182
- /* @__PURE__ */ jsxRuntime.jsx(
1183
- SelectPrimitive__namespace.Viewport,
1604
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectScrollUpButton, {}),
1605
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1606
+ SelectPrimitive.Viewport,
1184
1607
  {
1185
1608
  className: cn(
1186
1609
  "p-1",
@@ -1189,7 +1612,7 @@ function SelectContent({
1189
1612
  children
1190
1613
  }
1191
1614
  ),
1192
- /* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
1615
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectScrollDownButton, {})
1193
1616
  ]
1194
1617
  }
1195
1618
  ) });
@@ -1198,8 +1621,8 @@ function SelectLabel({
1198
1621
  className,
1199
1622
  ...props
1200
1623
  }) {
1201
- return /* @__PURE__ */ jsxRuntime.jsx(
1202
- SelectPrimitive__namespace.Label,
1624
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1625
+ SelectPrimitive.Label,
1203
1626
  {
1204
1627
  "data-slot": "select-label",
1205
1628
  className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
@@ -1212,18 +1635,18 @@ function SelectItem({
1212
1635
  children,
1213
1636
  ...props
1214
1637
  }) {
1215
- return /* @__PURE__ */ jsxRuntime.jsxs(
1216
- SelectPrimitive__namespace.Item,
1638
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1639
+ SelectPrimitive.Item,
1217
1640
  {
1218
1641
  "data-slot": "select-item",
1219
1642
  className: cn(
1220
- "relative flex w-full cursor-pointer items-center gap-2 rounded-none py-2 pr-8 pl-2 text-sm text-foreground outline-none select-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
1643
+ "relative flex w-full cursor-pointer items-center gap-2 rounded-sm py-2 pr-8 pl-2 text-sm text-foreground outline-none select-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
1221
1644
  className
1222
1645
  ),
1223
1646
  ...props,
1224
1647
  children: [
1225
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4" }) }) }),
1226
- /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children })
1648
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.Check, { className: "size-4" }) }) }),
1649
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectPrimitive.ItemText, { children })
1227
1650
  ]
1228
1651
  }
1229
1652
  );
@@ -1232,8 +1655,8 @@ function SelectSeparator({
1232
1655
  className,
1233
1656
  ...props
1234
1657
  }) {
1235
- return /* @__PURE__ */ jsxRuntime.jsx(
1236
- SelectPrimitive__namespace.Separator,
1658
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1659
+ SelectPrimitive.Separator,
1237
1660
  {
1238
1661
  "data-slot": "select-separator",
1239
1662
  className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
@@ -1245,8 +1668,8 @@ function SelectScrollUpButton({
1245
1668
  className,
1246
1669
  ...props
1247
1670
  }) {
1248
- return /* @__PURE__ */ jsxRuntime.jsx(
1249
- SelectPrimitive__namespace.ScrollUpButton,
1671
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1672
+ SelectPrimitive.ScrollUpButton,
1250
1673
  {
1251
1674
  "data-slot": "select-scroll-up-button",
1252
1675
  className: cn(
@@ -1254,7 +1677,7 @@ function SelectScrollUpButton({
1254
1677
  className
1255
1678
  ),
1256
1679
  ...props,
1257
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "size-4" })
1680
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronUp, { className: "size-4" })
1258
1681
  }
1259
1682
  );
1260
1683
  }
@@ -1262,8 +1685,8 @@ function SelectScrollDownButton({
1262
1685
  className,
1263
1686
  ...props
1264
1687
  }) {
1265
- return /* @__PURE__ */ jsxRuntime.jsx(
1266
- SelectPrimitive__namespace.ScrollDownButton,
1688
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1689
+ SelectPrimitive.ScrollDownButton,
1267
1690
  {
1268
1691
  "data-slot": "select-scroll-down-button",
1269
1692
  className: cn(
@@ -1271,18 +1694,27 @@ function SelectScrollDownButton({
1271
1694
  className
1272
1695
  ),
1273
1696
  ...props,
1274
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4" })
1697
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronDown, { className: "size-4" })
1275
1698
  }
1276
1699
  );
1277
1700
  }
1278
- var Sheet = DialogPrimitive__namespace.Root;
1279
- var SheetTrigger = DialogPrimitive__namespace.Trigger;
1280
- var SheetClose = DialogPrimitive__namespace.Close;
1281
- var SheetPortal = DialogPrimitive__namespace.Portal;
1282
- var SheetOverlay = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1283
- DialogPrimitive__namespace.Overlay,
1701
+
1702
+ // src/components/sheet.tsx
1703
+ var DialogPrimitive2 = __toESM(require("@radix-ui/react-dialog"), 1);
1704
+ var import_class_variance_authority10 = require("class-variance-authority");
1705
+ var React7 = __toESM(require("react"), 1);
1706
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1707
+ var Sheet = DialogPrimitive2.Root;
1708
+ var SheetTrigger = DialogPrimitive2.Trigger;
1709
+ var SheetClose = DialogPrimitive2.Close;
1710
+ var SheetPortal = DialogPrimitive2.Portal;
1711
+ var SheetOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1712
+ DialogPrimitive2.Overlay,
1284
1713
  {
1285
1714
  className: cn(
1715
+ // A modal scrim: a black wash is the point, so it stays a literal
1716
+ // rather than a surface token. Painting it from `background` would
1717
+ // make it a white veil in light mode and near-invisible in dark.
1286
1718
  "fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",
1287
1719
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
1288
1720
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
@@ -1292,16 +1724,16 @@ var SheetOverlay = React5__namespace.forwardRef(({ className, ...props }, ref) =
1292
1724
  ref
1293
1725
  }
1294
1726
  ));
1295
- SheetOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
1296
- var sheetVariants = classVarianceAuthority.cva(
1727
+ SheetOverlay.displayName = DialogPrimitive2.Overlay.displayName;
1728
+ var sheetVariants = (0, import_class_variance_authority10.cva)(
1297
1729
  "fixed z-50 gap-4 bg-background p-6 shadow-lg will-change-transform transition ease-in-out data-[state=closed]:duration-150 data-[state=open]:duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out",
1298
1730
  {
1299
1731
  variants: {
1300
1732
  side: {
1301
- top: "inset-x-0 top-0 border-b border-primary/5 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1302
- bottom: "inset-x-0 bottom-0 border-t border-primary/5 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1303
- left: "inset-y-0 left-0 h-full w-3/4 border-r border-primary/5 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1304
- right: "inset-y-0 right-0 h-full w-3/4 border-l border-primary/5 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1733
+ top: "inset-x-0 top-0 border-b border-border data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1734
+ bottom: "inset-x-0 bottom-0 border-t border-border data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1735
+ left: "inset-y-0 left-0 h-full w-3/4 border-r border-border data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1736
+ right: "inset-y-0 right-0 h-full w-3/4 border-l border-border data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1305
1737
  }
1306
1738
  },
1307
1739
  defaultVariants: {
@@ -1309,12 +1741,12 @@ var sheetVariants = classVarianceAuthority.cva(
1309
1741
  }
1310
1742
  }
1311
1743
  );
1312
- var SheetContent = React5__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => {
1744
+ var SheetContent = React7.forwardRef(({ side = "right", className, children, ...props }, ref) => {
1313
1745
  const portalContainer = usePortalContainer();
1314
- return /* @__PURE__ */ jsxRuntime.jsxs(SheetPortal, { container: portalContainer, children: [
1315
- /* @__PURE__ */ jsxRuntime.jsx(SheetOverlay, {}),
1316
- /* @__PURE__ */ jsxRuntime.jsx(
1317
- DialogPrimitive__namespace.Content,
1746
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(SheetPortal, { container: portalContainer, children: [
1747
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SheetOverlay, {}),
1748
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1749
+ DialogPrimitive2.Content,
1318
1750
  {
1319
1751
  ref,
1320
1752
  "data-slot": "sheet-content",
@@ -1325,11 +1757,11 @@ var SheetContent = React5__namespace.forwardRef(({ side = "right", className, ch
1325
1757
  )
1326
1758
  ] });
1327
1759
  });
1328
- SheetContent.displayName = DialogPrimitive__namespace.Content.displayName;
1760
+ SheetContent.displayName = DialogPrimitive2.Content.displayName;
1329
1761
  var SheetHeader = ({
1330
1762
  className,
1331
1763
  ...props
1332
- }) => /* @__PURE__ */ jsxRuntime.jsx(
1764
+ }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1333
1765
  "div",
1334
1766
  {
1335
1767
  className: cn(
@@ -1343,7 +1775,7 @@ SheetHeader.displayName = "SheetHeader";
1343
1775
  var SheetFooter = ({
1344
1776
  className,
1345
1777
  ...props
1346
- }) => /* @__PURE__ */ jsxRuntime.jsx(
1778
+ }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1347
1779
  "div",
1348
1780
  {
1349
1781
  className: cn(
@@ -1354,31 +1786,38 @@ var SheetFooter = ({
1354
1786
  }
1355
1787
  );
1356
1788
  SheetFooter.displayName = "SheetFooter";
1357
- var SheetTitle = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1358
- DialogPrimitive__namespace.Title,
1789
+ var SheetTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1790
+ DialogPrimitive2.Title,
1359
1791
  {
1360
1792
  ref,
1361
1793
  className: cn("text-lg font-semibold text-foreground", className),
1362
1794
  ...props
1363
1795
  }
1364
1796
  ));
1365
- SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
1366
- var SheetDescription = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1367
- DialogPrimitive__namespace.Description,
1797
+ SheetTitle.displayName = DialogPrimitive2.Title.displayName;
1798
+ var SheetDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1799
+ DialogPrimitive2.Description,
1368
1800
  {
1369
1801
  ref,
1370
1802
  className: cn("text-sm text-muted-foreground", className),
1371
1803
  ...props
1372
1804
  }
1373
1805
  ));
1374
- SheetDescription.displayName = DialogPrimitive__namespace.Description.displayName;
1375
- var Command = React5.forwardRef(
1376
- ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1377
- cmdk.Command,
1806
+ SheetDescription.displayName = DialogPrimitive2.Description.displayName;
1807
+
1808
+ // src/components/command.tsx
1809
+ var DialogPrimitive3 = __toESM(require("@radix-ui/react-dialog"), 1);
1810
+ var import_cmdk = require("cmdk");
1811
+ var import_lucide_react7 = require("lucide-react");
1812
+ var import_react17 = require("react");
1813
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1814
+ var Command = (0, import_react17.forwardRef)(
1815
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1816
+ import_cmdk.Command,
1378
1817
  {
1379
1818
  ref,
1380
1819
  className: cn(
1381
- "flex h-full w-full flex-col overflow-hidden rounded-none bg-background text-foreground",
1820
+ "flex h-full w-full flex-col overflow-hidden rounded-lg bg-background text-foreground",
1382
1821
  className
1383
1822
  ),
1384
1823
  ...props
@@ -1386,11 +1825,14 @@ var Command = React5.forwardRef(
1386
1825
  )
1387
1826
  );
1388
1827
  Command.displayName = "Command";
1389
- var CommandDialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1390
- DialogPrimitive__namespace.Overlay,
1828
+ var CommandDialogOverlay = (0, import_react17.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1829
+ DialogPrimitive3.Overlay,
1391
1830
  {
1392
1831
  ref,
1393
1832
  className: cn(
1833
+ // A modal scrim: a black wash is the point, so it stays a literal
1834
+ // rather than a surface token. Painting it from `background` would
1835
+ // make it a white veil in light mode and near-invisible in dark.
1394
1836
  "fixed inset-0 z-[99] bg-black/80 backdrop-blur-sm",
1395
1837
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
1396
1838
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
@@ -1403,10 +1845,10 @@ var CommandDialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /
1403
1845
  CommandDialogOverlay.displayName = "CommandDialogOverlay";
1404
1846
  var CommandDialog = ({ children, ...props }) => {
1405
1847
  const portalContainer = usePortalContainer();
1406
- return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { ...props, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Portal, { container: portalContainer, children: [
1407
- /* @__PURE__ */ jsxRuntime.jsx(CommandDialogOverlay, {}),
1408
- /* @__PURE__ */ jsxRuntime.jsx(
1409
- DialogPrimitive__namespace.Content,
1848
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DialogPrimitive3.Root, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DialogPrimitive3.Portal, { container: portalContainer, children: [
1849
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CommandDialogOverlay, {}),
1850
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1851
+ DialogPrimitive3.Content,
1410
1852
  {
1411
1853
  "data-slot": "command-content",
1412
1854
  className: cn(
@@ -1425,7 +1867,7 @@ var CommandDialog = ({ children, ...props }) => {
1425
1867
  "m-4 sm:m-0",
1426
1868
  // 16px margin on mobile, no margin on desktop
1427
1869
  // Visual
1428
- "overflow-hidden rounded-none border border-primary/5 bg-background shadow-xl",
1870
+ "overflow-hidden rounded-lg border border-border bg-background shadow-xl",
1429
1871
  // Animation
1430
1872
  "duration-200",
1431
1873
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
@@ -1433,20 +1875,20 @@ var CommandDialog = ({ children, ...props }) => {
1433
1875
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1434
1876
  "data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]"
1435
1877
  ),
1436
- children: /* @__PURE__ */ jsxRuntime.jsx(Command, { className: "[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wide [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:mb-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-3 [&_[cmdk-item]]:py-2 [&_[cmdk-item]_svg]:h-4 [&_[cmdk-item]_svg]:w-4", children })
1878
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Command, { className: "[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wide [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:mb-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-3 [&_[cmdk-item]]:py-2 [&_[cmdk-item]_svg]:h-4 [&_[cmdk-item]_svg]:w-4", children })
1437
1879
  }
1438
1880
  )
1439
1881
  ] }) });
1440
1882
  };
1441
- var CommandInput = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1883
+ var CommandInput = (0, import_react17.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1442
1884
  "div",
1443
1885
  {
1444
- className: "flex items-center border-b border-primary/5 px-4",
1886
+ className: "flex items-center border-b border-border px-4",
1445
1887
  "cmdk-input-wrapper": "",
1446
1888
  children: [
1447
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "mr-3 h-5 w-5 shrink-0 text-muted-foreground" }),
1448
- /* @__PURE__ */ jsxRuntime.jsx(
1449
- cmdk.Command.Input,
1889
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.Search, { className: "mr-3 h-5 w-5 shrink-0 text-muted-foreground" }),
1890
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1891
+ import_cmdk.Command.Input,
1450
1892
  {
1451
1893
  ref,
1452
1894
  className: cn(
@@ -1470,8 +1912,8 @@ var CommandInput = React5.forwardRef(({ className, ...props }, ref) => /* @__PUR
1470
1912
  }
1471
1913
  ));
1472
1914
  CommandInput.displayName = "CommandInput";
1473
- var CommandList = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1474
- cmdk.Command.List,
1915
+ var CommandList = (0, import_react17.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1916
+ import_cmdk.Command.List,
1475
1917
  {
1476
1918
  ref,
1477
1919
  className: cn(
@@ -1485,8 +1927,8 @@ var CommandList = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
1485
1927
  }
1486
1928
  ));
1487
1929
  CommandList.displayName = "CommandList";
1488
- var CommandEmpty = React5.forwardRef((props, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1489
- cmdk.Command.Empty,
1930
+ var CommandEmpty = (0, import_react17.forwardRef)((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1931
+ import_cmdk.Command.Empty,
1490
1932
  {
1491
1933
  ref,
1492
1934
  className: "py-8 px-4 text-center text-sm text-muted-foreground",
@@ -1494,8 +1936,8 @@ var CommandEmpty = React5.forwardRef((props, ref) => /* @__PURE__ */ jsxRuntime.
1494
1936
  }
1495
1937
  ));
1496
1938
  CommandEmpty.displayName = "CommandEmpty";
1497
- var CommandGroup = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1498
- cmdk.Command.Group,
1939
+ var CommandGroup = (0, import_react17.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1940
+ import_cmdk.Command.Group,
1499
1941
  {
1500
1942
  ref,
1501
1943
  className: cn(
@@ -1509,8 +1951,8 @@ var CommandGroup = React5.forwardRef(({ className, ...props }, ref) => /* @__PUR
1509
1951
  }
1510
1952
  ));
1511
1953
  CommandGroup.displayName = "CommandGroup";
1512
- var CommandSeparator = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1513
- cmdk.Command.Separator,
1954
+ var CommandSeparator = (0, import_react17.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1955
+ import_cmdk.Command.Separator,
1514
1956
  {
1515
1957
  ref,
1516
1958
  className: cn("h-px bg-border my-2", className),
@@ -1518,8 +1960,8 @@ var CommandSeparator = React5.forwardRef(({ className, ...props }, ref) => /* @_
1518
1960
  }
1519
1961
  ));
1520
1962
  CommandSeparator.displayName = "CommandSeparator";
1521
- var CommandItem = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1522
- cmdk.Command.Item,
1963
+ var CommandItem = (0, import_react17.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1964
+ import_cmdk.Command.Item,
1523
1965
  {
1524
1966
  ref,
1525
1967
  className: cn(
@@ -1531,7 +1973,7 @@ var CommandItem = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
1531
1973
  // Spacing
1532
1974
  "px-3 py-2.5",
1533
1975
  // Visual
1534
- "rounded-none text-base sm:text-sm outline-none",
1976
+ "rounded-sm text-base sm:text-sm outline-none",
1535
1977
  // Transitions
1536
1978
  "transition-all duration-200 ease-(--ease-premium)",
1537
1979
  // Hover state - shared dashboard hover treatment
@@ -1547,9 +1989,9 @@ var CommandItem = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
1547
1989
  }
1548
1990
  ));
1549
1991
  CommandItem.displayName = "CommandItem";
1550
- var CommandShortcut = React5.forwardRef(
1992
+ var CommandShortcut = (0, import_react17.forwardRef)(
1551
1993
  ({ className, ...props }, ref) => {
1552
- return /* @__PURE__ */ jsxRuntime.jsx(
1994
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1553
1995
  "span",
1554
1996
  {
1555
1997
  ref,
@@ -1560,7 +2002,7 @@ var CommandShortcut = React5.forwardRef(
1560
2002
  "text-xs font-mono",
1561
2003
  // Visual
1562
2004
  "text-muted-foreground bg-primary/5",
1563
- "border border-primary/5 rounded-none",
2005
+ "border border-border rounded-md",
1564
2006
  // Spacing
1565
2007
  "px-1.5 py-0.5",
1566
2008
  className
@@ -1571,7 +2013,13 @@ var CommandShortcut = React5.forwardRef(
1571
2013
  }
1572
2014
  );
1573
2015
  CommandShortcut.displayName = "CommandShortcut";
1574
- var spinnerVariants = classVarianceAuthority.cva("animate-spin motion-reduce:animate-none", {
2016
+
2017
+ // src/components/spinner.tsx
2018
+ var import_class_variance_authority11 = require("class-variance-authority");
2019
+ var import_lucide_react8 = require("lucide-react");
2020
+ var import_react18 = require("react");
2021
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2022
+ var spinnerVariants = (0, import_class_variance_authority11.cva)("animate-spin motion-reduce:animate-none", {
1575
2023
  variants: {
1576
2024
  size: {
1577
2025
  sm: "h-4 w-4",
@@ -1583,10 +2031,10 @@ var spinnerVariants = classVarianceAuthority.cva("animate-spin motion-reduce:ani
1583
2031
  size: "md"
1584
2032
  }
1585
2033
  });
1586
- var Spinner = React5.forwardRef(
2034
+ var Spinner = (0, import_react18.forwardRef)(
1587
2035
  ({ size = "md", className, "aria-label": ariaLabel = "Loading", ...props }, ref) => {
1588
- return /* @__PURE__ */ jsxRuntime.jsx(
1589
- lucideReact.Loader2,
2036
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2037
+ import_lucide_react8.Loader2,
1590
2038
  {
1591
2039
  ref,
1592
2040
  role: "status",
@@ -1598,12 +2046,17 @@ var Spinner = React5.forwardRef(
1598
2046
  }
1599
2047
  );
1600
2048
  Spinner.displayName = "Spinner";
2049
+
2050
+ // src/components/toaster.tsx
2051
+ var import_lucide_react9 = require("lucide-react");
2052
+ var import_sonner = require("sonner");
2053
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1601
2054
  function Toaster({ theme = "system", ...props }) {
1602
- return /* @__PURE__ */ jsxRuntime.jsx(
1603
- sonner.Toaster,
2055
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2056
+ import_sonner.Toaster,
1604
2057
  {
1605
2058
  theme,
1606
- className: "toaster group !bg-transparent !overflow-visible !z-[9999]",
2059
+ className: "toaster group bg-transparent! overflow-visible! z-[9999]!",
1607
2060
  "data-slot": "toaster",
1608
2061
  toastOptions: {
1609
2062
  classNames: {
@@ -1611,23 +2064,27 @@ function Toaster({ theme = "system", ...props }) {
1611
2064
  }
1612
2065
  },
1613
2066
  icons: {
1614
- success: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "h-4 w-4" }),
1615
- info: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4" }),
1616
- warning: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "h-4 w-4" }),
1617
- error: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: "h-4 w-4" }),
1618
- loading: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" })
2067
+ success: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.CheckCircle2, { className: "h-4 w-4" }),
2068
+ info: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.AlertCircle, { className: "h-4 w-4" }),
2069
+ warning: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.AlertTriangle, { className: "h-4 w-4" }),
2070
+ error: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.XCircle, { className: "h-4 w-4" }),
2071
+ loading: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.Loader2, { className: "h-4 w-4 animate-spin" })
1619
2072
  },
1620
2073
  style: {
1621
- "--normal-bg": "hsl(var(--popover, 0 0% 100%))",
1622
- "--normal-text": "hsl(var(--popover-foreground, 222.2 84% 4.9%))",
1623
- "--normal-border": "hsl(var(--border, 214.3 31.8% 91.4%))",
2074
+ "--normal-bg": "var(--nx-popover)",
2075
+ "--normal-text": "var(--nx-popover-foreground)",
2076
+ "--normal-border": "var(--nx-border)",
1624
2077
  "--border-radius": "0px"
1625
2078
  },
1626
2079
  ...props
1627
2080
  }
1628
2081
  );
1629
2082
  }
1630
- var Table = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
2083
+
2084
+ // src/components/table.tsx
2085
+ var React8 = __toESM(require("react"), 1);
2086
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2087
+ var Table = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1631
2088
  "table",
1632
2089
  {
1633
2090
  ref,
@@ -1636,9 +2093,16 @@ var Table = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @_
1636
2093
  }
1637
2094
  ) }));
1638
2095
  Table.displayName = "Table";
1639
- var TableHeader = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("thead", { ref, className: cn("[&_tr] :border-b border-primary/5", className), ...props }));
2096
+ var TableHeader = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2097
+ "thead",
2098
+ {
2099
+ ref,
2100
+ className: cn("[&_tr]:border-b border-border", className),
2101
+ ...props
2102
+ }
2103
+ ));
1640
2104
  TableHeader.displayName = "TableHeader";
1641
- var TableBody = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2105
+ var TableBody = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1642
2106
  "tbody",
1643
2107
  {
1644
2108
  ref,
@@ -1647,28 +2111,31 @@ var TableBody = React5__namespace.forwardRef(({ className, ...props }, ref) => /
1647
2111
  }
1648
2112
  ));
1649
2113
  TableBody.displayName = "TableBody";
1650
- var TableFooter = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2114
+ var TableFooter = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1651
2115
  "tfoot",
1652
2116
  {
1653
2117
  ref,
1654
- className: cn("border-t border-primary/5 font-medium [&>tr]:last:border-b-0", className),
2118
+ className: cn(
2119
+ "border-t border-border font-medium [&>tr]:last:border-b-0",
2120
+ className
2121
+ ),
1655
2122
  ...props
1656
2123
  }
1657
2124
  ));
1658
2125
  TableFooter.displayName = "TableFooter";
1659
- var TableRow = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2126
+ var TableRow = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1660
2127
  "tr",
1661
2128
  {
1662
2129
  ref,
1663
2130
  className: cn(
1664
- "border-b border-primary/5 transition-colors data-[state=selected]:bg-primary/5",
2131
+ "border-b border-border transition-colors data-[state=selected]:bg-primary/5",
1665
2132
  className
1666
2133
  ),
1667
2134
  ...props
1668
2135
  }
1669
2136
  ));
1670
2137
  TableRow.displayName = "TableRow";
1671
- var TableHead = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2138
+ var TableHead = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1672
2139
  "th",
1673
2140
  {
1674
2141
  ref,
@@ -1680,7 +2147,7 @@ var TableHead = React5__namespace.forwardRef(({ className, ...props }, ref) => /
1680
2147
  }
1681
2148
  ));
1682
2149
  TableHead.displayName = "TableHead";
1683
- var TableCell = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2150
+ var TableCell = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1684
2151
  "td",
1685
2152
  {
1686
2153
  ref,
@@ -1692,7 +2159,7 @@ var TableCell = React5__namespace.forwardRef(({ className, ...props }, ref) => /
1692
2159
  }
1693
2160
  ));
1694
2161
  TableCell.displayName = "TableCell";
1695
- var TableCaption = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2162
+ var TableCaption = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1696
2163
  "caption",
1697
2164
  {
1698
2165
  ref,
@@ -1701,6 +2168,10 @@ var TableCaption = React5__namespace.forwardRef(({ className, ...props }, ref) =
1701
2168
  }
1702
2169
  ));
1703
2170
  TableCaption.displayName = "TableCaption";
2171
+
2172
+ // src/components/table-search.tsx
2173
+ var import_lucide_react10 = require("lucide-react");
2174
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1704
2175
  function TableSearch({
1705
2176
  value,
1706
2177
  onChange,
@@ -1709,9 +2180,9 @@ function TableSearch({
1709
2180
  isLoading = false,
1710
2181
  inputRef
1711
2182
  }) {
1712
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full max-w-lg", children: [
1713
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
1714
- /* @__PURE__ */ jsxRuntime.jsx(
2183
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "relative w-full max-w-lg", children: [
2184
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react10.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
2185
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1715
2186
  "input",
1716
2187
  {
1717
2188
  ref: inputRef,
@@ -1720,685 +2191,236 @@ function TableSearch({
1720
2191
  value,
1721
2192
  onChange: (e) => onChange(e.target.value),
1722
2193
  "aria-busy": isLoading,
1723
- className: "h-10 w-full rounded-none border border-primary/5 bg-background pl-10 pr-10 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 transition-all"
2194
+ className: "h-10 w-full rounded-md border border-input bg-background pl-10 pr-10 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 transition-all"
1724
2195
  }
1725
2196
  ),
1726
- (value || isLoading) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2", children: [
1727
- isLoading && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-3.5 h-3.5 text-primary animate-spin" }),
1728
- value && /* @__PURE__ */ jsxRuntime.jsx(
2197
+ (value || isLoading) && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2", children: [
2198
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react10.Loader2, { className: "w-3.5 h-3.5 text-primary animate-spin" }),
2199
+ value && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1729
2200
  "button",
1730
2201
  {
1731
2202
  type: "button",
1732
2203
  onClick: onClear,
1733
- className: "text-muted-foreground/60 hover:text-foreground transition-colors p-0.5 rounded-none hover:bg-primary/5",
2204
+ className: "text-muted-foreground hover:text-foreground transition-colors p-0.5 rounded-md hover:bg-primary/5",
1734
2205
  "aria-label": "Clear search",
1735
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3.5 h-3.5" })
2206
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react10.X, { className: "w-3.5 h-3.5" })
1736
2207
  }
1737
2208
  )
1738
2209
  ] })
1739
2210
  ] });
1740
2211
  }
2212
+
2213
+ // src/components/table-states.tsx
2214
+ var import_lucide_react11 = require("lucide-react");
2215
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1741
2216
  function TableError({
1742
2217
  message = "An error occurred. Please try again."
1743
2218
  }) {
1744
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1745
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "w-4 h-4 shrink-0" }),
1746
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: message })
2219
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center gap-2", children: [
2220
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react11.AlertCircle, { className: "w-4 h-4 shrink-0" }),
2221
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: message })
1747
2222
  ] });
1748
2223
  }
1749
2224
  function TableLoading() {
1750
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-4 p-12 text-muted-foreground", children: [
1751
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-8 h-8 animate-spin text-primary/80" }),
1752
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Loading data..." })
2225
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex flex-col items-center justify-center gap-4 p-12 text-muted-foreground", children: [
2226
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react11.Loader2, { className: "w-8 h-8 animate-spin text-primary/80" }),
2227
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Loading data..." })
1753
2228
  ] });
1754
2229
  }
1755
2230
  function TableEmpty({ message = "No records found" }) {
1756
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-4 p-16 text-center text-muted-foreground", children: [
1757
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-none bg-primary/5", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileQuestion, { className: "h-6 w-6" }) }),
1758
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: message })
1759
- ] });
1760
- }
1761
- function renderPageNumbers(currentPage, totalPages, maxVisiblePages, onPageChange) {
1762
- const getBtnClass = (active) => `flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 text-xs z-10 -ml-px transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring ${active ? "!bg-primary !text-primary-foreground !border-primary z-20" : "!bg-background !border-primary/5 hover-muted disabled:opacity-50"}`;
1763
- if (totalPages <= maxVisiblePages) {
1764
- return Array.from({ length: totalPages }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
1765
- "button",
1766
- {
1767
- onClick: () => onPageChange(i),
1768
- "aria-label": `Go to page ${i + 1}`,
1769
- "aria-current": currentPage === i ? "page" : void 0,
1770
- className: getBtnClass(currentPage === i),
1771
- children: i + 1
1772
- },
1773
- `page-${i}`
1774
- ));
1775
- }
1776
- const pages = [];
1777
- const startPage = Math.max(0, currentPage - Math.floor(maxVisiblePages / 2));
1778
- const endPage = Math.min(totalPages - 1, startPage + maxVisiblePages - 1);
1779
- if (startPage > 0) {
1780
- pages.push(
1781
- /* @__PURE__ */ jsxRuntime.jsx(
1782
- "button",
1783
- {
1784
- onClick: () => onPageChange(0),
1785
- "aria-label": "Go to page 1",
1786
- className: getBtnClass(currentPage === 0),
1787
- children: "1"
1788
- },
1789
- "page-0"
1790
- )
1791
- );
1792
- if (startPage > 1) {
1793
- pages.push(
1794
- /* @__PURE__ */ jsxRuntime.jsx(
1795
- "span",
1796
- {
1797
- className: "flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 !border-primary/5 !bg-background text-muted-foreground text-xs -ml-px",
1798
- "aria-hidden": "true",
1799
- children: "..."
1800
- },
1801
- "ellipsis-start"
1802
- )
1803
- );
1804
- }
1805
- }
1806
- for (let i = startPage; i <= endPage; i++) {
1807
- pages.push(
1808
- /* @__PURE__ */ jsxRuntime.jsx(
1809
- "button",
1810
- {
1811
- onClick: () => onPageChange(i),
1812
- "aria-label": `Go to page ${i + 1}`,
1813
- "aria-current": currentPage === i ? "page" : void 0,
1814
- className: getBtnClass(currentPage === i),
1815
- children: i + 1
1816
- },
1817
- i
1818
- )
1819
- );
1820
- }
1821
- if (endPage < totalPages - 1) {
1822
- if (endPage < totalPages - 2) {
1823
- pages.push(
1824
- /* @__PURE__ */ jsxRuntime.jsx(
1825
- "span",
1826
- {
1827
- className: "flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 !border-primary/5 !bg-background text-muted-foreground text-xs -ml-px",
1828
- "aria-hidden": "true",
1829
- children: "..."
1830
- },
1831
- "ellipsis-end"
1832
- )
1833
- );
1834
- }
1835
- pages.push(
1836
- /* @__PURE__ */ jsxRuntime.jsx(
1837
- "button",
1838
- {
1839
- onClick: () => onPageChange(totalPages - 1),
1840
- "aria-label": `Go to page ${totalPages}`,
1841
- className: getBtnClass(currentPage === totalPages - 1),
1842
- children: totalPages
1843
- },
1844
- totalPages - 1
1845
- )
1846
- );
1847
- }
1848
- return pages;
1849
- }
1850
- function TablePagination({
1851
- meta,
1852
- onPageChange,
1853
- onPageSizeChange,
1854
- config,
1855
- isLoading = false
1856
- }) {
1857
- const {
1858
- showPageSizeSelector = true,
1859
- pageSizeOptions = [10, 20, 30, 50],
1860
- maxVisiblePages = 5
1861
- } = config || {};
1862
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row w-full items-center justify-between gap-4 text-xs sm:text-sm text-muted-foreground p-4 border-t border-primary/5", children: [
1863
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "whitespace-nowrap order-2 sm:order-1", children: [
1864
- "Showing ",
1865
- (meta.page - 1) * meta.limit + 1,
1866
- "-",
1867
- Math.min(meta.page * meta.limit, meta.total),
1868
- " of ",
1869
- meta.total,
1870
- " entries"
1871
- ] }),
1872
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-center gap-4 sm:gap-6 lg:gap-8 order-1 sm:order-2", children: [
1873
- showPageSizeSelector && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-2", children: [
1874
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap hidden sm:inline-block", children: "Rows per page" }),
1875
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
1876
- /* @__PURE__ */ jsxRuntime.jsx(
1877
- "select",
1878
- {
1879
- id: "pageSize",
1880
- value: meta.limit,
1881
- onChange: (e) => {
1882
- const newPageSize = Number(e.target.value);
1883
- onPageSizeChange(newPageSize);
1884
- },
1885
- className: "h-8 w-[70px] appearance-none rounded-none border border-primary/5 bg-background px-2 py-1 text-sm font-medium focus-visible:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50 hover-muted cursor-pointer",
1886
- disabled: isLoading,
1887
- children: pageSizeOptions.map((size) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: size, children: size }, size))
1888
- }
1889
- ),
1890
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
1891
- "svg",
1892
- {
1893
- className: "h-3 w-3",
1894
- fill: "none",
1895
- viewBox: "0 0 24 24",
1896
- stroke: "currentColor",
1897
- children: /* @__PURE__ */ jsxRuntime.jsx(
1898
- "path",
1899
- {
1900
- strokeLinecap: "round",
1901
- strokeLinejoin: "round",
1902
- strokeWidth: 2,
1903
- d: "M19 9l-7 7-7-7"
1904
- }
1905
- )
1906
- }
1907
- ) })
1908
- ] })
1909
- ] }),
1910
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center -space-x-px", children: [
1911
- /* @__PURE__ */ jsxRuntime.jsx(
1912
- "button",
1913
- {
1914
- onClick: () => onPageChange(0),
1915
- disabled: meta.page === 0 || isLoading,
1916
- className: "hidden sm:flex h-8 w-8 items-center justify-center rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1917
- "aria-label": "First page",
1918
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsLeft, { className: "h-4 w-4" })
1919
- }
1920
- ),
1921
- /* @__PURE__ */ jsxRuntime.jsx(
1922
- "button",
1923
- {
1924
- onClick: () => onPageChange(meta.page - 1),
1925
- disabled: meta.page === 0 || isLoading,
1926
- className: "flex h-8 w-8 items-center justify-center rounded-none sm:rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1927
- "aria-label": "Previous page",
1928
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
1929
- }
1930
- ),
1931
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex", children: renderPageNumbers(
1932
- meta.page,
1933
- meta.totalPages,
1934
- maxVisiblePages,
1935
- onPageChange
1936
- ) }),
1937
- /* @__PURE__ */ jsxRuntime.jsx(
1938
- "button",
1939
- {
1940
- onClick: () => onPageChange(meta.page + 1),
1941
- disabled: meta.page >= meta.totalPages - 1 || isLoading,
1942
- className: "flex h-8 w-8 items-center justify-center rounded-none sm:rounded-none border-y border-primary/5 border-x border-primary/5 sm :border-r border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1943
- "aria-label": "Next page",
1944
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
1945
- }
1946
- ),
1947
- /* @__PURE__ */ jsxRuntime.jsx(
1948
- "button",
1949
- {
1950
- onClick: () => onPageChange(meta.totalPages - 1),
1951
- disabled: meta.page >= meta.totalPages - 1 || isLoading,
1952
- className: "hidden sm:flex h-8 w-8 items-center justify-center rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1953
- "aria-label": "Last page",
1954
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsRight, { className: "h-4 w-4" })
1955
- }
1956
- )
1957
- ] }),
1958
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "whitespace-nowrap hidden sm:block", children: [
1959
- "Page ",
1960
- meta.page + 1,
1961
- " of ",
1962
- meta.totalPages
1963
- ] })
1964
- ] })
2231
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex flex-col items-center justify-center gap-4 p-16 text-center text-muted-foreground", children: [
2232
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "flex h-12 w-12 items-center justify-center rounded-md bg-primary/5", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react11.FileQuestion, { className: "h-6 w-6" }) }),
2233
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: message })
1965
2234
  ] });
1966
2235
  }
1967
- var GrayBar = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className });
2236
+
2237
+ // src/components/table-skeleton.tsx
2238
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2239
+ var GrayBar = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { className });
1968
2240
  var TableSkeleton = ({
1969
2241
  columns = 5,
1970
2242
  rowCount = 8,
1971
2243
  hideWrapper = false,
1972
2244
  hideFooter = false
1973
2245
  }) => {
1974
- const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1975
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-0 rounded-none shadow-none", children: /* @__PURE__ */ jsxRuntime.jsxs(Table, { children: [
1976
- /* @__PURE__ */ jsxRuntime.jsx(TableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(TableRow, { children: Array.from({ length: columns }).map((_, colIdx) => /* @__PURE__ */ jsxRuntime.jsx(TableHead, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-4 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[70%] max-w-[180px]" }) : /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, `skeleton-header-${colIdx}`)) }) }),
1977
- /* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ jsxRuntime.jsx(TableRow, { className: "border-b border-primary/5", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-8 w-8 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
1978
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "w-9 rounded-none shrink-0" }),
1979
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 flex-1", children: [
1980
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-[120px]" }),
1981
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-3 w-[80px]" })
2246
+ const content = /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
2247
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "border-0 rounded-none shadow-none", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Table, { children: [
2248
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableRow, { children: Array.from({ length: columns }).map((_, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableHead, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { className: "h-4 w-4 rounded-sm" }) }) : colIdx === 1 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-[70%] max-w-[180px]" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, `skeleton-header-${colIdx}`)) }) }),
2249
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableRow, { className: "border-b border-border", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { className: "h-8 w-8 rounded-md" }) }) : colIdx === 1 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-3", children: [
2250
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { className: "w-9 rounded-md shrink-0" }),
2251
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1.5 flex-1", children: [
2252
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { className: "h-4 w-[120px]" }),
2253
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { className: "h-3 w-[80px]" })
1982
2254
  ] })
1983
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, colIdx)) }, rowIdx)) })
2255
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, colIdx)) }, rowIdx)) })
1984
2256
  ] }) }),
1985
- !hideFooter && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-footer border-t border-primary/5", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-2 py-4 p-4", children: [
1986
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 text-sm", children: /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[120px]" }) }),
1987
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-6", children: [
1988
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1989
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-20" }),
1990
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-[70px]" })
2257
+ !hideFooter && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "table-footer border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center justify-between px-2 py-4 p-4", children: [
2258
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex items-center gap-2 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-[120px]" }) }),
2259
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-6", children: [
2260
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-2", children: [
2261
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-20" }),
2262
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-8 w-[70px]" })
1991
2263
  ] }),
1992
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
1993
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
1994
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
1995
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
1996
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
1997
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" })
2264
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-1", children: [
2265
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-8 w-8" }),
2266
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-8 w-8" }),
2267
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-8 w-8" }),
2268
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-8 w-8" }),
2269
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-8 w-8" })
1998
2270
  ] }),
1999
- /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[120px]" })
2271
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GrayBar, { className: "h-4 w-[120px]" })
2000
2272
  ] })
2001
2273
  ] }) })
2002
2274
  ] });
2003
2275
  if (hideWrapper) {
2004
2276
  return content;
2005
2277
  }
2006
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-wrapper rounded-none border border-primary/5 bg-card overflow-hidden", children: content });
2278
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "table-wrapper rounded-md border border-border bg-card overflow-hidden", children: content });
2007
2279
  };
2008
2280
  TableSkeleton.displayName = "TableSkeleton";
2009
- function ResponsiveTableInner({
2010
- data,
2011
- columns,
2012
- onRowClick,
2013
- renderMobileCard,
2014
- className,
2015
- emptyMessage = "No results found.",
2016
- ariaLabel,
2017
- tableWrapperClassName,
2018
- footer
2019
- }, ref) {
2020
- const visibleMobileColumns = React5__namespace.useMemo(
2021
- () => columns.filter((col) => !col.hideOnMobile),
2022
- [columns]
2023
- );
2024
- const primaryColumn = React5__namespace.useMemo(() => {
2025
- return visibleMobileColumns.find(
2026
- (col) => col.key !== "select" && col.key !== "actions"
2027
- ) || visibleMobileColumns[0];
2028
- }, [visibleMobileColumns]);
2029
- const secondaryColumns = React5__namespace.useMemo(
2030
- () => visibleMobileColumns.filter((col) => col.key !== primaryColumn?.key),
2031
- [visibleMobileColumns, primaryColumn]
2032
- );
2033
- React5__namespace.useEffect(() => {
2034
- const isDev = typeof globalThis !== "undefined" && globalThis.process && globalThis.process.env?.NODE_ENV === "development";
2035
- if (isDev && visibleMobileColumns.length === 0) {
2036
- console.warn(
2037
- "ResponsiveTable: All columns are hidden on mobile (hideOnMobile: true). Consider showing at least one column for better mobile UX. Users will see empty card borders on mobile devices."
2038
- );
2039
- }
2040
- }, [visibleMobileColumns.length]);
2041
- const handleItemClick = React5__namespace.useCallback(
2042
- (item, e) => {
2043
- if (!onRowClick) return;
2044
- if (e) {
2045
- const target = e.target;
2046
- if (target.closest('[role="checkbox"]') || target.closest("button") || target.closest("a") || target.closest('[role^="menuitem"]') || target.closest("[data-actions]")) {
2047
- return;
2048
- }
2049
- }
2050
- onRowClick(item);
2051
- },
2052
- [onRowClick]
2053
- );
2054
- const handleCardKeyDown = React5__namespace.useCallback(
2055
- (item) => (e) => {
2056
- if (onRowClick && (e.key === "Enter" || e.key === " ")) {
2057
- e.preventDefault();
2058
- handleItemClick(item, e);
2059
- }
2060
- },
2061
- [handleItemClick, onRowClick]
2062
- );
2063
- if (data.length === 0) {
2064
- return /* @__PURE__ */ jsxRuntime.jsx(
2065
- "div",
2066
- {
2067
- ref,
2068
- className: cn(
2069
- "p-8 text-center",
2070
- className
2071
- ),
2072
- children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage })
2073
- }
2074
- );
2075
- }
2076
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("w-full", className), children: [
2077
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 md:hidden", children: data.map((item) => {
2078
- const primaryValue = primaryColumn ? String(item[primaryColumn.key]) : String(item.id);
2079
- if (renderMobileCard) {
2080
- return /* @__PURE__ */ jsxRuntime.jsx(
2081
- "div",
2082
- {
2083
- onClick: (e) => handleItemClick(item, e),
2084
- role: onRowClick ? "button" : void 0,
2085
- tabIndex: onRowClick ? 0 : void 0,
2086
- onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
2087
- className: onRowClick ? "cursor-pointer" : void 0,
2088
- "aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
2089
- children: renderMobileCard(item, visibleMobileColumns)
2090
- },
2091
- item.id
2092
- );
2093
- }
2094
- return /* @__PURE__ */ jsxRuntime.jsxs(
2095
- Card,
2096
- {
2097
- variant: onRowClick ? "interactive" : "default",
2098
- className: cn(
2099
- onRowClick && "cursor-pointer",
2100
- "transition-all duration-150"
2101
- ),
2102
- onClick: (e) => handleItemClick(item, e),
2103
- role: onRowClick ? "button" : void 0,
2104
- tabIndex: onRowClick ? 0 : void 0,
2105
- onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
2106
- "aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
2107
- children: [
2108
- primaryColumn ? /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { className: "pb-3", children: /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: "text-base", children: primaryColumn.render ? primaryColumn.render(item[primaryColumn.key], item) : String(item[primaryColumn.key]) }) }) : null,
2109
- secondaryColumns.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "pb-3", children: /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "flex flex-col gap-2", children: secondaryColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsxs(
2110
- "div",
2111
- {
2112
- className: "flex items-start justify-between gap-4 text-sm",
2113
- children: [
2114
- !column.hideLabelOnMobile && /* @__PURE__ */ jsxRuntime.jsxs("dt", { className: "text-muted-foreground min-w-[80px] shrink-0", children: [
2115
- column.label,
2116
- ":"
2117
- ] }),
2118
- /* @__PURE__ */ jsxRuntime.jsx(
2119
- "dd",
2120
- {
2121
- className: cn(
2122
- "font-medium flex-1",
2123
- !column.hideLabelOnMobile ? "text-right" : "text-left"
2124
- ),
2125
- children: column.render ? column.render(item[column.key], item) : String(item[column.key])
2126
- }
2127
- )
2128
- ]
2129
- },
2130
- String(column.key)
2131
- )) }) })
2132
- ]
2133
- },
2134
- item.id
2135
- );
2136
- }) }),
2137
- /* @__PURE__ */ jsxRuntime.jsx(
2138
- "div",
2139
- {
2140
- className: cn(
2141
- "table-wrapper hidden md:block overflow-hidden rounded-none border border-primary/5",
2142
- tableWrapperClassName
2143
- ),
2144
- children: /* @__PURE__ */ jsxRuntime.jsxs(Table, { "aria-label": ariaLabel || "Data table", children: [
2145
- /* @__PURE__ */ jsxRuntime.jsx(TableHeader, { className: "bg-[hsl(var(--table-header-bg))]", children: /* @__PURE__ */ jsxRuntime.jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
2146
- TableHead,
2147
- {
2148
- className: column.headerClassName,
2149
- children: column.label
2150
- },
2151
- String(column.key)
2152
- )) }) }),
2153
- /* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: data.map((item) => {
2154
- const primaryValue = primaryColumn ? String(item[primaryColumn.key]) : String(item.id);
2155
- return /* @__PURE__ */ jsxRuntime.jsx(
2156
- TableRow,
2157
- {
2158
- className: cn(
2159
- "hover-unified-table-row",
2160
- onRowClick && "cursor-pointer"
2161
- ),
2162
- onClick: (e) => handleItemClick(item, e),
2163
- role: onRowClick ? "button" : void 0,
2164
- tabIndex: onRowClick ? 0 : void 0,
2165
- onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
2166
- "aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
2167
- children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
2168
- TableCell,
2169
- {
2170
- className: column.cellClassName,
2171
- children: column.render ? column.render(item[column.key], item) : String(item[column.key])
2172
- },
2173
- String(column.key)
2174
- ))
2175
- },
2176
- item.id
2177
- );
2178
- }) })
2179
- ] })
2180
- }
2181
- ),
2182
- footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-footer border-t border-primary/5 bg-[hsl(var(--table-header-bg))]", children: footer })
2183
- ] });
2184
- }
2185
- var ResponsiveTable = React5__namespace.forwardRef(ResponsiveTableInner);
2186
-
2187
- // src/tailwind-preset.ts
2188
- var uiPreset = {
2189
- theme: {
2190
- extend: {
2191
- colors: {
2192
- border: "hsl(var(--border))",
2193
- input: "hsl(var(--input))",
2194
- ring: "hsl(var(--ring))",
2195
- background: "hsl(var(--background))",
2196
- foreground: "hsl(var(--foreground))",
2197
- primary: {
2198
- DEFAULT: "hsl(var(--primary))",
2199
- foreground: "hsl(var(--primary-foreground))"
2200
- },
2201
- secondary: {
2202
- DEFAULT: "hsl(var(--secondary))",
2203
- foreground: "hsl(var(--secondary-foreground))"
2204
- },
2205
- destructive: {
2206
- DEFAULT: "hsl(var(--destructive))",
2207
- foreground: "hsl(var(--destructive-foreground))"
2208
- },
2209
- success: {
2210
- DEFAULT: "hsl(var(--success))",
2211
- foreground: "hsl(var(--success-foreground))"
2212
- },
2213
- warning: {
2214
- DEFAULT: "hsl(var(--warning))",
2215
- foreground: "hsl(var(--warning-foreground))"
2216
- },
2217
- muted: {
2218
- DEFAULT: "hsl(var(--muted))",
2219
- foreground: "hsl(var(--muted-foreground))"
2220
- },
2221
- accent: {
2222
- DEFAULT: "hsl(var(--accent))",
2223
- foreground: "hsl(var(--accent-foreground))"
2224
- },
2225
- popover: {
2226
- DEFAULT: "hsl(var(--popover))",
2227
- foreground: "hsl(var(--popover-foreground))"
2228
- },
2229
- card: {
2230
- DEFAULT: "hsl(var(--card))",
2231
- foreground: "hsl(var(--card-foreground))"
2232
- }
2233
- },
2234
- borderRadius: {
2235
- lg: "var(--radius)",
2236
- md: "calc(var(--radius) - 2px)",
2237
- sm: "calc(var(--radius) - 4px)"
2238
- },
2239
- keyframes: {
2240
- "accordion-down": {
2241
- from: { height: "0" },
2242
- to: { height: "var(--radix-accordion-content-height)" }
2243
- },
2244
- "accordion-up": {
2245
- from: { height: "var(--radix-accordion-content-height)" },
2246
- to: { height: "0" }
2247
- }
2248
- },
2249
- animation: {
2250
- "accordion-down": "accordion-down 0.3s cubic-bezier(0.87, 0, 0.13, 1)",
2251
- "accordion-up": "accordion-up 0.3s cubic-bezier(0.87, 0, 0.13, 1)"
2252
- }
2253
- }
2254
- }
2255
- };
2256
- var tailwind_preset_default = uiPreset;
2257
-
2258
- Object.defineProperty(exports, "toast", {
2259
- enumerable: true,
2260
- get: function () { return sonner.toast; }
2281
+ // Annotate the CommonJS export names for ESM import in node:
2282
+ 0 && (module.exports = {
2283
+ Accordion,
2284
+ AccordionContent,
2285
+ AccordionItem,
2286
+ AccordionTrigger,
2287
+ Alert,
2288
+ AlertDescription,
2289
+ AlertDialog,
2290
+ AlertDialogAction,
2291
+ AlertDialogCancel,
2292
+ AlertDialogContent,
2293
+ AlertDialogDescription,
2294
+ AlertDialogFooter,
2295
+ AlertDialogHeader,
2296
+ AlertDialogOverlay,
2297
+ AlertDialogPortal,
2298
+ AlertDialogTitle,
2299
+ AlertDialogTrigger,
2300
+ AlertTitle,
2301
+ Avatar,
2302
+ AvatarFallback,
2303
+ AvatarImage,
2304
+ Badge,
2305
+ Button,
2306
+ Card,
2307
+ CardAction,
2308
+ CardContent,
2309
+ CardDescription,
2310
+ CardFooter,
2311
+ CardHeader,
2312
+ CardTitle,
2313
+ Checkbox,
2314
+ Collapsible,
2315
+ CollapsibleContent,
2316
+ CollapsibleTrigger,
2317
+ Command,
2318
+ CommandDialog,
2319
+ CommandEmpty,
2320
+ CommandGroup,
2321
+ CommandInput,
2322
+ CommandItem,
2323
+ CommandList,
2324
+ CommandSeparator,
2325
+ CommandShortcut,
2326
+ Dialog,
2327
+ DialogClose,
2328
+ DialogContent,
2329
+ DialogDescription,
2330
+ DialogFooter,
2331
+ DialogHeader,
2332
+ DialogOverlay,
2333
+ DialogPortal,
2334
+ DialogTitle,
2335
+ DialogTrigger,
2336
+ DropdownMenu,
2337
+ DropdownMenuCheckboxItem,
2338
+ DropdownMenuContent,
2339
+ DropdownMenuGroup,
2340
+ DropdownMenuItem,
2341
+ DropdownMenuLabel,
2342
+ DropdownMenuPortal,
2343
+ DropdownMenuRadioGroup,
2344
+ DropdownMenuRadioItem,
2345
+ DropdownMenuSeparator,
2346
+ DropdownMenuShortcut,
2347
+ DropdownMenuSub,
2348
+ DropdownMenuSubContent,
2349
+ DropdownMenuSubTrigger,
2350
+ DropdownMenuTrigger,
2351
+ FormLabelWithTooltip,
2352
+ Grid,
2353
+ Input,
2354
+ Label,
2355
+ Popover,
2356
+ PopoverAnchor,
2357
+ PopoverContent,
2358
+ PopoverTrigger,
2359
+ PortalProvider,
2360
+ Progress,
2361
+ RadioGroup,
2362
+ RadioGroupItem,
2363
+ Select,
2364
+ SelectContent,
2365
+ SelectGroup,
2366
+ SelectItem,
2367
+ SelectLabel,
2368
+ SelectScrollDownButton,
2369
+ SelectScrollUpButton,
2370
+ SelectSeparator,
2371
+ SelectTrigger,
2372
+ SelectValue,
2373
+ Separator,
2374
+ Sheet,
2375
+ SheetClose,
2376
+ SheetContent,
2377
+ SheetDescription,
2378
+ SheetFooter,
2379
+ SheetHeader,
2380
+ SheetOverlay,
2381
+ SheetPortal,
2382
+ SheetTitle,
2383
+ SheetTrigger,
2384
+ Skeleton,
2385
+ Spinner,
2386
+ Stack,
2387
+ Stat,
2388
+ Switch,
2389
+ Table,
2390
+ TableBody,
2391
+ TableCaption,
2392
+ TableCell,
2393
+ TableEmpty,
2394
+ TableError,
2395
+ TableFooter,
2396
+ TableHead,
2397
+ TableHeader,
2398
+ TableLoading,
2399
+ TableRow,
2400
+ TableSearch,
2401
+ TableSkeleton,
2402
+ Tabs,
2403
+ TabsContent,
2404
+ TabsList,
2405
+ TabsTrigger,
2406
+ Textarea,
2407
+ Toaster,
2408
+ Tooltip,
2409
+ TooltipContent,
2410
+ TooltipProvider,
2411
+ TooltipTrigger,
2412
+ alertVariants,
2413
+ avatarVariants,
2414
+ badgeVariants,
2415
+ buttonVariants,
2416
+ cardVariants,
2417
+ dialogContentVariants,
2418
+ inputVariants,
2419
+ progressVariants,
2420
+ selectTriggerVariants,
2421
+ sheetVariants,
2422
+ spinnerVariants,
2423
+ toast,
2424
+ usePortalContainer
2261
2425
  });
2262
- exports.Accordion = Accordion;
2263
- exports.AccordionContent = AccordionContent;
2264
- exports.AccordionItem = AccordionItem;
2265
- exports.AccordionTrigger = AccordionTrigger;
2266
- exports.Alert = Alert;
2267
- exports.AlertDescription = AlertDescription;
2268
- exports.AlertDialog = AlertDialog;
2269
- exports.AlertDialogAction = AlertDialogAction;
2270
- exports.AlertDialogCancel = AlertDialogCancel;
2271
- exports.AlertDialogContent = AlertDialogContent;
2272
- exports.AlertDialogDescription = AlertDialogDescription;
2273
- exports.AlertDialogFooter = AlertDialogFooter;
2274
- exports.AlertDialogHeader = AlertDialogHeader;
2275
- exports.AlertDialogOverlay = AlertDialogOverlay;
2276
- exports.AlertDialogPortal = AlertDialogPortal;
2277
- exports.AlertDialogTitle = AlertDialogTitle;
2278
- exports.AlertDialogTrigger = AlertDialogTrigger;
2279
- exports.AlertTitle = AlertTitle;
2280
- exports.Avatar = Avatar;
2281
- exports.AvatarFallback = AvatarFallback;
2282
- exports.AvatarImage = AvatarImage;
2283
- exports.Badge = Badge;
2284
- exports.Button = Button;
2285
- exports.Card = Card;
2286
- exports.CardAction = CardAction;
2287
- exports.CardContent = CardContent;
2288
- exports.CardDescription = CardDescription;
2289
- exports.CardFooter = CardFooter;
2290
- exports.CardHeader = CardHeader;
2291
- exports.CardTitle = CardTitle;
2292
- exports.Checkbox = Checkbox;
2293
- exports.Collapsible = Collapsible;
2294
- exports.CollapsibleContent = CollapsibleContent2;
2295
- exports.CollapsibleTrigger = CollapsibleTrigger2;
2296
- exports.Command = Command;
2297
- exports.CommandDialog = CommandDialog;
2298
- exports.CommandEmpty = CommandEmpty;
2299
- exports.CommandGroup = CommandGroup;
2300
- exports.CommandInput = CommandInput;
2301
- exports.CommandItem = CommandItem;
2302
- exports.CommandList = CommandList;
2303
- exports.CommandSeparator = CommandSeparator;
2304
- exports.CommandShortcut = CommandShortcut;
2305
- exports.Dialog = Dialog;
2306
- exports.DialogClose = DialogClose;
2307
- exports.DialogContent = DialogContent;
2308
- exports.DialogDescription = DialogDescription;
2309
- exports.DialogFooter = DialogFooter;
2310
- exports.DialogHeader = DialogHeader;
2311
- exports.DialogOverlay = DialogOverlay;
2312
- exports.DialogPortal = DialogPortal;
2313
- exports.DialogTitle = DialogTitle;
2314
- exports.DialogTrigger = DialogTrigger;
2315
- exports.DropdownMenu = DropdownMenu;
2316
- exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
2317
- exports.DropdownMenuContent = DropdownMenuContent;
2318
- exports.DropdownMenuGroup = DropdownMenuGroup;
2319
- exports.DropdownMenuItem = DropdownMenuItem;
2320
- exports.DropdownMenuLabel = DropdownMenuLabel;
2321
- exports.DropdownMenuPortal = DropdownMenuPortal;
2322
- exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
2323
- exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
2324
- exports.DropdownMenuSeparator = DropdownMenuSeparator;
2325
- exports.DropdownMenuShortcut = DropdownMenuShortcut;
2326
- exports.DropdownMenuSub = DropdownMenuSub;
2327
- exports.DropdownMenuSubContent = DropdownMenuSubContent;
2328
- exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
2329
- exports.DropdownMenuTrigger = DropdownMenuTrigger;
2330
- exports.Input = Input;
2331
- exports.Label = Label;
2332
- exports.Popover = Popover;
2333
- exports.PopoverAnchor = PopoverAnchor;
2334
- exports.PopoverContent = PopoverContent;
2335
- exports.PopoverTrigger = PopoverTrigger;
2336
- exports.PortalProvider = PortalProvider;
2337
- exports.Progress = Progress;
2338
- exports.RadioGroup = RadioGroup;
2339
- exports.RadioGroupItem = RadioGroupItem;
2340
- exports.ResponsiveTable = ResponsiveTable;
2341
- exports.Select = Select;
2342
- exports.SelectContent = SelectContent;
2343
- exports.SelectGroup = SelectGroup;
2344
- exports.SelectItem = SelectItem;
2345
- exports.SelectLabel = SelectLabel;
2346
- exports.SelectScrollDownButton = SelectScrollDownButton;
2347
- exports.SelectScrollUpButton = SelectScrollUpButton;
2348
- exports.SelectSeparator = SelectSeparator;
2349
- exports.SelectTrigger = SelectTrigger;
2350
- exports.SelectValue = SelectValue;
2351
- exports.Separator = Separator;
2352
- exports.Sheet = Sheet;
2353
- exports.SheetClose = SheetClose;
2354
- exports.SheetContent = SheetContent;
2355
- exports.SheetDescription = SheetDescription;
2356
- exports.SheetFooter = SheetFooter;
2357
- exports.SheetHeader = SheetHeader;
2358
- exports.SheetOverlay = SheetOverlay;
2359
- exports.SheetPortal = SheetPortal;
2360
- exports.SheetTitle = SheetTitle;
2361
- exports.SheetTrigger = SheetTrigger;
2362
- exports.Skeleton = Skeleton;
2363
- exports.Spinner = Spinner;
2364
- exports.Switch = Switch;
2365
- exports.Table = Table;
2366
- exports.TableBody = TableBody;
2367
- exports.TableCaption = TableCaption;
2368
- exports.TableCell = TableCell;
2369
- exports.TableEmpty = TableEmpty;
2370
- exports.TableError = TableError;
2371
- exports.TableFooter = TableFooter;
2372
- exports.TableHead = TableHead;
2373
- exports.TableHeader = TableHeader;
2374
- exports.TableLoading = TableLoading;
2375
- exports.TablePagination = TablePagination;
2376
- exports.TableRow = TableRow;
2377
- exports.TableSearch = TableSearch;
2378
- exports.TableSkeleton = TableSkeleton;
2379
- exports.Tabs = Tabs;
2380
- exports.TabsContent = TabsContent;
2381
- exports.TabsList = TabsList;
2382
- exports.TabsTrigger = TabsTrigger;
2383
- exports.Textarea = Textarea;
2384
- exports.Toaster = Toaster;
2385
- exports.Tooltip = Tooltip;
2386
- exports.TooltipContent = TooltipContent;
2387
- exports.TooltipProvider = TooltipProvider;
2388
- exports.TooltipTrigger = TooltipTrigger;
2389
- exports.alertVariants = alertVariants;
2390
- exports.avatarVariants = avatarVariants;
2391
- exports.badgeVariants = badgeVariants;
2392
- exports.buttonVariants = buttonVariants;
2393
- exports.cardVariants = cardVariants;
2394
- exports.cn = cn;
2395
- exports.dialogContentVariants = dialogContentVariants;
2396
- exports.inputVariants = inputVariants;
2397
- exports.progressVariants = progressVariants;
2398
- exports.selectTriggerVariants = selectTriggerVariants;
2399
- exports.sheetVariants = sheetVariants;
2400
- exports.spinnerVariants = spinnerVariants;
2401
- exports.uiPreset = tailwind_preset_default;
2402
- exports.usePortalContainer = usePortalContainer;
2403
- //# sourceMappingURL=index.cjs.map
2404
2426
  //# sourceMappingURL=index.cjs.map