@cuxt/chama 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,7 +1,135 @@
1
- import { Button as Button$1 } from "@base-ui/react/button";
2
- import { cva } from "class-variance-authority";
1
+ import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
3
2
  import { cn } from "cn";
4
- import { jsx } from "react/jsx-runtime";
3
+ import { ArrowDownIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleCheckIcon, InfoIcon, Loader2Icon, MinusIcon, MoreHorizontalIcon, OctagonXIcon, PanelLeftIcon, SearchIcon, TriangleAlertIcon, XIcon } from "lucide-react";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import * as React from "react";
6
+ import { useMemo } from "react";
7
+ import { cva } from "class-variance-authority";
8
+ import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
9
+ import { Button as Button$1 } from "@base-ui/react/button";
10
+ import { mergeProps } from "@base-ui/react/merge-props";
11
+ import { useRender } from "@base-ui/react/use-render";
12
+ import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
13
+ import { Separator as Separator$1 } from "@base-ui/react/separator";
14
+ import { DayPicker, getDefaultClassNames } from "react-day-picker";
15
+ import useEmblaCarousel from "embla-carousel-react";
16
+ import * as RechartsPrimitive from "recharts";
17
+ import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
18
+ import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
19
+ import { Combobox as Combobox$1 } from "@base-ui/react";
20
+ import { Input as Input$1 } from "@base-ui/react/input";
21
+ import { Command as Command$1 } from "cmdk";
22
+ import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
23
+ import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
24
+ import { DirectionProvider, useDirection } from "@base-ui/react/direction-provider";
25
+ import { Drawer as Drawer$1 } from "@base-ui/react/drawer";
26
+ import { Menu } from "@base-ui/react/menu";
27
+ import { PreviewCard } from "@base-ui/react/preview-card";
28
+ import { OTPInput, OTPInputContext } from "input-otp";
29
+ import { Menubar as Menubar$1 } from "@base-ui/react/menubar";
30
+ import { MessageScroller as MessageScroller$1, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from "@shadcn/react/message-scroller";
31
+ import { NavigationMenu as NavigationMenu$1 } from "@base-ui/react/navigation-menu";
32
+ import { Popover as Popover$1 } from "@base-ui/react/popover";
33
+ import { Progress as Progress$1 } from "@base-ui/react/progress";
34
+ import { Questionnaire as Questionnaire$1 } from "@shadcn/react/questionnaire";
35
+ import { Radio } from "@base-ui/react/radio";
36
+ import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
37
+ import * as ResizablePrimitive from "react-resizable-panels";
38
+ import { ScrollArea as ScrollArea$1 } from "@base-ui/react/scroll-area";
39
+ import { Select as Select$1 } from "@base-ui/react/select";
40
+ import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
41
+ import { Slider as Slider$1 } from "@base-ui/react/slider";
42
+ import { Switch as Switch$1 } from "@base-ui/react/switch";
43
+ import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
44
+ import { Toast as Toast$1 } from "@base-ui/react/toast";
45
+ import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
46
+ import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
47
+ //#region src/components/ui/accordion.tsx
48
+ function Accordion({ className, ...props }) {
49
+ return /* @__PURE__ */ jsx(Accordion$1.Root, {
50
+ "data-slot": "accordion",
51
+ className: cn("flex w-full flex-col", className),
52
+ ...props
53
+ });
54
+ }
55
+ function AccordionItem({ className, ...props }) {
56
+ return /* @__PURE__ */ jsx(Accordion$1.Item, {
57
+ "data-slot": "accordion-item",
58
+ className: cn("not-last:border-b", className),
59
+ ...props
60
+ });
61
+ }
62
+ function AccordionTrigger({ className, children, ...props }) {
63
+ return /* @__PURE__ */ jsx(Accordion$1.Header, {
64
+ className: "flex",
65
+ children: /* @__PURE__ */ jsxs(Accordion$1.Trigger, {
66
+ "data-slot": "accordion-trigger",
67
+ className: cn("group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className),
68
+ ...props,
69
+ children: [
70
+ children,
71
+ /* @__PURE__ */ jsx(ChevronDownIcon, {
72
+ "data-slot": "accordion-trigger-icon",
73
+ className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
74
+ }),
75
+ /* @__PURE__ */ jsx(ChevronUpIcon, {
76
+ "data-slot": "accordion-trigger-icon",
77
+ className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
78
+ })
79
+ ]
80
+ })
81
+ });
82
+ }
83
+ function AccordionContent({ className, children, ...props }) {
84
+ return /* @__PURE__ */ jsx(Accordion$1.Panel, {
85
+ "data-slot": "accordion-content",
86
+ className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
87
+ ...props,
88
+ children: /* @__PURE__ */ jsx("div", {
89
+ className: cn("h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
90
+ children
91
+ })
92
+ });
93
+ }
94
+ //#endregion
95
+ //#region src/components/ui/alert.tsx
96
+ const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
97
+ variants: { variant: {
98
+ default: "bg-card text-card-foreground",
99
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
100
+ } },
101
+ defaultVariants: { variant: "default" }
102
+ });
103
+ function Alert({ className, variant, ...props }) {
104
+ return /* @__PURE__ */ jsx("div", {
105
+ "data-slot": "alert",
106
+ role: "alert",
107
+ className: cn(alertVariants({ variant }), className),
108
+ ...props
109
+ });
110
+ }
111
+ function AlertTitle({ className, ...props }) {
112
+ return /* @__PURE__ */ jsx("div", {
113
+ "data-slot": "alert-title",
114
+ className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
115
+ ...props
116
+ });
117
+ }
118
+ function AlertDescription({ className, ...props }) {
119
+ return /* @__PURE__ */ jsx("div", {
120
+ "data-slot": "alert-description",
121
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
122
+ ...props
123
+ });
124
+ }
125
+ function AlertAction({ className, ...props }) {
126
+ return /* @__PURE__ */ jsx("div", {
127
+ "data-slot": "alert-action",
128
+ className: cn("absolute top-2 right-2", className),
129
+ ...props
130
+ });
131
+ }
132
+ //#endregion
5
133
  //#region src/components/ui/button.tsx
6
134
  const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
135
  variants: {
@@ -41,4 +169,3755 @@ function Button({ className, variant = "default", size = "default", ...props })
41
169
  });
42
170
  }
43
171
  //#endregion
