@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/LICENSE.md +7 -0
- package/README.md +225 -0
- package/dist/index.cjs +2278 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +901 -0
- package/dist/index.d.ts +901 -0
- package/dist/index.js +2155 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +2 -0
- package/package.json +94 -0
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
|