@skill-academy/uikit 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,4547 @@
1
+ // src/components/ui/utils.ts
2
+ import { clsx } from "clsx";
3
+ import { twMerge } from "tailwind-merge";
4
+ function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ // src/components/ui/use-mobile.ts
9
+ import * as React from "react";
10
+ var MOBILE_BREAKPOINT = 768;
11
+ function useIsMobile() {
12
+ const [isMobile, setIsMobile] = React.useState(
13
+ void 0
14
+ );
15
+ React.useEffect(() => {
16
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
17
+ const onChange = () => {
18
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
19
+ };
20
+ mql.addEventListener("change", onChange);
21
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
22
+ return () => mql.removeEventListener("change", onChange);
23
+ }, []);
24
+ return !!isMobile;
25
+ }
26
+
27
+ // src/components/ui/button.tsx
28
+ import * as React2 from "react";
29
+ import { Slot } from "@radix-ui/react-slot";
30
+ import { cva } from "class-variance-authority";
31
+ import { jsx, jsxs } from "react/jsx-runtime";
32
+ var buttonVariants = cva(
33
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
34
+ {
35
+ variants: {
36
+ variant: {
37
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
38
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
39
+ outline: "border bg-background text-foreground hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
40
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
41
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
42
+ link: "text-primary underline-offset-4 hover:underline"
43
+ },
44
+ size: {
45
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
46
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
47
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
48
+ icon: "size-9 rounded-md"
49
+ }
50
+ },
51
+ defaultVariants: {
52
+ variant: "default",
53
+ size: "default"
54
+ }
55
+ }
56
+ );
57
+ var Button = React2.forwardRef(
58
+ ({ className, variant, size, asChild = false, loading = false, disabled, children, ...props }, ref) => {
59
+ const Comp = asChild ? Slot : "button";
60
+ return /* @__PURE__ */ jsxs(
61
+ Comp,
62
+ {
63
+ "data-slot": "button",
64
+ className: cn(buttonVariants({ variant, size, className })),
65
+ ref,
66
+ disabled: disabled ?? loading,
67
+ "aria-busy": loading,
68
+ ...props,
69
+ children: [
70
+ loading && /* @__PURE__ */ jsx("span", { className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent", "aria-hidden": true }),
71
+ children
72
+ ]
73
+ }
74
+ );
75
+ }
76
+ );
77
+ Button.displayName = "Button";
78
+
79
+ // src/components/ui/input.tsx
80
+ import { jsx as jsx2 } from "react/jsx-runtime";
81
+ function Input({ className, type, ...props }) {
82
+ return /* @__PURE__ */ jsx2(
83
+ "input",
84
+ {
85
+ type,
86
+ "data-slot": "input",
87
+ className: cn(
88
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] 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 md:text-sm",
89
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
90
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
91
+ className
92
+ ),
93
+ ...props
94
+ }
95
+ );
96
+ }
97
+
98
+ // src/components/ui/label.tsx
99
+ import * as LabelPrimitive from "@radix-ui/react-label";
100
+ import { jsx as jsx3 } from "react/jsx-runtime";
101
+ function Label({
102
+ className,
103
+ ...props
104
+ }) {
105
+ return /* @__PURE__ */ jsx3(
106
+ LabelPrimitive.Root,
107
+ {
108
+ "data-slot": "label",
109
+ className: cn(
110
+ "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",
111
+ className
112
+ ),
113
+ ...props
114
+ }
115
+ );
116
+ }
117
+
118
+ // src/components/ui/textarea.tsx
119
+ import { jsx as jsx4 } from "react/jsx-runtime";
120
+ function Textarea({ className, ...props }) {
121
+ return /* @__PURE__ */ jsx4(
122
+ "textarea",
123
+ {
124
+ "data-slot": "textarea",
125
+ className: cn(
126
+ "resize-none border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
127
+ className
128
+ ),
129
+ ...props
130
+ }
131
+ );
132
+ }
133
+
134
+ // src/components/ui/checkbox.tsx
135
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
136
+ import { CheckIcon } from "lucide-react";
137
+ import { jsx as jsx5 } from "react/jsx-runtime";
138
+ function Checkbox({
139
+ className,
140
+ ...props
141
+ }) {
142
+ return /* @__PURE__ */ jsx5(
143
+ CheckboxPrimitive.Root,
144
+ {
145
+ "data-slot": "checkbox",
146
+ className: cn(
147
+ "peer border bg-input-background dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
148
+ className
149
+ ),
150
+ ...props,
151
+ children: /* @__PURE__ */ jsx5(
152
+ CheckboxPrimitive.Indicator,
153
+ {
154
+ "data-slot": "checkbox-indicator",
155
+ className: "flex items-center justify-center text-current transition-none",
156
+ children: /* @__PURE__ */ jsx5(CheckIcon, { className: "size-3.5" })
157
+ }
158
+ )
159
+ }
160
+ );
161
+ }
162
+
163
+ // src/components/ui/switch.tsx
164
+ import * as SwitchPrimitive from "@radix-ui/react-switch";
165
+ import { jsx as jsx6 } from "react/jsx-runtime";
166
+ function Switch({
167
+ className,
168
+ ...props
169
+ }) {
170
+ return /* @__PURE__ */ jsx6(
171
+ SwitchPrimitive.Root,
172
+ {
173
+ "data-slot": "switch",
174
+ className: cn(
175
+ "peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-switch-background focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
176
+ className
177
+ ),
178
+ ...props,
179
+ children: /* @__PURE__ */ jsx6(
180
+ SwitchPrimitive.Thumb,
181
+ {
182
+ "data-slot": "switch-thumb",
183
+ className: cn(
184
+ "bg-card dark:data-[state=unchecked]:bg-card-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
185
+ )
186
+ }
187
+ )
188
+ }
189
+ );
190
+ }
191
+
192
+ // src/components/ui/radio-group.tsx
193
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
194
+ import { CircleIcon } from "lucide-react";
195
+ import { jsx as jsx7 } from "react/jsx-runtime";
196
+ function RadioGroup({
197
+ className,
198
+ ...props
199
+ }) {
200
+ return /* @__PURE__ */ jsx7(
201
+ RadioGroupPrimitive.Root,
202
+ {
203
+ "data-slot": "radio-group",
204
+ className: cn("grid gap-3", className),
205
+ ...props
206
+ }
207
+ );
208
+ }
209
+ function RadioGroupItem({
210
+ className,
211
+ ...props
212
+ }) {
213
+ return /* @__PURE__ */ jsx7(
214
+ RadioGroupPrimitive.Item,
215
+ {
216
+ "data-slot": "radio-group-item",
217
+ className: cn(
218
+ "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
219
+ className
220
+ ),
221
+ ...props,
222
+ children: /* @__PURE__ */ jsx7(
223
+ RadioGroupPrimitive.Indicator,
224
+ {
225
+ "data-slot": "radio-group-indicator",
226
+ className: "relative flex items-center justify-center",
227
+ children: /* @__PURE__ */ jsx7(CircleIcon, { className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
228
+ }
229
+ )
230
+ }
231
+ );
232
+ }
233
+
234
+ // src/components/ui/select.tsx
235
+ import * as SelectPrimitive from "@radix-ui/react-select";
236
+ import {
237
+ CheckIcon as CheckIcon2,
238
+ ChevronDownIcon,
239
+ ChevronUpIcon
240
+ } from "lucide-react";
241
+ import { jsx as jsx8, jsxs as jsxs2 } from "react/jsx-runtime";
242
+ function Select({
243
+ ...props
244
+ }) {
245
+ return /* @__PURE__ */ jsx8(SelectPrimitive.Root, { "data-slot": "select", ...props });
246
+ }
247
+ function SelectGroup({
248
+ ...props
249
+ }) {
250
+ return /* @__PURE__ */ jsx8(SelectPrimitive.Group, { "data-slot": "select-group", ...props });
251
+ }
252
+ function SelectValue({
253
+ ...props
254
+ }) {
255
+ return /* @__PURE__ */ jsx8(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
256
+ }
257
+ function SelectTrigger({
258
+ className,
259
+ size = "default",
260
+ children,
261
+ ...props
262
+ }) {
263
+ return /* @__PURE__ */ jsxs2(
264
+ SelectPrimitive.Trigger,
265
+ {
266
+ "data-slot": "select-trigger",
267
+ "data-size": size,
268
+ className: cn(
269
+ "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-input-background px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
270
+ className
271
+ ),
272
+ ...props,
273
+ children: [
274
+ children,
275
+ /* @__PURE__ */ jsx8(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx8(ChevronDownIcon, { className: "size-4 opacity-50" }) })
276
+ ]
277
+ }
278
+ );
279
+ }
280
+ function SelectContent({
281
+ className,
282
+ children,
283
+ position = "popper",
284
+ ...props
285
+ }) {
286
+ return /* @__PURE__ */ jsx8(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs2(
287
+ SelectPrimitive.Content,
288
+ {
289
+ "data-slot": "select-content",
290
+ className: cn(
291
+ "bg-popover text-popover-foreground 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
292
+ 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",
293
+ className
294
+ ),
295
+ position,
296
+ ...props,
297
+ children: [
298
+ /* @__PURE__ */ jsx8(SelectScrollUpButton, {}),
299
+ /* @__PURE__ */ jsx8(
300
+ SelectPrimitive.Viewport,
301
+ {
302
+ className: cn(
303
+ "p-1",
304
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
305
+ ),
306
+ children
307
+ }
308
+ ),
309
+ /* @__PURE__ */ jsx8(SelectScrollDownButton, {})
310
+ ]
311
+ }
312
+ ) });
313
+ }
314
+ function SelectLabel({
315
+ className,
316
+ ...props
317
+ }) {
318
+ return /* @__PURE__ */ jsx8(
319
+ SelectPrimitive.Label,
320
+ {
321
+ "data-slot": "select-label",
322
+ className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
323
+ ...props
324
+ }
325
+ );
326
+ }
327
+ function SelectItem({
328
+ className,
329
+ children,
330
+ ...props
331
+ }) {
332
+ return /* @__PURE__ */ jsxs2(
333
+ SelectPrimitive.Item,
334
+ {
335
+ "data-slot": "select-item",
336
+ className: cn(
337
+ "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
338
+ className
339
+ ),
340
+ ...props,
341
+ children: [
342
+ /* @__PURE__ */ jsx8("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx8(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx8(CheckIcon2, { className: "size-4" }) }) }),
343
+ /* @__PURE__ */ jsx8(SelectPrimitive.ItemText, { children })
344
+ ]
345
+ }
346
+ );
347
+ }
348
+ function SelectSeparator({
349
+ className,
350
+ ...props
351
+ }) {
352
+ return /* @__PURE__ */ jsx8(
353
+ SelectPrimitive.Separator,
354
+ {
355
+ "data-slot": "select-separator",
356
+ className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
357
+ ...props
358
+ }
359
+ );
360
+ }
361
+ function SelectScrollUpButton({
362
+ className,
363
+ ...props
364
+ }) {
365
+ return /* @__PURE__ */ jsx8(
366
+ SelectPrimitive.ScrollUpButton,
367
+ {
368
+ "data-slot": "select-scroll-up-button",
369
+ className: cn(
370
+ "flex cursor-default items-center justify-center py-1",
371
+ className
372
+ ),
373
+ ...props,
374
+ children: /* @__PURE__ */ jsx8(ChevronUpIcon, { className: "size-4" })
375
+ }
376
+ );
377
+ }
378
+ function SelectScrollDownButton({
379
+ className,
380
+ ...props
381
+ }) {
382
+ return /* @__PURE__ */ jsx8(
383
+ SelectPrimitive.ScrollDownButton,
384
+ {
385
+ "data-slot": "select-scroll-down-button",
386
+ className: cn(
387
+ "flex cursor-default items-center justify-center py-1",
388
+ className
389
+ ),
390
+ ...props,
391
+ children: /* @__PURE__ */ jsx8(ChevronDownIcon, { className: "size-4" })
392
+ }
393
+ );
394
+ }
395
+
396
+ // src/components/ui/slider.tsx
397
+ import * as React3 from "react";
398
+ import * as SliderPrimitive from "@radix-ui/react-slider";
399
+ import { jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
400
+ function Slider({
401
+ className,
402
+ defaultValue,
403
+ value,
404
+ min = 0,
405
+ max = 100,
406
+ ...props
407
+ }) {
408
+ const _values = React3.useMemo(
409
+ () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
410
+ [value, defaultValue, min, max]
411
+ );
412
+ return /* @__PURE__ */ jsxs3(
413
+ SliderPrimitive.Root,
414
+ {
415
+ "data-slot": "slider",
416
+ defaultValue,
417
+ value,
418
+ min,
419
+ max,
420
+ className: cn(
421
+ "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",
422
+ className
423
+ ),
424
+ ...props,
425
+ children: [
426
+ /* @__PURE__ */ jsx9(
427
+ SliderPrimitive.Track,
428
+ {
429
+ "data-slot": "slider-track",
430
+ className: cn(
431
+ "bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-4 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"
432
+ ),
433
+ children: /* @__PURE__ */ jsx9(
434
+ SliderPrimitive.Range,
435
+ {
436
+ "data-slot": "slider-range",
437
+ className: cn(
438
+ "bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
439
+ )
440
+ }
441
+ )
442
+ }
443
+ ),
444
+ Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx9(
445
+ SliderPrimitive.Thumb,
446
+ {
447
+ "data-slot": "slider-thumb",
448
+ className: "border-primary bg-background ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"
449
+ },
450
+ index
451
+ ))
452
+ ]
453
+ }
454
+ );
455
+ }
456
+
457
+ // src/components/ui/toggle.tsx
458
+ import * as TogglePrimitive from "@radix-ui/react-toggle";
459
+ import { cva as cva2 } from "class-variance-authority";
460
+ import { jsx as jsx10 } from "react/jsx-runtime";
461
+ var toggleVariants = cva2(
462
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
463
+ {
464
+ variants: {
465
+ variant: {
466
+ default: "bg-transparent",
467
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
468
+ },
469
+ size: {
470
+ default: "h-9 px-2 min-w-9",
471
+ sm: "h-8 px-1.5 min-w-8",
472
+ lg: "h-10 px-2.5 min-w-10"
473
+ }
474
+ },
475
+ defaultVariants: {
476
+ variant: "default",
477
+ size: "default"
478
+ }
479
+ }
480
+ );
481
+ function Toggle({
482
+ className,
483
+ variant,
484
+ size,
485
+ ...props
486
+ }) {
487
+ return /* @__PURE__ */ jsx10(
488
+ TogglePrimitive.Root,
489
+ {
490
+ "data-slot": "toggle",
491
+ className: cn(toggleVariants({ variant, size, className })),
492
+ ...props
493
+ }
494
+ );
495
+ }
496
+
497
+ // src/components/ui/toggle-group.tsx
498
+ import * as React4 from "react";
499
+ import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
500
+ import { jsx as jsx11 } from "react/jsx-runtime";
501
+ var ToggleGroupContext = React4.createContext({
502
+ size: "default",
503
+ variant: "default"
504
+ });
505
+ function ToggleGroup({
506
+ className,
507
+ variant,
508
+ size,
509
+ children,
510
+ ...props
511
+ }) {
512
+ return /* @__PURE__ */ jsx11(
513
+ ToggleGroupPrimitive.Root,
514
+ {
515
+ "data-slot": "toggle-group",
516
+ "data-variant": variant,
517
+ "data-size": size,
518
+ className: cn(
519
+ "group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs",
520
+ className
521
+ ),
522
+ ...props,
523
+ children: /* @__PURE__ */ jsx11(ToggleGroupContext.Provider, { value: { variant, size }, children })
524
+ }
525
+ );
526
+ }
527
+ function ToggleGroupItem({
528
+ className,
529
+ children,
530
+ variant,
531
+ size,
532
+ ...props
533
+ }) {
534
+ const context = React4.useContext(ToggleGroupContext);
535
+ return /* @__PURE__ */ jsx11(
536
+ ToggleGroupPrimitive.Item,
537
+ {
538
+ "data-slot": "toggle-group-item",
539
+ "data-variant": context.variant || variant,
540
+ "data-size": context.size || size,
541
+ className: cn(
542
+ toggleVariants({
543
+ variant: context.variant || variant,
544
+ size: context.size || size
545
+ }),
546
+ "min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",
547
+ className
548
+ ),
549
+ ...props,
550
+ children
551
+ }
552
+ );
553
+ }
554
+
555
+ // src/components/ui/card.tsx
556
+ import { jsx as jsx12 } from "react/jsx-runtime";
557
+ function Card({ className, ...props }) {
558
+ return /* @__PURE__ */ jsx12(
559
+ "div",
560
+ {
561
+ "data-slot": "card",
562
+ className: cn(
563
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border",
564
+ className
565
+ ),
566
+ ...props
567
+ }
568
+ );
569
+ }
570
+ function CardHeader({ className, ...props }) {
571
+ return /* @__PURE__ */ jsx12(
572
+ "div",
573
+ {
574
+ "data-slot": "card-header",
575
+ className: cn(
576
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
577
+ className
578
+ ),
579
+ ...props
580
+ }
581
+ );
582
+ }
583
+ function CardTitle({ className, ...props }) {
584
+ return /* @__PURE__ */ jsx12(
585
+ "h4",
586
+ {
587
+ "data-slot": "card-title",
588
+ className: cn("leading-none", className),
589
+ ...props
590
+ }
591
+ );
592
+ }
593
+ function CardDescription({ className, ...props }) {
594
+ return /* @__PURE__ */ jsx12(
595
+ "p",
596
+ {
597
+ "data-slot": "card-description",
598
+ className: cn("text-muted-foreground", className),
599
+ ...props
600
+ }
601
+ );
602
+ }
603
+ function CardAction({ className, ...props }) {
604
+ return /* @__PURE__ */ jsx12(
605
+ "div",
606
+ {
607
+ "data-slot": "card-action",
608
+ className: cn(
609
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
610
+ className
611
+ ),
612
+ ...props
613
+ }
614
+ );
615
+ }
616
+ function CardContent({ className, ...props }) {
617
+ return /* @__PURE__ */ jsx12(
618
+ "div",
619
+ {
620
+ "data-slot": "card-content",
621
+ className: cn("px-6 [&:last-child]:pb-6", className),
622
+ ...props
623
+ }
624
+ );
625
+ }
626
+ function CardFooter({ className, ...props }) {
627
+ return /* @__PURE__ */ jsx12(
628
+ "div",
629
+ {
630
+ "data-slot": "card-footer",
631
+ className: cn("flex items-center px-6 pb-6 [.border-t]:pt-6", className),
632
+ ...props
633
+ }
634
+ );
635
+ }
636
+
637
+ // src/components/ui/dialog.tsx
638
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
639
+ import { XIcon } from "lucide-react";
640
+ import { jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
641
+ function Dialog({
642
+ ...props
643
+ }) {
644
+ return /* @__PURE__ */ jsx13(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
645
+ }
646
+ function DialogTrigger({
647
+ ...props
648
+ }) {
649
+ return /* @__PURE__ */ jsx13(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
650
+ }
651
+ function DialogPortal({
652
+ ...props
653
+ }) {
654
+ return /* @__PURE__ */ jsx13(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
655
+ }
656
+ function DialogClose({
657
+ ...props
658
+ }) {
659
+ return /* @__PURE__ */ jsx13(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
660
+ }
661
+ function DialogOverlay({
662
+ className,
663
+ ...props
664
+ }) {
665
+ return /* @__PURE__ */ jsx13(
666
+ DialogPrimitive.Overlay,
667
+ {
668
+ "data-slot": "dialog-overlay",
669
+ className: cn(
670
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
671
+ className
672
+ ),
673
+ ...props
674
+ }
675
+ );
676
+ }
677
+ function DialogContent({
678
+ className,
679
+ children,
680
+ ...props
681
+ }) {
682
+ return /* @__PURE__ */ jsxs4(DialogPortal, { "data-slot": "dialog-portal", children: [
683
+ /* @__PURE__ */ jsx13(DialogOverlay, {}),
684
+ /* @__PURE__ */ jsxs4(
685
+ DialogPrimitive.Content,
686
+ {
687
+ "data-slot": "dialog-content",
688
+ className: cn(
689
+ "bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
690
+ className
691
+ ),
692
+ ...props,
693
+ children: [
694
+ children,
695
+ /* @__PURE__ */ jsxs4(DialogPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [
696
+ /* @__PURE__ */ jsx13(XIcon, {}),
697
+ /* @__PURE__ */ jsx13("span", { className: "sr-only", children: "Close" })
698
+ ] })
699
+ ]
700
+ }
701
+ )
702
+ ] });
703
+ }
704
+ function DialogHeader({ className, ...props }) {
705
+ return /* @__PURE__ */ jsx13(
706
+ "div",
707
+ {
708
+ "data-slot": "dialog-header",
709
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
710
+ ...props
711
+ }
712
+ );
713
+ }
714
+ function DialogFooter({ className, ...props }) {
715
+ return /* @__PURE__ */ jsx13(
716
+ "div",
717
+ {
718
+ "data-slot": "dialog-footer",
719
+ className: cn(
720
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
721
+ className
722
+ ),
723
+ ...props
724
+ }
725
+ );
726
+ }
727
+ function DialogTitle({
728
+ className,
729
+ ...props
730
+ }) {
731
+ return /* @__PURE__ */ jsx13(
732
+ DialogPrimitive.Title,
733
+ {
734
+ "data-slot": "dialog-title",
735
+ className: cn("text-lg leading-none font-semibold", className),
736
+ ...props
737
+ }
738
+ );
739
+ }
740
+ function DialogDescription({
741
+ className,
742
+ ...props
743
+ }) {
744
+ return /* @__PURE__ */ jsx13(
745
+ DialogPrimitive.Description,
746
+ {
747
+ "data-slot": "dialog-description",
748
+ className: cn("text-muted-foreground text-sm", className),
749
+ ...props
750
+ }
751
+ );
752
+ }
753
+
754
+ // src/components/ui/alert-dialog.tsx
755
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
756
+ import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
757
+ function AlertDialog({
758
+ ...props
759
+ }) {
760
+ return /* @__PURE__ */ jsx14(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
761
+ }
762
+ function AlertDialogTrigger({
763
+ ...props
764
+ }) {
765
+ return /* @__PURE__ */ jsx14(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
766
+ }
767
+ function AlertDialogPortal({
768
+ ...props
769
+ }) {
770
+ return /* @__PURE__ */ jsx14(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
771
+ }
772
+ function AlertDialogOverlay({
773
+ className,
774
+ ...props
775
+ }) {
776
+ return /* @__PURE__ */ jsx14(
777
+ AlertDialogPrimitive.Overlay,
778
+ {
779
+ "data-slot": "alert-dialog-overlay",
780
+ className: cn(
781
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
782
+ className
783
+ ),
784
+ ...props
785
+ }
786
+ );
787
+ }
788
+ function AlertDialogContent({
789
+ className,
790
+ ...props
791
+ }) {
792
+ return /* @__PURE__ */ jsxs5(AlertDialogPortal, { children: [
793
+ /* @__PURE__ */ jsx14(AlertDialogOverlay, {}),
794
+ /* @__PURE__ */ jsx14(
795
+ AlertDialogPrimitive.Content,
796
+ {
797
+ "data-slot": "alert-dialog-content",
798
+ className: cn(
799
+ "bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
800
+ className
801
+ ),
802
+ ...props
803
+ }
804
+ )
805
+ ] });
806
+ }
807
+ function AlertDialogHeader({
808
+ className,
809
+ ...props
810
+ }) {
811
+ return /* @__PURE__ */ jsx14(
812
+ "div",
813
+ {
814
+ "data-slot": "alert-dialog-header",
815
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
816
+ ...props
817
+ }
818
+ );
819
+ }
820
+ function AlertDialogFooter({
821
+ className,
822
+ ...props
823
+ }) {
824
+ return /* @__PURE__ */ jsx14(
825
+ "div",
826
+ {
827
+ "data-slot": "alert-dialog-footer",
828
+ className: cn(
829
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
830
+ className
831
+ ),
832
+ ...props
833
+ }
834
+ );
835
+ }
836
+ function AlertDialogTitle({
837
+ className,
838
+ ...props
839
+ }) {
840
+ return /* @__PURE__ */ jsx14(
841
+ AlertDialogPrimitive.Title,
842
+ {
843
+ "data-slot": "alert-dialog-title",
844
+ className: cn("text-lg font-semibold", className),
845
+ ...props
846
+ }
847
+ );
848
+ }
849
+ function AlertDialogDescription({
850
+ className,
851
+ ...props
852
+ }) {
853
+ return /* @__PURE__ */ jsx14(
854
+ AlertDialogPrimitive.Description,
855
+ {
856
+ "data-slot": "alert-dialog-description",
857
+ className: cn("text-muted-foreground text-sm", className),
858
+ ...props
859
+ }
860
+ );
861
+ }
862
+ function AlertDialogAction({
863
+ className,
864
+ ...props
865
+ }) {
866
+ return /* @__PURE__ */ jsx14(
867
+ AlertDialogPrimitive.Action,
868
+ {
869
+ className: cn(buttonVariants(), className),
870
+ ...props
871
+ }
872
+ );
873
+ }
874
+ function AlertDialogCancel({
875
+ className,
876
+ ...props
877
+ }) {
878
+ return /* @__PURE__ */ jsx14(
879
+ AlertDialogPrimitive.Cancel,
880
+ {
881
+ className: cn(buttonVariants({ variant: "outline" }), className),
882
+ ...props
883
+ }
884
+ );
885
+ }
886
+
887
+ // src/components/ui/sheet.tsx
888
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
889
+ import { XIcon as XIcon2 } from "lucide-react";
890
+ import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
891
+ function Sheet({ ...props }) {
892
+ return /* @__PURE__ */ jsx15(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
893
+ }
894
+ function SheetTrigger({
895
+ ...props
896
+ }) {
897
+ return /* @__PURE__ */ jsx15(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
898
+ }
899
+ function SheetClose({
900
+ ...props
901
+ }) {
902
+ return /* @__PURE__ */ jsx15(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
903
+ }
904
+ function SheetPortal({
905
+ ...props
906
+ }) {
907
+ return /* @__PURE__ */ jsx15(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
908
+ }
909
+ function SheetOverlay({
910
+ className,
911
+ ...props
912
+ }) {
913
+ return /* @__PURE__ */ jsx15(
914
+ SheetPrimitive.Overlay,
915
+ {
916
+ "data-slot": "sheet-overlay",
917
+ className: cn(
918
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
919
+ className
920
+ ),
921
+ ...props
922
+ }
923
+ );
924
+ }
925
+ function SheetContent({
926
+ className,
927
+ children,
928
+ side = "right",
929
+ ...props
930
+ }) {
931
+ return /* @__PURE__ */ jsxs6(SheetPortal, { children: [
932
+ /* @__PURE__ */ jsx15(SheetOverlay, {}),
933
+ /* @__PURE__ */ jsxs6(
934
+ SheetPrimitive.Content,
935
+ {
936
+ "data-slot": "sheet-content",
937
+ className: cn(
938
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
939
+ side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
940
+ side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
941
+ side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
942
+ side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
943
+ className
944
+ ),
945
+ ...props,
946
+ children: [
947
+ children,
948
+ /* @__PURE__ */ jsxs6(SheetPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
949
+ /* @__PURE__ */ jsx15(XIcon2, { className: "size-4" }),
950
+ /* @__PURE__ */ jsx15("span", { className: "sr-only", children: "Close" })
951
+ ] })
952
+ ]
953
+ }
954
+ )
955
+ ] });
956
+ }
957
+ function SheetHeader({ className, ...props }) {
958
+ return /* @__PURE__ */ jsx15(
959
+ "div",
960
+ {
961
+ "data-slot": "sheet-header",
962
+ className: cn("flex flex-col gap-1.5 p-4", className),
963
+ ...props
964
+ }
965
+ );
966
+ }
967
+ function SheetFooter({ className, ...props }) {
968
+ return /* @__PURE__ */ jsx15(
969
+ "div",
970
+ {
971
+ "data-slot": "sheet-footer",
972
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
973
+ ...props
974
+ }
975
+ );
976
+ }
977
+ function SheetTitle({
978
+ className,
979
+ ...props
980
+ }) {
981
+ return /* @__PURE__ */ jsx15(
982
+ SheetPrimitive.Title,
983
+ {
984
+ "data-slot": "sheet-title",
985
+ className: cn("text-foreground font-semibold", className),
986
+ ...props
987
+ }
988
+ );
989
+ }
990
+ function SheetDescription({
991
+ className,
992
+ ...props
993
+ }) {
994
+ return /* @__PURE__ */ jsx15(
995
+ SheetPrimitive.Description,
996
+ {
997
+ "data-slot": "sheet-description",
998
+ className: cn("text-muted-foreground text-sm", className),
999
+ ...props
1000
+ }
1001
+ );
1002
+ }
1003
+
1004
+ // src/components/ui/drawer.tsx
1005
+ import { Drawer as DrawerPrimitive } from "vaul";
1006
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1007
+ function Drawer({
1008
+ ...props
1009
+ }) {
1010
+ return /* @__PURE__ */ jsx16(DrawerPrimitive.Root, { "data-slot": "drawer", ...props });
1011
+ }
1012
+ function DrawerTrigger({
1013
+ ...props
1014
+ }) {
1015
+ return /* @__PURE__ */ jsx16(DrawerPrimitive.Trigger, { "data-slot": "drawer-trigger", ...props });
1016
+ }
1017
+ function DrawerPortal({
1018
+ ...props
1019
+ }) {
1020
+ return /* @__PURE__ */ jsx16(DrawerPrimitive.Portal, { "data-slot": "drawer-portal", ...props });
1021
+ }
1022
+ function DrawerClose({
1023
+ ...props
1024
+ }) {
1025
+ return /* @__PURE__ */ jsx16(DrawerPrimitive.Close, { "data-slot": "drawer-close", ...props });
1026
+ }
1027
+ function DrawerOverlay({
1028
+ className,
1029
+ ...props
1030
+ }) {
1031
+ return /* @__PURE__ */ jsx16(
1032
+ DrawerPrimitive.Overlay,
1033
+ {
1034
+ "data-slot": "drawer-overlay",
1035
+ className: cn(
1036
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
1037
+ className
1038
+ ),
1039
+ ...props
1040
+ }
1041
+ );
1042
+ }
1043
+ function DrawerContent({
1044
+ className,
1045
+ children,
1046
+ ...props
1047
+ }) {
1048
+ return /* @__PURE__ */ jsxs7(DrawerPortal, { "data-slot": "drawer-portal", children: [
1049
+ /* @__PURE__ */ jsx16(DrawerOverlay, {}),
1050
+ /* @__PURE__ */ jsxs7(
1051
+ DrawerPrimitive.Content,
1052
+ {
1053
+ "data-slot": "drawer-content",
1054
+ className: cn(
1055
+ "group/drawer-content bg-background fixed z-50 flex h-auto flex-col",
1056
+ "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b",
1057
+ "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t",
1058
+ "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",
1059
+ "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm",
1060
+ className
1061
+ ),
1062
+ ...props,
1063
+ children: [
1064
+ /* @__PURE__ */ jsx16("div", { className: "bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
1065
+ children
1066
+ ]
1067
+ }
1068
+ )
1069
+ ] });
1070
+ }
1071
+ function DrawerHeader({ className, ...props }) {
1072
+ return /* @__PURE__ */ jsx16(
1073
+ "div",
1074
+ {
1075
+ "data-slot": "drawer-header",
1076
+ className: cn("flex flex-col gap-1.5 p-4", className),
1077
+ ...props
1078
+ }
1079
+ );
1080
+ }
1081
+ function DrawerFooter({ className, ...props }) {
1082
+ return /* @__PURE__ */ jsx16(
1083
+ "div",
1084
+ {
1085
+ "data-slot": "drawer-footer",
1086
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1087
+ ...props
1088
+ }
1089
+ );
1090
+ }
1091
+ function DrawerTitle({
1092
+ className,
1093
+ ...props
1094
+ }) {
1095
+ return /* @__PURE__ */ jsx16(
1096
+ DrawerPrimitive.Title,
1097
+ {
1098
+ "data-slot": "drawer-title",
1099
+ className: cn("text-foreground font-semibold", className),
1100
+ ...props
1101
+ }
1102
+ );
1103
+ }
1104
+ function DrawerDescription({
1105
+ className,
1106
+ ...props
1107
+ }) {
1108
+ return /* @__PURE__ */ jsx16(
1109
+ DrawerPrimitive.Description,
1110
+ {
1111
+ "data-slot": "drawer-description",
1112
+ className: cn("text-muted-foreground text-sm", className),
1113
+ ...props
1114
+ }
1115
+ );
1116
+ }
1117
+
1118
+ // src/components/ui/popover.tsx
1119
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
1120
+ import { jsx as jsx17 } from "react/jsx-runtime";
1121
+ function Popover({
1122
+ ...props
1123
+ }) {
1124
+ return /* @__PURE__ */ jsx17(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1125
+ }
1126
+ function PopoverTrigger({
1127
+ ...props
1128
+ }) {
1129
+ return /* @__PURE__ */ jsx17(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
1130
+ }
1131
+ function PopoverContent({
1132
+ className,
1133
+ align = "center",
1134
+ sideOffset = 4,
1135
+ ...props
1136
+ }) {
1137
+ return /* @__PURE__ */ jsx17(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx17(
1138
+ PopoverPrimitive.Content,
1139
+ {
1140
+ "data-slot": "popover-content",
1141
+ align,
1142
+ sideOffset,
1143
+ className: cn(
1144
+ "bg-popover text-popover-foreground 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
1145
+ className
1146
+ ),
1147
+ ...props
1148
+ }
1149
+ ) });
1150
+ }
1151
+ function PopoverAnchor({
1152
+ ...props
1153
+ }) {
1154
+ return /* @__PURE__ */ jsx17(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1155
+ }
1156
+
1157
+ // src/components/ui/dropdown-menu.tsx
1158
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
1159
+ import { CheckIcon as CheckIcon3, ChevronRightIcon, CircleIcon as CircleIcon2 } from "lucide-react";
1160
+ import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
1161
+ function DropdownMenu({
1162
+ ...props
1163
+ }) {
1164
+ return /* @__PURE__ */ jsx18(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
1165
+ }
1166
+ function DropdownMenuPortal({
1167
+ ...props
1168
+ }) {
1169
+ return /* @__PURE__ */ jsx18(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
1170
+ }
1171
+ function DropdownMenuTrigger({
1172
+ ...props
1173
+ }) {
1174
+ return /* @__PURE__ */ jsx18(
1175
+ DropdownMenuPrimitive.Trigger,
1176
+ {
1177
+ "data-slot": "dropdown-menu-trigger",
1178
+ ...props
1179
+ }
1180
+ );
1181
+ }
1182
+ function DropdownMenuContent({
1183
+ className,
1184
+ sideOffset = 4,
1185
+ ...props
1186
+ }) {
1187
+ return /* @__PURE__ */ jsx18(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx18(
1188
+ DropdownMenuPrimitive.Content,
1189
+ {
1190
+ "data-slot": "dropdown-menu-content",
1191
+ sideOffset,
1192
+ className: cn(
1193
+ "bg-popover text-popover-foreground 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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
1194
+ className
1195
+ ),
1196
+ ...props
1197
+ }
1198
+ ) });
1199
+ }
1200
+ function DropdownMenuGroup({
1201
+ ...props
1202
+ }) {
1203
+ return /* @__PURE__ */ jsx18(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
1204
+ }
1205
+ function DropdownMenuItem({
1206
+ className,
1207
+ inset,
1208
+ variant = "default",
1209
+ ...props
1210
+ }) {
1211
+ return /* @__PURE__ */ jsx18(
1212
+ DropdownMenuPrimitive.Item,
1213
+ {
1214
+ "data-slot": "dropdown-menu-item",
1215
+ "data-inset": inset,
1216
+ "data-variant": variant,
1217
+ className: cn(
1218
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1219
+ className
1220
+ ),
1221
+ ...props
1222
+ }
1223
+ );
1224
+ }
1225
+ function DropdownMenuCheckboxItem({
1226
+ className,
1227
+ children,
1228
+ checked,
1229
+ ...props
1230
+ }) {
1231
+ return /* @__PURE__ */ jsxs8(
1232
+ DropdownMenuPrimitive.CheckboxItem,
1233
+ {
1234
+ "data-slot": "dropdown-menu-checkbox-item",
1235
+ className: cn(
1236
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1237
+ className
1238
+ ),
1239
+ checked,
1240
+ ...props,
1241
+ children: [
1242
+ /* @__PURE__ */ jsx18("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx18(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx18(CheckIcon3, { className: "size-4" }) }) }),
1243
+ children
1244
+ ]
1245
+ }
1246
+ );
1247
+ }
1248
+ function DropdownMenuRadioGroup({
1249
+ ...props
1250
+ }) {
1251
+ return /* @__PURE__ */ jsx18(
1252
+ DropdownMenuPrimitive.RadioGroup,
1253
+ {
1254
+ "data-slot": "dropdown-menu-radio-group",
1255
+ ...props
1256
+ }
1257
+ );
1258
+ }
1259
+ function DropdownMenuRadioItem({
1260
+ className,
1261
+ children,
1262
+ ...props
1263
+ }) {
1264
+ return /* @__PURE__ */ jsxs8(
1265
+ DropdownMenuPrimitive.RadioItem,
1266
+ {
1267
+ "data-slot": "dropdown-menu-radio-item",
1268
+ className: cn(
1269
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1270
+ className
1271
+ ),
1272
+ ...props,
1273
+ children: [
1274
+ /* @__PURE__ */ jsx18("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx18(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx18(CircleIcon2, { className: "size-2 fill-current" }) }) }),
1275
+ children
1276
+ ]
1277
+ }
1278
+ );
1279
+ }
1280
+ function DropdownMenuLabel({
1281
+ className,
1282
+ inset,
1283
+ ...props
1284
+ }) {
1285
+ return /* @__PURE__ */ jsx18(
1286
+ DropdownMenuPrimitive.Label,
1287
+ {
1288
+ "data-slot": "dropdown-menu-label",
1289
+ "data-inset": inset,
1290
+ className: cn(
1291
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
1292
+ className
1293
+ ),
1294
+ ...props
1295
+ }
1296
+ );
1297
+ }
1298
+ function DropdownMenuSeparator({
1299
+ className,
1300
+ ...props
1301
+ }) {
1302
+ return /* @__PURE__ */ jsx18(
1303
+ DropdownMenuPrimitive.Separator,
1304
+ {
1305
+ "data-slot": "dropdown-menu-separator",
1306
+ className: cn("bg-border -mx-1 my-1 h-px", className),
1307
+ ...props
1308
+ }
1309
+ );
1310
+ }
1311
+ function DropdownMenuShortcut({
1312
+ className,
1313
+ ...props
1314
+ }) {
1315
+ return /* @__PURE__ */ jsx18(
1316
+ "span",
1317
+ {
1318
+ "data-slot": "dropdown-menu-shortcut",
1319
+ className: cn(
1320
+ "text-muted-foreground ml-auto text-xs tracking-widest",
1321
+ className
1322
+ ),
1323
+ ...props
1324
+ }
1325
+ );
1326
+ }
1327
+ function DropdownMenuSub({
1328
+ ...props
1329
+ }) {
1330
+ return /* @__PURE__ */ jsx18(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
1331
+ }
1332
+ function DropdownMenuSubTrigger({
1333
+ className,
1334
+ inset,
1335
+ children,
1336
+ ...props
1337
+ }) {
1338
+ return /* @__PURE__ */ jsxs8(
1339
+ DropdownMenuPrimitive.SubTrigger,
1340
+ {
1341
+ "data-slot": "dropdown-menu-sub-trigger",
1342
+ "data-inset": inset,
1343
+ className: cn(
1344
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8",
1345
+ className
1346
+ ),
1347
+ ...props,
1348
+ children: [
1349
+ children,
1350
+ /* @__PURE__ */ jsx18(ChevronRightIcon, { className: "ml-auto size-4" })
1351
+ ]
1352
+ }
1353
+ );
1354
+ }
1355
+ function DropdownMenuSubContent({
1356
+ className,
1357
+ ...props
1358
+ }) {
1359
+ return /* @__PURE__ */ jsx18(
1360
+ DropdownMenuPrimitive.SubContent,
1361
+ {
1362
+ "data-slot": "dropdown-menu-sub-content",
1363
+ className: cn(
1364
+ "bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
1365
+ className
1366
+ ),
1367
+ ...props
1368
+ }
1369
+ );
1370
+ }
1371
+
1372
+ // src/components/ui/context-menu.tsx
1373
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
1374
+ import { CheckIcon as CheckIcon4, ChevronRightIcon as ChevronRightIcon2, CircleIcon as CircleIcon3 } from "lucide-react";
1375
+ import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
1376
+ function ContextMenu({
1377
+ ...props
1378
+ }) {
1379
+ return /* @__PURE__ */ jsx19(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
1380
+ }
1381
+ function ContextMenuTrigger({
1382
+ ...props
1383
+ }) {
1384
+ return /* @__PURE__ */ jsx19(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
1385
+ }
1386
+ function ContextMenuGroup({
1387
+ ...props
1388
+ }) {
1389
+ return /* @__PURE__ */ jsx19(ContextMenuPrimitive.Group, { "data-slot": "context-menu-group", ...props });
1390
+ }
1391
+ function ContextMenuPortal({
1392
+ ...props
1393
+ }) {
1394
+ return /* @__PURE__ */ jsx19(ContextMenuPrimitive.Portal, { "data-slot": "context-menu-portal", ...props });
1395
+ }
1396
+ function ContextMenuSub({
1397
+ ...props
1398
+ }) {
1399
+ return /* @__PURE__ */ jsx19(ContextMenuPrimitive.Sub, { "data-slot": "context-menu-sub", ...props });
1400
+ }
1401
+ function ContextMenuRadioGroup({
1402
+ ...props
1403
+ }) {
1404
+ return /* @__PURE__ */ jsx19(
1405
+ ContextMenuPrimitive.RadioGroup,
1406
+ {
1407
+ "data-slot": "context-menu-radio-group",
1408
+ ...props
1409
+ }
1410
+ );
1411
+ }
1412
+ function ContextMenuSubTrigger({
1413
+ className,
1414
+ inset,
1415
+ children,
1416
+ ...props
1417
+ }) {
1418
+ return /* @__PURE__ */ jsxs9(
1419
+ ContextMenuPrimitive.SubTrigger,
1420
+ {
1421
+ "data-slot": "context-menu-sub-trigger",
1422
+ "data-inset": inset,
1423
+ className: cn(
1424
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1425
+ className
1426
+ ),
1427
+ ...props,
1428
+ children: [
1429
+ children,
1430
+ /* @__PURE__ */ jsx19(ChevronRightIcon2, { className: "ml-auto" })
1431
+ ]
1432
+ }
1433
+ );
1434
+ }
1435
+ function ContextMenuSubContent({
1436
+ className,
1437
+ ...props
1438
+ }) {
1439
+ return /* @__PURE__ */ jsx19(
1440
+ ContextMenuPrimitive.SubContent,
1441
+ {
1442
+ "data-slot": "context-menu-sub-content",
1443
+ className: cn(
1444
+ "bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
1445
+ className
1446
+ ),
1447
+ ...props
1448
+ }
1449
+ );
1450
+ }
1451
+ function ContextMenuContent({
1452
+ className,
1453
+ ...props
1454
+ }) {
1455
+ return /* @__PURE__ */ jsx19(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx19(
1456
+ ContextMenuPrimitive.Content,
1457
+ {
1458
+ "data-slot": "context-menu-content",
1459
+ className: cn(
1460
+ "bg-popover text-popover-foreground 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 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
1461
+ className
1462
+ ),
1463
+ ...props
1464
+ }
1465
+ ) });
1466
+ }
1467
+ function ContextMenuItem({
1468
+ className,
1469
+ inset,
1470
+ variant = "default",
1471
+ ...props
1472
+ }) {
1473
+ return /* @__PURE__ */ jsx19(
1474
+ ContextMenuPrimitive.Item,
1475
+ {
1476
+ "data-slot": "context-menu-item",
1477
+ "data-inset": inset,
1478
+ "data-variant": variant,
1479
+ className: cn(
1480
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1481
+ className
1482
+ ),
1483
+ ...props
1484
+ }
1485
+ );
1486
+ }
1487
+ function ContextMenuCheckboxItem({
1488
+ className,
1489
+ children,
1490
+ checked,
1491
+ ...props
1492
+ }) {
1493
+ return /* @__PURE__ */ jsxs9(
1494
+ ContextMenuPrimitive.CheckboxItem,
1495
+ {
1496
+ "data-slot": "context-menu-checkbox-item",
1497
+ className: cn(
1498
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1499
+ className
1500
+ ),
1501
+ checked,
1502
+ ...props,
1503
+ children: [
1504
+ /* @__PURE__ */ jsx19("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx19(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx19(CheckIcon4, { className: "size-4" }) }) }),
1505
+ children
1506
+ ]
1507
+ }
1508
+ );
1509
+ }
1510
+ function ContextMenuRadioItem({
1511
+ className,
1512
+ children,
1513
+ ...props
1514
+ }) {
1515
+ return /* @__PURE__ */ jsxs9(
1516
+ ContextMenuPrimitive.RadioItem,
1517
+ {
1518
+ "data-slot": "context-menu-radio-item",
1519
+ className: cn(
1520
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1521
+ className
1522
+ ),
1523
+ ...props,
1524
+ children: [
1525
+ /* @__PURE__ */ jsx19("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx19(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx19(CircleIcon3, { className: "size-2 fill-current" }) }) }),
1526
+ children
1527
+ ]
1528
+ }
1529
+ );
1530
+ }
1531
+ function ContextMenuLabel({
1532
+ className,
1533
+ inset,
1534
+ ...props
1535
+ }) {
1536
+ return /* @__PURE__ */ jsx19(
1537
+ ContextMenuPrimitive.Label,
1538
+ {
1539
+ "data-slot": "context-menu-label",
1540
+ "data-inset": inset,
1541
+ className: cn(
1542
+ "text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
1543
+ className
1544
+ ),
1545
+ ...props
1546
+ }
1547
+ );
1548
+ }
1549
+ function ContextMenuSeparator({
1550
+ className,
1551
+ ...props
1552
+ }) {
1553
+ return /* @__PURE__ */ jsx19(
1554
+ ContextMenuPrimitive.Separator,
1555
+ {
1556
+ "data-slot": "context-menu-separator",
1557
+ className: cn("bg-border -mx-1 my-1 h-px", className),
1558
+ ...props
1559
+ }
1560
+ );
1561
+ }
1562
+ function ContextMenuShortcut({
1563
+ className,
1564
+ ...props
1565
+ }) {
1566
+ return /* @__PURE__ */ jsx19(
1567
+ "span",
1568
+ {
1569
+ "data-slot": "context-menu-shortcut",
1570
+ className: cn(
1571
+ "text-muted-foreground ml-auto text-xs tracking-widest",
1572
+ className
1573
+ ),
1574
+ ...props
1575
+ }
1576
+ );
1577
+ }
1578
+
1579
+ // src/components/ui/menubar.tsx
1580
+ import * as MenubarPrimitive from "@radix-ui/react-menubar";
1581
+ import { CheckIcon as CheckIcon5, ChevronRightIcon as ChevronRightIcon3, CircleIcon as CircleIcon4 } from "lucide-react";
1582
+ import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
1583
+ function Menubar({
1584
+ className,
1585
+ ...props
1586
+ }) {
1587
+ return /* @__PURE__ */ jsx20(
1588
+ MenubarPrimitive.Root,
1589
+ {
1590
+ "data-slot": "menubar",
1591
+ className: cn(
1592
+ "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
1593
+ className
1594
+ ),
1595
+ ...props
1596
+ }
1597
+ );
1598
+ }
1599
+ function MenubarMenu({
1600
+ ...props
1601
+ }) {
1602
+ return /* @__PURE__ */ jsx20(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
1603
+ }
1604
+ function MenubarGroup({
1605
+ ...props
1606
+ }) {
1607
+ return /* @__PURE__ */ jsx20(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
1608
+ }
1609
+ function MenubarPortal({
1610
+ ...props
1611
+ }) {
1612
+ return /* @__PURE__ */ jsx20(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
1613
+ }
1614
+ function MenubarRadioGroup({
1615
+ ...props
1616
+ }) {
1617
+ return /* @__PURE__ */ jsx20(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
1618
+ }
1619
+ function MenubarTrigger({
1620
+ className,
1621
+ ...props
1622
+ }) {
1623
+ return /* @__PURE__ */ jsx20(
1624
+ MenubarPrimitive.Trigger,
1625
+ {
1626
+ "data-slot": "menubar-trigger",
1627
+ className: cn(
1628
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
1629
+ className
1630
+ ),
1631
+ ...props
1632
+ }
1633
+ );
1634
+ }
1635
+ function MenubarContent({
1636
+ className,
1637
+ align = "start",
1638
+ alignOffset = -4,
1639
+ sideOffset = 8,
1640
+ ...props
1641
+ }) {
1642
+ return /* @__PURE__ */ jsx20(MenubarPortal, { children: /* @__PURE__ */ jsx20(
1643
+ MenubarPrimitive.Content,
1644
+ {
1645
+ "data-slot": "menubar-content",
1646
+ align,
1647
+ alignOffset,
1648
+ sideOffset,
1649
+ className: cn(
1650
+ "bg-popover text-popover-foreground data-[state=open]:animate-in 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
1651
+ className
1652
+ ),
1653
+ ...props
1654
+ }
1655
+ ) });
1656
+ }
1657
+ function MenubarItem({
1658
+ className,
1659
+ inset,
1660
+ variant = "default",
1661
+ ...props
1662
+ }) {
1663
+ return /* @__PURE__ */ jsx20(
1664
+ MenubarPrimitive.Item,
1665
+ {
1666
+ "data-slot": "menubar-item",
1667
+ "data-inset": inset,
1668
+ "data-variant": variant,
1669
+ className: cn(
1670
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1671
+ className
1672
+ ),
1673
+ ...props
1674
+ }
1675
+ );
1676
+ }
1677
+ function MenubarCheckboxItem({
1678
+ className,
1679
+ children,
1680
+ checked,
1681
+ ...props
1682
+ }) {
1683
+ return /* @__PURE__ */ jsxs10(
1684
+ MenubarPrimitive.CheckboxItem,
1685
+ {
1686
+ "data-slot": "menubar-checkbox-item",
1687
+ className: cn(
1688
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1689
+ className
1690
+ ),
1691
+ checked,
1692
+ ...props,
1693
+ children: [
1694
+ /* @__PURE__ */ jsx20("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx20(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx20(CheckIcon5, { className: "size-4" }) }) }),
1695
+ children
1696
+ ]
1697
+ }
1698
+ );
1699
+ }
1700
+ function MenubarRadioItem({
1701
+ className,
1702
+ children,
1703
+ ...props
1704
+ }) {
1705
+ return /* @__PURE__ */ jsxs10(
1706
+ MenubarPrimitive.RadioItem,
1707
+ {
1708
+ "data-slot": "menubar-radio-item",
1709
+ className: cn(
1710
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1711
+ className
1712
+ ),
1713
+ ...props,
1714
+ children: [
1715
+ /* @__PURE__ */ jsx20("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx20(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx20(CircleIcon4, { className: "size-2 fill-current" }) }) }),
1716
+ children
1717
+ ]
1718
+ }
1719
+ );
1720
+ }
1721
+ function MenubarLabel({
1722
+ className,
1723
+ inset,
1724
+ ...props
1725
+ }) {
1726
+ return /* @__PURE__ */ jsx20(
1727
+ MenubarPrimitive.Label,
1728
+ {
1729
+ "data-slot": "menubar-label",
1730
+ "data-inset": inset,
1731
+ className: cn(
1732
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
1733
+ className
1734
+ ),
1735
+ ...props
1736
+ }
1737
+ );
1738
+ }
1739
+ function MenubarSeparator({
1740
+ className,
1741
+ ...props
1742
+ }) {
1743
+ return /* @__PURE__ */ jsx20(
1744
+ MenubarPrimitive.Separator,
1745
+ {
1746
+ "data-slot": "menubar-separator",
1747
+ className: cn("bg-border -mx-1 my-1 h-px", className),
1748
+ ...props
1749
+ }
1750
+ );
1751
+ }
1752
+ function MenubarShortcut({
1753
+ className,
1754
+ ...props
1755
+ }) {
1756
+ return /* @__PURE__ */ jsx20(
1757
+ "span",
1758
+ {
1759
+ "data-slot": "menubar-shortcut",
1760
+ className: cn(
1761
+ "text-muted-foreground ml-auto text-xs tracking-widest",
1762
+ className
1763
+ ),
1764
+ ...props
1765
+ }
1766
+ );
1767
+ }
1768
+ function MenubarSub({
1769
+ ...props
1770
+ }) {
1771
+ return /* @__PURE__ */ jsx20(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
1772
+ }
1773
+ function MenubarSubTrigger({
1774
+ className,
1775
+ inset,
1776
+ children,
1777
+ ...props
1778
+ }) {
1779
+ return /* @__PURE__ */ jsxs10(
1780
+ MenubarPrimitive.SubTrigger,
1781
+ {
1782
+ "data-slot": "menubar-sub-trigger",
1783
+ "data-inset": inset,
1784
+ className: cn(
1785
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8",
1786
+ className
1787
+ ),
1788
+ ...props,
1789
+ children: [
1790
+ children,
1791
+ /* @__PURE__ */ jsx20(ChevronRightIcon3, { className: "ml-auto h-4 w-4" })
1792
+ ]
1793
+ }
1794
+ );
1795
+ }
1796
+ function MenubarSubContent({
1797
+ className,
1798
+ ...props
1799
+ }) {
1800
+ return /* @__PURE__ */ jsx20(
1801
+ MenubarPrimitive.SubContent,
1802
+ {
1803
+ "data-slot": "menubar-sub-content",
1804
+ className: cn(
1805
+ "bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
1806
+ className
1807
+ ),
1808
+ ...props
1809
+ }
1810
+ );
1811
+ }
1812
+
1813
+ // src/components/ui/hover-card.tsx
1814
+ import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
1815
+ import { jsx as jsx21 } from "react/jsx-runtime";
1816
+ function HoverCard({
1817
+ ...props
1818
+ }) {
1819
+ return /* @__PURE__ */ jsx21(HoverCardPrimitive.Root, { "data-slot": "hover-card", ...props });
1820
+ }
1821
+ function HoverCardTrigger({
1822
+ ...props
1823
+ }) {
1824
+ return /* @__PURE__ */ jsx21(HoverCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
1825
+ }
1826
+ function HoverCardContent({
1827
+ className,
1828
+ align = "center",
1829
+ sideOffset = 4,
1830
+ ...props
1831
+ }) {
1832
+ return /* @__PURE__ */ jsx21(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx21(
1833
+ HoverCardPrimitive.Content,
1834
+ {
1835
+ "data-slot": "hover-card-content",
1836
+ align,
1837
+ sideOffset,
1838
+ className: cn(
1839
+ "bg-popover text-popover-foreground 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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
1840
+ className
1841
+ ),
1842
+ ...props
1843
+ }
1844
+ ) });
1845
+ }
1846
+
1847
+ // src/components/ui/tooltip.tsx
1848
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
1849
+ import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
1850
+ function TooltipProvider({
1851
+ delayDuration = 0,
1852
+ ...props
1853
+ }) {
1854
+ return /* @__PURE__ */ jsx22(
1855
+ TooltipPrimitive.Provider,
1856
+ {
1857
+ "data-slot": "tooltip-provider",
1858
+ delayDuration,
1859
+ ...props
1860
+ }
1861
+ );
1862
+ }
1863
+ function Tooltip({
1864
+ ...props
1865
+ }) {
1866
+ return /* @__PURE__ */ jsx22(TooltipProvider, { children: /* @__PURE__ */ jsx22(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
1867
+ }
1868
+ function TooltipTrigger({
1869
+ ...props
1870
+ }) {
1871
+ return /* @__PURE__ */ jsx22(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
1872
+ }
1873
+ function TooltipContent({
1874
+ className,
1875
+ sideOffset = 0,
1876
+ children,
1877
+ ...props
1878
+ }) {
1879
+ return /* @__PURE__ */ jsx22(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs11(
1880
+ TooltipPrimitive.Content,
1881
+ {
1882
+ "data-slot": "tooltip-content",
1883
+ sideOffset,
1884
+ className: cn(
1885
+ "bg-primary text-primary-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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
1886
+ className
1887
+ ),
1888
+ ...props,
1889
+ children: [
1890
+ children,
1891
+ /* @__PURE__ */ jsx22(TooltipPrimitive.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
1892
+ ]
1893
+ }
1894
+ ) });
1895
+ }
1896
+
1897
+ // src/components/ui/tabs.tsx
1898
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
1899
+ import { jsx as jsx23 } from "react/jsx-runtime";
1900
+ function Tabs({
1901
+ className,
1902
+ ...props
1903
+ }) {
1904
+ return /* @__PURE__ */ jsx23(
1905
+ TabsPrimitive.Root,
1906
+ {
1907
+ "data-slot": "tabs",
1908
+ className: cn("flex flex-col gap-2", className),
1909
+ ...props
1910
+ }
1911
+ );
1912
+ }
1913
+ function TabsList({
1914
+ className,
1915
+ ...props
1916
+ }) {
1917
+ return /* @__PURE__ */ jsx23(
1918
+ TabsPrimitive.List,
1919
+ {
1920
+ "data-slot": "tabs-list",
1921
+ className: cn(
1922
+ "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-xl p-[3px] flex",
1923
+ className
1924
+ ),
1925
+ ...props
1926
+ }
1927
+ );
1928
+ }
1929
+ function TabsTrigger({
1930
+ className,
1931
+ ...props
1932
+ }) {
1933
+ return /* @__PURE__ */ jsx23(
1934
+ TabsPrimitive.Trigger,
1935
+ {
1936
+ "data-slot": "tabs-trigger",
1937
+ className: cn(
1938
+ "data-[state=active]:bg-card dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-xl border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1939
+ className
1940
+ ),
1941
+ ...props
1942
+ }
1943
+ );
1944
+ }
1945
+ function TabsContent({
1946
+ className,
1947
+ ...props
1948
+ }) {
1949
+ return /* @__PURE__ */ jsx23(
1950
+ TabsPrimitive.Content,
1951
+ {
1952
+ "data-slot": "tabs-content",
1953
+ className: cn("flex-1 outline-none", className),
1954
+ ...props
1955
+ }
1956
+ );
1957
+ }
1958
+
1959
+ // src/components/ui/accordion.tsx
1960
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
1961
+ import { ChevronDownIcon as ChevronDownIcon2 } from "lucide-react";
1962
+ import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
1963
+ function Accordion({
1964
+ ...props
1965
+ }) {
1966
+ return /* @__PURE__ */ jsx24(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
1967
+ }
1968
+ function AccordionItem({
1969
+ className,
1970
+ ...props
1971
+ }) {
1972
+ return /* @__PURE__ */ jsx24(
1973
+ AccordionPrimitive.Item,
1974
+ {
1975
+ "data-slot": "accordion-item",
1976
+ className: cn("border-b last:border-b-0", className),
1977
+ ...props
1978
+ }
1979
+ );
1980
+ }
1981
+ function AccordionTrigger({
1982
+ className,
1983
+ children,
1984
+ ...props
1985
+ }) {
1986
+ return /* @__PURE__ */ jsx24(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs12(
1987
+ AccordionPrimitive.Trigger,
1988
+ {
1989
+ "data-slot": "accordion-trigger",
1990
+ className: cn(
1991
+ "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
1992
+ className
1993
+ ),
1994
+ ...props,
1995
+ children: [
1996
+ children,
1997
+ /* @__PURE__ */ jsx24(ChevronDownIcon2, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" })
1998
+ ]
1999
+ }
2000
+ ) });
2001
+ }
2002
+ function AccordionContent({
2003
+ className,
2004
+ children,
2005
+ ...props
2006
+ }) {
2007
+ return /* @__PURE__ */ jsx24(
2008
+ AccordionPrimitive.Content,
2009
+ {
2010
+ "data-slot": "accordion-content",
2011
+ className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
2012
+ ...props,
2013
+ children: /* @__PURE__ */ jsx24("div", { className: cn("pt-0 pb-4", className), children })
2014
+ }
2015
+ );
2016
+ }
2017
+
2018
+ // src/components/ui/collapsible.tsx
2019
+ import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
2020
+ import { jsx as jsx25 } from "react/jsx-runtime";
2021
+ function Collapsible({
2022
+ ...props
2023
+ }) {
2024
+ return /* @__PURE__ */ jsx25(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
2025
+ }
2026
+ function CollapsibleTrigger2({
2027
+ ...props
2028
+ }) {
2029
+ return /* @__PURE__ */ jsx25(
2030
+ CollapsiblePrimitive.CollapsibleTrigger,
2031
+ {
2032
+ "data-slot": "collapsible-trigger",
2033
+ ...props
2034
+ }
2035
+ );
2036
+ }
2037
+ function CollapsibleContent2({
2038
+ ...props
2039
+ }) {
2040
+ return /* @__PURE__ */ jsx25(
2041
+ CollapsiblePrimitive.CollapsibleContent,
2042
+ {
2043
+ "data-slot": "collapsible-content",
2044
+ ...props
2045
+ }
2046
+ );
2047
+ }
2048
+
2049
+ // src/components/ui/alert.tsx
2050
+ import { cva as cva3 } from "class-variance-authority";
2051
+ import { jsx as jsx26 } from "react/jsx-runtime";
2052
+ var alertVariants = cva3(
2053
+ "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
2054
+ {
2055
+ variants: {
2056
+ variant: {
2057
+ default: "bg-card text-card-foreground",
2058
+ destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"
2059
+ }
2060
+ },
2061
+ defaultVariants: {
2062
+ variant: "default"
2063
+ }
2064
+ }
2065
+ );
2066
+ function Alert({
2067
+ className,
2068
+ variant,
2069
+ ...props
2070
+ }) {
2071
+ return /* @__PURE__ */ jsx26(
2072
+ "div",
2073
+ {
2074
+ "data-slot": "alert",
2075
+ role: "alert",
2076
+ className: cn(alertVariants({ variant }), className),
2077
+ ...props
2078
+ }
2079
+ );
2080
+ }
2081
+ function AlertTitle({ className, ...props }) {
2082
+ return /* @__PURE__ */ jsx26(
2083
+ "div",
2084
+ {
2085
+ "data-slot": "alert-title",
2086
+ className: cn(
2087
+ "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
2088
+ className
2089
+ ),
2090
+ ...props
2091
+ }
2092
+ );
2093
+ }
2094
+ function AlertDescription({
2095
+ className,
2096
+ ...props
2097
+ }) {
2098
+ return /* @__PURE__ */ jsx26(
2099
+ "div",
2100
+ {
2101
+ "data-slot": "alert-description",
2102
+ className: cn(
2103
+ "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
2104
+ className
2105
+ ),
2106
+ ...props
2107
+ }
2108
+ );
2109
+ }
2110
+
2111
+ // src/components/ui/badge.tsx
2112
+ import { Slot as Slot2 } from "@radix-ui/react-slot";
2113
+ import { cva as cva4 } from "class-variance-authority";
2114
+ import { jsx as jsx27 } from "react/jsx-runtime";
2115
+ var badgeVariants = cva4(
2116
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
2117
+ {
2118
+ variants: {
2119
+ variant: {
2120
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
2121
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
2122
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
2123
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
2124
+ }
2125
+ },
2126
+ defaultVariants: {
2127
+ variant: "default"
2128
+ }
2129
+ }
2130
+ );
2131
+ function Badge({
2132
+ className,
2133
+ variant,
2134
+ asChild = false,
2135
+ ...props
2136
+ }) {
2137
+ const Comp = asChild ? Slot2 : "span";
2138
+ return /* @__PURE__ */ jsx27(
2139
+ Comp,
2140
+ {
2141
+ "data-slot": "badge",
2142
+ className: cn(badgeVariants({ variant }), className),
2143
+ ...props
2144
+ }
2145
+ );
2146
+ }
2147
+
2148
+ // src/components/ui/separator.tsx
2149
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
2150
+ import { jsx as jsx28 } from "react/jsx-runtime";
2151
+ function Separator5({
2152
+ className,
2153
+ orientation = "horizontal",
2154
+ decorative = true,
2155
+ ...props
2156
+ }) {
2157
+ return /* @__PURE__ */ jsx28(
2158
+ SeparatorPrimitive.Root,
2159
+ {
2160
+ "data-slot": "separator-root",
2161
+ decorative,
2162
+ orientation,
2163
+ className: cn(
2164
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
2165
+ className
2166
+ ),
2167
+ ...props
2168
+ }
2169
+ );
2170
+ }
2171
+
2172
+ // src/components/ui/scroll-area.tsx
2173
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
2174
+ import { jsx as jsx29, jsxs as jsxs13 } from "react/jsx-runtime";
2175
+ function ScrollArea({
2176
+ className,
2177
+ children,
2178
+ ...props
2179
+ }) {
2180
+ return /* @__PURE__ */ jsxs13(
2181
+ ScrollAreaPrimitive.Root,
2182
+ {
2183
+ "data-slot": "scroll-area",
2184
+ className: cn("relative", className),
2185
+ ...props,
2186
+ children: [
2187
+ /* @__PURE__ */ jsx29(
2188
+ ScrollAreaPrimitive.Viewport,
2189
+ {
2190
+ "data-slot": "scroll-area-viewport",
2191
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
2192
+ children
2193
+ }
2194
+ ),
2195
+ /* @__PURE__ */ jsx29(ScrollBar, {}),
2196
+ /* @__PURE__ */ jsx29(ScrollAreaPrimitive.Corner, {})
2197
+ ]
2198
+ }
2199
+ );
2200
+ }
2201
+ function ScrollBar({
2202
+ className,
2203
+ orientation = "vertical",
2204
+ ...props
2205
+ }) {
2206
+ return /* @__PURE__ */ jsx29(
2207
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
2208
+ {
2209
+ "data-slot": "scroll-area-scrollbar",
2210
+ orientation,
2211
+ className: cn(
2212
+ "flex touch-none p-px transition-colors select-none",
2213
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
2214
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
2215
+ className
2216
+ ),
2217
+ ...props,
2218
+ children: /* @__PURE__ */ jsx29(
2219
+ ScrollAreaPrimitive.ScrollAreaThumb,
2220
+ {
2221
+ "data-slot": "scroll-area-thumb",
2222
+ className: "bg-border relative flex-1 rounded-full"
2223
+ }
2224
+ )
2225
+ }
2226
+ );
2227
+ }
2228
+
2229
+ // src/components/ui/skeleton.tsx
2230
+ import { jsx as jsx30 } from "react/jsx-runtime";
2231
+ function Skeleton({ className, ...props }) {
2232
+ return /* @__PURE__ */ jsx30(
2233
+ "div",
2234
+ {
2235
+ "data-slot": "skeleton",
2236
+ className: cn("bg-accent animate-pulse rounded-md", className),
2237
+ ...props
2238
+ }
2239
+ );
2240
+ }
2241
+
2242
+ // src/components/ui/progress.tsx
2243
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
2244
+ import { jsx as jsx31 } from "react/jsx-runtime";
2245
+ function Progress({
2246
+ className,
2247
+ value,
2248
+ ...props
2249
+ }) {
2250
+ return /* @__PURE__ */ jsx31(
2251
+ ProgressPrimitive.Root,
2252
+ {
2253
+ "data-slot": "progress",
2254
+ className: cn(
2255
+ "bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
2256
+ className
2257
+ ),
2258
+ ...props,
2259
+ children: /* @__PURE__ */ jsx31(
2260
+ ProgressPrimitive.Indicator,
2261
+ {
2262
+ "data-slot": "progress-indicator",
2263
+ className: "bg-primary h-full w-full flex-1 transition-all",
2264
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
2265
+ }
2266
+ )
2267
+ }
2268
+ );
2269
+ }
2270
+
2271
+ // src/components/ui/avatar.tsx
2272
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
2273
+ import { jsx as jsx32 } from "react/jsx-runtime";
2274
+ function Avatar({
2275
+ className,
2276
+ ...props
2277
+ }) {
2278
+ return /* @__PURE__ */ jsx32(
2279
+ AvatarPrimitive.Root,
2280
+ {
2281
+ "data-slot": "avatar",
2282
+ className: cn(
2283
+ "relative flex size-10 shrink-0 overflow-hidden rounded-full",
2284
+ className
2285
+ ),
2286
+ ...props
2287
+ }
2288
+ );
2289
+ }
2290
+ function AvatarImage({
2291
+ className,
2292
+ ...props
2293
+ }) {
2294
+ return /* @__PURE__ */ jsx32(
2295
+ AvatarPrimitive.Image,
2296
+ {
2297
+ "data-slot": "avatar-image",
2298
+ className: cn("aspect-square size-full", className),
2299
+ ...props
2300
+ }
2301
+ );
2302
+ }
2303
+ function AvatarFallback({
2304
+ className,
2305
+ ...props
2306
+ }) {
2307
+ return /* @__PURE__ */ jsx32(
2308
+ AvatarPrimitive.Fallback,
2309
+ {
2310
+ "data-slot": "avatar-fallback",
2311
+ className: cn(
2312
+ "bg-muted flex size-full items-center justify-center rounded-full",
2313
+ className
2314
+ ),
2315
+ ...props
2316
+ }
2317
+ );
2318
+ }
2319
+
2320
+ // src/components/ui/aspect-ratio.tsx
2321
+ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
2322
+ import { jsx as jsx33 } from "react/jsx-runtime";
2323
+ function AspectRatio({
2324
+ ...props
2325
+ }) {
2326
+ return /* @__PURE__ */ jsx33(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
2327
+ }
2328
+
2329
+ // src/components/ui/table.tsx
2330
+ import { jsx as jsx34 } from "react/jsx-runtime";
2331
+ function Table({ className, ...props }) {
2332
+ return /* @__PURE__ */ jsx34(
2333
+ "div",
2334
+ {
2335
+ "data-slot": "table-container",
2336
+ className: "relative w-full overflow-x-auto",
2337
+ children: /* @__PURE__ */ jsx34(
2338
+ "table",
2339
+ {
2340
+ "data-slot": "table",
2341
+ className: cn("w-full caption-bottom text-sm", className),
2342
+ ...props
2343
+ }
2344
+ )
2345
+ }
2346
+ );
2347
+ }
2348
+ function TableHeader({ className, ...props }) {
2349
+ return /* @__PURE__ */ jsx34(
2350
+ "thead",
2351
+ {
2352
+ "data-slot": "table-header",
2353
+ className: cn("[&_tr]:border-b", className),
2354
+ ...props
2355
+ }
2356
+ );
2357
+ }
2358
+ function TableBody({ className, ...props }) {
2359
+ return /* @__PURE__ */ jsx34(
2360
+ "tbody",
2361
+ {
2362
+ "data-slot": "table-body",
2363
+ className: cn("[&_tr:last-child]:border-0", className),
2364
+ ...props
2365
+ }
2366
+ );
2367
+ }
2368
+ function TableFooter({ className, ...props }) {
2369
+ return /* @__PURE__ */ jsx34(
2370
+ "tfoot",
2371
+ {
2372
+ "data-slot": "table-footer",
2373
+ className: cn(
2374
+ "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
2375
+ className
2376
+ ),
2377
+ ...props
2378
+ }
2379
+ );
2380
+ }
2381
+ function TableRow({ className, ...props }) {
2382
+ return /* @__PURE__ */ jsx34(
2383
+ "tr",
2384
+ {
2385
+ "data-slot": "table-row",
2386
+ className: cn(
2387
+ "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
2388
+ className
2389
+ ),
2390
+ ...props
2391
+ }
2392
+ );
2393
+ }
2394
+ function TableHead({ className, ...props }) {
2395
+ return /* @__PURE__ */ jsx34(
2396
+ "th",
2397
+ {
2398
+ "data-slot": "table-head",
2399
+ className: cn(
2400
+ "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
2401
+ className
2402
+ ),
2403
+ ...props
2404
+ }
2405
+ );
2406
+ }
2407
+ function TableCell({ className, ...props }) {
2408
+ return /* @__PURE__ */ jsx34(
2409
+ "td",
2410
+ {
2411
+ "data-slot": "table-cell",
2412
+ className: cn(
2413
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
2414
+ className
2415
+ ),
2416
+ ...props
2417
+ }
2418
+ );
2419
+ }
2420
+ function TableCaption({
2421
+ className,
2422
+ ...props
2423
+ }) {
2424
+ return /* @__PURE__ */ jsx34(
2425
+ "caption",
2426
+ {
2427
+ "data-slot": "table-caption",
2428
+ className: cn("text-muted-foreground mt-4 text-sm", className),
2429
+ ...props
2430
+ }
2431
+ );
2432
+ }
2433
+
2434
+ // src/components/ui/breadcrumb.tsx
2435
+ import { Slot as Slot3 } from "@radix-ui/react-slot";
2436
+ import { ChevronRight, MoreHorizontal } from "lucide-react";
2437
+ import { jsx as jsx35, jsxs as jsxs14 } from "react/jsx-runtime";
2438
+ function Breadcrumb({ ...props }) {
2439
+ return /* @__PURE__ */ jsx35("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
2440
+ }
2441
+ function BreadcrumbList({ className, ...props }) {
2442
+ return /* @__PURE__ */ jsx35(
2443
+ "ol",
2444
+ {
2445
+ "data-slot": "breadcrumb-list",
2446
+ className: cn(
2447
+ "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
2448
+ className
2449
+ ),
2450
+ ...props
2451
+ }
2452
+ );
2453
+ }
2454
+ function BreadcrumbItem({ className, ...props }) {
2455
+ return /* @__PURE__ */ jsx35(
2456
+ "li",
2457
+ {
2458
+ "data-slot": "breadcrumb-item",
2459
+ className: cn("inline-flex items-center gap-1.5", className),
2460
+ ...props
2461
+ }
2462
+ );
2463
+ }
2464
+ function BreadcrumbLink({
2465
+ asChild,
2466
+ className,
2467
+ ...props
2468
+ }) {
2469
+ const Comp = asChild ? Slot3 : "a";
2470
+ return /* @__PURE__ */ jsx35(
2471
+ Comp,
2472
+ {
2473
+ "data-slot": "breadcrumb-link",
2474
+ className: cn("hover:text-foreground transition-colors", className),
2475
+ ...props
2476
+ }
2477
+ );
2478
+ }
2479
+ function BreadcrumbPage({ className, ...props }) {
2480
+ return /* @__PURE__ */ jsx35(
2481
+ "span",
2482
+ {
2483
+ "data-slot": "breadcrumb-page",
2484
+ role: "link",
2485
+ "aria-disabled": "true",
2486
+ "aria-current": "page",
2487
+ className: cn("text-foreground font-normal", className),
2488
+ ...props
2489
+ }
2490
+ );
2491
+ }
2492
+ function BreadcrumbSeparator({
2493
+ children,
2494
+ className,
2495
+ ...props
2496
+ }) {
2497
+ return /* @__PURE__ */ jsx35(
2498
+ "li",
2499
+ {
2500
+ "data-slot": "breadcrumb-separator",
2501
+ role: "presentation",
2502
+ "aria-hidden": "true",
2503
+ className: cn("[&>svg]:size-3.5", className),
2504
+ ...props,
2505
+ children: children ?? /* @__PURE__ */ jsx35(ChevronRight, {})
2506
+ }
2507
+ );
2508
+ }
2509
+ function BreadcrumbEllipsis({
2510
+ className,
2511
+ ...props
2512
+ }) {
2513
+ return /* @__PURE__ */ jsxs14(
2514
+ "span",
2515
+ {
2516
+ "data-slot": "breadcrumb-ellipsis",
2517
+ role: "presentation",
2518
+ "aria-hidden": "true",
2519
+ className: cn("flex size-9 items-center justify-center", className),
2520
+ ...props,
2521
+ children: [
2522
+ /* @__PURE__ */ jsx35(MoreHorizontal, { className: "size-4" }),
2523
+ /* @__PURE__ */ jsx35("span", { className: "sr-only", children: "More" })
2524
+ ]
2525
+ }
2526
+ );
2527
+ }
2528
+
2529
+ // src/components/ui/pagination.tsx
2530
+ import {
2531
+ ChevronLeftIcon,
2532
+ ChevronRightIcon as ChevronRightIcon4,
2533
+ MoreHorizontalIcon
2534
+ } from "lucide-react";
2535
+ import { jsx as jsx36, jsxs as jsxs15 } from "react/jsx-runtime";
2536
+ function Pagination({ className, ...props }) {
2537
+ return /* @__PURE__ */ jsx36(
2538
+ "nav",
2539
+ {
2540
+ role: "navigation",
2541
+ "aria-label": "pagination",
2542
+ "data-slot": "pagination",
2543
+ className: cn("mx-auto flex w-full justify-center", className),
2544
+ ...props
2545
+ }
2546
+ );
2547
+ }
2548
+ function PaginationContent({
2549
+ className,
2550
+ ...props
2551
+ }) {
2552
+ return /* @__PURE__ */ jsx36(
2553
+ "ul",
2554
+ {
2555
+ "data-slot": "pagination-content",
2556
+ className: cn("flex flex-row items-center gap-1", className),
2557
+ ...props
2558
+ }
2559
+ );
2560
+ }
2561
+ function PaginationItem({ ...props }) {
2562
+ return /* @__PURE__ */ jsx36("li", { "data-slot": "pagination-item", ...props });
2563
+ }
2564
+ function PaginationLink({
2565
+ className,
2566
+ isActive,
2567
+ size = "icon",
2568
+ ...props
2569
+ }) {
2570
+ return /* @__PURE__ */ jsx36(
2571
+ "a",
2572
+ {
2573
+ "aria-current": isActive ? "page" : void 0,
2574
+ "data-slot": "pagination-link",
2575
+ "data-active": isActive,
2576
+ className: cn(
2577
+ buttonVariants({
2578
+ variant: isActive ? "outline" : "ghost",
2579
+ size
2580
+ }),
2581
+ className
2582
+ ),
2583
+ ...props
2584
+ }
2585
+ );
2586
+ }
2587
+ function PaginationPrevious({
2588
+ className,
2589
+ ...props
2590
+ }) {
2591
+ return /* @__PURE__ */ jsxs15(
2592
+ PaginationLink,
2593
+ {
2594
+ "aria-label": "Go to previous page",
2595
+ size: "default",
2596
+ className: cn("gap-1 px-2.5 sm:pl-2.5", className),
2597
+ ...props,
2598
+ children: [
2599
+ /* @__PURE__ */ jsx36(ChevronLeftIcon, {}),
2600
+ /* @__PURE__ */ jsx36("span", { className: "hidden sm:block", children: "Previous" })
2601
+ ]
2602
+ }
2603
+ );
2604
+ }
2605
+ function PaginationNext({
2606
+ className,
2607
+ ...props
2608
+ }) {
2609
+ return /* @__PURE__ */ jsxs15(
2610
+ PaginationLink,
2611
+ {
2612
+ "aria-label": "Go to next page",
2613
+ size: "default",
2614
+ className: cn("gap-1 px-2.5 sm:pr-2.5", className),
2615
+ ...props,
2616
+ children: [
2617
+ /* @__PURE__ */ jsx36("span", { className: "hidden sm:block", children: "Next" }),
2618
+ /* @__PURE__ */ jsx36(ChevronRightIcon4, {})
2619
+ ]
2620
+ }
2621
+ );
2622
+ }
2623
+ function PaginationEllipsis({
2624
+ className,
2625
+ ...props
2626
+ }) {
2627
+ return /* @__PURE__ */ jsxs15(
2628
+ "span",
2629
+ {
2630
+ "aria-hidden": true,
2631
+ "data-slot": "pagination-ellipsis",
2632
+ className: cn("flex size-9 items-center justify-center", className),
2633
+ ...props,
2634
+ children: [
2635
+ /* @__PURE__ */ jsx36(MoreHorizontalIcon, { className: "size-4" }),
2636
+ /* @__PURE__ */ jsx36("span", { className: "sr-only", children: "More pages" })
2637
+ ]
2638
+ }
2639
+ );
2640
+ }
2641
+
2642
+ // src/components/ui/navigation-menu.tsx
2643
+ import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
2644
+ import { cva as cva5 } from "class-variance-authority";
2645
+ import { ChevronDownIcon as ChevronDownIcon3 } from "lucide-react";
2646
+ import { jsx as jsx37, jsxs as jsxs16 } from "react/jsx-runtime";
2647
+ function NavigationMenu({
2648
+ className,
2649
+ children,
2650
+ viewport = true,
2651
+ ...props
2652
+ }) {
2653
+ return /* @__PURE__ */ jsxs16(
2654
+ NavigationMenuPrimitive.Root,
2655
+ {
2656
+ "data-slot": "navigation-menu",
2657
+ "data-viewport": viewport,
2658
+ className: cn(
2659
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
2660
+ className
2661
+ ),
2662
+ ...props,
2663
+ children: [
2664
+ children,
2665
+ viewport && /* @__PURE__ */ jsx37(NavigationMenuViewport, {})
2666
+ ]
2667
+ }
2668
+ );
2669
+ }
2670
+ function NavigationMenuList({
2671
+ className,
2672
+ ...props
2673
+ }) {
2674
+ return /* @__PURE__ */ jsx37(
2675
+ NavigationMenuPrimitive.List,
2676
+ {
2677
+ "data-slot": "navigation-menu-list",
2678
+ className: cn(
2679
+ "group flex flex-1 list-none items-center justify-center gap-1",
2680
+ className
2681
+ ),
2682
+ ...props
2683
+ }
2684
+ );
2685
+ }
2686
+ function NavigationMenuItem({
2687
+ className,
2688
+ ...props
2689
+ }) {
2690
+ return /* @__PURE__ */ jsx37(
2691
+ NavigationMenuPrimitive.Item,
2692
+ {
2693
+ "data-slot": "navigation-menu-item",
2694
+ className: cn("relative", className),
2695
+ ...props
2696
+ }
2697
+ );
2698
+ }
2699
+ var navigationMenuTriggerStyle = cva5(
2700
+ "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1"
2701
+ );
2702
+ function NavigationMenuTrigger({
2703
+ className,
2704
+ children,
2705
+ ...props
2706
+ }) {
2707
+ return /* @__PURE__ */ jsxs16(
2708
+ NavigationMenuPrimitive.Trigger,
2709
+ {
2710
+ "data-slot": "navigation-menu-trigger",
2711
+ className: cn(navigationMenuTriggerStyle(), "group", className),
2712
+ ...props,
2713
+ children: [
2714
+ children,
2715
+ " ",
2716
+ /* @__PURE__ */ jsx37(
2717
+ ChevronDownIcon3,
2718
+ {
2719
+ className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
2720
+ "aria-hidden": "true"
2721
+ }
2722
+ )
2723
+ ]
2724
+ }
2725
+ );
2726
+ }
2727
+ function NavigationMenuContent({
2728
+ className,
2729
+ ...props
2730
+ }) {
2731
+ return /* @__PURE__ */ jsx37(
2732
+ NavigationMenuPrimitive.Content,
2733
+ {
2734
+ "data-slot": "navigation-menu-content",
2735
+ className: cn(
2736
+ "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
2737
+ "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
2738
+ className
2739
+ ),
2740
+ ...props
2741
+ }
2742
+ );
2743
+ }
2744
+ function NavigationMenuViewport({
2745
+ className,
2746
+ ...props
2747
+ }) {
2748
+ return /* @__PURE__ */ jsx37(
2749
+ "div",
2750
+ {
2751
+ className: cn(
2752
+ "absolute top-full left-0 isolate z-50 flex justify-center"
2753
+ ),
2754
+ children: /* @__PURE__ */ jsx37(
2755
+ NavigationMenuPrimitive.Viewport,
2756
+ {
2757
+ "data-slot": "navigation-menu-viewport",
2758
+ className: cn(
2759
+ "origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]",
2760
+ className
2761
+ ),
2762
+ ...props
2763
+ }
2764
+ )
2765
+ }
2766
+ );
2767
+ }
2768
+ function NavigationMenuLink({
2769
+ className,
2770
+ ...props
2771
+ }) {
2772
+ return /* @__PURE__ */ jsx37(
2773
+ NavigationMenuPrimitive.Link,
2774
+ {
2775
+ "data-slot": "navigation-menu-link",
2776
+ className: cn(
2777
+ "data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4",
2778
+ className
2779
+ ),
2780
+ ...props
2781
+ }
2782
+ );
2783
+ }
2784
+ function NavigationMenuIndicator({
2785
+ className,
2786
+ ...props
2787
+ }) {
2788
+ return /* @__PURE__ */ jsx37(
2789
+ NavigationMenuPrimitive.Indicator,
2790
+ {
2791
+ "data-slot": "navigation-menu-indicator",
2792
+ className: cn(
2793
+ "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",
2794
+ className
2795
+ ),
2796
+ ...props,
2797
+ children: /* @__PURE__ */ jsx37("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
2798
+ }
2799
+ );
2800
+ }
2801
+
2802
+ // src/components/ui/sidebar.tsx
2803
+ import * as React5 from "react";
2804
+ import { Slot as Slot4 } from "@radix-ui/react-slot";
2805
+ import { cva as cva6 } from "class-variance-authority";
2806
+ import { PanelLeftIcon } from "lucide-react";
2807
+ import { jsx as jsx38, jsxs as jsxs17 } from "react/jsx-runtime";
2808
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
2809
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
2810
+ var SIDEBAR_WIDTH = "16rem";
2811
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
2812
+ var SIDEBAR_WIDTH_ICON = "3rem";
2813
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
2814
+ var SidebarContext = React5.createContext(null);
2815
+ function useSidebar() {
2816
+ const context = React5.useContext(SidebarContext);
2817
+ if (!context) {
2818
+ throw new Error("useSidebar must be used within a SidebarProvider.");
2819
+ }
2820
+ return context;
2821
+ }
2822
+ function SidebarProvider({
2823
+ defaultOpen = true,
2824
+ open: openProp,
2825
+ onOpenChange: setOpenProp,
2826
+ className,
2827
+ style,
2828
+ children,
2829
+ ...props
2830
+ }) {
2831
+ const isMobile = useIsMobile();
2832
+ const [openMobile, setOpenMobile] = React5.useState(false);
2833
+ const [_open, _setOpen] = React5.useState(defaultOpen);
2834
+ const open = openProp ?? _open;
2835
+ const setOpen = React5.useCallback(
2836
+ (value) => {
2837
+ const openState = typeof value === "function" ? value(open) : value;
2838
+ if (setOpenProp) {
2839
+ setOpenProp(openState);
2840
+ } else {
2841
+ _setOpen(openState);
2842
+ }
2843
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
2844
+ },
2845
+ [setOpenProp, open]
2846
+ );
2847
+ const toggleSidebar = React5.useCallback(() => {
2848
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
2849
+ }, [isMobile, setOpen, setOpenMobile]);
2850
+ React5.useEffect(() => {
2851
+ const handleKeyDown = (event) => {
2852
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
2853
+ event.preventDefault();
2854
+ toggleSidebar();
2855
+ }
2856
+ };
2857
+ window.addEventListener("keydown", handleKeyDown);
2858
+ return () => window.removeEventListener("keydown", handleKeyDown);
2859
+ }, [toggleSidebar]);
2860
+ const state = open ? "expanded" : "collapsed";
2861
+ const contextValue = React5.useMemo(
2862
+ () => ({
2863
+ state,
2864
+ open,
2865
+ setOpen,
2866
+ isMobile,
2867
+ openMobile,
2868
+ setOpenMobile,
2869
+ toggleSidebar
2870
+ }),
2871
+ [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
2872
+ );
2873
+ return /* @__PURE__ */ jsx38(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx38(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx38(
2874
+ "div",
2875
+ {
2876
+ "data-slot": "sidebar-wrapper",
2877
+ style: {
2878
+ "--sidebar-width": SIDEBAR_WIDTH,
2879
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
2880
+ ...style
2881
+ },
2882
+ className: cn(
2883
+ "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
2884
+ className
2885
+ ),
2886
+ ...props,
2887
+ children
2888
+ }
2889
+ ) }) });
2890
+ }
2891
+ function Sidebar({
2892
+ side = "left",
2893
+ variant = "sidebar",
2894
+ collapsible = "offcanvas",
2895
+ className,
2896
+ children,
2897
+ ...props
2898
+ }) {
2899
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
2900
+ if (collapsible === "none") {
2901
+ return /* @__PURE__ */ jsx38(
2902
+ "div",
2903
+ {
2904
+ "data-slot": "sidebar",
2905
+ className: cn(
2906
+ "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",
2907
+ className
2908
+ ),
2909
+ ...props,
2910
+ children
2911
+ }
2912
+ );
2913
+ }
2914
+ if (isMobile) {
2915
+ return /* @__PURE__ */ jsx38(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs17(
2916
+ SheetContent,
2917
+ {
2918
+ "data-sidebar": "sidebar",
2919
+ "data-slot": "sidebar",
2920
+ "data-mobile": "true",
2921
+ className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
2922
+ style: {
2923
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
2924
+ },
2925
+ side,
2926
+ children: [
2927
+ /* @__PURE__ */ jsxs17(SheetHeader, { className: "sr-only", children: [
2928
+ /* @__PURE__ */ jsx38(SheetTitle, { children: "Sidebar" }),
2929
+ /* @__PURE__ */ jsx38(SheetDescription, { children: "Displays the mobile sidebar." })
2930
+ ] }),
2931
+ /* @__PURE__ */ jsx38("div", { className: "flex h-full w-full flex-col", children })
2932
+ ]
2933
+ }
2934
+ ) });
2935
+ }
2936
+ return /* @__PURE__ */ jsxs17(
2937
+ "div",
2938
+ {
2939
+ className: "group peer text-sidebar-foreground hidden md:block",
2940
+ "data-state": state,
2941
+ "data-collapsible": state === "collapsed" ? collapsible : "",
2942
+ "data-variant": variant,
2943
+ "data-side": side,
2944
+ "data-slot": "sidebar",
2945
+ children: [
2946
+ /* @__PURE__ */ jsx38(
2947
+ "div",
2948
+ {
2949
+ "data-slot": "sidebar-gap",
2950
+ className: cn(
2951
+ "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
2952
+ "group-data-[collapsible=offcanvas]:w-0",
2953
+ "group-data-[side=right]:rotate-180",
2954
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
2955
+ )
2956
+ }
2957
+ ),
2958
+ /* @__PURE__ */ jsx38(
2959
+ "div",
2960
+ {
2961
+ "data-slot": "sidebar-container",
2962
+ className: cn(
2963
+ "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
2964
+ side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
2965
+ // Adjust the padding for floating and inset variants.
2966
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
2967
+ className
2968
+ ),
2969
+ ...props,
2970
+ children: /* @__PURE__ */ jsx38(
2971
+ "div",
2972
+ {
2973
+ "data-sidebar": "sidebar",
2974
+ "data-slot": "sidebar-inner",
2975
+ className: "bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm",
2976
+ children
2977
+ }
2978
+ )
2979
+ }
2980
+ )
2981
+ ]
2982
+ }
2983
+ );
2984
+ }
2985
+ function SidebarTrigger({
2986
+ className,
2987
+ onClick,
2988
+ ...props
2989
+ }) {
2990
+ const { toggleSidebar } = useSidebar();
2991
+ return /* @__PURE__ */ jsxs17(
2992
+ Button,
2993
+ {
2994
+ "data-sidebar": "trigger",
2995
+ "data-slot": "sidebar-trigger",
2996
+ variant: "ghost",
2997
+ size: "icon",
2998
+ className: cn("size-7", className),
2999
+ onClick: (event) => {
3000
+ onClick?.(event);
3001
+ toggleSidebar();
3002
+ },
3003
+ ...props,
3004
+ children: [
3005
+ /* @__PURE__ */ jsx38(PanelLeftIcon, {}),
3006
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Toggle Sidebar" })
3007
+ ]
3008
+ }
3009
+ );
3010
+ }
3011
+ function SidebarRail({ className, ...props }) {
3012
+ const { toggleSidebar } = useSidebar();
3013
+ return /* @__PURE__ */ jsx38(
3014
+ "button",
3015
+ {
3016
+ "data-sidebar": "rail",
3017
+ "data-slot": "sidebar-rail",
3018
+ "aria-label": "Toggle Sidebar",
3019
+ tabIndex: -1,
3020
+ onClick: toggleSidebar,
3021
+ title: "Toggle Sidebar",
3022
+ className: cn(
3023
+ "hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex",
3024
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
3025
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
3026
+ "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
3027
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
3028
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
3029
+ className
3030
+ ),
3031
+ ...props
3032
+ }
3033
+ );
3034
+ }
3035
+ function SidebarInset({ className, ...props }) {
3036
+ return /* @__PURE__ */ jsx38(
3037
+ "main",
3038
+ {
3039
+ "data-slot": "sidebar-inset",
3040
+ className: cn(
3041
+ "bg-background relative flex w-full flex-1 flex-col",
3042
+ "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
3043
+ className
3044
+ ),
3045
+ ...props
3046
+ }
3047
+ );
3048
+ }
3049
+ function SidebarInput({
3050
+ className,
3051
+ ...props
3052
+ }) {
3053
+ return /* @__PURE__ */ jsx38(
3054
+ Input,
3055
+ {
3056
+ "data-slot": "sidebar-input",
3057
+ "data-sidebar": "input",
3058
+ className: cn("bg-background h-8 w-full shadow-none", className),
3059
+ ...props
3060
+ }
3061
+ );
3062
+ }
3063
+ function SidebarHeader({ className, ...props }) {
3064
+ return /* @__PURE__ */ jsx38(
3065
+ "div",
3066
+ {
3067
+ "data-slot": "sidebar-header",
3068
+ "data-sidebar": "header",
3069
+ className: cn("flex flex-col gap-2 p-2", className),
3070
+ ...props
3071
+ }
3072
+ );
3073
+ }
3074
+ function SidebarFooter({ className, ...props }) {
3075
+ return /* @__PURE__ */ jsx38(
3076
+ "div",
3077
+ {
3078
+ "data-slot": "sidebar-footer",
3079
+ "data-sidebar": "footer",
3080
+ className: cn("flex flex-col gap-2 p-2", className),
3081
+ ...props
3082
+ }
3083
+ );
3084
+ }
3085
+ function SidebarSeparator({
3086
+ className,
3087
+ ...props
3088
+ }) {
3089
+ return /* @__PURE__ */ jsx38(
3090
+ Separator5,
3091
+ {
3092
+ "data-slot": "sidebar-separator",
3093
+ "data-sidebar": "separator",
3094
+ className: cn("bg-sidebar-border mx-2 w-auto", className),
3095
+ ...props
3096
+ }
3097
+ );
3098
+ }
3099
+ function SidebarContent({ className, ...props }) {
3100
+ return /* @__PURE__ */ jsx38(
3101
+ "div",
3102
+ {
3103
+ "data-slot": "sidebar-content",
3104
+ "data-sidebar": "content",
3105
+ className: cn(
3106
+ "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
3107
+ className
3108
+ ),
3109
+ ...props
3110
+ }
3111
+ );
3112
+ }
3113
+ function SidebarGroup({ className, ...props }) {
3114
+ return /* @__PURE__ */ jsx38(
3115
+ "div",
3116
+ {
3117
+ "data-slot": "sidebar-group",
3118
+ "data-sidebar": "group",
3119
+ className: cn("relative flex w-full min-w-0 flex-col p-2", className),
3120
+ ...props
3121
+ }
3122
+ );
3123
+ }
3124
+ function SidebarGroupLabel({
3125
+ className,
3126
+ asChild = false,
3127
+ ...props
3128
+ }) {
3129
+ const Comp = asChild ? Slot4 : "div";
3130
+ return /* @__PURE__ */ jsx38(
3131
+ Comp,
3132
+ {
3133
+ "data-slot": "sidebar-group-label",
3134
+ "data-sidebar": "group-label",
3135
+ className: cn(
3136
+ "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
3137
+ "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
3138
+ className
3139
+ ),
3140
+ ...props
3141
+ }
3142
+ );
3143
+ }
3144
+ function SidebarGroupAction({
3145
+ className,
3146
+ asChild = false,
3147
+ ...props
3148
+ }) {
3149
+ const Comp = asChild ? Slot4 : "button";
3150
+ return /* @__PURE__ */ jsx38(
3151
+ Comp,
3152
+ {
3153
+ "data-slot": "sidebar-group-action",
3154
+ "data-sidebar": "group-action",
3155
+ className: cn(
3156
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
3157
+ // Increases the hit area of the button on mobile.
3158
+ "after:absolute after:-inset-2 md:after:hidden",
3159
+ "group-data-[collapsible=icon]:hidden",
3160
+ className
3161
+ ),
3162
+ ...props
3163
+ }
3164
+ );
3165
+ }
3166
+ function SidebarGroupContent({
3167
+ className,
3168
+ ...props
3169
+ }) {
3170
+ return /* @__PURE__ */ jsx38(
3171
+ "div",
3172
+ {
3173
+ "data-slot": "sidebar-group-content",
3174
+ "data-sidebar": "group-content",
3175
+ className: cn("w-full text-sm", className),
3176
+ ...props
3177
+ }
3178
+ );
3179
+ }
3180
+ function SidebarMenu({ className, ...props }) {
3181
+ return /* @__PURE__ */ jsx38(
3182
+ "ul",
3183
+ {
3184
+ "data-slot": "sidebar-menu",
3185
+ "data-sidebar": "menu",
3186
+ className: cn("flex w-full min-w-0 flex-col gap-1", className),
3187
+ ...props
3188
+ }
3189
+ );
3190
+ }
3191
+ function SidebarMenuItem({ className, ...props }) {
3192
+ return /* @__PURE__ */ jsx38(
3193
+ "li",
3194
+ {
3195
+ "data-slot": "sidebar-menu-item",
3196
+ "data-sidebar": "menu-item",
3197
+ className: cn("group/menu-item relative", className),
3198
+ ...props
3199
+ }
3200
+ );
3201
+ }
3202
+ var sidebarMenuButtonVariants = cva6(
3203
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
3204
+ {
3205
+ variants: {
3206
+ variant: {
3207
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
3208
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
3209
+ },
3210
+ size: {
3211
+ default: "h-8 text-sm",
3212
+ sm: "h-7 text-xs",
3213
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
3214
+ }
3215
+ },
3216
+ defaultVariants: {
3217
+ variant: "default",
3218
+ size: "default"
3219
+ }
3220
+ }
3221
+ );
3222
+ function SidebarMenuButton({
3223
+ asChild = false,
3224
+ isActive = false,
3225
+ variant = "default",
3226
+ size = "default",
3227
+ tooltip,
3228
+ className,
3229
+ ...props
3230
+ }) {
3231
+ const Comp = asChild ? Slot4 : "button";
3232
+ const { isMobile, state } = useSidebar();
3233
+ const button = /* @__PURE__ */ jsx38(
3234
+ Comp,
3235
+ {
3236
+ "data-slot": "sidebar-menu-button",
3237
+ "data-sidebar": "menu-button",
3238
+ "data-size": size,
3239
+ "data-active": isActive,
3240
+ className: cn(sidebarMenuButtonVariants({ variant, size }), className),
3241
+ ...props
3242
+ }
3243
+ );
3244
+ if (!tooltip) {
3245
+ return button;
3246
+ }
3247
+ if (typeof tooltip === "string") {
3248
+ tooltip = {
3249
+ children: tooltip
3250
+ };
3251
+ }
3252
+ return /* @__PURE__ */ jsxs17(Tooltip, { children: [
3253
+ /* @__PURE__ */ jsx38(TooltipTrigger, { asChild: true, children: button }),
3254
+ /* @__PURE__ */ jsx38(
3255
+ TooltipContent,
3256
+ {
3257
+ side: "right",
3258
+ align: "center",
3259
+ hidden: state !== "collapsed" || isMobile,
3260
+ ...tooltip
3261
+ }
3262
+ )
3263
+ ] });
3264
+ }
3265
+ function SidebarMenuAction({
3266
+ className,
3267
+ asChild = false,
3268
+ showOnHover = false,
3269
+ ...props
3270
+ }) {
3271
+ const Comp = asChild ? Slot4 : "button";
3272
+ return /* @__PURE__ */ jsx38(
3273
+ Comp,
3274
+ {
3275
+ "data-slot": "sidebar-menu-action",
3276
+ "data-sidebar": "menu-action",
3277
+ className: cn(
3278
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
3279
+ // Increases the hit area of the button on mobile.
3280
+ "after:absolute after:-inset-2 md:after:hidden",
3281
+ "peer-data-[size=sm]/menu-button:top-1",
3282
+ "peer-data-[size=default]/menu-button:top-1.5",
3283
+ "peer-data-[size=lg]/menu-button:top-2.5",
3284
+ "group-data-[collapsible=icon]:hidden",
3285
+ showOnHover && "peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0",
3286
+ className
3287
+ ),
3288
+ ...props
3289
+ }
3290
+ );
3291
+ }
3292
+ function SidebarMenuBadge({
3293
+ className,
3294
+ ...props
3295
+ }) {
3296
+ return /* @__PURE__ */ jsx38(
3297
+ "div",
3298
+ {
3299
+ "data-slot": "sidebar-menu-badge",
3300
+ "data-sidebar": "menu-badge",
3301
+ className: cn(
3302
+ "text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none",
3303
+ "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
3304
+ "peer-data-[size=sm]/menu-button:top-1",
3305
+ "peer-data-[size=default]/menu-button:top-1.5",
3306
+ "peer-data-[size=lg]/menu-button:top-2.5",
3307
+ "group-data-[collapsible=icon]:hidden",
3308
+ className
3309
+ ),
3310
+ ...props
3311
+ }
3312
+ );
3313
+ }
3314
+ function SidebarMenuSkeleton({
3315
+ className,
3316
+ showIcon = false,
3317
+ ...props
3318
+ }) {
3319
+ const width = React5.useMemo(() => {
3320
+ return `${Math.floor(Math.random() * 40) + 50}%`;
3321
+ }, []);
3322
+ return /* @__PURE__ */ jsxs17(
3323
+ "div",
3324
+ {
3325
+ "data-slot": "sidebar-menu-skeleton",
3326
+ "data-sidebar": "menu-skeleton",
3327
+ className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
3328
+ ...props,
3329
+ children: [
3330
+ showIcon && /* @__PURE__ */ jsx38(
3331
+ Skeleton,
3332
+ {
3333
+ className: "size-4 rounded-md",
3334
+ "data-sidebar": "menu-skeleton-icon"
3335
+ }
3336
+ ),
3337
+ /* @__PURE__ */ jsx38(
3338
+ Skeleton,
3339
+ {
3340
+ className: "h-4 max-w-(--skeleton-width) flex-1",
3341
+ "data-sidebar": "menu-skeleton-text",
3342
+ style: {
3343
+ "--skeleton-width": width
3344
+ }
3345
+ }
3346
+ )
3347
+ ]
3348
+ }
3349
+ );
3350
+ }
3351
+ function SidebarMenuSub({ className, ...props }) {
3352
+ return /* @__PURE__ */ jsx38(
3353
+ "ul",
3354
+ {
3355
+ "data-slot": "sidebar-menu-sub",
3356
+ "data-sidebar": "menu-sub",
3357
+ className: cn(
3358
+ "border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5",
3359
+ "group-data-[collapsible=icon]:hidden",
3360
+ className
3361
+ ),
3362
+ ...props
3363
+ }
3364
+ );
3365
+ }
3366
+ function SidebarMenuSubItem({
3367
+ className,
3368
+ ...props
3369
+ }) {
3370
+ return /* @__PURE__ */ jsx38(
3371
+ "li",
3372
+ {
3373
+ "data-slot": "sidebar-menu-sub-item",
3374
+ "data-sidebar": "menu-sub-item",
3375
+ className: cn("group/menu-sub-item relative", className),
3376
+ ...props
3377
+ }
3378
+ );
3379
+ }
3380
+ function SidebarMenuSubButton({
3381
+ asChild = false,
3382
+ size = "md",
3383
+ isActive = false,
3384
+ className,
3385
+ ...props
3386
+ }) {
3387
+ const Comp = asChild ? Slot4 : "a";
3388
+ return /* @__PURE__ */ jsx38(
3389
+ Comp,
3390
+ {
3391
+ "data-slot": "sidebar-menu-sub-button",
3392
+ "data-sidebar": "menu-sub-button",
3393
+ "data-size": size,
3394
+ "data-active": isActive,
3395
+ className: cn(
3396
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
3397
+ "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
3398
+ size === "sm" && "text-xs",
3399
+ size === "md" && "text-sm",
3400
+ "group-data-[collapsible=icon]:hidden",
3401
+ className
3402
+ ),
3403
+ ...props
3404
+ }
3405
+ );
3406
+ }
3407
+
3408
+ // src/components/ui/calendar.tsx
3409
+ import { ChevronLeft, ChevronRight as ChevronRight2 } from "lucide-react";
3410
+ import { DayPicker } from "react-day-picker";
3411
+ import { jsx as jsx39 } from "react/jsx-runtime";
3412
+ function Calendar({
3413
+ className,
3414
+ classNames,
3415
+ showOutsideDays = true,
3416
+ ...props
3417
+ }) {
3418
+ return /* @__PURE__ */ jsx39(
3419
+ DayPicker,
3420
+ {
3421
+ showOutsideDays,
3422
+ className: cn("p-3", className),
3423
+ classNames: {
3424
+ months: "flex flex-col sm:flex-row gap-2",
3425
+ month: "flex flex-col gap-4",
3426
+ caption: "flex justify-center pt-1 relative items-center w-full",
3427
+ caption_label: "text-sm font-medium",
3428
+ nav: "flex items-center gap-1",
3429
+ nav_button: cn(
3430
+ buttonVariants({ variant: "outline" }),
3431
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100"
3432
+ ),
3433
+ nav_button_previous: "absolute left-1",
3434
+ nav_button_next: "absolute right-1",
3435
+ table: "w-full border-collapse space-x-1",
3436
+ head_row: "flex",
3437
+ head_cell: "text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]",
3438
+ row: "flex w-full mt-2",
3439
+ cell: cn(
3440
+ "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-range-end)]:rounded-r-md",
3441
+ props.mode === "range" ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md" : "[&:has([aria-selected])]:rounded-md"
3442
+ ),
3443
+ day: cn(
3444
+ buttonVariants({ variant: "ghost" }),
3445
+ "size-8 p-0 font-normal aria-selected:opacity-100"
3446
+ ),
3447
+ day_range_start: "day-range-start aria-selected:bg-primary aria-selected:text-primary-foreground",
3448
+ day_range_end: "day-range-end aria-selected:bg-primary aria-selected:text-primary-foreground",
3449
+ day_selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
3450
+ day_today: "bg-accent text-accent-foreground",
3451
+ day_outside: "day-outside text-muted-foreground aria-selected:text-muted-foreground",
3452
+ day_disabled: "text-muted-foreground opacity-50",
3453
+ day_range_middle: "aria-selected:bg-accent aria-selected:text-accent-foreground",
3454
+ day_hidden: "invisible",
3455
+ ...classNames
3456
+ },
3457
+ components: {
3458
+ IconLeft: ({ className: className2, ...props2 }) => /* @__PURE__ */ jsx39(ChevronLeft, { className: cn("size-4", className2), ...props2 }),
3459
+ IconRight: ({ className: className2, ...props2 }) => /* @__PURE__ */ jsx39(ChevronRight2, { className: cn("size-4", className2), ...props2 })
3460
+ },
3461
+ ...props
3462
+ }
3463
+ );
3464
+ }
3465
+
3466
+ // src/components/ui/resizable.tsx
3467
+ import { GripVerticalIcon } from "lucide-react";
3468
+ import * as ResizablePrimitive from "react-resizable-panels";
3469
+ import { jsx as jsx40 } from "react/jsx-runtime";
3470
+ function ResizablePanelGroup({
3471
+ className,
3472
+ ...props
3473
+ }) {
3474
+ return /* @__PURE__ */ jsx40(
3475
+ ResizablePrimitive.PanelGroup,
3476
+ {
3477
+ "data-slot": "resizable-panel-group",
3478
+ className: cn(
3479
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
3480
+ className
3481
+ ),
3482
+ ...props
3483
+ }
3484
+ );
3485
+ }
3486
+ function ResizablePanel({
3487
+ ...props
3488
+ }) {
3489
+ return /* @__PURE__ */ jsx40(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
3490
+ }
3491
+ function ResizableHandle({
3492
+ withHandle,
3493
+ className,
3494
+ ...props
3495
+ }) {
3496
+ return /* @__PURE__ */ jsx40(
3497
+ ResizablePrimitive.PanelResizeHandle,
3498
+ {
3499
+ "data-slot": "resizable-handle",
3500
+ className: cn(
3501
+ "bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
3502
+ className
3503
+ ),
3504
+ ...props,
3505
+ children: withHandle && /* @__PURE__ */ jsx40("div", { className: "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border", children: /* @__PURE__ */ jsx40(GripVerticalIcon, { className: "size-2.5" }) })
3506
+ }
3507
+ );
3508
+ }
3509
+
3510
+ // src/components/ui/command.tsx
3511
+ import { Command as CommandPrimitive } from "cmdk";
3512
+ import { SearchIcon } from "lucide-react";
3513
+ import { jsx as jsx41, jsxs as jsxs18 } from "react/jsx-runtime";
3514
+ function Command({
3515
+ className,
3516
+ ...props
3517
+ }) {
3518
+ return /* @__PURE__ */ jsx41(
3519
+ CommandPrimitive,
3520
+ {
3521
+ "data-slot": "command",
3522
+ className: cn(
3523
+ "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
3524
+ className
3525
+ ),
3526
+ ...props
3527
+ }
3528
+ );
3529
+ }
3530
+ function CommandDialog({
3531
+ title = "Command Palette",
3532
+ description = "Search for a command to run...",
3533
+ children,
3534
+ ...props
3535
+ }) {
3536
+ return /* @__PURE__ */ jsxs18(Dialog, { ...props, children: [
3537
+ /* @__PURE__ */ jsxs18(DialogHeader, { className: "sr-only", children: [
3538
+ /* @__PURE__ */ jsx41(DialogTitle, { children: title }),
3539
+ /* @__PURE__ */ jsx41(DialogDescription, { children: description })
3540
+ ] }),
3541
+ /* @__PURE__ */ jsx41(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx41(Command, { className: "[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) })
3542
+ ] });
3543
+ }
3544
+ function CommandInput({
3545
+ className,
3546
+ ...props
3547
+ }) {
3548
+ return /* @__PURE__ */ jsxs18(
3549
+ "div",
3550
+ {
3551
+ "data-slot": "command-input-wrapper",
3552
+ className: "flex h-9 items-center gap-2 border-b px-3",
3553
+ children: [
3554
+ /* @__PURE__ */ jsx41(SearchIcon, { className: "size-4 shrink-0 opacity-50" }),
3555
+ /* @__PURE__ */ jsx41(
3556
+ CommandPrimitive.Input,
3557
+ {
3558
+ "data-slot": "command-input",
3559
+ className: cn(
3560
+ "placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
3561
+ className
3562
+ ),
3563
+ ...props
3564
+ }
3565
+ )
3566
+ ]
3567
+ }
3568
+ );
3569
+ }
3570
+ function CommandList({
3571
+ className,
3572
+ ...props
3573
+ }) {
3574
+ return /* @__PURE__ */ jsx41(
3575
+ CommandPrimitive.List,
3576
+ {
3577
+ "data-slot": "command-list",
3578
+ className: cn(
3579
+ "max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
3580
+ className
3581
+ ),
3582
+ ...props
3583
+ }
3584
+ );
3585
+ }
3586
+ function CommandEmpty({
3587
+ ...props
3588
+ }) {
3589
+ return /* @__PURE__ */ jsx41(
3590
+ CommandPrimitive.Empty,
3591
+ {
3592
+ "data-slot": "command-empty",
3593
+ className: "py-6 text-center text-sm",
3594
+ ...props
3595
+ }
3596
+ );
3597
+ }
3598
+ function CommandGroup({
3599
+ className,
3600
+ ...props
3601
+ }) {
3602
+ return /* @__PURE__ */ jsx41(
3603
+ CommandPrimitive.Group,
3604
+ {
3605
+ "data-slot": "command-group",
3606
+ className: cn(
3607
+ "text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
3608
+ className
3609
+ ),
3610
+ ...props
3611
+ }
3612
+ );
3613
+ }
3614
+ function CommandSeparator({
3615
+ className,
3616
+ ...props
3617
+ }) {
3618
+ return /* @__PURE__ */ jsx41(
3619
+ CommandPrimitive.Separator,
3620
+ {
3621
+ "data-slot": "command-separator",
3622
+ className: cn("bg-border -mx-1 h-px", className),
3623
+ ...props
3624
+ }
3625
+ );
3626
+ }
3627
+ function CommandItem({
3628
+ className,
3629
+ ...props
3630
+ }) {
3631
+ return /* @__PURE__ */ jsx41(
3632
+ CommandPrimitive.Item,
3633
+ {
3634
+ "data-slot": "command-item",
3635
+ className: cn(
3636
+ "data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3637
+ className
3638
+ ),
3639
+ ...props
3640
+ }
3641
+ );
3642
+ }
3643
+ function CommandShortcut({
3644
+ className,
3645
+ ...props
3646
+ }) {
3647
+ return /* @__PURE__ */ jsx41(
3648
+ "span",
3649
+ {
3650
+ "data-slot": "command-shortcut",
3651
+ className: cn(
3652
+ "text-muted-foreground ml-auto text-xs tracking-widest",
3653
+ className
3654
+ ),
3655
+ ...props
3656
+ }
3657
+ );
3658
+ }
3659
+
3660
+ // src/components/ui/form.tsx
3661
+ import * as React6 from "react";
3662
+ import { Slot as Slot5 } from "@radix-ui/react-slot";
3663
+ import {
3664
+ Controller,
3665
+ FormProvider,
3666
+ useFormContext,
3667
+ useFormState
3668
+ } from "react-hook-form";
3669
+ import { jsx as jsx42 } from "react/jsx-runtime";
3670
+ var Form = FormProvider;
3671
+ var FormFieldContext = React6.createContext(
3672
+ {}
3673
+ );
3674
+ var FormField = ({
3675
+ ...props
3676
+ }) => {
3677
+ return /* @__PURE__ */ jsx42(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx42(Controller, { ...props }) });
3678
+ };
3679
+ var useFormField = () => {
3680
+ const fieldContext = React6.useContext(FormFieldContext);
3681
+ const itemContext = React6.useContext(FormItemContext);
3682
+ const { getFieldState } = useFormContext();
3683
+ const formState = useFormState({ name: fieldContext.name });
3684
+ const fieldState = getFieldState(fieldContext.name, formState);
3685
+ if (!fieldContext) {
3686
+ throw new Error("useFormField should be used within <FormField>");
3687
+ }
3688
+ const { id } = itemContext;
3689
+ return {
3690
+ id,
3691
+ name: fieldContext.name,
3692
+ formItemId: `${id}-form-item`,
3693
+ formDescriptionId: `${id}-form-item-description`,
3694
+ formMessageId: `${id}-form-item-message`,
3695
+ ...fieldState
3696
+ };
3697
+ };
3698
+ var FormItemContext = React6.createContext(
3699
+ {}
3700
+ );
3701
+ function FormItem({ className, ...props }) {
3702
+ const id = React6.useId();
3703
+ return /* @__PURE__ */ jsx42(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx42(
3704
+ "div",
3705
+ {
3706
+ "data-slot": "form-item",
3707
+ className: cn("grid gap-2", className),
3708
+ ...props
3709
+ }
3710
+ ) });
3711
+ }
3712
+ function FormLabel({
3713
+ className,
3714
+ ...props
3715
+ }) {
3716
+ const { error, formItemId } = useFormField();
3717
+ return /* @__PURE__ */ jsx42(
3718
+ Label,
3719
+ {
3720
+ "data-slot": "form-label",
3721
+ "data-error": !!error,
3722
+ className: cn("data-[error=true]:text-destructive", className),
3723
+ htmlFor: formItemId,
3724
+ ...props
3725
+ }
3726
+ );
3727
+ }
3728
+ function FormControl({ ...props }) {
3729
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
3730
+ return /* @__PURE__ */ jsx42(
3731
+ Slot5,
3732
+ {
3733
+ "data-slot": "form-control",
3734
+ id: formItemId,
3735
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
3736
+ "aria-invalid": !!error,
3737
+ ...props
3738
+ }
3739
+ );
3740
+ }
3741
+ function FormDescription({ className, ...props }) {
3742
+ const { formDescriptionId } = useFormField();
3743
+ return /* @__PURE__ */ jsx42(
3744
+ "p",
3745
+ {
3746
+ "data-slot": "form-description",
3747
+ id: formDescriptionId,
3748
+ className: cn("text-muted-foreground text-sm", className),
3749
+ ...props
3750
+ }
3751
+ );
3752
+ }
3753
+ function FormMessage({ className, ...props }) {
3754
+ const { error, formMessageId } = useFormField();
3755
+ const body = error ? String(error?.message ?? "") : props.children;
3756
+ if (!body) {
3757
+ return null;
3758
+ }
3759
+ return /* @__PURE__ */ jsx42(
3760
+ "p",
3761
+ {
3762
+ "data-slot": "form-message",
3763
+ id: formMessageId,
3764
+ className: cn("text-destructive text-sm", className),
3765
+ ...props,
3766
+ children: body
3767
+ }
3768
+ );
3769
+ }
3770
+
3771
+ // src/components/ui/chart.tsx
3772
+ import * as React7 from "react";
3773
+ import * as RechartsPrimitive from "recharts";
3774
+ import { Fragment, jsx as jsx43, jsxs as jsxs19 } from "react/jsx-runtime";
3775
+ var THEMES = { light: "", dark: ".dark" };
3776
+ var ChartContext = React7.createContext(null);
3777
+ function useChart() {
3778
+ const context = React7.useContext(ChartContext);
3779
+ if (!context) {
3780
+ throw new Error("useChart must be used within a <ChartContainer />");
3781
+ }
3782
+ return context;
3783
+ }
3784
+ function ChartContainer({
3785
+ id,
3786
+ className,
3787
+ children,
3788
+ config,
3789
+ ...props
3790
+ }) {
3791
+ const uniqueId = React7.useId();
3792
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
3793
+ return /* @__PURE__ */ jsx43(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs19(
3794
+ "div",
3795
+ {
3796
+ "data-slot": "chart",
3797
+ "data-chart": chartId,
3798
+ className: cn(
3799
+ "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
3800
+ className
3801
+ ),
3802
+ ...props,
3803
+ children: [
3804
+ /* @__PURE__ */ jsx43(ChartStyle, { id: chartId, config }),
3805
+ /* @__PURE__ */ jsx43(RechartsPrimitive.ResponsiveContainer, { children })
3806
+ ]
3807
+ }
3808
+ ) });
3809
+ }
3810
+ var ChartStyle = ({ id, config }) => {
3811
+ const colorConfig = Object.entries(config).filter(
3812
+ ([, config2]) => config2.theme || config2.color
3813
+ );
3814
+ if (!colorConfig.length) {
3815
+ return null;
3816
+ }
3817
+ return /* @__PURE__ */ jsx43(
3818
+ "style",
3819
+ {
3820
+ dangerouslySetInnerHTML: {
3821
+ __html: Object.entries(THEMES).map(
3822
+ ([theme, prefix]) => `
3823
+ ${prefix} [data-chart=${id}] {
3824
+ ${colorConfig.map(([key, itemConfig]) => {
3825
+ const color = itemConfig.theme?.[theme] || itemConfig.color;
3826
+ return color ? ` --color-${key}: ${color};` : null;
3827
+ }).join("\n")}
3828
+ }
3829
+ `
3830
+ ).join("\n")
3831
+ }
3832
+ }
3833
+ );
3834
+ };
3835
+ var ChartTooltip = RechartsPrimitive.Tooltip;
3836
+ function ChartTooltipContent({
3837
+ active,
3838
+ payload,
3839
+ className,
3840
+ indicator = "dot",
3841
+ hideLabel = false,
3842
+ hideIndicator = false,
3843
+ label,
3844
+ labelFormatter,
3845
+ labelClassName,
3846
+ formatter,
3847
+ color,
3848
+ nameKey,
3849
+ labelKey
3850
+ }) {
3851
+ const { config } = useChart();
3852
+ const tooltipLabel = React7.useMemo(() => {
3853
+ if (hideLabel || !payload?.length) {
3854
+ return null;
3855
+ }
3856
+ const [item] = payload;
3857
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
3858
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
3859
+ const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
3860
+ if (labelFormatter) {
3861
+ return /* @__PURE__ */ jsx43("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
3862
+ }
3863
+ if (!value) {
3864
+ return null;
3865
+ }
3866
+ return /* @__PURE__ */ jsx43("div", { className: cn("font-medium", labelClassName), children: value });
3867
+ }, [
3868
+ label,
3869
+ labelFormatter,
3870
+ payload,
3871
+ hideLabel,
3872
+ labelClassName,
3873
+ config,
3874
+ labelKey
3875
+ ]);
3876
+ if (!active || !payload?.length) {
3877
+ return null;
3878
+ }
3879
+ const nestLabel = payload.length === 1 && indicator !== "dot";
3880
+ return /* @__PURE__ */ jsxs19(
3881
+ "div",
3882
+ {
3883
+ className: cn(
3884
+ "border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl",
3885
+ className
3886
+ ),
3887
+ children: [
3888
+ !nestLabel ? tooltipLabel : null,
3889
+ /* @__PURE__ */ jsx43("div", { className: "grid gap-1.5", children: payload.map((item, index) => {
3890
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
3891
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
3892
+ const indicatorColor = color || item.payload.fill || item.color;
3893
+ return /* @__PURE__ */ jsx43(
3894
+ "div",
3895
+ {
3896
+ className: cn(
3897
+ "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
3898
+ indicator === "dot" && "items-center"
3899
+ ),
3900
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs19(Fragment, { children: [
3901
+ itemConfig?.icon ? /* @__PURE__ */ jsx43(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx43(
3902
+ "div",
3903
+ {
3904
+ className: cn(
3905
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
3906
+ {
3907
+ "h-2.5 w-2.5": indicator === "dot",
3908
+ "w-1": indicator === "line",
3909
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
3910
+ "my-0.5": nestLabel && indicator === "dashed"
3911
+ }
3912
+ ),
3913
+ style: {
3914
+ "--color-bg": indicatorColor,
3915
+ "--color-border": indicatorColor
3916
+ }
3917
+ }
3918
+ ),
3919
+ /* @__PURE__ */ jsxs19(
3920
+ "div",
3921
+ {
3922
+ className: cn(
3923
+ "flex flex-1 justify-between leading-none",
3924
+ nestLabel ? "items-end" : "items-center"
3925
+ ),
3926
+ children: [
3927
+ /* @__PURE__ */ jsxs19("div", { className: "grid gap-1.5", children: [
3928
+ nestLabel ? tooltipLabel : null,
3929
+ /* @__PURE__ */ jsx43("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
3930
+ ] }),
3931
+ item.value && /* @__PURE__ */ jsx43("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value.toLocaleString() })
3932
+ ]
3933
+ }
3934
+ )
3935
+ ] })
3936
+ },
3937
+ item.dataKey
3938
+ );
3939
+ }) })
3940
+ ]
3941
+ }
3942
+ );
3943
+ }
3944
+ var ChartLegend = RechartsPrimitive.Legend;
3945
+ function ChartLegendContent({
3946
+ className,
3947
+ hideIcon = false,
3948
+ payload,
3949
+ verticalAlign = "bottom",
3950
+ nameKey
3951
+ }) {
3952
+ const { config } = useChart();
3953
+ if (!payload?.length) {
3954
+ return null;
3955
+ }
3956
+ return /* @__PURE__ */ jsx43(
3957
+ "div",
3958
+ {
3959
+ className: cn(
3960
+ "flex items-center justify-center gap-4",
3961
+ verticalAlign === "top" ? "pb-3" : "pt-3",
3962
+ className
3963
+ ),
3964
+ children: payload.map((item) => {
3965
+ const key = `${nameKey || item.dataKey || "value"}`;
3966
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
3967
+ return /* @__PURE__ */ jsxs19(
3968
+ "div",
3969
+ {
3970
+ className: cn(
3971
+ "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
3972
+ ),
3973
+ children: [
3974
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx43(itemConfig.icon, {}) : /* @__PURE__ */ jsx43(
3975
+ "div",
3976
+ {
3977
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
3978
+ style: {
3979
+ backgroundColor: item.color
3980
+ }
3981
+ }
3982
+ ),
3983
+ itemConfig?.label
3984
+ ]
3985
+ },
3986
+ item.value
3987
+ );
3988
+ })
3989
+ }
3990
+ );
3991
+ }
3992
+ function getPayloadConfigFromPayload(config, payload, key) {
3993
+ if (typeof payload !== "object" || payload === null) {
3994
+ return void 0;
3995
+ }
3996
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
3997
+ let configLabelKey = key;
3998
+ if (key in payload && typeof payload[key] === "string") {
3999
+ configLabelKey = payload[key];
4000
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
4001
+ configLabelKey = payloadPayload[key];
4002
+ }
4003
+ return configLabelKey in config ? config[configLabelKey] : config[key];
4004
+ }
4005
+
4006
+ // src/components/ui/carousel.tsx
4007
+ import * as React8 from "react";
4008
+ import useEmblaCarousel from "embla-carousel-react";
4009
+ import { ArrowLeft, ArrowRight } from "lucide-react";
4010
+ import { jsx as jsx44, jsxs as jsxs20 } from "react/jsx-runtime";
4011
+ var CarouselContext = React8.createContext(null);
4012
+ function useCarousel() {
4013
+ const context = React8.useContext(CarouselContext);
4014
+ if (!context) {
4015
+ throw new Error("useCarousel must be used within a <Carousel />");
4016
+ }
4017
+ return context;
4018
+ }
4019
+ function Carousel({
4020
+ orientation = "horizontal",
4021
+ opts,
4022
+ setApi,
4023
+ plugins,
4024
+ className,
4025
+ children,
4026
+ ...props
4027
+ }) {
4028
+ const [carouselRef, api] = useEmblaCarousel(
4029
+ {
4030
+ ...opts,
4031
+ axis: orientation === "horizontal" ? "x" : "y"
4032
+ },
4033
+ plugins
4034
+ );
4035
+ const [canScrollPrev, setCanScrollPrev] = React8.useState(false);
4036
+ const [canScrollNext, setCanScrollNext] = React8.useState(false);
4037
+ const onSelect = React8.useCallback((api2) => {
4038
+ if (!api2) return;
4039
+ setCanScrollPrev(api2.canScrollPrev());
4040
+ setCanScrollNext(api2.canScrollNext());
4041
+ }, []);
4042
+ const scrollPrev = React8.useCallback(() => {
4043
+ api?.scrollPrev();
4044
+ }, [api]);
4045
+ const scrollNext = React8.useCallback(() => {
4046
+ api?.scrollNext();
4047
+ }, [api]);
4048
+ const handleKeyDown = React8.useCallback(
4049
+ (event) => {
4050
+ if (event.key === "ArrowLeft") {
4051
+ event.preventDefault();
4052
+ scrollPrev();
4053
+ } else if (event.key === "ArrowRight") {
4054
+ event.preventDefault();
4055
+ scrollNext();
4056
+ }
4057
+ },
4058
+ [scrollPrev, scrollNext]
4059
+ );
4060
+ React8.useEffect(() => {
4061
+ if (!api || !setApi) return;
4062
+ setApi(api);
4063
+ }, [api, setApi]);
4064
+ React8.useEffect(() => {
4065
+ if (!api) return;
4066
+ onSelect(api);
4067
+ api.on("reInit", onSelect);
4068
+ api.on("select", onSelect);
4069
+ return () => {
4070
+ api?.off("select", onSelect);
4071
+ };
4072
+ }, [api, onSelect]);
4073
+ return /* @__PURE__ */ jsx44(
4074
+ CarouselContext.Provider,
4075
+ {
4076
+ value: {
4077
+ carouselRef,
4078
+ api,
4079
+ opts,
4080
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
4081
+ scrollPrev,
4082
+ scrollNext,
4083
+ canScrollPrev,
4084
+ canScrollNext
4085
+ },
4086
+ children: /* @__PURE__ */ jsx44(
4087
+ "div",
4088
+ {
4089
+ onKeyDownCapture: handleKeyDown,
4090
+ className: cn("relative", className),
4091
+ role: "region",
4092
+ "aria-roledescription": "carousel",
4093
+ "data-slot": "carousel",
4094
+ ...props,
4095
+ children
4096
+ }
4097
+ )
4098
+ }
4099
+ );
4100
+ }
4101
+ function CarouselContent({ className, ...props }) {
4102
+ const { carouselRef, orientation } = useCarousel();
4103
+ return /* @__PURE__ */ jsx44(
4104
+ "div",
4105
+ {
4106
+ ref: carouselRef,
4107
+ className: "overflow-hidden",
4108
+ "data-slot": "carousel-content",
4109
+ children: /* @__PURE__ */ jsx44(
4110
+ "div",
4111
+ {
4112
+ className: cn(
4113
+ "flex",
4114
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
4115
+ className
4116
+ ),
4117
+ ...props
4118
+ }
4119
+ )
4120
+ }
4121
+ );
4122
+ }
4123
+ function CarouselItem({ className, ...props }) {
4124
+ const { orientation } = useCarousel();
4125
+ return /* @__PURE__ */ jsx44(
4126
+ "div",
4127
+ {
4128
+ role: "group",
4129
+ "aria-roledescription": "slide",
4130
+ "data-slot": "carousel-item",
4131
+ className: cn(
4132
+ "min-w-0 shrink-0 grow-0 basis-full",
4133
+ orientation === "horizontal" ? "pl-4" : "pt-4",
4134
+ className
4135
+ ),
4136
+ ...props
4137
+ }
4138
+ );
4139
+ }
4140
+ function CarouselPrevious({
4141
+ className,
4142
+ variant = "outline",
4143
+ size = "icon",
4144
+ ...props
4145
+ }) {
4146
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
4147
+ return /* @__PURE__ */ jsxs20(
4148
+ Button,
4149
+ {
4150
+ "data-slot": "carousel-previous",
4151
+ variant,
4152
+ size,
4153
+ className: cn(
4154
+ "absolute size-8 rounded-full",
4155
+ orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
4156
+ className
4157
+ ),
4158
+ disabled: !canScrollPrev,
4159
+ onClick: scrollPrev,
4160
+ ...props,
4161
+ children: [
4162
+ /* @__PURE__ */ jsx44(ArrowLeft, {}),
4163
+ /* @__PURE__ */ jsx44("span", { className: "sr-only", children: "Previous slide" })
4164
+ ]
4165
+ }
4166
+ );
4167
+ }
4168
+ function CarouselNext({
4169
+ className,
4170
+ variant = "outline",
4171
+ size = "icon",
4172
+ ...props
4173
+ }) {
4174
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
4175
+ return /* @__PURE__ */ jsxs20(
4176
+ Button,
4177
+ {
4178
+ "data-slot": "carousel-next",
4179
+ variant,
4180
+ size,
4181
+ className: cn(
4182
+ "absolute size-8 rounded-full",
4183
+ orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
4184
+ className
4185
+ ),
4186
+ disabled: !canScrollNext,
4187
+ onClick: scrollNext,
4188
+ ...props,
4189
+ children: [
4190
+ /* @__PURE__ */ jsx44(ArrowRight, {}),
4191
+ /* @__PURE__ */ jsx44("span", { className: "sr-only", children: "Next slide" })
4192
+ ]
4193
+ }
4194
+ );
4195
+ }
4196
+
4197
+ // src/components/ui/input-otp.tsx
4198
+ import * as React9 from "react";
4199
+ import { OTPInput, OTPInputContext } from "input-otp";
4200
+ import { MinusIcon } from "lucide-react";
4201
+ import { jsx as jsx45, jsxs as jsxs21 } from "react/jsx-runtime";
4202
+ function InputOTP({
4203
+ className,
4204
+ containerClassName,
4205
+ ...props
4206
+ }) {
4207
+ return /* @__PURE__ */ jsx45(
4208
+ OTPInput,
4209
+ {
4210
+ "data-slot": "input-otp",
4211
+ containerClassName: cn(
4212
+ "flex items-center gap-2 has-disabled:opacity-50",
4213
+ containerClassName
4214
+ ),
4215
+ className: cn("disabled:cursor-not-allowed", className),
4216
+ ...props
4217
+ }
4218
+ );
4219
+ }
4220
+ function InputOTPGroup({ className, ...props }) {
4221
+ return /* @__PURE__ */ jsx45(
4222
+ "div",
4223
+ {
4224
+ "data-slot": "input-otp-group",
4225
+ className: cn("flex items-center gap-1", className),
4226
+ ...props
4227
+ }
4228
+ );
4229
+ }
4230
+ function InputOTPSlot({
4231
+ index,
4232
+ className,
4233
+ ...props
4234
+ }) {
4235
+ const inputOTPContext = React9.useContext(OTPInputContext);
4236
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
4237
+ return /* @__PURE__ */ jsxs21(
4238
+ "div",
4239
+ {
4240
+ "data-slot": "input-otp-slot",
4241
+ "data-active": isActive,
4242
+ className: cn(
4243
+ "data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm bg-input-background transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
4244
+ className
4245
+ ),
4246
+ ...props,
4247
+ children: [
4248
+ char,
4249
+ hasFakeCaret && /* @__PURE__ */ jsx45("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx45("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
4250
+ ]
4251
+ }
4252
+ );
4253
+ }
4254
+ function InputOTPSeparator({ ...props }) {
4255
+ return /* @__PURE__ */ jsx45("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx45(MinusIcon, {}) });
4256
+ }
4257
+
4258
+ // src/components/ui/sonner.tsx
4259
+ import { useTheme } from "next-themes";
4260
+ import { Toaster as Sonner } from "sonner";
4261
+ import { jsx as jsx46 } from "react/jsx-runtime";
4262
+ var Toaster = ({ ...props }) => {
4263
+ const { theme = "system" } = useTheme();
4264
+ return /* @__PURE__ */ jsx46(
4265
+ Sonner,
4266
+ {
4267
+ theme,
4268
+ className: "toaster group",
4269
+ style: {
4270
+ "--normal-bg": "var(--popover)",
4271
+ "--normal-text": "var(--popover-foreground)",
4272
+ "--normal-border": "var(--border)"
4273
+ },
4274
+ ...props
4275
+ }
4276
+ );
4277
+ };
4278
+
4279
+ // src/components/figma/ImageWithFallback.tsx
4280
+ import { useState as useState4 } from "react";
4281
+ import { jsx as jsx47 } from "react/jsx-runtime";
4282
+ var ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
4283
+ function ImageWithFallback(props) {
4284
+ const [didError, setDidError] = useState4(false);
4285
+ const handleError = () => {
4286
+ setDidError(true);
4287
+ };
4288
+ const { src, alt, style, className, ...rest } = props;
4289
+ return didError ? /* @__PURE__ */ jsx47(
4290
+ "div",
4291
+ {
4292
+ className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
4293
+ style,
4294
+ children: /* @__PURE__ */ jsx47("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsx47("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
4295
+ }
4296
+ ) : /* @__PURE__ */ jsx47("img", { src, alt, className, style, ...rest, onError: handleError });
4297
+ }
4298
+ export {
4299
+ Accordion,
4300
+ AccordionContent,
4301
+ AccordionItem,
4302
+ AccordionTrigger,
4303
+ Alert,
4304
+ AlertDescription,
4305
+ AlertDialog,
4306
+ AlertDialogAction,
4307
+ AlertDialogCancel,
4308
+ AlertDialogContent,
4309
+ AlertDialogDescription,
4310
+ AlertDialogFooter,
4311
+ AlertDialogHeader,
4312
+ AlertDialogOverlay,
4313
+ AlertDialogPortal,
4314
+ AlertDialogTitle,
4315
+ AlertDialogTrigger,
4316
+ AlertTitle,
4317
+ AspectRatio,
4318
+ Avatar,
4319
+ AvatarFallback,
4320
+ AvatarImage,
4321
+ Badge,
4322
+ Breadcrumb,
4323
+ BreadcrumbEllipsis,
4324
+ BreadcrumbItem,
4325
+ BreadcrumbLink,
4326
+ BreadcrumbList,
4327
+ BreadcrumbPage,
4328
+ BreadcrumbSeparator,
4329
+ Button,
4330
+ Calendar,
4331
+ Card,
4332
+ CardAction,
4333
+ CardContent,
4334
+ CardDescription,
4335
+ CardFooter,
4336
+ CardHeader,
4337
+ CardTitle,
4338
+ Carousel,
4339
+ CarouselContent,
4340
+ CarouselItem,
4341
+ CarouselNext,
4342
+ CarouselPrevious,
4343
+ ChartContainer,
4344
+ ChartLegend,
4345
+ ChartLegendContent,
4346
+ ChartStyle,
4347
+ ChartTooltip,
4348
+ ChartTooltipContent,
4349
+ Checkbox,
4350
+ Collapsible,
4351
+ CollapsibleContent2 as CollapsibleContent,
4352
+ CollapsibleTrigger2 as CollapsibleTrigger,
4353
+ Command,
4354
+ CommandDialog,
4355
+ CommandEmpty,
4356
+ CommandGroup,
4357
+ CommandInput,
4358
+ CommandItem,
4359
+ CommandList,
4360
+ CommandSeparator,
4361
+ CommandShortcut,
4362
+ ContextMenu,
4363
+ ContextMenuCheckboxItem,
4364
+ ContextMenuContent,
4365
+ ContextMenuGroup,
4366
+ ContextMenuItem,
4367
+ ContextMenuLabel,
4368
+ ContextMenuPortal,
4369
+ ContextMenuRadioGroup,
4370
+ ContextMenuRadioItem,
4371
+ ContextMenuSeparator,
4372
+ ContextMenuShortcut,
4373
+ ContextMenuSub,
4374
+ ContextMenuSubContent,
4375
+ ContextMenuSubTrigger,
4376
+ ContextMenuTrigger,
4377
+ Dialog,
4378
+ DialogClose,
4379
+ DialogContent,
4380
+ DialogDescription,
4381
+ DialogFooter,
4382
+ DialogHeader,
4383
+ DialogOverlay,
4384
+ DialogPortal,
4385
+ DialogTitle,
4386
+ DialogTrigger,
4387
+ Drawer,
4388
+ DrawerClose,
4389
+ DrawerContent,
4390
+ DrawerDescription,
4391
+ DrawerFooter,
4392
+ DrawerHeader,
4393
+ DrawerOverlay,
4394
+ DrawerPortal,
4395
+ DrawerTitle,
4396
+ DrawerTrigger,
4397
+ DropdownMenu,
4398
+ DropdownMenuCheckboxItem,
4399
+ DropdownMenuContent,
4400
+ DropdownMenuGroup,
4401
+ DropdownMenuItem,
4402
+ DropdownMenuLabel,
4403
+ DropdownMenuPortal,
4404
+ DropdownMenuRadioGroup,
4405
+ DropdownMenuRadioItem,
4406
+ DropdownMenuSeparator,
4407
+ DropdownMenuShortcut,
4408
+ DropdownMenuSub,
4409
+ DropdownMenuSubContent,
4410
+ DropdownMenuSubTrigger,
4411
+ DropdownMenuTrigger,
4412
+ Form,
4413
+ FormControl,
4414
+ FormDescription,
4415
+ FormField,
4416
+ FormItem,
4417
+ FormLabel,
4418
+ FormMessage,
4419
+ HoverCard,
4420
+ HoverCardContent,
4421
+ HoverCardTrigger,
4422
+ ImageWithFallback,
4423
+ Input,
4424
+ InputOTP,
4425
+ InputOTPGroup,
4426
+ InputOTPSeparator,
4427
+ InputOTPSlot,
4428
+ Label,
4429
+ Menubar,
4430
+ MenubarCheckboxItem,
4431
+ MenubarContent,
4432
+ MenubarGroup,
4433
+ MenubarItem,
4434
+ MenubarLabel,
4435
+ MenubarMenu,
4436
+ MenubarPortal,
4437
+ MenubarRadioGroup,
4438
+ MenubarRadioItem,
4439
+ MenubarSeparator,
4440
+ MenubarShortcut,
4441
+ MenubarSub,
4442
+ MenubarSubContent,
4443
+ MenubarSubTrigger,
4444
+ MenubarTrigger,
4445
+ NavigationMenu,
4446
+ NavigationMenuContent,
4447
+ NavigationMenuIndicator,
4448
+ NavigationMenuItem,
4449
+ NavigationMenuLink,
4450
+ NavigationMenuList,
4451
+ NavigationMenuTrigger,
4452
+ NavigationMenuViewport,
4453
+ Pagination,
4454
+ PaginationContent,
4455
+ PaginationEllipsis,
4456
+ PaginationItem,
4457
+ PaginationLink,
4458
+ PaginationNext,
4459
+ PaginationPrevious,
4460
+ Popover,
4461
+ PopoverAnchor,
4462
+ PopoverContent,
4463
+ PopoverTrigger,
4464
+ Progress,
4465
+ RadioGroup,
4466
+ RadioGroupItem,
4467
+ ResizableHandle,
4468
+ ResizablePanel,
4469
+ ResizablePanelGroup,
4470
+ ScrollArea,
4471
+ ScrollBar,
4472
+ Select,
4473
+ SelectContent,
4474
+ SelectGroup,
4475
+ SelectItem,
4476
+ SelectLabel,
4477
+ SelectScrollDownButton,
4478
+ SelectScrollUpButton,
4479
+ SelectSeparator,
4480
+ SelectTrigger,
4481
+ SelectValue,
4482
+ Separator5 as Separator,
4483
+ Sheet,
4484
+ SheetClose,
4485
+ SheetContent,
4486
+ SheetDescription,
4487
+ SheetFooter,
4488
+ SheetHeader,
4489
+ SheetTitle,
4490
+ SheetTrigger,
4491
+ Sidebar,
4492
+ SidebarContent,
4493
+ SidebarFooter,
4494
+ SidebarGroup,
4495
+ SidebarGroupAction,
4496
+ SidebarGroupContent,
4497
+ SidebarGroupLabel,
4498
+ SidebarHeader,
4499
+ SidebarInput,
4500
+ SidebarInset,
4501
+ SidebarMenu,
4502
+ SidebarMenuAction,
4503
+ SidebarMenuBadge,
4504
+ SidebarMenuButton,
4505
+ SidebarMenuItem,
4506
+ SidebarMenuSkeleton,
4507
+ SidebarMenuSub,
4508
+ SidebarMenuSubButton,
4509
+ SidebarMenuSubItem,
4510
+ SidebarProvider,
4511
+ SidebarRail,
4512
+ SidebarSeparator,
4513
+ SidebarTrigger,
4514
+ Skeleton,
4515
+ Slider,
4516
+ Switch,
4517
+ Table,
4518
+ TableBody,
4519
+ TableCaption,
4520
+ TableCell,
4521
+ TableFooter,
4522
+ TableHead,
4523
+ TableHeader,
4524
+ TableRow,
4525
+ Tabs,
4526
+ TabsContent,
4527
+ TabsList,
4528
+ TabsTrigger,
4529
+ Textarea,
4530
+ Toaster,
4531
+ Toggle,
4532
+ ToggleGroup,
4533
+ ToggleGroupItem,
4534
+ Tooltip,
4535
+ TooltipContent,
4536
+ TooltipProvider,
4537
+ TooltipTrigger,
4538
+ badgeVariants,
4539
+ buttonVariants,
4540
+ cn,
4541
+ navigationMenuTriggerStyle,
4542
+ toggleVariants,
4543
+ useFormField,
4544
+ useIsMobile,
4545
+ useSidebar
4546
+ };
4547
+ //# sourceMappingURL=index.js.map