@atxp/design-system 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,2155 @@
1
+ "use client"
2
+
3
+ // src/components/Accordion/Accordion.tsx
4
+ import * as React from "react";
5
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
6
+ import { ChevronDown } from "lucide-react";
7
+
8
+ // src/lib/utils.ts
9
+ import { clsx } from "clsx";
10
+ function cn(...inputs) {
11
+ return clsx(inputs);
12
+ }
13
+
14
+ // src/components/Accordion/Accordion.tsx
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var Accordion = AccordionPrimitive.Root;
17
+ var AccordionItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
18
+ AccordionPrimitive.Item,
19
+ {
20
+ ref,
21
+ className: cn("border-b border-border", className),
22
+ ...props
23
+ }
24
+ ));
25
+ AccordionItem.displayName = "AccordionItem";
26
+ var AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
27
+ AccordionPrimitive.Trigger,
28
+ {
29
+ ref,
30
+ className: cn(
31
+ "flex flex-1 items-center justify-between py-4 text-base font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
32
+ className
33
+ ),
34
+ ...props,
35
+ children: [
36
+ children,
37
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 text-foreground transition-transform duration-200" })
38
+ ]
39
+ }
40
+ ) }));
41
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
42
+ var AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
43
+ AccordionPrimitive.Content,
44
+ {
45
+ ref,
46
+ className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
47
+ ...props,
48
+ children: /* @__PURE__ */ jsx("div", { className: cn("pb-4 pt-0", className), children })
49
+ }
50
+ ));
51
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
52
+
53
+ // src/components/Alert/Alert.tsx
54
+ import * as React2 from "react";
55
+ import { cva } from "class-variance-authority";
56
+ import { jsx as jsx2 } from "react/jsx-runtime";
57
+ var alertVariants = cva(
58
+ "relative w-full rounded-lg border p-4 flex gap-3 items-start",
59
+ {
60
+ variants: {
61
+ variant: {
62
+ default: "bg-background text-foreground border-border",
63
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
64
+ }
65
+ },
66
+ defaultVariants: {
67
+ variant: "default"
68
+ }
69
+ }
70
+ );
71
+ var Alert = React2.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx2(
72
+ "div",
73
+ {
74
+ ref,
75
+ role: "alert",
76
+ className: cn(alertVariants({ variant }), className),
77
+ ...props
78
+ }
79
+ ));
80
+ Alert.displayName = "Alert";
81
+ var AlertTitle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
82
+ "h5",
83
+ {
84
+ ref,
85
+ className: cn("mb-1 font-medium leading-6 tracking-normal", className),
86
+ ...props
87
+ }
88
+ ));
89
+ AlertTitle.displayName = "AlertTitle";
90
+ var AlertDescription = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
91
+ "div",
92
+ {
93
+ ref,
94
+ className: cn("text-sm leading-5 [&_p]:leading-relaxed", className),
95
+ ...props
96
+ }
97
+ ));
98
+ AlertDescription.displayName = "AlertDescription";
99
+
100
+ // src/components/AlertDialog/AlertDialog.tsx
101
+ import * as React3 from "react";
102
+ import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
103
+ var AlertDialog = ({ open, onOpenChange, children }) => {
104
+ React3.useEffect(() => {
105
+ const handleEscape = (e) => {
106
+ if (e.key === "Escape" && open) {
107
+ onOpenChange?.(false);
108
+ }
109
+ };
110
+ if (open) {
111
+ document.addEventListener("keydown", handleEscape);
112
+ document.body.style.overflow = "hidden";
113
+ }
114
+ return () => {
115
+ document.removeEventListener("keydown", handleEscape);
116
+ document.body.style.overflow = "";
117
+ };
118
+ }, [open, onOpenChange]);
119
+ if (!open) return null;
120
+ return /* @__PURE__ */ jsx3(Fragment, { children: React3.Children.map(children, (child) => {
121
+ if (React3.isValidElement(child)) {
122
+ return React3.cloneElement(child, { onOpenChange });
123
+ }
124
+ return child;
125
+ }) });
126
+ };
127
+ AlertDialog.displayName = "AlertDialog";
128
+ var AlertDialogContent = React3.forwardRef(({ className, children, onOpenChange, ...props }, ref) => /* @__PURE__ */ jsxs2(
129
+ "div",
130
+ {
131
+ className: "fixed inset-0 z-50 flex items-center justify-center",
132
+ onClick: () => onOpenChange?.(false),
133
+ children: [
134
+ /* @__PURE__ */ jsx3("div", { className: "fixed inset-0 bg-black/50", "aria-hidden": "true" }),
135
+ /* @__PURE__ */ jsx3(
136
+ "div",
137
+ {
138
+ ref,
139
+ role: "alertdialog",
140
+ "aria-modal": "true",
141
+ className: cn(
142
+ "relative z-50 flex w-[512px] flex-col gap-4 rounded-lg border border-border bg-background p-6",
143
+ className
144
+ ),
145
+ onClick: (e) => e.stopPropagation(),
146
+ ...props,
147
+ children
148
+ }
149
+ )
150
+ ]
151
+ }
152
+ ));
153
+ AlertDialogContent.displayName = "AlertDialogContent";
154
+ var AlertDialogHeader = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
155
+ "div",
156
+ {
157
+ ref,
158
+ className: cn("flex flex-col gap-2", className),
159
+ ...props
160
+ }
161
+ ));
162
+ AlertDialogHeader.displayName = "AlertDialogHeader";
163
+ var AlertDialogTitle = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
164
+ "h2",
165
+ {
166
+ ref,
167
+ className: cn("text-lg font-semibold leading-7 text-foreground", className),
168
+ ...props
169
+ }
170
+ ));
171
+ AlertDialogTitle.displayName = "AlertDialogTitle";
172
+ var AlertDialogDescription = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
173
+ "p",
174
+ {
175
+ ref,
176
+ className: cn("text-sm leading-5 text-muted-foreground", className),
177
+ ...props
178
+ }
179
+ ));
180
+ AlertDialogDescription.displayName = "AlertDialogDescription";
181
+ var AlertDialogFooter = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
182
+ "div",
183
+ {
184
+ ref,
185
+ className: cn("flex items-center justify-end gap-2", className),
186
+ ...props
187
+ }
188
+ ));
189
+ AlertDialogFooter.displayName = "AlertDialogFooter";
190
+ var AlertDialogCancel = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
191
+ "button",
192
+ {
193
+ ref,
194
+ type: "button",
195
+ className: cn(
196
+ "flex h-9 items-center justify-center rounded-lg border-2 border-border bg-background px-4 py-2 text-sm font-medium leading-5 text-accent-foreground shadow-[0px_1px_2px_0px_rgba(0,0,0,0.05)] transition-colors hover:bg-muted",
197
+ className
198
+ ),
199
+ ...props
200
+ }
201
+ ));
202
+ AlertDialogCancel.displayName = "AlertDialogCancel";
203
+ var AlertDialogAction = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
204
+ "button",
205
+ {
206
+ ref,
207
+ type: "button",
208
+ className: cn(
209
+ "flex h-9 items-center justify-center rounded-lg bg-primary px-4 py-2 text-sm font-medium leading-5 text-primary-foreground transition-colors hover:bg-primary/90",
210
+ className
211
+ ),
212
+ ...props
213
+ }
214
+ ));
215
+ AlertDialogAction.displayName = "AlertDialogAction";
216
+
217
+ // src/components/Avatar/Avatar.tsx
218
+ import * as React4 from "react";
219
+ import { jsx as jsx4 } from "react/jsx-runtime";
220
+ var Avatar = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
221
+ "div",
222
+ {
223
+ ref,
224
+ className: cn(
225
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
226
+ className
227
+ ),
228
+ ...props
229
+ }
230
+ ));
231
+ Avatar.displayName = "Avatar";
232
+ var AvatarImage = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
233
+ "img",
234
+ {
235
+ ref,
236
+ className: cn("aspect-square h-full w-full object-cover", className),
237
+ ...props
238
+ }
239
+ ));
240
+ AvatarImage.displayName = "AvatarImage";
241
+ var AvatarFallback = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
242
+ "div",
243
+ {
244
+ ref,
245
+ className: cn(
246
+ "flex h-full w-full items-center justify-center rounded-full bg-muted text-sm font-semibold leading-5 text-foreground",
247
+ className
248
+ ),
249
+ ...props
250
+ }
251
+ ));
252
+ AvatarFallback.displayName = "AvatarFallback";
253
+
254
+ // src/components/Badge/Badge.tsx
255
+ import { cva as cva2 } from "class-variance-authority";
256
+ import { jsx as jsx5 } from "react/jsx-runtime";
257
+ var badgeVariants = cva2(
258
+ "inline-flex items-center justify-center rounded-lg border transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2",
259
+ {
260
+ variants: {
261
+ variant: {
262
+ default: "border-primary bg-primary text-primary-foreground hover:bg-primary/80",
263
+ secondary: "border-secondary bg-secondary text-secondary-foreground hover:brightness-95",
264
+ destructive: "border-destructive bg-destructive text-destructive-foreground hover:bg-destructive/80",
265
+ outline: "border-border bg-transparent text-foreground hover:bg-muted",
266
+ success: "border-success bg-success-background text-foreground hover:brightness-95"
267
+ },
268
+ size: {
269
+ sm: "px-2 py-0.5 text-xs font-semibold",
270
+ md: "px-2 py-0.5 text-sm font-medium"
271
+ }
272
+ },
273
+ defaultVariants: {
274
+ variant: "default",
275
+ size: "sm"
276
+ }
277
+ }
278
+ );
279
+ function Badge({ className, variant, size, ...props }) {
280
+ return /* @__PURE__ */ jsx5(
281
+ "div",
282
+ {
283
+ className: cn(badgeVariants({ variant, size }), className),
284
+ ...props
285
+ }
286
+ );
287
+ }
288
+
289
+ // src/components/Breadcrumb/Breadcrumb.tsx
290
+ import * as React6 from "react";
291
+
292
+ // src/components/Icon/Icon.tsx
293
+ import * as React5 from "react";
294
+ import { jsx as jsx6 } from "react/jsx-runtime";
295
+ var Icon = React5.forwardRef(
296
+ ({ icon: IconComponent, size = 24, className, ...props }, ref) => {
297
+ return /* @__PURE__ */ jsx6(
298
+ IconComponent,
299
+ {
300
+ ref,
301
+ size,
302
+ className: cn("shrink-0", className),
303
+ ...props
304
+ }
305
+ );
306
+ }
307
+ );
308
+ Icon.displayName = "Icon";
309
+
310
+ // src/components/Icon/index.ts
311
+ import {
312
+ ArrowLeft,
313
+ ArrowRight,
314
+ ArrowUp,
315
+ ArrowDown,
316
+ ChevronLeft,
317
+ ChevronRight,
318
+ ChevronUp,
319
+ ChevronDown as ChevronDown2,
320
+ ChevronsLeft,
321
+ ChevronsRight,
322
+ ChevronsUp,
323
+ ChevronsDown
324
+ } from "lucide-react";
325
+ import {
326
+ Plus,
327
+ Minus,
328
+ X,
329
+ Check,
330
+ Copy,
331
+ Edit,
332
+ Edit2,
333
+ Edit3,
334
+ Trash,
335
+ Trash2,
336
+ Save,
337
+ Download,
338
+ Upload,
339
+ Share,
340
+ Share2,
341
+ Send,
342
+ RefreshCw,
343
+ RotateCw,
344
+ RotateCcw
345
+ } from "lucide-react";
346
+ import {
347
+ AlertCircle,
348
+ AlertTriangle,
349
+ Info,
350
+ CheckCircle,
351
+ CheckCircle2,
352
+ XCircle,
353
+ HelpCircle,
354
+ Loader,
355
+ Loader2
356
+ } from "lucide-react";
357
+ import {
358
+ File,
359
+ FileText,
360
+ Folder,
361
+ FolderOpen,
362
+ FilePlus,
363
+ FolderPlus,
364
+ Image,
365
+ FileImage
366
+ } from "lucide-react";
367
+ import {
368
+ Mail,
369
+ MessageCircle,
370
+ MessageSquare,
371
+ Phone,
372
+ PhoneCall,
373
+ PhoneOff,
374
+ Video,
375
+ VideoOff,
376
+ Mic,
377
+ MicOff,
378
+ Bell,
379
+ BellOff
380
+ } from "lucide-react";
381
+ import {
382
+ User,
383
+ Users,
384
+ UserPlus,
385
+ UserMinus,
386
+ UserCheck,
387
+ UserX,
388
+ Settings,
389
+ LogIn,
390
+ LogOut,
391
+ Lock,
392
+ Unlock,
393
+ Key,
394
+ Shield,
395
+ ShieldCheck,
396
+ Eye,
397
+ EyeOff
398
+ } from "lucide-react";
399
+ import {
400
+ Play,
401
+ Pause,
402
+ Square,
403
+ SkipForward,
404
+ SkipBack,
405
+ Volume,
406
+ Volume1,
407
+ Volume2,
408
+ VolumeX,
409
+ Music,
410
+ Camera,
411
+ CameraOff
412
+ } from "lucide-react";
413
+ import {
414
+ Menu,
415
+ MoreVertical,
416
+ MoreHorizontal,
417
+ Grid,
418
+ List,
419
+ Columns,
420
+ Sidebar,
421
+ PanelLeft,
422
+ PanelRight,
423
+ Layout,
424
+ LayoutGrid,
425
+ LayoutList,
426
+ Maximize,
427
+ Minimize,
428
+ Maximize2,
429
+ Minimize2
430
+ } from "lucide-react";
431
+ import {
432
+ ShoppingCart,
433
+ ShoppingBag,
434
+ CreditCard,
435
+ DollarSign,
436
+ Tag,
437
+ Package,
438
+ Gift
439
+ } from "lucide-react";
440
+ import {
441
+ Calendar,
442
+ Clock,
443
+ CalendarDays,
444
+ CalendarPlus,
445
+ CalendarMinus,
446
+ CalendarCheck,
447
+ CalendarX
448
+ } from "lucide-react";
449
+ import {
450
+ Sun,
451
+ Moon,
452
+ Cloud,
453
+ CloudRain,
454
+ CloudSnow,
455
+ CloudDrizzle,
456
+ CloudLightning,
457
+ Wind
458
+ } from "lucide-react";
459
+ import {
460
+ Monitor,
461
+ Smartphone,
462
+ Tablet,
463
+ Laptop,
464
+ Tv,
465
+ Watch,
466
+ Bluetooth,
467
+ Wifi,
468
+ WifiOff,
469
+ Battery,
470
+ BatteryCharging,
471
+ BatteryLow,
472
+ BatteryFull
473
+ } from "lucide-react";
474
+ import {
475
+ MapPin,
476
+ Map,
477
+ Navigation,
478
+ Navigation2,
479
+ Compass,
480
+ Globe,
481
+ Home,
482
+ Building,
483
+ Building2,
484
+ Store
485
+ } from "lucide-react";
486
+ import {
487
+ Github,
488
+ Twitter,
489
+ Facebook,
490
+ Instagram,
491
+ Linkedin,
492
+ Youtube,
493
+ Twitch,
494
+ Figma
495
+ } from "lucide-react";
496
+ import {
497
+ Code,
498
+ Code2,
499
+ Terminal,
500
+ Bug,
501
+ Cpu,
502
+ Database,
503
+ Server,
504
+ GitBranch,
505
+ GitCommit,
506
+ GitMerge,
507
+ GitPullRequest
508
+ } from "lucide-react";
509
+ import {
510
+ Search,
511
+ Filter,
512
+ Star,
513
+ Heart,
514
+ Bookmark,
515
+ Flag,
516
+ Link,
517
+ Link2,
518
+ ExternalLink,
519
+ Paperclip,
520
+ Zap,
521
+ Award,
522
+ TrendingUp,
523
+ TrendingDown,
524
+ Activity,
525
+ BarChart,
526
+ BarChart2,
527
+ PieChart,
528
+ LineChart,
529
+ BookOpen,
530
+ Pen,
531
+ Cog,
532
+ CheckCircle as CheckCircle3,
533
+ MoreHorizontal as MoreHorizontal2
534
+ } from "lucide-react";
535
+
536
+ // src/components/Breadcrumb/Breadcrumb.tsx
537
+ import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
538
+ var Breadcrumb = React6.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx7("nav", { ref, "aria-label": "breadcrumb", ...props }));
539
+ Breadcrumb.displayName = "Breadcrumb";
540
+ var BreadcrumbList = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
541
+ "ol",
542
+ {
543
+ ref,
544
+ className: cn(
545
+ "flex flex-wrap items-center gap-2 break-words text-sm text-muted-foreground",
546
+ className
547
+ ),
548
+ ...props
549
+ }
550
+ ));
551
+ BreadcrumbList.displayName = "BreadcrumbList";
552
+ var BreadcrumbItem = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
553
+ "li",
554
+ {
555
+ ref,
556
+ className: cn("inline-flex items-center gap-2", className),
557
+ ...props
558
+ }
559
+ ));
560
+ BreadcrumbItem.displayName = "BreadcrumbItem";
561
+ var BreadcrumbLink = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
562
+ "a",
563
+ {
564
+ ref,
565
+ className: cn(
566
+ "text-sm font-normal leading-5 transition-colors hover:text-foreground",
567
+ className
568
+ ),
569
+ ...props
570
+ }
571
+ ));
572
+ BreadcrumbLink.displayName = "BreadcrumbLink";
573
+ var BreadcrumbPage = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
574
+ "span",
575
+ {
576
+ ref,
577
+ role: "link",
578
+ "aria-disabled": "true",
579
+ "aria-current": "page",
580
+ className: cn("text-sm font-normal leading-5 text-foreground", className),
581
+ ...props
582
+ }
583
+ ));
584
+ BreadcrumbPage.displayName = "BreadcrumbPage";
585
+ var BreadcrumbSeparator = ({
586
+ children,
587
+ className,
588
+ ...props
589
+ }) => /* @__PURE__ */ jsx7(
590
+ "li",
591
+ {
592
+ role: "presentation",
593
+ "aria-hidden": "true",
594
+ className: cn("flex h-5 w-5 items-center justify-center", className),
595
+ ...props,
596
+ children: children ?? /* @__PURE__ */ jsx7(Icon, { icon: ChevronRight, size: 14 })
597
+ }
598
+ );
599
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
600
+ var BreadcrumbEllipsis = ({
601
+ className,
602
+ ...props
603
+ }) => /* @__PURE__ */ jsxs3(
604
+ "span",
605
+ {
606
+ role: "presentation",
607
+ "aria-hidden": "true",
608
+ className: cn("flex h-5 w-5 items-center justify-center", className),
609
+ ...props,
610
+ children: [
611
+ /* @__PURE__ */ jsx7(Icon, { icon: MoreHorizontal, size: 16 }),
612
+ /* @__PURE__ */ jsx7("span", { className: "sr-only", children: "More" })
613
+ ]
614
+ }
615
+ );
616
+ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
617
+
618
+ // src/components/Button/Button.tsx
619
+ import * as React7 from "react";
620
+ import { cva as cva3 } from "class-variance-authority";
621
+ import { jsx as jsx8 } from "react/jsx-runtime";
622
+ var buttonVariants = cva3(
623
+ "inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-lg text-sm font-medium leading-5 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
624
+ {
625
+ variants: {
626
+ variant: {
627
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
628
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
629
+ "destructive-subtle": "bg-destructive-background text-destructive hover:bg-destructive-background/80",
630
+ outline: "border-2 border-border bg-background text-accent-foreground shadow-[0px_1px_2px_0px_rgba(0,0,0,0.05)] hover:bg-muted",
631
+ "secondary-outline": "border border-border bg-background text-foreground hover:bg-muted",
632
+ secondary: "bg-secondary text-secondary-foreground hover:brightness-95",
633
+ ghost: "text-foreground hover:bg-muted",
634
+ link: "text-primary underline-offset-4 hover:underline",
635
+ success: "bg-success text-success-foreground hover:bg-success/90",
636
+ "side-panel": "justify-start gap-2 rounded-md bg-transparent text-foreground hover:bg-muted data-[state=selected]:bg-muted"
637
+ },
638
+ size: {
639
+ default: "h-9 px-4 py-2",
640
+ sm: "h-8 px-4 py-2",
641
+ lg: "h-10 px-4 py-2",
642
+ icon: "h-10 w-10"
643
+ }
644
+ },
645
+ defaultVariants: {
646
+ variant: "default",
647
+ size: "default"
648
+ }
649
+ }
650
+ );
651
+ var Button = React7.forwardRef(
652
+ ({ className, variant, size, ...props }, ref) => {
653
+ return /* @__PURE__ */ jsx8(
654
+ "button",
655
+ {
656
+ className: cn(buttonVariants({ variant, size, className })),
657
+ ref,
658
+ ...props
659
+ }
660
+ );
661
+ }
662
+ );
663
+ Button.displayName = "Button";
664
+
665
+ // src/components/ButtonGroup/ButtonGroup.tsx
666
+ import * as React8 from "react";
667
+ import { jsx as jsx9 } from "react/jsx-runtime";
668
+ var ButtonGroup = React8.forwardRef(
669
+ ({ className, orientation = "horizontal", children, ...props }, ref) => {
670
+ return /* @__PURE__ */ jsx9(
671
+ "div",
672
+ {
673
+ ref,
674
+ className: cn(
675
+ "flex items-center",
676
+ orientation === "horizontal" ? "flex-row gap-3" : "flex-col gap-2",
677
+ className
678
+ ),
679
+ role: "group",
680
+ ...props,
681
+ children
682
+ }
683
+ );
684
+ }
685
+ );
686
+ ButtonGroup.displayName = "ButtonGroup";
687
+
688
+ // src/components/Card/Card.tsx
689
+ import * as React9 from "react";
690
+ import { jsx as jsx10 } from "react/jsx-runtime";
691
+ var Card = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
692
+ "div",
693
+ {
694
+ ref,
695
+ className: cn(
696
+ "rounded-lg border border-border bg-card text-card-foreground shadow-[0px_1px_2px_0px_rgba(0,0,0,0.05)]",
697
+ className
698
+ ),
699
+ ...props
700
+ }
701
+ ));
702
+ Card.displayName = "Card";
703
+ var CardHeader = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
704
+ "div",
705
+ {
706
+ ref,
707
+ className: cn("flex flex-col gap-1 p-6", className),
708
+ ...props
709
+ }
710
+ ));
711
+ CardHeader.displayName = "CardHeader";
712
+ var CardTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
713
+ "h3",
714
+ {
715
+ ref,
716
+ className: cn(
717
+ "text-xl font-semibold leading-7 tracking-normal text-card-foreground",
718
+ className
719
+ ),
720
+ ...props
721
+ }
722
+ ));
723
+ CardTitle.displayName = "CardTitle";
724
+ var CardDescription = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
725
+ "p",
726
+ {
727
+ ref,
728
+ className: cn("text-sm font-normal leading-5 text-muted-foreground", className),
729
+ ...props
730
+ }
731
+ ));
732
+ CardDescription.displayName = "CardDescription";
733
+ var CardContent = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10("div", { ref, className: cn("px-6 pb-6 pt-0", className), ...props }));
734
+ CardContent.displayName = "CardContent";
735
+ var CardFooter = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
736
+ "div",
737
+ {
738
+ ref,
739
+ className: cn("flex items-center justify-end gap-2 px-6 pb-6 pt-0", className),
740
+ ...props
741
+ }
742
+ ));
743
+ CardFooter.displayName = "CardFooter";
744
+
745
+ // src/components/Carousel/Carousel.tsx
746
+ import * as React10 from "react";
747
+ import { jsx as jsx11 } from "react/jsx-runtime";
748
+ var CarouselContext = React10.createContext(
749
+ void 0
750
+ );
751
+ function useCarousel() {
752
+ const context = React10.useContext(CarouselContext);
753
+ if (!context) {
754
+ throw new Error("useCarousel must be used within a Carousel");
755
+ }
756
+ return context;
757
+ }
758
+ var Carousel = React10.forwardRef(
759
+ ({ className, children, ...props }, ref) => {
760
+ const [currentIndex, setCurrentIndex] = React10.useState(0);
761
+ const [totalItems, setTotalItems] = React10.useState(0);
762
+ const goToSlide = React10.useCallback((index) => {
763
+ setCurrentIndex(index);
764
+ }, []);
765
+ const nextSlide = React10.useCallback(() => {
766
+ setCurrentIndex((prev) => (prev + 1) % totalItems);
767
+ }, [totalItems]);
768
+ const previousSlide = React10.useCallback(() => {
769
+ setCurrentIndex((prev) => (prev - 1 + totalItems) % totalItems);
770
+ }, [totalItems]);
771
+ const value = React10.useMemo(
772
+ () => ({
773
+ currentIndex,
774
+ totalItems,
775
+ goToSlide,
776
+ nextSlide,
777
+ previousSlide
778
+ }),
779
+ [currentIndex, totalItems, goToSlide, nextSlide, previousSlide]
780
+ );
781
+ return /* @__PURE__ */ jsx11(CarouselContext.Provider, { value, children: /* @__PURE__ */ jsx11(
782
+ "div",
783
+ {
784
+ ref,
785
+ className: cn("flex items-center justify-center gap-6", className),
786
+ ...props,
787
+ children: React10.Children.map(children, (child) => {
788
+ if (React10.isValidElement(child)) {
789
+ return React10.cloneElement(child, { setTotalItems });
790
+ }
791
+ return child;
792
+ })
793
+ }
794
+ ) });
795
+ }
796
+ );
797
+ Carousel.displayName = "Carousel";
798
+ var CarouselContent = React10.forwardRef(
799
+ ({ className, children, setTotalItems, ...props }, ref) => {
800
+ const { currentIndex } = useCarousel();
801
+ const childrenArray = React10.Children.toArray(children);
802
+ React10.useEffect(() => {
803
+ setTotalItems?.(childrenArray.length);
804
+ }, [childrenArray.length, setTotalItems]);
805
+ return /* @__PURE__ */ jsx11(
806
+ "div",
807
+ {
808
+ ref,
809
+ className: cn(
810
+ "relative w-96 h-96 overflow-hidden rounded-md border-2 border-border bg-card shadow-sm",
811
+ className
812
+ ),
813
+ ...props,
814
+ children: /* @__PURE__ */ jsx11(
815
+ "div",
816
+ {
817
+ className: "flex h-full transition-transform duration-300 ease-in-out",
818
+ style: {
819
+ transform: `translateX(-${currentIndex * 100}%)`
820
+ },
821
+ children: childrenArray
822
+ }
823
+ )
824
+ }
825
+ );
826
+ }
827
+ );
828
+ CarouselContent.displayName = "CarouselContent";
829
+ var CarouselItem = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
830
+ "div",
831
+ {
832
+ ref,
833
+ className: cn(
834
+ "min-w-full flex items-center justify-center",
835
+ className
836
+ ),
837
+ ...props
838
+ }
839
+ ));
840
+ CarouselItem.displayName = "CarouselItem";
841
+ var CarouselPrevious = React10.forwardRef(({ className, ...props }, ref) => {
842
+ const { previousSlide, currentIndex } = useCarousel();
843
+ return /* @__PURE__ */ jsx11(
844
+ "button",
845
+ {
846
+ ref,
847
+ type: "button",
848
+ className: cn(
849
+ "flex h-10 w-10 items-center justify-center rounded-full border-2 border-border bg-background shadow-sm transition-opacity hover:opacity-100",
850
+ currentIndex === 0 ? "opacity-50" : "opacity-100",
851
+ className
852
+ ),
853
+ onClick: previousSlide,
854
+ "aria-label": "Previous slide",
855
+ ...props,
856
+ children: /* @__PURE__ */ jsx11(Icon, { icon: ArrowLeft, size: 20 })
857
+ }
858
+ );
859
+ });
860
+ CarouselPrevious.displayName = "CarouselPrevious";
861
+ var CarouselNext = React10.forwardRef(({ className, ...props }, ref) => {
862
+ const { nextSlide, currentIndex, totalItems } = useCarousel();
863
+ return /* @__PURE__ */ jsx11(
864
+ "button",
865
+ {
866
+ ref,
867
+ type: "button",
868
+ className: cn(
869
+ "flex h-10 w-10 items-center justify-center rounded-full border-2 border-border bg-background shadow-sm transition-opacity hover:opacity-100",
870
+ currentIndex === totalItems - 1 ? "opacity-50" : "opacity-100",
871
+ className
872
+ ),
873
+ onClick: nextSlide,
874
+ "aria-label": "Next slide",
875
+ ...props,
876
+ children: /* @__PURE__ */ jsx11(Icon, { icon: ArrowRight, size: 20 })
877
+ }
878
+ );
879
+ });
880
+ CarouselNext.displayName = "CarouselNext";
881
+
882
+ // src/components/Checkbox/Checkbox.tsx
883
+ import * as React11 from "react";
884
+ import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
885
+ var Checkbox = React11.forwardRef(
886
+ ({ className, onCheckedChange, onChange, ...props }, ref) => {
887
+ const handleChange = (e) => {
888
+ onChange?.(e);
889
+ onCheckedChange?.(e.target.checked);
890
+ };
891
+ return /* @__PURE__ */ jsxs4("div", { className: "relative inline-flex items-center", children: [
892
+ /* @__PURE__ */ jsx12(
893
+ "input",
894
+ {
895
+ type: "checkbox",
896
+ className: "peer sr-only",
897
+ ref,
898
+ onChange: handleChange,
899
+ ...props
900
+ }
901
+ ),
902
+ /* @__PURE__ */ jsx12(
903
+ "div",
904
+ {
905
+ className: cn(
906
+ "flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-primary transition-colors",
907
+ "peer-checked:bg-primary peer-checked:text-primary-foreground",
908
+ "peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2",
909
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
910
+ className
911
+ ),
912
+ children: /* @__PURE__ */ jsx12(
913
+ Icon,
914
+ {
915
+ icon: Check,
916
+ size: 12,
917
+ className: "hidden peer-checked:block"
918
+ }
919
+ )
920
+ }
921
+ )
922
+ ] });
923
+ }
924
+ );
925
+ Checkbox.displayName = "Checkbox";
926
+
927
+ // src/components/Dialog/Dialog.tsx
928
+ import * as React12 from "react";
929
+ import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
930
+ var Dialog = ({ open, onOpenChange, children }) => {
931
+ React12.useEffect(() => {
932
+ const handleEscape = (e) => {
933
+ if (e.key === "Escape" && open) {
934
+ onOpenChange?.(false);
935
+ }
936
+ };
937
+ if (open) {
938
+ document.addEventListener("keydown", handleEscape);
939
+ document.body.style.overflow = "hidden";
940
+ }
941
+ return () => {
942
+ document.removeEventListener("keydown", handleEscape);
943
+ document.body.style.overflow = "";
944
+ };
945
+ }, [open, onOpenChange]);
946
+ if (!open) return null;
947
+ return /* @__PURE__ */ jsx13(Fragment2, { children: React12.Children.map(children, (child) => {
948
+ if (React12.isValidElement(child)) {
949
+ return React12.cloneElement(child, { onOpenChange });
950
+ }
951
+ return child;
952
+ }) });
953
+ };
954
+ Dialog.displayName = "Dialog";
955
+ var DialogContent = React12.forwardRef(
956
+ ({ className, children, onOpenChange, ...props }, ref) => /* @__PURE__ */ jsxs5(
957
+ "div",
958
+ {
959
+ className: "fixed inset-0 z-50 flex items-center justify-center",
960
+ onClick: () => onOpenChange?.(false),
961
+ children: [
962
+ /* @__PURE__ */ jsx13("div", { className: "fixed inset-0 bg-black/80", "aria-hidden": "true" }),
963
+ /* @__PURE__ */ jsxs5(
964
+ "div",
965
+ {
966
+ ref,
967
+ role: "dialog",
968
+ "aria-modal": "true",
969
+ className: cn(
970
+ "relative z-50 flex w-[512px] flex-col gap-4 overflow-hidden rounded-lg border border-border bg-background p-6 shadow-[0px_10px_15px_-3px_rgba(0,0,0,0.1),0px_4px_6px_-2px_rgba(0,0,0,0.05)]",
971
+ className
972
+ ),
973
+ onClick: (e) => e.stopPropagation(),
974
+ ...props,
975
+ children: [
976
+ /* @__PURE__ */ jsx13(
977
+ "button",
978
+ {
979
+ onClick: () => onOpenChange?.(false),
980
+ className: "absolute right-[15px] top-[15px] rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",
981
+ "aria-label": "Close",
982
+ children: /* @__PURE__ */ jsx13(Icon, { icon: X, size: 16 })
983
+ }
984
+ ),
985
+ children
986
+ ]
987
+ }
988
+ )
989
+ ]
990
+ }
991
+ )
992
+ );
993
+ DialogContent.displayName = "DialogContent";
994
+ var DialogHeader = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
995
+ "div",
996
+ {
997
+ ref,
998
+ className: cn("flex flex-col gap-1.5", className),
999
+ ...props
1000
+ }
1001
+ ));
1002
+ DialogHeader.displayName = "DialogHeader";
1003
+ var DialogTitle = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
1004
+ "h2",
1005
+ {
1006
+ ref,
1007
+ className: cn("text-lg font-semibold leading-7 text-foreground", className),
1008
+ ...props
1009
+ }
1010
+ ));
1011
+ DialogTitle.displayName = "DialogTitle";
1012
+ var DialogDescription = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
1013
+ "p",
1014
+ {
1015
+ ref,
1016
+ className: cn("text-sm leading-5 text-muted-foreground", className),
1017
+ ...props
1018
+ }
1019
+ ));
1020
+ DialogDescription.displayName = "DialogDescription";
1021
+ var DialogFooter = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
1022
+ "div",
1023
+ {
1024
+ ref,
1025
+ className: cn("flex items-center justify-end gap-2", className),
1026
+ ...props
1027
+ }
1028
+ ));
1029
+ DialogFooter.displayName = "DialogFooter";
1030
+
1031
+ // src/components/Drawer/Drawer.tsx
1032
+ import * as React13 from "react";
1033
+ import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
1034
+ var Drawer = ({ open, onOpenChange, children }) => {
1035
+ React13.useEffect(() => {
1036
+ const handleEscape = (e) => {
1037
+ if (e.key === "Escape" && open) {
1038
+ onOpenChange?.(false);
1039
+ }
1040
+ };
1041
+ if (open) {
1042
+ document.addEventListener("keydown", handleEscape);
1043
+ document.body.style.overflow = "hidden";
1044
+ }
1045
+ return () => {
1046
+ document.removeEventListener("keydown", handleEscape);
1047
+ document.body.style.overflow = "";
1048
+ };
1049
+ }, [open, onOpenChange]);
1050
+ if (!open) return null;
1051
+ return /* @__PURE__ */ jsx14(Fragment3, { children: React13.Children.map(children, (child) => {
1052
+ if (React13.isValidElement(child)) {
1053
+ return React13.cloneElement(child, { onOpenChange });
1054
+ }
1055
+ return child;
1056
+ }) });
1057
+ };
1058
+ Drawer.displayName = "Drawer";
1059
+ var DrawerContent = React13.forwardRef(
1060
+ ({ className, children, onOpenChange, ...props }, ref) => /* @__PURE__ */ jsxs6(
1061
+ "div",
1062
+ {
1063
+ className: "fixed inset-0 z-50 flex items-end justify-center",
1064
+ onClick: () => onOpenChange?.(false),
1065
+ children: [
1066
+ /* @__PURE__ */ jsx14("div", { className: "fixed inset-0 bg-black/80", "aria-hidden": "true" }),
1067
+ /* @__PURE__ */ jsxs6(
1068
+ "div",
1069
+ {
1070
+ ref,
1071
+ role: "dialog",
1072
+ "aria-modal": "true",
1073
+ className: cn(
1074
+ "relative z-50 flex w-[320px] flex-col gap-4 overflow-hidden rounded-t-lg border-t border-x border-border bg-background p-6 shadow-[0px_10px_15px_-3px_rgba(0,0,0,0.1),0px_4px_6px_-2px_rgba(0,0,0,0.05)]",
1075
+ className
1076
+ ),
1077
+ onClick: (e) => e.stopPropagation(),
1078
+ ...props,
1079
+ children: [
1080
+ /* @__PURE__ */ jsx14("div", { className: "absolute left-1/2 top-4 h-2 w-[100px] -translate-x-1/2 rounded-full bg-muted" }),
1081
+ /* @__PURE__ */ jsx14(
1082
+ "button",
1083
+ {
1084
+ onClick: () => onOpenChange?.(false),
1085
+ className: "absolute right-[15px] top-[15px] rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",
1086
+ "aria-label": "Close",
1087
+ children: /* @__PURE__ */ jsx14(Icon, { icon: X, size: 16 })
1088
+ }
1089
+ ),
1090
+ children
1091
+ ]
1092
+ }
1093
+ )
1094
+ ]
1095
+ }
1096
+ )
1097
+ );
1098
+ DrawerContent.displayName = "DrawerContent";
1099
+ var DrawerHeader = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
1100
+ "div",
1101
+ {
1102
+ ref,
1103
+ className: cn("flex flex-col gap-1 pt-4 text-center", className),
1104
+ ...props
1105
+ }
1106
+ ));
1107
+ DrawerHeader.displayName = "DrawerHeader";
1108
+ var DrawerTitle = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
1109
+ "h2",
1110
+ {
1111
+ ref,
1112
+ className: cn("text-lg font-semibold leading-7 text-foreground", className),
1113
+ ...props
1114
+ }
1115
+ ));
1116
+ DrawerTitle.displayName = "DrawerTitle";
1117
+ var DrawerDescription = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
1118
+ "p",
1119
+ {
1120
+ ref,
1121
+ className: cn("text-sm leading-5 text-muted-foreground", className),
1122
+ ...props
1123
+ }
1124
+ ));
1125
+ DrawerDescription.displayName = "DrawerDescription";
1126
+ var DrawerFooter = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
1127
+ "div",
1128
+ {
1129
+ ref,
1130
+ className: cn("flex flex-col gap-2", className),
1131
+ ...props
1132
+ }
1133
+ ));
1134
+ DrawerFooter.displayName = "DrawerFooter";
1135
+
1136
+ // src/components/Header/Header.tsx
1137
+ import * as React14 from "react";
1138
+ import { jsx as jsx15 } from "react/jsx-runtime";
1139
+ var Header2 = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
1140
+ "header",
1141
+ {
1142
+ ref,
1143
+ className: cn(
1144
+ "flex flex-col gap-2 border-b-2 border-accent bg-background px-6 pb-4 pt-6",
1145
+ className
1146
+ ),
1147
+ ...props
1148
+ }
1149
+ ));
1150
+ Header2.displayName = "Header";
1151
+ var HeaderBreadcrumbs = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
1152
+ "div",
1153
+ {
1154
+ ref,
1155
+ className: cn("flex items-center gap-2.5 w-full", className),
1156
+ ...props
1157
+ }
1158
+ ));
1159
+ HeaderBreadcrumbs.displayName = "HeaderBreadcrumbs";
1160
+ var HeaderContent = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
1161
+ "div",
1162
+ {
1163
+ ref,
1164
+ className: cn("flex items-center justify-between w-full", className),
1165
+ ...props
1166
+ }
1167
+ ));
1168
+ HeaderContent.displayName = "HeaderContent";
1169
+ var HeaderTitle = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
1170
+ "h1",
1171
+ {
1172
+ ref,
1173
+ className: cn(
1174
+ "text-2xl font-medium leading-8 text-foreground",
1175
+ className
1176
+ ),
1177
+ ...props
1178
+ }
1179
+ ));
1180
+ HeaderTitle.displayName = "HeaderTitle";
1181
+ var HeaderActions = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
1182
+ "div",
1183
+ {
1184
+ ref,
1185
+ className: cn("flex items-center gap-3", className),
1186
+ ...props
1187
+ }
1188
+ ));
1189
+ HeaderActions.displayName = "HeaderActions";
1190
+ var HeaderDescription = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
1191
+ "p",
1192
+ {
1193
+ ref,
1194
+ className: cn(
1195
+ "text-base leading-6 text-muted-foreground",
1196
+ className
1197
+ ),
1198
+ ...props
1199
+ }
1200
+ ));
1201
+ HeaderDescription.displayName = "HeaderDescription";
1202
+
1203
+ // src/components/Radio/Radio.tsx
1204
+ import * as React15 from "react";
1205
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1206
+ var Radio = React15.forwardRef(
1207
+ ({ className, onCheckedChange, onChange, ...props }, ref) => {
1208
+ const handleChange = (e) => {
1209
+ onChange?.(e);
1210
+ onCheckedChange?.(e.target.checked);
1211
+ };
1212
+ return /* @__PURE__ */ jsxs7("div", { className: "relative inline-flex items-center", children: [
1213
+ /* @__PURE__ */ jsx16(
1214
+ "input",
1215
+ {
1216
+ type: "radio",
1217
+ className: "peer sr-only",
1218
+ ref,
1219
+ onChange: handleChange,
1220
+ ...props
1221
+ }
1222
+ ),
1223
+ /* @__PURE__ */ jsx16(
1224
+ "div",
1225
+ {
1226
+ className: cn(
1227
+ "relative flex h-4 w-4 shrink-0 items-center justify-center rounded-full border border-primary bg-background transition-colors",
1228
+ "peer-checked:border-primary",
1229
+ "peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2",
1230
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
1231
+ "after:absolute after:inset-0 after:m-auto after:h-2 after:w-2 after:rounded-full after:bg-primary after:scale-0 after:transition-transform",
1232
+ "peer-checked:after:scale-100",
1233
+ className
1234
+ )
1235
+ }
1236
+ )
1237
+ ] });
1238
+ }
1239
+ );
1240
+ Radio.displayName = "Radio";
1241
+
1242
+ // src/components/Select/Select.tsx
1243
+ import * as React16 from "react";
1244
+ import * as SelectPrimitive from "@radix-ui/react-select";
1245
+ import { Check as Check2, ChevronDown as ChevronDown3 } from "lucide-react";
1246
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
1247
+ var Select = SelectPrimitive.Root;
1248
+ var SelectGroup = SelectPrimitive.Group;
1249
+ var SelectValue = SelectPrimitive.Value;
1250
+ var SelectTrigger = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs8(
1251
+ SelectPrimitive.Trigger,
1252
+ {
1253
+ ref,
1254
+ className: cn(
1255
+ "relative z-10 flex h-10 w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground transition-colors",
1256
+ "hover:border-border-hover",
1257
+ "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
1258
+ "disabled:cursor-not-allowed disabled:opacity-50",
1259
+ "[&>span]:line-clamp-1",
1260
+ className
1261
+ ),
1262
+ ...props,
1263
+ children: [
1264
+ children,
1265
+ /* @__PURE__ */ jsx17(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx17(ChevronDown3, { className: "h-3 w-3 opacity-50" }) })
1266
+ ]
1267
+ }
1268
+ ));
1269
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
1270
+ var SelectScrollUpButton = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1271
+ SelectPrimitive.ScrollUpButton,
1272
+ {
1273
+ ref,
1274
+ className: cn(
1275
+ "flex cursor-default items-center justify-center py-1",
1276
+ className
1277
+ ),
1278
+ ...props,
1279
+ children: /* @__PURE__ */ jsx17(ChevronDown3, { className: "h-4 w-4 rotate-180" })
1280
+ }
1281
+ ));
1282
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
1283
+ var SelectScrollDownButton = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1284
+ SelectPrimitive.ScrollDownButton,
1285
+ {
1286
+ ref,
1287
+ className: cn(
1288
+ "flex cursor-default items-center justify-center py-1",
1289
+ className
1290
+ ),
1291
+ ...props,
1292
+ children: /* @__PURE__ */ jsx17(ChevronDown3, { className: "h-4 w-4" })
1293
+ }
1294
+ ));
1295
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
1296
+ var SelectContent = React16.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx17(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs8(
1297
+ SelectPrimitive.Content,
1298
+ {
1299
+ ref,
1300
+ className: cn(
1301
+ "relative z-[100] max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md",
1302
+ "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",
1303
+ 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",
1304
+ className
1305
+ ),
1306
+ position,
1307
+ sideOffset: 4,
1308
+ collisionPadding: 8,
1309
+ ...props,
1310
+ children: [
1311
+ /* @__PURE__ */ jsx17(SelectScrollUpButton, {}),
1312
+ /* @__PURE__ */ jsx17(
1313
+ SelectPrimitive.Viewport,
1314
+ {
1315
+ className: cn(
1316
+ "p-1",
1317
+ position === "popper" && "w-full min-w-[var(--radix-select-trigger-width)]"
1318
+ ),
1319
+ children
1320
+ }
1321
+ ),
1322
+ /* @__PURE__ */ jsx17(SelectScrollDownButton, {})
1323
+ ]
1324
+ }
1325
+ ) }));
1326
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
1327
+ var SelectLabel = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1328
+ SelectPrimitive.Label,
1329
+ {
1330
+ ref,
1331
+ className: cn(
1332
+ "px-8 py-1.5 text-sm font-semibold text-popover-foreground",
1333
+ className
1334
+ ),
1335
+ ...props
1336
+ }
1337
+ ));
1338
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
1339
+ var SelectItem = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs8(
1340
+ SelectPrimitive.Item,
1341
+ {
1342
+ ref,
1343
+ className: cn(
1344
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-popover-foreground outline-none",
1345
+ "focus:bg-accent focus:text-accent-foreground",
1346
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1347
+ className
1348
+ ),
1349
+ ...props,
1350
+ children: [
1351
+ /* @__PURE__ */ jsx17("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx17(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx17(Check2, { className: "h-4 w-4" }) }) }),
1352
+ /* @__PURE__ */ jsx17(SelectPrimitive.ItemText, { children })
1353
+ ]
1354
+ }
1355
+ ));
1356
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
1357
+ var SelectSeparator = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1358
+ SelectPrimitive.Separator,
1359
+ {
1360
+ ref,
1361
+ className: cn("mx-1 my-1 h-px bg-border", className),
1362
+ ...props
1363
+ }
1364
+ ));
1365
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
1366
+
1367
+ // src/components/Separator/Separator.tsx
1368
+ import * as React17 from "react";
1369
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
1370
+ import { jsx as jsx18 } from "react/jsx-runtime";
1371
+ var Separator2 = React17.forwardRef(
1372
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx18(
1373
+ SeparatorPrimitive.Root,
1374
+ {
1375
+ ref,
1376
+ decorative,
1377
+ orientation,
1378
+ className: cn(
1379
+ "shrink-0 bg-border",
1380
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
1381
+ className
1382
+ ),
1383
+ ...props
1384
+ }
1385
+ )
1386
+ );
1387
+ Separator2.displayName = SeparatorPrimitive.Root.displayName;
1388
+
1389
+ // src/components/Sheet/Sheet.tsx
1390
+ import * as React18 from "react";
1391
+ import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
1392
+ var Sheet = ({ open, onOpenChange, children }) => {
1393
+ React18.useEffect(() => {
1394
+ const handleEscape = (e) => {
1395
+ if (e.key === "Escape" && open) {
1396
+ onOpenChange?.(false);
1397
+ }
1398
+ };
1399
+ if (open) {
1400
+ document.addEventListener("keydown", handleEscape);
1401
+ document.body.style.overflow = "hidden";
1402
+ }
1403
+ return () => {
1404
+ document.removeEventListener("keydown", handleEscape);
1405
+ document.body.style.overflow = "";
1406
+ };
1407
+ }, [open, onOpenChange]);
1408
+ if (!open) return null;
1409
+ return /* @__PURE__ */ jsx19(Fragment4, { children: React18.Children.map(children, (child) => {
1410
+ if (React18.isValidElement(child)) {
1411
+ return React18.cloneElement(child, { onOpenChange });
1412
+ }
1413
+ return child;
1414
+ }) });
1415
+ };
1416
+ Sheet.displayName = "Sheet";
1417
+ var sheetVariants = {
1418
+ top: "inset-x-0 top-0 border-b",
1419
+ bottom: "inset-x-0 bottom-0 border-t",
1420
+ left: "inset-y-0 left-0 h-full w-[448px] border-r",
1421
+ right: "inset-y-0 right-0 h-full w-[448px] border-l"
1422
+ };
1423
+ var SheetContent = React18.forwardRef(
1424
+ ({ className, children, onOpenChange, side = "right", ...props }, ref) => /* @__PURE__ */ jsxs9(
1425
+ "div",
1426
+ {
1427
+ className: "fixed inset-0 z-50",
1428
+ onClick: () => onOpenChange?.(false),
1429
+ children: [
1430
+ /* @__PURE__ */ jsx19("div", { className: "fixed inset-0 bg-black/80", "aria-hidden": "true" }),
1431
+ /* @__PURE__ */ jsxs9(
1432
+ "div",
1433
+ {
1434
+ ref,
1435
+ role: "dialog",
1436
+ "aria-modal": "true",
1437
+ className: cn(
1438
+ "fixed z-50 flex flex-col gap-4 bg-background p-6 shadow-lg transition-transform duration-300",
1439
+ sheetVariants[side],
1440
+ className
1441
+ ),
1442
+ onClick: (e) => e.stopPropagation(),
1443
+ ...props,
1444
+ children: [
1445
+ /* @__PURE__ */ jsx19(
1446
+ "button",
1447
+ {
1448
+ onClick: () => onOpenChange?.(false),
1449
+ className: "absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",
1450
+ "aria-label": "Close",
1451
+ children: /* @__PURE__ */ jsx19(Icon, { icon: X, size: 16 })
1452
+ }
1453
+ ),
1454
+ children
1455
+ ]
1456
+ }
1457
+ )
1458
+ ]
1459
+ }
1460
+ )
1461
+ );
1462
+ SheetContent.displayName = "SheetContent";
1463
+ var SheetHeader = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1464
+ "div",
1465
+ {
1466
+ ref,
1467
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
1468
+ ...props
1469
+ }
1470
+ ));
1471
+ SheetHeader.displayName = "SheetHeader";
1472
+ var SheetTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1473
+ "h2",
1474
+ {
1475
+ ref,
1476
+ className: cn("text-lg font-semibold text-foreground", className),
1477
+ ...props
1478
+ }
1479
+ ));
1480
+ SheetTitle.displayName = "SheetTitle";
1481
+ var SheetDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1482
+ "p",
1483
+ {
1484
+ ref,
1485
+ className: cn("text-sm text-muted-foreground", className),
1486
+ ...props
1487
+ }
1488
+ ));
1489
+ SheetDescription.displayName = "SheetDescription";
1490
+ var SheetFooter = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1491
+ "div",
1492
+ {
1493
+ ref,
1494
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
1495
+ ...props
1496
+ }
1497
+ ));
1498
+ SheetFooter.displayName = "SheetFooter";
1499
+ var SheetClose = React18.forwardRef(({ className, onOpenChange, ...props }, ref) => /* @__PURE__ */ jsx19(
1500
+ "button",
1501
+ {
1502
+ ref,
1503
+ onClick: () => onOpenChange?.(false),
1504
+ className: cn(
1505
+ "rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",
1506
+ className
1507
+ ),
1508
+ ...props
1509
+ }
1510
+ ));
1511
+ SheetClose.displayName = "SheetClose";
1512
+
1513
+ // src/components/Skeleton/Skeleton.tsx
1514
+ import * as React19 from "react";
1515
+ import { jsx as jsx20 } from "react/jsx-runtime";
1516
+ var Skeleton = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
1517
+ "div",
1518
+ {
1519
+ ref,
1520
+ className: cn(
1521
+ "animate-pulse rounded-md bg-muted",
1522
+ className
1523
+ ),
1524
+ ...props
1525
+ }
1526
+ ));
1527
+ Skeleton.displayName = "Skeleton";
1528
+
1529
+ // src/components/Slider/Slider.tsx
1530
+ import * as React20 from "react";
1531
+ import * as SliderPrimitive from "@radix-ui/react-slider";
1532
+ import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
1533
+ var Slider = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs10(
1534
+ SliderPrimitive.Root,
1535
+ {
1536
+ ref,
1537
+ className: cn(
1538
+ "relative flex w-full touch-none select-none items-center",
1539
+ className
1540
+ ),
1541
+ ...props,
1542
+ children: [
1543
+ /* @__PURE__ */ jsx21(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx21(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1544
+ /* @__PURE__ */ jsx21(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })
1545
+ ]
1546
+ }
1547
+ ));
1548
+ Slider.displayName = SliderPrimitive.Root.displayName;
1549
+
1550
+ // src/components/Switch/Switch.tsx
1551
+ import * as React21 from "react";
1552
+ import * as SwitchPrimitives from "@radix-ui/react-switch";
1553
+ import { jsx as jsx22 } from "react/jsx-runtime";
1554
+ var Switch = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
1555
+ SwitchPrimitives.Root,
1556
+ {
1557
+ className: cn(
1558
+ "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-input p-0.5 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
1559
+ className
1560
+ ),
1561
+ ...props,
1562
+ ref,
1563
+ children: /* @__PURE__ */ jsx22(
1564
+ SwitchPrimitives.Thumb,
1565
+ {
1566
+ className: cn(
1567
+ "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
1568
+ )
1569
+ }
1570
+ )
1571
+ }
1572
+ ));
1573
+ Switch.displayName = SwitchPrimitives.Root.displayName;
1574
+
1575
+ // src/components/Table/Table.tsx
1576
+ import * as React22 from "react";
1577
+ import { jsx as jsx23 } from "react/jsx-runtime";
1578
+ var Table = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx23(
1579
+ "table",
1580
+ {
1581
+ ref,
1582
+ className: cn("w-full caption-bottom text-sm", className),
1583
+ ...props
1584
+ }
1585
+ ) }));
1586
+ Table.displayName = "Table";
1587
+ var TableHeader = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
1588
+ TableHeader.displayName = "TableHeader";
1589
+ var TableBody = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1590
+ "tbody",
1591
+ {
1592
+ ref,
1593
+ className: cn("[&_tr:last-child]:border-0", className),
1594
+ ...props
1595
+ }
1596
+ ));
1597
+ TableBody.displayName = "TableBody";
1598
+ var TableFooter = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1599
+ "tfoot",
1600
+ {
1601
+ ref,
1602
+ className: cn(
1603
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
1604
+ className
1605
+ ),
1606
+ ...props
1607
+ }
1608
+ ));
1609
+ TableFooter.displayName = "TableFooter";
1610
+ var TableRow = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1611
+ "tr",
1612
+ {
1613
+ ref,
1614
+ className: cn(
1615
+ "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
1616
+ className
1617
+ ),
1618
+ ...props
1619
+ }
1620
+ ));
1621
+ TableRow.displayName = "TableRow";
1622
+ var TableHead = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1623
+ "th",
1624
+ {
1625
+ ref,
1626
+ className: cn(
1627
+ "h-11 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
1628
+ className
1629
+ ),
1630
+ ...props
1631
+ }
1632
+ ));
1633
+ TableHead.displayName = "TableHead";
1634
+ var TableCell = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1635
+ "td",
1636
+ {
1637
+ ref,
1638
+ className: cn(
1639
+ "p-4 align-middle [&:has([role=checkbox])]:pr-0",
1640
+ className
1641
+ ),
1642
+ ...props
1643
+ }
1644
+ ));
1645
+ TableCell.displayName = "TableCell";
1646
+ var TableCaption = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1647
+ "caption",
1648
+ {
1649
+ ref,
1650
+ className: cn("mt-4 text-sm text-muted-foreground", className),
1651
+ ...props
1652
+ }
1653
+ ));
1654
+ TableCaption.displayName = "TableCaption";
1655
+
1656
+ // src/components/Tabs/Tabs.tsx
1657
+ import * as React23 from "react";
1658
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
1659
+ import { jsx as jsx24 } from "react/jsx-runtime";
1660
+ var Tabs = TabsPrimitive.Root;
1661
+ var TabsList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx24(
1662
+ TabsPrimitive.List,
1663
+ {
1664
+ ref,
1665
+ className: cn(
1666
+ "inline-flex h-auto items-center justify-start gap-0 text-muted-foreground",
1667
+ className
1668
+ ),
1669
+ ...props
1670
+ }
1671
+ ));
1672
+ TabsList.displayName = TabsPrimitive.List.displayName;
1673
+ var TabsTrigger = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx24(
1674
+ TabsPrimitive.Trigger,
1675
+ {
1676
+ ref,
1677
+ className: cn(
1678
+ "inline-flex items-center justify-center whitespace-nowrap rounded-xs px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm data-[state=active]:font-semibold data-[state=inactive]:text-muted-foreground",
1679
+ className
1680
+ ),
1681
+ ...props
1682
+ }
1683
+ ));
1684
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
1685
+ var TabsContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx24(
1686
+ TabsPrimitive.Content,
1687
+ {
1688
+ ref,
1689
+ className: cn(
1690
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1691
+ className
1692
+ ),
1693
+ ...props
1694
+ }
1695
+ ));
1696
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
1697
+
1698
+ // src/components/Textarea/Textarea.tsx
1699
+ import * as React24 from "react";
1700
+ import { jsx as jsx25 } from "react/jsx-runtime";
1701
+ var Textarea = React24.forwardRef(
1702
+ ({ className, ...props }, ref) => {
1703
+ return /* @__PURE__ */ jsx25(
1704
+ "textarea",
1705
+ {
1706
+ className: cn(
1707
+ "flex min-h-[82px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
1708
+ className
1709
+ ),
1710
+ ref,
1711
+ ...props
1712
+ }
1713
+ );
1714
+ }
1715
+ );
1716
+ Textarea.displayName = "Textarea";
1717
+
1718
+ // src/components/Toast/Toast.tsx
1719
+ import { Toaster as Sonner } from "sonner";
1720
+ import { Toaster, toast } from "sonner";
1721
+ import { jsx as jsx26 } from "react/jsx-runtime";
1722
+ var Toaster2 = ({ ...props }) => {
1723
+ return /* @__PURE__ */ jsx26(
1724
+ Sonner,
1725
+ {
1726
+ className: "toaster group",
1727
+ toastOptions: {
1728
+ classNames: {
1729
+ toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
1730
+ description: "group-[.toast]:text-muted-foreground",
1731
+ actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
1732
+ cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
1733
+ }
1734
+ },
1735
+ ...props
1736
+ }
1737
+ );
1738
+ };
1739
+
1740
+ // src/components/Toggle/Toggle.tsx
1741
+ import * as React25 from "react";
1742
+ import * as TogglePrimitive from "@radix-ui/react-toggle";
1743
+ import { cva as cva4 } from "class-variance-authority";
1744
+ import { jsx as jsx27 } from "react/jsx-runtime";
1745
+ var toggleVariants = cva4(
1746
+ "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-muted data-[state=on]:text-foreground",
1747
+ {
1748
+ variants: {
1749
+ variant: {
1750
+ default: "bg-transparent",
1751
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
1752
+ },
1753
+ size: {
1754
+ default: "h-10 px-3",
1755
+ sm: "h-9 px-2.5",
1756
+ lg: "h-11 px-5"
1757
+ }
1758
+ },
1759
+ defaultVariants: {
1760
+ variant: "default",
1761
+ size: "default"
1762
+ }
1763
+ }
1764
+ );
1765
+ var Toggle = React25.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx27(
1766
+ TogglePrimitive.Root,
1767
+ {
1768
+ ref,
1769
+ className: cn(toggleVariants({ variant, size, className })),
1770
+ ...props
1771
+ }
1772
+ ));
1773
+ Toggle.displayName = TogglePrimitive.Root.displayName;
1774
+
1775
+ // src/lib/theme.tsx
1776
+ import * as React26 from "react";
1777
+ import { jsx as jsx28 } from "react/jsx-runtime";
1778
+ var ThemeContext = React26.createContext(void 0);
1779
+ function ThemeProvider({
1780
+ children,
1781
+ defaultTheme = "auto",
1782
+ storageKey = "cc-theme",
1783
+ enablePersistence = true
1784
+ }) {
1785
+ const [theme, setThemeState] = React26.useState(() => {
1786
+ if (typeof window === "undefined") return defaultTheme;
1787
+ if (enablePersistence) {
1788
+ const stored = window.localStorage.getItem(storageKey);
1789
+ if (stored && isValidTheme(stored)) {
1790
+ return stored;
1791
+ }
1792
+ }
1793
+ return defaultTheme;
1794
+ });
1795
+ const [actualTheme, setActualTheme] = React26.useState(() => {
1796
+ if (theme === "auto") {
1797
+ return typeof window !== "undefined" && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
1798
+ }
1799
+ return theme;
1800
+ });
1801
+ React26.useEffect(() => {
1802
+ const root = window.document.documentElement;
1803
+ if (theme === "auto") {
1804
+ root.removeAttribute("data-theme");
1805
+ } else {
1806
+ root.setAttribute("data-theme", theme);
1807
+ }
1808
+ }, [theme]);
1809
+ React26.useEffect(() => {
1810
+ if (theme !== "auto") {
1811
+ setActualTheme(theme);
1812
+ return;
1813
+ }
1814
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
1815
+ const handleChange = (e) => {
1816
+ setActualTheme(e.matches ? "dark" : "light");
1817
+ };
1818
+ handleChange(mediaQuery);
1819
+ mediaQuery.addEventListener("change", handleChange);
1820
+ return () => {
1821
+ mediaQuery.removeEventListener("change", handleChange);
1822
+ };
1823
+ }, [theme]);
1824
+ const setTheme = React26.useCallback(
1825
+ (newTheme) => {
1826
+ setThemeState(newTheme);
1827
+ if (enablePersistence && typeof window !== "undefined") {
1828
+ try {
1829
+ window.localStorage.setItem(storageKey, newTheme);
1830
+ } catch (error) {
1831
+ console.warn("Failed to persist theme preference:", error);
1832
+ }
1833
+ }
1834
+ },
1835
+ [enablePersistence, storageKey]
1836
+ );
1837
+ const value = React26.useMemo(
1838
+ () => ({
1839
+ theme,
1840
+ setTheme,
1841
+ actualTheme
1842
+ }),
1843
+ [theme, setTheme, actualTheme]
1844
+ );
1845
+ return /* @__PURE__ */ jsx28(ThemeContext.Provider, { value, children });
1846
+ }
1847
+ function useTheme() {
1848
+ const context = React26.useContext(ThemeContext);
1849
+ if (context === void 0) {
1850
+ throw new Error("useTheme must be used within a ThemeProvider");
1851
+ }
1852
+ return context;
1853
+ }
1854
+ function isValidTheme(value) {
1855
+ return ["light", "dark", "atxp", "dbg", "auto"].includes(value);
1856
+ }
1857
+ export {
1858
+ Accordion,
1859
+ AccordionContent,
1860
+ AccordionItem,
1861
+ AccordionTrigger,
1862
+ Activity,
1863
+ Alert,
1864
+ AlertCircle,
1865
+ AlertDescription,
1866
+ AlertDialog,
1867
+ AlertDialogAction,
1868
+ AlertDialogCancel,
1869
+ AlertDialogContent,
1870
+ AlertDialogDescription,
1871
+ AlertDialogFooter,
1872
+ AlertDialogHeader,
1873
+ AlertDialogTitle,
1874
+ AlertTitle,
1875
+ AlertTriangle,
1876
+ ArrowDown,
1877
+ ArrowLeft,
1878
+ ArrowRight,
1879
+ ArrowUp,
1880
+ Avatar,
1881
+ AvatarFallback,
1882
+ AvatarImage,
1883
+ Award,
1884
+ Badge,
1885
+ BarChart,
1886
+ BarChart2,
1887
+ Battery,
1888
+ BatteryCharging,
1889
+ BatteryFull,
1890
+ BatteryLow,
1891
+ Bell,
1892
+ BellOff,
1893
+ Bluetooth,
1894
+ BookOpen,
1895
+ Bookmark,
1896
+ Breadcrumb,
1897
+ BreadcrumbEllipsis,
1898
+ BreadcrumbItem,
1899
+ BreadcrumbLink,
1900
+ BreadcrumbList,
1901
+ BreadcrumbPage,
1902
+ BreadcrumbSeparator,
1903
+ Bug,
1904
+ Building,
1905
+ Building2,
1906
+ Button,
1907
+ ButtonGroup,
1908
+ Calendar,
1909
+ CalendarCheck,
1910
+ CalendarDays,
1911
+ CalendarMinus,
1912
+ CalendarPlus,
1913
+ CalendarX,
1914
+ Camera,
1915
+ CameraOff,
1916
+ Card,
1917
+ CardContent,
1918
+ CardDescription,
1919
+ CardFooter,
1920
+ CardHeader,
1921
+ CardTitle,
1922
+ Carousel,
1923
+ CarouselContent,
1924
+ CarouselItem,
1925
+ CarouselNext,
1926
+ CarouselPrevious,
1927
+ Check,
1928
+ CheckCircle,
1929
+ CheckCircle2,
1930
+ CheckCircle3 as CheckWaves,
1931
+ Checkbox,
1932
+ ChevronDown2 as ChevronDown,
1933
+ ChevronLeft,
1934
+ ChevronRight,
1935
+ ChevronUp,
1936
+ ChevronsDown,
1937
+ ChevronsLeft,
1938
+ ChevronsRight,
1939
+ ChevronsUp,
1940
+ Clock,
1941
+ Cloud,
1942
+ CloudDrizzle,
1943
+ CloudLightning,
1944
+ CloudRain,
1945
+ CloudSnow,
1946
+ Code,
1947
+ Code2,
1948
+ Cog,
1949
+ Columns,
1950
+ Compass,
1951
+ Copy,
1952
+ Cpu,
1953
+ CreditCard,
1954
+ Database,
1955
+ Dialog,
1956
+ DialogContent,
1957
+ DialogDescription,
1958
+ DialogFooter,
1959
+ DialogHeader,
1960
+ DialogTitle,
1961
+ DollarSign,
1962
+ MoreHorizontal2 as Dots,
1963
+ Download,
1964
+ Drawer,
1965
+ DrawerContent,
1966
+ DrawerDescription,
1967
+ DrawerFooter,
1968
+ DrawerHeader,
1969
+ DrawerTitle,
1970
+ Edit,
1971
+ Edit2,
1972
+ Edit3,
1973
+ ExternalLink,
1974
+ Eye,
1975
+ EyeOff,
1976
+ Facebook,
1977
+ Figma,
1978
+ File,
1979
+ FileImage,
1980
+ FilePlus,
1981
+ FileText,
1982
+ Filter,
1983
+ Flag,
1984
+ Folder,
1985
+ FolderOpen,
1986
+ FolderPlus,
1987
+ Gift,
1988
+ GitBranch,
1989
+ GitCommit,
1990
+ GitMerge,
1991
+ GitPullRequest,
1992
+ Github,
1993
+ Globe,
1994
+ Grid,
1995
+ Header2 as Header,
1996
+ HeaderActions,
1997
+ HeaderBreadcrumbs,
1998
+ HeaderContent,
1999
+ HeaderDescription,
2000
+ HeaderTitle,
2001
+ Heart,
2002
+ HelpCircle,
2003
+ Home,
2004
+ Icon,
2005
+ Image,
2006
+ Info,
2007
+ Instagram,
2008
+ Key,
2009
+ Laptop,
2010
+ Layout,
2011
+ LayoutGrid,
2012
+ LayoutList,
2013
+ LineChart,
2014
+ Link,
2015
+ Link2,
2016
+ Linkedin,
2017
+ List,
2018
+ Loader,
2019
+ Loader2,
2020
+ Lock,
2021
+ LogIn,
2022
+ LogOut,
2023
+ Mail,
2024
+ Map,
2025
+ MapPin,
2026
+ Maximize,
2027
+ Maximize2,
2028
+ Menu,
2029
+ MessageCircle,
2030
+ MessageSquare,
2031
+ Mic,
2032
+ MicOff,
2033
+ Minimize,
2034
+ Minimize2,
2035
+ Minus,
2036
+ Monitor,
2037
+ Moon,
2038
+ MoreHorizontal,
2039
+ MoreVertical,
2040
+ Music,
2041
+ Navigation,
2042
+ Navigation2,
2043
+ Package,
2044
+ PanelLeft,
2045
+ PanelRight,
2046
+ Paperclip,
2047
+ Pause,
2048
+ Pen,
2049
+ Phone,
2050
+ PhoneCall,
2051
+ PhoneOff,
2052
+ PieChart,
2053
+ Play,
2054
+ Plus,
2055
+ Radio,
2056
+ RefreshCw,
2057
+ RotateCcw,
2058
+ RotateCw,
2059
+ Save,
2060
+ Search,
2061
+ Select,
2062
+ SelectContent,
2063
+ SelectGroup,
2064
+ SelectItem,
2065
+ SelectLabel,
2066
+ SelectScrollDownButton,
2067
+ SelectScrollUpButton,
2068
+ SelectSeparator,
2069
+ SelectTrigger,
2070
+ SelectValue,
2071
+ Send,
2072
+ Separator2 as Separator,
2073
+ Server,
2074
+ Settings,
2075
+ Share,
2076
+ Share2,
2077
+ Sheet,
2078
+ SheetClose,
2079
+ SheetContent,
2080
+ SheetDescription,
2081
+ SheetFooter,
2082
+ SheetHeader,
2083
+ SheetTitle,
2084
+ Shield,
2085
+ ShieldCheck,
2086
+ ShoppingBag,
2087
+ ShoppingCart,
2088
+ Sidebar,
2089
+ Skeleton,
2090
+ SkipBack,
2091
+ SkipForward,
2092
+ Slider,
2093
+ Smartphone,
2094
+ Square,
2095
+ Star,
2096
+ Store,
2097
+ Sun,
2098
+ Switch,
2099
+ Table,
2100
+ TableBody,
2101
+ TableCaption,
2102
+ TableCell,
2103
+ TableFooter,
2104
+ TableHead,
2105
+ TableHeader,
2106
+ TableRow,
2107
+ Tablet,
2108
+ Tabs,
2109
+ TabsContent,
2110
+ TabsList,
2111
+ TabsTrigger,
2112
+ Tag,
2113
+ Terminal,
2114
+ Textarea,
2115
+ ThemeProvider,
2116
+ Toaster2 as Toast,
2117
+ Toaster,
2118
+ Toggle,
2119
+ Trash,
2120
+ Trash2,
2121
+ TrendingDown,
2122
+ TrendingUp,
2123
+ Tv,
2124
+ Twitch,
2125
+ Twitter,
2126
+ Unlock,
2127
+ Upload,
2128
+ User,
2129
+ UserCheck,
2130
+ UserMinus,
2131
+ UserPlus,
2132
+ UserX,
2133
+ Users,
2134
+ Video,
2135
+ VideoOff,
2136
+ Volume,
2137
+ Volume1,
2138
+ Volume2,
2139
+ VolumeX,
2140
+ Watch,
2141
+ Wifi,
2142
+ WifiOff,
2143
+ Wind,
2144
+ X,
2145
+ XCircle,
2146
+ Youtube,
2147
+ Zap,
2148
+ badgeVariants,
2149
+ buttonVariants,
2150
+ cn,
2151
+ toast,
2152
+ toggleVariants,
2153
+ useTheme
2154
+ };
2155
+ //# sourceMappingURL=index.js.map