@nextlyhq/ui 0.0.1

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 ADDED
@@ -0,0 +1,2404 @@
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
+ });
41
+ }
42
+ n.default = e;
43
+ return Object.freeze(n);
44
+ }
45
+
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);
57
+
58
+ // src/components/button.tsx
59
+ function cn(...inputs) {
60
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
61
+ }
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",
64
+ {
65
+ variants: {
66
+ variant: {
67
+ default: "bg-primary text-primary-foreground border border-transparent hover:opacity-90",
68
+ 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",
72
+ ghost: "text-foreground border border-transparent hover-unified",
73
+ link: "text-primary border border-transparent underline-offset-4 hover:underline"
74
+ },
75
+ 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"
83
+ }
84
+ },
85
+ defaultVariants: {
86
+ variant: "default",
87
+ size: "md"
88
+ }
89
+ }
90
+ );
91
+ var Button = React5.forwardRef(
92
+ ({
93
+ className,
94
+ variant = "default",
95
+ size = "md",
96
+ asChild = false,
97
+ children,
98
+ ...props
99
+ }, ref) => {
100
+ const Comp = asChild ? reactSlot.Slot : "button";
101
+ const hasMultipleChildren = React5__namespace.Children.count(children) > 1;
102
+ return /* @__PURE__ */ jsxRuntime.jsx(
103
+ Comp,
104
+ {
105
+ "data-slot": `button.${variant}`,
106
+ className: cn(
107
+ buttonVariants({ variant, size, className }),
108
+ hasMultipleChildren && "gap-1.5"
109
+ ),
110
+ ref,
111
+ ...props,
112
+ children
113
+ }
114
+ );
115
+ }
116
+ );
117
+ 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",
120
+ {
121
+ variants: {
122
+ 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"
126
+ }
127
+ },
128
+ defaultVariants: {
129
+ size: "default"
130
+ }
131
+ }
132
+ );
133
+ var Input = React5.forwardRef(
134
+ ({ className, type, size, ...props }, ref) => {
135
+ return /* @__PURE__ */ jsxRuntime.jsx(
136
+ "input",
137
+ {
138
+ type,
139
+ "data-slot": "input",
140
+ className: cn(inputVariants({ size, className })),
141
+ ref,
142
+ ...props
143
+ }
144
+ );
145
+ }
146
+ );
147
+ Input.displayName = "Input";
148
+ var Textarea = React5.forwardRef(({ className, ...props }, ref) => {
149
+ return /* @__PURE__ */ jsxRuntime.jsx(
150
+ "textarea",
151
+ {
152
+ "data-slot": "textarea",
153
+ 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",
156
+ className
157
+ ),
158
+ ref,
159
+ ...props
160
+ }
161
+ );
162
+ });
163
+ Textarea.displayName = "Textarea";
164
+ function Label({ className, ...props }) {
165
+ return /* @__PURE__ */ jsxRuntime.jsx(
166
+ reactLabel.Root,
167
+ {
168
+ "data-slot": "label",
169
+ className: cn(
170
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
171
+ className
172
+ ),
173
+ ...props
174
+ }
175
+ );
176
+ }
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",
179
+ {
180
+ variants: {
181
+ 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"
188
+ }
189
+ },
190
+ defaultVariants: {
191
+ variant: "default"
192
+ }
193
+ }
194
+ );
195
+ function Badge({ className, variant = "default", ...props }) {
196
+ return /* @__PURE__ */ jsxRuntime.jsx(
197
+ "div",
198
+ {
199
+ "data-slot": `badge.${variant}`,
200
+ className: cn(badgeVariants({ variant }), className),
201
+ ...props
202
+ }
203
+ );
204
+ }
205
+ var cardVariants = classVarianceAuthority.cva(
206
+ "bg-card text-foreground rounded-none border border-primary/5 transition-all duration-200",
207
+ {
208
+ variants: {
209
+ variant: {
210
+ default: "",
211
+ interactive: "cursor-pointer hover:border-primary active:scale-[0.99]",
212
+ elevated: "shadow-md"
213
+ }
214
+ },
215
+ defaultVariants: {
216
+ variant: "default"
217
+ }
218
+ }
219
+ );
220
+ var Card = React5.forwardRef(
221
+ ({ className, variant, ...props }, ref) => {
222
+ return /* @__PURE__ */ jsxRuntime.jsx(
223
+ "div",
224
+ {
225
+ ref,
226
+ "data-slot": `card.${variant || "default"}`,
227
+ className: cn(cardVariants({ variant }), className),
228
+ ...props
229
+ }
230
+ );
231
+ }
232
+ );
233
+ Card.displayName = "Card";
234
+ var CardHeader = React5.forwardRef(
235
+ ({ className, noBorder = false, ...props }, ref) => {
236
+ return /* @__PURE__ */ jsxRuntime.jsx(
237
+ "div",
238
+ {
239
+ ref,
240
+ "data-slot": "card-header",
241
+ className: cn(
242
+ "flex flex-col p-4",
243
+ !noBorder && "border-b border-primary/5",
244
+ className
245
+ ),
246
+ ...props
247
+ }
248
+ );
249
+ }
250
+ );
251
+ CardHeader.displayName = "CardHeader";
252
+ var CardTitle = React5.forwardRef(
253
+ ({ className, ...props }, ref) => {
254
+ return /* @__PURE__ */ jsxRuntime.jsx(
255
+ "h3",
256
+ {
257
+ ref,
258
+ "data-slot": "card-title",
259
+ className: cn("text-xl font-semibold leading-none", className),
260
+ ...props
261
+ }
262
+ );
263
+ }
264
+ );
265
+ CardTitle.displayName = "CardTitle";
266
+ var CardDescription = React5.forwardRef(
267
+ ({ className, ...props }, ref) => {
268
+ return /* @__PURE__ */ jsxRuntime.jsx(
269
+ "p",
270
+ {
271
+ ref,
272
+ "data-slot": "card-description",
273
+ className: cn("text-sm text-muted-foreground", className),
274
+ ...props
275
+ }
276
+ );
277
+ }
278
+ );
279
+ CardDescription.displayName = "CardDescription";
280
+ var CardAction = React5.forwardRef(
281
+ ({ className, ...props }, ref) => {
282
+ return /* @__PURE__ */ jsxRuntime.jsx(
283
+ "div",
284
+ {
285
+ ref,
286
+ "data-slot": "card-action",
287
+ className: cn("flex items-center justify-end", className),
288
+ ...props
289
+ }
290
+ );
291
+ }
292
+ );
293
+ CardAction.displayName = "CardAction";
294
+ var CardContent = React5.forwardRef(
295
+ ({ className, ...props }, ref) => {
296
+ return /* @__PURE__ */ jsxRuntime.jsx(
297
+ "div",
298
+ {
299
+ ref,
300
+ "data-slot": "card-content",
301
+ className: cn("p-6", className),
302
+ ...props
303
+ }
304
+ );
305
+ }
306
+ );
307
+ CardContent.displayName = "CardContent";
308
+ var CardFooter = React5.forwardRef(
309
+ ({ className, ...props }, ref) => {
310
+ return /* @__PURE__ */ jsxRuntime.jsx(
311
+ "div",
312
+ {
313
+ ref,
314
+ "data-slot": "card-footer",
315
+ className: cn(
316
+ "flex items-center px-6 py-4 border-t border-primary/5 bg-primary/5",
317
+ className
318
+ ),
319
+ ...props
320
+ }
321
+ );
322
+ }
323
+ );
324
+ 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",
327
+ {
328
+ variants: {
329
+ 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"
334
+ }
335
+ },
336
+ defaultVariants: {
337
+ variant: "info"
338
+ }
339
+ }
340
+ );
341
+ var Alert = React5.forwardRef(
342
+ ({ className, variant = "info", role = "alert", ...props }, ref) => {
343
+ return /* @__PURE__ */ jsxRuntime.jsx(
344
+ "div",
345
+ {
346
+ ref,
347
+ role,
348
+ "data-slot": `alert.${variant}`,
349
+ className: cn(alertVariants({ variant }), className),
350
+ ...props
351
+ }
352
+ );
353
+ }
354
+ );
355
+ Alert.displayName = "Alert";
356
+ var AlertTitle = React5.forwardRef(
357
+ ({ className, ...props }, ref) => {
358
+ return /* @__PURE__ */ jsxRuntime.jsx(
359
+ "h5",
360
+ {
361
+ ref,
362
+ "data-slot": "alert-title",
363
+ className: cn(
364
+ "mb-1 text-sm font-semibold leading-tight tracking-tight",
365
+ className
366
+ ),
367
+ ...props
368
+ }
369
+ );
370
+ }
371
+ );
372
+ AlertTitle.displayName = "AlertTitle";
373
+ var AlertDescription = React5.forwardRef(
374
+ ({ className, ...props }, ref) => {
375
+ return /* @__PURE__ */ jsxRuntime.jsx(
376
+ "div",
377
+ {
378
+ ref,
379
+ "data-slot": "alert-description",
380
+ className: cn("text-sm leading-relaxed", className),
381
+ ...props
382
+ }
383
+ );
384
+ }
385
+ );
386
+ AlertDescription.displayName = "AlertDescription";
387
+ function Separator({
388
+ className,
389
+ orientation = "horizontal",
390
+ decorative = true,
391
+ ...props
392
+ }) {
393
+ return /* @__PURE__ */ jsxRuntime.jsx(
394
+ SeparatorPrimitive__namespace.Root,
395
+ {
396
+ "data-slot": "separator",
397
+ decorative,
398
+ orientation,
399
+ className: cn(
400
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
401
+ className
402
+ ),
403
+ ...props
404
+ }
405
+ );
406
+ }
407
+ var Skeleton = React5__namespace.forwardRef(
408
+ ({ className, ...props }, ref) => {
409
+ return /* @__PURE__ */ jsxRuntime.jsx(
410
+ "div",
411
+ {
412
+ ref,
413
+ "data-slot": "skeleton",
414
+ "aria-hidden": "true",
415
+ className: cn(
416
+ "bg-primary/5 animate-pulse rounded-none motion-reduce:animate-none",
417
+ className
418
+ ),
419
+ ...props
420
+ }
421
+ );
422
+ }
423
+ );
424
+ Skeleton.displayName = "Skeleton";
425
+ var progressVariants = classVarianceAuthority.cva("h-full rounded-none transition-all", {
426
+ variants: {
427
+ variant: {
428
+ default: "bg-primary-500",
429
+ success: "bg-green-500",
430
+ error: "bg-destructive"
431
+ }
432
+ },
433
+ defaultVariants: {
434
+ variant: "default"
435
+ }
436
+ });
437
+ var Progress = React5__namespace.forwardRef(
438
+ ({
439
+ value,
440
+ max = 100,
441
+ variant = "default",
442
+ className,
443
+ "aria-label": ariaLabel,
444
+ ...props
445
+ }, ref) => {
446
+ const clampedValue = Math.min(Math.max(0, value), max);
447
+ const percentage = clampedValue / max * 100;
448
+ return /* @__PURE__ */ jsxRuntime.jsx(
449
+ "div",
450
+ {
451
+ ref,
452
+ role: "progressbar",
453
+ "aria-valuenow": clampedValue,
454
+ "aria-valuemin": 0,
455
+ "aria-valuemax": max,
456
+ "aria-label": ariaLabel || `Progress: ${Math.round(percentage)}%`,
457
+ className: cn(
458
+ "relative h-2 w-full overflow-hidden rounded-none bg-accent",
459
+ className
460
+ ),
461
+ ...props,
462
+ children: /* @__PURE__ */ jsxRuntime.jsx(
463
+ "div",
464
+ {
465
+ className: cn(progressVariants({ variant })),
466
+ style: {
467
+ width: `${percentage}%`,
468
+ transition: "width 300ms linear"
469
+ }
470
+ }
471
+ )
472
+ }
473
+ );
474
+ }
475
+ );
476
+ Progress.displayName = "Progress";
477
+ var Checkbox = React5.forwardRef(({ className, indeterminate, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
478
+ CheckboxPrimitive__namespace.Root,
479
+ {
480
+ ref,
481
+ "data-slot": "checkbox",
482
+ 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",
484
+ className
485
+ ),
486
+ ...props,
487
+ children: /* @__PURE__ */ jsxRuntime.jsx(
488
+ CheckboxPrimitive__namespace.Indicator,
489
+ {
490
+ 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" })
492
+ }
493
+ )
494
+ }
495
+ ));
496
+ Checkbox.displayName = "Checkbox";
497
+ var RadioGroup = React5.forwardRef(({ className, ...props }, ref) => {
498
+ return /* @__PURE__ */ jsxRuntime.jsx(
499
+ RadioGroupPrimitive__namespace.Root,
500
+ {
501
+ className: cn("grid gap-2", className),
502
+ ...props,
503
+ ref,
504
+ "data-slot": "radio-group"
505
+ }
506
+ );
507
+ });
508
+ RadioGroup.displayName = "RadioGroup";
509
+ var RadioGroupItem = React5.forwardRef(({ className, ...props }, ref) => {
510
+ return /* @__PURE__ */ jsxRuntime.jsx(
511
+ RadioGroupPrimitive__namespace.Item,
512
+ {
513
+ ref,
514
+ "data-slot": "radio-group-item",
515
+ 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]",
517
+ className
518
+ ),
519
+ ...props,
520
+ children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Indicator, {})
521
+ }
522
+ );
523
+ });
524
+ RadioGroupItem.displayName = "RadioGroupItem";
525
+ function Switch({ className, ...props }) {
526
+ return /* @__PURE__ */ jsxRuntime.jsx(
527
+ reactSwitch.Root,
528
+ {
529
+ "data-slot": "switch",
530
+ 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",
534
+ className
535
+ ),
536
+ ...props,
537
+ children: /* @__PURE__ */ jsxRuntime.jsx(
538
+ reactSwitch.Thumb,
539
+ {
540
+ "data-slot": "switch-thumb",
541
+ 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"
543
+ )
544
+ }
545
+ )
546
+ }
547
+ );
548
+ }
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,
556
+ {
557
+ ref,
558
+ "data-slot": "accordion-item",
559
+ className: cn("border-b", className),
560
+ ...props
561
+ }
562
+ )
563
+ );
564
+ 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,
568
+ {
569
+ ref,
570
+ "data-slot": "accordion-trigger",
571
+ className: cn(
572
+ "flex flex-1 items-center justify-between py-4 font-medium transition-all duration-150 hover:underline [&[data-state=open]>svg]:rotate-180",
573
+ className
574
+ ),
575
+ ...props,
576
+ children: [
577
+ children,
578
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-150" })
579
+ ]
580
+ }
581
+ ) })
582
+ );
583
+ AccordionTrigger.displayName = AccordionPrimitive__namespace.Trigger.displayName;
584
+ var AccordionContent = React5.forwardRef(
585
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
586
+ AccordionPrimitive__namespace.Content,
587
+ {
588
+ ref,
589
+ "data-slot": "accordion-content",
590
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
591
+ ...props,
592
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pb-4 pt-0", className), children })
593
+ }
594
+ )
595
+ );
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",
599
+ {
600
+ variants: {
601
+ size: {
602
+ sm: "h-8 w-8",
603
+ md: "h-10 w-10",
604
+ lg: "h-12 w-12",
605
+ xl: "h-16 w-16",
606
+ "2xl": "h-20 w-20"
607
+ }
608
+ },
609
+ defaultVariants: {
610
+ size: "md"
611
+ }
612
+ }
613
+ );
614
+ var fallbackTextSizeMap = {
615
+ sm: "text-xs",
616
+ // 12px for 32px avatar
617
+ md: "text-sm",
618
+ // 14px for 40px avatar
619
+ lg: "text-base",
620
+ // 16px for 48px avatar
621
+ xl: "text-lg",
622
+ // 18px for 64px avatar
623
+ "2xl": "text-2xl"
624
+ // 24px for 80px avatar
625
+ };
626
+ var AvatarSizeContext = React5.createContext("md");
627
+ var Avatar = React5.forwardRef(
628
+ ({ className, size = "md", ...props }, ref) => {
629
+ return /* @__PURE__ */ jsxRuntime.jsx(AvatarSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsxRuntime.jsx(
630
+ reactAvatar.Root,
631
+ {
632
+ ref,
633
+ "data-slot": "avatar",
634
+ className: cn(avatarVariants({ size }), className),
635
+ ...props
636
+ }
637
+ ) });
638
+ }
639
+ );
640
+ Avatar.displayName = "Avatar";
641
+ var AvatarImage = React5.forwardRef(
642
+ ({ className, ...props }, ref) => {
643
+ return /* @__PURE__ */ jsxRuntime.jsx(
644
+ reactAvatar.Image,
645
+ {
646
+ ref,
647
+ "data-slot": "avatar-image",
648
+ className: cn("aspect-square size-full", className),
649
+ ...props
650
+ }
651
+ );
652
+ }
653
+ );
654
+ AvatarImage.displayName = "AvatarImage";
655
+ var AvatarFallback = React5.forwardRef(
656
+ ({ className, children, ...props }, ref) => {
657
+ const size = React5.useContext(AvatarSizeContext) || "md";
658
+ const textSize = fallbackTextSizeMap[size];
659
+ return /* @__PURE__ */ jsxRuntime.jsx(
660
+ reactAvatar.Fallback,
661
+ {
662
+ ref,
663
+ "data-slot": "avatar-fallback",
664
+ className: cn(
665
+ "bg-primary/5 text-muted-foreground flex size-full items-center justify-center rounded-none font-medium",
666
+ textSize,
667
+ className
668
+ ),
669
+ ...props,
670
+ children
671
+ }
672
+ );
673
+ }
674
+ );
675
+ AvatarFallback.displayName = "AvatarFallback";
676
+ var Tabs = reactTabs.Root;
677
+ var TabsList = React5.forwardRef(
678
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
679
+ reactTabs.List,
680
+ {
681
+ ref,
682
+ "data-slot": "tabs-list",
683
+ className: cn(
684
+ "inline-flex h-10 items-center justify-center gap-1 rounded-none p-0 text-muted-foreground",
685
+ className
686
+ ),
687
+ ...props
688
+ }
689
+ )
690
+ );
691
+ TabsList.displayName = reactTabs.List.displayName;
692
+ var TabsTrigger = React5.forwardRef(
693
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
694
+ reactTabs.Trigger,
695
+ {
696
+ ref,
697
+ "data-slot": "tabs-trigger",
698
+ 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",
700
+ className
701
+ ),
702
+ ...props
703
+ }
704
+ )
705
+ );
706
+ TabsTrigger.displayName = reactTabs.Trigger.displayName;
707
+ var TabsContent = React5.forwardRef(
708
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
709
+ reactTabs.Content,
710
+ {
711
+ ref,
712
+ "data-slot": "tabs-content",
713
+ className: cn(
714
+ "mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2",
715
+ className
716
+ ),
717
+ ...props
718
+ }
719
+ )
720
+ );
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) => {
751
+ const portalContainer = usePortalContainer();
752
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
753
+ PopoverPrimitive__namespace.Content,
754
+ {
755
+ ref,
756
+ align,
757
+ sideOffset,
758
+ "data-slot": "popover-content",
759
+ 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]",
761
+ className
762
+ ),
763
+ ...props
764
+ }
765
+ ) });
766
+ });
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,
774
+ {
775
+ ref,
776
+ "data-slot": "dialog-overlay",
777
+ className: cn(
778
+ "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
+ className
780
+ ),
781
+ ...props
782
+ }
783
+ ));
784
+ DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
785
+ var dialogContentVariants = classVarianceAuthority.cva("", {
786
+ variants: {
787
+ size: {
788
+ sm: "max-w-sm",
789
+ md: "max-w-lg",
790
+ lg: "max-w-2xl",
791
+ xl: "max-w-4xl",
792
+ full: "max-w-[calc(100vw-2rem)] sm:max-w-[calc(100vw-4rem)]"
793
+ }
794
+ },
795
+ defaultVariants: {
796
+ size: "md"
797
+ }
798
+ });
799
+ var DialogContent = React5.forwardRef(({ className, children, size, ...props }, ref) => {
800
+ 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,
805
+ {
806
+ ref,
807
+ "data-slot": "dialog-content",
808
+ 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%]",
810
+ dialogContentVariants({ size }),
811
+ className
812
+ ),
813
+ ...props,
814
+ children: [
815
+ children,
816
+ /* @__PURE__ */ jsxRuntime.jsxs(
817
+ DialogPrimitive__namespace.Close,
818
+ {
819
+ "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",
821
+ children: [
822
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
823
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
824
+ ]
825
+ }
826
+ )
827
+ ]
828
+ }
829
+ )
830
+ ] });
831
+ });
832
+ DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
833
+ var DialogHeader = React5.forwardRef(
834
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
835
+ "div",
836
+ {
837
+ ref,
838
+ className: cn(
839
+ "flex flex-col space-y-1.5 text-center sm:text-left",
840
+ className
841
+ ),
842
+ ...props
843
+ }
844
+ )
845
+ );
846
+ DialogHeader.displayName = "DialogHeader";
847
+ var DialogFooter = React5.forwardRef(
848
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
849
+ "div",
850
+ {
851
+ ref,
852
+ className: cn(
853
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
854
+ className
855
+ ),
856
+ ...props
857
+ }
858
+ )
859
+ );
860
+ DialogFooter.displayName = "DialogFooter";
861
+ var DialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
862
+ DialogPrimitive__namespace.Title,
863
+ {
864
+ ref,
865
+ className: cn(
866
+ "text-lg font-semibold leading-none tracking-tight text-foreground",
867
+ className
868
+ ),
869
+ ...props
870
+ }
871
+ ));
872
+ DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
873
+ var DialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
874
+ DialogPrimitive__namespace.Description,
875
+ {
876
+ ref,
877
+ className: cn("text-sm text-muted-foreground", className),
878
+ ...props
879
+ }
880
+ ));
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,
887
+ {
888
+ ref,
889
+ className: cn(
890
+ "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
+ className
892
+ ),
893
+ ...props
894
+ }
895
+ ));
896
+ AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
897
+ var AlertDialogContent = React5.forwardRef(({ className, ...props }, ref) => {
898
+ 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,
903
+ {
904
+ ref,
905
+ 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%]",
907
+ className
908
+ ),
909
+ ...props
910
+ }
911
+ )
912
+ ] });
913
+ });
914
+ AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.displayName;
915
+ var AlertDialogHeader = React5.forwardRef(
916
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
917
+ "div",
918
+ {
919
+ ref,
920
+ className: cn(
921
+ "flex flex-col space-y-2 text-center sm:text-left",
922
+ className
923
+ ),
924
+ ...props
925
+ }
926
+ )
927
+ );
928
+ AlertDialogHeader.displayName = "AlertDialogHeader";
929
+ var AlertDialogFooter = React5.forwardRef(
930
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
931
+ "div",
932
+ {
933
+ ref,
934
+ className: cn(
935
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
936
+ className
937
+ ),
938
+ ...props
939
+ }
940
+ )
941
+ );
942
+ AlertDialogFooter.displayName = "AlertDialogFooter";
943
+ var AlertDialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
944
+ AlertDialogPrimitive__namespace.Title,
945
+ {
946
+ ref,
947
+ className: cn(
948
+ "text-lg font-semibold leading-none tracking-tight text-foreground",
949
+ className
950
+ ),
951
+ ...props
952
+ }
953
+ ));
954
+ AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
955
+ var AlertDialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
956
+ AlertDialogPrimitive__namespace.Description,
957
+ {
958
+ ref,
959
+ className: cn("text-sm text-muted-foreground", className),
960
+ ...props
961
+ }
962
+ ));
963
+ AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
964
+ var AlertDialogAction = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
965
+ AlertDialogPrimitive__namespace.Action,
966
+ {
967
+ ref,
968
+ className: cn(buttonVariants({ variant: "destructive" }), className),
969
+ ...props,
970
+ children
971
+ }
972
+ ));
973
+ AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
974
+ var AlertDialogCancel = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
975
+ AlertDialogPrimitive__namespace.Cancel,
976
+ {
977
+ ref,
978
+ className: cn(
979
+ buttonVariants({ variant: "outline" }),
980
+ "mt-2 sm:mt-0",
981
+ className
982
+ ),
983
+ ...props,
984
+ children
985
+ }
986
+ ));
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,
996
+ {
997
+ ref,
998
+ 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",
1000
+ inset && "pl-8",
1001
+ className
1002
+ ),
1003
+ ...props,
1004
+ children: [
1005
+ children,
1006
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "ml-auto" })
1007
+ ]
1008
+ }
1009
+ ));
1010
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
1011
+ var DropdownMenuSubContent = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1012
+ DropdownMenuPrimitive__namespace.SubContent,
1013
+ {
1014
+ ref,
1015
+ 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]",
1017
+ className
1018
+ ),
1019
+ ...props
1020
+ }
1021
+ ));
1022
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
1023
+ var DropdownMenuContent = React5__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
1024
+ const portalContainer = usePortalContainer();
1025
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
1026
+ DropdownMenuPrimitive__namespace.Content,
1027
+ {
1028
+ ref,
1029
+ sideOffset,
1030
+ 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]",
1032
+ className
1033
+ ),
1034
+ ...props
1035
+ }
1036
+ ) });
1037
+ });
1038
+ DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
1039
+ var DropdownMenuItem = React5__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1040
+ DropdownMenuPrimitive__namespace.Item,
1041
+ {
1042
+ ref,
1043
+ 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",
1045
+ inset && "pl-8",
1046
+ className
1047
+ ),
1048
+ ...props
1049
+ }
1050
+ ));
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,
1054
+ {
1055
+ ref,
1056
+ 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",
1058
+ className
1059
+ ),
1060
+ checked,
1061
+ ...props,
1062
+ 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" }) }) }),
1064
+ children
1065
+ ]
1066
+ }
1067
+ ));
1068
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
1069
+ var DropdownMenuRadioItem = React5__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1070
+ DropdownMenuPrimitive__namespace.RadioItem,
1071
+ {
1072
+ ref,
1073
+ 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",
1075
+ className
1076
+ ),
1077
+ ...props,
1078
+ 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" }) }) }),
1080
+ children
1081
+ ]
1082
+ }
1083
+ ));
1084
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
1085
+ var DropdownMenuLabel = React5__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1086
+ DropdownMenuPrimitive__namespace.Label,
1087
+ {
1088
+ ref,
1089
+ className: cn(
1090
+ "px-2 py-1.5 text-sm font-semibold",
1091
+ inset && "pl-8",
1092
+ className
1093
+ ),
1094
+ ...props
1095
+ }
1096
+ ));
1097
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
1098
+ var DropdownMenuSeparator = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1099
+ DropdownMenuPrimitive__namespace.Separator,
1100
+ {
1101
+ ref,
1102
+ className: cn("-mx-1 my-1 h-px bg-primary/5", className),
1103
+ ...props
1104
+ }
1105
+ ));
1106
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive__namespace.Separator.displayName;
1107
+ var DropdownMenuShortcut = React5__namespace.forwardRef(({ className, ...props }, ref) => {
1108
+ return /* @__PURE__ */ jsxRuntime.jsx(
1109
+ "span",
1110
+ {
1111
+ ref,
1112
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
1113
+ ...props
1114
+ }
1115
+ );
1116
+ });
1117
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1118
+ function Select({ ...props }) {
1119
+ return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Root, { "data-slot": "select", ...props });
1120
+ }
1121
+ function SelectGroup({
1122
+ ...props
1123
+ }) {
1124
+ return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Group, { "data-slot": "select-group", ...props });
1125
+ }
1126
+ function SelectValue({
1127
+ ...props
1128
+ }) {
1129
+ return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Value, { "data-slot": "select-value", ...props });
1130
+ }
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",
1133
+ {
1134
+ variants: {
1135
+ size: {
1136
+ sm: "h-8 text-sm",
1137
+ default: "h-10 text-sm",
1138
+ lg: "h-11 text-base"
1139
+ }
1140
+ },
1141
+ defaultVariants: {
1142
+ size: "default"
1143
+ }
1144
+ }
1145
+ );
1146
+ var SelectTrigger = React5.forwardRef(({ className, size, children, ...props }, ref) => {
1147
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1148
+ SelectPrimitive__namespace.Trigger,
1149
+ {
1150
+ ref,
1151
+ "data-slot": "select-trigger",
1152
+ className: cn(selectTriggerVariants({ size, className })),
1153
+ ...props,
1154
+ children: [
1155
+ children,
1156
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4 opacity-50" }) })
1157
+ ]
1158
+ }
1159
+ );
1160
+ });
1161
+ SelectTrigger.displayName = "SelectTrigger";
1162
+ function SelectContent({
1163
+ className,
1164
+ children,
1165
+ position = "popper",
1166
+ ...props
1167
+ }) {
1168
+ const portalContainer = usePortalContainer();
1169
+ return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
1170
+ SelectPrimitive__namespace.Content,
1171
+ {
1172
+ "data-slot": "select-content",
1173
+ 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",
1175
+ 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
+ className
1177
+ ),
1178
+ position,
1179
+ ...props,
1180
+ children: [
1181
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
1182
+ /* @__PURE__ */ jsxRuntime.jsx(
1183
+ SelectPrimitive__namespace.Viewport,
1184
+ {
1185
+ className: cn(
1186
+ "p-1",
1187
+ position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"
1188
+ ),
1189
+ children
1190
+ }
1191
+ ),
1192
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
1193
+ ]
1194
+ }
1195
+ ) });
1196
+ }
1197
+ function SelectLabel({
1198
+ className,
1199
+ ...props
1200
+ }) {
1201
+ return /* @__PURE__ */ jsxRuntime.jsx(
1202
+ SelectPrimitive__namespace.Label,
1203
+ {
1204
+ "data-slot": "select-label",
1205
+ className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
1206
+ ...props
1207
+ }
1208
+ );
1209
+ }
1210
+ function SelectItem({
1211
+ className,
1212
+ children,
1213
+ ...props
1214
+ }) {
1215
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1216
+ SelectPrimitive__namespace.Item,
1217
+ {
1218
+ "data-slot": "select-item",
1219
+ 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",
1221
+ className
1222
+ ),
1223
+ ...props,
1224
+ 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 })
1227
+ ]
1228
+ }
1229
+ );
1230
+ }
1231
+ function SelectSeparator({
1232
+ className,
1233
+ ...props
1234
+ }) {
1235
+ return /* @__PURE__ */ jsxRuntime.jsx(
1236
+ SelectPrimitive__namespace.Separator,
1237
+ {
1238
+ "data-slot": "select-separator",
1239
+ className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
1240
+ ...props
1241
+ }
1242
+ );
1243
+ }
1244
+ function SelectScrollUpButton({
1245
+ className,
1246
+ ...props
1247
+ }) {
1248
+ return /* @__PURE__ */ jsxRuntime.jsx(
1249
+ SelectPrimitive__namespace.ScrollUpButton,
1250
+ {
1251
+ "data-slot": "select-scroll-up-button",
1252
+ className: cn(
1253
+ "flex cursor-default items-center justify-center py-1",
1254
+ className
1255
+ ),
1256
+ ...props,
1257
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "size-4" })
1258
+ }
1259
+ );
1260
+ }
1261
+ function SelectScrollDownButton({
1262
+ className,
1263
+ ...props
1264
+ }) {
1265
+ return /* @__PURE__ */ jsxRuntime.jsx(
1266
+ SelectPrimitive__namespace.ScrollDownButton,
1267
+ {
1268
+ "data-slot": "select-scroll-down-button",
1269
+ className: cn(
1270
+ "flex cursor-default items-center justify-center py-1",
1271
+ className
1272
+ ),
1273
+ ...props,
1274
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4" })
1275
+ }
1276
+ );
1277
+ }
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,
1284
+ {
1285
+ className: cn(
1286
+ "fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",
1287
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1288
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1289
+ className
1290
+ ),
1291
+ ...props,
1292
+ ref
1293
+ }
1294
+ ));
1295
+ SheetOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
1296
+ var sheetVariants = classVarianceAuthority.cva(
1297
+ "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
+ {
1299
+ variants: {
1300
+ 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"
1305
+ }
1306
+ },
1307
+ defaultVariants: {
1308
+ side: "right"
1309
+ }
1310
+ }
1311
+ );
1312
+ var SheetContent = React5__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => {
1313
+ 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,
1318
+ {
1319
+ ref,
1320
+ "data-slot": "sheet-content",
1321
+ className: cn(sheetVariants({ side }), className),
1322
+ ...props,
1323
+ children
1324
+ }
1325
+ )
1326
+ ] });
1327
+ });
1328
+ SheetContent.displayName = DialogPrimitive__namespace.Content.displayName;
1329
+ var SheetHeader = ({
1330
+ className,
1331
+ ...props
1332
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
1333
+ "div",
1334
+ {
1335
+ className: cn(
1336
+ "flex flex-col space-y-2 text-center sm:text-left",
1337
+ className
1338
+ ),
1339
+ ...props
1340
+ }
1341
+ );
1342
+ SheetHeader.displayName = "SheetHeader";
1343
+ var SheetFooter = ({
1344
+ className,
1345
+ ...props
1346
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
1347
+ "div",
1348
+ {
1349
+ className: cn(
1350
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
1351
+ className
1352
+ ),
1353
+ ...props
1354
+ }
1355
+ );
1356
+ SheetFooter.displayName = "SheetFooter";
1357
+ var SheetTitle = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1358
+ DialogPrimitive__namespace.Title,
1359
+ {
1360
+ ref,
1361
+ className: cn("text-lg font-semibold text-foreground", className),
1362
+ ...props
1363
+ }
1364
+ ));
1365
+ SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
1366
+ var SheetDescription = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1367
+ DialogPrimitive__namespace.Description,
1368
+ {
1369
+ ref,
1370
+ className: cn("text-sm text-muted-foreground", className),
1371
+ ...props
1372
+ }
1373
+ ));
1374
+ SheetDescription.displayName = DialogPrimitive__namespace.Description.displayName;
1375
+ var Command = React5.forwardRef(
1376
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1377
+ cmdk.Command,
1378
+ {
1379
+ ref,
1380
+ className: cn(
1381
+ "flex h-full w-full flex-col overflow-hidden rounded-none bg-background text-foreground",
1382
+ className
1383
+ ),
1384
+ ...props
1385
+ }
1386
+ )
1387
+ );
1388
+ Command.displayName = "Command";
1389
+ var CommandDialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1390
+ DialogPrimitive__namespace.Overlay,
1391
+ {
1392
+ ref,
1393
+ className: cn(
1394
+ "fixed inset-0 z-[99] bg-black/80 backdrop-blur-sm",
1395
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1396
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1397
+ "transition-opacity duration-200",
1398
+ className
1399
+ ),
1400
+ ...props
1401
+ }
1402
+ ));
1403
+ CommandDialogOverlay.displayName = "CommandDialogOverlay";
1404
+ var CommandDialog = ({ children, ...props }) => {
1405
+ 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,
1410
+ {
1411
+ "data-slot": "command-content",
1412
+ className: cn(
1413
+ // Position
1414
+ "fixed left-[50%] top-[50%] z-[100] translate-x-[-50%] translate-y-[-50%]",
1415
+ // Size - responsive
1416
+ "w-full max-w-lg",
1417
+ "max-h-[85vh]",
1418
+ // Slightly shorter than design spec to ensure safe area
1419
+ // Mobile adjustments
1420
+ "sm:max-w-lg",
1421
+ // 512px on desktop
1422
+ "max-w-full",
1423
+ // Full width on mobile
1424
+ // Spacing
1425
+ "m-4 sm:m-0",
1426
+ // 16px margin on mobile, no margin on desktop
1427
+ // Visual
1428
+ "overflow-hidden rounded-none border border-primary/5 bg-background shadow-xl",
1429
+ // Animation
1430
+ "duration-200",
1431
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
1432
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1433
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1434
+ "data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]"
1435
+ ),
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 })
1437
+ }
1438
+ )
1439
+ ] }) });
1440
+ };
1441
+ var CommandInput = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
1442
+ "div",
1443
+ {
1444
+ className: "flex items-center border-b border-primary/5 px-4",
1445
+ "cmdk-input-wrapper": "",
1446
+ 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,
1450
+ {
1451
+ ref,
1452
+ className: cn(
1453
+ // Size
1454
+ "flex h-12 w-full",
1455
+ // Visual
1456
+ "bg-transparent text-base",
1457
+ "outline-none",
1458
+ // Typography
1459
+ "placeholder:text-muted-foreground",
1460
+ // States
1461
+ "disabled:cursor-not-allowed disabled:opacity-50",
1462
+ // Prevent iOS zoom on focus
1463
+ "text-base md:text-sm",
1464
+ className
1465
+ ),
1466
+ ...props
1467
+ }
1468
+ )
1469
+ ]
1470
+ }
1471
+ ));
1472
+ CommandInput.displayName = "CommandInput";
1473
+ var CommandList = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1474
+ cmdk.Command.List,
1475
+ {
1476
+ ref,
1477
+ className: cn(
1478
+ // Scroll
1479
+ "max-h-[400px] overflow-y-auto overflow-x-hidden",
1480
+ // Spacing
1481
+ "p-2",
1482
+ className
1483
+ ),
1484
+ ...props
1485
+ }
1486
+ ));
1487
+ CommandList.displayName = "CommandList";
1488
+ var CommandEmpty = React5.forwardRef((props, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1489
+ cmdk.Command.Empty,
1490
+ {
1491
+ ref,
1492
+ className: "py-8 px-4 text-center text-sm text-muted-foreground",
1493
+ ...props
1494
+ }
1495
+ ));
1496
+ CommandEmpty.displayName = "CommandEmpty";
1497
+ var CommandGroup = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1498
+ cmdk.Command.Group,
1499
+ {
1500
+ ref,
1501
+ className: cn(
1502
+ // Spacing
1503
+ "space-y-1 mb-2",
1504
+ // Heading styling applied via parent Command className
1505
+ "[&_[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",
1506
+ className
1507
+ ),
1508
+ ...props
1509
+ }
1510
+ ));
1511
+ CommandGroup.displayName = "CommandGroup";
1512
+ var CommandSeparator = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1513
+ cmdk.Command.Separator,
1514
+ {
1515
+ ref,
1516
+ className: cn("h-px bg-border my-2", className),
1517
+ ...props
1518
+ }
1519
+ ));
1520
+ CommandSeparator.displayName = "CommandSeparator";
1521
+ var CommandItem = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1522
+ cmdk.Command.Item,
1523
+ {
1524
+ ref,
1525
+ className: cn(
1526
+ // Layout
1527
+ "relative flex cursor-pointer select-none items-center gap-3",
1528
+ // Size
1529
+ "min-h-[44px] sm:min-h-[36px]",
1530
+ // Flexible height with minimal touch targets
1531
+ // Spacing
1532
+ "px-3 py-2.5",
1533
+ // Visual
1534
+ "rounded-none text-base sm:text-sm outline-none",
1535
+ // Transitions
1536
+ "transition-all duration-200 ease-(--ease-premium)",
1537
+ // Hover state - shared dashboard hover treatment
1538
+ "hover-unified",
1539
+ // Selected/focused state (keyboard navigation)
1540
+ "aria-selected:bg-primary/5 aria-selected:text-primary",
1541
+ "data-[selected=true]:bg-primary/5 data-[selected=true]:text-primary",
1542
+ // Disabled state
1543
+ "data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
1544
+ className
1545
+ ),
1546
+ ...props
1547
+ }
1548
+ ));
1549
+ CommandItem.displayName = "CommandItem";
1550
+ var CommandShortcut = React5.forwardRef(
1551
+ ({ className, ...props }, ref) => {
1552
+ return /* @__PURE__ */ jsxRuntime.jsx(
1553
+ "span",
1554
+ {
1555
+ ref,
1556
+ className: cn(
1557
+ // Position
1558
+ "ml-auto",
1559
+ // Typography
1560
+ "text-xs font-mono",
1561
+ // Visual
1562
+ "text-muted-foreground bg-primary/5",
1563
+ "border border-primary/5 rounded-none",
1564
+ // Spacing
1565
+ "px-1.5 py-0.5",
1566
+ className
1567
+ ),
1568
+ ...props
1569
+ }
1570
+ );
1571
+ }
1572
+ );
1573
+ CommandShortcut.displayName = "CommandShortcut";
1574
+ var spinnerVariants = classVarianceAuthority.cva("animate-spin motion-reduce:animate-none", {
1575
+ variants: {
1576
+ size: {
1577
+ sm: "h-4 w-4",
1578
+ md: "h-5 w-5",
1579
+ lg: "h-6 w-6"
1580
+ }
1581
+ },
1582
+ defaultVariants: {
1583
+ size: "md"
1584
+ }
1585
+ });
1586
+ var Spinner = React5.forwardRef(
1587
+ ({ size = "md", className, "aria-label": ariaLabel = "Loading", ...props }, ref) => {
1588
+ return /* @__PURE__ */ jsxRuntime.jsx(
1589
+ lucideReact.Loader2,
1590
+ {
1591
+ ref,
1592
+ role: "status",
1593
+ "aria-label": ariaLabel,
1594
+ className: cn(spinnerVariants({ size }), className),
1595
+ ...props
1596
+ }
1597
+ );
1598
+ }
1599
+ );
1600
+ Spinner.displayName = "Spinner";
1601
+ function Toaster({ theme = "system", ...props }) {
1602
+ return /* @__PURE__ */ jsxRuntime.jsx(
1603
+ sonner.Toaster,
1604
+ {
1605
+ theme,
1606
+ className: "toaster group !bg-transparent !overflow-visible !z-[9999]",
1607
+ "data-slot": "toaster",
1608
+ toastOptions: {
1609
+ classNames: {
1610
+ description: "text-muted-foreground"
1611
+ }
1612
+ },
1613
+ 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" })
1619
+ },
1620
+ 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%))",
1624
+ "--border-radius": "0px"
1625
+ },
1626
+ ...props
1627
+ }
1628
+ );
1629
+ }
1630
+ var Table = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
1631
+ "table",
1632
+ {
1633
+ ref,
1634
+ className: cn("w-full caption-bottom text-sm", className),
1635
+ ...props
1636
+ }
1637
+ ) }));
1638
+ 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 }));
1640
+ TableHeader.displayName = "TableHeader";
1641
+ var TableBody = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1642
+ "tbody",
1643
+ {
1644
+ ref,
1645
+ className: cn("[&_tr:last-child]:border-0", className),
1646
+ ...props
1647
+ }
1648
+ ));
1649
+ TableBody.displayName = "TableBody";
1650
+ var TableFooter = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1651
+ "tfoot",
1652
+ {
1653
+ ref,
1654
+ className: cn("border-t border-primary/5 font-medium [&>tr]:last:border-b-0", className),
1655
+ ...props
1656
+ }
1657
+ ));
1658
+ TableFooter.displayName = "TableFooter";
1659
+ var TableRow = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1660
+ "tr",
1661
+ {
1662
+ ref,
1663
+ className: cn(
1664
+ "border-b border-primary/5 transition-colors data-[state=selected]:bg-primary/5",
1665
+ className
1666
+ ),
1667
+ ...props
1668
+ }
1669
+ ));
1670
+ TableRow.displayName = "TableRow";
1671
+ var TableHead = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1672
+ "th",
1673
+ {
1674
+ ref,
1675
+ className: cn(
1676
+ "h-11 px-4 text-left align-middle font-semibold text-xs text-foreground uppercase tracking-wider [&:has([role=checkbox])]:pr-0",
1677
+ className
1678
+ ),
1679
+ ...props
1680
+ }
1681
+ ));
1682
+ TableHead.displayName = "TableHead";
1683
+ var TableCell = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1684
+ "td",
1685
+ {
1686
+ ref,
1687
+ className: cn(
1688
+ "px-4 py-3 align-middle [&:has([role=checkbox])]:pr-0",
1689
+ className
1690
+ ),
1691
+ ...props
1692
+ }
1693
+ ));
1694
+ TableCell.displayName = "TableCell";
1695
+ var TableCaption = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1696
+ "caption",
1697
+ {
1698
+ ref,
1699
+ className: cn("mt-4 text-sm text-muted-foreground", className),
1700
+ ...props
1701
+ }
1702
+ ));
1703
+ TableCaption.displayName = "TableCaption";
1704
+ function TableSearch({
1705
+ value,
1706
+ onChange,
1707
+ onClear,
1708
+ placeholder = "Filter records...",
1709
+ isLoading = false,
1710
+ inputRef
1711
+ }) {
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(
1715
+ "input",
1716
+ {
1717
+ ref: inputRef,
1718
+ type: "text",
1719
+ placeholder,
1720
+ value,
1721
+ onChange: (e) => onChange(e.target.value),
1722
+ "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"
1724
+ }
1725
+ ),
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(
1729
+ "button",
1730
+ {
1731
+ type: "button",
1732
+ onClick: onClear,
1733
+ className: "text-muted-foreground/60 hover:text-foreground transition-colors p-0.5 rounded-none hover:bg-primary/5",
1734
+ "aria-label": "Clear search",
1735
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3.5 h-3.5" })
1736
+ }
1737
+ )
1738
+ ] })
1739
+ ] });
1740
+ }
1741
+ function TableError({
1742
+ message = "An error occurred. Please try again."
1743
+ }) {
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 })
1747
+ ] });
1748
+ }
1749
+ 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..." })
1753
+ ] });
1754
+ }
1755
+ 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
+ ] })
1965
+ ] });
1966
+ }
1967
+ var GrayBar = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className });
1968
+ var TableSkeleton = ({
1969
+ columns = 5,
1970
+ rowCount = 8,
1971
+ hideWrapper = false,
1972
+ hideFooter = false
1973
+ }) => {
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]" })
1982
+ ] })
1983
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, colIdx)) }, rowIdx)) })
1984
+ ] }) }),
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]" })
1991
+ ] }),
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" })
1998
+ ] }),
1999
+ /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[120px]" })
2000
+ ] })
2001
+ ] }) })
2002
+ ] });
2003
+ if (hideWrapper) {
2004
+ return content;
2005
+ }
2006
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-wrapper rounded-none border border-primary/5 bg-card overflow-hidden", children: content });
2007
+ };
2008
+ 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; }
2261
+ });
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
+ //# sourceMappingURL=index.cjs.map