44
- export { Button, buttonVariants };
172
+ //#region src/components/ui/alert-dialog.tsx
173
+ function AlertDialog({ ...props }) {
174
+ return /* @__PURE__ */ jsx(AlertDialog$1.Root, {
175
+ "data-slot": "alert-dialog",
176
+ ...props
177
+ });
178
+ }
179
+ function AlertDialogTrigger({ ...props }) {
180
+ return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, {
181
+ "data-slot": "alert-dialog-trigger",
182
+ ...props
183
+ });
184
+ }
185
+ function AlertDialogPortal({ ...props }) {
186
+ return /* @__PURE__ */ jsx(AlertDialog$1.Portal, {
187
+ "data-slot": "alert-dialog-portal",
188
+ ...props
189
+ });
190
+ }
191
+ function AlertDialogOverlay({ className, ...props }) {
192
+ return /* @__PURE__ */ jsx(AlertDialog$1.Backdrop, {
193
+ "data-slot": "alert-dialog-overlay",
194
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
195
+ ...props
196
+ });
197
+ }
198
+ function AlertDialogContent({ className, size = "default", ...props }) {
199
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog$1.Popup, {
200
+ "data-slot": "alert-dialog-content",
201
+ "data-size": size,
202
+ className: cn("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
203
+ ...props
204
+ })] });
205
+ }
206
+ function AlertDialogHeader({ className, ...props }) {
207
+ return /* @__PURE__ */ jsx("div", {
208
+ "data-slot": "alert-dialog-header",
209
+ 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-4 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),
210
+ ...props
211
+ });
212
+ }
213
+ function AlertDialogFooter({ className, ...props }) {
214
+ return /* @__PURE__ */ jsx("div", {
215
+ "data-slot": "alert-dialog-footer",
216
+ className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", className),
217
+ ...props
218
+ });
219
+ }
220
+ function AlertDialogMedia({ className, ...props }) {
221
+ return /* @__PURE__ */ jsx("div", {
222
+ "data-slot": "alert-dialog-media",
223
+ className: cn("mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6", className),
224
+ ...props
225
+ });
226
+ }
227
+ function AlertDialogTitle({ className, ...props }) {
228
+ return /* @__PURE__ */ jsx(AlertDialog$1.Title, {
229
+ "data-slot": "alert-dialog-title",
230
+ className: cn("font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
231
+ ...props
232
+ });
233
+ }
234
+ function AlertDialogDescription({ className, ...props }) {
235
+ return /* @__PURE__ */ jsx(AlertDialog$1.Description, {
236
+ "data-slot": "alert-dialog-description",
237
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
238
+ ...props
239
+ });
240
+ }
241
+ function AlertDialogAction({ className, ...props }) {
242
+ return /* @__PURE__ */ jsx(Button, {
243
+ "data-slot": "alert-dialog-action",
244
+ className: cn(className),
245
+ ...props
246
+ });
247
+ }
248
+ function AlertDialogCancel({ className, variant = "outline", size = "default", ...props }) {
249
+ return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
250
+ "data-slot": "alert-dialog-cancel",
251
+ className: cn(className),
252
+ render: /* @__PURE__ */ jsx(Button, {
253
+ variant,
254
+ size
255
+ }),
256
+ ...props
257
+ });
258
+ }
259
+ //#endregion
260
+ //#region src/components/ui/aspect-ratio.tsx
261
+ function AspectRatio({ ratio, className, ...props }) {
262
+ return /* @__PURE__ */ jsx("div", {
263
+ "data-slot": "aspect-ratio",
264
+ style: { "--ratio": ratio },
265
+ className: cn("relative aspect-(--ratio)", className),
266
+ ...props
267
+ });
268
+ }
269
+ //#endregion
270
+ //#region src/components/ui/attachment.tsx
271
+ const attachmentVariants = cva("group/attachment relative flex w-fit max-w-full min-w-0 shrink-0 flex-wrap rounded-xl border bg-card text-card-foreground transition-colors focus-within:ring-1 focus-within:ring-ring/50 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed", { variants: {
272
+ size: {
273
+ default: "gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2",
274
+ sm: "gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5",
275
+ xs: "gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1"
276
+ },
277
+ orientation: {
278
+ horizontal: "min-w-40 items-center",
279
+ vertical: "w-24 flex-col has-data-[slot=attachment-content]:w-30"
280
+ }
281
+ } });
282
+ function Attachment({ className, state = "done", size = "default", orientation = "horizontal", ...props }) {
283
+ return /* @__PURE__ */ jsx("div", {
284
+ "data-slot": "attachment",
285
+ "data-state": state,
286
+ "data-size": size,
287
+ "data-orientation": orientation,
288
+ className: cn(attachmentVariants({
289
+ size,
290
+ orientation
291
+ }), className),
292
+ ...props
293
+ });
294
+ }
295
+ const attachmentMediaVariants = cva("relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5", {
296
+ variants: { variant: {
297
+ icon: "",
298
+ image: "opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover"
299
+ } },
300
+ defaultVariants: { variant: "icon" }
301
+ });
302
+ function AttachmentMedia({ className, variant = "icon", ...props }) {
303
+ return /* @__PURE__ */ jsx("div", {
304
+ "data-slot": "attachment-media",
305
+ "data-variant": variant,
306
+ className: cn(attachmentMediaVariants({ variant }), className),
307
+ ...props
308
+ });
309
+ }
310
+ function AttachmentContent({ className, ...props }) {
311
+ return /* @__PURE__ */ jsx("div", {
312
+ "data-slot": "attachment-content",
313
+ className: cn("max-w-full min-w-0 flex-1 leading-tight group-data-[orientation=vertical]/attachment:px-1", className),
314
+ ...props
315
+ });
316
+ }
317
+ function AttachmentTitle({ className, ...props }) {
318
+ return /* @__PURE__ */ jsx("span", {
319
+ "data-slot": "attachment-title",
320
+ className: cn("block max-w-full min-w-0 truncate font-medium group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer", className),
321
+ ...props
322
+ });
323
+ }
324
+ function AttachmentDescription({ className, ...props }) {
325
+ return /* @__PURE__ */ jsx("span", {
326
+ "data-slot": "attachment-description",
327
+ className: cn("mt-0.5 block min-w-0 truncate text-xs text-muted-foreground group-data-[state=error]/attachment:text-destructive/80", "max-w-full", className),
328
+ ...props
329
+ });
330
+ }
331
+ function AttachmentActions({ className, ...props }) {
332
+ return /* @__PURE__ */ jsx("div", {
333
+ "data-slot": "attachment-actions",
334
+ className: cn("relative z-20 flex shrink-0 items-center group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:right-3 group-data-[orientation=vertical]/attachment:gap-1", className),
335
+ ...props
336
+ });
337
+ }
338
+ function AttachmentAction({ className, variant, size = "icon-xs", ...props }) {
339
+ return /* @__PURE__ */ jsx(Button, {
340
+ "data-slot": "attachment-action",
341
+ variant: variant ?? "ghost",
342
+ size,
343
+ className: cn(className),
344
+ ...props
345
+ });
346
+ }
347
+ function AttachmentTrigger({ className, render, type, ...props }) {
348
+ return useRender({
349
+ defaultTagName: "button",
350
+ props: mergeProps({
351
+ type: render ? type : type ?? "button",
352
+ className: cn("absolute inset-0 z-10 outline-none", className)
353
+ }, props),
354
+ render,
355
+ state: { slot: "attachment-trigger" }
356
+ });
357
+ }
358
+ function AttachmentGroup({ className, ...props }) {
359
+ return /* @__PURE__ */ jsx("div", {
360
+ "data-slot": "attachment-group",
361
+ className: cn("flex min-w-0 scroll-fade-x snap-x snap-mandatory scroll-px-1 scrollbar-none gap-3 overflow-x-auto overscroll-x-contain py-1 *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start", className),
362
+ ...props
363
+ });
364
+ }
365
+ //#endregion
366
+ //#region src/components/ui/avatar.tsx
367
+ function Avatar({ className, size = "default", ...props }) {
368
+ return /* @__PURE__ */ jsx(Avatar$1.Root, {
369
+ "data-slot": "avatar",
370
+ "data-size": size,
371
+ className: cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten", className),
372
+ ...props
373
+ });
374
+ }
375
+ function AvatarImage({ className, ...props }) {
376
+ return /* @__PURE__ */ jsx(Avatar$1.Image, {
377
+ "data-slot": "avatar-image",
378
+ className: cn("aspect-square size-full rounded-full object-cover", className),
379
+ ...props
380
+ });
381
+ }
382
+ function AvatarFallback({ className, ...props }) {
383
+ return /* @__PURE__ */ jsx(Avatar$1.Fallback, {
384
+ "data-slot": "avatar-fallback",
385
+ className: cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", className),
386
+ ...props
387
+ });
388
+ }
389
+ function AvatarBadge({ className, ...props }) {
390
+ return /* @__PURE__ */ jsx("span", {
391
+ "data-slot": "avatar-badge",
392
+ className: cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", className),
393
+ ...props
394
+ });
395
+ }
396
+ function AvatarGroup({ className, ...props }) {
397
+ return /* @__PURE__ */ jsx("div", {
398
+ "data-slot": "avatar-group",
399
+ className: cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className),
400
+ ...props
401
+ });
402
+ }
403
+ function AvatarGroupCount({ className, ...props }) {
404
+ return /* @__PURE__ */ jsx("div", {
405
+ "data-slot": "avatar-group-count",
406
+ className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className),
407
+ ...props
408
+ });
409
+ }
410
+ //#endregion
411
+ //#region src/components/ui/badge.tsx
412
+ const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
413
+ variants: { variant: {
414
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
415
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
416
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
417
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
418
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
419
+ link: "text-primary underline-offset-4 hover:underline"
420
+ } },
421
+ defaultVariants: { variant: "default" }
422
+ });
423
+ function Badge({ className, variant = "default", render, ...props }) {
424
+ return useRender({
425
+ defaultTagName: "span",
426
+ props: mergeProps({ className: cn(badgeVariants({ variant }), className) }, props),
427
+ render,
428
+ state: {
429
+ slot: "badge",
430
+ variant
431
+ }
432
+ });
433
+ }
434
+ //#endregion
435
+ //#region src/components/ui/breadcrumb.tsx
436
+ function Breadcrumb({ className, ...props }) {
437
+ return /* @__PURE__ */ jsx("nav", {
438
+ "aria-label": "breadcrumb",
439
+ "data-slot": "breadcrumb",
440
+ className: cn(className),
441
+ ...props
442
+ });
443
+ }
444
+ function BreadcrumbList({ className, ...props }) {
445
+ return /* @__PURE__ */ jsx("ol", {
446
+ "data-slot": "breadcrumb-list",
447
+ className: cn("flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground", className),
448
+ ...props
449
+ });
450
+ }
451
+ function BreadcrumbItem({ className, ...props }) {
452
+ return /* @__PURE__ */ jsx("li", {
453
+ "data-slot": "breadcrumb-item",
454
+ className: cn("inline-flex items-center gap-1", className),
455
+ ...props
456
+ });
457
+ }
458
+ function BreadcrumbLink({ className, render, ...props }) {
459
+ return useRender({
460
+ defaultTagName: "a",
461
+ props: mergeProps({ className: cn("transition-colors hover:text-foreground", className) }, props),
462
+ render,
463
+ state: { slot: "breadcrumb-link" }
464
+ });
465
+ }
466
+ function BreadcrumbPage({ className, ...props }) {
467
+ return /* @__PURE__ */ jsx("span", {
468
+ "data-slot": "breadcrumb-page",
469
+ role: "link",
470
+ "aria-disabled": "true",
471
+ "aria-current": "page",
472
+ className: cn("font-normal text-foreground", className),
473
+ ...props
474
+ });
475
+ }
476
+ function BreadcrumbSeparator({ children, className, ...props }) {
477
+ return /* @__PURE__ */ jsx("li", {
478
+ "data-slot": "breadcrumb-separator",
479
+ role: "presentation",
480
+ "aria-hidden": "true",
481
+ className: cn("[&>svg]:size-3.5", className),
482
+ ...props,
483
+ children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, {})
484
+ });
485
+ }
486
+ function BreadcrumbEllipsis({ className, ...props }) {
487
+ return /* @__PURE__ */ jsxs("span", {
488
+ "data-slot": "breadcrumb-ellipsis",
489
+ role: "presentation",
490
+ "aria-hidden": "true",
491
+ className: cn("flex size-5 items-center justify-center [&>svg]:size-4", className),
492
+ ...props,
493
+ children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, {}), /* @__PURE__ */ jsx("span", {
494
+ className: "sr-only",
495
+ children: "More"
496
+ })]
497
+ });
498
+ }
499
+ //#endregion
500
+ //#region src/components/ui/bubble.tsx
501
+ function BubbleGroup({ className, ...props }) {
502
+ return /* @__PURE__ */ jsx("div", {
503
+ "data-slot": "bubble-group",
504
+ className: cn("flex min-w-0 flex-col gap-2", className),
505
+ ...props
506
+ });
507
+ }
508
+ const bubbleVariants = cva("group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full", {
509
+ variants: { variant: {
510
+ default: "*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80",
511
+ secondary: "*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",
512
+ muted: "*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]",
513
+ tinted: "*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]",
514
+ outline: "*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30",
515
+ ghost: "border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50",
516
+ destructive: "*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30"
517
+ } },
518
+ defaultVariants: { variant: "default" }
519
+ });
520
+ function Bubble({ variant = "default", align = "start", className, ...props }) {
521
+ return /* @__PURE__ */ jsx("div", {
522
+ "data-slot": "bubble",
523
+ "data-variant": variant,
524
+ "data-align": align,
525
+ className: cn(bubbleVariants({ variant }), className),
526
+ ...props
527
+ });
528
+ }
529
+ function BubbleContent({ className, render, ...props }) {
530
+ return useRender({
531
+ defaultTagName: "div",
532
+ props: mergeProps({ className: cn("w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50", className) }, props),
533
+ render,
534
+ state: { slot: "bubble-content" }
535
+ });
536
+ }
537
+ const bubbleReactionsVariants = cva("absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0", {
538
+ variants: {
539
+ side: {
540
+ top: "top-0 -translate-y-3/4",
541
+ bottom: "bottom-0 translate-y-3/4"
542
+ },
543
+ align: {
544
+ start: "left-3",
545
+ end: "right-3"
546
+ }
547
+ },
548
+ defaultVariants: {
549
+ side: "bottom",
550
+ align: "end"
551
+ }
552
+ });
553
+ function BubbleReactions({ side = "bottom", align = "end", className, ...props }) {
554
+ return /* @__PURE__ */ jsx("div", {
555
+ "data-slot": "bubble-reactions",
556
+ "data-align": align,
557
+ "data-side": side,
558
+ className: cn(bubbleReactionsVariants({
559
+ side,
560
+ align
561
+ }), className),
562
+ ...props
563
+ });
564
+ }
565
+ //#endregion
566
+ //#region src/components/ui/separator.tsx
567
+ function Separator({ className, orientation = "horizontal", ...props }) {
568
+ return /* @__PURE__ */ jsx(Separator$1, {
569
+ "data-slot": "separator",
570
+ orientation,
571
+ className: cn("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", className),
572
+ ...props
573
+ });
574
+ }
575
+ //#endregion
576
+ //#region src/components/ui/button-group.tsx
577
+ const buttonGroupVariants = cva("flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1", {
578
+ variants: { orientation: {
579
+ horizontal: "*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
580
+ vertical: "flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0"
581
+ } },
582
+ defaultVariants: { orientation: "horizontal" }
583
+ });
584
+ function ButtonGroup({ className, orientation, ...props }) {
585
+ return /* @__PURE__ */ jsx("div", {
586
+ role: "group",
587
+ "data-slot": "button-group",
588
+ "data-orientation": orientation,
589
+ className: cn(buttonGroupVariants({ orientation }), className),
590
+ ...props
591
+ });
592
+ }
593
+ function ButtonGroupText({ className, render, ...props }) {
594
+ return useRender({
595
+ defaultTagName: "div",
596
+ props: mergeProps({ className: cn("flex items-center gap-2 rounded-lg border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className) }, props),
597
+ render,
598
+ state: { slot: "button-group-text" }
599
+ });
600
+ }
601
+ function ButtonGroupSeparator({ className, orientation = "vertical", ...props }) {
602
+ return /* @__PURE__ */ jsx(Separator, {
603
+ "data-slot": "button-group-separator",
604
+ orientation,
605
+ className: cn("relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto", className),
606
+ ...props
607
+ });
608
+ }
609
+ //#endregion
610
+ //#region src/components/ui/calendar.tsx
611
+ function Calendar({ className, classNames, showOutsideDays = true, captionLayout = "label", buttonVariant = "ghost", locale, formatters, components, ...props }) {
612
+ const defaultClassNames = getDefaultClassNames();
613
+ return /* @__PURE__ */ jsx(DayPicker, {
614
+ showOutsideDays,
615
+ className: cn("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
616
+ captionLayout,
617
+ locale,
618
+ formatters: {
619
+ formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
620
+ ...formatters
621
+ },
622
+ classNames: {
623
+ root: cn("w-fit", defaultClassNames.root),
624
+ months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
625
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
626
+ nav: cn("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1", defaultClassNames.nav),
627
+ button_previous: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_previous),
628
+ button_next: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_next),
629
+ month_caption: cn("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)", defaultClassNames.month_caption),
630
+ dropdowns: cn("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium", defaultClassNames.dropdowns),
631
+ dropdown_root: cn("relative rounded-(--cell-radius)", defaultClassNames.dropdown_root),
632
+ dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
633
+ caption_label: cn("font-medium select-none", captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground", defaultClassNames.caption_label),
634
+ month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
635
+ weekdays: cn("flex", defaultClassNames.weekdays),
636
+ weekday: cn("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none", defaultClassNames.weekday),
637
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
638
+ week_number_header: cn("w-(--cell-size) select-none", defaultClassNames.week_number_header),
639
+ week_number: cn("text-[0.8rem] text-muted-foreground select-none", defaultClassNames.week_number),
640
+ day: cn("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)", props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)", defaultClassNames.day),
641
+ range_start: cn("relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted", defaultClassNames.range_start),
642
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
643
+ range_end: cn("relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted", defaultClassNames.range_end),
644
+ today: cn("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none", defaultClassNames.today),
645
+ outside: cn("text-muted-foreground aria-selected:text-muted-foreground", defaultClassNames.outside),
646
+ disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
647
+ hidden: cn("invisible", defaultClassNames.hidden),
648
+ ...classNames
649
+ },
650
+ components: {
651
+ Root: ({ className, rootRef, ...props }) => {
652
+ return /* @__PURE__ */ jsx("div", {
653
+ "data-slot": "calendar",
654
+ ref: rootRef,
655
+ className: cn(className),
656
+ ...props
657
+ });
658
+ },
659
+ Chevron: ({ className, orientation, ...props }) => {
660
+ if (orientation === "left") return /* @__PURE__ */ jsx(ChevronLeftIcon, {
661
+ className: cn("size-4", className),
662
+ ...props
663
+ });
664
+ if (orientation === "right") return /* @__PURE__ */ jsx(ChevronRightIcon, {
665
+ className: cn("size-4", className),
666
+ ...props
667
+ });
668
+ return /* @__PURE__ */ jsx(ChevronDownIcon, {
669
+ className: cn("size-4", className),
670
+ ...props
671
+ });
672
+ },
673
+ DayButton: ({ ...props }) => /* @__PURE__ */ jsx(CalendarDayButton, {
674
+ locale,
675
+ ...props
676
+ }),
677
+ WeekNumber: ({ children, ...props }) => {
678
+ return /* @__PURE__ */ jsx("td", {
679
+ ...props,
680
+ children: /* @__PURE__ */ jsx("div", {
681
+ className: "flex size-(--cell-size) items-center justify-center text-center",
682
+ children
683
+ })
684
+ });
685
+ },
686
+ ...components
687
+ },
688
+ ...props
689
+ });
690
+ }
691
+ function CalendarDayButton({ className, day, modifiers, locale, ...props }) {
692
+ const defaultClassNames = getDefaultClassNames();
693
+ const ref = React.useRef(null);
694
+ React.useEffect(() => {
695
+ if (modifiers.focused) ref.current?.focus();
696
+ }, [modifiers.focused]);
697
+ return /* @__PURE__ */ jsx(Button, {
698
+ variant: "ghost",
699
+ size: "icon",
700
+ "data-day": day.date.toLocaleDateString(locale?.code),
701
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
702
+ "data-range-start": modifiers.range_start,
703
+ "data-range-end": modifiers.range_end,
704
+ "data-range-middle": modifiers.range_middle,
705
+ className: cn("relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70", defaultClassNames.day, className),
706
+ ...props
707
+ });
708
+ }
709
+ //#endregion
710
+ //#region src/components/ui/card.tsx
711
+ function Card({ className, size = "default", ...props }) {
712
+ return /* @__PURE__ */ jsx("div", {
713
+ "data-slot": "card",
714
+ "data-size": size,
715
+ className: cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", className),
716
+ ...props
717
+ });
718
+ }
719
+ function CardHeader({ className, ...props }) {
720
+ return /* @__PURE__ */ jsx("div", {
721
+ "data-slot": "card-header",
722
+ className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)", className),
723
+ ...props
724
+ });
725
+ }
726
+ function CardTitle({ className, ...props }) {
727
+ return /* @__PURE__ */ jsx("div", {
728
+ "data-slot": "card-title",
729
+ className: cn("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", className),
730
+ ...props
731
+ });
732
+ }
733
+ function CardDescription({ className, ...props }) {
734
+ return /* @__PURE__ */ jsx("div", {
735
+ "data-slot": "card-description",
736
+ className: cn("text-sm text-muted-foreground", className),
737
+ ...props
738
+ });
739
+ }
740
+ function CardAction({ className, ...props }) {
741
+ return /* @__PURE__ */ jsx("div", {
742
+ "data-slot": "card-action",
743
+ className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
744
+ ...props
745
+ });
746
+ }
747
+ function CardContent({ className, ...props }) {
748
+ return /* @__PURE__ */ jsx("div", {
749
+ "data-slot": "card-content",
750
+ className: cn("px-(--card-spacing)", className),
751
+ ...props
752
+ });
753
+ }
754
+ function CardFooter({ className, ...props }) {
755
+ return /* @__PURE__ */ jsx("div", {
756
+ "data-slot": "card-footer",
757
+ className: cn("flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)", className),
758
+ ...props
759
+ });
760
+ }
761
+ //#endregion
762
+ //#region src/components/ui/carousel.tsx
763
+ const CarouselContext = React.createContext(null);
764
+ function useCarousel() {
765
+ const context = React.useContext(CarouselContext);
766
+ if (!context) throw new Error("useCarousel must be used within a <Carousel />");
767
+ return context;
768
+ }
769
+ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }) {
770
+ const [carouselRef, api] = useEmblaCarousel({
771
+ ...opts,
772
+ axis: orientation === "horizontal" ? "x" : "y"
773
+ }, plugins);
774
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
775
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
776
+ const onSelect = React.useCallback((api) => {
777
+ if (!api) return;
778
+ setCanScrollPrev(api.canScrollPrev());
779
+ setCanScrollNext(api.canScrollNext());
780
+ }, []);
781
+ const scrollPrev = React.useCallback(() => {
782
+ api?.scrollPrev();
783
+ }, [api]);
784
+ const scrollNext = React.useCallback(() => {
785
+ api?.scrollNext();
786
+ }, [api]);
787
+ const handleKeyDown = React.useCallback((event) => {
788
+ if (event.key === "ArrowLeft") {
789
+ event.preventDefault();
790
+ scrollPrev();
791
+ } else if (event.key === "ArrowRight") {
792
+ event.preventDefault();
793
+ scrollNext();
794
+ }
795
+ }, [scrollPrev, scrollNext]);
796
+ React.useEffect(() => {
797
+ if (!api || !setApi) return;
798
+ setApi(api);
799
+ }, [api, setApi]);
800
+ React.useEffect(() => {
801
+ if (!api) return;
802
+ onSelect(api);
803
+ api.on("reInit", onSelect);
804
+ api.on("select", onSelect);
805
+ return () => {
806
+ api?.off("select", onSelect);
807
+ };
808
+ }, [api, onSelect]);
809
+ return /* @__PURE__ */ jsx(CarouselContext.Provider, {
810
+ value: {
811
+ carouselRef,
812
+ api,
813
+ opts,
814
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
815
+ scrollPrev,
816
+ scrollNext,
817
+ canScrollPrev,
818
+ canScrollNext
819
+ },
820
+ children: /* @__PURE__ */ jsx("div", {
821
+ onKeyDownCapture: handleKeyDown,
822
+ className: cn("relative", className),
823
+ role: "region",
824
+ "aria-roledescription": "carousel",
825
+ "data-slot": "carousel",
826
+ ...props,
827
+ children
828
+ })
829
+ });
830
+ }
831
+ function CarouselContent({ className, ...props }) {
832
+ const { carouselRef, orientation } = useCarousel();
833
+ return /* @__PURE__ */ jsx("div", {
834
+ ref: carouselRef,
835
+ className: "overflow-hidden",
836
+ "data-slot": "carousel-content",
837
+ children: /* @__PURE__ */ jsx("div", {
838
+ className: cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className),
839
+ ...props
840
+ })
841
+ });
842
+ }
843
+ function CarouselItem({ className, ...props }) {
844
+ const { orientation } = useCarousel();
845
+ return /* @__PURE__ */ jsx("div", {
846
+ role: "group",
847
+ "aria-roledescription": "slide",
848
+ "data-slot": "carousel-item",
849
+ className: cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "pl-4" : "pt-4", className),
850
+ ...props
851
+ });
852
+ }
853
+ function CarouselPrevious({ className, variant = "outline", size = "icon-sm", ...props }) {
854
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
855
+ return /* @__PURE__ */ jsxs(Button, {
856
+ "data-slot": "carousel-previous",
857
+ variant,
858
+ size,
859
+ className: cn("absolute touch-manipulation rounded-full", orientation === "horizontal" ? "inset-y-0 -left-12 my-auto" : "-top-12 left-1/2 -translate-x-1/2 rotate-90", className),
860
+ disabled: !canScrollPrev,
861
+ onClick: scrollPrev,
862
+ ...props,
863
+ children: [/* @__PURE__ */ jsx(ChevronLeftIcon, {}), /* @__PURE__ */ jsx("span", {
864
+ className: "sr-only",
865
+ children: "Previous slide"
866
+ })]
867
+ });
868
+ }
869
+ function CarouselNext({ className, variant = "outline", size = "icon-sm", ...props }) {
870
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
871
+ return /* @__PURE__ */ jsxs(Button, {
872
+ "data-slot": "carousel-next",
873
+ variant,
874
+ size,
875
+ className: cn("absolute touch-manipulation rounded-full", orientation === "horizontal" ? "inset-y-0 -right-12 my-auto" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", className),
876
+ disabled: !canScrollNext,
877
+ onClick: scrollNext,
878
+ ...props,
879
+ children: [/* @__PURE__ */ jsx(ChevronRightIcon, {}), /* @__PURE__ */ jsx("span", {
880
+ className: "sr-only",
881
+ children: "Next slide"
882
+ })]
883
+ });
884
+ }
885
+ //#endregion
886
+ //#region src/components/ui/chart.tsx
887
+ const THEMES = {
888
+ light: "",
889
+ dark: ".dark"
890
+ };
891
+ const INITIAL_DIMENSION = {
892
+ width: 320,
893
+ height: 200
894
+ };
895
+ const ChartContext = React.createContext(null);
896
+ function useChart() {
897
+ const context = React.useContext(ChartContext);
898
+ if (!context) throw new Error("useChart must be used within a <ChartContainer />");
899
+ return context;
900
+ }
901
+ function ChartContainer({ id, className, children, config, initialDimension = INITIAL_DIMENSION, ...props }) {
902
+ const uniqueId = React.useId();
903
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
904
+ return /* @__PURE__ */ jsx(ChartContext.Provider, {
905
+ value: { config },
906
+ children: /* @__PURE__ */ jsxs("div", {
907
+ "data-slot": "chart",
908
+ "data-chart": chartId,
909
+ className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
910
+ ...props,
911
+ children: [/* @__PURE__ */ jsx(ChartStyle, {
912
+ id: chartId,
913
+ config
914
+ }), /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, {
915
+ initialDimension,
916
+ children
917
+ })]
918
+ })
919
+ });
920
+ }
921
+ const ChartStyle = ({ id, config }) => {
922
+ const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);
923
+ if (!colorConfig.length) return null;
924
+ return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: Object.entries(THEMES).map(([theme, prefix]) => `
925
+ ${prefix} [data-chart=${id}] {
926
+ ${colorConfig.map(([key, itemConfig]) => {
927
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
928
+ return color ? ` --color-${key}: ${color};` : null;
929
+ }).join("\n")}
930
+ }
931
+ `).join("\n") } });
932
+ };
933
+ const ChartTooltip = RechartsPrimitive.Tooltip;
934
+ function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey }) {
935
+ const { config } = useChart();
936
+ const tooltipLabel = React.useMemo(() => {
937
+ if (hideLabel || !payload?.length) return null;
938
+ const [item] = payload;
939
+ const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
940
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
941
+ const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
942
+ if (labelFormatter) return /* @__PURE__ */ jsx("div", {
943
+ className: cn("font-medium", labelClassName),
944
+ children: labelFormatter(value, payload)
945
+ });
946
+ if (!value) return null;
947
+ return /* @__PURE__ */ jsx("div", {
948
+ className: cn("font-medium", labelClassName),
949
+ children: value
950
+ });
951
+ }, [
952
+ label,
953
+ labelFormatter,
954
+ payload,
955
+ hideLabel,
956
+ labelClassName,
957
+ config,
958
+ labelKey
959
+ ]);
960
+ if (!active || !payload?.length) return null;
961
+ const nestLabel = payload.length === 1 && indicator !== "dot";
962
+ return /* @__PURE__ */ jsxs("div", {
963
+ className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl", className),
964
+ children: [!nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("div", {
965
+ className: "grid gap-1.5",
966
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
967
+ const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
968
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
969
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
970
+ return /* @__PURE__ */ jsx("div", {
971
+ className: cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", indicator === "dot" && "items-center"),
972
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx("div", {
973
+ className: cn("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)", {
974
+ "h-2.5 w-2.5": indicator === "dot",
975
+ "w-1": indicator === "line",
976
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
977
+ "my-0.5": nestLabel && indicator === "dashed"
978
+ }),
979
+ style: {
980
+ "--color-bg": indicatorColor,
981
+ "--color-border": indicatorColor
982
+ }
983
+ }), /* @__PURE__ */ jsxs("div", {
984
+ className: cn("flex flex-1 justify-between leading-none", nestLabel ? "items-end" : "items-center"),
985
+ children: [/* @__PURE__ */ jsxs("div", {
986
+ className: "grid gap-1.5",
987
+ children: [nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("span", {
988
+ className: "text-muted-foreground",
989
+ children: itemConfig?.label ?? item.name
990
+ })]
991
+ }), item.value != null && /* @__PURE__ */ jsx("span", {
992
+ className: "font-mono font-medium text-foreground tabular-nums",
993
+ children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value)
994
+ })]
995
+ })] })
996
+ }, index);
997
+ })
998
+ })]
999
+ });
1000
+ }
1001
+ const ChartLegend = RechartsPrimitive.Legend;
1002
+ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }) {
1003
+ const { config } = useChart();
1004
+ if (!payload?.length) return null;
1005
+ return /* @__PURE__ */ jsx("div", {
1006
+ className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className),
1007
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
1008
+ const key = `${nameKey ?? item.dataKey ?? "value"}`;
1009
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1010
+ return /* @__PURE__ */ jsxs("div", {
1011
+ className: cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),
1012
+ children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx("div", {
1013
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
1014
+ style: { backgroundColor: item.color }
1015
+ }), itemConfig?.label]
1016
+ }, index);
1017
+ })
1018
+ });
1019
+ }
1020
+ function getPayloadConfigFromPayload(config, payload, key) {
1021
+ if (typeof payload !== "object" || payload === null) return;
1022
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
1023
+ let configLabelKey = key;
1024
+ if (key in payload && typeof payload[key] === "string") configLabelKey = payload[key];
1025
+ else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") configLabelKey = payloadPayload[key];
1026
+ return configLabelKey in config ? config[configLabelKey] : config[key];
1027
+ }
1028
+ //#endregion
1029
+ //#region src/components/ui/checkbox.tsx
1030
+ function Checkbox({ className, ...props }) {
1031
+ return /* @__PURE__ */ jsx(Checkbox$1.Root, {
1032
+ "data-slot": "checkbox",
1033
+ className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary", className),
1034
+ ...props,
1035
+ children: /* @__PURE__ */ jsx(Checkbox$1.Indicator, {
1036
+ "data-slot": "checkbox-indicator",
1037
+ className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
1038
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
1039
+ })
1040
+ });
1041
+ }
1042
+ //#endregion
1043
+ //#region src/components/ui/collapsible.tsx
1044
+ function Collapsible({ ...props }) {
1045
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, {
1046
+ "data-slot": "collapsible",
1047
+ ...props
1048
+ });
1049
+ }
1050
+ function CollapsibleTrigger({ ...props }) {
1051
+ return /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
1052
+ "data-slot": "collapsible-trigger",
1053
+ ...props
1054
+ });
1055
+ }
1056
+ function CollapsibleContent({ ...props }) {
1057
+ return /* @__PURE__ */ jsx(Collapsible$1.Panel, {
1058
+ "data-slot": "collapsible-content",
1059
+ ...props
1060
+ });
1061
+ }
1062
+ //#endregion
1063
+ //#region src/components/ui/input.tsx
1064
+ function Input({ className, type, ...props }) {
1065
+ return /* @__PURE__ */ jsx(Input$1, {
1066
+ type,
1067
+ "data-slot": "input",
1068
+ className: cn("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
1069
+ ...props
1070
+ });
1071
+ }
1072
+ //#endregion
1073
+ //#region src/components/ui/textarea.tsx
1074
+ function Textarea({ className, ...props }) {
1075
+ return /* @__PURE__ */ jsx("textarea", {
1076
+ "data-slot": "textarea",
1077
+ className: cn("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
1078
+ ...props
1079
+ });
1080
+ }
1081
+ //#endregion
1082
+ //#region src/components/ui/input-group.tsx
1083
+ function InputGroup({ className, ...props }) {
1084
+ return /* @__PURE__ */ jsx("div", {
1085
+ "data-slot": "input-group",
1086
+ role: "group",
1087
+ className: cn("group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", className),
1088
+ ...props
1089
+ });
1090
+ }
1091
+ const inputGroupAddonVariants = cva("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
1092
+ variants: { align: {
1093
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
1094
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
1095
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
1096
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
1097
+ } },
1098
+ defaultVariants: { align: "inline-start" }
1099
+ });
1100
+ function InputGroupAddon({ className, align = "inline-start", ...props }) {
1101
+ return /* @__PURE__ */ jsx("div", {
1102
+ role: "group",
1103
+ "data-slot": "input-group-addon",
1104
+ "data-align": align,
1105
+ className: cn(inputGroupAddonVariants({ align }), className),
1106
+ onClick: (e) => {
1107
+ if (e.target.closest("button")) return;
1108
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
1109
+ },
1110
+ ...props
1111
+ });
1112
+ }
1113
+ const inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-none", {
1114
+ variants: { size: {
1115
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
1116
+ sm: "",
1117
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
1118
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
1119
+ } },
1120
+ defaultVariants: { size: "xs" }
1121
+ });
1122
+ function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
1123
+ return /* @__PURE__ */ jsx(Button, {
1124
+ type,
1125
+ "data-size": size,
1126
+ variant,
1127
+ className: cn(inputGroupButtonVariants({ size }), className),
1128
+ ...props
1129
+ });
1130
+ }
1131
+ function InputGroupText({ className, ...props }) {
1132
+ return /* @__PURE__ */ jsx("span", {
1133
+ className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
1134
+ ...props
1135
+ });
1136
+ }
1137
+ function InputGroupInput({ className, ...props }) {
1138
+ return /* @__PURE__ */ jsx(Input, {
1139
+ "data-slot": "input-group-control",
1140
+ className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
1141
+ ...props
1142
+ });
1143
+ }
1144
+ function InputGroupTextarea({ className, ...props }) {
1145
+ return /* @__PURE__ */ jsx(Textarea, {
1146
+ "data-slot": "input-group-control",
1147
+ className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
1148
+ ...props
1149
+ });
1150
+ }
1151
+ //#endregion
1152
+ //#region src/components/ui/combobox.tsx
1153
+ const Combobox = Combobox$1.Root;
1154
+ function ComboboxValue({ ...props }) {
1155
+ return /* @__PURE__ */ jsx(Combobox$1.Value, {
1156
+ "data-slot": "combobox-value",
1157
+ ...props
1158
+ });
1159
+ }
1160
+ function ComboboxTrigger({ className, children, ...props }) {
1161
+ return /* @__PURE__ */ jsxs(Combobox$1.Trigger, {
1162
+ "data-slot": "combobox-trigger",
1163
+ className: cn("[&_svg:not([class*='size-'])]:size-4", className),
1164
+ ...props,
1165
+ children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })]
1166
+ });
1167
+ }
1168
+ function ComboboxClear({ className, ...props }) {
1169
+ return /* @__PURE__ */ jsx(Combobox$1.Clear, {
1170
+ "data-slot": "combobox-clear",
1171
+ render: /* @__PURE__ */ jsx(InputGroupButton, {
1172
+ variant: "ghost",
1173
+ size: "icon-xs"
1174
+ }),
1175
+ className: cn(className),
1176
+ ...props,
1177
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
1178
+ });
1179
+ }
1180
+ function ComboboxInput({ className, children, disabled = false, showTrigger = true, showClear = false, ...props }) {
1181
+ return /* @__PURE__ */ jsxs(InputGroup, {
1182
+ className: cn("w-auto", className),
1183
+ children: [
1184
+ /* @__PURE__ */ jsx(Combobox$1.Input, {
1185
+ render: /* @__PURE__ */ jsx(InputGroupInput, { disabled }),
1186
+ ...props
1187
+ }),
1188
+ /* @__PURE__ */ jsxs(InputGroupAddon, {
1189
+ align: "inline-end",
1190
+ children: [showTrigger && /* @__PURE__ */ jsx(InputGroupButton, {
1191
+ size: "icon-xs",
1192
+ variant: "ghost",
1193
+ render: /* @__PURE__ */ jsx(ComboboxTrigger, {}),
1194
+ "data-slot": "input-group-button",
1195
+ className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",
1196
+ disabled
1197
+ }), showClear && /* @__PURE__ */ jsx(ComboboxClear, { disabled })]
1198
+ }),
1199
+ children
1200
+ ]
1201
+ });
1202
+ }
1203
+ function ComboboxContent({ className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props }) {
1204
+ return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(Combobox$1.Positioner, {
1205
+ side,
1206
+ sideOffset,
1207
+ align,
1208
+ alignOffset,
1209
+ anchor,
1210
+ className: "isolate z-50",
1211
+ children: /* @__PURE__ */ jsx(Combobox$1.Popup, {
1212
+ "data-slot": "combobox-content",
1213
+ "data-chips": !!anchor,
1214
+ className: cn("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1215
+ ...props
1216
+ })
1217
+ }) });
1218
+ }
1219
+ function ComboboxList({ className, ...props }) {
1220
+ return /* @__PURE__ */ jsx(Combobox$1.List, {
1221
+ "data-slot": "combobox-list",
1222
+ className: cn("no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0", className),
1223
+ ...props
1224
+ });
1225
+ }
1226
+ function ComboboxItem({ className, children, ...props }) {
1227
+ return /* @__PURE__ */ jsxs(Combobox$1.Item, {
1228
+ "data-slot": "combobox-item",
1229
+ className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1230
+ ...props,
1231
+ children: [children, /* @__PURE__ */ jsx(Combobox$1.ItemIndicator, {
1232
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
1233
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
1234
+ })]
1235
+ });
1236
+ }
1237
+ function ComboboxGroup({ className, ...props }) {
1238
+ return /* @__PURE__ */ jsx(Combobox$1.Group, {
1239
+ "data-slot": "combobox-group",
1240
+ className: cn(className),
1241
+ ...props
1242
+ });
1243
+ }
1244
+ function ComboboxLabel({ className, ...props }) {
1245
+ return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, {
1246
+ "data-slot": "combobox-label",
1247
+ className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
1248
+ ...props
1249
+ });
1250
+ }
1251
+ function ComboboxCollection({ ...props }) {
1252
+ return /* @__PURE__ */ jsx(Combobox$1.Collection, {
1253
+ "data-slot": "combobox-collection",
1254
+ ...props
1255
+ });
1256
+ }
1257
+ function ComboboxEmpty({ className, ...props }) {
1258
+ return /* @__PURE__ */ jsx(Combobox$1.Empty, {
1259
+ "data-slot": "combobox-empty",
1260
+ className: cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex", className),
1261
+ ...props
1262
+ });
1263
+ }
1264
+ function ComboboxSeparator({ className, ...props }) {
1265
+ return /* @__PURE__ */ jsx(Combobox$1.Separator, {
1266
+ "data-slot": "combobox-separator",
1267
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1268
+ ...props
1269
+ });
1270
+ }
1271
+ function ComboboxChips({ className, ...props }) {
1272
+ return /* @__PURE__ */ jsx(Combobox$1.Chips, {
1273
+ "data-slot": "combobox-chips",
1274
+ className: cn("flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40", className),
1275
+ ...props
1276
+ });
1277
+ }
1278
+ function ComboboxChip({ className, children, showRemove = true, ...props }) {
1279
+ return /* @__PURE__ */ jsxs(Combobox$1.Chip, {
1280
+ "data-slot": "combobox-chip",
1281
+ className: cn("flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0", className),
1282
+ ...props,
1283
+ children: [children, showRemove && /* @__PURE__ */ jsx(Combobox$1.ChipRemove, {
1284
+ render: /* @__PURE__ */ jsx(Button, {
1285
+ variant: "ghost",
1286
+ size: "icon-xs"
1287
+ }),
1288
+ className: "-ml-1 opacity-50 hover:opacity-100",
1289
+ "data-slot": "combobox-chip-remove",
1290
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
1291
+ })]
1292
+ });
1293
+ }
1294
+ function ComboboxChipsInput({ className, ...props }) {
1295
+ return /* @__PURE__ */ jsx(Combobox$1.Input, {
1296
+ "data-slot": "combobox-chip-input",
1297
+ className: cn("min-w-16 flex-1 outline-none", className),
1298
+ ...props
1299
+ });
1300
+ }
1301
+ function useComboboxAnchor() {
1302
+ return React.useRef(null);
1303
+ }
1304
+ //#endregion
1305
+ //#region src/components/ui/dialog.tsx
1306
+ function Dialog({ ...props }) {
1307
+ return /* @__PURE__ */ jsx(Dialog$1.Root, {
1308
+ "data-slot": "dialog",
1309
+ ...props
1310
+ });
1311
+ }
1312
+ function DialogTrigger({ ...props }) {
1313
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
1314
+ "data-slot": "dialog-trigger",
1315
+ ...props
1316
+ });
1317
+ }
1318
+ function DialogPortal({ ...props }) {
1319
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, {
1320
+ "data-slot": "dialog-portal",
1321
+ ...props
1322
+ });
1323
+ }
1324
+ function DialogClose({ ...props }) {
1325
+ return /* @__PURE__ */ jsx(Dialog$1.Close, {
1326
+ "data-slot": "dialog-close",
1327
+ ...props
1328
+ });
1329
+ }
1330
+ function DialogOverlay({ className, ...props }) {
1331
+ return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
1332
+ "data-slot": "dialog-overlay",
1333
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
1334
+ ...props
1335
+ });
1336
+ }
1337
+ function DialogContent({ className, children, showCloseButton = true, ...props }) {
1338
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
1339
+ "data-slot": "dialog-content",
1340
+ className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1341
+ ...props,
1342
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
1343
+ "data-slot": "dialog-close",
1344
+ render: /* @__PURE__ */ jsx(Button, {
1345
+ variant: "ghost",
1346
+ className: "absolute top-2 right-2",
1347
+ size: "icon-sm"
1348
+ }),
1349
+ children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
1350
+ className: "sr-only",
1351
+ children: "Close"
1352
+ })]
1353
+ })]
1354
+ })] });
1355
+ }
1356
+ function DialogHeader({ className, ...props }) {
1357
+ return /* @__PURE__ */ jsx("div", {
1358
+ "data-slot": "dialog-header",
1359
+ className: cn("flex flex-col gap-2", className),
1360
+ ...props
1361
+ });
1362
+ }
1363
+ function DialogFooter({ className, showCloseButton = false, children, ...props }) {
1364
+ return /* @__PURE__ */ jsxs("div", {
1365
+ "data-slot": "dialog-footer",
1366
+ className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", className),
1367
+ ...props,
1368
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, {
1369
+ render: /* @__PURE__ */ jsx(Button, { variant: "outline" }),
1370
+ children: "Close"
1371
+ })]
1372
+ });
1373
+ }
1374
+ function DialogTitle({ className, ...props }) {
1375
+ return /* @__PURE__ */ jsx(Dialog$1.Title, {
1376
+ "data-slot": "dialog-title",
1377
+ className: cn("font-heading text-base leading-none font-medium", className),
1378
+ ...props
1379
+ });
1380
+ }
1381
+ function DialogDescription({ className, ...props }) {
1382
+ return /* @__PURE__ */ jsx(Dialog$1.Description, {
1383
+ "data-slot": "dialog-description",
1384
+ className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
1385
+ ...props
1386
+ });
1387
+ }
1388
+ //#endregion
1389
+ //#region src/components/ui/command.tsx
1390
+ function Command({ className, ...props }) {
1391
+ return /* @__PURE__ */ jsx(Command$1, {
1392
+ "data-slot": "command",
1393
+ className: cn("flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground", className),
1394
+ ...props
1395
+ });
1396
+ }
1397
+ function CommandDialog({ title = "Command Palette", description = "Search for a command to run...", children, className, showCloseButton = false, ...props }) {
1398
+ return /* @__PURE__ */ jsxs(Dialog, {
1399
+ ...props,
1400
+ children: [/* @__PURE__ */ jsxs(DialogHeader, {
1401
+ className: "sr-only",
1402
+ children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, { children: description })]
1403
+ }), /* @__PURE__ */ jsx(DialogContent, {
1404
+ className: cn("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0", className),
1405
+ showCloseButton,
1406
+ children
1407
+ })]
1408
+ });
1409
+ }
1410
+ function CommandInput({ className, ...props }) {
1411
+ return /* @__PURE__ */ jsx("div", {
1412
+ "data-slot": "command-input-wrapper",
1413
+ className: "p-1 pb-0",
1414
+ children: /* @__PURE__ */ jsxs(InputGroup, {
1415
+ className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
1416
+ children: [/* @__PURE__ */ jsx(Command$1.Input, {
1417
+ "data-slot": "command-input",
1418
+ className: cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
1419
+ ...props
1420
+ }), /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })]
1421
+ })
1422
+ });
1423
+ }
1424
+ function CommandList({ className, ...props }) {
1425
+ return /* @__PURE__ */ jsx(Command$1.List, {
1426
+ "data-slot": "command-list",
1427
+ className: cn("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none", className),
1428
+ ...props
1429
+ });
1430
+ }
1431
+ function CommandEmpty({ className, ...props }) {
1432
+ return /* @__PURE__ */ jsx(Command$1.Empty, {
1433
+ "data-slot": "command-empty",
1434
+ className: cn("py-6 text-center text-sm", className),
1435
+ ...props
1436
+ });
1437
+ }
1438
+ function CommandGroup({ className, ...props }) {
1439
+ return /* @__PURE__ */ jsx(Command$1.Group, {
1440
+ "data-slot": "command-group",
1441
+ className: cn("overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground", className),
1442
+ ...props
1443
+ });
1444
+ }
1445
+ function CommandSeparator({ className, ...props }) {
1446
+ return /* @__PURE__ */ jsx(Command$1.Separator, {
1447
+ "data-slot": "command-separator",
1448
+ className: cn("-mx-1 h-px bg-border", className),
1449
+ ...props
1450
+ });
1451
+ }
1452
+ function CommandItem({ className, children, ...props }) {
1453
+ return /* @__PURE__ */ jsxs(Command$1.Item, {
1454
+ "data-slot": "command-item",
1455
+ className: cn("group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground", className),
1456
+ ...props,
1457
+ children: [children, /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })]
1458
+ });
1459
+ }
1460
+ function CommandShortcut({ className, ...props }) {
1461
+ return /* @__PURE__ */ jsx("span", {
1462
+ "data-slot": "command-shortcut",
1463
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground", className),
1464
+ ...props
1465
+ });
1466
+ }
1467
+ //#endregion
1468
+ //#region src/components/ui/context-menu.tsx
1469
+ function ContextMenu({ ...props }) {
1470
+ return /* @__PURE__ */ jsx(ContextMenu$1.Root, {
1471
+ "data-slot": "context-menu",
1472
+ ...props
1473
+ });
1474
+ }
1475
+ function ContextMenuPortal({ ...props }) {
1476
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, {
1477
+ "data-slot": "context-menu-portal",
1478
+ ...props
1479
+ });
1480
+ }
1481
+ function ContextMenuTrigger({ className, ...props }) {
1482
+ return /* @__PURE__ */ jsx(ContextMenu$1.Trigger, {
1483
+ "data-slot": "context-menu-trigger",
1484
+ className: cn("select-none", className),
1485
+ ...props
1486
+ });
1487
+ }
1488
+ function ContextMenuContent({ className, align = "start", alignOffset = 4, side = "right", sideOffset = 0, ...props }) {
1489
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, { children: /* @__PURE__ */ jsx(ContextMenu$1.Positioner, {
1490
+ className: "isolate z-50 outline-none",
1491
+ align,
1492
+ alignOffset,
1493
+ side,
1494
+ sideOffset,
1495
+ children: /* @__PURE__ */ jsx(ContextMenu$1.Popup, {
1496
+ "data-slot": "context-menu-content",
1497
+ className: cn("z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1498
+ ...props
1499
+ })
1500
+ }) });
1501
+ }
1502
+ function ContextMenuGroup({ ...props }) {
1503
+ return /* @__PURE__ */ jsx(ContextMenu$1.Group, {
1504
+ "data-slot": "context-menu-group",
1505
+ ...props
1506
+ });
1507
+ }
1508
+ function ContextMenuLabel({ className, inset, ...props }) {
1509
+ return /* @__PURE__ */ jsx(ContextMenu$1.GroupLabel, {
1510
+ "data-slot": "context-menu-label",
1511
+ "data-inset": inset,
1512
+ className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
1513
+ ...props
1514
+ });
1515
+ }
1516
+ function ContextMenuItem({ className, inset, variant = "default", ...props }) {
1517
+ return /* @__PURE__ */ jsx(ContextMenu$1.Item, {
1518
+ "data-slot": "context-menu-item",
1519
+ "data-inset": inset,
1520
+ "data-variant": variant,
1521
+ className: cn("group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 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/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive", className),
1522
+ ...props
1523
+ });
1524
+ }
1525
+ function ContextMenuSub({ ...props }) {
1526
+ return /* @__PURE__ */ jsx(ContextMenu$1.SubmenuRoot, {
1527
+ "data-slot": "context-menu-sub",
1528
+ ...props
1529
+ });
1530
+ }
1531
+ function ContextMenuSubTrigger({ className, inset, children, ...props }) {
1532
+ return /* @__PURE__ */ jsxs(ContextMenu$1.SubmenuTrigger, {
1533
+ "data-slot": "context-menu-sub-trigger",
1534
+ "data-inset": inset,
1535
+ className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1536
+ ...props,
1537
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
1538
+ });
1539
+ }
1540
+ function ContextMenuSubContent({ ...props }) {
1541
+ return /* @__PURE__ */ jsx(ContextMenuContent, {
1542
+ "data-slot": "context-menu-sub-content",
1543
+ className: "shadow-lg",
1544
+ side: "right",
1545
+ ...props
1546
+ });
1547
+ }
1548
+ function ContextMenuCheckboxItem({ className, children, checked, inset, ...props }) {
1549
+ return /* @__PURE__ */ jsxs(ContextMenu$1.CheckboxItem, {
1550
+ "data-slot": "context-menu-checkbox-item",
1551
+ "data-inset": inset,
1552
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1553
+ checked,
1554
+ ...props,
1555
+ children: [/* @__PURE__ */ jsx("span", {
1556
+ className: "pointer-events-none absolute right-2",
1557
+ children: /* @__PURE__ */ jsx(ContextMenu$1.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
1558
+ }), children]
1559
+ });
1560
+ }
1561
+ function ContextMenuRadioGroup({ ...props }) {
1562
+ return /* @__PURE__ */ jsx(ContextMenu$1.RadioGroup, {
1563
+ "data-slot": "context-menu-radio-group",
1564
+ ...props
1565
+ });
1566
+ }
1567
+ function ContextMenuRadioItem({ className, children, inset, ...props }) {
1568
+ return /* @__PURE__ */ jsxs(ContextMenu$1.RadioItem, {
1569
+ "data-slot": "context-menu-radio-item",
1570
+ "data-inset": inset,
1571
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1572
+ ...props,
1573
+ children: [/* @__PURE__ */ jsx("span", {
1574
+ className: "pointer-events-none absolute right-2",
1575
+ children: /* @__PURE__ */ jsx(ContextMenu$1.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
1576
+ }), children]
1577
+ });
1578
+ }
1579
+ function ContextMenuSeparator({ className, ...props }) {
1580
+ return /* @__PURE__ */ jsx(ContextMenu$1.Separator, {
1581
+ "data-slot": "context-menu-separator",
1582
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1583
+ ...props
1584
+ });
1585
+ }
1586
+ function ContextMenuShortcut({ className, ...props }) {
1587
+ return /* @__PURE__ */ jsx("span", {
1588
+ "data-slot": "context-menu-shortcut",
1589
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground", className),
1590
+ ...props
1591
+ });
1592
+ }
1593
+ //#endregion
1594
+ //#region src/components/ui/drawer.tsx
1595
+ const DrawerContext = React.createContext(null);
1596
+ function useDrawer() {
1597
+ const context = React.useContext(DrawerContext);
1598
+ if (!context) throw new Error("useDrawer must be used within a Drawer.");
1599
+ return context;
1600
+ }
1601
+ function Drawer({ modal = true, showSwipeHandle = false, snapPoints, swipeDirection = "down", ...props }) {
1602
+ const hasSnapPoints = snapPoints != null && snapPoints.length > 0;
1603
+ const contextValue = React.useMemo(() => ({
1604
+ hasSnapPoints,
1605
+ modal,
1606
+ showSwipeHandle,
1607
+ swipeDirection
1608
+ }), [
1609
+ hasSnapPoints,
1610
+ modal,
1611
+ showSwipeHandle,
1612
+ swipeDirection
1613
+ ]);
1614
+ return /* @__PURE__ */ jsx(DrawerContext.Provider, {
1615
+ value: contextValue,
1616
+ children: /* @__PURE__ */ jsx(Drawer$1.Root, {
1617
+ "data-slot": "drawer",
1618
+ modal,
1619
+ snapPoints,
1620
+ swipeDirection,
1621
+ ...props
1622
+ })
1623
+ });
1624
+ }
1625
+ function DrawerTrigger({ ...props }) {
1626
+ return /* @__PURE__ */ jsx(Drawer$1.Trigger, {
1627
+ "data-slot": "drawer-trigger",
1628
+ ...props
1629
+ });
1630
+ }
1631
+ function DrawerPortal({ ...props }) {
1632
+ return /* @__PURE__ */ jsx(Drawer$1.Portal, {
1633
+ "data-slot": "drawer-portal",
1634
+ ...props
1635
+ });
1636
+ }
1637
+ function DrawerClose({ ...props }) {
1638
+ return /* @__PURE__ */ jsx(Drawer$1.Close, {
1639
+ "data-slot": "drawer-close",
1640
+ ...props
1641
+ });
1642
+ }
1643
+ function DrawerOverlay({ className, ...props }) {
1644
+ return /* @__PURE__ */ jsx(Drawer$1.Backdrop, {
1645
+ "data-slot": "drawer-overlay",
1646
+ className: cn("fixed inset-0 z-50 min-h-dvh bg-black/10 opacity-[max(var(--drawer-overlay-min-opacity,0),calc(1-var(--drawer-swipe-progress)))] transition-opacity duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] select-none data-ending-style:pointer-events-none data-ending-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-snap-points:[--drawer-overlay-min-opacity:0.5] data-starting-style:opacity-0 data-swiping:duration-0 supports-backdrop-filter:backdrop-blur-xs supports-[-webkit-touch-callout:none]:absolute", className),
1647
+ ...props
1648
+ });
1649
+ }
1650
+ function DrawerSwipeHandle({ className, ...props }) {
1651
+ return /* @__PURE__ */ jsx("div", {
1652
+ "data-slot": "drawer-swipe-handle",
1653
+ "aria-hidden": "true",
1654
+ className: cn("relative z-10 flex shrink-0 cursor-grab transition-opacity duration-200 group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-[swipe-axis=x]/drawer-popup:h-full group-data-[swipe-axis=x]/drawer-popup:w-3 group-data-[swipe-axis=x]/drawer-popup:items-center group-data-[swipe-axis=y]/drawer-popup:h-3 group-data-[swipe-axis=y]/drawer-popup:w-full group-data-[swipe-axis=y]/drawer-popup:justify-center group-data-[swipe-direction=down]/drawer-popup:items-end group-data-[swipe-direction=left]/drawer-popup:order-last group-data-[swipe-direction=left]/drawer-popup:justify-start group-data-[swipe-direction=right]/drawer-popup:justify-end group-data-[swipe-direction=up]/drawer-popup:order-last group-data-[swipe-direction=up]/drawer-popup:items-start after:block after:shrink-0 after:rounded-full after:bg-muted group-data-[swipe-axis=x]/drawer-popup:after:h-24 group-data-[swipe-axis=x]/drawer-popup:after:w-1 group-data-[swipe-axis=y]/drawer-popup:after:h-1 group-data-[swipe-axis=y]/drawer-popup:after:w-24 active:cursor-grabbing", className),
1655
+ ...props
1656
+ });
1657
+ }
1658
+ function DrawerContent({ className, children, ...props }) {
1659
+ const { hasSnapPoints, modal, showSwipeHandle, swipeDirection } = useDrawer();
1660
+ const swipeAxis = swipeDirection === "down" || swipeDirection === "up" ? "y" : "x";
1661
+ return /* @__PURE__ */ jsxs(DrawerPortal, {
1662
+ "data-slot": "drawer-portal",
1663
+ children: [modal === true && /* @__PURE__ */ jsx(DrawerOverlay, { "data-snap-points": hasSnapPoints ? "" : void 0 }), /* @__PURE__ */ jsx(Drawer$1.Viewport, {
1664
+ "data-slot": "drawer-viewport",
1665
+ "data-modal": modal,
1666
+ className: "pointer-events-none fixed inset-0 z-50 select-none data-[modal=true]:pointer-events-auto",
1667
+ children: /* @__PURE__ */ jsxs(Drawer$1.Popup, {
1668
+ "data-slot": "drawer-popup",
1669
+ "data-swipe-axis": swipeAxis,
1670
+ "data-snap-points": hasSnapPoints ? "" : void 0,
1671
+ className: cn("group/drawer-popup pointer-events-auto fixed z-50 m-(--drawer-inset,0px) flex h-(--drawer-content-height) max-h-(--drawer-content-max-height,none) min-h-0 w-(--drawer-content-width,auto) transform-[translate3d(var(--translate-x,0px),var(--translate-y,0px),0)_scale(var(--stack-scale))] flex-col bg-popover text-sm text-popover-foreground transition-[transform,height,opacity,filter] duration-450 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-transform outline-none select-none [interpolate-size:allow-keywords] data-[swipe-direction=down]:rounded-t-xl data-[swipe-direction=down]:border-t data-[swipe-direction=left]:rounded-r-xl data-[swipe-direction=left]:border-r data-[swipe-direction=right]:rounded-l-xl data-[swipe-direction=right]:border-l data-[swipe-direction=up]:rounded-b-xl data-[swipe-direction=up]:border-b", "data-nested-drawer-open:overflow-hidden data-nested-drawer-open:brightness-95", "after:pointer-events-none after:absolute after:bg-(--drawer-bleed-background,var(--color-popover)) data-[swipe-axis=x]:after:inset-y-0 data-[swipe-axis=x]:after:w-(--bleed) data-[swipe-axis=y]:after:inset-x-0 data-[swipe-axis=y]:after:h-(--bleed) data-[swipe-direction=down]:after:top-full data-[swipe-direction=left]:after:right-full data-[swipe-direction=right]:after:left-full data-[swipe-direction=up]:after:bottom-full", "[--drawer-content-height:var(--drawer-height,auto)] data-[swipe-axis=x]:[--drawer-content-width:75%] data-[swipe-axis=y]:[--drawer-content-max-height:calc(100dvh-6rem)] data-[swipe-axis=y]:data-snap-points:[--drawer-content-height:100dvh] data-[swipe-axis=x]:sm:[--drawer-content-width:24rem]", "[--bleed:3rem] [--peek:1rem] [--stack-height:var(--drawer-frontmost-height,var(--drawer-height,0px))] [--stack-peek-offset:max(0px,calc((var(--nested-drawers)-var(--stack-progress))*var(--peek)))] [--stack-progress:clamp(0,var(--drawer-swipe-progress),1)] [--stack-scale-base:max(0,calc(1-(var(--nested-drawers)*var(--stack-step))))] [--stack-scale:clamp(0,calc(var(--stack-scale-base)+(var(--stack-step)*var(--stack-progress))),1)] [--stack-shrink:calc(1-var(--stack-scale))] [--stack-step:0.05]", "data-ending-style:transform-(--closed-transform) data-ending-style:opacity-[0.9999] data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-nested-drawer-swiping:duration-0 data-ending-style:data-nested-drawer-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-starting-style:transform-(--closed-transform) data-swiping:duration-0 data-ending-style:data-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)]", "data-[swipe-axis=y]:inset-x-0 data-[swipe-axis=y]:data-nested-drawer-open:h-(--stack-height)", "data-[swipe-axis=x]:inset-y-0 data-[swipe-axis=x]:flex-row", "data-[swipe-direction=down]:bottom-0 data-[swipe-direction=down]:origin-bottom data-[swipe-direction=down]:[--closed-transform:translate3d(0,calc(100%+var(--drawer-inset,0px)+2px),0)] data-[swipe-direction=down]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)-var(--stack-peek-offset)-(var(--stack-shrink)*var(--stack-height)))]", "data-[swipe-direction=up]:top-0 data-[swipe-direction=up]:origin-top data-[swipe-direction=up]:[--closed-transform:translate3d(0,calc(-100%-var(--drawer-inset,0px)-2px),0)] data-[swipe-direction=up]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)+var(--stack-peek-offset)+(var(--stack-shrink)*var(--stack-height)))]", "data-[swipe-direction=left]:left-0 data-[swipe-direction=left]:origin-left data-[swipe-direction=left]:[--closed-transform:translate3d(calc(-100%-var(--drawer-inset,0px)-2px),0,0)] data-[swipe-direction=left]:[--translate-x:calc(var(--drawer-swipe-movement-x)+var(--stack-peek-offset)+(var(--stack-shrink)*100%))]", "data-[swipe-direction=right]:right-0 data-[swipe-direction=right]:origin-right data-[swipe-direction=right]:[--closed-transform:translate3d(calc(100%+var(--drawer-inset,0px)+2px),0,0)] data-[swipe-direction=right]:[--translate-x:calc(var(--drawer-swipe-movement-x)-var(--stack-peek-offset)-(var(--stack-shrink)*100%))]", className),
1672
+ ...props,
1673
+ children: [showSwipeHandle && /* @__PURE__ */ jsx(DrawerSwipeHandle, {}), /* @__PURE__ */ jsx(Drawer$1.Content, {
1674
+ "data-slot": "drawer-content",
1675
+ className: cn("flex min-h-0 flex-1 flex-col overflow-hidden overscroll-contain rounded-[inherit] transition-opacity duration-300 ease-[cubic-bezier(0.45,1.005,0,1.005)] select-text group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-swiping/drawer-popup:select-none"),
1676
+ children
1677
+ })]
1678
+ })
1679
+ })]
1680
+ });
1681
+ }
1682
+ function DrawerHeader({ className, ...props }) {
1683
+ return /* @__PURE__ */ jsx("div", {
1684
+ "data-slot": "drawer-header",
1685
+ className: cn("flex shrink-0 flex-col gap-0.5 p-4 pb-0 group-data-[swipe-axis=y]/drawer-popup:text-center md:gap-0.5 md:text-left", className),
1686
+ ...props
1687
+ });
1688
+ }
1689
+ function DrawerFooter({ className, ...props }) {
1690
+ return /* @__PURE__ */ jsx("div", {
1691
+ "data-slot": "drawer-footer",
1692
+ className: cn("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
1693
+ ...props
1694
+ });
1695
+ }
1696
+ function DrawerTitle({ className, ...props }) {
1697
+ return /* @__PURE__ */ jsx(Drawer$1.Title, {
1698
+ "data-slot": "drawer-title",
1699
+ className: cn("font-heading text-base font-medium text-foreground", className),
1700
+ ...props
1701
+ });
1702
+ }
1703
+ function DrawerDescription({ className, ...props }) {
1704
+ return /* @__PURE__ */ jsx(Drawer$1.Description, {
1705
+ "data-slot": "drawer-description",
1706
+ className: cn("text-sm text-balance text-muted-foreground", className),
1707
+ ...props
1708
+ });
1709
+ }
1710
+ //#endregion
1711
+ //#region src/components/ui/dropdown-menu.tsx
1712
+ function DropdownMenu({ ...props }) {
1713
+ return /* @__PURE__ */ jsx(Menu.Root, {
1714
+ "data-slot": "dropdown-menu",
1715
+ ...props
1716
+ });
1717
+ }
1718
+ function DropdownMenuPortal({ ...props }) {
1719
+ return /* @__PURE__ */ jsx(Menu.Portal, {
1720
+ "data-slot": "dropdown-menu-portal",
1721
+ ...props
1722
+ });
1723
+ }
1724
+ function DropdownMenuTrigger({ ...props }) {
1725
+ return /* @__PURE__ */ jsx(Menu.Trigger, {
1726
+ "data-slot": "dropdown-menu-trigger",
1727
+ ...props
1728
+ });
1729
+ }
1730
+ function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, ...props }) {
1731
+ return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
1732
+ className: "isolate z-50 outline-none",
1733
+ align,
1734
+ alignOffset,
1735
+ side,
1736
+ sideOffset,
1737
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
1738
+ "data-slot": "dropdown-menu-content",
1739
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
1740
+ ...props
1741
+ })
1742
+ }) });
1743
+ }
1744
+ function DropdownMenuGroup({ ...props }) {
1745
+ return /* @__PURE__ */ jsx(Menu.Group, {
1746
+ "data-slot": "dropdown-menu-group",
1747
+ ...props
1748
+ });
1749
+ }
1750
+ function DropdownMenuLabel({ className, inset, ...props }) {
1751
+ return /* @__PURE__ */ jsx(Menu.GroupLabel, {
1752
+ "data-slot": "dropdown-menu-label",
1753
+ "data-inset": inset,
1754
+ className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
1755
+ ...props
1756
+ });
1757
+ }
1758
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
1759
+ return /* @__PURE__ */ jsx(Menu.Item, {
1760
+ "data-slot": "dropdown-menu-item",
1761
+ "data-inset": inset,
1762
+ "data-variant": variant,
1763
+ className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 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/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className),
1764
+ ...props
1765
+ });
1766
+ }
1767
+ function DropdownMenuSub({ ...props }) {
1768
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
1769
+ "data-slot": "dropdown-menu-sub",
1770
+ ...props
1771
+ });
1772
+ }
1773
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
1774
+ return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
1775
+ "data-slot": "dropdown-menu-sub-trigger",
1776
+ "data-inset": inset,
1777
+ className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1778
+ ...props,
1779
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
1780
+ });
1781
+ }
1782
+ function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) {
1783
+ return /* @__PURE__ */ jsx(DropdownMenuContent, {
1784
+ "data-slot": "dropdown-menu-sub-content",
1785
+ className: cn("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1786
+ align,
1787
+ alignOffset,
1788
+ side,
1789
+ sideOffset,
1790
+ ...props
1791
+ });
1792
+ }
1793
+ function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
1794
+ return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
1795
+ "data-slot": "dropdown-menu-checkbox-item",
1796
+ "data-inset": inset,
1797
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1798
+ checked,
1799
+ ...props,
1800
+ children: [/* @__PURE__ */ jsx("span", {
1801
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
1802
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
1803
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
1804
+ }), children]
1805
+ });
1806
+ }
1807
+ function DropdownMenuRadioGroup({ ...props }) {
1808
+ return /* @__PURE__ */ jsx(Menu.RadioGroup, {
1809
+ "data-slot": "dropdown-menu-radio-group",
1810
+ ...props
1811
+ });
1812
+ }
1813
+ function DropdownMenuRadioItem({ className, children, inset, ...props }) {
1814
+ return /* @__PURE__ */ jsxs(Menu.RadioItem, {
1815
+ "data-slot": "dropdown-menu-radio-item",
1816
+ "data-inset": inset,
1817
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1818
+ ...props,
1819
+ children: [/* @__PURE__ */ jsx("span", {
1820
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
1821
+ "data-slot": "dropdown-menu-radio-item-indicator",
1822
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
1823
+ }), children]
1824
+ });
1825
+ }
1826
+ function DropdownMenuSeparator({ className, ...props }) {
1827
+ return /* @__PURE__ */ jsx(Menu.Separator, {
1828
+ "data-slot": "dropdown-menu-separator",
1829
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1830
+ ...props
1831
+ });
1832
+ }
1833
+ function DropdownMenuShortcut({ className, ...props }) {
1834
+ return /* @__PURE__ */ jsx("span", {
1835
+ "data-slot": "dropdown-menu-shortcut",
1836
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
1837
+ ...props
1838
+ });
1839
+ }
1840
+ //#endregion
1841
+ //#region src/components/ui/empty.tsx
1842
+ function Empty({ className, ...props }) {
1843
+ return /* @__PURE__ */ jsx("div", {
1844
+ "data-slot": "empty",
1845
+ className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance", className),
1846
+ ...props
1847
+ });
1848
+ }
1849
+ function EmptyHeader({ className, ...props }) {
1850
+ return /* @__PURE__ */ jsx("div", {
1851
+ "data-slot": "empty-header",
1852
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
1853
+ ...props
1854
+ });
1855
+ }
1856
+ const emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
1857
+ variants: { variant: {
1858
+ default: "bg-transparent",
1859
+ icon: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
1860
+ } },
1861
+ defaultVariants: { variant: "default" }
1862
+ });
1863
+ function EmptyMedia({ className, variant = "default", ...props }) {
1864
+ return /* @__PURE__ */ jsx("div", {
1865
+ "data-slot": "empty-icon",
1866
+ "data-variant": variant,
1867
+ className: cn(emptyMediaVariants({
1868
+ variant,
1869
+ className
1870
+ })),
1871
+ ...props
1872
+ });
1873
+ }
1874
+ function EmptyTitle({ className, ...props }) {
1875
+ return /* @__PURE__ */ jsx("div", {
1876
+ "data-slot": "empty-title",
1877
+ className: cn("font-heading text-sm font-medium tracking-tight", className),
1878
+ ...props
1879
+ });
1880
+ }
1881
+ function EmptyDescription({ className, ...props }) {
1882
+ return /* @__PURE__ */ jsx("div", {
1883
+ "data-slot": "empty-description",
1884
+ className: cn("text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
1885
+ ...props
1886
+ });
1887
+ }
1888
+ function EmptyContent({ className, ...props }) {
1889
+ return /* @__PURE__ */ jsx("div", {
1890
+ "data-slot": "empty-content",
1891
+ className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance", className),
1892
+ ...props
1893
+ });
1894
+ }
1895
+ //#endregion
1896
+ //#region src/components/ui/label.tsx
1897
+ function Label({ className, ...props }) {
1898
+ return /* @__PURE__ */ jsx("label", {
1899
+ "data-slot": "label",
1900
+ className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
1901
+ ...props
1902
+ });
1903
+ }
1904
+ //#endregion
1905
+ //#region src/components/ui/field.tsx
1906
+ function FieldSet({ className, ...props }) {
1907
+ return /* @__PURE__ */ jsx("fieldset", {
1908
+ "data-slot": "field-set",
1909
+ className: cn("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className),
1910
+ ...props
1911
+ });
1912
+ }
1913
+ function FieldLegend({ className, variant = "legend", ...props }) {
1914
+ return /* @__PURE__ */ jsx("legend", {
1915
+ "data-slot": "field-legend",
1916
+ "data-variant": variant,
1917
+ className: cn("mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
1918
+ ...props
1919
+ });
1920
+ }
1921
+ function FieldGroup({ className, ...props }) {
1922
+ return /* @__PURE__ */ jsx("div", {
1923
+ "data-slot": "field-group",
1924
+ className: cn("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", className),
1925
+ ...props
1926
+ });
1927
+ }
1928
+ const fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
1929
+ variants: { orientation: {
1930
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
1931
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
1932
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
1933
+ } },
1934
+ defaultVariants: { orientation: "vertical" }
1935
+ });
1936
+ function Field({ className, orientation = "vertical", ...props }) {
1937
+ return /* @__PURE__ */ jsx("div", {
1938
+ role: "group",
1939
+ "data-slot": "field",
1940
+ "data-orientation": orientation,
1941
+ className: cn(fieldVariants({ orientation }), className),
1942
+ ...props
1943
+ });
1944
+ }
1945
+ function FieldContent({ className, ...props }) {
1946
+ return /* @__PURE__ */ jsx("div", {
1947
+ "data-slot": "field-content",
1948
+ className: cn("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", className),
1949
+ ...props
1950
+ });
1951
+ }
1952
+ function FieldLabel({ className, ...props }) {
1953
+ return /* @__PURE__ */ jsx(Label, {
1954
+ "data-slot": "field-label",
1955
+ className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-muted/50 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-3 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/50 *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", className),
1956
+ ...props
1957
+ });
1958
+ }
1959
+ function FieldTitle({ className, ...props }) {
1960
+ return /* @__PURE__ */ jsx("div", {
1961
+ "data-slot": "field-label",
1962
+ className: cn("flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50", className),
1963
+ ...props
1964
+ });
1965
+ }
1966
+ function FieldDescription({ className, ...props }) {
1967
+ return /* @__PURE__ */ jsx("p", {
1968
+ "data-slot": "field-description",
1969
+ className: cn("text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
1970
+ ...props
1971
+ });
1972
+ }
1973
+ function FieldSeparator({ children, className, ...props }) {
1974
+ return /* @__PURE__ */ jsxs("div", {
1975
+ "data-slot": "field-separator",
1976
+ "data-content": !!children,
1977
+ className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
1978
+ ...props,
1979
+ children: [/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ jsx("span", {
1980
+ className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
1981
+ "data-slot": "field-separator-content",
1982
+ children
1983
+ })]
1984
+ });
1985
+ }
1986
+ function FieldError({ className, children, errors, ...props }) {
1987
+ const content = useMemo(() => {
1988
+ if (children) return children;
1989
+ if (!errors?.length) return null;
1990
+ const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
1991
+ if (uniqueErrors?.length == 1) return uniqueErrors[0]?.message;
1992
+ return /* @__PURE__ */ jsx("ul", {
1993
+ className: "ml-4 flex list-disc flex-col gap-1",
1994
+ children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index))
1995
+ });
1996
+ }, [children, errors]);
1997
+ if (!content) return null;
1998
+ return /* @__PURE__ */ jsx("div", {
1999
+ role: "alert",
2000
+ "data-slot": "field-error",
2001
+ className: cn("text-sm font-normal text-destructive", className),
2002
+ ...props,
2003
+ children: content
2004
+ });
2005
+ }
2006
+ //#endregion
2007
+ //#region src/components/ui/hover-card.tsx
2008
+ function HoverCard({ ...props }) {
2009
+ return /* @__PURE__ */ jsx(PreviewCard.Root, {
2010
+ "data-slot": "hover-card",
2011
+ ...props
2012
+ });
2013
+ }
2014
+ function HoverCardTrigger({ ...props }) {
2015
+ return /* @__PURE__ */ jsx(PreviewCard.Trigger, {
2016
+ "data-slot": "hover-card-trigger",
2017
+ ...props
2018
+ });
2019
+ }
2020
+ function HoverCardContent({ className, side = "bottom", sideOffset = 4, align = "center", alignOffset = 4, ...props }) {
2021
+ return /* @__PURE__ */ jsx(PreviewCard.Portal, {
2022
+ "data-slot": "hover-card-portal",
2023
+ children: /* @__PURE__ */ jsx(PreviewCard.Positioner, {
2024
+ align,
2025
+ alignOffset,
2026
+ side,
2027
+ sideOffset,
2028
+ className: "isolate z-50",
2029
+ children: /* @__PURE__ */ jsx(PreviewCard.Popup, {
2030
+ "data-slot": "hover-card-content",
2031
+ className: cn("z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
2032
+ ...props
2033
+ })
2034
+ })
2035
+ });
2036
+ }
2037
+ //#endregion
2038
+ //#region src/components/ui/input-otp.tsx
2039
+ function InputOTP({ className, containerClassName, ...props }) {
2040
+ return /* @__PURE__ */ jsx(OTPInput, {
2041
+ "data-slot": "input-otp",
2042
+ containerClassName: cn("cn-input-otp flex items-center has-disabled:opacity-50", containerClassName),
2043
+ spellCheck: false,
2044
+ className: cn("disabled:cursor-not-allowed", className),
2045
+ ...props
2046
+ });
2047
+ }
2048
+ function InputOTPGroup({ className, ...props }) {
2049
+ return /* @__PURE__ */ jsx("div", {
2050
+ "data-slot": "input-otp-group",
2051
+ className: cn("flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40", className),
2052
+ ...props
2053
+ });
2054
+ }
2055
+ function InputOTPSlot({ index, className, ...props }) {
2056
+ const { char, hasFakeCaret, isActive } = React.useContext(OTPInputContext)?.slots[index] ?? {};
2057
+ return /* @__PURE__ */ jsxs("div", {
2058
+ "data-slot": "input-otp-slot",
2059
+ "data-active": isActive,
2060
+ className: cn("relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40", className),
2061
+ ...props,
2062
+ children: [char, hasFakeCaret && /* @__PURE__ */ jsx("div", {
2063
+ className: "pointer-events-none absolute inset-0 flex items-center justify-center",
2064
+ children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" })
2065
+ })]
2066
+ });
2067
+ }
2068
+ function InputOTPSeparator({ ...props }) {
2069
+ return /* @__PURE__ */ jsx("div", {
2070
+ "data-slot": "input-otp-separator",
2071
+ className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
2072
+ role: "separator",
2073
+ ...props,
2074
+ children: /* @__PURE__ */ jsx(MinusIcon, {})
2075
+ });
2076
+ }
2077
+ //#endregion
2078
+ //#region src/components/ui/item.tsx
2079
+ function ItemGroup({ className, ...props }) {
2080
+ return /* @__PURE__ */ jsx("div", {
2081
+ role: "list",
2082
+ "data-slot": "item-group",
2083
+ className: cn("group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className),
2084
+ ...props
2085
+ });
2086
+ }
2087
+ function ItemSeparator({ className, ...props }) {
2088
+ return /* @__PURE__ */ jsx(Separator, {
2089
+ "data-slot": "item-separator",
2090
+ orientation: "horizontal",
2091
+ className: cn("my-2", className),
2092
+ ...props
2093
+ });
2094
+ }
2095
+ const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted", {
2096
+ variants: {
2097
+ variant: {
2098
+ default: "border-transparent",
2099
+ outline: "border-border",
2100
+ muted: "border-transparent bg-muted/50"
2101
+ },
2102
+ size: {
2103
+ default: "gap-2.5 px-3 py-2.5",
2104
+ sm: "gap-2.5 px-3 py-2.5",
2105
+ xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0"
2106
+ }
2107
+ },
2108
+ defaultVariants: {
2109
+ variant: "default",
2110
+ size: "default"
2111
+ }
2112
+ });
2113
+ function Item({ className, variant = "default", size = "default", render, ...props }) {
2114
+ return useRender({
2115
+ defaultTagName: "div",
2116
+ props: mergeProps({ className: cn(itemVariants({
2117
+ variant,
2118
+ size,
2119
+ className
2120
+ })) }, props),
2121
+ render,
2122
+ state: {
2123
+ slot: "item",
2124
+ variant,
2125
+ size
2126
+ }
2127
+ });
2128
+ }
2129
+ const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none", {
2130
+ variants: { variant: {
2131
+ default: "bg-transparent",
2132
+ icon: "[&_svg:not([class*='size-'])]:size-4",
2133
+ image: "size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover"
2134
+ } },
2135
+ defaultVariants: { variant: "default" }
2136
+ });
2137
+ function ItemMedia({ className, variant = "default", ...props }) {
2138
+ return /* @__PURE__ */ jsx("div", {
2139
+ "data-slot": "item-media",
2140
+ "data-variant": variant,
2141
+ className: cn(itemMediaVariants({
2142
+ variant,
2143
+ className
2144
+ })),
2145
+ ...props
2146
+ });
2147
+ }
2148
+ function ItemContent({ className, ...props }) {
2149
+ return /* @__PURE__ */ jsx("div", {
2150
+ "data-slot": "item-content",
2151
+ className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
2152
+ ...props
2153
+ });
2154
+ }
2155
+ function ItemTitle({ className, ...props }) {
2156
+ return /* @__PURE__ */ jsx("div", {
2157
+ "data-slot": "item-title",
2158
+ className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className),
2159
+ ...props
2160
+ });
2161
+ }
2162
+ function ItemDescription({ className, ...props }) {
2163
+ return /* @__PURE__ */ jsx("p", {
2164
+ "data-slot": "item-description",
2165
+ className: cn("line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
2166
+ ...props
2167
+ });
2168
+ }
2169
+ function ItemActions({ className, ...props }) {
2170
+ return /* @__PURE__ */ jsx("div", {
2171
+ "data-slot": "item-actions",
2172
+ className: cn("flex items-center gap-2", className),
2173
+ ...props
2174
+ });
2175
+ }
2176
+ function ItemHeader({ className, ...props }) {
2177
+ return /* @__PURE__ */ jsx("div", {
2178
+ "data-slot": "item-header",
2179
+ className: cn("flex basis-full items-center justify-between gap-2", className),
2180
+ ...props
2181
+ });
2182
+ }
2183
+ function ItemFooter({ className, ...props }) {
2184
+ return /* @__PURE__ */ jsx("div", {
2185
+ "data-slot": "item-footer",
2186
+ className: cn("flex basis-full items-center justify-between gap-2", className),
2187
+ ...props
2188
+ });
2189
+ }
2190
+ //#endregion
2191
+ //#region src/components/ui/kbd.tsx
2192
+ function Kbd({ className, ...props }) {
2193
+ return /* @__PURE__ */ jsx("kbd", {
2194
+ "data-slot": "kbd",
2195
+ className: cn("pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3", className),
2196
+ ...props
2197
+ });
2198
+ }
2199
+ function KbdGroup({ className, ...props }) {
2200
+ return /* @__PURE__ */ jsx("kbd", {
2201
+ "data-slot": "kbd-group",
2202
+ className: cn("inline-flex items-center gap-1", className),
2203
+ ...props
2204
+ });
2205
+ }
2206
+ //#endregion
2207
+ //#region src/components/ui/marker.tsx
2208
+ const markerVariants = cva("group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground", { variants: { variant: {
2209
+ default: "",
2210
+ separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
2211
+ border: "border-b border-border pb-2"
2212
+ } } });
2213
+ function Marker({ className, variant = "default", render, ...props }) {
2214
+ return useRender({
2215
+ defaultTagName: "div",
2216
+ props: mergeProps({ className: cn(markerVariants({
2217
+ variant,
2218
+ className
2219
+ })) }, props),
2220
+ render,
2221
+ state: {
2222
+ slot: "marker",
2223
+ variant
2224
+ }
2225
+ });
2226
+ }
2227
+ function MarkerIcon({ className, ...props }) {
2228
+ return /* @__PURE__ */ jsx("span", {
2229
+ "data-slot": "marker-icon",
2230
+ "aria-hidden": "true",
2231
+ className: cn("size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
2232
+ ...props
2233
+ });
2234
+ }
2235
+ function MarkerContent({ className, ...props }) {
2236
+ return /* @__PURE__ */ jsx("span", {
2237
+ "data-slot": "marker-content",
2238
+ className: cn("min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
2239
+ ...props
2240
+ });
2241
+ }
2242
+ //#endregion
2243
+ //#region src/components/ui/menubar.tsx
2244
+ function Menubar({ className, ...props }) {
2245
+ return /* @__PURE__ */ jsx(Menubar$1, {
2246
+ "data-slot": "menubar",
2247
+ className: cn("flex h-8 items-center gap-0.5 rounded-lg border p-[3px]", className),
2248
+ ...props
2249
+ });
2250
+ }
2251
+ function MenubarMenu({ ...props }) {
2252
+ return /* @__PURE__ */ jsx(DropdownMenu, {
2253
+ "data-slot": "menubar-menu",
2254
+ ...props
2255
+ });
2256
+ }
2257
+ function MenubarGroup({ ...props }) {
2258
+ return /* @__PURE__ */ jsx(DropdownMenuGroup, {
2259
+ "data-slot": "menubar-group",
2260
+ ...props
2261
+ });
2262
+ }
2263
+ function MenubarPortal({ ...props }) {
2264
+ return /* @__PURE__ */ jsx(DropdownMenuPortal, {
2265
+ "data-slot": "menubar-portal",
2266
+ ...props
2267
+ });
2268
+ }
2269
+ function MenubarTrigger({ className, ...props }) {
2270
+ return /* @__PURE__ */ jsx(DropdownMenuTrigger, {
2271
+ "data-slot": "menubar-trigger",
2272
+ className: cn("flex items-center rounded-sm px-1.5 py-[2px] text-sm font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted", className),
2273
+ ...props
2274
+ });
2275
+ }
2276
+ function MenubarContent({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }) {
2277
+ return /* @__PURE__ */ jsx(DropdownMenuContent, {
2278
+ "data-slot": "menubar-content",
2279
+ align,
2280
+ alignOffset,
2281
+ sideOffset,
2282
+ className: cn("min-w-36 rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", className),
2283
+ ...props
2284
+ });
2285
+ }
2286
+ function MenubarItem({ className, inset, variant = "default", ...props }) {
2287
+ return /* @__PURE__ */ jsx(DropdownMenuItem, {
2288
+ "data-slot": "menubar-item",
2289
+ "data-inset": inset,
2290
+ "data-variant": variant,
2291
+ className: cn("group/menubar-item gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 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/20 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!", className),
2292
+ ...props
2293
+ });
2294
+ }
2295
+ function MenubarCheckboxItem({ className, children, checked, inset, ...props }) {
2296
+ return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
2297
+ "data-slot": "menubar-checkbox-item",
2298
+ "data-inset": inset,
2299
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
2300
+ checked,
2301
+ ...props,
2302
+ children: [/* @__PURE__ */ jsx("span", {
2303
+ className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
2304
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
2305
+ }), children]
2306
+ });
2307
+ }
2308
+ function MenubarRadioGroup({ ...props }) {
2309
+ return /* @__PURE__ */ jsx(DropdownMenuRadioGroup, {
2310
+ "data-slot": "menubar-radio-group",
2311
+ ...props
2312
+ });
2313
+ }
2314
+ function MenubarRadioItem({ className, children, inset, ...props }) {
2315
+ return /* @__PURE__ */ jsxs(Menu.RadioItem, {
2316
+ "data-slot": "menubar-radio-item",
2317
+ "data-inset": inset,
2318
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
2319
+ ...props,
2320
+ children: [/* @__PURE__ */ jsx("span", {
2321
+ className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
2322
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
2323
+ }), children]
2324
+ });
2325
+ }
2326
+ function MenubarLabel({ className, inset, ...props }) {
2327
+ return /* @__PURE__ */ jsx(DropdownMenuLabel, {
2328
+ "data-slot": "menubar-label",
2329
+ "data-inset": inset,
2330
+ className: cn("px-1.5 py-1 text-sm font-medium data-inset:pl-7", className),
2331
+ ...props
2332
+ });
2333
+ }
2334
+ function MenubarSeparator({ className, ...props }) {
2335
+ return /* @__PURE__ */ jsx(DropdownMenuSeparator, {
2336
+ "data-slot": "menubar-separator",
2337
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2338
+ ...props
2339
+ });
2340
+ }
2341
+ function MenubarShortcut({ className, ...props }) {
2342
+ return /* @__PURE__ */ jsx(DropdownMenuShortcut, {
2343
+ "data-slot": "menubar-shortcut",
2344
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground", className),
2345
+ ...props
2346
+ });
2347
+ }
2348
+ function MenubarSub({ ...props }) {
2349
+ return /* @__PURE__ */ jsx(DropdownMenuSub, {
2350
+ "data-slot": "menubar-sub",
2351
+ ...props
2352
+ });
2353
+ }
2354
+ function MenubarSubTrigger({ className, inset, ...props }) {
2355
+ return /* @__PURE__ */ jsx(DropdownMenuSubTrigger, {
2356
+ "data-slot": "menubar-sub-trigger",
2357
+ "data-inset": inset,
2358
+ className: cn("gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4", className),
2359
+ ...props
2360
+ });
2361
+ }
2362
+ function MenubarSubContent({ className, ...props }) {
2363
+ return /* @__PURE__ */ jsx(DropdownMenuSubContent, {
2364
+ "data-slot": "menubar-sub-content",
2365
+ className: cn("min-w-32 rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
2366
+ ...props
2367
+ });
2368
+ }
2369
+ //#endregion
2370
+ //#region src/components/ui/message.tsx
2371
+ function MessageGroup({ className, ...props }) {
2372
+ return /* @__PURE__ */ jsx("div", {
2373
+ "data-slot": "message-group",
2374
+ className: cn("flex min-w-0 flex-col gap-2", className),
2375
+ ...props
2376
+ });
2377
+ }
2378
+ function Message({ className, align = "start", ...props }) {
2379
+ return /* @__PURE__ */ jsx("div", {
2380
+ "data-slot": "message",
2381
+ "data-align": align,
2382
+ className: cn("group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse", className),
2383
+ ...props
2384
+ });
2385
+ }
2386
+ function MessageAvatar({ className, ...props }) {
2387
+ return /* @__PURE__ */ jsx("div", {
2388
+ "data-slot": "message-avatar",
2389
+ className: cn("flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8", className),
2390
+ ...props
2391
+ });
2392
+ }
2393
+ function MessageContent({ className, ...props }) {
2394
+ return /* @__PURE__ */ jsx("div", {
2395
+ "data-slot": "message-content",
2396
+ className: cn("flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end", className),
2397
+ ...props
2398
+ });
2399
+ }
2400
+ function MessageHeader({ className, ...props }) {
2401
+ return /* @__PURE__ */ jsx("div", {
2402
+ "data-slot": "message-header",
2403
+ className: cn("flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0", className),
2404
+ ...props
2405
+ });
2406
+ }
2407
+ function MessageFooter({ className, ...props }) {
2408
+ return /* @__PURE__ */ jsx("div", {
2409
+ "data-slot": "message-footer",
2410
+ className: cn("flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end", className),
2411
+ ...props
2412
+ });
2413
+ }
2414
+ //#endregion
2415
+ //#region src/components/ui/message-scroller.tsx
2416
+ function MessageScrollerProvider(props) {
2417
+ return /* @__PURE__ */ jsx(MessageScroller$1.Provider, { ...props });
2418
+ }
2419
+ function MessageScroller({ className, ...props }) {
2420
+ return /* @__PURE__ */ jsx(MessageScroller$1.Root, {
2421
+ "data-slot": "message-scroller",
2422
+ className: cn("group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden", className),
2423
+ ...props
2424
+ });
2425
+ }
2426
+ function MessageScrollerViewport({ className, ...props }) {
2427
+ return /* @__PURE__ */ jsx(MessageScroller$1.Viewport, {
2428
+ "data-slot": "message-scroller-viewport",
2429
+ className: cn("size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent data-pending-scroll:invisible", className),
2430
+ ...props
2431
+ });
2432
+ }
2433
+ function MessageScrollerContent({ className, ...props }) {
2434
+ return /* @__PURE__ */ jsx(MessageScroller$1.Content, {
2435
+ "data-slot": "message-scroller-content",
2436
+ className: cn("flex h-max min-h-full flex-col gap-6", className),
2437
+ ...props
2438
+ });
2439
+ }
2440
+ function MessageScrollerItem({ className, scrollAnchor = false, ...props }) {
2441
+ return /* @__PURE__ */ jsx(MessageScroller$1.Item, {
2442
+ "data-slot": "message-scroller-item",
2443
+ scrollAnchor,
2444
+ className: cn("min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]", className),
2445
+ ...props
2446
+ });
2447
+ }
2448
+ function MessageScrollerButton({ direction = "end", className, children, render, variant = "secondary", size = "icon-sm", ...props }) {
2449
+ return /* @__PURE__ */ jsx(MessageScroller$1.Button, {
2450
+ "data-slot": "message-scroller-button",
2451
+ "data-direction": direction,
2452
+ "data-variant": variant,
2453
+ "data-size": size,
2454
+ direction,
2455
+ className: cn("absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180", className),
2456
+ render: render ?? /* @__PURE__ */ jsx(Button, {
2457
+ variant,
2458
+ size
2459
+ }),
2460
+ ...props,
2461
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ArrowDownIcon, {}), /* @__PURE__ */ jsx("span", {
2462
+ className: "sr-only",
2463
+ children: direction === "end" ? "Scroll to end" : "Scroll to start"
2464
+ })] })
2465
+ });
2466
+ }
2467
+ //#endregion
2468
+ //#region src/components/ui/native-select.tsx
2469
+ function NativeSelect({ className, size = "default", ...props }) {
2470
+ return /* @__PURE__ */ jsxs("div", {
2471
+ className: cn("group/native-select relative w-fit has-[select:disabled]:opacity-50", className),
2472
+ "data-slot": "native-select-wrapper",
2473
+ "data-size": size,
2474
+ children: [/* @__PURE__ */ jsx("select", {
2475
+ "data-slot": "native-select",
2476
+ "data-size": size,
2477
+ className: "h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
2478
+ ...props
2479
+ }), /* @__PURE__ */ jsx(ChevronDownIcon, {
2480
+ className: "pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none",
2481
+ "aria-hidden": "true",
2482
+ "data-slot": "native-select-icon"
2483
+ })]
2484
+ });
2485
+ }
2486
+ function NativeSelectOption({ className, ...props }) {
2487
+ return /* @__PURE__ */ jsx("option", {
2488
+ "data-slot": "native-select-option",
2489
+ className: cn("bg-[Canvas] text-[CanvasText]", className),
2490
+ ...props
2491
+ });
2492
+ }
2493
+ function NativeSelectOptGroup({ className, ...props }) {
2494
+ return /* @__PURE__ */ jsx("optgroup", {
2495
+ "data-slot": "native-select-optgroup",
2496
+ className: cn("bg-[Canvas] text-[CanvasText]", className),
2497
+ ...props
2498
+ });
2499
+ }
2500
+ //#endregion
2501
+ //#region src/components/ui/navigation-menu.tsx
2502
+ function NavigationMenu({ align = "start", className, children, ...props }) {
2503
+ return /* @__PURE__ */ jsxs(NavigationMenu$1.Root, {
2504
+ "data-slot": "navigation-menu",
2505
+ className: cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className),
2506
+ ...props,
2507
+ children: [children, /* @__PURE__ */ jsx(NavigationMenuPositioner, { align })]
2508
+ });
2509
+ }
2510
+ function NavigationMenuList({ className, ...props }) {
2511
+ return /* @__PURE__ */ jsx(NavigationMenu$1.List, {
2512
+ "data-slot": "navigation-menu-list",
2513
+ className: cn("group flex flex-1 list-none items-center justify-center gap-0", className),
2514
+ ...props
2515
+ });
2516
+ }
2517
+ function NavigationMenuItem({ className, ...props }) {
2518
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Item, {
2519
+ "data-slot": "navigation-menu-item",
2520
+ className: cn("relative", className),
2521
+ ...props
2522
+ });
2523
+ }
2524
+ const navigationMenuTriggerStyle = cva("group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted");
2525
+ function NavigationMenuTrigger({ className, children, ...props }) {
2526
+ return /* @__PURE__ */ jsxs(NavigationMenu$1.Trigger, {
2527
+ "data-slot": "navigation-menu-trigger",
2528
+ className: cn(navigationMenuTriggerStyle(), "group", className),
2529
+ ...props,
2530
+ children: [
2531
+ children,
2532
+ " ",
2533
+ /* @__PURE__ */ jsx(ChevronDownIcon, {
2534
+ className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180",
2535
+ "aria-hidden": "true"
2536
+ })
2537
+ ]
2538
+ });
2539
+ }
2540
+ function NavigationMenuContent({ className, ...props }) {
2541
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Content, {
2542
+ "data-slot": "navigation-menu-content",
2543
+ className: cn("data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto p-1 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95", className),
2544
+ ...props
2545
+ });
2546
+ }
2547
+ function NavigationMenuPositioner({ className, side = "bottom", sideOffset = 8, align = "start", alignOffset = 0, ...props }) {
2548
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Portal, { children: /* @__PURE__ */ jsx(NavigationMenu$1.Positioner, {
2549
+ side,
2550
+ sideOffset,
2551
+ align,
2552
+ alignOffset,
2553
+ className: cn("isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0", className),
2554
+ ...props,
2555
+ children: /* @__PURE__ */ jsx(NavigationMenu$1.Popup, {
2556
+ className: "data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0",
2557
+ children: /* @__PURE__ */ jsx(NavigationMenu$1.Viewport, { className: "relative size-full overflow-hidden" })
2558
+ })
2559
+ }) });
2560
+ }
2561
+ function NavigationMenuLink({ className, ...props }) {
2562
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Link, {
2563
+ "data-slot": "navigation-menu-link",
2564
+ className: cn("flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4", className),
2565
+ ...props
2566
+ });
2567
+ }
2568
+ function NavigationMenuIndicator({ className, ...props }) {
2569
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Icon, {
2570
+ "data-slot": "navigation-menu-indicator",
2571
+ className: cn("top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in", className),
2572
+ ...props,
2573
+ children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
2574
+ });
2575
+ }
2576
+ //#endregion
2577
+ //#region src/components/ui/pagination.tsx
2578
+ function Pagination({ className, ...props }) {
2579
+ return /* @__PURE__ */ jsx("nav", {
2580
+ role: "navigation",
2581
+ "aria-label": "pagination",
2582
+ "data-slot": "pagination",
2583
+ className: cn("mx-auto flex w-full justify-center", className),
2584
+ ...props
2585
+ });
2586
+ }
2587
+ function PaginationContent({ className, ...props }) {
2588
+ return /* @__PURE__ */ jsx("ul", {
2589
+ "data-slot": "pagination-content",
2590
+ className: cn("flex items-center gap-0.5", className),
2591
+ ...props
2592
+ });
2593
+ }
2594
+ function PaginationItem({ ...props }) {
2595
+ return /* @__PURE__ */ jsx("li", {
2596
+ "data-slot": "pagination-item",
2597
+ ...props
2598
+ });
2599
+ }
2600
+ function PaginationLink({ className, isActive, size = "icon", ...props }) {
2601
+ return /* @__PURE__ */ jsx(Button, {
2602
+ variant: isActive ? "outline" : "ghost",
2603
+ size,
2604
+ className: cn(className),
2605
+ nativeButton: false,
2606
+ render: /* @__PURE__ */ jsx("a", {
2607
+ "aria-current": isActive ? "page" : void 0,
2608
+ "data-slot": "pagination-link",
2609
+ "data-active": isActive,
2610
+ ...props
2611
+ })
2612
+ });
2613
+ }
2614
+ function PaginationPrevious({ className, text = "Previous", ...props }) {
2615
+ return /* @__PURE__ */ jsxs(PaginationLink, {
2616
+ "aria-label": "Go to previous page",
2617
+ size: "default",
2618
+ className: cn("pl-1.5!", className),
2619
+ ...props,
2620
+ children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { "data-icon": "inline-start" }), /* @__PURE__ */ jsx("span", {
2621
+ className: "hidden sm:block",
2622
+ children: text
2623
+ })]
2624
+ });
2625
+ }
2626
+ function PaginationNext({ className, text = "Next", ...props }) {
2627
+ return /* @__PURE__ */ jsxs(PaginationLink, {
2628
+ "aria-label": "Go to next page",
2629
+ size: "default",
2630
+ className: cn("pr-1.5!", className),
2631
+ ...props,
2632
+ children: [/* @__PURE__ */ jsx("span", {
2633
+ className: "hidden sm:block",
2634
+ children: text
2635
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })]
2636
+ });
2637
+ }
2638
+ function PaginationEllipsis({ className, ...props }) {
2639
+ return /* @__PURE__ */ jsxs("span", {
2640
+ "aria-hidden": true,
2641
+ "data-slot": "pagination-ellipsis",
2642
+ className: cn("flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className),
2643
+ ...props,
2644
+ children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, {}), /* @__PURE__ */ jsx("span", {
2645
+ className: "sr-only",
2646
+ children: "More pages"
2647
+ })]
2648
+ });
2649
+ }
2650
+ //#endregion
2651
+ //#region src/components/ui/popover.tsx
2652
+ function Popover({ ...props }) {
2653
+ return /* @__PURE__ */ jsx(Popover$1.Root, {
2654
+ "data-slot": "popover",
2655
+ ...props
2656
+ });
2657
+ }
2658
+ function PopoverTrigger({ ...props }) {
2659
+ return /* @__PURE__ */ jsx(Popover$1.Trigger, {
2660
+ "data-slot": "popover-trigger",
2661
+ ...props
2662
+ });
2663
+ }
2664
+ function PopoverContent({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) {
2665
+ return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(Popover$1.Positioner, {
2666
+ align,
2667
+ alignOffset,
2668
+ side,
2669
+ sideOffset,
2670
+ className: "isolate z-50",
2671
+ children: /* @__PURE__ */ jsx(Popover$1.Popup, {
2672
+ "data-slot": "popover-content",
2673
+ className: cn("z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
2674
+ ...props
2675
+ })
2676
+ }) });
2677
+ }
2678
+ function PopoverHeader({ className, ...props }) {
2679
+ return /* @__PURE__ */ jsx("div", {
2680
+ "data-slot": "popover-header",
2681
+ className: cn("flex flex-col gap-0.5 text-sm", className),
2682
+ ...props
2683
+ });
2684
+ }
2685
+ function PopoverTitle({ className, ...props }) {
2686
+ return /* @__PURE__ */ jsx(Popover$1.Title, {
2687
+ "data-slot": "popover-title",
2688
+ className: cn("font-medium", className),
2689
+ ...props
2690
+ });
2691
+ }
2692
+ function PopoverDescription({ className, ...props }) {
2693
+ return /* @__PURE__ */ jsx(Popover$1.Description, {
2694
+ "data-slot": "popover-description",
2695
+ className: cn("text-muted-foreground", className),
2696
+ ...props
2697
+ });
2698
+ }
2699
+ //#endregion
2700
+ //#region src/components/ui/progress.tsx
2701
+ function Progress({ className, children, value, ...props }) {
2702
+ return /* @__PURE__ */ jsxs(Progress$1.Root, {
2703
+ value,
2704
+ "data-slot": "progress",
2705
+ className: cn("flex flex-wrap gap-3", className),
2706
+ ...props,
2707
+ children: [children, /* @__PURE__ */ jsx(ProgressTrack, { children: /* @__PURE__ */ jsx(ProgressIndicator, {}) })]
2708
+ });
2709
+ }
2710
+ function ProgressTrack({ className, ...props }) {
2711
+ return /* @__PURE__ */ jsx(Progress$1.Track, {
2712
+ className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted", className),
2713
+ "data-slot": "progress-track",
2714
+ ...props
2715
+ });
2716
+ }
2717
+ function ProgressIndicator({ className, ...props }) {
2718
+ return /* @__PURE__ */ jsx(Progress$1.Indicator, {
2719
+ "data-slot": "progress-indicator",
2720
+ className: cn("h-full bg-primary transition-all", className),
2721
+ ...props
2722
+ });
2723
+ }
2724
+ function ProgressLabel({ className, ...props }) {
2725
+ return /* @__PURE__ */ jsx(Progress$1.Label, {
2726
+ className: cn("text-sm font-medium", className),
2727
+ "data-slot": "progress-label",
2728
+ ...props
2729
+ });
2730
+ }
2731
+ function ProgressValue({ className, ...props }) {
2732
+ return /* @__PURE__ */ jsx(Progress$1.Value, {
2733
+ className: cn("ml-auto text-sm text-muted-foreground tabular-nums", className),
2734
+ "data-slot": "progress-value",
2735
+ ...props
2736
+ });
2737
+ }
2738
+ //#endregion
2739
+ //#region src/components/ui/questionnaire.tsx
2740
+ function Questionnaire({ className, ...props }) {
2741
+ return /* @__PURE__ */ jsx(Questionnaire$1.Root, {
2742
+ "data-slot": "questionnaire",
2743
+ className: cn("flex w-full min-w-0 flex-col gap-4", className),
2744
+ ...props
2745
+ });
2746
+ }
2747
+ function QuestionnaireProgress({ className, ...props }) {
2748
+ return /* @__PURE__ */ jsx(Questionnaire$1.Progress, {
2749
+ "data-slot": "questionnaire-progress",
2750
+ className: cn("min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums", className),
2751
+ ...props
2752
+ });
2753
+ }
2754
+ function QuestionnaireItem({ className, ...props }) {
2755
+ return /* @__PURE__ */ jsx(Questionnaire$1.Item, {
2756
+ "data-slot": "questionnaire-item",
2757
+ className: cn("flex min-w-0 flex-col gap-4 border-0 p-0 outline-none", className),
2758
+ ...props
2759
+ });
2760
+ }
2761
+ function QuestionnaireTitle({ className, ...props }) {
2762
+ return /* @__PURE__ */ jsx(Questionnaire$1.Title, {
2763
+ "data-slot": "questionnaire-title",
2764
+ className: cn("font-heading text-base leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4", className),
2765
+ ...props
2766
+ });
2767
+ }
2768
+ function QuestionnaireDescription({ className, ...props }) {
2769
+ return /* @__PURE__ */ jsx(Questionnaire$1.Description, {
2770
+ "data-slot": "questionnaire-description",
2771
+ className: cn("text-sm text-pretty text-muted-foreground", className),
2772
+ ...props
2773
+ });
2774
+ }
2775
+ function QuestionnaireChoices({ className, ...props }) {
2776
+ return /* @__PURE__ */ jsx(Questionnaire$1.Choices, {
2777
+ "data-slot": "questionnaire-choices",
2778
+ className: cn("group/questionnaire-choices grid min-w-0 gap-2", className),
2779
+ ...props
2780
+ });
2781
+ }
2782
+ function QuestionnaireChoice({ children, className, ...props }) {
2783
+ return /* @__PURE__ */ jsxs(Questionnaire$1.Choice, {
2784
+ "data-slot": "questionnaire-choice",
2785
+ className: cn("group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-colors outline-none select-none hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive dark:bg-input/20 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted", "data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
2786
+ ...props,
2787
+ children: [
2788
+ /* @__PURE__ */ jsx(Questionnaire$1.ChoiceInput, {
2789
+ "data-slot": "questionnaire-choice-input",
2790
+ className: "absolute inset-0 z-10 size-full cursor-pointer opacity-0"
2791
+ }),
2792
+ /* @__PURE__ */ jsxs("span", {
2793
+ "aria-hidden": "true",
2794
+ "data-slot": "questionnaire-choice-indicator",
2795
+ className: "pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[4px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary",
2796
+ children: [/* @__PURE__ */ jsx("span", {
2797
+ "data-slot": "questionnaire-choice-indicator-dot",
2798
+ className: "hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
2799
+ }), /* @__PURE__ */ jsx(CheckIcon, {
2800
+ "data-slot": "questionnaire-choice-indicator-check",
2801
+ className: "hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
2802
+ })]
2803
+ }),
2804
+ /* @__PURE__ */ jsx(Questionnaire$1.ChoiceLabel, {
2805
+ "data-slot": "questionnaire-choice-label",
2806
+ className: "flex min-w-0 flex-1 flex-col gap-0.5 leading-snug",
2807
+ children
2808
+ }),
2809
+ /* @__PURE__ */ jsx(Questionnaire$1.ChoiceShortcut, {
2810
+ "data-slot": "questionnaire-choice-shortcut",
2811
+ className: "pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex"
2812
+ })
2813
+ ]
2814
+ });
2815
+ }
2816
+ function QuestionnaireChoiceDescription({ className, ...props }) {
2817
+ return /* @__PURE__ */ jsx("span", {
2818
+ "data-slot": "questionnaire-choice-description",
2819
+ className: cn("text-muted-foreground", className),
2820
+ ...props
2821
+ });
2822
+ }
2823
+ function QuestionnaireInput({ className, ...props }) {
2824
+ return /* @__PURE__ */ jsx("div", {
2825
+ "data-slot": "questionnaire-input-wrapper",
2826
+ className: "group/questionnaire-input relative w-full min-w-0",
2827
+ children: /* @__PURE__ */ jsx(Questionnaire$1.Input, {
2828
+ "data-slot": "questionnaire-input",
2829
+ className: cn("h-8 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 sm:min-h-0 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", "selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground", className),
2830
+ ...props
2831
+ })
2832
+ });
2833
+ }
2834
+ function QuestionnaireError({ className, ...props }) {
2835
+ return /* @__PURE__ */ jsx(Questionnaire$1.Error, {
2836
+ "data-slot": "questionnaire-error",
2837
+ className: cn("mt-2 text-sm text-destructive", className),
2838
+ ...props
2839
+ });
2840
+ }
2841
+ function QuestionnaireActions({ className, ...props }) {
2842
+ return /* @__PURE__ */ jsx("div", {
2843
+ "data-slot": "questionnaire-actions",
2844
+ className: cn("grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8", className),
2845
+ ...props
2846
+ });
2847
+ }
2848
+ function QuestionnairePrevious({ children, className, size = "default", variant = "outline", ...props }) {
2849
+ return /* @__PURE__ */ jsx(Questionnaire$1.Previous, {
2850
+ "data-slot": "questionnaire-previous",
2851
+ "data-size": size,
2852
+ "data-variant": variant,
2853
+ className: cn(buttonVariants({
2854
+ size,
2855
+ variant
2856
+ }), "col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0", className),
2857
+ ...props,
2858
+ children: children ?? "Previous"
2859
+ });
2860
+ }
2861
+ function QuestionnaireSkip({ children, className, size = "default", variant = "outline", ...props }) {
2862
+ return /* @__PURE__ */ jsx(Questionnaire$1.Skip, {
2863
+ "data-slot": "questionnaire-skip",
2864
+ "data-size": size,
2865
+ "data-variant": variant,
2866
+ className: cn(buttonVariants({
2867
+ size,
2868
+ variant
2869
+ }), "col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0", className),
2870
+ ...props,
2871
+ children: children ?? "Skip"
2872
+ });
2873
+ }
2874
+ function QuestionnaireNext({ children, className, size = "default", variant = "default", ...props }) {
2875
+ return /* @__PURE__ */ jsx(Questionnaire$1.Next, {
2876
+ "data-slot": "questionnaire-next",
2877
+ "data-size": size,
2878
+ "data-variant": variant,
2879
+ className: cn(buttonVariants({
2880
+ size,
2881
+ variant
2882
+ }), "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0", className),
2883
+ ...props,
2884
+ children: children ?? "Next"
2885
+ });
2886
+ }
2887
+ function QuestionnaireSubmit({ children, className, size = "default", variant = "default", ...props }) {
2888
+ return /* @__PURE__ */ jsx(Questionnaire$1.Submit, {
2889
+ "data-slot": "questionnaire-submit",
2890
+ "data-size": size,
2891
+ "data-variant": variant,
2892
+ className: cn(buttonVariants({
2893
+ size,
2894
+ variant
2895
+ }), "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0", className),
2896
+ ...props,
2897
+ children: children ?? "Submit"
2898
+ });
2899
+ }
2900
+ //#endregion
2901
+ //#region src/components/ui/radio-group.tsx
2902
+ function RadioGroup({ className, ...props }) {
2903
+ return /* @__PURE__ */ jsx(RadioGroup$1, {
2904
+ "data-slot": "radio-group",
2905
+ className: cn("grid w-full gap-2", className),
2906
+ ...props
2907
+ });
2908
+ }
2909
+ function RadioGroupItem({ className, ...props }) {
2910
+ return /* @__PURE__ */ jsx(Radio.Root, {
2911
+ "data-slot": "radio-group-item",
2912
+ className: cn("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary", className),
2913
+ ...props,
2914
+ children: /* @__PURE__ */ jsx(Radio.Indicator, {
2915
+ "data-slot": "radio-group-indicator",
2916
+ className: "flex size-4 items-center justify-center",
2917
+ children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
2918
+ })
2919
+ });
2920
+ }
2921
+ //#endregion
2922
+ //#region src/components/ui/resizable.tsx
2923
+ function ResizablePanelGroup({ className, ...props }) {
2924
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Group, {
2925
+ "data-slot": "resizable-panel-group",
2926
+ className: cn("flex h-full w-full aria-[orientation=vertical]:flex-col", className),
2927
+ ...props
2928
+ });
2929
+ }
2930
+ function ResizablePanel({ ...props }) {
2931
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, {
2932
+ "data-slot": "resizable-panel",
2933
+ ...props
2934
+ });
2935
+ }
2936
+ function ResizableHandle({ withHandle, className, ...props }) {
2937
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Separator, {
2938
+ "data-slot": "resizable-handle",
2939
+ className: cn("relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90", className),
2940
+ ...props,
2941
+ children: withHandle && /* @__PURE__ */ jsx("div", { className: "z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border" })
2942
+ });
2943
+ }
2944
+ //#endregion
2945
+ //#region src/components/ui/scroll-area.tsx
2946
+ function ScrollArea({ className, children, ...props }) {
2947
+ return /* @__PURE__ */ jsxs(ScrollArea$1.Root, {
2948
+ "data-slot": "scroll-area",
2949
+ className: cn("relative", className),
2950
+ ...props,
2951
+ children: [
2952
+ /* @__PURE__ */ jsx(ScrollArea$1.Viewport, {
2953
+ "data-slot": "scroll-area-viewport",
2954
+ className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
2955
+ children
2956
+ }),
2957
+ /* @__PURE__ */ jsx(ScrollBar, {}),
2958
+ /* @__PURE__ */ jsx(ScrollArea$1.Corner, {})
2959
+ ]
2960
+ });
2961
+ }
2962
+ function ScrollBar({ className, orientation = "vertical", ...props }) {
2963
+ return /* @__PURE__ */ jsx(ScrollArea$1.Scrollbar, {
2964
+ "data-slot": "scroll-area-scrollbar",
2965
+ "data-orientation": orientation,
2966
+ orientation,
2967
+ className: cn("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent", className),
2968
+ ...props,
2969
+ children: /* @__PURE__ */ jsx(ScrollArea$1.Thumb, {
2970
+ "data-slot": "scroll-area-thumb",
2971
+ className: "relative flex-1 rounded-full bg-border"
2972
+ })
2973
+ });
2974
+ }
2975
+ //#endregion
2976
+ //#region src/components/ui/select.tsx
2977
+ const Select = Select$1.Root;
2978
+ function SelectGroup({ className, ...props }) {
2979
+ return /* @__PURE__ */ jsx(Select$1.Group, {
2980
+ "data-slot": "select-group",
2981
+ className: cn("scroll-my-1 p-1", className),
2982
+ ...props
2983
+ });
2984
+ }
2985
+ function SelectValue({ className, ...props }) {
2986
+ return /* @__PURE__ */ jsx(Select$1.Value, {
2987
+ "data-slot": "select-value",
2988
+ className: cn("flex flex-1 text-left", className),
2989
+ ...props
2990
+ });
2991
+ }
2992
+ function SelectTrigger({ className, size = "default", children, ...props }) {
2993
+ return /* @__PURE__ */ jsxs(Select$1.Trigger, {
2994
+ "data-slot": "select-trigger",
2995
+ "data-size": size,
2996
+ className: cn("flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
2997
+ ...props,
2998
+ children: [children, /* @__PURE__ */ jsx(Select$1.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
2999
+ });
3000
+ }
3001
+ function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, alignItemWithTrigger = true, ...props }) {
3002
+ return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(Select$1.Positioner, {
3003
+ side,
3004
+ sideOffset,
3005
+ align,
3006
+ alignOffset,
3007
+ alignItemWithTrigger,
3008
+ className: "isolate z-50",
3009
+ children: /* @__PURE__ */ jsxs(Select$1.Popup, {
3010
+ "data-slot": "select-content",
3011
+ "data-align-trigger": alignItemWithTrigger,
3012
+ className: cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
3013
+ ...props,
3014
+ children: [
3015
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
3016
+ /* @__PURE__ */ jsx(Select$1.List, { children }),
3017
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
3018
+ ]
3019
+ })
3020
+ }) });
3021
+ }
3022
+ function SelectLabel({ className, ...props }) {
3023
+ return /* @__PURE__ */ jsx(Select$1.GroupLabel, {
3024
+ "data-slot": "select-label",
3025
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
3026
+ ...props
3027
+ });
3028
+ }
3029
+ function SelectItem({ className, children, ...props }) {
3030
+ return /* @__PURE__ */ jsxs(Select$1.Item, {
3031
+ "data-slot": "select-item",
3032
+ className: cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
3033
+ ...props,
3034
+ children: [/* @__PURE__ */ jsx(Select$1.ItemText, {
3035
+ className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
3036
+ children
3037
+ }), /* @__PURE__ */ jsx(Select$1.ItemIndicator, {
3038
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
3039
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
3040
+ })]
3041
+ });
3042
+ }
3043
+ function SelectSeparator({ className, ...props }) {
3044
+ return /* @__PURE__ */ jsx(Select$1.Separator, {
3045
+ "data-slot": "select-separator",
3046
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
3047
+ ...props
3048
+ });
3049
+ }
3050
+ function SelectScrollUpButton({ className, ...props }) {
3051
+ return /* @__PURE__ */ jsx(Select$1.ScrollUpArrow, {
3052
+ "data-slot": "select-scroll-up-button",
3053
+ className: cn("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
3054
+ ...props,
3055
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
3056
+ });
3057
+ }
3058
+ function SelectScrollDownButton({ className, ...props }) {
3059
+ return /* @__PURE__ */ jsx(Select$1.ScrollDownArrow, {
3060
+ "data-slot": "select-scroll-down-button",
3061
+ className: cn("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
3062
+ ...props,
3063
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
3064
+ });
3065
+ }
3066
+ //#endregion
3067
+ //#region src/components/ui/sheet.tsx
3068
+ function Sheet({ ...props }) {
3069
+ return /* @__PURE__ */ jsx(Dialog$1.Root, {
3070
+ "data-slot": "sheet",
3071
+ ...props
3072
+ });
3073
+ }
3074
+ function SheetTrigger({ ...props }) {
3075
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
3076
+ "data-slot": "sheet-trigger",
3077
+ ...props
3078
+ });
3079
+ }
3080
+ function SheetClose({ ...props }) {
3081
+ return /* @__PURE__ */ jsx(Dialog$1.Close, {
3082
+ "data-slot": "sheet-close",
3083
+ ...props
3084
+ });
3085
+ }
3086
+ function SheetPortal({ ...props }) {
3087
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, {
3088
+ "data-slot": "sheet-portal",
3089
+ ...props
3090
+ });
3091
+ }
3092
+ function SheetOverlay({ className, ...props }) {
3093
+ return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
3094
+ "data-slot": "sheet-overlay",
3095
+ className: cn("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs", className),
3096
+ ...props
3097
+ });
3098
+ }
3099
+ function SheetContent({ className, children, side = "right", showCloseButton = true, ...props }) {
3100
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
3101
+ "data-slot": "sheet-content",
3102
+ "data-side": side,
3103
+ className: cn("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] 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=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] 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=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className),
3104
+ ...props,
3105
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
3106
+ "data-slot": "sheet-close",
3107
+ render: /* @__PURE__ */ jsx(Button, {
3108
+ variant: "ghost",
3109
+ className: "absolute top-3 right-3",
3110
+ size: "icon-sm"
3111
+ }),
3112
+ children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
3113
+ className: "sr-only",
3114
+ children: "Close"
3115
+ })]
3116
+ })]
3117
+ })] });
3118
+ }
3119
+ function SheetHeader({ className, ...props }) {
3120
+ return /* @__PURE__ */ jsx("div", {
3121
+ "data-slot": "sheet-header",
3122
+ className: cn("flex flex-col gap-0.5 p-4", className),
3123
+ ...props
3124
+ });
3125
+ }
3126
+ function SheetFooter({ className, ...props }) {
3127
+ return /* @__PURE__ */ jsx("div", {
3128
+ "data-slot": "sheet-footer",
3129
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
3130
+ ...props
3131
+ });
3132
+ }
3133
+ function SheetTitle({ className, ...props }) {
3134
+ return /* @__PURE__ */ jsx(Dialog$1.Title, {
3135
+ "data-slot": "sheet-title",
3136
+ className: cn("font-heading text-base font-medium text-foreground", className),
3137
+ ...props
3138
+ });
3139
+ }
3140
+ function SheetDescription({ className, ...props }) {
3141
+ return /* @__PURE__ */ jsx(Dialog$1.Description, {
3142
+ "data-slot": "sheet-description",
3143
+ className: cn("text-sm text-muted-foreground", className),
3144
+ ...props
3145
+ });
3146
+ }
3147
+ //#endregion
3148
+ //#region src/hooks/use-mobile.ts
3149
+ const MOBILE_BREAKPOINT = 768;
3150
+ function useIsMobile() {
3151
+ const [isMobile, setIsMobile] = React.useState(void 0);
3152
+ React.useEffect(() => {
3153
+ const mql = window.matchMedia(`(max-width: 767px)`);
3154
+ const onChange = () => {
3155
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
3156
+ };
3157
+ mql.addEventListener("change", onChange);
3158
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
3159
+ return () => mql.removeEventListener("change", onChange);
3160
+ }, []);
3161
+ return !!isMobile;
3162
+ }
3163
+ //#endregion
3164
+ //#region src/components/ui/skeleton.tsx
3165
+ function Skeleton({ className, ...props }) {
3166
+ return /* @__PURE__ */ jsx("div", {
3167
+ "data-slot": "skeleton",
3168
+ className: cn("animate-pulse rounded-md bg-muted", className),
3169
+ ...props
3170
+ });
3171
+ }
3172
+ //#endregion
3173
+ //#region src/components/ui/tooltip.tsx
3174
+ function TooltipProvider({ delay = 0, ...props }) {
3175
+ return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
3176
+ "data-slot": "tooltip-provider",
3177
+ delay,
3178
+ ...props
3179
+ });
3180
+ }
3181
+ function Tooltip({ ...props }) {
3182
+ return /* @__PURE__ */ jsx(Tooltip$1.Root, {
3183
+ "data-slot": "tooltip",
3184
+ ...props
3185
+ });
3186
+ }
3187
+ function TooltipTrigger({ ...props }) {
3188
+ return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
3189
+ "data-slot": "tooltip-trigger",
3190
+ ...props
3191
+ });
3192
+ }
3193
+ function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
3194
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
3195
+ align,
3196
+ alignOffset,
3197
+ side,
3198
+ sideOffset,
3199
+ className: "isolate z-50",
3200
+ children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
3201
+ "data-slot": "tooltip-content",
3202
+ className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
3203
+ ...props,
3204
+ children: [children, /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
3205
+ })
3206
+ }) });
3207
+ }
3208
+ //#endregion
3209
+ //#region src/components/ui/sidebar.tsx
3210
+ const SIDEBAR_COOKIE_NAME = "sidebar_state";
3211
+ const SIDEBAR_COOKIE_MAX_AGE = 604800;
3212
+ const SIDEBAR_WIDTH = "16rem";
3213
+ const SIDEBAR_WIDTH_MOBILE = "18rem";
3214
+ const SIDEBAR_WIDTH_ICON = "3rem";
3215
+ const SIDEBAR_KEYBOARD_SHORTCUT = "b";
3216
+ const SidebarContext = React.createContext(null);
3217
+ function useSidebar() {
3218
+ const context = React.useContext(SidebarContext);
3219
+ if (!context) throw new Error("useSidebar must be used within a SidebarProvider.");
3220
+ return context;
3221
+ }
3222
+ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) {
3223
+ const isMobile = useIsMobile();
3224
+ const [openMobile, setOpenMobile] = React.useState(false);
3225
+ const [_open, _setOpen] = React.useState(defaultOpen);
3226
+ const open = openProp ?? _open;
3227
+ const setOpen = React.useCallback((value) => {
3228
+ const openState = typeof value === "function" ? value(open) : value;
3229
+ if (setOpenProp) setOpenProp(openState);
3230
+ else _setOpen(openState);
3231
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
3232
+ }, [setOpenProp, open]);
3233
+ const toggleSidebar = React.useCallback(() => {
3234
+ return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
3235
+ }, [
3236
+ isMobile,
3237
+ setOpen,
3238
+ setOpenMobile
3239
+ ]);
3240
+ React.useEffect(() => {
3241
+ const handleKeyDown = (event) => {
3242
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
3243
+ event.preventDefault();
3244
+ toggleSidebar();
3245
+ }
3246
+ };
3247
+ window.addEventListener("keydown", handleKeyDown);
3248
+ return () => window.removeEventListener("keydown", handleKeyDown);
3249
+ }, [toggleSidebar]);
3250
+ const state = open ? "expanded" : "collapsed";
3251
+ const contextValue = React.useMemo(() => ({
3252
+ state,
3253
+ open,
3254
+ setOpen,
3255
+ isMobile,
3256
+ openMobile,
3257
+ setOpenMobile,
3258
+ toggleSidebar
3259
+ }), [
3260
+ state,
3261
+ open,
3262
+ setOpen,
3263
+ isMobile,
3264
+ openMobile,
3265
+ setOpenMobile,
3266
+ toggleSidebar
3267
+ ]);
3268
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, {
3269
+ value: contextValue,
3270
+ children: /* @__PURE__ */ jsx("div", {
3271
+ "data-slot": "sidebar-wrapper",
3272
+ style: {
3273
+ "--sidebar-width": SIDEBAR_WIDTH,
3274
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
3275
+ ...style
3276
+ },
3277
+ className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className),
3278
+ ...props,
3279
+ children
3280
+ })
3281
+ });
3282
+ }
3283
+ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, dir, ...props }) {
3284
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
3285
+ if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
3286
+ "data-slot": "sidebar",
3287
+ className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className),
3288
+ ...props,
3289
+ children
3290
+ });
3291
+ if (isMobile) return /* @__PURE__ */ jsx(Sheet, {
3292
+ open: openMobile,
3293
+ onOpenChange: setOpenMobile,
3294
+ ...props,
3295
+ children: /* @__PURE__ */ jsxs(SheetContent, {
3296
+ dir,
3297
+ "data-sidebar": "sidebar",
3298
+ "data-slot": "sidebar",
3299
+ "data-mobile": "true",
3300
+ className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
3301
+ style: { "--sidebar-width": SIDEBAR_WIDTH_MOBILE },
3302
+ side,
3303
+ children: [/* @__PURE__ */ jsxs(SheetHeader, {
3304
+ className: "sr-only",
3305
+ children: [/* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }), /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })]
3306
+ }), /* @__PURE__ */ jsx("div", {
3307
+ className: "flex h-full w-full flex-col",
3308
+ children
3309
+ })]
3310
+ })
3311
+ });
3312
+ return /* @__PURE__ */ jsxs("div", {
3313
+ className: "group peer hidden text-sidebar-foreground md:block",
3314
+ "data-state": state,
3315
+ "data-collapsible": state === "collapsed" ? collapsible : "",
3316
+ "data-variant": variant,
3317
+ "data-side": side,
3318
+ "data-slot": "sidebar",
3319
+ children: [/* @__PURE__ */ jsx("div", {
3320
+ "data-slot": "sidebar-gap",
3321
+ className: cn("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")
3322
+ }), /* @__PURE__ */ jsx("div", {
3323
+ "data-slot": "sidebar-container",
3324
+ "data-side": side,
3325
+ className: cn("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", 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", className),
3326
+ ...props,
3327
+ children: /* @__PURE__ */ jsx("div", {
3328
+ "data-sidebar": "sidebar",
3329
+ "data-slot": "sidebar-inner",
3330
+ className: "flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",
3331
+ children
3332
+ })
3333
+ })]
3334
+ });
3335
+ }
3336
+ function SidebarTrigger({ className, onClick, ...props }) {
3337
+ const { toggleSidebar } = useSidebar();
3338
+ return /* @__PURE__ */ jsxs(Button, {
3339
+ "data-sidebar": "trigger",
3340
+ "data-slot": "sidebar-trigger",
3341
+ variant: "ghost",
3342
+ size: "icon-sm",
3343
+ className: cn(className),
3344
+ onClick: (event) => {
3345
+ onClick?.(event);
3346
+ toggleSidebar();
3347
+ },
3348
+ ...props,
3349
+ children: [/* @__PURE__ */ jsx(PanelLeftIcon, {}), /* @__PURE__ */ jsx("span", {
3350
+ className: "sr-only",
3351
+ children: "Toggle Sidebar"
3352
+ })]
3353
+ });
3354
+ }
3355
+ function SidebarRail({ className, ...props }) {
3356
+ const { toggleSidebar } = useSidebar();
3357
+ return /* @__PURE__ */ jsx("button", {
3358
+ "data-sidebar": "rail",
3359
+ "data-slot": "sidebar-rail",
3360
+ "aria-label": "Toggle Sidebar",
3361
+ tabIndex: -1,
3362
+ onClick: toggleSidebar,
3363
+ title: "Toggle Sidebar",
3364
+ className: cn("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] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2", "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar", "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2", "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2", className),
3365
+ ...props
3366
+ });
3367
+ }
3368
+ function SidebarInset({ className, ...props }) {
3369
+ return /* @__PURE__ */ jsx("main", {
3370
+ "data-slot": "sidebar-inset",
3371
+ className: cn("relative flex w-full flex-1 flex-col 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", className),
3372
+ ...props
3373
+ });
3374
+ }
3375
+ function SidebarInput({ className, ...props }) {
3376
+ return /* @__PURE__ */ jsx(Input, {
3377
+ "data-slot": "sidebar-input",
3378
+ "data-sidebar": "input",
3379
+ className: cn("h-8 w-full bg-background shadow-none", className),
3380
+ ...props
3381
+ });
3382
+ }
3383
+ function SidebarHeader({ className, ...props }) {
3384
+ return /* @__PURE__ */ jsx("div", {
3385
+ "data-slot": "sidebar-header",
3386
+ "data-sidebar": "header",
3387
+ className: cn("flex flex-col gap-2 p-2", className),
3388
+ ...props
3389
+ });
3390
+ }
3391
+ function SidebarFooter({ className, ...props }) {
3392
+ return /* @__PURE__ */ jsx("div", {
3393
+ "data-slot": "sidebar-footer",
3394
+ "data-sidebar": "footer",
3395
+ className: cn("flex flex-col gap-2 p-2", className),
3396
+ ...props
3397
+ });
3398
+ }
3399
+ function SidebarSeparator({ className, ...props }) {
3400
+ return /* @__PURE__ */ jsx(Separator, {
3401
+ "data-slot": "sidebar-separator",
3402
+ "data-sidebar": "separator",
3403
+ className: cn("mx-2 w-auto bg-sidebar-border", className),
3404
+ ...props
3405
+ });
3406
+ }
3407
+ function SidebarContent({ className, ...props }) {
3408
+ return /* @__PURE__ */ jsx("div", {
3409
+ "data-slot": "sidebar-content",
3410
+ "data-sidebar": "content",
3411
+ className: cn("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className),
3412
+ ...props
3413
+ });
3414
+ }
3415
+ function SidebarGroup({ className, ...props }) {
3416
+ return /* @__PURE__ */ jsx("div", {
3417
+ "data-slot": "sidebar-group",
3418
+ "data-sidebar": "group",
3419
+ className: cn("relative flex w-full min-w-0 flex-col p-2", className),
3420
+ ...props
3421
+ });
3422
+ }
3423
+ function SidebarGroupLabel({ className, render, ...props }) {
3424
+ return useRender({
3425
+ defaultTagName: "div",
3426
+ props: mergeProps({ className: cn("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden 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 [&>svg]:shrink-0", className) }, props),
3427
+ render,
3428
+ state: {
3429
+ slot: "sidebar-group-label",
3430
+ sidebar: "group-label"
3431
+ }
3432
+ });
3433
+ }
3434
+ function SidebarGroupAction({ className, render, ...props }) {
3435
+ return useRender({
3436
+ defaultTagName: "button",
3437
+ props: mergeProps({ className: cn("absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", className) }, props),
3438
+ render,
3439
+ state: {
3440
+ slot: "sidebar-group-action",
3441
+ sidebar: "group-action"
3442
+ }
3443
+ });
3444
+ }
3445
+ function SidebarGroupContent({ className, ...props }) {
3446
+ return /* @__PURE__ */ jsx("div", {
3447
+ "data-slot": "sidebar-group-content",
3448
+ "data-sidebar": "group-content",
3449
+ className: cn("w-full text-sm", className),
3450
+ ...props
3451
+ });
3452
+ }
3453
+ function SidebarMenu({ className, ...props }) {
3454
+ return /* @__PURE__ */ jsx("ul", {
3455
+ "data-slot": "sidebar-menu",
3456
+ "data-sidebar": "menu",
3457
+ className: cn("flex w-full min-w-0 flex-col gap-0", className),
3458
+ ...props
3459
+ });
3460
+ }
3461
+ function SidebarMenuItem({ className, ...props }) {
3462
+ return /* @__PURE__ */ jsx("li", {
3463
+ "data-slot": "sidebar-menu-item",
3464
+ "data-sidebar": "menu-item",
3465
+ className: cn("group/menu-item relative", className),
3466
+ ...props
3467
+ });
3468
+ }
3469
+ const sidebarMenuButtonVariants = cva("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden 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! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate", {
3470
+ variants: {
3471
+ variant: {
3472
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
3473
+ outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
3474
+ },
3475
+ size: {
3476
+ default: "h-8 text-sm",
3477
+ sm: "h-7 text-xs",
3478
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
3479
+ }
3480
+ },
3481
+ defaultVariants: {
3482
+ variant: "default",
3483
+ size: "default"
3484
+ }
3485
+ });
3486
+ function SidebarMenuButton({ render, isActive = false, variant = "default", size = "default", tooltip, className, ...props }) {
3487
+ const { isMobile, state } = useSidebar();
3488
+ const comp = useRender({
3489
+ defaultTagName: "button",
3490
+ props: mergeProps({ className: cn(sidebarMenuButtonVariants({
3491
+ variant,
3492
+ size
3493
+ }), className) }, props),
3494
+ render: !tooltip ? render : /* @__PURE__ */ jsx(TooltipTrigger, { render }),
3495
+ state: {
3496
+ slot: "sidebar-menu-button",
3497
+ sidebar: "menu-button",
3498
+ size,
3499
+ active: isActive
3500
+ }
3501
+ });
3502
+ if (!tooltip) return comp;
3503
+ if (typeof tooltip === "string") tooltip = { children: tooltip };
3504
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [comp, /* @__PURE__ */ jsx(TooltipContent, {
3505
+ side: "right",
3506
+ align: "center",
3507
+ hidden: state !== "collapsed" || isMobile,
3508
+ ...tooltip
3509
+ })] });
3510
+ }
3511
+ function SidebarMenuAction({ className, render, showOnHover = false, ...props }) {
3512
+ return useRender({
3513
+ defaultTagName: "button",
3514
+ props: mergeProps({ className: cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0", className) }, props),
3515
+ render,
3516
+ state: {
3517
+ slot: "sidebar-menu-action",
3518
+ sidebar: "menu-action"
3519
+ }
3520
+ });
3521
+ }
3522
+ function SidebarMenuBadge({ className, ...props }) {
3523
+ return /* @__PURE__ */ jsx("div", {
3524
+ "data-slot": "sidebar-menu-badge",
3525
+ "data-sidebar": "menu-badge",
3526
+ className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground", className),
3527
+ ...props
3528
+ });
3529
+ }
3530
+ function SidebarMenuSkeleton({ className, showIcon = false, ...props }) {
3531
+ const [width] = React.useState(() => {
3532
+ return `${Math.floor(Math.random() * 40) + 50}%`;
3533
+ });
3534
+ return /* @__PURE__ */ jsxs("div", {
3535
+ "data-slot": "sidebar-menu-skeleton",
3536
+ "data-sidebar": "menu-skeleton",
3537
+ className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
3538
+ ...props,
3539
+ children: [showIcon && /* @__PURE__ */ jsx(Skeleton, {
3540
+ className: "size-4 rounded-md",
3541
+ "data-sidebar": "menu-skeleton-icon"
3542
+ }), /* @__PURE__ */ jsx(Skeleton, {
3543
+ className: "h-4 max-w-(--skeleton-width) flex-1",
3544
+ "data-sidebar": "menu-skeleton-text",
3545
+ style: { "--skeleton-width": width }
3546
+ })]
3547
+ });
3548
+ }
3549
+ function SidebarMenuSub({ className, ...props }) {
3550
+ return /* @__PURE__ */ jsx("ul", {
3551
+ "data-slot": "sidebar-menu-sub",
3552
+ "data-sidebar": "menu-sub",
3553
+ className: cn("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", className),
3554
+ ...props
3555
+ });
3556
+ }
3557
+ function SidebarMenuSubItem({ className, ...props }) {
3558
+ return /* @__PURE__ */ jsx("li", {
3559
+ "data-slot": "sidebar-menu-sub-item",
3560
+ "data-sidebar": "menu-sub-item",
3561
+ className: cn("group/menu-sub-item relative", className),
3562
+ ...props
3563
+ });
3564
+ }
3565
+ function SidebarMenuSubButton({ render, size = "md", isActive = false, className, ...props }) {
3566
+ return useRender({
3567
+ defaultTagName: "a",
3568
+ props: mergeProps({ className: cn("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground", className) }, props),
3569
+ render,
3570
+ state: {
3571
+ slot: "sidebar-menu-sub-button",
3572
+ sidebar: "menu-sub-button",
3573
+ size,
3574
+ active: isActive
3575
+ }
3576
+ });
3577
+ }
3578
+ //#endregion
3579
+ //#region src/components/ui/slider.tsx
3580
+ function Slider({ className, defaultValue, value, min = 0, max = 100, ...props }) {
3581
+ const _values = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max];
3582
+ return /* @__PURE__ */ jsx(Slider$1.Root, {
3583
+ className: cn("data-horizontal:w-full data-vertical:h-full", className),
3584
+ "data-slot": "slider",
3585
+ defaultValue,
3586
+ value,
3587
+ min,
3588
+ max,
3589
+ thumbAlignment: "edge",
3590
+ ...props,
3591
+ children: /* @__PURE__ */ jsxs(Slider$1.Control, {
3592
+ className: "relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col",
3593
+ children: [/* @__PURE__ */ jsx(Slider$1.Track, {
3594
+ "data-slot": "slider-track",
3595
+ className: "relative grow overflow-hidden rounded-full bg-muted select-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1",
3596
+ children: /* @__PURE__ */ jsx(Slider$1.Indicator, {
3597
+ "data-slot": "slider-range",
3598
+ className: "bg-primary select-none data-horizontal:h-full data-vertical:w-full"
3599
+ })
3600
+ }), Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx(Slider$1.Thumb, {
3601
+ "data-slot": "slider-thumb",
3602
+ className: "relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50"
3603
+ }, index))]
3604
+ })
3605
+ });
3606
+ }
3607
+ //#endregion
3608
+ //#region src/components/ui/spinner.tsx
3609
+ function Spinner({ className, ...props }) {
3610
+ return /* @__PURE__ */ jsx(Loader2Icon, {
3611
+ "data-slot": "spinner",
3612
+ role: "status",
3613
+ "aria-label": "Loading",
3614
+ className: cn("size-4 animate-spin", className),
3615
+ ...props
3616
+ });
3617
+ }
3618
+ //#endregion
3619
+ //#region src/components/ui/switch.tsx
3620
+ function Switch({ className, size = "default", ...props }) {
3621
+ return /* @__PURE__ */ jsx(Switch$1.Root, {
3622
+ "data-slot": "switch",
3623
+ "data-size": size,
3624
+ className: cn("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
3625
+ ...props,
3626
+ children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
3627
+ "data-slot": "switch-thumb",
3628
+ className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"
3629
+ })
3630
+ });
3631
+ }
3632
+ //#endregion
3633
+ //#region src/components/ui/table.tsx
3634
+ function Table({ className, ...props }) {
3635
+ return /* @__PURE__ */ jsx("div", {
3636
+ "data-slot": "table-container",
3637
+ className: "relative w-full overflow-x-auto",
3638
+ children: /* @__PURE__ */ jsx("table", {
3639
+ "data-slot": "table",
3640
+ className: cn("w-full caption-bottom text-sm", className),
3641
+ ...props
3642
+ })
3643
+ });
3644
+ }
3645
+ function TableHeader({ className, ...props }) {
3646
+ return /* @__PURE__ */ jsx("thead", {
3647
+ "data-slot": "table-header",
3648
+ className: cn("[&_tr]:border-b", className),
3649
+ ...props
3650
+ });
3651
+ }
3652
+ function TableBody({ className, ...props }) {
3653
+ return /* @__PURE__ */ jsx("tbody", {
3654
+ "data-slot": "table-body",
3655
+ className: cn("[&_tr:last-child]:border-0", className),
3656
+ ...props
3657
+ });
3658
+ }
3659
+ function TableFooter({ className, ...props }) {
3660
+ return /* @__PURE__ */ jsx("tfoot", {
3661
+ "data-slot": "table-footer",
3662
+ className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
3663
+ ...props
3664
+ });
3665
+ }
3666
+ function TableRow({ className, ...props }) {
3667
+ return /* @__PURE__ */ jsx("tr", {
3668
+ "data-slot": "table-row",
3669
+ className: cn("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted", className),
3670
+ ...props
3671
+ });
3672
+ }
3673
+ function TableHead({ className, ...props }) {
3674
+ return /* @__PURE__ */ jsx("th", {
3675
+ "data-slot": "table-head",
3676
+ className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className),
3677
+ ...props
3678
+ });
3679
+ }
3680
+ function TableCell({ className, ...props }) {
3681
+ return /* @__PURE__ */ jsx("td", {
3682
+ "data-slot": "table-cell",
3683
+ className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
3684
+ ...props
3685
+ });
3686
+ }
3687
+ function TableCaption({ className, ...props }) {
3688
+ return /* @__PURE__ */ jsx("caption", {
3689
+ "data-slot": "table-caption",
3690
+ className: cn("mt-4 text-sm text-muted-foreground", className),
3691
+ ...props
3692
+ });
3693
+ }
3694
+ //#endregion
3695
+ //#region src/components/ui/tabs.tsx
3696
+ function Tabs({ className, orientation = "horizontal", ...props }) {
3697
+ return /* @__PURE__ */ jsx(Tabs$1.Root, {
3698
+ "data-slot": "tabs",
3699
+ "data-orientation": orientation,
3700
+ className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className),
3701
+ ...props
3702
+ });
3703
+ }
3704
+ const tabsListVariants = cva("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", {
3705
+ variants: { variant: {
3706
+ default: "bg-muted",
3707
+ line: "gap-1 bg-transparent"
3708
+ } },
3709
+ defaultVariants: { variant: "default" }
3710
+ });
3711
+ function TabsList({ className, variant = "default", ...props }) {
3712
+ return /* @__PURE__ */ jsx(Tabs$1.List, {
3713
+ "data-slot": "tabs-list",
3714
+ "data-variant": variant,
3715
+ className: cn(tabsListVariants({ variant }), className),
3716
+ ...props
3717
+ });
3718
+ }
3719
+ function TabsTrigger({ className, ...props }) {
3720
+ return /* @__PURE__ */ jsx(Tabs$1.Tab, {
3721
+ "data-slot": "tabs-trigger",
3722
+ className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className),
3723
+ ...props
3724
+ });
3725
+ }
3726
+ function TabsContent({ className, ...props }) {
3727
+ return /* @__PURE__ */ jsx(Tabs$1.Panel, {
3728
+ "data-slot": "tabs-content",
3729
+ className: cn("flex-1 text-sm outline-none", className),
3730
+ ...props
3731
+ });
3732
+ }
3733
+ //#endregion
3734
+ //#region src/components/ui/toast.tsx
3735
+ const toast = Toast$1.createToastManager();
3736
+ function ToastProvider({ ...props }) {
3737
+ return /* @__PURE__ */ jsx(Toast$1.Provider, { ...props });
3738
+ }
3739
+ function ToastPortal({ ...props }) {
3740
+ return /* @__PURE__ */ jsx(Toast$1.Portal, {
3741
+ "data-slot": "toast-portal",
3742
+ ...props
3743
+ });
3744
+ }
3745
+ function ToastViewport({ className, ...props }) {
3746
+ return /* @__PURE__ */ jsx(Toast$1.Viewport, {
3747
+ "data-slot": "toast-viewport",
3748
+ className: cn("pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full", className),
3749
+ ...props
3750
+ });
3751
+ }
3752
+ function Toast({ className, ...props }) {
3753
+ return /* @__PURE__ */ jsx(Toast$1.Root, {
3754
+ "data-slot": "toast",
3755
+ className: cn("group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]", "h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]", "after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']", "data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]", "data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]", "[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]", "data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", "data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", className),
3756
+ ...props
3757
+ });
3758
+ }
3759
+ function ToastContent({ className, ...props }) {
3760
+ return /* @__PURE__ */ jsx(Toast$1.Content, {
3761
+ "data-slot": "toast-content",
3762
+ className: cn("flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100", className),
3763
+ ...props
3764
+ });
3765
+ }
3766
+ function ToastTitle({ className, ...props }) {
3767
+ return /* @__PURE__ */ jsx(Toast$1.Title, {
3768
+ "data-slot": "toast-title",
3769
+ className: cn("text-sm font-medium", className),
3770
+ ...props
3771
+ });
3772
+ }
3773
+ function ToastDescription({ className, ...props }) {
3774
+ return /* @__PURE__ */ jsx(Toast$1.Description, {
3775
+ "data-slot": "toast-description",
3776
+ className: cn("text-sm text-muted-foreground", className),
3777
+ ...props
3778
+ });
3779
+ }
3780
+ function ToastAction({ className, render = /* @__PURE__ */ jsx(Button, {
3781
+ variant: "outline",
3782
+ size: "sm"
3783
+ }), ...props }) {
3784
+ return /* @__PURE__ */ jsx(Toast$1.Action, {
3785
+ "data-slot": "toast-action",
3786
+ render,
3787
+ className: cn("shrink-0", className),
3788
+ ...props
3789
+ });
3790
+ }
3791
+ function ToastClose({ className, children, render = /* @__PURE__ */ jsx(Button, {
3792
+ variant: "ghost",
3793
+ size: "icon-sm"
3794
+ }), ...props }) {
3795
+ return /* @__PURE__ */ jsx(Toast$1.Close, {
3796
+ "data-slot": "toast-close",
3797
+ "aria-label": "Close toast",
3798
+ render,
3799
+ className: cn("relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground", className),
3800
+ ...props,
3801
+ children: children ?? /* @__PURE__ */ jsx(XIcon, { "aria-hidden": "true" })
3802
+ });
3803
+ }
3804
+ function ToastIcon({ type }) {
3805
+ let icon = null;
3806
+ if (type === "success") icon = /* @__PURE__ */ jsx(CircleCheckIcon, { "aria-hidden": "true" });
3807
+ if (type === "info") icon = /* @__PURE__ */ jsx(InfoIcon, { "aria-hidden": "true" });
3808
+ if (type === "warning") icon = /* @__PURE__ */ jsx(TriangleAlertIcon, { "aria-hidden": "true" });
3809
+ if (type === "error") icon = /* @__PURE__ */ jsx(OctagonXIcon, {
3810
+ className: "text-destructive",
3811
+ "aria-hidden": "true"
3812
+ });
3813
+ if (type === "loading") icon = /* @__PURE__ */ jsx(Loader2Icon, {
3814
+ className: "animate-spin",
3815
+ "aria-hidden": "true"
3816
+ });
3817
+ if (!icon) return null;
3818
+ return /* @__PURE__ */ jsx("span", {
3819
+ "data-slot": "toast-icon",
3820
+ className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
3821
+ children: icon
3822
+ });
3823
+ }
3824
+ function ToastList() {
3825
+ const { toasts } = Toast$1.useToastManager();
3826
+ return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast, {
3827
+ toast: toastItem,
3828
+ children: /* @__PURE__ */ jsxs(ToastContent, { children: [
3829
+ /* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
3830
+ /* @__PURE__ */ jsxs("div", {
3831
+ className: "flex min-w-0 flex-1 flex-col gap-1",
3832
+ children: [/* @__PURE__ */ jsx(ToastTitle, {}), /* @__PURE__ */ jsx(ToastDescription, {})]
3833
+ }),
3834
+ /* @__PURE__ */ jsx(ToastAction, {}),
3835
+ /* @__PURE__ */ jsx(ToastClose, {})
3836
+ ] })
3837
+ }, toastItem.id));
3838
+ }
3839
+ function Toaster({ children, toastManager = toast, ...props }) {
3840
+ return /* @__PURE__ */ jsxs(ToastProvider, {
3841
+ toastManager,
3842
+ ...props,
3843
+ children: [children, /* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })]
3844
+ });
3845
+ }
3846
+ const createToastManager = Toast$1.createToastManager;
3847
+ const useToastManager = Toast$1.useToastManager;
3848
+ //#endregion
3849
+ //#region src/components/ui/toggle.tsx
3850
+ const toggleVariants = cva("group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
3851
+ variants: {
3852
+ variant: {
3853
+ default: "bg-transparent",
3854
+ outline: "border border-input bg-transparent hover:bg-muted"
3855
+ },
3856
+ size: {
3857
+ default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
3858
+ sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
3859
+ lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"
3860
+ }
3861
+ },
3862
+ defaultVariants: {
3863
+ variant: "default",
3864
+ size: "default"
3865
+ }
3866
+ });
3867
+ function Toggle({ className, variant = "default", size = "default", ...props }) {
3868
+ return /* @__PURE__ */ jsx(Toggle$1, {
3869
+ "data-slot": "toggle",
3870
+ className: cn(toggleVariants({
3871
+ variant,
3872
+ size,
3873
+ className
3874
+ })),
3875
+ ...props
3876
+ });
3877
+ }
3878
+ //#endregion
3879
+ //#region src/components/ui/toggle-group.tsx
3880
+ const ToggleGroupContext = React.createContext({
3881
+ size: "default",
3882
+ variant: "default",
3883
+ spacing: 2,
3884
+ orientation: "horizontal"
3885
+ });
3886
+ function ToggleGroup({ className, variant, size, spacing = 2, orientation = "horizontal", children, ...props }) {
3887
+ return /* @__PURE__ */ jsx(ToggleGroup$1, {
3888
+ "data-slot": "toggle-group",
3889
+ "data-variant": variant,
3890
+ "data-size": size,
3891
+ "data-spacing": spacing,
3892
+ "data-orientation": orientation,
3893
+ style: { "--gap": spacing },
3894
+ className: cn("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch", className),
3895
+ ...props,
3896
+ children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, {
3897
+ value: {
3898
+ variant,
3899
+ size,
3900
+ spacing,
3901
+ orientation
3902
+ },
3903
+ children
3904
+ })
3905
+ });
3906
+ }
3907
+ function ToggleGroupItem({ className, children, variant = "default", size = "default", ...props }) {
3908
+ const context = React.useContext(ToggleGroupContext);
3909
+ return /* @__PURE__ */ jsx(Toggle$1, {
3910
+ "data-slot": "toggle-group-item",
3911
+ "data-variant": context.variant || variant,
3912
+ "data-size": context.size || size,
3913
+ "data-spacing": context.spacing,
3914
+ className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", toggleVariants({
3915
+ variant: context.variant || variant,
3916
+ size: context.size || size
3917
+ }), className),
3918
+ ...props,
3919
+ children
3920
+ });
3921
+ }
3922
+ //#endregion
3923
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, 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, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonGroupVariants, buttonVariants, createToastManager, markerVariants, navigationMenuTriggerStyle, tabsListVariants, toast, toggleVariants, useCarousel, useComboboxAnchor, useDirection, useIsMobile, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useToastManager };