@akira-io/ui 1.0.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.
@@ -0,0 +1,1291 @@
1
+ import { cn, elevatedSurface, nestedSurfaceReset, menuSurface, focusRing, floatingSurface, Button, Input } from './chunk-POE7OYET.js';
2
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+ import { Slot } from '@radix-ui/react-slot';
5
+ import { ChevronRight, MoreHorizontal, CheckIcon, CircleIcon, ChevronRightIcon, XIcon, PanelLeftIcon } from 'lucide-react';
6
+ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
7
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
8
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
9
+ import * as SheetPrimitive from '@radix-ui/react-dialog';
10
+ import * as React2 from 'react';
11
+ import { useState, useEffect } from 'react';
12
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
13
+ import { cva } from 'class-variance-authority';
14
+
15
+ function Avatar({
16
+ className,
17
+ ...props
18
+ }) {
19
+ return /* @__PURE__ */ jsx(
20
+ AvatarPrimitive.Root,
21
+ {
22
+ "data-slot": "avatar",
23
+ className: cn(
24
+ "size-8 relative flex shrink-0 overflow-hidden rounded-full",
25
+ className
26
+ ),
27
+ ...props
28
+ }
29
+ );
30
+ }
31
+ function AvatarImage({
32
+ className,
33
+ ...props
34
+ }) {
35
+ return /* @__PURE__ */ jsx(
36
+ AvatarPrimitive.Image,
37
+ {
38
+ "data-slot": "avatar-image",
39
+ className: cn("aspect-square size-full", className),
40
+ ...props
41
+ }
42
+ );
43
+ }
44
+ function AvatarFallback({
45
+ className,
46
+ ...props
47
+ }) {
48
+ return /* @__PURE__ */ jsx(
49
+ AvatarPrimitive.Fallback,
50
+ {
51
+ "data-slot": "avatar-fallback",
52
+ className: cn(
53
+ "flex size-full items-center justify-center rounded-full bg-muted",
54
+ className
55
+ ),
56
+ ...props
57
+ }
58
+ );
59
+ }
60
+ function Breadcrumb({ ...props }) {
61
+ return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
62
+ }
63
+ function BreadcrumbList({ className, ...props }) {
64
+ return /* @__PURE__ */ jsx(
65
+ "ol",
66
+ {
67
+ "data-slot": "breadcrumb-list",
68
+ className: cn(
69
+ "gap-1.5 text-sm sm:gap-2.5 flex flex-wrap items-center break-words text-muted-foreground",
70
+ className
71
+ ),
72
+ ...props
73
+ }
74
+ );
75
+ }
76
+ function BreadcrumbItem({ className, ...props }) {
77
+ return /* @__PURE__ */ jsx(
78
+ "li",
79
+ {
80
+ "data-slot": "breadcrumb-item",
81
+ className: cn("gap-1.5 inline-flex items-center", className),
82
+ ...props
83
+ }
84
+ );
85
+ }
86
+ function BreadcrumbLink({
87
+ asChild,
88
+ className,
89
+ ...props
90
+ }) {
91
+ const Comp = asChild ? Slot : "a";
92
+ return /* @__PURE__ */ jsx(
93
+ Comp,
94
+ {
95
+ "data-slot": "breadcrumb-link",
96
+ className: cn("transition-colors hover:text-foreground", className),
97
+ ...props
98
+ }
99
+ );
100
+ }
101
+ function BreadcrumbPage({ className, ...props }) {
102
+ return /* @__PURE__ */ jsx(
103
+ "span",
104
+ {
105
+ "data-slot": "breadcrumb-page",
106
+ role: "link",
107
+ "aria-disabled": "true",
108
+ "aria-current": "page",
109
+ className: cn("font-semibold text-foreground", className),
110
+ ...props
111
+ }
112
+ );
113
+ }
114
+ function BreadcrumbSeparator({
115
+ children,
116
+ className,
117
+ ...props
118
+ }) {
119
+ return /* @__PURE__ */ jsx(
120
+ "li",
121
+ {
122
+ "data-slot": "breadcrumb-separator",
123
+ role: "presentation",
124
+ "aria-hidden": "true",
125
+ className: cn("[&>svg]:size-3.5", className),
126
+ ...props,
127
+ children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
128
+ }
129
+ );
130
+ }
131
+ function BreadcrumbEllipsis({
132
+ className,
133
+ ...props
134
+ }) {
135
+ return /* @__PURE__ */ jsxs(
136
+ "span",
137
+ {
138
+ "data-slot": "breadcrumb-ellipsis",
139
+ role: "presentation",
140
+ "aria-hidden": "true",
141
+ className: cn(
142
+ "size-9 rounded-xl flex items-center justify-center",
143
+ className
144
+ ),
145
+ ...props,
146
+ children: [
147
+ /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }),
148
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
149
+ ]
150
+ }
151
+ );
152
+ }
153
+ function Collapsible({
154
+ className,
155
+ ...props
156
+ }) {
157
+ return /* @__PURE__ */ jsx(
158
+ CollapsiblePrimitive.Root,
159
+ {
160
+ "data-slot": "collapsible",
161
+ className: cn(
162
+ elevatedSurface,
163
+ nestedSurfaceReset,
164
+ "p-5 bg-card",
165
+ className
166
+ ),
167
+ ...props
168
+ }
169
+ );
170
+ }
171
+ function CollapsibleTrigger2({
172
+ ...props
173
+ }) {
174
+ return /* @__PURE__ */ jsx(
175
+ CollapsiblePrimitive.CollapsibleTrigger,
176
+ {
177
+ "data-slot": "collapsible-trigger",
178
+ ...props
179
+ }
180
+ );
181
+ }
182
+ function CollapsibleContent2({
183
+ ...props
184
+ }) {
185
+ return /* @__PURE__ */ jsx(
186
+ CollapsiblePrimitive.CollapsibleContent,
187
+ {
188
+ "data-slot": "collapsible-content",
189
+ ...props
190
+ }
191
+ );
192
+ }
193
+ function DropdownMenu({
194
+ modal = false,
195
+ ...props
196
+ }) {
197
+ return /* @__PURE__ */ jsx(
198
+ DropdownMenuPrimitive.Root,
199
+ {
200
+ "data-slot": "dropdown-menu",
201
+ modal,
202
+ ...props
203
+ }
204
+ );
205
+ }
206
+ function DropdownMenuPortal({
207
+ ...props
208
+ }) {
209
+ return /* @__PURE__ */ jsx(
210
+ DropdownMenuPrimitive.Portal,
211
+ {
212
+ "data-slot": "dropdown-menu-portal",
213
+ ...props
214
+ }
215
+ );
216
+ }
217
+ function DropdownMenuTrigger({
218
+ ...props
219
+ }) {
220
+ return /* @__PURE__ */ jsx(
221
+ DropdownMenuPrimitive.Trigger,
222
+ {
223
+ "data-slot": "dropdown-menu-trigger",
224
+ ...props
225
+ }
226
+ );
227
+ }
228
+ function DropdownMenuContent({
229
+ className,
230
+ sideOffset = 4,
231
+ ...props
232
+ }) {
233
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
234
+ DropdownMenuPrimitive.Content,
235
+ {
236
+ "data-slot": "dropdown-menu-content",
237
+ sideOffset,
238
+ className: cn(
239
+ `${menuSurface} 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 p-1.5 z-50 min-w-[8rem] overflow-hidden`,
240
+ className
241
+ ),
242
+ ...props
243
+ }
244
+ ) });
245
+ }
246
+ function DropdownMenuGroup({
247
+ ...props
248
+ }) {
249
+ return /* @__PURE__ */ jsx(
250
+ DropdownMenuPrimitive.Group,
251
+ {
252
+ "data-slot": "dropdown-menu-group",
253
+ ...props
254
+ }
255
+ );
256
+ }
257
+ function DropdownMenuItem({
258
+ className,
259
+ inset,
260
+ variant = "default",
261
+ ...props
262
+ }) {
263
+ return /* @__PURE__ */ jsx(
264
+ DropdownMenuPrimitive.Item,
265
+ {
266
+ "data-slot": "dropdown-menu-item",
267
+ "data-inset": inset,
268
+ "data-variant": variant,
269
+ className: cn(
270
+ "font-medium gap-2 rounded-xl px-2 py-2 text-sm data-[inset]:pl-8 [&_svg:not([class*='size-'])]:size-5 focus:font-semibold relative flex cursor-default items-center outline-hidden transition-all select-none focus:bg-primary/10 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",
271
+ className
272
+ ),
273
+ ...props
274
+ }
275
+ );
276
+ }
277
+ function DropdownMenuCheckboxItem({
278
+ className,
279
+ children,
280
+ checked,
281
+ ...props
282
+ }) {
283
+ return /* @__PURE__ */ jsxs(
284
+ DropdownMenuPrimitive.CheckboxItem,
285
+ {
286
+ "data-slot": "dropdown-menu-checkbox-item",
287
+ className: cn(
288
+ "gap-2 py-1.5 pr-2 pl-8 text-sm [&_svg:not([class*='size-'])]:size-4 rounded-xl relative flex cursor-default items-center outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
289
+ className
290
+ ),
291
+ checked,
292
+ ...props,
293
+ children: [
294
+ /* @__PURE__ */ jsx("span", { className: "left-2 size-3.5 pointer-events-none absolute flex items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
295
+ children
296
+ ]
297
+ }
298
+ );
299
+ }
300
+ function DropdownMenuRadioGroup({
301
+ ...props
302
+ }) {
303
+ return /* @__PURE__ */ jsx(
304
+ DropdownMenuPrimitive.RadioGroup,
305
+ {
306
+ "data-slot": "dropdown-menu-radio-group",
307
+ ...props
308
+ }
309
+ );
310
+ }
311
+ function DropdownMenuRadioItem({
312
+ className,
313
+ children,
314
+ ...props
315
+ }) {
316
+ return /* @__PURE__ */ jsxs(
317
+ DropdownMenuPrimitive.RadioItem,
318
+ {
319
+ "data-slot": "dropdown-menu-radio-item",
320
+ className: cn(
321
+ "gap-2 py-1.5 pr-2 pl-8 text-sm [&_svg:not([class*='size-'])]:size-4 rounded-xl relative flex cursor-default items-center outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
322
+ className
323
+ ),
324
+ ...props,
325
+ children: [
326
+ /* @__PURE__ */ jsx("span", { className: "left-2 size-3.5 pointer-events-none absolute flex items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
327
+ children
328
+ ]
329
+ }
330
+ );
331
+ }
332
+ function DropdownMenuLabel({
333
+ className,
334
+ inset,
335
+ ...props
336
+ }) {
337
+ return /* @__PURE__ */ jsx(
338
+ DropdownMenuPrimitive.Label,
339
+ {
340
+ "data-slot": "dropdown-menu-label",
341
+ "data-inset": inset,
342
+ className: cn(
343
+ "px-2 py-2 text-xs font-medium tracking-wider data-[inset]:pl-8 text-muted-foreground uppercase",
344
+ className
345
+ ),
346
+ ...props
347
+ }
348
+ );
349
+ }
350
+ function DropdownMenuSeparator({
351
+ className,
352
+ ...props
353
+ }) {
354
+ return /* @__PURE__ */ jsx(
355
+ DropdownMenuPrimitive.Separator,
356
+ {
357
+ "data-slot": "dropdown-menu-separator",
358
+ className: cn("-mx-1 my-1 h-px bg-border", className),
359
+ ...props
360
+ }
361
+ );
362
+ }
363
+ function DropdownMenuShortcut({
364
+ className,
365
+ ...props
366
+ }) {
367
+ return /* @__PURE__ */ jsx(
368
+ "span",
369
+ {
370
+ "data-slot": "dropdown-menu-shortcut",
371
+ className: cn(
372
+ "text-xs tracking-widest ml-auto text-muted-foreground",
373
+ className
374
+ ),
375
+ ...props
376
+ }
377
+ );
378
+ }
379
+ function DropdownMenuSub({
380
+ ...props
381
+ }) {
382
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
383
+ }
384
+ function DropdownMenuSubTrigger({
385
+ className,
386
+ inset,
387
+ children,
388
+ ...props
389
+ }) {
390
+ return /* @__PURE__ */ jsxs(
391
+ DropdownMenuPrimitive.SubTrigger,
392
+ {
393
+ "data-slot": "dropdown-menu-sub-trigger",
394
+ "data-inset": inset,
395
+ className: cn(
396
+ "font-medium rounded-xl px-2 py-2 text-sm data-[inset]:pl-8 focus:font-semibold data-[state=open]:font-semibold flex cursor-default items-center outline-hidden transition-all select-none focus:bg-primary/10 focus:text-primary data-[state=open]:bg-primary/10 data-[state=open]:text-primary",
397
+ className
398
+ ),
399
+ ...props,
400
+ children: [
401
+ children,
402
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-4 ml-auto" })
403
+ ]
404
+ }
405
+ );
406
+ }
407
+ function DropdownMenuSubContent({
408
+ className,
409
+ ...props
410
+ }) {
411
+ return /* @__PURE__ */ jsx(
412
+ DropdownMenuPrimitive.SubContent,
413
+ {
414
+ "data-slot": "dropdown-menu-sub-content",
415
+ className: cn(
416
+ `${menuSurface} 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 p-1.5 z-50 min-w-[8rem] overflow-hidden`,
417
+ className
418
+ ),
419
+ ...props
420
+ }
421
+ );
422
+ }
423
+ function Icon({ iconNode: IconComponent, className }) {
424
+ if (!IconComponent) {
425
+ return null;
426
+ }
427
+ return /* @__PURE__ */ jsx(IconComponent, { className });
428
+ }
429
+ function Separator2({
430
+ className,
431
+ orientation = "horizontal",
432
+ decorative = true,
433
+ ...props
434
+ }) {
435
+ return /* @__PURE__ */ jsx(
436
+ SeparatorPrimitive.Root,
437
+ {
438
+ "data-slot": "separator-root",
439
+ decorative,
440
+ orientation,
441
+ className: cn(
442
+ "shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
443
+ className
444
+ ),
445
+ ...props
446
+ }
447
+ );
448
+ }
449
+ function Sheet({
450
+ preserveScroll = false,
451
+ onOpenChange: onOpenChangeProp,
452
+ ...props
453
+ }) {
454
+ const scrollPosition = React2.useRef(0);
455
+ const onOpenChange = (open) => {
456
+ if (preserveScroll) {
457
+ if (open) {
458
+ scrollPosition.current = window.scrollY;
459
+ } else {
460
+ setTimeout(() => {
461
+ window.scrollTo(0, scrollPosition.current);
462
+ }, 0);
463
+ }
464
+ }
465
+ onOpenChangeProp?.(open);
466
+ };
467
+ return /* @__PURE__ */ jsx(
468
+ SheetPrimitive.Root,
469
+ {
470
+ "data-slot": "sheet",
471
+ ...props,
472
+ onOpenChange
473
+ }
474
+ );
475
+ }
476
+ function SheetTrigger({
477
+ ...props
478
+ }) {
479
+ return /* @__PURE__ */ jsx(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
480
+ }
481
+ function SheetClose({
482
+ ...props
483
+ }) {
484
+ return /* @__PURE__ */ jsx(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
485
+ }
486
+ function SheetPortal({
487
+ ...props
488
+ }) {
489
+ return /* @__PURE__ */ jsx(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
490
+ }
491
+ function SheetOverlay({
492
+ className,
493
+ ...props
494
+ }) {
495
+ return /* @__PURE__ */ jsx(
496
+ SheetPrimitive.Overlay,
497
+ {
498
+ "data-slot": "sheet-overlay",
499
+ className: cn(
500
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 inset-0 bg-black/60 backdrop-blur-sm fixed z-50",
501
+ className
502
+ ),
503
+ ...props
504
+ }
505
+ );
506
+ }
507
+ function SheetContent({
508
+ className,
509
+ children,
510
+ side = "right",
511
+ ...props
512
+ }) {
513
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
514
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
515
+ /* @__PURE__ */ jsxs(
516
+ SheetPrimitive.Content,
517
+ {
518
+ "data-slot": "sheet-content",
519
+ className: cn(
520
+ `${floatingSurface} data-[state=open]:animate-in data-[state=closed]:animate-out gap-4 ease-in-out fixed z-50 flex flex-col transition data-[state=closed]:duration-300 data-[state=open]:duration-500`,
521
+ side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 sm:max-w-sm rounded-l-3xl h-full w-3/4 border-l border-border",
522
+ side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 sm:max-w-sm rounded-r-3xl h-full w-3/4 border-r border-border",
523
+ side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 rounded-b-3xl h-auto border-b border-border",
524
+ side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 rounded-t-3xl h-auto border-t border-border",
525
+ className
526
+ ),
527
+ ...props,
528
+ children: [
529
+ children,
530
+ /* @__PURE__ */ jsxs(
531
+ SheetPrimitive.Close,
532
+ {
533
+ className: cn(
534
+ "top-4 right-4 size-9 shadow-xs absolute flex items-center justify-center rounded-full border border-border bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none",
535
+ focusRing
536
+ ),
537
+ children: [
538
+ /* @__PURE__ */ jsx(XIcon, { className: "size-4" }),
539
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
540
+ ]
541
+ }
542
+ )
543
+ ]
544
+ }
545
+ )
546
+ ] });
547
+ }
548
+ function SheetHeader({ className, ...props }) {
549
+ return /* @__PURE__ */ jsx(
550
+ "div",
551
+ {
552
+ "data-slot": "sheet-header",
553
+ className: cn("gap-1.5 p-4 flex flex-col", className),
554
+ ...props
555
+ }
556
+ );
557
+ }
558
+ function SheetFooter({ className, ...props }) {
559
+ return /* @__PURE__ */ jsx(
560
+ "div",
561
+ {
562
+ "data-slot": "sheet-footer",
563
+ className: cn("gap-2 p-4 mt-auto flex flex-col", className),
564
+ ...props
565
+ }
566
+ );
567
+ }
568
+ function SheetTitle({
569
+ className,
570
+ ...props
571
+ }) {
572
+ return /* @__PURE__ */ jsx(
573
+ SheetPrimitive.Title,
574
+ {
575
+ "data-slot": "sheet-title",
576
+ className: cn("font-semibold text-foreground", className),
577
+ ...props
578
+ }
579
+ );
580
+ }
581
+ function SheetDescription({
582
+ className,
583
+ ...props
584
+ }) {
585
+ return /* @__PURE__ */ jsx(
586
+ SheetPrimitive.Description,
587
+ {
588
+ "data-slot": "sheet-description",
589
+ className: cn("text-sm text-muted-foreground", className),
590
+ ...props
591
+ }
592
+ );
593
+ }
594
+ function Skeleton({ className, ...props }) {
595
+ return /* @__PURE__ */ jsx(
596
+ "div",
597
+ {
598
+ "data-slot": "skeleton",
599
+ className: cn("animate-pulse rounded-xl bg-muted", className),
600
+ ...props
601
+ }
602
+ );
603
+ }
604
+ function TooltipProvider({
605
+ delayDuration = 0,
606
+ ...props
607
+ }) {
608
+ return /* @__PURE__ */ jsx(
609
+ TooltipPrimitive.Provider,
610
+ {
611
+ "data-slot": "tooltip-provider",
612
+ delayDuration,
613
+ ...props
614
+ }
615
+ );
616
+ }
617
+ function Tooltip({
618
+ ...props
619
+ }) {
620
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
621
+ }
622
+ function TooltipTrigger({
623
+ ...props
624
+ }) {
625
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
626
+ }
627
+ function TooltipContent({
628
+ className,
629
+ sideOffset = 4,
630
+ children,
631
+ ...props
632
+ }) {
633
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
634
+ TooltipPrimitive.Content,
635
+ {
636
+ "data-slot": "tooltip-content",
637
+ sideOffset,
638
+ className: cn(
639
+ "animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-w-sm px-3 py-1.5 text-xs shadow-2xl rounded-xl z-50 bg-primary text-primary-foreground",
640
+ className
641
+ ),
642
+ ...props,
643
+ children: [
644
+ children,
645
+ /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "size-2.5 z-50 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary" })
646
+ ]
647
+ }
648
+ ) });
649
+ }
650
+ var MOBILE_BREAKPOINT = 768;
651
+ function useIsMobile() {
652
+ const [isMobile, setIsMobile] = useState();
653
+ useEffect(() => {
654
+ const mql = window.matchMedia(
655
+ `(max-width: ${MOBILE_BREAKPOINT - 1}px)`
656
+ );
657
+ const onChange = () => {
658
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
659
+ };
660
+ mql.addEventListener("change", onChange);
661
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
662
+ return () => mql.removeEventListener("change", onChange);
663
+ }, []);
664
+ return !!isMobile;
665
+ }
666
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
667
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
668
+ var SIDEBAR_WIDTH = "16rem";
669
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
670
+ var SIDEBAR_WIDTH_ICON = "3rem";
671
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
672
+ var SidebarContext = React2.createContext(null);
673
+ function useSidebar() {
674
+ const context = React2.useContext(SidebarContext);
675
+ if (!context) {
676
+ throw new Error("useSidebar must be used within a SidebarProvider.");
677
+ }
678
+ return context;
679
+ }
680
+ function SidebarProvider({
681
+ defaultOpen = true,
682
+ open: openProp,
683
+ onOpenChange: setOpenProp,
684
+ className,
685
+ style,
686
+ children,
687
+ ...props
688
+ }) {
689
+ const isMobile = useIsMobile();
690
+ const [openMobile, setOpenMobile] = React2.useState(false);
691
+ const [_open, _setOpen] = React2.useState(defaultOpen);
692
+ const open = openProp ?? _open;
693
+ const setOpen = React2.useCallback(
694
+ (value) => {
695
+ const openState = typeof value === "function" ? value(open) : value;
696
+ if (setOpenProp) {
697
+ setOpenProp(openState);
698
+ } else {
699
+ _setOpen(openState);
700
+ }
701
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
702
+ },
703
+ [setOpenProp, open]
704
+ );
705
+ const toggleSidebar = React2.useCallback(() => {
706
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
707
+ }, [isMobile, setOpen, setOpenMobile]);
708
+ React2.useEffect(() => {
709
+ const handleKeyDown = (event) => {
710
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
711
+ event.preventDefault();
712
+ toggleSidebar();
713
+ }
714
+ };
715
+ window.addEventListener("keydown", handleKeyDown);
716
+ return () => window.removeEventListener("keydown", handleKeyDown);
717
+ }, [toggleSidebar]);
718
+ const state = open ? "expanded" : "collapsed";
719
+ const contextValue = React2.useMemo(
720
+ () => ({
721
+ state,
722
+ open,
723
+ setOpen,
724
+ isMobile,
725
+ openMobile,
726
+ setOpenMobile,
727
+ toggleSidebar
728
+ }),
729
+ [
730
+ state,
731
+ open,
732
+ setOpen,
733
+ isMobile,
734
+ openMobile,
735
+ setOpenMobile,
736
+ toggleSidebar
737
+ ]
738
+ );
739
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
740
+ "div",
741
+ {
742
+ "data-slot": "sidebar-wrapper",
743
+ style: {
744
+ "--sidebar-width": SIDEBAR_WIDTH,
745
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
746
+ ...style
747
+ },
748
+ className: cn(
749
+ "group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",
750
+ className
751
+ ),
752
+ ...props,
753
+ children
754
+ }
755
+ ) }) });
756
+ }
757
+ function Sidebar({
758
+ side = "left",
759
+ variant = "sidebar",
760
+ collapsible = "offcanvas",
761
+ className,
762
+ children,
763
+ ...props
764
+ }) {
765
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
766
+ if (collapsible === "none") {
767
+ return /* @__PURE__ */ jsx(
768
+ "div",
769
+ {
770
+ "data-slot": "sidebar",
771
+ className: cn(
772
+ "flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",
773
+ className
774
+ ),
775
+ ...props,
776
+ children
777
+ }
778
+ );
779
+ }
780
+ if (isMobile) {
781
+ return /* @__PURE__ */ jsxs(
782
+ Sheet,
783
+ {
784
+ open: openMobile,
785
+ onOpenChange: setOpenMobile,
786
+ ...props,
787
+ preserveScroll: true,
788
+ children: [
789
+ /* @__PURE__ */ jsxs(SheetHeader, { className: "sr-only", children: [
790
+ /* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }),
791
+ /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })
792
+ ] }),
793
+ /* @__PURE__ */ jsx(
794
+ SheetContent,
795
+ {
796
+ "data-sidebar": "sidebar",
797
+ "data-slot": "sidebar",
798
+ "data-mobile": "true",
799
+ className: "p-0 w-(--sidebar-width) bg-sidebar text-sidebar-foreground [&>button]:hidden",
800
+ style: {
801
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
802
+ },
803
+ side,
804
+ children: /* @__PURE__ */ jsx("div", { className: "flex h-full w-full flex-col", children })
805
+ }
806
+ )
807
+ ]
808
+ }
809
+ );
810
+ }
811
+ return /* @__PURE__ */ jsxs(
812
+ "div",
813
+ {
814
+ className: "group peer md:block hidden text-sidebar-foreground",
815
+ "data-state": state,
816
+ "data-collapsible": state === "collapsed" ? collapsible : "",
817
+ "data-variant": variant,
818
+ "data-side": side,
819
+ "data-slot": "sidebar",
820
+ children: [
821
+ /* @__PURE__ */ jsx(
822
+ "div",
823
+ {
824
+ className: cn(
825
+ "relative h-svh w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
826
+ "group-data-[collapsible=offcanvas]:w-0",
827
+ "group-data-[side=right]:rotate-180",
828
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
829
+ )
830
+ }
831
+ ),
832
+ /* @__PURE__ */ jsx(
833
+ "div",
834
+ {
835
+ className: cn(
836
+ "inset-y-0 md:flex fixed z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear",
837
+ side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
838
+ // Adjust the padding for floating and inset variants.
839
+ 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",
840
+ className
841
+ ),
842
+ ...props,
843
+ children: /* @__PURE__ */ jsx(
844
+ "div",
845
+ {
846
+ "data-sidebar": "sidebar",
847
+ className: "group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:rounded-2xl flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border",
848
+ children
849
+ }
850
+ )
851
+ }
852
+ )
853
+ ]
854
+ }
855
+ );
856
+ }
857
+ function SidebarTrigger({
858
+ className,
859
+ onClick,
860
+ ...props
861
+ }) {
862
+ const { toggleSidebar } = useSidebar();
863
+ return /* @__PURE__ */ jsxs(
864
+ Button,
865
+ {
866
+ "data-sidebar": "trigger",
867
+ "data-slot": "sidebar-trigger",
868
+ variant: "ghost",
869
+ size: "icon",
870
+ className: cn("h-7 w-7", className),
871
+ onClick: (event) => {
872
+ onClick?.(event);
873
+ toggleSidebar();
874
+ },
875
+ ...props,
876
+ children: [
877
+ /* @__PURE__ */ jsx(PanelLeftIcon, {}),
878
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
879
+ ]
880
+ }
881
+ );
882
+ }
883
+ function SidebarRail({ className, ...props }) {
884
+ const { toggleSidebar } = useSidebar();
885
+ return /* @__PURE__ */ jsx(
886
+ "button",
887
+ {
888
+ "data-sidebar": "rail",
889
+ "data-slot": "sidebar-rail",
890
+ "aria-label": "Toggle Sidebar",
891
+ tabIndex: -1,
892
+ onClick: toggleSidebar,
893
+ title: "Toggle Sidebar",
894
+ className: cn(
895
+ "inset-y-0 w-4 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:inset-y-0 sm:flex absolute z-20 hidden -translate-x-1/2 transition-all ease-linear after:absolute after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border",
896
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
897
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
898
+ "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar",
899
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
900
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
901
+ className
902
+ ),
903
+ ...props
904
+ }
905
+ );
906
+ }
907
+ function SidebarInset({ className, ...props }) {
908
+ return /* @__PURE__ */ jsx(
909
+ "main",
910
+ {
911
+ "data-slot": "sidebar-inset",
912
+ className: cn(
913
+ "relative flex min-h-svh max-w-full flex-1 flex-col bg-background",
914
+ "peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))] 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-0",
915
+ className
916
+ ),
917
+ ...props
918
+ }
919
+ );
920
+ }
921
+ function SidebarInput({
922
+ className,
923
+ ...props
924
+ }) {
925
+ return /* @__PURE__ */ jsx(
926
+ Input,
927
+ {
928
+ "data-slot": "sidebar-input",
929
+ "data-sidebar": "input",
930
+ className: cn("h-11 w-full bg-background shadow-none", className),
931
+ ...props
932
+ }
933
+ );
934
+ }
935
+ function SidebarHeader({ className, ...props }) {
936
+ return /* @__PURE__ */ jsx(
937
+ "div",
938
+ {
939
+ "data-slot": "sidebar-header",
940
+ "data-sidebar": "header",
941
+ className: cn("gap-2 p-2 flex flex-col", className),
942
+ ...props
943
+ }
944
+ );
945
+ }
946
+ function SidebarFooter({ className, ...props }) {
947
+ return /* @__PURE__ */ jsx(
948
+ "div",
949
+ {
950
+ "data-slot": "sidebar-footer",
951
+ "data-sidebar": "footer",
952
+ className: cn("gap-2 p-2 flex flex-col", className),
953
+ ...props
954
+ }
955
+ );
956
+ }
957
+ function SidebarSeparator({
958
+ className,
959
+ ...props
960
+ }) {
961
+ return /* @__PURE__ */ jsx(
962
+ Separator2,
963
+ {
964
+ "data-slot": "sidebar-separator",
965
+ "data-sidebar": "separator",
966
+ className: cn("mx-2 w-auto bg-sidebar-border", className),
967
+ ...props
968
+ }
969
+ );
970
+ }
971
+ function SidebarContent({ className, ...props }) {
972
+ return /* @__PURE__ */ jsx(
973
+ "div",
974
+ {
975
+ "data-slot": "sidebar-content",
976
+ "data-sidebar": "content",
977
+ className: cn(
978
+ "min-h-0 gap-2 flex flex-1 flex-col overflow-auto group-data-[collapsible=icon]:overflow-hidden",
979
+ className
980
+ ),
981
+ ...props
982
+ }
983
+ );
984
+ }
985
+ function SidebarGroup({ className, ...props }) {
986
+ return /* @__PURE__ */ jsx(
987
+ "div",
988
+ {
989
+ "data-slot": "sidebar-group",
990
+ "data-sidebar": "group",
991
+ className: cn(
992
+ "min-w-0 p-2 relative flex w-full flex-col",
993
+ className
994
+ ),
995
+ ...props
996
+ }
997
+ );
998
+ }
999
+ function SidebarGroupLabel({
1000
+ className,
1001
+ asChild = false,
1002
+ ...props
1003
+ }) {
1004
+ const Comp = asChild ? Slot : "div";
1005
+ return /* @__PURE__ */ jsx(
1006
+ Comp,
1007
+ {
1008
+ "data-slot": "sidebar-group-label",
1009
+ "data-sidebar": "group-label",
1010
+ className: cn(
1011
+ "h-8 rounded-xl px-2 text-xs font-medium tracking-wider [&>svg]:size-4 flex shrink-0 items-center text-sidebar-foreground/70 uppercase ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:shrink-0",
1012
+ "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:opacity-0 group-data-[collapsible=icon]:select-none",
1013
+ className
1014
+ ),
1015
+ ...props
1016
+ }
1017
+ );
1018
+ }
1019
+ function SidebarGroupAction({
1020
+ className,
1021
+ asChild = false,
1022
+ ...props
1023
+ }) {
1024
+ const Comp = asChild ? Slot : "button";
1025
+ return /* @__PURE__ */ jsx(
1026
+ Comp,
1027
+ {
1028
+ "data-slot": "sidebar-group-action",
1029
+ "data-sidebar": "group-action",
1030
+ className: cn(
1031
+ "top-3.5 right-3 w-5 p-0 [&>svg]:size-4 rounded-xl absolute flex aspect-square items-center justify-center text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:shrink-0",
1032
+ // Increases the hit area of the button on mobile.
1033
+ "after:-inset-2 md:after:hidden after:absolute",
1034
+ "group-data-[collapsible=icon]:hidden",
1035
+ className
1036
+ ),
1037
+ ...props
1038
+ }
1039
+ );
1040
+ }
1041
+ function SidebarGroupContent({
1042
+ className,
1043
+ ...props
1044
+ }) {
1045
+ return /* @__PURE__ */ jsx(
1046
+ "div",
1047
+ {
1048
+ "data-slot": "sidebar-group-content",
1049
+ "data-sidebar": "group-content",
1050
+ className: cn("text-sm w-full", className),
1051
+ ...props
1052
+ }
1053
+ );
1054
+ }
1055
+ function SidebarMenu({ className, ...props }) {
1056
+ return /* @__PURE__ */ jsx(
1057
+ "ul",
1058
+ {
1059
+ "data-slot": "sidebar-menu",
1060
+ "data-sidebar": "menu",
1061
+ className: cn("min-w-0 gap-1 flex w-full flex-col", className),
1062
+ ...props
1063
+ }
1064
+ );
1065
+ }
1066
+ function SidebarMenuItem({ className, ...props }) {
1067
+ return /* @__PURE__ */ jsx(
1068
+ "li",
1069
+ {
1070
+ "data-slot": "sidebar-menu-item",
1071
+ "data-sidebar": "menu-item",
1072
+ className: cn("group/menu-item relative", className),
1073
+ ...props
1074
+ }
1075
+ );
1076
+ }
1077
+ var sidebarMenuButtonVariants = cva(
1078
+ "peer/menu-button flex w-full items-center gap-3 overflow-hidden rounded-xl p-2.5 text-left text-sm font-medium outline-hidden ring-sidebar-ring transition-all hover:bg-accent hover:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-primary/10 data-[active=true]:font-semibold data-[active=true]:text-primary group-data-[collapsible=icon]:size-10! group-data-[collapsible=icon]:p-3! [&>span:last-child]:truncate [&>svg]:size-5 [&>svg]:shrink-0",
1079
+ {
1080
+ variants: {
1081
+ variant: {
1082
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
1083
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
1084
+ },
1085
+ size: {
1086
+ default: "h-11 text-sm",
1087
+ sm: "h-9 text-sm",
1088
+ lg: "h-14 text-sm group-data-[collapsible=icon]:p-0!"
1089
+ }
1090
+ },
1091
+ defaultVariants: {
1092
+ variant: "default",
1093
+ size: "default"
1094
+ }
1095
+ }
1096
+ );
1097
+ function SidebarMenuButton({
1098
+ asChild = false,
1099
+ isActive = false,
1100
+ variant = "default",
1101
+ size = "default",
1102
+ tooltip,
1103
+ className,
1104
+ ...props
1105
+ }) {
1106
+ const Comp = asChild ? Slot : "button";
1107
+ const { isMobile, state } = useSidebar();
1108
+ const button = /* @__PURE__ */ jsx(
1109
+ Comp,
1110
+ {
1111
+ "data-slot": "sidebar-menu-button",
1112
+ "data-sidebar": "menu-button",
1113
+ "data-size": size,
1114
+ "data-active": isActive,
1115
+ className: cn(
1116
+ sidebarMenuButtonVariants({ variant, size }),
1117
+ className
1118
+ ),
1119
+ ...props
1120
+ }
1121
+ );
1122
+ if (!tooltip) {
1123
+ return button;
1124
+ }
1125
+ if (typeof tooltip === "string") {
1126
+ tooltip = {
1127
+ children: tooltip
1128
+ };
1129
+ }
1130
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [
1131
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
1132
+ /* @__PURE__ */ jsx(
1133
+ TooltipContent,
1134
+ {
1135
+ side: "right",
1136
+ align: "center",
1137
+ hidden: state !== "collapsed" || isMobile,
1138
+ ...tooltip
1139
+ }
1140
+ )
1141
+ ] });
1142
+ }
1143
+ function SidebarMenuAction({
1144
+ className,
1145
+ asChild = false,
1146
+ showOnHover = false,
1147
+ ...props
1148
+ }) {
1149
+ const Comp = asChild ? Slot : "button";
1150
+ return /* @__PURE__ */ jsx(
1151
+ Comp,
1152
+ {
1153
+ "data-slot": "sidebar-menu-action",
1154
+ "data-sidebar": "menu-action",
1155
+ className: cn(
1156
+ "top-1.5 right-1 w-5 p-0 [&>svg]:size-4 rounded-xl absolute flex aspect-square items-center justify-center text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:shrink-0",
1157
+ // Increases the hit area of the button on mobile.
1158
+ "after:-inset-2 md:after:hidden after:absolute",
1159
+ "peer-data-[size=sm]/menu-button:top-1",
1160
+ "peer-data-[size=default]/menu-button:top-1.5",
1161
+ "peer-data-[size=lg]/menu-button:top-2.5",
1162
+ "group-data-[collapsible=icon]:hidden",
1163
+ showOnHover && "md:opacity-0 group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100",
1164
+ className
1165
+ ),
1166
+ ...props
1167
+ }
1168
+ );
1169
+ }
1170
+ function SidebarMenuBadge({
1171
+ className,
1172
+ ...props
1173
+ }) {
1174
+ return /* @__PURE__ */ jsx(
1175
+ "div",
1176
+ {
1177
+ "data-slot": "sidebar-menu-badge",
1178
+ "data-sidebar": "menu-badge",
1179
+ className: cn(
1180
+ "right-1 h-5 min-w-5 px-1 text-xs font-medium rounded-xl pointer-events-none absolute flex items-center justify-center text-sidebar-foreground tabular-nums select-none",
1181
+ "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
1182
+ "peer-data-[size=sm]/menu-button:top-1",
1183
+ "peer-data-[size=default]/menu-button:top-1.5",
1184
+ "peer-data-[size=lg]/menu-button:top-2.5",
1185
+ "group-data-[collapsible=icon]:hidden",
1186
+ className
1187
+ ),
1188
+ ...props
1189
+ }
1190
+ );
1191
+ }
1192
+ function SidebarMenuSkeleton({
1193
+ className,
1194
+ showIcon = false,
1195
+ ...props
1196
+ }) {
1197
+ const width = React2.useMemo(() => {
1198
+ return `${Math.floor(Math.random() * 40) + 50}%`;
1199
+ }, []);
1200
+ return /* @__PURE__ */ jsxs(
1201
+ "div",
1202
+ {
1203
+ "data-slot": "sidebar-menu-skeleton",
1204
+ "data-sidebar": "menu-skeleton",
1205
+ className: cn(
1206
+ "h-8 gap-2 px-2 rounded-xl flex items-center",
1207
+ className
1208
+ ),
1209
+ ...props,
1210
+ children: [
1211
+ showIcon && /* @__PURE__ */ jsx(
1212
+ Skeleton,
1213
+ {
1214
+ className: "size-4 rounded-xl",
1215
+ "data-sidebar": "menu-skeleton-icon"
1216
+ }
1217
+ ),
1218
+ /* @__PURE__ */ jsx(
1219
+ Skeleton,
1220
+ {
1221
+ className: "h-4 max-w-(--skeleton-width) flex-1",
1222
+ "data-sidebar": "menu-skeleton-text",
1223
+ style: {
1224
+ "--skeleton-width": width
1225
+ }
1226
+ }
1227
+ )
1228
+ ]
1229
+ }
1230
+ );
1231
+ }
1232
+ function SidebarMenuSub({ className, ...props }) {
1233
+ return /* @__PURE__ */ jsx(
1234
+ "ul",
1235
+ {
1236
+ "data-slot": "sidebar-menu-sub",
1237
+ "data-sidebar": "menu-sub",
1238
+ className: cn(
1239
+ "mx-3.5 min-w-0 gap-1 px-2.5 py-0.5 flex translate-x-px flex-col border-l border-sidebar-border",
1240
+ "group-data-[collapsible=icon]:hidden",
1241
+ className
1242
+ ),
1243
+ ...props
1244
+ }
1245
+ );
1246
+ }
1247
+ function SidebarMenuSubItem({
1248
+ className,
1249
+ ...props
1250
+ }) {
1251
+ return /* @__PURE__ */ jsx(
1252
+ "li",
1253
+ {
1254
+ "data-slot": "sidebar-menu-sub-item",
1255
+ "data-sidebar": "menu-sub-item",
1256
+ className: cn("group/menu-sub-item relative", className),
1257
+ ...props
1258
+ }
1259
+ );
1260
+ }
1261
+ function SidebarMenuSubButton({
1262
+ asChild = false,
1263
+ size = "md",
1264
+ isActive = false,
1265
+ className,
1266
+ ...props
1267
+ }) {
1268
+ const Comp = asChild ? Slot : "a";
1269
+ return /* @__PURE__ */ jsx(
1270
+ Comp,
1271
+ {
1272
+ "data-slot": "sidebar-menu-sub-button",
1273
+ "data-sidebar": "menu-sub-button",
1274
+ "data-size": size,
1275
+ "data-active": isActive,
1276
+ className: cn(
1277
+ "h-9 min-w-0 gap-2 px-2 text-sm font-medium [&>svg]:size-4 rounded-xl flex -translate-x-px items-center overflow-hidden text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-accent hover:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 active:bg-accent disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0 [&>svg]:text-current",
1278
+ "data-[active=true]:font-semibold data-[active=true]:bg-primary/10 data-[active=true]:text-primary",
1279
+ size === "sm" && "h-9 text-sm",
1280
+ size === "md" && "h-9 text-sm",
1281
+ "group-data-[collapsible=icon]:hidden",
1282
+ className
1283
+ ),
1284
+ ...props
1285
+ }
1286
+ );
1287
+ }
1288
+
1289
+ export { Avatar, AvatarFallback, AvatarImage, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Icon, Separator2 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, useIsMobile, useSidebar };
1290
+ //# sourceMappingURL=chunk-5MQWJVM2.js.map
1291
+ //# sourceMappingURL=chunk-5MQWJVM2.js.map