@greatapps/greatauth-ui 0.3.17 → 0.3.19

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.
@@ -0,0 +1,1790 @@
1
+ // src/lib/utils.ts
2
+ import { clsx } from "clsx";
3
+ import { twMerge } from "tailwind-merge";
4
+ function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ // src/components/ui/tooltip.tsx
9
+ import { Tooltip as TooltipPrimitive } from "radix-ui";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ function TooltipProvider({
12
+ delayDuration = 0,
13
+ ...props
14
+ }) {
15
+ return /* @__PURE__ */ jsx(
16
+ TooltipPrimitive.Provider,
17
+ {
18
+ "data-slot": "tooltip-provider",
19
+ delayDuration,
20
+ ...props
21
+ }
22
+ );
23
+ }
24
+ function Tooltip({
25
+ ...props
26
+ }) {
27
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
28
+ }
29
+ function TooltipTrigger({
30
+ ...props
31
+ }) {
32
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
33
+ }
34
+ function TooltipContent({
35
+ className,
36
+ sideOffset = 0,
37
+ children,
38
+ ...props
39
+ }) {
40
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
41
+ TooltipPrimitive.Content,
42
+ {
43
+ "data-slot": "tooltip-content",
44
+ sideOffset,
45
+ className: cn(
46
+ "data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-md px-3 py-1.5 text-xs bg-foreground text-background z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin)",
47
+ className
48
+ ),
49
+ ...props,
50
+ children: [
51
+ children,
52
+ /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "size-2.5 rotate-45 rounded-[2px] bg-foreground fill-foreground z-50 translate-y-[calc(-50%_-_2px)]" })
53
+ ]
54
+ }
55
+ ) });
56
+ }
57
+
58
+ // src/components/ui/button.tsx
59
+ import { cva } from "class-variance-authority";
60
+ import { Slot } from "radix-ui";
61
+ import { jsx as jsx2 } from "react/jsx-runtime";
62
+ var buttonVariants = cva(
63
+ "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none",
64
+ {
65
+ variants: {
66
+ variant: {
67
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
68
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs",
69
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
70
+ ghost: "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
71
+ destructive: "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
72
+ link: "text-primary underline-offset-4 hover:underline"
73
+ },
74
+ size: {
75
+ default: "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
76
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
77
+ sm: "h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
78
+ lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
79
+ icon: "size-9",
80
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
81
+ "icon-sm": "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md",
82
+ "icon-lg": "size-10"
83
+ }
84
+ },
85
+ defaultVariants: {
86
+ variant: "default",
87
+ size: "default"
88
+ }
89
+ }
90
+ );
91
+ function Button({
92
+ className,
93
+ variant = "default",
94
+ size = "default",
95
+ asChild = false,
96
+ ...props
97
+ }) {
98
+ const Comp = asChild ? Slot.Root : "button";
99
+ return /* @__PURE__ */ jsx2(
100
+ Comp,
101
+ {
102
+ "data-slot": "button",
103
+ "data-variant": variant,
104
+ "data-size": size,
105
+ className: cn(buttonVariants({ variant, size, className })),
106
+ ...props
107
+ }
108
+ );
109
+ }
110
+
111
+ // src/components/ui/input.tsx
112
+ import { jsx as jsx3 } from "react/jsx-runtime";
113
+ function Input({ className, type, ...props }) {
114
+ return /* @__PURE__ */ jsx3(
115
+ "input",
116
+ {
117
+ type,
118
+ "data-slot": "input",
119
+ className: cn(
120
+ "dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-md border bg-transparent px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
121
+ className
122
+ ),
123
+ ...props
124
+ }
125
+ );
126
+ }
127
+
128
+ // src/components/ui/separator.tsx
129
+ import { Separator as SeparatorPrimitive } from "radix-ui";
130
+ import { jsx as jsx4 } from "react/jsx-runtime";
131
+ function Separator({
132
+ className,
133
+ orientation = "horizontal",
134
+ decorative = true,
135
+ ...props
136
+ }) {
137
+ return /* @__PURE__ */ jsx4(
138
+ SeparatorPrimitive.Root,
139
+ {
140
+ "data-slot": "separator",
141
+ decorative,
142
+ orientation,
143
+ className: cn(
144
+ "bg-border shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
145
+ className
146
+ ),
147
+ ...props
148
+ }
149
+ );
150
+ }
151
+
152
+ // src/components/ui/sheet.tsx
153
+ import { Dialog as SheetPrimitive } from "radix-ui";
154
+ import { X } from "lucide-react";
155
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
156
+ function Sheet({ ...props }) {
157
+ return /* @__PURE__ */ jsx5(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
158
+ }
159
+ function SheetTrigger({
160
+ ...props
161
+ }) {
162
+ return /* @__PURE__ */ jsx5(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
163
+ }
164
+ function SheetClose({
165
+ ...props
166
+ }) {
167
+ return /* @__PURE__ */ jsx5(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
168
+ }
169
+ function SheetPortal({
170
+ ...props
171
+ }) {
172
+ return /* @__PURE__ */ jsx5(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
173
+ }
174
+ function SheetOverlay({
175
+ className,
176
+ ...props
177
+ }) {
178
+ return /* @__PURE__ */ jsx5(
179
+ SheetPrimitive.Overlay,
180
+ {
181
+ "data-slot": "sheet-overlay",
182
+ className: cn("data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50", className),
183
+ ...props
184
+ }
185
+ );
186
+ }
187
+ function SheetContent({
188
+ className,
189
+ children,
190
+ side = "right",
191
+ showCloseButton = true,
192
+ ...props
193
+ }) {
194
+ return /* @__PURE__ */ jsxs2(SheetPortal, { children: [
195
+ /* @__PURE__ */ jsx5(SheetOverlay, {}),
196
+ /* @__PURE__ */ jsxs2(
197
+ SheetPrimitive.Content,
198
+ {
199
+ "data-slot": "sheet-content",
200
+ "data-side": side,
201
+ className: cn("bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className),
202
+ ...props,
203
+ children: [
204
+ children,
205
+ showCloseButton && /* @__PURE__ */ jsx5(SheetPrimitive.Close, { "data-slot": "sheet-close", asChild: true, children: /* @__PURE__ */ jsxs2(Button, { variant: "ghost", className: "absolute top-4 right-4", size: "icon-sm", children: [
206
+ /* @__PURE__ */ jsx5(X, {}),
207
+ /* @__PURE__ */ jsx5("span", { className: "sr-only", children: "Close" })
208
+ ] }) })
209
+ ]
210
+ }
211
+ )
212
+ ] });
213
+ }
214
+ function SheetHeader({ className, ...props }) {
215
+ return /* @__PURE__ */ jsx5(
216
+ "div",
217
+ {
218
+ "data-slot": "sheet-header",
219
+ className: cn("gap-1.5 p-4 flex flex-col", className),
220
+ ...props
221
+ }
222
+ );
223
+ }
224
+ function SheetFooter({ className, ...props }) {
225
+ return /* @__PURE__ */ jsx5(
226
+ "div",
227
+ {
228
+ "data-slot": "sheet-footer",
229
+ className: cn("gap-2 p-4 mt-auto flex flex-col", className),
230
+ ...props
231
+ }
232
+ );
233
+ }
234
+ function SheetTitle({
235
+ className,
236
+ ...props
237
+ }) {
238
+ return /* @__PURE__ */ jsx5(
239
+ SheetPrimitive.Title,
240
+ {
241
+ "data-slot": "sheet-title",
242
+ className: cn("text-foreground font-medium", className),
243
+ ...props
244
+ }
245
+ );
246
+ }
247
+ function SheetDescription({
248
+ className,
249
+ ...props
250
+ }) {
251
+ return /* @__PURE__ */ jsx5(
252
+ SheetPrimitive.Description,
253
+ {
254
+ "data-slot": "sheet-description",
255
+ className: cn("text-muted-foreground text-sm", className),
256
+ ...props
257
+ }
258
+ );
259
+ }
260
+
261
+ // src/components/ui/skeleton.tsx
262
+ import { jsx as jsx6 } from "react/jsx-runtime";
263
+ function Skeleton({ className, ...props }) {
264
+ return /* @__PURE__ */ jsx6(
265
+ "div",
266
+ {
267
+ "data-slot": "skeleton",
268
+ className: cn("bg-muted rounded-md animate-pulse", className),
269
+ ...props
270
+ }
271
+ );
272
+ }
273
+
274
+ // src/components/ui/sidebar.tsx
275
+ import * as React from "react";
276
+ import { cva as cva2 } from "class-variance-authority";
277
+ import { Slot as Slot2 } from "radix-ui";
278
+ import { PanelLeft } from "lucide-react";
279
+
280
+ // src/hooks/use-mobile.ts
281
+ import { useEffect, useState } from "react";
282
+ var MOBILE_BREAKPOINT = 768;
283
+ var MOBILE_QUERY = `(max-width: ${MOBILE_BREAKPOINT - 1}px)`;
284
+ function useIsMobile() {
285
+ const [isMobile, setIsMobile] = useState(false);
286
+ useEffect(() => {
287
+ if (typeof window === "undefined") return;
288
+ const mql = window.matchMedia(MOBILE_QUERY);
289
+ const onChange = () => setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
290
+ mql.addEventListener("change", onChange);
291
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
292
+ return () => mql.removeEventListener("change", onChange);
293
+ }, []);
294
+ return isMobile;
295
+ }
296
+
297
+ // src/components/ui/sidebar.tsx
298
+ import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
299
+ var SIDEBAR_STORAGE_KEY = "sidebar_state";
300
+ var SIDEBAR_WIDTH = "16rem";
301
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
302
+ var SIDEBAR_WIDTH_ICON = "3.5rem";
303
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
304
+ var SidebarContext = React.createContext(null);
305
+ function useSidebar() {
306
+ const context = React.useContext(SidebarContext);
307
+ if (!context) {
308
+ throw new Error("useSidebar must be used within a SidebarProvider.");
309
+ }
310
+ return context;
311
+ }
312
+ function SidebarProvider({
313
+ defaultOpen = true,
314
+ open: openProp,
315
+ onOpenChange: setOpenProp,
316
+ className,
317
+ style,
318
+ children,
319
+ ...props
320
+ }) {
321
+ const isMobile = useIsMobile();
322
+ const [openMobile, setOpenMobile] = React.useState(false);
323
+ const [_open, _setOpen] = React.useState(() => {
324
+ if (typeof window === "undefined") return defaultOpen;
325
+ const stored = localStorage.getItem(SIDEBAR_STORAGE_KEY);
326
+ if (stored === "true") return true;
327
+ if (stored === "false") return false;
328
+ return defaultOpen;
329
+ });
330
+ const open = openProp ?? _open;
331
+ const setOpen = React.useCallback(
332
+ (value) => {
333
+ const openState = typeof value === "function" ? value(open) : value;
334
+ if (setOpenProp) {
335
+ setOpenProp(openState);
336
+ } else {
337
+ _setOpen(openState);
338
+ }
339
+ try {
340
+ localStorage.setItem(SIDEBAR_STORAGE_KEY, String(openState));
341
+ } catch {
342
+ }
343
+ },
344
+ [setOpenProp, open]
345
+ );
346
+ const toggleSidebar = React.useCallback(() => {
347
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
348
+ }, [isMobile, setOpen, setOpenMobile]);
349
+ React.useEffect(() => {
350
+ const handleKeyDown = (event) => {
351
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
352
+ event.preventDefault();
353
+ toggleSidebar();
354
+ }
355
+ };
356
+ window.addEventListener("keydown", handleKeyDown);
357
+ return () => window.removeEventListener("keydown", handleKeyDown);
358
+ }, [toggleSidebar]);
359
+ const state = open ? "expanded" : "collapsed";
360
+ const contextValue = React.useMemo(
361
+ () => ({
362
+ state,
363
+ open,
364
+ setOpen,
365
+ isMobile,
366
+ openMobile,
367
+ setOpenMobile,
368
+ toggleSidebar
369
+ }),
370
+ [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
371
+ );
372
+ return /* @__PURE__ */ jsx7(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx7(
373
+ "div",
374
+ {
375
+ "data-slot": "sidebar-wrapper",
376
+ style: {
377
+ "--sidebar-width": SIDEBAR_WIDTH,
378
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
379
+ ...style
380
+ },
381
+ className: cn(
382
+ "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
383
+ className
384
+ ),
385
+ ...props,
386
+ children
387
+ }
388
+ ) });
389
+ }
390
+ function Sidebar({
391
+ side = "left",
392
+ variant = "sidebar",
393
+ collapsible = "offcanvas",
394
+ className,
395
+ children,
396
+ dir,
397
+ ...props
398
+ }) {
399
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
400
+ if (collapsible === "none") {
401
+ return /* @__PURE__ */ jsx7(
402
+ "div",
403
+ {
404
+ "data-slot": "sidebar",
405
+ className: cn(
406
+ "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",
407
+ className
408
+ ),
409
+ ...props,
410
+ children
411
+ }
412
+ );
413
+ }
414
+ if (isMobile) {
415
+ return /* @__PURE__ */ jsx7(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs3(
416
+ SheetContent,
417
+ {
418
+ dir,
419
+ "data-sidebar": "sidebar",
420
+ "data-slot": "sidebar",
421
+ "data-mobile": "true",
422
+ className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
423
+ style: {
424
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
425
+ },
426
+ side,
427
+ children: [
428
+ /* @__PURE__ */ jsxs3(SheetHeader, { className: "sr-only", children: [
429
+ /* @__PURE__ */ jsx7(SheetTitle, { children: "Sidebar" }),
430
+ /* @__PURE__ */ jsx7(SheetDescription, { children: "Displays the mobile sidebar." })
431
+ ] }),
432
+ /* @__PURE__ */ jsx7("div", { className: "flex h-full w-full flex-col", children })
433
+ ]
434
+ }
435
+ ) });
436
+ }
437
+ return /* @__PURE__ */ jsxs3(
438
+ "div",
439
+ {
440
+ className: "group peer text-sidebar-foreground hidden md:block",
441
+ "data-state": state,
442
+ "data-collapsible": state === "collapsed" ? collapsible : "",
443
+ "data-variant": variant,
444
+ "data-side": side,
445
+ "data-slot": "sidebar",
446
+ children: [
447
+ /* @__PURE__ */ jsx7(
448
+ "div",
449
+ {
450
+ "data-slot": "sidebar-gap",
451
+ className: cn(
452
+ "transition-[width] duration-200 ease-linear relative w-(--sidebar-width) bg-transparent",
453
+ "group-data-[collapsible=offcanvas]:w-0",
454
+ "group-data-[side=right]:rotate-180",
455
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
456
+ )
457
+ }
458
+ ),
459
+ /* @__PURE__ */ jsx7(
460
+ "div",
461
+ {
462
+ "data-slot": "sidebar-container",
463
+ "data-side": side,
464
+ className: cn(
465
+ "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",
466
+ // Adjust the padding for floating and inset variants.
467
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
468
+ className
469
+ ),
470
+ ...props,
471
+ children: /* @__PURE__ */ jsx7(
472
+ "div",
473
+ {
474
+ "data-sidebar": "sidebar",
475
+ "data-slot": "sidebar-inner",
476
+ className: "bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 flex size-full flex-col",
477
+ children
478
+ }
479
+ )
480
+ }
481
+ )
482
+ ]
483
+ }
484
+ );
485
+ }
486
+ function SidebarTrigger({
487
+ className,
488
+ onClick,
489
+ ...props
490
+ }) {
491
+ const { toggleSidebar } = useSidebar();
492
+ return /* @__PURE__ */ jsxs3(
493
+ Button,
494
+ {
495
+ "data-sidebar": "trigger",
496
+ "data-slot": "sidebar-trigger",
497
+ variant: "ghost",
498
+ size: "icon-sm",
499
+ className: cn(className),
500
+ onClick: (event) => {
501
+ onClick?.(event);
502
+ toggleSidebar();
503
+ },
504
+ ...props,
505
+ children: [
506
+ /* @__PURE__ */ jsx7(PanelLeft, {}),
507
+ /* @__PURE__ */ jsx7("span", { className: "sr-only", children: "Toggle Sidebar" })
508
+ ]
509
+ }
510
+ );
511
+ }
512
+ function SidebarRail({ className, ...props }) {
513
+ const { toggleSidebar } = useSidebar();
514
+ return /* @__PURE__ */ jsx7(
515
+ "button",
516
+ {
517
+ "data-sidebar": "rail",
518
+ "data-slot": "sidebar-rail",
519
+ "aria-label": "Toggle Sidebar",
520
+ tabIndex: -1,
521
+ onClick: toggleSidebar,
522
+ title: "Toggle Sidebar",
523
+ className: cn(
524
+ "hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2",
525
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
526
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
527
+ "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
528
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
529
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
530
+ className
531
+ ),
532
+ ...props
533
+ }
534
+ );
535
+ }
536
+ function SidebarInset({ className, ...props }) {
537
+ return /* @__PURE__ */ jsx7(
538
+ "main",
539
+ {
540
+ "data-slot": "sidebar-inset",
541
+ className: cn(
542
+ "bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 relative flex w-full flex-1 flex-col",
543
+ className
544
+ ),
545
+ ...props
546
+ }
547
+ );
548
+ }
549
+ function SidebarHeader({ className, ...props }) {
550
+ return /* @__PURE__ */ jsx7(
551
+ "div",
552
+ {
553
+ "data-slot": "sidebar-header",
554
+ "data-sidebar": "header",
555
+ className: cn("gap-2 p-2 flex flex-col", className),
556
+ ...props
557
+ }
558
+ );
559
+ }
560
+ function SidebarFooter({ className, ...props }) {
561
+ return /* @__PURE__ */ jsx7(
562
+ "div",
563
+ {
564
+ "data-slot": "sidebar-footer",
565
+ "data-sidebar": "footer",
566
+ className: cn("gap-2 p-2 flex flex-col", className),
567
+ ...props
568
+ }
569
+ );
570
+ }
571
+ function SidebarSeparator({
572
+ className,
573
+ ...props
574
+ }) {
575
+ return /* @__PURE__ */ jsx7(
576
+ Separator,
577
+ {
578
+ "data-slot": "sidebar-separator",
579
+ "data-sidebar": "separator",
580
+ className: cn("bg-sidebar-border mx-2 w-auto", className),
581
+ ...props
582
+ }
583
+ );
584
+ }
585
+ function SidebarContent({ className, ...props }) {
586
+ return /* @__PURE__ */ jsx7(
587
+ "div",
588
+ {
589
+ "data-slot": "sidebar-content",
590
+ "data-sidebar": "content",
591
+ className: cn(
592
+ "no-scrollbar gap-2 flex min-h-0 flex-1 flex-col overflow-auto group-data-[collapsible=icon]:overflow-hidden",
593
+ className
594
+ ),
595
+ ...props
596
+ }
597
+ );
598
+ }
599
+ function SidebarGroup({ className, ...props }) {
600
+ return /* @__PURE__ */ jsx7(
601
+ "div",
602
+ {
603
+ "data-slot": "sidebar-group",
604
+ "data-sidebar": "group",
605
+ className: cn(
606
+ "p-2 relative flex w-full min-w-0 flex-col",
607
+ className
608
+ ),
609
+ ...props
610
+ }
611
+ );
612
+ }
613
+ function SidebarGroupLabel({
614
+ className,
615
+ asChild = false,
616
+ ...props
617
+ }) {
618
+ const Comp = asChild ? Slot2.Root : "div";
619
+ return /* @__PURE__ */ jsx7(
620
+ Comp,
621
+ {
622
+ "data-slot": "sidebar-group-label",
623
+ "data-sidebar": "group-label",
624
+ className: cn(
625
+ "text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0",
626
+ className
627
+ ),
628
+ ...props
629
+ }
630
+ );
631
+ }
632
+ function SidebarGroupContent({
633
+ className,
634
+ ...props
635
+ }) {
636
+ return /* @__PURE__ */ jsx7(
637
+ "div",
638
+ {
639
+ "data-slot": "sidebar-group-content",
640
+ "data-sidebar": "group-content",
641
+ className: cn("text-sm w-full", className),
642
+ ...props
643
+ }
644
+ );
645
+ }
646
+ function SidebarMenu({ className, ...props }) {
647
+ return /* @__PURE__ */ jsx7(
648
+ "ul",
649
+ {
650
+ "data-slot": "sidebar-menu",
651
+ "data-sidebar": "menu",
652
+ className: cn("gap-1 flex w-full min-w-0 flex-col", className),
653
+ ...props
654
+ }
655
+ );
656
+ }
657
+ function SidebarMenuItem({ className, ...props }) {
658
+ return /* @__PURE__ */ jsx7(
659
+ "li",
660
+ {
661
+ "data-slot": "sidebar-menu-item",
662
+ "data-sidebar": "menu-item",
663
+ className: cn("group/menu-item relative", className),
664
+ ...props
665
+ }
666
+ );
667
+ }
668
+ var sidebarMenuButtonVariants = cva2(
669
+ "ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-md p-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-4 [&_svg]:shrink-0",
670
+ {
671
+ variants: {
672
+ variant: {
673
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
674
+ outline: "bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
675
+ },
676
+ size: {
677
+ default: "h-8 text-sm",
678
+ sm: "h-7 text-xs",
679
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
680
+ }
681
+ },
682
+ defaultVariants: {
683
+ variant: "default",
684
+ size: "default"
685
+ }
686
+ }
687
+ );
688
+ function SidebarMenuButton({
689
+ asChild = false,
690
+ isActive = false,
691
+ variant = "default",
692
+ size = "default",
693
+ tooltip,
694
+ className,
695
+ ...props
696
+ }) {
697
+ const Comp = asChild ? Slot2.Root : "button";
698
+ const { isMobile, state } = useSidebar();
699
+ const button = /* @__PURE__ */ jsx7(
700
+ Comp,
701
+ {
702
+ "data-slot": "sidebar-menu-button",
703
+ "data-sidebar": "menu-button",
704
+ "data-size": size,
705
+ "data-active": isActive,
706
+ className: cn(sidebarMenuButtonVariants({ variant, size }), className),
707
+ ...props
708
+ }
709
+ );
710
+ if (!tooltip) {
711
+ return button;
712
+ }
713
+ if (typeof tooltip === "string") {
714
+ tooltip = {
715
+ children: tooltip
716
+ };
717
+ }
718
+ return /* @__PURE__ */ jsxs3(Tooltip, { children: [
719
+ /* @__PURE__ */ jsx7(TooltipTrigger, { asChild: true, children: button }),
720
+ /* @__PURE__ */ jsx7(
721
+ TooltipContent,
722
+ {
723
+ side: "right",
724
+ align: "center",
725
+ hidden: state !== "collapsed" || isMobile,
726
+ ...tooltip
727
+ }
728
+ )
729
+ ] });
730
+ }
731
+ function SidebarMenuSub({ className, ...props }) {
732
+ return /* @__PURE__ */ jsx7(
733
+ "ul",
734
+ {
735
+ "data-slot": "sidebar-menu-sub",
736
+ "data-sidebar": "menu-sub",
737
+ className: cn("border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden flex min-w-0 flex-col", className),
738
+ ...props
739
+ }
740
+ );
741
+ }
742
+ function SidebarMenuSubItem({
743
+ className,
744
+ ...props
745
+ }) {
746
+ return /* @__PURE__ */ jsx7(
747
+ "li",
748
+ {
749
+ "data-slot": "sidebar-menu-sub-item",
750
+ "data-sidebar": "menu-sub-item",
751
+ className: cn("group/menu-sub-item relative", className),
752
+ ...props
753
+ }
754
+ );
755
+ }
756
+ function SidebarMenuSubButton({
757
+ asChild = false,
758
+ size = "md",
759
+ isActive = false,
760
+ className,
761
+ ...props
762
+ }) {
763
+ const Comp = asChild ? Slot2.Root : "a";
764
+ return /* @__PURE__ */ jsx7(
765
+ Comp,
766
+ {
767
+ "data-slot": "sidebar-menu-sub-button",
768
+ "data-sidebar": "menu-sub-button",
769
+ "data-size": size,
770
+ "data-active": isActive,
771
+ className: cn(
772
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0",
773
+ className
774
+ ),
775
+ ...props
776
+ }
777
+ );
778
+ }
779
+
780
+ // src/components/ui/collapsible.tsx
781
+ import { Collapsible as CollapsiblePrimitive } from "radix-ui";
782
+ import { jsx as jsx8 } from "react/jsx-runtime";
783
+ function Collapsible({
784
+ ...props
785
+ }) {
786
+ return /* @__PURE__ */ jsx8(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
787
+ }
788
+ function CollapsibleTrigger({
789
+ ...props
790
+ }) {
791
+ return /* @__PURE__ */ jsx8(
792
+ CollapsiblePrimitive.CollapsibleTrigger,
793
+ {
794
+ "data-slot": "collapsible-trigger",
795
+ ...props
796
+ }
797
+ );
798
+ }
799
+ function CollapsibleContent({
800
+ className,
801
+ ...props
802
+ }) {
803
+ return /* @__PURE__ */ jsx8(
804
+ CollapsiblePrimitive.CollapsibleContent,
805
+ {
806
+ "data-slot": "collapsible-content",
807
+ className: cn(
808
+ "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
809
+ className
810
+ ),
811
+ ...props
812
+ }
813
+ );
814
+ }
815
+
816
+ // src/components/ui/dropdown-menu.tsx
817
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
818
+ import { Check, ChevronRight } from "lucide-react";
819
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
820
+ function DropdownMenu({
821
+ ...props
822
+ }) {
823
+ return /* @__PURE__ */ jsx9(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
824
+ }
825
+ function DropdownMenuTrigger({
826
+ ...props
827
+ }) {
828
+ return /* @__PURE__ */ jsx9(
829
+ DropdownMenuPrimitive.Trigger,
830
+ {
831
+ "data-slot": "dropdown-menu-trigger",
832
+ ...props
833
+ }
834
+ );
835
+ }
836
+ function DropdownMenuContent({
837
+ className,
838
+ align = "start",
839
+ sideOffset = 4,
840
+ ...props
841
+ }) {
842
+ return /* @__PURE__ */ jsx9(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx9(
843
+ DropdownMenuPrimitive.Content,
844
+ {
845
+ "data-slot": "dropdown-menu-content",
846
+ sideOffset,
847
+ align,
848
+ className: cn("data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-md p-1 shadow-md ring-1 duration-100 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden", className),
849
+ ...props
850
+ }
851
+ ) });
852
+ }
853
+ function DropdownMenuGroup({
854
+ ...props
855
+ }) {
856
+ return /* @__PURE__ */ jsx9(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
857
+ }
858
+ function DropdownMenuItem({
859
+ className,
860
+ inset,
861
+ variant = "default",
862
+ ...props
863
+ }) {
864
+ return /* @__PURE__ */ jsx9(
865
+ DropdownMenuPrimitive.Item,
866
+ {
867
+ "data-slot": "dropdown-menu-item",
868
+ "data-inset": inset,
869
+ "data-variant": variant,
870
+ className: cn(
871
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
872
+ className
873
+ ),
874
+ ...props
875
+ }
876
+ );
877
+ }
878
+ function DropdownMenuLabel({
879
+ className,
880
+ inset,
881
+ ...props
882
+ }) {
883
+ return /* @__PURE__ */ jsx9(
884
+ DropdownMenuPrimitive.Label,
885
+ {
886
+ "data-slot": "dropdown-menu-label",
887
+ "data-inset": inset,
888
+ className: cn("text-muted-foreground px-2 py-1.5 text-xs font-medium data-inset:pl-8", className),
889
+ ...props
890
+ }
891
+ );
892
+ }
893
+ function DropdownMenuSeparator({
894
+ className,
895
+ ...props
896
+ }) {
897
+ return /* @__PURE__ */ jsx9(
898
+ DropdownMenuPrimitive.Separator,
899
+ {
900
+ "data-slot": "dropdown-menu-separator",
901
+ className: cn("bg-border -mx-1 my-1 h-px", className),
902
+ ...props
903
+ }
904
+ );
905
+ }
906
+
907
+ // src/components/ui/avatar.tsx
908
+ import { Avatar as AvatarPrimitive } from "radix-ui";
909
+ import { jsx as jsx10 } from "react/jsx-runtime";
910
+ function Avatar({
911
+ className,
912
+ size = "default",
913
+ ...props
914
+ }) {
915
+ return /* @__PURE__ */ jsx10(
916
+ AvatarPrimitive.Root,
917
+ {
918
+ "data-slot": "avatar",
919
+ "data-size": size,
920
+ className: cn(
921
+ "size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6 after:border-border group/avatar relative flex shrink-0 select-none after:absolute after:inset-0 after:border after:mix-blend-darken dark:after:mix-blend-lighten",
922
+ className
923
+ ),
924
+ ...props
925
+ }
926
+ );
927
+ }
928
+ function AvatarImage({
929
+ className,
930
+ ...props
931
+ }) {
932
+ return /* @__PURE__ */ jsx10(
933
+ AvatarPrimitive.Image,
934
+ {
935
+ "data-slot": "avatar-image",
936
+ className: cn(
937
+ "rounded-full aspect-square size-full object-cover",
938
+ className
939
+ ),
940
+ ...props
941
+ }
942
+ );
943
+ }
944
+ function AvatarFallback({
945
+ className,
946
+ ...props
947
+ }) {
948
+ return /* @__PURE__ */ jsx10(
949
+ AvatarPrimitive.Fallback,
950
+ {
951
+ "data-slot": "avatar-fallback",
952
+ className: cn(
953
+ "bg-muted text-muted-foreground rounded-full flex size-full items-center justify-center text-sm group-data-[size=sm]/avatar:text-xs",
954
+ className
955
+ ),
956
+ ...props
957
+ }
958
+ );
959
+ }
960
+
961
+ // src/components/ui/badge.tsx
962
+ import { cva as cva3 } from "class-variance-authority";
963
+ import { Slot as Slot3 } from "radix-ui";
964
+ import { jsx as jsx11 } from "react/jsx-runtime";
965
+ var badgeVariants = cva3(
966
+ "h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive overflow-hidden group/badge",
967
+ {
968
+ variants: {
969
+ variant: {
970
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
971
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
972
+ destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
973
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
974
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
975
+ link: "text-primary underline-offset-4 hover:underline"
976
+ }
977
+ },
978
+ defaultVariants: {
979
+ variant: "default"
980
+ }
981
+ }
982
+ );
983
+ function Badge({
984
+ className,
985
+ variant = "default",
986
+ asChild = false,
987
+ ...props
988
+ }) {
989
+ const Comp = asChild ? Slot3.Root : "span";
990
+ return /* @__PURE__ */ jsx11(
991
+ Comp,
992
+ {
993
+ "data-slot": "badge",
994
+ "data-variant": variant,
995
+ className: cn(badgeVariants({ variant }), className),
996
+ ...props
997
+ }
998
+ );
999
+ }
1000
+
1001
+ // src/components/ui/breadcrumb.tsx
1002
+ import { Slot as Slot4 } from "radix-ui";
1003
+ import { ChevronRight as ChevronRight2, MoreHorizontal } from "lucide-react";
1004
+ import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
1005
+ function Breadcrumb({ className, ...props }) {
1006
+ return /* @__PURE__ */ jsx12(
1007
+ "nav",
1008
+ {
1009
+ "aria-label": "breadcrumb",
1010
+ "data-slot": "breadcrumb",
1011
+ className: cn(className),
1012
+ ...props
1013
+ }
1014
+ );
1015
+ }
1016
+ function BreadcrumbList({ className, ...props }) {
1017
+ return /* @__PURE__ */ jsx12(
1018
+ "ol",
1019
+ {
1020
+ "data-slot": "breadcrumb-list",
1021
+ className: cn(
1022
+ "text-muted-foreground gap-1.5 text-sm sm:gap-2.5 flex flex-wrap items-center wrap-break-word",
1023
+ className
1024
+ ),
1025
+ ...props
1026
+ }
1027
+ );
1028
+ }
1029
+ function BreadcrumbItem({ className, ...props }) {
1030
+ return /* @__PURE__ */ jsx12(
1031
+ "li",
1032
+ {
1033
+ "data-slot": "breadcrumb-item",
1034
+ className: cn("gap-1.5 inline-flex items-center", className),
1035
+ ...props
1036
+ }
1037
+ );
1038
+ }
1039
+ function BreadcrumbLink({
1040
+ asChild,
1041
+ className,
1042
+ ...props
1043
+ }) {
1044
+ const Comp = asChild ? Slot4.Root : "a";
1045
+ return /* @__PURE__ */ jsx12(
1046
+ Comp,
1047
+ {
1048
+ "data-slot": "breadcrumb-link",
1049
+ className: cn("hover:text-foreground transition-colors", className),
1050
+ ...props
1051
+ }
1052
+ );
1053
+ }
1054
+ function BreadcrumbPage({ className, ...props }) {
1055
+ return /* @__PURE__ */ jsx12(
1056
+ "span",
1057
+ {
1058
+ "data-slot": "breadcrumb-page",
1059
+ role: "link",
1060
+ "aria-disabled": "true",
1061
+ "aria-current": "page",
1062
+ className: cn("text-foreground font-normal", className),
1063
+ ...props
1064
+ }
1065
+ );
1066
+ }
1067
+ function BreadcrumbSeparator({
1068
+ children,
1069
+ className,
1070
+ ...props
1071
+ }) {
1072
+ return /* @__PURE__ */ jsx12(
1073
+ "li",
1074
+ {
1075
+ "data-slot": "breadcrumb-separator",
1076
+ role: "presentation",
1077
+ "aria-hidden": "true",
1078
+ className: cn("[&>svg]:size-3.5", className),
1079
+ ...props,
1080
+ children: children ?? /* @__PURE__ */ jsx12(ChevronRight2, {})
1081
+ }
1082
+ );
1083
+ }
1084
+ function BreadcrumbEllipsis({
1085
+ className,
1086
+ ...props
1087
+ }) {
1088
+ return /* @__PURE__ */ jsxs5(
1089
+ "span",
1090
+ {
1091
+ "data-slot": "breadcrumb-ellipsis",
1092
+ role: "presentation",
1093
+ "aria-hidden": "true",
1094
+ className: cn(
1095
+ "size-5 [&>svg]:size-4 flex items-center justify-center",
1096
+ className
1097
+ ),
1098
+ ...props,
1099
+ children: [
1100
+ /* @__PURE__ */ jsx12(MoreHorizontal, {}),
1101
+ /* @__PURE__ */ jsx12("span", { className: "sr-only", children: "More" })
1102
+ ]
1103
+ }
1104
+ );
1105
+ }
1106
+
1107
+ // src/components/ui/label.tsx
1108
+ import { Label as LabelPrimitive } from "radix-ui";
1109
+ import { jsx as jsx13 } from "react/jsx-runtime";
1110
+ function Label({
1111
+ className,
1112
+ ...props
1113
+ }) {
1114
+ return /* @__PURE__ */ jsx13(
1115
+ LabelPrimitive.Root,
1116
+ {
1117
+ "data-slot": "label",
1118
+ className: cn(
1119
+ "gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",
1120
+ className
1121
+ ),
1122
+ ...props
1123
+ }
1124
+ );
1125
+ }
1126
+
1127
+ // src/components/ui/dialog.tsx
1128
+ import { Dialog as DialogPrimitive } from "radix-ui";
1129
+ import { X as X2 } from "lucide-react";
1130
+ import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
1131
+ function Dialog({
1132
+ ...props
1133
+ }) {
1134
+ return /* @__PURE__ */ jsx14(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
1135
+ }
1136
+ function DialogTrigger({
1137
+ ...props
1138
+ }) {
1139
+ return /* @__PURE__ */ jsx14(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
1140
+ }
1141
+ function DialogPortal({
1142
+ ...props
1143
+ }) {
1144
+ return /* @__PURE__ */ jsx14(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
1145
+ }
1146
+ function DialogClose({
1147
+ ...props
1148
+ }) {
1149
+ return /* @__PURE__ */ jsx14(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
1150
+ }
1151
+ function DialogOverlay({
1152
+ className,
1153
+ ...props
1154
+ }) {
1155
+ return /* @__PURE__ */ jsx14(
1156
+ DialogPrimitive.Overlay,
1157
+ {
1158
+ "data-slot": "dialog-overlay",
1159
+ className: cn("data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50", className),
1160
+ ...props
1161
+ }
1162
+ );
1163
+ }
1164
+ function DialogContent({
1165
+ className,
1166
+ children,
1167
+ showCloseButton = true,
1168
+ ...props
1169
+ }) {
1170
+ return /* @__PURE__ */ jsxs6(DialogPortal, { children: [
1171
+ /* @__PURE__ */ jsx14(DialogOverlay, {}),
1172
+ /* @__PURE__ */ jsxs6(
1173
+ DialogPrimitive.Content,
1174
+ {
1175
+ "data-slot": "dialog-content",
1176
+ className: cn(
1177
+ "bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-6 rounded-xl p-6 text-sm ring-1 duration-100 sm:max-w-md fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none",
1178
+ className
1179
+ ),
1180
+ ...props,
1181
+ children: [
1182
+ children,
1183
+ showCloseButton && /* @__PURE__ */ jsx14(DialogPrimitive.Close, { "data-slot": "dialog-close", asChild: true, children: /* @__PURE__ */ jsxs6(Button, { variant: "ghost", className: "absolute top-4 right-4", size: "icon-sm", children: [
1184
+ /* @__PURE__ */ jsx14(X2, {}),
1185
+ /* @__PURE__ */ jsx14("span", { className: "sr-only", children: "Close" })
1186
+ ] }) })
1187
+ ]
1188
+ }
1189
+ )
1190
+ ] });
1191
+ }
1192
+ function DialogHeader({ className, ...props }) {
1193
+ return /* @__PURE__ */ jsx14(
1194
+ "div",
1195
+ {
1196
+ "data-slot": "dialog-header",
1197
+ className: cn("gap-2 flex flex-col", className),
1198
+ ...props
1199
+ }
1200
+ );
1201
+ }
1202
+ function DialogFooter({
1203
+ className,
1204
+ children,
1205
+ ...props
1206
+ }) {
1207
+ return /* @__PURE__ */ jsx14(
1208
+ "div",
1209
+ {
1210
+ "data-slot": "dialog-footer",
1211
+ className: cn(
1212
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
1213
+ className
1214
+ ),
1215
+ ...props,
1216
+ children
1217
+ }
1218
+ );
1219
+ }
1220
+ function DialogTitle({
1221
+ className,
1222
+ ...props
1223
+ }) {
1224
+ return /* @__PURE__ */ jsx14(
1225
+ DialogPrimitive.Title,
1226
+ {
1227
+ "data-slot": "dialog-title",
1228
+ className: cn("leading-none font-medium", className),
1229
+ ...props
1230
+ }
1231
+ );
1232
+ }
1233
+ function DialogDescription({
1234
+ className,
1235
+ ...props
1236
+ }) {
1237
+ return /* @__PURE__ */ jsx14(
1238
+ DialogPrimitive.Description,
1239
+ {
1240
+ "data-slot": "dialog-description",
1241
+ className: cn("text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3", className),
1242
+ ...props
1243
+ }
1244
+ );
1245
+ }
1246
+
1247
+ // src/components/ui/slider.tsx
1248
+ import * as React2 from "react";
1249
+ import { Slider as SliderPrimitive } from "radix-ui";
1250
+ import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
1251
+ function Slider({
1252
+ className,
1253
+ defaultValue,
1254
+ value,
1255
+ min = 0,
1256
+ max = 100,
1257
+ ...props
1258
+ }) {
1259
+ const _values = React2.useMemo(
1260
+ () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
1261
+ [value, defaultValue, min, max]
1262
+ );
1263
+ return /* @__PURE__ */ jsxs7(
1264
+ SliderPrimitive.Root,
1265
+ {
1266
+ "data-slot": "slider",
1267
+ defaultValue,
1268
+ value,
1269
+ min,
1270
+ max,
1271
+ className: cn(
1272
+ "data-vertical:min-h-40 relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:w-auto data-vertical:flex-col",
1273
+ className
1274
+ ),
1275
+ ...props,
1276
+ children: [
1277
+ /* @__PURE__ */ jsx15(
1278
+ SliderPrimitive.Track,
1279
+ {
1280
+ "data-slot": "slider-track",
1281
+ className: "bg-muted rounded-full data-horizontal:h-1.5 data-vertical:w-1.5 relative grow overflow-hidden data-horizontal:w-full data-vertical:h-full",
1282
+ children: /* @__PURE__ */ jsx15(
1283
+ SliderPrimitive.Range,
1284
+ {
1285
+ "data-slot": "slider-range",
1286
+ className: "bg-primary absolute select-none data-horizontal:h-full data-vertical:w-full"
1287
+ }
1288
+ )
1289
+ }
1290
+ ),
1291
+ Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx15(
1292
+ SliderPrimitive.Thumb,
1293
+ {
1294
+ "data-slot": "slider-thumb",
1295
+ className: "border-primary ring-ring/50 size-4 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden block shrink-0 select-none disabled:pointer-events-none disabled:opacity-50"
1296
+ },
1297
+ index
1298
+ ))
1299
+ ]
1300
+ }
1301
+ );
1302
+ }
1303
+
1304
+ // src/components/ui/select.tsx
1305
+ import { Select as SelectPrimitive } from "radix-ui";
1306
+ import { ChevronsUpDown, Check as Check2, ChevronUp, ChevronDown } from "lucide-react";
1307
+ import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
1308
+ function Select({
1309
+ ...props
1310
+ }) {
1311
+ return /* @__PURE__ */ jsx16(SelectPrimitive.Root, { "data-slot": "select", ...props });
1312
+ }
1313
+ function SelectGroup({
1314
+ className,
1315
+ ...props
1316
+ }) {
1317
+ return /* @__PURE__ */ jsx16(
1318
+ SelectPrimitive.Group,
1319
+ {
1320
+ "data-slot": "select-group",
1321
+ className: cn("scroll-my-1 p-1", className),
1322
+ ...props
1323
+ }
1324
+ );
1325
+ }
1326
+ function SelectValue({
1327
+ ...props
1328
+ }) {
1329
+ return /* @__PURE__ */ jsx16(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
1330
+ }
1331
+ function SelectTrigger({
1332
+ className,
1333
+ size = "default",
1334
+ children,
1335
+ ...props
1336
+ }) {
1337
+ return /* @__PURE__ */ jsxs8(
1338
+ SelectPrimitive.Trigger,
1339
+ {
1340
+ "data-slot": "select-trigger",
1341
+ "data-size": size,
1342
+ className: cn(
1343
+ "border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-md border bg-transparent py-2 pr-2 pl-2.5 text-sm shadow-xs transition-[color,box-shadow] focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1344
+ className
1345
+ ),
1346
+ ...props,
1347
+ children: [
1348
+ children,
1349
+ /* @__PURE__ */ jsx16(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx16(ChevronsUpDown, { className: "text-muted-foreground size-4 pointer-events-none" }) })
1350
+ ]
1351
+ }
1352
+ );
1353
+ }
1354
+ function SelectContent({
1355
+ className,
1356
+ children,
1357
+ position = "item-aligned",
1358
+ align = "center",
1359
+ ...props
1360
+ }) {
1361
+ return /* @__PURE__ */ jsx16(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs8(
1362
+ SelectPrimitive.Content,
1363
+ {
1364
+ "data-slot": "select-content",
1365
+ "data-align-trigger": position === "item-aligned",
1366
+ className: cn("bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 min-w-36 rounded-md shadow-md ring-1 duration-100 relative z-50 max-h-(--radix-select-content-available-height) origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none", 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", className),
1367
+ position,
1368
+ align,
1369
+ ...props,
1370
+ children: [
1371
+ /* @__PURE__ */ jsx16(SelectScrollUpButton, {}),
1372
+ /* @__PURE__ */ jsx16(
1373
+ SelectPrimitive.Viewport,
1374
+ {
1375
+ "data-position": position,
1376
+ className: cn(
1377
+ "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",
1378
+ position === "popper" && ""
1379
+ ),
1380
+ children
1381
+ }
1382
+ ),
1383
+ /* @__PURE__ */ jsx16(SelectScrollDownButton, {})
1384
+ ]
1385
+ }
1386
+ ) });
1387
+ }
1388
+ function SelectLabel({
1389
+ className,
1390
+ ...props
1391
+ }) {
1392
+ return /* @__PURE__ */ jsx16(
1393
+ SelectPrimitive.Label,
1394
+ {
1395
+ "data-slot": "select-label",
1396
+ className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
1397
+ ...props
1398
+ }
1399
+ );
1400
+ }
1401
+ function SelectItem({
1402
+ className,
1403
+ children,
1404
+ ...props
1405
+ }) {
1406
+ return /* @__PURE__ */ jsxs8(
1407
+ SelectPrimitive.Item,
1408
+ {
1409
+ "data-slot": "select-item",
1410
+ className: cn(
1411
+ "focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
1412
+ className
1413
+ ),
1414
+ ...props,
1415
+ children: [
1416
+ /* @__PURE__ */ jsx16("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx16(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx16(Check2, { className: "pointer-events-none" }) }) }),
1417
+ /* @__PURE__ */ jsx16(SelectPrimitive.ItemText, { children })
1418
+ ]
1419
+ }
1420
+ );
1421
+ }
1422
+ function SelectSeparator({
1423
+ className,
1424
+ ...props
1425
+ }) {
1426
+ return /* @__PURE__ */ jsx16(
1427
+ SelectPrimitive.Separator,
1428
+ {
1429
+ "data-slot": "select-separator",
1430
+ className: cn("bg-border -mx-1 my-1 h-px pointer-events-none", className),
1431
+ ...props
1432
+ }
1433
+ );
1434
+ }
1435
+ function SelectScrollUpButton({
1436
+ className,
1437
+ ...props
1438
+ }) {
1439
+ return /* @__PURE__ */ jsx16(
1440
+ SelectPrimitive.ScrollUpButton,
1441
+ {
1442
+ "data-slot": "select-scroll-up-button",
1443
+ className: cn("bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4", className),
1444
+ ...props,
1445
+ children: /* @__PURE__ */ jsx16(ChevronUp, {})
1446
+ }
1447
+ );
1448
+ }
1449
+ function SelectScrollDownButton({
1450
+ className,
1451
+ ...props
1452
+ }) {
1453
+ return /* @__PURE__ */ jsx16(
1454
+ SelectPrimitive.ScrollDownButton,
1455
+ {
1456
+ "data-slot": "select-scroll-down-button",
1457
+ className: cn("bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4", className),
1458
+ ...props,
1459
+ children: /* @__PURE__ */ jsx16(ChevronDown, {})
1460
+ }
1461
+ );
1462
+ }
1463
+
1464
+ // src/components/ui/table.tsx
1465
+ import { jsx as jsx17 } from "react/jsx-runtime";
1466
+ function Table({ className, ...props }) {
1467
+ return /* @__PURE__ */ jsx17("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx17(
1468
+ "table",
1469
+ {
1470
+ "data-slot": "table",
1471
+ className: cn("w-full caption-bottom text-sm", className),
1472
+ ...props
1473
+ }
1474
+ ) });
1475
+ }
1476
+ function TableHeader({ className, ...props }) {
1477
+ return /* @__PURE__ */ jsx17(
1478
+ "thead",
1479
+ {
1480
+ "data-slot": "table-header",
1481
+ className: cn("[&_tr]:border-b", className),
1482
+ ...props
1483
+ }
1484
+ );
1485
+ }
1486
+ function TableBody({ className, ...props }) {
1487
+ return /* @__PURE__ */ jsx17(
1488
+ "tbody",
1489
+ {
1490
+ "data-slot": "table-body",
1491
+ className: cn("[&_tr:last-child]:border-0", className),
1492
+ ...props
1493
+ }
1494
+ );
1495
+ }
1496
+ function TableFooter({ className, ...props }) {
1497
+ return /* @__PURE__ */ jsx17(
1498
+ "tfoot",
1499
+ {
1500
+ "data-slot": "table-footer",
1501
+ className: cn("bg-muted/50 border-t font-medium [&>tr]:last:border-b-0", className),
1502
+ ...props
1503
+ }
1504
+ );
1505
+ }
1506
+ function TableRow({ className, ...props }) {
1507
+ return /* @__PURE__ */ jsx17(
1508
+ "tr",
1509
+ {
1510
+ "data-slot": "table-row",
1511
+ className: cn("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors", className),
1512
+ ...props
1513
+ }
1514
+ );
1515
+ }
1516
+ function TableHead({ className, ...props }) {
1517
+ return /* @__PURE__ */ jsx17(
1518
+ "th",
1519
+ {
1520
+ "data-slot": "table-head",
1521
+ className: cn("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
1522
+ ...props
1523
+ }
1524
+ );
1525
+ }
1526
+ function TableCell({ className, ...props }) {
1527
+ return /* @__PURE__ */ jsx17(
1528
+ "td",
1529
+ {
1530
+ "data-slot": "table-cell",
1531
+ className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
1532
+ ...props
1533
+ }
1534
+ );
1535
+ }
1536
+ function TableCaption({
1537
+ className,
1538
+ ...props
1539
+ }) {
1540
+ return /* @__PURE__ */ jsx17(
1541
+ "caption",
1542
+ {
1543
+ "data-slot": "table-caption",
1544
+ className: cn("text-muted-foreground mt-4 text-sm", className),
1545
+ ...props
1546
+ }
1547
+ );
1548
+ }
1549
+
1550
+ // src/components/ui/alert-dialog.tsx
1551
+ import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
1552
+ import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1553
+ function AlertDialog({
1554
+ ...props
1555
+ }) {
1556
+ return /* @__PURE__ */ jsx18(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
1557
+ }
1558
+ function AlertDialogTrigger({
1559
+ ...props
1560
+ }) {
1561
+ return /* @__PURE__ */ jsx18(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
1562
+ }
1563
+ function AlertDialogPortal({
1564
+ ...props
1565
+ }) {
1566
+ return /* @__PURE__ */ jsx18(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
1567
+ }
1568
+ function AlertDialogOverlay({
1569
+ className,
1570
+ ...props
1571
+ }) {
1572
+ return /* @__PURE__ */ jsx18(
1573
+ AlertDialogPrimitive.Overlay,
1574
+ {
1575
+ "data-slot": "alert-dialog-overlay",
1576
+ className: cn("data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50", className),
1577
+ ...props
1578
+ }
1579
+ );
1580
+ }
1581
+ function AlertDialogContent({
1582
+ className,
1583
+ size = "default",
1584
+ ...props
1585
+ }) {
1586
+ return /* @__PURE__ */ jsxs9(AlertDialogPortal, { children: [
1587
+ /* @__PURE__ */ jsx18(AlertDialogOverlay, {}),
1588
+ /* @__PURE__ */ jsx18(
1589
+ AlertDialogPrimitive.Content,
1590
+ {
1591
+ "data-slot": "alert-dialog-content",
1592
+ "data-size": size,
1593
+ className: cn(
1594
+ "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-6 rounded-xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 outline-none",
1595
+ className
1596
+ ),
1597
+ ...props
1598
+ }
1599
+ )
1600
+ ] });
1601
+ }
1602
+ function AlertDialogHeader({
1603
+ className,
1604
+ ...props
1605
+ }) {
1606
+ return /* @__PURE__ */ jsx18(
1607
+ "div",
1608
+ {
1609
+ "data-slot": "alert-dialog-header",
1610
+ className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className),
1611
+ ...props
1612
+ }
1613
+ );
1614
+ }
1615
+ function AlertDialogFooter({
1616
+ className,
1617
+ ...props
1618
+ }) {
1619
+ return /* @__PURE__ */ jsx18(
1620
+ "div",
1621
+ {
1622
+ "data-slot": "alert-dialog-footer",
1623
+ className: cn(
1624
+ "flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
1625
+ className
1626
+ ),
1627
+ ...props
1628
+ }
1629
+ );
1630
+ }
1631
+ function AlertDialogTitle({
1632
+ className,
1633
+ ...props
1634
+ }) {
1635
+ return /* @__PURE__ */ jsx18(
1636
+ AlertDialogPrimitive.Title,
1637
+ {
1638
+ "data-slot": "alert-dialog-title",
1639
+ className: cn("text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
1640
+ ...props
1641
+ }
1642
+ );
1643
+ }
1644
+ function AlertDialogDescription({
1645
+ className,
1646
+ ...props
1647
+ }) {
1648
+ return /* @__PURE__ */ jsx18(
1649
+ AlertDialogPrimitive.Description,
1650
+ {
1651
+ "data-slot": "alert-dialog-description",
1652
+ className: cn("text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3", className),
1653
+ ...props
1654
+ }
1655
+ );
1656
+ }
1657
+ function AlertDialogAction({
1658
+ className,
1659
+ variant = "default",
1660
+ size = "default",
1661
+ ...props
1662
+ }) {
1663
+ return /* @__PURE__ */ jsx18(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx18(
1664
+ AlertDialogPrimitive.Action,
1665
+ {
1666
+ "data-slot": "alert-dialog-action",
1667
+ className: cn(className),
1668
+ ...props
1669
+ }
1670
+ ) });
1671
+ }
1672
+ function AlertDialogCancel({
1673
+ className,
1674
+ variant = "outline",
1675
+ size = "default",
1676
+ ...props
1677
+ }) {
1678
+ return /* @__PURE__ */ jsx18(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx18(
1679
+ AlertDialogPrimitive.Cancel,
1680
+ {
1681
+ "data-slot": "alert-dialog-cancel",
1682
+ className: cn(className),
1683
+ ...props
1684
+ }
1685
+ ) });
1686
+ }
1687
+
1688
+ export {
1689
+ cn,
1690
+ TooltipProvider,
1691
+ Tooltip,
1692
+ TooltipTrigger,
1693
+ TooltipContent,
1694
+ buttonVariants,
1695
+ Button,
1696
+ Input,
1697
+ Separator,
1698
+ Sheet,
1699
+ SheetTrigger,
1700
+ SheetClose,
1701
+ SheetContent,
1702
+ SheetHeader,
1703
+ SheetFooter,
1704
+ SheetTitle,
1705
+ SheetDescription,
1706
+ Skeleton,
1707
+ useSidebar,
1708
+ SidebarProvider,
1709
+ Sidebar,
1710
+ SidebarTrigger,
1711
+ SidebarRail,
1712
+ SidebarInset,
1713
+ SidebarHeader,
1714
+ SidebarFooter,
1715
+ SidebarSeparator,
1716
+ SidebarContent,
1717
+ SidebarGroup,
1718
+ SidebarGroupLabel,
1719
+ SidebarGroupContent,
1720
+ SidebarMenu,
1721
+ SidebarMenuItem,
1722
+ SidebarMenuButton,
1723
+ SidebarMenuSub,
1724
+ SidebarMenuSubItem,
1725
+ SidebarMenuSubButton,
1726
+ Collapsible,
1727
+ CollapsibleTrigger,
1728
+ CollapsibleContent,
1729
+ DropdownMenu,
1730
+ DropdownMenuTrigger,
1731
+ DropdownMenuContent,
1732
+ DropdownMenuGroup,
1733
+ DropdownMenuItem,
1734
+ DropdownMenuLabel,
1735
+ DropdownMenuSeparator,
1736
+ Avatar,
1737
+ AvatarImage,
1738
+ AvatarFallback,
1739
+ badgeVariants,
1740
+ Badge,
1741
+ Breadcrumb,
1742
+ BreadcrumbList,
1743
+ BreadcrumbItem,
1744
+ BreadcrumbLink,
1745
+ BreadcrumbPage,
1746
+ BreadcrumbSeparator,
1747
+ BreadcrumbEllipsis,
1748
+ Label,
1749
+ Dialog,
1750
+ DialogTrigger,
1751
+ DialogPortal,
1752
+ DialogClose,
1753
+ DialogOverlay,
1754
+ DialogContent,
1755
+ DialogHeader,
1756
+ DialogFooter,
1757
+ DialogTitle,
1758
+ DialogDescription,
1759
+ Slider,
1760
+ Select,
1761
+ SelectGroup,
1762
+ SelectValue,
1763
+ SelectTrigger,
1764
+ SelectContent,
1765
+ SelectLabel,
1766
+ SelectItem,
1767
+ SelectSeparator,
1768
+ SelectScrollUpButton,
1769
+ SelectScrollDownButton,
1770
+ Table,
1771
+ TableHeader,
1772
+ TableBody,
1773
+ TableFooter,
1774
+ TableRow,
1775
+ TableHead,
1776
+ TableCell,
1777
+ TableCaption,
1778
+ AlertDialog,
1779
+ AlertDialogTrigger,
1780
+ AlertDialogPortal,
1781
+ AlertDialogOverlay,
1782
+ AlertDialogContent,
1783
+ AlertDialogHeader,
1784
+ AlertDialogFooter,
1785
+ AlertDialogTitle,
1786
+ AlertDialogDescription,
1787
+ AlertDialogAction,
1788
+ AlertDialogCancel
1789
+ };
1790
+ //# sourceMappingURL=chunk-OS2C4IWR.js.map