@e-infra/design-system 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +2 -68
  2. package/package.json +4 -2
  3. package/dist/index.cjs.js +0 -4462
  4. package/dist/index.cjs.js.map +0 -1
  5. package/dist/index.es.js +0 -4423
  6. package/dist/index.es.js.map +0 -1
  7. package/dist/setup.css +0 -247
  8. package/dist/types/components/compounds/FeedbackForm.d.ts +0 -41
  9. package/dist/types/components/compounds/FeedbackForm.d.ts.map +0 -1
  10. package/dist/types/components/compounds/cookies_banner.d.ts +0 -15
  11. package/dist/types/components/compounds/cookies_banner.d.ts.map +0 -1
  12. package/dist/types/components/foundations/index.d.ts +0 -2
  13. package/dist/types/components/foundations/index.d.ts.map +0 -1
  14. package/dist/types/components/foundations/typography.d.ts +0 -16
  15. package/dist/types/components/foundations/typography.d.ts.map +0 -1
  16. package/dist/types/components/index.d.ts +0 -44
  17. package/dist/types/components/index.d.ts.map +0 -1
  18. package/dist/types/components/layout/content.d.ts +0 -8
  19. package/dist/types/components/layout/content.d.ts.map +0 -1
  20. package/dist/types/components/layout/footer.d.ts +0 -14
  21. package/dist/types/components/layout/footer.d.ts.map +0 -1
  22. package/dist/types/components/layout/header.d.ts +0 -20
  23. package/dist/types/components/layout/header.d.ts.map +0 -1
  24. package/dist/types/components/layout/index.d.ts +0 -4
  25. package/dist/types/components/layout/index.d.ts.map +0 -1
  26. package/dist/types/components/layout/sidebar.d.ts +0 -70
  27. package/dist/types/components/layout/sidebar.d.ts.map +0 -1
  28. package/dist/types/components/primitives/accordion.d.ts +0 -8
  29. package/dist/types/components/primitives/accordion.d.ts.map +0 -1
  30. package/dist/types/components/primitives/alert-dialog.d.ts +0 -15
  31. package/dist/types/components/primitives/alert-dialog.d.ts.map +0 -1
  32. package/dist/types/components/primitives/alert.d.ts +0 -10
  33. package/dist/types/components/primitives/alert.d.ts.map +0 -1
  34. package/dist/types/components/primitives/aspect-ratio.d.ts +0 -4
  35. package/dist/types/components/primitives/aspect-ratio.d.ts.map +0 -1
  36. package/dist/types/components/primitives/avatar.d.ts +0 -7
  37. package/dist/types/components/primitives/avatar.d.ts.map +0 -1
  38. package/dist/types/components/primitives/badge.d.ts +0 -10
  39. package/dist/types/components/primitives/badge.d.ts.map +0 -1
  40. package/dist/types/components/primitives/breadcrumb.d.ts +0 -12
  41. package/dist/types/components/primitives/breadcrumb.d.ts.map +0 -1
  42. package/dist/types/components/primitives/button.d.ts +0 -11
  43. package/dist/types/components/primitives/button.d.ts.map +0 -1
  44. package/dist/types/components/primitives/calendar.d.ts +0 -9
  45. package/dist/types/components/primitives/calendar.d.ts.map +0 -1
  46. package/dist/types/components/primitives/card.d.ts +0 -10
  47. package/dist/types/components/primitives/card.d.ts.map +0 -1
  48. package/dist/types/components/primitives/carousel.d.ts +0 -20
  49. package/dist/types/components/primitives/carousel.d.ts.map +0 -1
  50. package/dist/types/components/primitives/chart.d.ts +0 -65
  51. package/dist/types/components/primitives/chart.d.ts.map +0 -1
  52. package/dist/types/components/primitives/checkbox.d.ts +0 -5
  53. package/dist/types/components/primitives/checkbox.d.ts.map +0 -1
  54. package/dist/types/components/primitives/collapsible.d.ts +0 -6
  55. package/dist/types/components/primitives/collapsible.d.ts.map +0 -1
  56. package/dist/types/components/primitives/command.d.ts +0 -19
  57. package/dist/types/components/primitives/command.d.ts.map +0 -1
  58. package/dist/types/components/primitives/context-menu.d.ts +0 -26
  59. package/dist/types/components/primitives/context-menu.d.ts.map +0 -1
  60. package/dist/types/components/primitives/dialog.d.ts +0 -16
  61. package/dist/types/components/primitives/dialog.d.ts.map +0 -1
  62. package/dist/types/components/primitives/dropdown-menu.d.ts +0 -26
  63. package/dist/types/components/primitives/dropdown-menu.d.ts.map +0 -1
  64. package/dist/types/components/primitives/form.d.ts +0 -25
  65. package/dist/types/components/primitives/form.d.ts.map +0 -1
  66. package/dist/types/components/primitives/input.d.ts +0 -4
  67. package/dist/types/components/primitives/input.d.ts.map +0 -1
  68. package/dist/types/components/primitives/label.d.ts +0 -5
  69. package/dist/types/components/primitives/label.d.ts.map +0 -1
  70. package/dist/types/components/primitives/menubar.d.ts +0 -27
  71. package/dist/types/components/primitives/menubar.d.ts.map +0 -1
  72. package/dist/types/components/primitives/navigation-menu.d.ts +0 -15
  73. package/dist/types/components/primitives/navigation-menu.d.ts.map +0 -1
  74. package/dist/types/components/primitives/pagination.d.ts +0 -14
  75. package/dist/types/components/primitives/pagination.d.ts.map +0 -1
  76. package/dist/types/components/primitives/panel.d.ts +0 -9
  77. package/dist/types/components/primitives/panel.d.ts.map +0 -1
  78. package/dist/types/components/primitives/popover.d.ts +0 -8
  79. package/dist/types/components/primitives/popover.d.ts.map +0 -1
  80. package/dist/types/components/primitives/progress.d.ts +0 -5
  81. package/dist/types/components/primitives/progress.d.ts.map +0 -1
  82. package/dist/types/components/primitives/radio-group.d.ts +0 -6
  83. package/dist/types/components/primitives/radio-group.d.ts.map +0 -1
  84. package/dist/types/components/primitives/resizable.d.ts +0 -9
  85. package/dist/types/components/primitives/resizable.d.ts.map +0 -1
  86. package/dist/types/components/primitives/scroll-area.d.ts +0 -6
  87. package/dist/types/components/primitives/scroll-area.d.ts.map +0 -1
  88. package/dist/types/components/primitives/select.d.ts +0 -16
  89. package/dist/types/components/primitives/select.d.ts.map +0 -1
  90. package/dist/types/components/primitives/separator.d.ts +0 -5
  91. package/dist/types/components/primitives/separator.d.ts.map +0 -1
  92. package/dist/types/components/primitives/sheet.d.ts +0 -14
  93. package/dist/types/components/primitives/sheet.d.ts.map +0 -1
  94. package/dist/types/components/primitives/skeleton.d.ts +0 -3
  95. package/dist/types/components/primitives/skeleton.d.ts.map +0 -1
  96. package/dist/types/components/primitives/slider.d.ts +0 -5
  97. package/dist/types/components/primitives/slider.d.ts.map +0 -1
  98. package/dist/types/components/primitives/sonner.d.ts +0 -4
  99. package/dist/types/components/primitives/sonner.d.ts.map +0 -1
  100. package/dist/types/components/primitives/stepper.d.ts +0 -42
  101. package/dist/types/components/primitives/stepper.d.ts.map +0 -1
  102. package/dist/types/components/primitives/switch.d.ts +0 -5
  103. package/dist/types/components/primitives/switch.d.ts.map +0 -1
  104. package/dist/types/components/primitives/table.d.ts +0 -11
  105. package/dist/types/components/primitives/table.d.ts.map +0 -1
  106. package/dist/types/components/primitives/tabs.d.ts +0 -8
  107. package/dist/types/components/primitives/tabs.d.ts.map +0 -1
  108. package/dist/types/components/primitives/textarea.d.ts +0 -4
  109. package/dist/types/components/primitives/textarea.d.ts.map +0 -1
  110. package/dist/types/components/primitives/toggle-group.d.ts +0 -10
  111. package/dist/types/components/primitives/toggle-group.d.ts.map +0 -1
  112. package/dist/types/components/primitives/toggle.d.ts +0 -10
  113. package/dist/types/components/primitives/toggle.d.ts.map +0 -1
  114. package/dist/types/components/primitives/tooltip.d.ts +0 -8
  115. package/dist/types/components/primitives/tooltip.d.ts.map +0 -1
  116. package/dist/types/hooks/index.d.ts +0 -2
  117. package/dist/types/hooks/index.d.ts.map +0 -1
  118. package/dist/types/hooks/use-mobile.d.ts +0 -2
  119. package/dist/types/hooks/use-mobile.d.ts.map +0 -1
  120. package/dist/types/index.d.ts +0 -4
  121. package/dist/types/index.d.ts.map +0 -1
  122. package/dist/types/lib/utils.d.ts +0 -3
  123. package/dist/types/lib/utils.d.ts.map +0 -1
package/dist/index.es.js DELETED
@@ -1,4423 +0,0 @@
1
- "use client";
2
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
5
- import { ChevronDownIcon, MoreHorizontal, ChevronRight, ChevronLeftIcon, ChevronRightIcon, ArrowRight, ArrowLeft, CheckIcon, XIcon, CircleIcon, ChevronUpIcon, PanelLeftIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon, ChevronLeft, PanelRight, Clock, Mail, Phone, MoveRight, MessageCircle, X, AlertCircle, Loader2, CheckCircle2 } from "lucide-react";
6
- import { clsx } from "clsx";
7
- import { twMerge } from "tailwind-merge";
8
- import { cva } from "class-variance-authority";
9
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
10
- import { Slot } from "@radix-ui/react-slot";
11
- import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
12
- import * as AvatarPrimitive from "@radix-ui/react-avatar";
13
- import { getDefaultClassNames, DayPicker } from "react-day-picker";
14
- import useEmblaCarousel from "embla-carousel-react";
15
- import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
16
- import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
17
- import * as DialogPrimitive from "@radix-ui/react-dialog";
18
- import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
19
- import { FormProvider, Controller, useFormContext, useFormState } from "react-hook-form";
20
- import * as LabelPrimitive from "@radix-ui/react-label";
21
- import * as MenubarPrimitive from "@radix-ui/react-menubar";
22
- import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
23
- import * as ProgressPrimitive from "@radix-ui/react-progress";
24
- import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
25
- import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
26
- import * as SelectPrimitive from "@radix-ui/react-select";
27
- import * as SeparatorPrimitive from "@radix-ui/react-separator";
28
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
29
- import * as SliderPrimitive from "@radix-ui/react-slider";
30
- import { useTheme } from "next-themes";
31
- import { Toaster as Toaster$1 } from "sonner";
32
- import * as SwitchPrimitive from "@radix-ui/react-switch";
33
- import * as TabsPrimitive from "@radix-ui/react-tabs";
34
- import * as TogglePrimitive from "@radix-ui/react-toggle";
35
- import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
36
- function cn(...inputs) {
37
- return twMerge(clsx(inputs));
38
- }
39
- function Accordion({
40
- ...props
41
- }) {
42
- return /* @__PURE__ */ jsx(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
43
- }
44
- function AccordionItem({
45
- className,
46
- ...props
47
- }) {
48
- return /* @__PURE__ */ jsx(
49
- AccordionPrimitive.Item,
50
- {
51
- "data-slot": "accordion-item",
52
- className: cn("border-b last:border-b-0", className),
53
- ...props
54
- }
55
- );
56
- }
57
- function AccordionTrigger({
58
- className,
59
- children,
60
- ...props
61
- }) {
62
- return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
63
- AccordionPrimitive.Trigger,
64
- {
65
- "data-slot": "accordion-trigger",
66
- className: cn(
67
- "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
68
- className
69
- ),
70
- ...props,
71
- children: [
72
- children,
73
- /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" })
74
- ]
75
- }
76
- ) });
77
- }
78
- function AccordionContent({
79
- className,
80
- children,
81
- ...props
82
- }) {
83
- return /* @__PURE__ */ jsx(
84
- AccordionPrimitive.Content,
85
- {
86
- "data-slot": "accordion-content",
87
- className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
88
- ...props,
89
- children: /* @__PURE__ */ jsx("div", { className: cn("pt-0 pb-4", className), children })
90
- }
91
- );
92
- }
93
- const alertVariants = cva(
94
- "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
95
- {
96
- variants: {
97
- variant: {
98
- default: "bg-tertiary/50 border-tertiary text-panel-foreground",
99
- success: "bg-success/50 border-success text-success-foreground [&>svg]:text-success-foreground",
100
- warning: "bg-warning/50 border-warning text-warning-foreground [&>svg]:text-warning-foreground",
101
- error: "text-error-foreground bg-error/50 border-error [&>svg]:text-current *:data-[slot=alert-description]:text-error-foreground"
102
- }
103
- },
104
- defaultVariants: {
105
- variant: "default"
106
- }
107
- }
108
- );
109
- function Alert({
110
- className,
111
- variant,
112
- ...props
113
- }) {
114
- return /* @__PURE__ */ jsx(
115
- "div",
116
- {
117
- "data-slot": "alert",
118
- role: "alert",
119
- className: cn(alertVariants({ variant }), className),
120
- ...props
121
- }
122
- );
123
- }
124
- function AlertTitle({ className, ...props }) {
125
- return /* @__PURE__ */ jsx(
126
- "div",
127
- {
128
- "data-slot": "alert-title",
129
- className: cn(
130
- "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
131
- className
132
- ),
133
- ...props
134
- }
135
- );
136
- }
137
- function AlertDescription({
138
- className,
139
- ...props
140
- }) {
141
- return /* @__PURE__ */ jsx(
142
- "div",
143
- {
144
- "data-slot": "alert-description",
145
- className: cn(
146
- "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
147
- className
148
- ),
149
- ...props
150
- }
151
- );
152
- }
153
- const buttonVariants = cva(
154
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all duration-500 cursor-pointer hover:scale-105 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error",
155
- {
156
- variants: {
157
- variant: {
158
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
159
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
160
- tertiary: "bg-tertiary text-tertiary-foreground hover:bg-tertiary/80",
161
- info: "bg-info text-info-foreground hover:bg-info/90 focus-visible:ring-info/20 dark:focus-visible:ring-info/40",
162
- success: "bg-success text-success-foreground hover:bg-success/90 focus-visible:ring-success/20 dark:focus-visible:ring-success/40",
163
- warning: "bg-warning text-warning-foreground hover:bg-warning/90 focus-visible:ring-warning/20 dark:focus-visible:ring-warning/40",
164
- error: "bg-error text-error-foreground hover:bg-error/90 focus-visible:ring-error/20 dark:focus-visible:ring-error/40 dark:bg-error/60",
165
- outline: "border bg-background shadow-xs hover:bg-tertiary hover:text-tertiary-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
166
- ghost: "hover:bg-tertiary hover:text-tertiary-foreground dark:hover:bg-tertiary/50",
167
- link: "text-primary underline-offset-4 hover:underline",
168
- "animated-underline": "relative text-tertiary-foreground bg-transparent hover:scale-100 after:absolute after:bottom-0 after:left-0 after:h-[2px] after:w-0 after:bg-tertiary-foreground after:transition-all after:duration-300 hover:after:w-full"
169
- },
170
- size: {
171
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
172
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
173
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
174
- icon: "size-9",
175
- "icon-sm": "size-8",
176
- "icon-lg": "size-10"
177
- }
178
- },
179
- defaultVariants: {
180
- variant: "default",
181
- size: "default"
182
- }
183
- }
184
- );
185
- function Button({
186
- className,
187
- variant = "default",
188
- size = "default",
189
- asChild = false,
190
- ...props
191
- }) {
192
- const Comp = asChild ? Slot : "button";
193
- return /* @__PURE__ */ jsx(
194
- Comp,
195
- {
196
- "data-slot": "button",
197
- "data-variant": variant,
198
- "data-size": size,
199
- className: cn(buttonVariants({ variant, size, className })),
200
- ...props
201
- }
202
- );
203
- }
204
- function AlertDialog({
205
- ...props
206
- }) {
207
- return /* @__PURE__ */ jsx(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
208
- }
209
- function AlertDialogTrigger({
210
- ...props
211
- }) {
212
- return /* @__PURE__ */ jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
213
- }
214
- function AlertDialogPortal({
215
- ...props
216
- }) {
217
- return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
218
- }
219
- function AlertDialogOverlay({
220
- className,
221
- ...props
222
- }) {
223
- return /* @__PURE__ */ jsx(
224
- AlertDialogPrimitive.Overlay,
225
- {
226
- "data-slot": "alert-dialog-overlay",
227
- className: cn(
228
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
229
- className
230
- ),
231
- ...props
232
- }
233
- );
234
- }
235
- function AlertDialogContent({
236
- className,
237
- ...props
238
- }) {
239
- return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
240
- /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
241
- /* @__PURE__ */ jsx(
242
- AlertDialogPrimitive.Content,
243
- {
244
- "data-slot": "alert-dialog-content",
245
- className: cn(
246
- "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
247
- className
248
- ),
249
- ...props
250
- }
251
- )
252
- ] });
253
- }
254
- function AlertDialogHeader({
255
- className,
256
- ...props
257
- }) {
258
- return /* @__PURE__ */ jsx(
259
- "div",
260
- {
261
- "data-slot": "alert-dialog-header",
262
- className: cn("flex flex-col gap-2 text-center sm:text-left", className),
263
- ...props
264
- }
265
- );
266
- }
267
- function AlertDialogFooter({
268
- className,
269
- ...props
270
- }) {
271
- return /* @__PURE__ */ jsx(
272
- "div",
273
- {
274
- "data-slot": "alert-dialog-footer",
275
- className: cn(
276
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
277
- className
278
- ),
279
- ...props
280
- }
281
- );
282
- }
283
- function AlertDialogTitle({
284
- className,
285
- ...props
286
- }) {
287
- return /* @__PURE__ */ jsx(
288
- AlertDialogPrimitive.Title,
289
- {
290
- "data-slot": "alert-dialog-title",
291
- className: cn("text-lg font-semibold", className),
292
- ...props
293
- }
294
- );
295
- }
296
- function AlertDialogDescription({
297
- className,
298
- ...props
299
- }) {
300
- return /* @__PURE__ */ jsx(
301
- AlertDialogPrimitive.Description,
302
- {
303
- "data-slot": "alert-dialog-description",
304
- className: cn("text-muted-foreground text-sm", className),
305
- ...props
306
- }
307
- );
308
- }
309
- function AlertDialogAction({
310
- className,
311
- ...props
312
- }) {
313
- return /* @__PURE__ */ jsx(
314
- AlertDialogPrimitive.Action,
315
- {
316
- className: cn(buttonVariants(), className),
317
- ...props
318
- }
319
- );
320
- }
321
- function AlertDialogCancel({
322
- className,
323
- ...props
324
- }) {
325
- return /* @__PURE__ */ jsx(
326
- AlertDialogPrimitive.Cancel,
327
- {
328
- className: cn(buttonVariants({ variant: "outline" }), className),
329
- ...props
330
- }
331
- );
332
- }
333
- function AspectRatio({
334
- ...props
335
- }) {
336
- return /* @__PURE__ */ jsx(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
337
- }
338
- function Avatar({
339
- className,
340
- ...props
341
- }) {
342
- return /* @__PURE__ */ jsx(
343
- AvatarPrimitive.Root,
344
- {
345
- "data-slot": "avatar",
346
- className: cn(
347
- "relative flex size-8 shrink-0 overflow-hidden rounded-full",
348
- className
349
- ),
350
- ...props
351
- }
352
- );
353
- }
354
- function AvatarImage({
355
- className,
356
- ...props
357
- }) {
358
- return /* @__PURE__ */ jsx(
359
- AvatarPrimitive.Image,
360
- {
361
- "data-slot": "avatar-image",
362
- className: cn("aspect-square size-full", className),
363
- ...props
364
- }
365
- );
366
- }
367
- function AvatarFallback({
368
- className,
369
- ...props
370
- }) {
371
- return /* @__PURE__ */ jsx(
372
- AvatarPrimitive.Fallback,
373
- {
374
- "data-slot": "avatar-fallback",
375
- className: cn(
376
- "bg-muted flex size-full items-center justify-center rounded-full",
377
- className
378
- ),
379
- ...props
380
- }
381
- );
382
- }
383
- const badgeVariants = cva(
384
- "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error transition-[color,box-shadow] overflow-hidden",
385
- {
386
- variants: {
387
- variant: {
388
- default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
389
- secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
390
- error: "border-transparent bg-error text-white [a&]:hover:bg-error/90 focus-visible:ring-error/20 dark:focus-visible:ring-error/40 dark:bg-error/60",
391
- outline: "text-foreground [a&]:hover:bg-tertiary [a&]:hover:text-tertiary-foreground"
392
- }
393
- },
394
- defaultVariants: {
395
- variant: "default"
396
- }
397
- }
398
- );
399
- function Badge({
400
- className,
401
- variant,
402
- asChild = false,
403
- ...props
404
- }) {
405
- const Comp = asChild ? Slot : "span";
406
- return /* @__PURE__ */ jsx(
407
- Comp,
408
- {
409
- "data-slot": "badge",
410
- className: cn(badgeVariants({ variant }), className),
411
- ...props
412
- }
413
- );
414
- }
415
- function Breadcrumb({ ...props }) {
416
- return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
417
- }
418
- function BreadcrumbList({ className, ...props }) {
419
- return /* @__PURE__ */ jsx(
420
- "ol",
421
- {
422
- "data-slot": "breadcrumb-list",
423
- className: cn(
424
- "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
425
- className
426
- ),
427
- ...props
428
- }
429
- );
430
- }
431
- function BreadcrumbItem({ className, ...props }) {
432
- return /* @__PURE__ */ jsx(
433
- "li",
434
- {
435
- "data-slot": "breadcrumb-item",
436
- className: cn("inline-flex items-center gap-1.5", className),
437
- ...props
438
- }
439
- );
440
- }
441
- function BreadcrumbLink({
442
- asChild,
443
- className,
444
- ...props
445
- }) {
446
- const Comp = asChild ? Slot : "a";
447
- return /* @__PURE__ */ jsx(
448
- Comp,
449
- {
450
- "data-slot": "breadcrumb-link",
451
- className: cn("hover:text-foreground transition-colors", className),
452
- ...props
453
- }
454
- );
455
- }
456
- function BreadcrumbPage({ className, ...props }) {
457
- return /* @__PURE__ */ jsx(
458
- "span",
459
- {
460
- "data-slot": "breadcrumb-page",
461
- role: "link",
462
- "aria-disabled": "true",
463
- "aria-current": "page",
464
- className: cn("text-foreground font-normal", className),
465
- ...props
466
- }
467
- );
468
- }
469
- function BreadcrumbSeparator({
470
- children,
471
- className,
472
- ...props
473
- }) {
474
- return /* @__PURE__ */ jsx(
475
- "li",
476
- {
477
- "data-slot": "breadcrumb-separator",
478
- role: "presentation",
479
- "aria-hidden": "true",
480
- className: cn("[&>svg]:size-3.5", className),
481
- ...props,
482
- children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
483
- }
484
- );
485
- }
486
- function BreadcrumbEllipsis({
487
- className,
488
- ...props
489
- }) {
490
- return /* @__PURE__ */ jsxs(
491
- "span",
492
- {
493
- "data-slot": "breadcrumb-ellipsis",
494
- role: "presentation",
495
- "aria-hidden": "true",
496
- className: cn("flex size-9 items-center justify-center", className),
497
- ...props,
498
- children: [
499
- /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }),
500
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
501
- ]
502
- }
503
- );
504
- }
505
- function Calendar({
506
- className,
507
- classNames,
508
- showOutsideDays = true,
509
- captionLayout = "label",
510
- buttonVariant = "ghost",
511
- formatters,
512
- components,
513
- ...props
514
- }) {
515
- const defaultClassNames = getDefaultClassNames();
516
- return /* @__PURE__ */ jsx(
517
- DayPicker,
518
- {
519
- showOutsideDays,
520
- className: cn(
521
- "bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
522
- String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
523
- String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
524
- className
525
- ),
526
- captionLayout,
527
- formatters: {
528
- formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
529
- ...formatters
530
- },
531
- classNames: {
532
- root: cn("w-fit", defaultClassNames.root),
533
- months: cn(
534
- "flex gap-4 flex-col md:flex-row relative",
535
- defaultClassNames.months
536
- ),
537
- month: cn("flex flex-col w-full gap-4", defaultClassNames.month),
538
- nav: cn(
539
- "flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
540
- defaultClassNames.nav
541
- ),
542
- button_previous: cn(
543
- buttonVariants({ variant: buttonVariant }),
544
- "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
545
- defaultClassNames.button_previous
546
- ),
547
- button_next: cn(
548
- buttonVariants({ variant: buttonVariant }),
549
- "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
550
- defaultClassNames.button_next
551
- ),
552
- month_caption: cn(
553
- "flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",
554
- defaultClassNames.month_caption
555
- ),
556
- dropdowns: cn(
557
- "w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",
558
- defaultClassNames.dropdowns
559
- ),
560
- dropdown_root: cn(
561
- "relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
562
- defaultClassNames.dropdown_root
563
- ),
564
- dropdown: cn(
565
- "absolute bg-popover inset-0 opacity-0",
566
- defaultClassNames.dropdown
567
- ),
568
- caption_label: cn(
569
- "select-none font-medium",
570
- captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",
571
- defaultClassNames.caption_label
572
- ),
573
- table: "w-full border-collapse",
574
- weekdays: cn("flex", defaultClassNames.weekdays),
575
- weekday: cn(
576
- "text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",
577
- defaultClassNames.weekday
578
- ),
579
- week: cn("flex w-full mt-2", defaultClassNames.week),
580
- week_number_header: cn(
581
- "select-none w-(--cell-size)",
582
- defaultClassNames.week_number_header
583
- ),
584
- week_number: cn(
585
- "text-[0.8rem] select-none text-muted-foreground",
586
- defaultClassNames.week_number
587
- ),
588
- day: cn(
589
- "relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
590
- props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "[&:first-child[data-selected=true]_button]:rounded-l-md",
591
- defaultClassNames.day
592
- ),
593
- range_start: cn(
594
- "rounded-l-md bg-tertiary",
595
- defaultClassNames.range_start
596
- ),
597
- range_middle: cn("rounded-none", defaultClassNames.range_middle),
598
- range_end: cn("rounded-r-md bg-tertiary", defaultClassNames.range_end),
599
- today: cn(
600
- "bg-tertiary text-tertiary-foreground rounded-md data-[selected=true]:rounded-none",
601
- defaultClassNames.today
602
- ),
603
- outside: cn(
604
- "text-muted-foreground aria-selected:text-muted-foreground",
605
- defaultClassNames.outside
606
- ),
607
- disabled: cn(
608
- "text-muted-foreground opacity-50",
609
- defaultClassNames.disabled
610
- ),
611
- hidden: cn("invisible", defaultClassNames.hidden),
612
- ...classNames
613
- },
614
- components: {
615
- Root: ({ className: className2, rootRef, ...props2 }) => {
616
- return /* @__PURE__ */ jsx(
617
- "div",
618
- {
619
- "data-slot": "calendar",
620
- ref: rootRef,
621
- className: cn(className2),
622
- ...props2
623
- }
624
- );
625
- },
626
- Chevron: ({ className: className2, orientation, ...props2 }) => {
627
- if (orientation === "left") {
628
- return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
629
- }
630
- if (orientation === "right") {
631
- return /* @__PURE__ */ jsx(
632
- ChevronRightIcon,
633
- {
634
- className: cn("size-4", className2),
635
- ...props2
636
- }
637
- );
638
- }
639
- return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
640
- },
641
- DayButton: CalendarDayButton,
642
- WeekNumber: ({ children, ...props2 }) => {
643
- return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
644
- },
645
- ...components
646
- },
647
- ...props
648
- }
649
- );
650
- }
651
- function CalendarDayButton({
652
- className,
653
- day,
654
- modifiers,
655
- ...props
656
- }) {
657
- const defaultClassNames = getDefaultClassNames();
658
- const ref = React.useRef(null);
659
- React.useEffect(() => {
660
- if (modifiers.focused) ref.current?.focus();
661
- }, [modifiers.focused]);
662
- return /* @__PURE__ */ jsx(
663
- Button,
664
- {
665
- ref,
666
- variant: "ghost",
667
- size: "icon",
668
- "data-day": day.date.toLocaleDateString(),
669
- "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
670
- "data-range-start": modifiers.range_start,
671
- "data-range-end": modifiers.range_end,
672
- "data-range-middle": modifiers.range_middle,
673
- className: cn(
674
- "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-tertiary data-[range-middle=true]:text-tertiary-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-tertiary-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",
675
- defaultClassNames.day,
676
- className
677
- ),
678
- ...props
679
- }
680
- );
681
- }
682
- function Card({ className, ...props }) {
683
- return /* @__PURE__ */ jsx(
684
- "div",
685
- {
686
- "data-slot": "card",
687
- className: cn(
688
- "bg-card text-card-foreground flex flex-col gap-6 rounded border py-6 shadow-sm hover:bg-primary/12 transition-all duration-500 hover:scale-102",
689
- className
690
- ),
691
- ...props
692
- }
693
- );
694
- }
695
- function CardHeader({ className, ...props }) {
696
- return /* @__PURE__ */ jsx(
697
- "div",
698
- {
699
- "data-slot": "card-header",
700
- className: cn(
701
- "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
702
- className
703
- ),
704
- ...props
705
- }
706
- );
707
- }
708
- function CardTitle({ className, ...props }) {
709
- return /* @__PURE__ */ jsx(
710
- "div",
711
- {
712
- "data-slot": "card-title",
713
- className: cn("leading-none font-semibold", className),
714
- ...props
715
- }
716
- );
717
- }
718
- function CardDescription({ className, ...props }) {
719
- return /* @__PURE__ */ jsx(
720
- "div",
721
- {
722
- "data-slot": "card-description",
723
- className: cn("text-muted-foreground text-sm", className),
724
- ...props
725
- }
726
- );
727
- }
728
- function CardAction({ className, ...props }) {
729
- return /* @__PURE__ */ jsx(
730
- "div",
731
- {
732
- "data-slot": "card-action",
733
- className: cn(
734
- "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
735
- className
736
- ),
737
- ...props
738
- }
739
- );
740
- }
741
- function CardContent({ className, ...props }) {
742
- return /* @__PURE__ */ jsx(
743
- "div",
744
- {
745
- "data-slot": "card-content",
746
- className: cn("px-6", className),
747
- ...props
748
- }
749
- );
750
- }
751
- function CardFooter({ className, ...props }) {
752
- return /* @__PURE__ */ jsx(
753
- "div",
754
- {
755
- "data-slot": "card-footer",
756
- className: cn("flex items-center px-6 [.border-t]:pt-6", className),
757
- ...props
758
- }
759
- );
760
- }
761
- const CarouselContext = React.createContext(null);
762
- function useCarousel() {
763
- const context = React.useContext(CarouselContext);
764
- if (!context) {
765
- throw new Error("useCarousel must be used within a <Carousel />");
766
- }
767
- return context;
768
- }
769
- function Carousel({
770
- orientation = "horizontal",
771
- opts,
772
- setApi,
773
- plugins,
774
- className,
775
- children,
776
- ...props
777
- }) {
778
- const [carouselRef, api] = useEmblaCarousel(
779
- {
780
- ...opts,
781
- axis: orientation === "horizontal" ? "x" : "y"
782
- },
783
- plugins
784
- );
785
- const [canScrollPrev, setCanScrollPrev] = React.useState(false);
786
- const [canScrollNext, setCanScrollNext] = React.useState(false);
787
- const onSelect = React.useCallback((api2) => {
788
- if (!api2) return;
789
- setCanScrollPrev(api2.canScrollPrev());
790
- setCanScrollNext(api2.canScrollNext());
791
- }, []);
792
- const scrollPrev = React.useCallback(() => {
793
- api?.scrollPrev();
794
- }, [api]);
795
- const scrollNext = React.useCallback(() => {
796
- api?.scrollNext();
797
- }, [api]);
798
- const handleKeyDown = React.useCallback(
799
- (event) => {
800
- if (event.key === "ArrowLeft") {
801
- event.preventDefault();
802
- scrollPrev();
803
- } else if (event.key === "ArrowRight") {
804
- event.preventDefault();
805
- scrollNext();
806
- }
807
- },
808
- [scrollPrev, scrollNext]
809
- );
810
- React.useEffect(() => {
811
- if (!api || !setApi) return;
812
- setApi(api);
813
- }, [api, setApi]);
814
- React.useEffect(() => {
815
- if (!api) return;
816
- onSelect(api);
817
- api.on("reInit", onSelect);
818
- api.on("select", onSelect);
819
- return () => {
820
- api?.off("select", onSelect);
821
- };
822
- }, [api, onSelect]);
823
- return /* @__PURE__ */ jsx(
824
- CarouselContext.Provider,
825
- {
826
- value: {
827
- carouselRef,
828
- api,
829
- opts,
830
- orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
831
- scrollPrev,
832
- scrollNext,
833
- canScrollPrev,
834
- canScrollNext
835
- },
836
- children: /* @__PURE__ */ jsx(
837
- "div",
838
- {
839
- onKeyDownCapture: handleKeyDown,
840
- className: cn("relative", className),
841
- role: "region",
842
- "aria-roledescription": "carousel",
843
- "data-slot": "carousel",
844
- ...props,
845
- children
846
- }
847
- )
848
- }
849
- );
850
- }
851
- function CarouselContent({ className, ...props }) {
852
- const { carouselRef, orientation } = useCarousel();
853
- return /* @__PURE__ */ jsx(
854
- "div",
855
- {
856
- ref: carouselRef,
857
- className: "overflow-hidden",
858
- "data-slot": "carousel-content",
859
- children: /* @__PURE__ */ jsx(
860
- "div",
861
- {
862
- className: cn(
863
- "flex",
864
- orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
865
- className
866
- ),
867
- ...props
868
- }
869
- )
870
- }
871
- );
872
- }
873
- function CarouselItem({ className, ...props }) {
874
- const { orientation } = useCarousel();
875
- return /* @__PURE__ */ jsx(
876
- "div",
877
- {
878
- role: "group",
879
- "aria-roledescription": "slide",
880
- "data-slot": "carousel-item",
881
- className: cn(
882
- "min-w-0 shrink-0 grow-0 basis-full",
883
- orientation === "horizontal" ? "pl-4" : "pt-4",
884
- className
885
- ),
886
- ...props
887
- }
888
- );
889
- }
890
- function CarouselPrevious({
891
- className,
892
- variant = "outline",
893
- size = "icon",
894
- ...props
895
- }) {
896
- const { orientation, scrollPrev, canScrollPrev } = useCarousel();
897
- return /* @__PURE__ */ jsxs(
898
- Button,
899
- {
900
- "data-slot": "carousel-previous",
901
- variant,
902
- size,
903
- className: cn(
904
- "absolute size-8 rounded-full",
905
- orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
906
- className
907
- ),
908
- disabled: !canScrollPrev,
909
- onClick: scrollPrev,
910
- ...props,
911
- children: [
912
- /* @__PURE__ */ jsx(ArrowLeft, {}),
913
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
914
- ]
915
- }
916
- );
917
- }
918
- function CarouselNext({
919
- className,
920
- variant = "outline",
921
- size = "icon",
922
- ...props
923
- }) {
924
- const { orientation, scrollNext, canScrollNext } = useCarousel();
925
- return /* @__PURE__ */ jsxs(
926
- Button,
927
- {
928
- "data-slot": "carousel-next",
929
- variant,
930
- size,
931
- className: cn(
932
- "absolute size-8 rounded-full",
933
- orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
934
- className
935
- ),
936
- disabled: !canScrollNext,
937
- onClick: scrollNext,
938
- ...props,
939
- children: [
940
- /* @__PURE__ */ jsx(ArrowRight, {}),
941
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
942
- ]
943
- }
944
- );
945
- }
946
- function Checkbox({
947
- className,
948
- ...props
949
- }) {
950
- return /* @__PURE__ */ jsx(
951
- CheckboxPrimitive.Root,
952
- {
953
- "data-slot": "checkbox",
954
- className: cn(
955
- "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
956
- className
957
- ),
958
- ...props,
959
- children: /* @__PURE__ */ jsx(
960
- CheckboxPrimitive.Indicator,
961
- {
962
- "data-slot": "checkbox-indicator",
963
- className: "grid place-content-center text-current transition-none",
964
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
965
- }
966
- )
967
- }
968
- );
969
- }
970
- function Collapsible({
971
- ...props
972
- }) {
973
- return /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
974
- }
975
- function CollapsibleTrigger({
976
- ...props
977
- }) {
978
- return /* @__PURE__ */ jsx(
979
- CollapsiblePrimitive.CollapsibleTrigger,
980
- {
981
- "data-slot": "collapsible-trigger",
982
- ...props
983
- }
984
- );
985
- }
986
- function CollapsibleContent({
987
- ...props
988
- }) {
989
- return /* @__PURE__ */ jsx(
990
- CollapsiblePrimitive.CollapsibleContent,
991
- {
992
- "data-slot": "collapsible-content",
993
- ...props
994
- }
995
- );
996
- }
997
- function Dialog({
998
- ...props
999
- }) {
1000
- return /* @__PURE__ */ jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
1001
- }
1002
- function DialogTrigger({
1003
- ...props
1004
- }) {
1005
- return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
1006
- }
1007
- function DialogPortal({
1008
- ...props
1009
- }) {
1010
- return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
1011
- }
1012
- function DialogClose({
1013
- ...props
1014
- }) {
1015
- return /* @__PURE__ */ jsx(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
1016
- }
1017
- function DialogOverlay({
1018
- className,
1019
- ...props
1020
- }) {
1021
- return /* @__PURE__ */ jsx(
1022
- DialogPrimitive.Overlay,
1023
- {
1024
- "data-slot": "dialog-overlay",
1025
- className: cn(
1026
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
1027
- className
1028
- ),
1029
- ...props
1030
- }
1031
- );
1032
- }
1033
- function DialogContent({
1034
- className,
1035
- children,
1036
- showCloseButton = true,
1037
- ...props
1038
- }) {
1039
- return /* @__PURE__ */ jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [
1040
- /* @__PURE__ */ jsx(DialogOverlay, {}),
1041
- /* @__PURE__ */ jsxs(
1042
- DialogPrimitive.Content,
1043
- {
1044
- "data-slot": "dialog-content",
1045
- className: cn(
1046
- "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg",
1047
- className
1048
- ),
1049
- ...props,
1050
- children: [
1051
- children,
1052
- showCloseButton && /* @__PURE__ */ jsxs(
1053
- DialogPrimitive.Close,
1054
- {
1055
- "data-slot": "dialog-close",
1056
- className: "ring-offset-background focus:ring-ring data-[state=open]:bg-tertiary data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1057
- children: [
1058
- /* @__PURE__ */ jsx(XIcon, {}),
1059
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
1060
- ]
1061
- }
1062
- )
1063
- ]
1064
- }
1065
- )
1066
- ] });
1067
- }
1068
- function DialogHeader({ className, ...props }) {
1069
- return /* @__PURE__ */ jsx(
1070
- "div",
1071
- {
1072
- "data-slot": "dialog-header",
1073
- className: cn("flex flex-col gap-2 text-center sm:text-left", className),
1074
- ...props
1075
- }
1076
- );
1077
- }
1078
- function DialogFooter({ className, ...props }) {
1079
- return /* @__PURE__ */ jsx(
1080
- "div",
1081
- {
1082
- "data-slot": "dialog-footer",
1083
- className: cn(
1084
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
1085
- className
1086
- ),
1087
- ...props
1088
- }
1089
- );
1090
- }
1091
- function DialogTitle({
1092
- className,
1093
- ...props
1094
- }) {
1095
- return /* @__PURE__ */ jsx(
1096
- DialogPrimitive.Title,
1097
- {
1098
- "data-slot": "dialog-title",
1099
- className: cn("text-lg leading-none font-semibold", className),
1100
- ...props
1101
- }
1102
- );
1103
- }
1104
- function DialogDescription({
1105
- className,
1106
- ...props
1107
- }) {
1108
- return /* @__PURE__ */ jsx(
1109
- DialogPrimitive.Description,
1110
- {
1111
- "data-slot": "dialog-description",
1112
- className: cn("text-muted-foreground text-sm", className),
1113
- ...props
1114
- }
1115
- );
1116
- }
1117
- function DropdownMenu({
1118
- ...props
1119
- }) {
1120
- return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
1121
- }
1122
- function DropdownMenuPortal({
1123
- ...props
1124
- }) {
1125
- return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
1126
- }
1127
- function DropdownMenuTrigger({
1128
- ...props
1129
- }) {
1130
- return /* @__PURE__ */ jsx(
1131
- DropdownMenuPrimitive.Trigger,
1132
- {
1133
- "data-slot": "dropdown-menu-trigger",
1134
- ...props
1135
- }
1136
- );
1137
- }
1138
- function DropdownMenuContent({
1139
- className,
1140
- sideOffset = 4,
1141
- ...props
1142
- }) {
1143
- return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1144
- DropdownMenuPrimitive.Content,
1145
- {
1146
- "data-slot": "dropdown-menu-content",
1147
- sideOffset,
1148
- className: cn(
1149
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
1150
- className
1151
- ),
1152
- ...props
1153
- }
1154
- ) });
1155
- }
1156
- function DropdownMenuGroup({
1157
- ...props
1158
- }) {
1159
- return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
1160
- }
1161
- function DropdownMenuItem({
1162
- className,
1163
- inset,
1164
- variant = "default",
1165
- ...props
1166
- }) {
1167
- return /* @__PURE__ */ jsx(
1168
- DropdownMenuPrimitive.Item,
1169
- {
1170
- "data-slot": "dropdown-menu-item",
1171
- "data-inset": inset,
1172
- "data-variant": variant,
1173
- className: cn(
1174
- "focus:bg-tertiary focus:text-tertiary-foreground data-[variant=error]:text-error data-[variant=error]:focus:bg-error/10 dark:data-[variant=error]:focus:bg-error/20 data-[variant=error]:focus:text-error data-[variant=error]:*:[svg]:!text-error [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1175
- className
1176
- ),
1177
- ...props
1178
- }
1179
- );
1180
- }
1181
- function DropdownMenuCheckboxItem({
1182
- className,
1183
- children,
1184
- checked,
1185
- ...props
1186
- }) {
1187
- return /* @__PURE__ */ jsxs(
1188
- DropdownMenuPrimitive.CheckboxItem,
1189
- {
1190
- "data-slot": "dropdown-menu-checkbox-item",
1191
- className: cn(
1192
- "focus:bg-tertiary focus:text-tertiary-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1193
- className
1194
- ),
1195
- checked,
1196
- ...props,
1197
- children: [
1198
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
1199
- children
1200
- ]
1201
- }
1202
- );
1203
- }
1204
- function DropdownMenuRadioGroup({
1205
- ...props
1206
- }) {
1207
- return /* @__PURE__ */ jsx(
1208
- DropdownMenuPrimitive.RadioGroup,
1209
- {
1210
- "data-slot": "dropdown-menu-radio-group",
1211
- ...props
1212
- }
1213
- );
1214
- }
1215
- function DropdownMenuRadioItem({
1216
- className,
1217
- children,
1218
- ...props
1219
- }) {
1220
- return /* @__PURE__ */ jsxs(
1221
- DropdownMenuPrimitive.RadioItem,
1222
- {
1223
- "data-slot": "dropdown-menu-radio-item",
1224
- className: cn(
1225
- "focus:bg-tertiary focus:text-tertiary-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1226
- className
1227
- ),
1228
- ...props,
1229
- children: [
1230
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
1231
- children
1232
- ]
1233
- }
1234
- );
1235
- }
1236
- function DropdownMenuLabel({
1237
- className,
1238
- inset,
1239
- ...props
1240
- }) {
1241
- return /* @__PURE__ */ jsx(
1242
- DropdownMenuPrimitive.Label,
1243
- {
1244
- "data-slot": "dropdown-menu-label",
1245
- "data-inset": inset,
1246
- className: cn(
1247
- "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
1248
- className
1249
- ),
1250
- ...props
1251
- }
1252
- );
1253
- }
1254
- function DropdownMenuSeparator({
1255
- className,
1256
- ...props
1257
- }) {
1258
- return /* @__PURE__ */ jsx(
1259
- DropdownMenuPrimitive.Separator,
1260
- {
1261
- "data-slot": "dropdown-menu-separator",
1262
- className: cn("bg-border -mx-1 my-1 h-px", className),
1263
- ...props
1264
- }
1265
- );
1266
- }
1267
- function DropdownMenuShortcut({
1268
- className,
1269
- ...props
1270
- }) {
1271
- return /* @__PURE__ */ jsx(
1272
- "span",
1273
- {
1274
- "data-slot": "dropdown-menu-shortcut",
1275
- className: cn(
1276
- "text-muted-foreground ml-auto text-xs tracking-widest",
1277
- className
1278
- ),
1279
- ...props
1280
- }
1281
- );
1282
- }
1283
- function DropdownMenuSub({
1284
- ...props
1285
- }) {
1286
- return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
1287
- }
1288
- function DropdownMenuSubTrigger({
1289
- className,
1290
- inset,
1291
- children,
1292
- ...props
1293
- }) {
1294
- return /* @__PURE__ */ jsxs(
1295
- DropdownMenuPrimitive.SubTrigger,
1296
- {
1297
- "data-slot": "dropdown-menu-sub-trigger",
1298
- "data-inset": inset,
1299
- className: cn(
1300
- "focus:bg-tertiary focus:text-tertiary-foreground data-[state=open]:bg-tertiary data-[state=open]:text-tertiary-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1301
- className
1302
- ),
1303
- ...props,
1304
- children: [
1305
- children,
1306
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })
1307
- ]
1308
- }
1309
- );
1310
- }
1311
- function DropdownMenuSubContent({
1312
- className,
1313
- ...props
1314
- }) {
1315
- return /* @__PURE__ */ jsx(
1316
- DropdownMenuPrimitive.SubContent,
1317
- {
1318
- "data-slot": "dropdown-menu-sub-content",
1319
- className: cn(
1320
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
1321
- className
1322
- ),
1323
- ...props
1324
- }
1325
- );
1326
- }
1327
- function Label({
1328
- className,
1329
- ...props
1330
- }) {
1331
- return /* @__PURE__ */ jsx(
1332
- LabelPrimitive.Root,
1333
- {
1334
- "data-slot": "label",
1335
- className: cn(
1336
- "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",
1337
- className
1338
- ),
1339
- ...props
1340
- }
1341
- );
1342
- }
1343
- const Form = FormProvider;
1344
- const FormFieldContext = React.createContext(
1345
- {}
1346
- );
1347
- const FormField = ({
1348
- ...props
1349
- }) => {
1350
- return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
1351
- };
1352
- const useFormField = () => {
1353
- const fieldContext = React.useContext(FormFieldContext);
1354
- const itemContext = React.useContext(FormItemContext);
1355
- const { getFieldState } = useFormContext();
1356
- const formState = useFormState({ name: fieldContext.name });
1357
- const fieldState = getFieldState(fieldContext.name, formState);
1358
- if (!fieldContext) {
1359
- throw new Error("useFormField should be used within <FormField>");
1360
- }
1361
- const { id } = itemContext;
1362
- return {
1363
- id,
1364
- name: fieldContext.name,
1365
- formItemId: `${id}-form-item`,
1366
- formDescriptionId: `${id}-form-item-description`,
1367
- formMessageId: `${id}-form-item-message`,
1368
- ...fieldState
1369
- };
1370
- };
1371
- const FormItemContext = React.createContext(
1372
- {}
1373
- );
1374
- function FormItem({ className, ...props }) {
1375
- const id = React.useId();
1376
- return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
1377
- "div",
1378
- {
1379
- "data-slot": "form-item",
1380
- className: cn("grid gap-2", className),
1381
- ...props
1382
- }
1383
- ) });
1384
- }
1385
- function FormLabel({
1386
- className,
1387
- ...props
1388
- }) {
1389
- const { error, formItemId } = useFormField();
1390
- return /* @__PURE__ */ jsx(
1391
- Label,
1392
- {
1393
- "data-slot": "form-label",
1394
- "data-error": !!error,
1395
- className: cn("data-[error=true]:text-error", className),
1396
- htmlFor: formItemId,
1397
- ...props
1398
- }
1399
- );
1400
- }
1401
- function FormControl({ ...props }) {
1402
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
1403
- return /* @__PURE__ */ jsx(
1404
- Slot,
1405
- {
1406
- "data-slot": "form-control",
1407
- id: formItemId,
1408
- "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
1409
- "aria-invalid": !!error,
1410
- ...props
1411
- }
1412
- );
1413
- }
1414
- function FormDescription({ className, ...props }) {
1415
- const { formDescriptionId } = useFormField();
1416
- return /* @__PURE__ */ jsx(
1417
- "p",
1418
- {
1419
- "data-slot": "form-description",
1420
- id: formDescriptionId,
1421
- className: cn("text-muted-foreground text-sm", className),
1422
- ...props
1423
- }
1424
- );
1425
- }
1426
- function FormMessage({ className, ...props }) {
1427
- const { error, formMessageId } = useFormField();
1428
- const body = error ? String(error?.message ?? "") : props.children;
1429
- if (!body) {
1430
- return null;
1431
- }
1432
- return /* @__PURE__ */ jsx(
1433
- "p",
1434
- {
1435
- "data-slot": "form-message",
1436
- id: formMessageId,
1437
- className: cn("text-error text-sm", className),
1438
- ...props,
1439
- children: body
1440
- }
1441
- );
1442
- }
1443
- function Input({ className, type, ...props }) {
1444
- return /* @__PURE__ */ jsx(
1445
- "input",
1446
- {
1447
- type,
1448
- "data-slot": "input",
1449
- className: cn(
1450
- "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
1451
- "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
1452
- "aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error",
1453
- className
1454
- ),
1455
- ...props
1456
- }
1457
- );
1458
- }
1459
- function Menubar({
1460
- className,
1461
- ...props
1462
- }) {
1463
- return /* @__PURE__ */ jsx(
1464
- MenubarPrimitive.Root,
1465
- {
1466
- "data-slot": "menubar",
1467
- className: cn(
1468
- "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
1469
- className
1470
- ),
1471
- ...props
1472
- }
1473
- );
1474
- }
1475
- function MenubarMenu({
1476
- ...props
1477
- }) {
1478
- return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
1479
- }
1480
- function MenubarGroup({
1481
- ...props
1482
- }) {
1483
- return /* @__PURE__ */ jsx(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
1484
- }
1485
- function MenubarPortal({
1486
- ...props
1487
- }) {
1488
- return /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
1489
- }
1490
- function MenubarRadioGroup({
1491
- ...props
1492
- }) {
1493
- return /* @__PURE__ */ jsx(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
1494
- }
1495
- function MenubarTrigger({
1496
- className,
1497
- ...props
1498
- }) {
1499
- return /* @__PURE__ */ jsx(
1500
- MenubarPrimitive.Trigger,
1501
- {
1502
- "data-slot": "menubar-trigger",
1503
- className: cn(
1504
- "focus:bg-tertiary focus:text-tertiary-foreground data-[state=open]:bg-tertiary data-[state=open]:text-tertiary-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
1505
- className
1506
- ),
1507
- ...props
1508
- }
1509
- );
1510
- }
1511
- function MenubarContent({
1512
- className,
1513
- align = "start",
1514
- alignOffset = -4,
1515
- sideOffset = 8,
1516
- ...props
1517
- }) {
1518
- return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
1519
- MenubarPrimitive.Content,
1520
- {
1521
- "data-slot": "menubar-content",
1522
- align,
1523
- alignOffset,
1524
- sideOffset,
1525
- className: cn(
1526
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
1527
- className
1528
- ),
1529
- ...props
1530
- }
1531
- ) });
1532
- }
1533
- function MenubarItem({
1534
- className,
1535
- inset,
1536
- variant = "default",
1537
- ...props
1538
- }) {
1539
- return /* @__PURE__ */ jsx(
1540
- MenubarPrimitive.Item,
1541
- {
1542
- "data-slot": "menubar-item",
1543
- "data-inset": inset,
1544
- "data-variant": variant,
1545
- className: cn(
1546
- "focus:bg-tertiary focus:text-tertiary-foreground data-[variant=error]:text-error data-[variant=error]:focus:bg-error/10 dark:data-[variant=error]:focus:bg-error/20 data-[variant=error]:focus:text-error data-[variant=error]:*:[svg]:!text-error [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1547
- className
1548
- ),
1549
- ...props
1550
- }
1551
- );
1552
- }
1553
- function MenubarCheckboxItem({
1554
- className,
1555
- children,
1556
- checked,
1557
- ...props
1558
- }) {
1559
- return /* @__PURE__ */ jsxs(
1560
- MenubarPrimitive.CheckboxItem,
1561
- {
1562
- "data-slot": "menubar-checkbox-item",
1563
- className: cn(
1564
- "focus:bg-tertiary focus:text-tertiary-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1565
- className
1566
- ),
1567
- checked,
1568
- ...props,
1569
- children: [
1570
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
1571
- children
1572
- ]
1573
- }
1574
- );
1575
- }
1576
- function MenubarRadioItem({
1577
- className,
1578
- children,
1579
- ...props
1580
- }) {
1581
- return /* @__PURE__ */ jsxs(
1582
- MenubarPrimitive.RadioItem,
1583
- {
1584
- "data-slot": "menubar-radio-item",
1585
- className: cn(
1586
- "focus:bg-tertiary focus:text-tertiary-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1587
- className
1588
- ),
1589
- ...props,
1590
- children: [
1591
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
1592
- children
1593
- ]
1594
- }
1595
- );
1596
- }
1597
- function MenubarLabel({
1598
- className,
1599
- inset,
1600
- ...props
1601
- }) {
1602
- return /* @__PURE__ */ jsx(
1603
- MenubarPrimitive.Label,
1604
- {
1605
- "data-slot": "menubar-label",
1606
- "data-inset": inset,
1607
- className: cn(
1608
- "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
1609
- className
1610
- ),
1611
- ...props
1612
- }
1613
- );
1614
- }
1615
- function MenubarSeparator({
1616
- className,
1617
- ...props
1618
- }) {
1619
- return /* @__PURE__ */ jsx(
1620
- MenubarPrimitive.Separator,
1621
- {
1622
- "data-slot": "menubar-separator",
1623
- className: cn("bg-border -mx-1 my-1 h-px", className),
1624
- ...props
1625
- }
1626
- );
1627
- }
1628
- function MenubarShortcut({
1629
- className,
1630
- ...props
1631
- }) {
1632
- return /* @__PURE__ */ jsx(
1633
- "span",
1634
- {
1635
- "data-slot": "menubar-shortcut",
1636
- className: cn(
1637
- "text-muted-foreground ml-auto text-xs tracking-widest",
1638
- className
1639
- ),
1640
- ...props
1641
- }
1642
- );
1643
- }
1644
- function MenubarSub({
1645
- ...props
1646
- }) {
1647
- return /* @__PURE__ */ jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
1648
- }
1649
- function MenubarSubTrigger({
1650
- className,
1651
- inset,
1652
- children,
1653
- ...props
1654
- }) {
1655
- return /* @__PURE__ */ jsxs(
1656
- MenubarPrimitive.SubTrigger,
1657
- {
1658
- "data-slot": "menubar-sub-trigger",
1659
- "data-inset": inset,
1660
- className: cn(
1661
- "focus:bg-tertiary focus:text-tertiary-foreground data-[state=open]:bg-tertiary data-[state=open]:text-tertiary-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8",
1662
- className
1663
- ),
1664
- ...props,
1665
- children: [
1666
- children,
1667
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto h-4 w-4" })
1668
- ]
1669
- }
1670
- );
1671
- }
1672
- function MenubarSubContent({
1673
- className,
1674
- ...props
1675
- }) {
1676
- return /* @__PURE__ */ jsx(
1677
- MenubarPrimitive.SubContent,
1678
- {
1679
- "data-slot": "menubar-sub-content",
1680
- className: cn(
1681
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
1682
- className
1683
- ),
1684
- ...props
1685
- }
1686
- );
1687
- }
1688
- function NavigationMenu({
1689
- className,
1690
- children,
1691
- viewport = true,
1692
- ...props
1693
- }) {
1694
- return /* @__PURE__ */ jsxs(
1695
- NavigationMenuPrimitive.Root,
1696
- {
1697
- "data-slot": "navigation-menu",
1698
- "data-viewport": viewport,
1699
- className: cn(
1700
- "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
1701
- className
1702
- ),
1703
- ...props,
1704
- children: [
1705
- children,
1706
- viewport && /* @__PURE__ */ jsx(NavigationMenuViewport, {})
1707
- ]
1708
- }
1709
- );
1710
- }
1711
- function NavigationMenuList({
1712
- className,
1713
- ...props
1714
- }) {
1715
- return /* @__PURE__ */ jsx(
1716
- NavigationMenuPrimitive.List,
1717
- {
1718
- "data-slot": "navigation-menu-list",
1719
- className: cn(
1720
- "group flex flex-1 list-none items-center justify-center gap-1",
1721
- className
1722
- ),
1723
- ...props
1724
- }
1725
- );
1726
- }
1727
- function NavigationMenuItem({
1728
- className,
1729
- ...props
1730
- }) {
1731
- return /* @__PURE__ */ jsx(
1732
- NavigationMenuPrimitive.Item,
1733
- {
1734
- "data-slot": "navigation-menu-item",
1735
- className: cn(
1736
- "relative after:absolute after:bottom-0 after:left-0 after:h-[2px] after:w-0 after:bg-tertiary-foreground after:transition-all after:duration-300 hover:after:w-full hover:text-tertiary-foreground transition-colors",
1737
- className
1738
- ),
1739
- ...props
1740
- }
1741
- );
1742
- }
1743
- const navigationMenuTriggerStyle = cva(
1744
- "group inline-flex h-9 w-max items-center justify-center rounded-md bg-transparent px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1"
1745
- );
1746
- function NavigationMenuTrigger({
1747
- className,
1748
- children,
1749
- ...props
1750
- }) {
1751
- return /* @__PURE__ */ jsxs(
1752
- NavigationMenuPrimitive.Trigger,
1753
- {
1754
- "data-slot": "navigation-menu-trigger",
1755
- className: cn(navigationMenuTriggerStyle(), "group", className),
1756
- ...props,
1757
- children: [
1758
- children,
1759
- " ",
1760
- /* @__PURE__ */ jsx(
1761
- ChevronDownIcon,
1762
- {
1763
- className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
1764
- "aria-hidden": "true"
1765
- }
1766
- )
1767
- ]
1768
- }
1769
- );
1770
- }
1771
- function NavigationMenuContent({
1772
- className,
1773
- ...props
1774
- }) {
1775
- return /* @__PURE__ */ jsx(
1776
- NavigationMenuPrimitive.Content,
1777
- {
1778
- "data-slot": "navigation-menu-content",
1779
- className: cn(
1780
- "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out 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 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
1781
- "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
1782
- className
1783
- ),
1784
- ...props
1785
- }
1786
- );
1787
- }
1788
- function NavigationMenuViewport({
1789
- className,
1790
- ...props
1791
- }) {
1792
- return /* @__PURE__ */ jsx(
1793
- "div",
1794
- {
1795
- className: cn(
1796
- "absolute top-full left-0 isolate z-50 flex justify-center"
1797
- ),
1798
- children: /* @__PURE__ */ jsx(
1799
- NavigationMenuPrimitive.Viewport,
1800
- {
1801
- "data-slot": "navigation-menu-viewport",
1802
- className: cn(
1803
- "origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]",
1804
- className
1805
- ),
1806
- ...props
1807
- }
1808
- )
1809
- }
1810
- );
1811
- }
1812
- function NavigationMenuLink({
1813
- className,
1814
- ...props
1815
- }) {
1816
- return /* @__PURE__ */ jsx(
1817
- NavigationMenuPrimitive.Link,
1818
- {
1819
- "data-slot": "navigation-menu-link",
1820
- className: cn(
1821
- "relative data-[active=true]:bg-tertiary/50 data-[active=true]:text-tertiary-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4 after:absolute after:bottom-0 after:left-0 after:h-[2px] after:w-0 after:bg-tertiary-foreground after:transition-all after:duration-300 hover:after:w-full",
1822
- className
1823
- ),
1824
- ...props
1825
- }
1826
- );
1827
- }
1828
- function NavigationMenuIndicator({
1829
- className,
1830
- ...props
1831
- }) {
1832
- return /* @__PURE__ */ jsx(
1833
- NavigationMenuPrimitive.Indicator,
1834
- {
1835
- "data-slot": "navigation-menu-indicator",
1836
- className: cn(
1837
- "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",
1838
- className
1839
- ),
1840
- ...props,
1841
- children: /* @__PURE__ */ jsx("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
1842
- }
1843
- );
1844
- }
1845
- function Progress({
1846
- className,
1847
- value,
1848
- ...props
1849
- }) {
1850
- return /* @__PURE__ */ jsx(
1851
- ProgressPrimitive.Root,
1852
- {
1853
- "data-slot": "progress",
1854
- className: cn(
1855
- "bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
1856
- className
1857
- ),
1858
- ...props,
1859
- children: /* @__PURE__ */ jsx(
1860
- ProgressPrimitive.Indicator,
1861
- {
1862
- "data-slot": "progress-indicator",
1863
- className: "bg-primary h-full w-full flex-1 transition-all",
1864
- style: { transform: `translateX(-${100 - (value || 0)}%)` }
1865
- }
1866
- )
1867
- }
1868
- );
1869
- }
1870
- function RadioGroup({
1871
- className,
1872
- ...props
1873
- }) {
1874
- return /* @__PURE__ */ jsx(
1875
- RadioGroupPrimitive.Root,
1876
- {
1877
- "data-slot": "radio-group",
1878
- className: cn("grid gap-3", className),
1879
- ...props
1880
- }
1881
- );
1882
- }
1883
- function RadioGroupItem({
1884
- className,
1885
- ...props
1886
- }) {
1887
- return /* @__PURE__ */ jsx(
1888
- RadioGroupPrimitive.Item,
1889
- {
1890
- "data-slot": "radio-group-item",
1891
- className: cn(
1892
- "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
1893
- className
1894
- ),
1895
- ...props,
1896
- children: /* @__PURE__ */ jsx(
1897
- RadioGroupPrimitive.Indicator,
1898
- {
1899
- "data-slot": "radio-group-indicator",
1900
- className: "relative flex items-center justify-center",
1901
- children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
1902
- }
1903
- )
1904
- }
1905
- );
1906
- }
1907
- function ScrollArea({
1908
- className,
1909
- children,
1910
- ...props
1911
- }) {
1912
- return /* @__PURE__ */ jsxs(
1913
- ScrollAreaPrimitive.Root,
1914
- {
1915
- "data-slot": "scroll-area",
1916
- className: cn("relative", className),
1917
- ...props,
1918
- children: [
1919
- /* @__PURE__ */ jsx(
1920
- ScrollAreaPrimitive.Viewport,
1921
- {
1922
- "data-slot": "scroll-area-viewport",
1923
- className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
1924
- children
1925
- }
1926
- ),
1927
- /* @__PURE__ */ jsx(ScrollBar, {}),
1928
- /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
1929
- ]
1930
- }
1931
- );
1932
- }
1933
- function ScrollBar({
1934
- className,
1935
- orientation = "vertical",
1936
- ...props
1937
- }) {
1938
- return /* @__PURE__ */ jsx(
1939
- ScrollAreaPrimitive.ScrollAreaScrollbar,
1940
- {
1941
- "data-slot": "scroll-area-scrollbar",
1942
- orientation,
1943
- className: cn(
1944
- "flex touch-none p-px transition-colors select-none",
1945
- orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
1946
- orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
1947
- className
1948
- ),
1949
- ...props,
1950
- children: /* @__PURE__ */ jsx(
1951
- ScrollAreaPrimitive.ScrollAreaThumb,
1952
- {
1953
- "data-slot": "scroll-area-thumb",
1954
- className: "bg-border relative flex-1 rounded-full"
1955
- }
1956
- )
1957
- }
1958
- );
1959
- }
1960
- function Select({
1961
- ...props
1962
- }) {
1963
- return /* @__PURE__ */ jsx(SelectPrimitive.Root, { "data-slot": "select", ...props });
1964
- }
1965
- function SelectGroup({
1966
- ...props
1967
- }) {
1968
- return /* @__PURE__ */ jsx(SelectPrimitive.Group, { "data-slot": "select-group", ...props });
1969
- }
1970
- function SelectValue({
1971
- ...props
1972
- }) {
1973
- return /* @__PURE__ */ jsx(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
1974
- }
1975
- function SelectTrigger({
1976
- className,
1977
- size = "default",
1978
- children,
1979
- ...props
1980
- }) {
1981
- return /* @__PURE__ */ jsxs(
1982
- SelectPrimitive.Trigger,
1983
- {
1984
- "data-slot": "select-trigger",
1985
- "data-size": size,
1986
- className: cn(
1987
- "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1988
- className
1989
- ),
1990
- ...props,
1991
- children: [
1992
- children,
1993
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-50" }) })
1994
- ]
1995
- }
1996
- );
1997
- }
1998
- function SelectContent({
1999
- className,
2000
- children,
2001
- position = "item-aligned",
2002
- align = "center",
2003
- ...props
2004
- }) {
2005
- return /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
2006
- SelectPrimitive.Content,
2007
- {
2008
- "data-slot": "select-content",
2009
- className: cn(
2010
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
2011
- position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
2012
- className
2013
- ),
2014
- position,
2015
- align,
2016
- ...props,
2017
- children: [
2018
- /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
2019
- /* @__PURE__ */ jsx(
2020
- SelectPrimitive.Viewport,
2021
- {
2022
- className: cn(
2023
- "p-1",
2024
- position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
2025
- ),
2026
- children
2027
- }
2028
- ),
2029
- /* @__PURE__ */ jsx(SelectScrollDownButton, {})
2030
- ]
2031
- }
2032
- ) });
2033
- }
2034
- function SelectLabel({
2035
- className,
2036
- ...props
2037
- }) {
2038
- return /* @__PURE__ */ jsx(
2039
- SelectPrimitive.Label,
2040
- {
2041
- "data-slot": "select-label",
2042
- className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
2043
- ...props
2044
- }
2045
- );
2046
- }
2047
- function SelectItem({
2048
- className,
2049
- children,
2050
- ...props
2051
- }) {
2052
- return /* @__PURE__ */ jsxs(
2053
- SelectPrimitive.Item,
2054
- {
2055
- "data-slot": "select-item",
2056
- className: cn(
2057
- "focus:bg-tertiary focus:text-tertiary-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none 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",
2058
- className
2059
- ),
2060
- ...props,
2061
- children: [
2062
- /* @__PURE__ */ jsx(
2063
- "span",
2064
- {
2065
- "data-slot": "select-item-indicator",
2066
- className: "absolute right-2 flex size-3.5 items-center justify-center",
2067
- children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) })
2068
- }
2069
- ),
2070
- /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
2071
- ]
2072
- }
2073
- );
2074
- }
2075
- function SelectSeparator({
2076
- className,
2077
- ...props
2078
- }) {
2079
- return /* @__PURE__ */ jsx(
2080
- SelectPrimitive.Separator,
2081
- {
2082
- "data-slot": "select-separator",
2083
- className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
2084
- ...props
2085
- }
2086
- );
2087
- }
2088
- function SelectScrollUpButton({
2089
- className,
2090
- ...props
2091
- }) {
2092
- return /* @__PURE__ */ jsx(
2093
- SelectPrimitive.ScrollUpButton,
2094
- {
2095
- "data-slot": "select-scroll-up-button",
2096
- className: cn(
2097
- "flex cursor-default items-center justify-center py-1",
2098
- className
2099
- ),
2100
- ...props,
2101
- children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4" })
2102
- }
2103
- );
2104
- }
2105
- function SelectScrollDownButton({
2106
- className,
2107
- ...props
2108
- }) {
2109
- return /* @__PURE__ */ jsx(
2110
- SelectPrimitive.ScrollDownButton,
2111
- {
2112
- "data-slot": "select-scroll-down-button",
2113
- className: cn(
2114
- "flex cursor-default items-center justify-center py-1",
2115
- className
2116
- ),
2117
- ...props,
2118
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4" })
2119
- }
2120
- );
2121
- }
2122
- function Separator({
2123
- className,
2124
- orientation = "horizontal",
2125
- decorative = true,
2126
- ...props
2127
- }) {
2128
- return /* @__PURE__ */ jsx(
2129
- SeparatorPrimitive.Root,
2130
- {
2131
- "data-slot": "separator",
2132
- decorative,
2133
- orientation,
2134
- className: cn(
2135
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
2136
- className
2137
- ),
2138
- ...props
2139
- }
2140
- );
2141
- }
2142
- function Sheet({ ...props }) {
2143
- return /* @__PURE__ */ jsx(DialogPrimitive.Root, { "data-slot": "sheet", ...props });
2144
- }
2145
- function SheetTrigger({
2146
- ...props
2147
- }) {
2148
- return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
2149
- }
2150
- function SheetClose({
2151
- ...props
2152
- }) {
2153
- return /* @__PURE__ */ jsx(DialogPrimitive.Close, { "data-slot": "sheet-close", ...props });
2154
- }
2155
- function SheetPortal({
2156
- ...props
2157
- }) {
2158
- return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
2159
- }
2160
- function SheetOverlay({
2161
- className,
2162
- ...props
2163
- }) {
2164
- return /* @__PURE__ */ jsx(
2165
- DialogPrimitive.Overlay,
2166
- {
2167
- "data-slot": "sheet-overlay",
2168
- className: cn(
2169
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
2170
- className
2171
- ),
2172
- ...props
2173
- }
2174
- );
2175
- }
2176
- function SheetContent({
2177
- className,
2178
- children,
2179
- side = "right",
2180
- ...props
2181
- }) {
2182
- return /* @__PURE__ */ jsxs(SheetPortal, { children: [
2183
- /* @__PURE__ */ jsx(SheetOverlay, {}),
2184
- /* @__PURE__ */ jsxs(
2185
- DialogPrimitive.Content,
2186
- {
2187
- "data-slot": "sheet-content",
2188
- className: cn(
2189
- "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
2190
- side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
2191
- side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
2192
- side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
2193
- side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
2194
- className
2195
- ),
2196
- ...props,
2197
- children: [
2198
- children,
2199
- /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
2200
- /* @__PURE__ */ jsx(XIcon, { className: "size-4" }),
2201
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
2202
- ] })
2203
- ]
2204
- }
2205
- )
2206
- ] });
2207
- }
2208
- function SheetHeader({ className, ...props }) {
2209
- return /* @__PURE__ */ jsx(
2210
- "div",
2211
- {
2212
- "data-slot": "sheet-header",
2213
- className: cn("flex flex-col gap-1.5 p-4", className),
2214
- ...props
2215
- }
2216
- );
2217
- }
2218
- function SheetFooter({ className, ...props }) {
2219
- return /* @__PURE__ */ jsx(
2220
- "div",
2221
- {
2222
- "data-slot": "sheet-footer",
2223
- className: cn("mt-auto flex flex-col gap-2 p-4", className),
2224
- ...props
2225
- }
2226
- );
2227
- }
2228
- function SheetTitle({
2229
- className,
2230
- ...props
2231
- }) {
2232
- return /* @__PURE__ */ jsx(
2233
- DialogPrimitive.Title,
2234
- {
2235
- "data-slot": "sheet-title",
2236
- className: cn("text-foreground font-semibold", className),
2237
- ...props
2238
- }
2239
- );
2240
- }
2241
- function SheetDescription({
2242
- className,
2243
- ...props
2244
- }) {
2245
- return /* @__PURE__ */ jsx(
2246
- DialogPrimitive.Description,
2247
- {
2248
- "data-slot": "sheet-description",
2249
- className: cn("text-muted-foreground text-sm", className),
2250
- ...props
2251
- }
2252
- );
2253
- }
2254
- const MOBILE_BREAKPOINT = 768;
2255
- function useIsMobile() {
2256
- const [isMobile, setIsMobile] = React.useState(
2257
- void 0
2258
- );
2259
- React.useEffect(() => {
2260
- const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
2261
- const onChange = () => {
2262
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
2263
- };
2264
- mql.addEventListener("change", onChange);
2265
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
2266
- return () => mql.removeEventListener("change", onChange);
2267
- }, []);
2268
- return !!isMobile;
2269
- }
2270
- function Skeleton({ className, ...props }) {
2271
- return /* @__PURE__ */ jsx(
2272
- "div",
2273
- {
2274
- "data-slot": "skeleton",
2275
- className: cn("bg-secondary animate-pulse rounded-md", className),
2276
- ...props
2277
- }
2278
- );
2279
- }
2280
- function TooltipProvider({
2281
- delayDuration = 0,
2282
- ...props
2283
- }) {
2284
- return /* @__PURE__ */ jsx(
2285
- TooltipPrimitive.Provider,
2286
- {
2287
- "data-slot": "tooltip-provider",
2288
- delayDuration,
2289
- ...props
2290
- }
2291
- );
2292
- }
2293
- function Tooltip({
2294
- ...props
2295
- }) {
2296
- return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
2297
- }
2298
- function TooltipTrigger({
2299
- ...props
2300
- }) {
2301
- return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
2302
- }
2303
- function TooltipContent({
2304
- className,
2305
- sideOffset = 0,
2306
- children,
2307
- ...props
2308
- }) {
2309
- return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
2310
- TooltipPrimitive.Content,
2311
- {
2312
- "data-slot": "tooltip-content",
2313
- sideOffset,
2314
- className: cn(
2315
- "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
2316
- className
2317
- ),
2318
- ...props,
2319
- children: [
2320
- children,
2321
- /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
2322
- ]
2323
- }
2324
- ) });
2325
- }
2326
- const SIDEBAR_COOKIE_NAME = "sidebar_state";
2327
- const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
2328
- const SIDEBAR_WIDTH = "16rem";
2329
- const SIDEBAR_WIDTH_MOBILE = "18rem";
2330
- const SIDEBAR_WIDTH_ICON = "3rem";
2331
- const SIDEBAR_KEYBOARD_SHORTCUT = "b";
2332
- const SidebarContext = React.createContext(null);
2333
- function useSidebar() {
2334
- const context = React.useContext(SidebarContext);
2335
- if (!context) {
2336
- throw new Error("useSidebar must be used within a SidebarProvider.");
2337
- }
2338
- return context;
2339
- }
2340
- function SidebarProvider({
2341
- defaultOpen = true,
2342
- open: openProp,
2343
- onOpenChange: setOpenProp,
2344
- className,
2345
- style,
2346
- children,
2347
- ...props
2348
- }) {
2349
- const isMobile = useIsMobile();
2350
- const [openMobile, setOpenMobile] = React.useState(false);
2351
- const [_open, _setOpen] = React.useState(defaultOpen);
2352
- const open = openProp ?? _open;
2353
- const setOpen = React.useCallback(
2354
- (value) => {
2355
- const openState = typeof value === "function" ? value(open) : value;
2356
- if (setOpenProp) {
2357
- setOpenProp(openState);
2358
- } else {
2359
- _setOpen(openState);
2360
- }
2361
- document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
2362
- },
2363
- [setOpenProp, open]
2364
- );
2365
- const toggleSidebar = React.useCallback(() => {
2366
- return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
2367
- }, [isMobile, setOpen, setOpenMobile]);
2368
- React.useEffect(() => {
2369
- const handleKeyDown = (event) => {
2370
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
2371
- event.preventDefault();
2372
- toggleSidebar();
2373
- }
2374
- };
2375
- window.addEventListener("keydown", handleKeyDown);
2376
- return () => window.removeEventListener("keydown", handleKeyDown);
2377
- }, [toggleSidebar]);
2378
- const state = open ? "expanded" : "collapsed";
2379
- const contextValue = React.useMemo(
2380
- () => ({
2381
- state,
2382
- open,
2383
- setOpen,
2384
- isMobile,
2385
- openMobile,
2386
- setOpenMobile,
2387
- toggleSidebar
2388
- }),
2389
- [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
2390
- );
2391
- return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
2392
- "div",
2393
- {
2394
- "data-slot": "sidebar-wrapper",
2395
- style: {
2396
- "--sidebar-width": SIDEBAR_WIDTH,
2397
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
2398
- ...style
2399
- },
2400
- className: cn(
2401
- "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
2402
- className
2403
- ),
2404
- ...props,
2405
- children
2406
- }
2407
- ) }) });
2408
- }
2409
- function Sidebar({
2410
- side = "left",
2411
- variant = "sidebar",
2412
- collapsible = "offcanvas",
2413
- className,
2414
- children,
2415
- ...props
2416
- }) {
2417
- const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
2418
- if (collapsible === "none") {
2419
- return /* @__PURE__ */ jsx(
2420
- "div",
2421
- {
2422
- "data-slot": "sidebar",
2423
- className: cn(
2424
- "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",
2425
- className
2426
- ),
2427
- ...props,
2428
- children
2429
- }
2430
- );
2431
- }
2432
- if (isMobile) {
2433
- return /* @__PURE__ */ jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs(
2434
- SheetContent,
2435
- {
2436
- "data-sidebar": "sidebar",
2437
- "data-slot": "sidebar",
2438
- "data-mobile": "true",
2439
- className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
2440
- style: {
2441
- "--sidebar-width": SIDEBAR_WIDTH_MOBILE
2442
- },
2443
- side,
2444
- children: [
2445
- /* @__PURE__ */ jsxs(SheetHeader, { className: "sr-only", children: [
2446
- /* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }),
2447
- /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })
2448
- ] }),
2449
- /* @__PURE__ */ jsx("div", { className: "flex h-full w-full flex-col", children })
2450
- ]
2451
- }
2452
- ) });
2453
- }
2454
- return /* @__PURE__ */ jsxs(
2455
- "div",
2456
- {
2457
- className: "group peer text-sidebar-foreground hidden md:block",
2458
- "data-state": state,
2459
- "data-collapsible": state === "collapsed" ? collapsible : "",
2460
- "data-variant": variant,
2461
- "data-side": side,
2462
- "data-slot": "sidebar",
2463
- children: [
2464
- /* @__PURE__ */ jsx(
2465
- "div",
2466
- {
2467
- "data-slot": "sidebar-gap",
2468
- className: cn(
2469
- "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
2470
- "group-data-[collapsible=offcanvas]:w-0",
2471
- "group-data-[side=right]:rotate-180",
2472
- variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
2473
- )
2474
- }
2475
- ),
2476
- /* @__PURE__ */ jsx(
2477
- "div",
2478
- {
2479
- "data-slot": "sidebar-container",
2480
- className: cn(
2481
- "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
2482
- side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
2483
- // Adjust the padding for floating and inset variants.
2484
- 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",
2485
- className
2486
- ),
2487
- ...props,
2488
- children: /* @__PURE__ */ jsx(
2489
- "div",
2490
- {
2491
- "data-sidebar": "sidebar",
2492
- "data-slot": "sidebar-inner",
2493
- className: "bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm",
2494
- children
2495
- }
2496
- )
2497
- }
2498
- )
2499
- ]
2500
- }
2501
- );
2502
- }
2503
- function SidebarTrigger({
2504
- className,
2505
- onClick,
2506
- ...props
2507
- }) {
2508
- const { toggleSidebar } = useSidebar();
2509
- return /* @__PURE__ */ jsxs(
2510
- Button,
2511
- {
2512
- "data-sidebar": "trigger",
2513
- "data-slot": "sidebar-trigger",
2514
- variant: "ghost",
2515
- size: "icon",
2516
- className: cn("size-7", className),
2517
- onClick: (event) => {
2518
- onClick?.(event);
2519
- toggleSidebar();
2520
- },
2521
- ...props,
2522
- children: [
2523
- /* @__PURE__ */ jsx(PanelLeftIcon, {}),
2524
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
2525
- ]
2526
- }
2527
- );
2528
- }
2529
- function SidebarRail({ className, ...props }) {
2530
- const { toggleSidebar } = useSidebar();
2531
- return /* @__PURE__ */ jsx(
2532
- "button",
2533
- {
2534
- "data-sidebar": "rail",
2535
- "data-slot": "sidebar-rail",
2536
- "aria-label": "Toggle Sidebar",
2537
- tabIndex: -1,
2538
- onClick: toggleSidebar,
2539
- title: "Toggle Sidebar",
2540
- className: cn(
2541
- "hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex",
2542
- "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
2543
- "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
2544
- "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
2545
- "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
2546
- "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
2547
- className
2548
- ),
2549
- ...props
2550
- }
2551
- );
2552
- }
2553
- function SidebarInset({ className, ...props }) {
2554
- return /* @__PURE__ */ jsx(
2555
- "main",
2556
- {
2557
- "data-slot": "sidebar-inset",
2558
- className: cn(
2559
- "bg-background relative flex w-full flex-1 flex-col",
2560
- "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",
2561
- className
2562
- ),
2563
- ...props
2564
- }
2565
- );
2566
- }
2567
- function SidebarInput({
2568
- className,
2569
- ...props
2570
- }) {
2571
- return /* @__PURE__ */ jsx(
2572
- Input,
2573
- {
2574
- "data-slot": "sidebar-input",
2575
- "data-sidebar": "input",
2576
- className: cn("bg-background h-8 w-full shadow-none", className),
2577
- ...props
2578
- }
2579
- );
2580
- }
2581
- function SidebarHeader({ className, ...props }) {
2582
- return /* @__PURE__ */ jsx(
2583
- "div",
2584
- {
2585
- "data-slot": "sidebar-header",
2586
- "data-sidebar": "header",
2587
- className: cn("flex flex-col gap-2 p-2", className),
2588
- ...props
2589
- }
2590
- );
2591
- }
2592
- function SidebarFooter({ className, ...props }) {
2593
- return /* @__PURE__ */ jsx(
2594
- "div",
2595
- {
2596
- "data-slot": "sidebar-footer",
2597
- "data-sidebar": "footer",
2598
- className: cn("flex flex-col gap-2 p-2", className),
2599
- ...props
2600
- }
2601
- );
2602
- }
2603
- function SidebarSeparator({
2604
- className,
2605
- ...props
2606
- }) {
2607
- return /* @__PURE__ */ jsx(
2608
- Separator,
2609
- {
2610
- "data-slot": "sidebar-separator",
2611
- "data-sidebar": "separator",
2612
- className: cn("bg-sidebar-border mx-2 w-auto", className),
2613
- ...props
2614
- }
2615
- );
2616
- }
2617
- function SidebarContent({ className, ...props }) {
2618
- return /* @__PURE__ */ jsx(
2619
- "div",
2620
- {
2621
- "data-slot": "sidebar-content",
2622
- "data-sidebar": "content",
2623
- className: cn(
2624
- "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
2625
- className
2626
- ),
2627
- ...props
2628
- }
2629
- );
2630
- }
2631
- function SidebarGroup({ className, ...props }) {
2632
- return /* @__PURE__ */ jsx(
2633
- "div",
2634
- {
2635
- "data-slot": "sidebar-group",
2636
- "data-sidebar": "group",
2637
- className: cn("relative flex w-full min-w-0 flex-col p-2", className),
2638
- ...props
2639
- }
2640
- );
2641
- }
2642
- function SidebarGroupLabel({
2643
- className,
2644
- asChild = false,
2645
- ...props
2646
- }) {
2647
- const Comp = asChild ? Slot : "div";
2648
- return /* @__PURE__ */ jsx(
2649
- Comp,
2650
- {
2651
- "data-slot": "sidebar-group-label",
2652
- "data-sidebar": "group-label",
2653
- className: cn(
2654
- "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
2655
- "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
2656
- className
2657
- ),
2658
- ...props
2659
- }
2660
- );
2661
- }
2662
- function SidebarGroupAction({
2663
- className,
2664
- asChild = false,
2665
- ...props
2666
- }) {
2667
- const Comp = asChild ? Slot : "button";
2668
- return /* @__PURE__ */ jsx(
2669
- Comp,
2670
- {
2671
- "data-slot": "sidebar-group-action",
2672
- "data-sidebar": "group-action",
2673
- className: cn(
2674
- "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-tertiary hover:text-sidebar-tertiary-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
2675
- // Increases the hit area of the button on mobile.
2676
- "after:absolute after:-inset-2 md:after:hidden",
2677
- "group-data-[collapsible=icon]:hidden",
2678
- className
2679
- ),
2680
- ...props
2681
- }
2682
- );
2683
- }
2684
- function SidebarGroupContent({
2685
- className,
2686
- ...props
2687
- }) {
2688
- return /* @__PURE__ */ jsx(
2689
- "div",
2690
- {
2691
- "data-slot": "sidebar-group-content",
2692
- "data-sidebar": "group-content",
2693
- className: cn("w-full text-sm", className),
2694
- ...props
2695
- }
2696
- );
2697
- }
2698
- function SidebarMenu({ className, ...props }) {
2699
- return /* @__PURE__ */ jsx(
2700
- "ul",
2701
- {
2702
- "data-slot": "sidebar-menu",
2703
- "data-sidebar": "menu",
2704
- className: cn("flex w-full min-w-0 flex-col gap-1", className),
2705
- ...props
2706
- }
2707
- );
2708
- }
2709
- function SidebarMenuItem({ className, ...props }) {
2710
- return /* @__PURE__ */ jsx(
2711
- "li",
2712
- {
2713
- "data-slot": "sidebar-menu-item",
2714
- "data-sidebar": "menu-item",
2715
- className: cn("group/menu-item relative", className),
2716
- ...props
2717
- }
2718
- );
2719
- }
2720
- const sidebarMenuButtonVariants = cva(
2721
- "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-tertiary hover:text-sidebar-tertiary-foreground focus-visible:ring-2 active:bg-sidebar-tertiary active:text-sidebar-tertiary-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-tertiary data-[active=true]:font-medium data-[active=true]:text-sidebar-tertiary-foreground data-[state=open]:hover:bg-sidebar-tertiary data-[state=open]:hover:text-sidebar-tertiary-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
2722
- {
2723
- variants: {
2724
- variant: {
2725
- default: "hover:bg-sidebar-tertiary hover:text-sidebar-tertiary-foreground",
2726
- outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-tertiary hover:text-sidebar-tertiary-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-tertiary))]"
2727
- },
2728
- size: {
2729
- default: "h-8 text-sm",
2730
- sm: "h-7 text-xs",
2731
- lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
2732
- }
2733
- },
2734
- defaultVariants: {
2735
- variant: "default",
2736
- size: "default"
2737
- }
2738
- }
2739
- );
2740
- function SidebarMenuButton({
2741
- asChild = false,
2742
- isActive = false,
2743
- variant = "default",
2744
- size = "default",
2745
- tooltip,
2746
- className,
2747
- ...props
2748
- }) {
2749
- const Comp = asChild ? Slot : "button";
2750
- const { isMobile, state } = useSidebar();
2751
- const button = /* @__PURE__ */ jsx(
2752
- Comp,
2753
- {
2754
- "data-slot": "sidebar-menu-button",
2755
- "data-sidebar": "menu-button",
2756
- "data-size": size,
2757
- "data-active": isActive,
2758
- className: cn(sidebarMenuButtonVariants({ variant, size }), className),
2759
- ...props
2760
- }
2761
- );
2762
- if (!tooltip) {
2763
- return button;
2764
- }
2765
- if (typeof tooltip === "string") {
2766
- tooltip = {
2767
- children: tooltip
2768
- };
2769
- }
2770
- return /* @__PURE__ */ jsxs(Tooltip, { children: [
2771
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
2772
- /* @__PURE__ */ jsx(
2773
- TooltipContent,
2774
- {
2775
- side: "right",
2776
- align: "center",
2777
- hidden: state !== "collapsed" || isMobile,
2778
- ...tooltip
2779
- }
2780
- )
2781
- ] });
2782
- }
2783
- function SidebarMenuAction({
2784
- className,
2785
- asChild = false,
2786
- showOnHover = false,
2787
- ...props
2788
- }) {
2789
- const Comp = asChild ? Slot : "button";
2790
- return /* @__PURE__ */ jsx(
2791
- Comp,
2792
- {
2793
- "data-slot": "sidebar-menu-action",
2794
- "data-sidebar": "menu-action",
2795
- className: cn(
2796
- "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-tertiary hover:text-sidebar-tertiary-foreground peer-hover/menu-button:text-sidebar-tertiary-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
2797
- // Increases the hit area of the button on mobile.
2798
- "after:absolute after:-inset-2 md:after:hidden",
2799
- "peer-data-[size=sm]/menu-button:top-1",
2800
- "peer-data-[size=default]/menu-button:top-1.5",
2801
- "peer-data-[size=lg]/menu-button:top-2.5",
2802
- "group-data-[collapsible=icon]:hidden",
2803
- showOnHover && "peer-data-[active=true]/menu-button:text-sidebar-tertiary-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0",
2804
- className
2805
- ),
2806
- ...props
2807
- }
2808
- );
2809
- }
2810
- function SidebarMenuBadge({
2811
- className,
2812
- ...props
2813
- }) {
2814
- return /* @__PURE__ */ jsx(
2815
- "div",
2816
- {
2817
- "data-slot": "sidebar-menu-badge",
2818
- "data-sidebar": "menu-badge",
2819
- className: cn(
2820
- "text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none",
2821
- "peer-hover/menu-button:text-sidebar-tertiary-foreground peer-data-[active=true]/menu-button:text-sidebar-tertiary-foreground",
2822
- "peer-data-[size=sm]/menu-button:top-1",
2823
- "peer-data-[size=default]/menu-button:top-1.5",
2824
- "peer-data-[size=lg]/menu-button:top-2.5",
2825
- "group-data-[collapsible=icon]:hidden",
2826
- className
2827
- ),
2828
- ...props
2829
- }
2830
- );
2831
- }
2832
- function SidebarMenuSkeleton({
2833
- className,
2834
- showIcon = false,
2835
- ...props
2836
- }) {
2837
- const widthRef = React.useState(
2838
- () => `${Math.floor(Math.random() * 40) + 50}%`
2839
- )[0];
2840
- return /* @__PURE__ */ jsxs(
2841
- "div",
2842
- {
2843
- "data-slot": "sidebar-menu-skeleton",
2844
- "data-sidebar": "menu-skeleton",
2845
- className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
2846
- ...props,
2847
- children: [
2848
- showIcon && /* @__PURE__ */ jsx(
2849
- Skeleton,
2850
- {
2851
- className: "size-4 rounded-md",
2852
- "data-sidebar": "menu-skeleton-icon"
2853
- }
2854
- ),
2855
- /* @__PURE__ */ jsx(
2856
- Skeleton,
2857
- {
2858
- className: "h-4 max-w-(--skeleton-width) flex-1",
2859
- "data-sidebar": "menu-skeleton-text",
2860
- style: {
2861
- "--skeleton-width": widthRef
2862
- }
2863
- }
2864
- )
2865
- ]
2866
- }
2867
- );
2868
- }
2869
- function SidebarMenuSub({ className, ...props }) {
2870
- return /* @__PURE__ */ jsx(
2871
- "ul",
2872
- {
2873
- "data-slot": "sidebar-menu-sub",
2874
- "data-sidebar": "menu-sub",
2875
- className: cn(
2876
- "border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5",
2877
- "group-data-[collapsible=icon]:hidden",
2878
- className
2879
- ),
2880
- ...props
2881
- }
2882
- );
2883
- }
2884
- function SidebarMenuSubItem({
2885
- className,
2886
- ...props
2887
- }) {
2888
- return /* @__PURE__ */ jsx(
2889
- "li",
2890
- {
2891
- "data-slot": "sidebar-menu-sub-item",
2892
- "data-sidebar": "menu-sub-item",
2893
- className: cn("group/menu-sub-item relative", className),
2894
- ...props
2895
- }
2896
- );
2897
- }
2898
- function SidebarMenuSubButton({
2899
- asChild = false,
2900
- size = "md",
2901
- isActive = false,
2902
- className,
2903
- ...props
2904
- }) {
2905
- const Comp = asChild ? Slot : "a";
2906
- return /* @__PURE__ */ jsx(
2907
- Comp,
2908
- {
2909
- "data-slot": "sidebar-menu-sub-button",
2910
- "data-sidebar": "menu-sub-button",
2911
- "data-size": size,
2912
- "data-active": isActive,
2913
- className: cn(
2914
- "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-tertiary hover:text-sidebar-tertiary-foreground active:bg-sidebar-tertiary active:text-sidebar-tertiary-foreground [&>svg]:text-sidebar-tertiary-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
2915
- "data-[active=true]:bg-sidebar-tertiary data-[active=true]:text-sidebar-tertiary-foreground",
2916
- size === "sm" && "text-xs",
2917
- size === "md" && "text-sm",
2918
- "group-data-[collapsible=icon]:hidden",
2919
- className
2920
- ),
2921
- ...props
2922
- }
2923
- );
2924
- }
2925
- function Slider({
2926
- className,
2927
- defaultValue,
2928
- value,
2929
- min = 0,
2930
- max = 100,
2931
- ...props
2932
- }) {
2933
- const _values = React.useMemo(
2934
- () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
2935
- [value, defaultValue, min, max]
2936
- );
2937
- return /* @__PURE__ */ jsxs(
2938
- SliderPrimitive.Root,
2939
- {
2940
- "data-slot": "slider",
2941
- defaultValue,
2942
- value,
2943
- min,
2944
- max,
2945
- className: cn(
2946
- "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",
2947
- className
2948
- ),
2949
- ...props,
2950
- children: [
2951
- /* @__PURE__ */ jsx(
2952
- SliderPrimitive.Track,
2953
- {
2954
- "data-slot": "slider-track",
2955
- className: cn(
2956
- "bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"
2957
- ),
2958
- children: /* @__PURE__ */ jsx(
2959
- SliderPrimitive.Range,
2960
- {
2961
- "data-slot": "slider-range",
2962
- className: cn(
2963
- "bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
2964
- )
2965
- }
2966
- )
2967
- }
2968
- ),
2969
- Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx(
2970
- SliderPrimitive.Thumb,
2971
- {
2972
- "data-slot": "slider-thumb",
2973
- className: "border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"
2974
- },
2975
- index
2976
- ))
2977
- ]
2978
- }
2979
- );
2980
- }
2981
- const Toaster = ({ ...props }) => {
2982
- const { theme = "system" } = useTheme();
2983
- return /* @__PURE__ */ jsx(
2984
- Toaster$1,
2985
- {
2986
- theme,
2987
- className: "toaster group",
2988
- icons: {
2989
- success: /* @__PURE__ */ jsx(CircleCheckIcon, { className: "size-4" }),
2990
- info: /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }),
2991
- warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
2992
- error: /* @__PURE__ */ jsx(OctagonXIcon, { className: "size-4" }),
2993
- loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
2994
- },
2995
- style: {
2996
- "--normal-bg": "var(--popover)",
2997
- "--normal-text": "var(--popover-foreground)",
2998
- "--normal-border": "var(--border)",
2999
- "--border-radius": "var(--radius)"
3000
- },
3001
- toastOptions: {
3002
- classNames: {
3003
- description: "!text-popover-foreground"
3004
- }
3005
- },
3006
- ...props
3007
- }
3008
- );
3009
- };
3010
- const StepperContext = React.createContext(
3011
- void 0
3012
- );
3013
- function useStepper() {
3014
- const context = React.useContext(StepperContext);
3015
- if (!context) {
3016
- throw new Error("useStepper must be used within a Stepper");
3017
- }
3018
- return context;
3019
- }
3020
- function Stepper({
3021
- children,
3022
- initialStep = 0,
3023
- totalSteps: totalStepsProp,
3024
- onStepChange
3025
- }) {
3026
- const [currentStep, setCurrentStep] = React.useState(initialStep);
3027
- const steps = React.Children.toArray(children);
3028
- const totalSteps = totalStepsProp ?? steps.length;
3029
- const nextStep = React.useCallback(() => {
3030
- setCurrentStep((prev) => {
3031
- const next = Math.min(prev + 1, totalSteps - 1);
3032
- onStepChange?.(next);
3033
- return next;
3034
- });
3035
- }, [totalSteps, onStepChange]);
3036
- const previousStep = React.useCallback(() => {
3037
- setCurrentStep((prev) => {
3038
- const next = Math.max(prev - 1, 0);
3039
- onStepChange?.(next);
3040
- return next;
3041
- });
3042
- }, [onStepChange]);
3043
- const goToStep = React.useCallback(
3044
- (step) => {
3045
- const validStep = Math.max(0, Math.min(step, totalSteps - 1));
3046
- setCurrentStep(validStep);
3047
- onStepChange?.(validStep);
3048
- },
3049
- [totalSteps, onStepChange]
3050
- );
3051
- React.useEffect(() => {
3052
- if (initialStep !== currentStep) {
3053
- setCurrentStep(initialStep);
3054
- }
3055
- }, [initialStep, currentStep]);
3056
- return /* @__PURE__ */ jsx(
3057
- StepperContext.Provider,
3058
- {
3059
- value: {
3060
- currentStep,
3061
- totalSteps,
3062
- nextStep,
3063
- previousStep,
3064
- goToStep
3065
- },
3066
- children: /* @__PURE__ */ jsx("div", { className: "w-full", children })
3067
- }
3068
- );
3069
- }
3070
- function StepperHeader({ steps, className }) {
3071
- const { currentStep, previousStep, nextStep, totalSteps } = useStepper();
3072
- const progressPercentage = (currentStep + 1) / totalSteps * 100;
3073
- return /* @__PURE__ */ jsx("nav", { "aria-label": "Progress", className: cn("mb-8", className), children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 items-center", children: [
3074
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-10 w-full justify-center", children: [
3075
- /* @__PURE__ */ jsxs(
3076
- Button,
3077
- {
3078
- variant: "secondary",
3079
- size: "sm",
3080
- onClick: previousStep,
3081
- disabled: currentStep === 0,
3082
- className: "gap-1.5",
3083
- children: [
3084
- /* @__PURE__ */ jsx(ChevronLeft, { className: "h-3.5 w-3.5" }),
3085
- "Previous"
3086
- ]
3087
- }
3088
- ),
3089
- /* @__PURE__ */ jsx(Progress, { value: progressPercentage, className: "w-105" }),
3090
- /* @__PURE__ */ jsxs(
3091
- Button,
3092
- {
3093
- variant: "secondary",
3094
- size: "sm",
3095
- onClick: nextStep,
3096
- disabled: currentStep === totalSteps - 1,
3097
- className: "gap-1.5",
3098
- children: [
3099
- "Next",
3100
- /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5" })
3101
- ]
3102
- }
3103
- )
3104
- ] }),
3105
- /* @__PURE__ */ jsxs("div", { className: "relative flex items-center justify-center gap-5", children: [
3106
- steps.map((_, index) => {
3107
- if (index === 0) return null;
3108
- const isComplete = index <= currentStep;
3109
- return /* @__PURE__ */ jsx(
3110
- "div",
3111
- {
3112
- className: cn(
3113
- "absolute h-px w-[133px]",
3114
- "top-2",
3115
- isComplete ? "bg-slate-700" : "bg-border"
3116
- ),
3117
- style: {
3118
- left: `calc(${(index - 1) * 25}% + ${56 + (index - 1) * 20}px)`
3119
- }
3120
- },
3121
- `connector-${index}`
3122
- );
3123
- }),
3124
- steps.map((step, index) => {
3125
- const isComplete = index < currentStep;
3126
- const isCurrent = index === currentStep;
3127
- return /* @__PURE__ */ jsxs(
3128
- "div",
3129
- {
3130
- className: "flex flex-col items-center gap-1 w-28 relative z-10",
3131
- children: [
3132
- /* @__PURE__ */ jsx(
3133
- "button",
3134
- {
3135
- onClick: () => {
3136
- },
3137
- className: cn(
3138
- "flex items-center justify-center w-4 h-4 rounded-full text-white text-[11px] font-semibold transition-colors",
3139
- isComplete && "bg-[#36a769]",
3140
- isCurrent && "bg-[#c9a224]",
3141
- !isComplete && !isCurrent && "bg-[#999]"
3142
- ),
3143
- children: index + 1
3144
- }
3145
- ),
3146
- /* @__PURE__ */ jsx("span", { className: "text-xs text-foreground text-center leading-tight", children: step.label })
3147
- ]
3148
- },
3149
- step.label
3150
- );
3151
- })
3152
- ] })
3153
- ] }) });
3154
- }
3155
- function StepperContent({ children, className }) {
3156
- const { currentStep } = useStepper();
3157
- const steps = React.Children.toArray(children);
3158
- return /* @__PURE__ */ jsx("div", { className: cn("py-4", className), children: steps[currentStep] || null });
3159
- }
3160
- function StepperFooter({
3161
- children,
3162
- className,
3163
- showDefaultButtons = true,
3164
- nextLabel = "Next",
3165
- previousLabel = "Previous",
3166
- finishLabel = "Finish",
3167
- onFinish
3168
- }) {
3169
- const { currentStep, totalSteps, nextStep, previousStep } = useStepper();
3170
- const isFirstStep = currentStep === 0;
3171
- const isLastStep = currentStep === totalSteps - 1;
3172
- if (children) {
3173
- return /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex justify-between", className), children });
3174
- }
3175
- if (!showDefaultButtons) return null;
3176
- return /* @__PURE__ */ jsxs("div", { className: cn("mt-8 flex justify-between", className), children: [
3177
- /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: previousStep, disabled: isFirstStep, children: previousLabel }),
3178
- isLastStep ? /* @__PURE__ */ jsx(Button, { onClick: onFinish, children: finishLabel }) : /* @__PURE__ */ jsx(Button, { onClick: nextStep, children: nextLabel })
3179
- ] });
3180
- }
3181
- function Switch({
3182
- className,
3183
- ...props
3184
- }) {
3185
- return /* @__PURE__ */ jsx(
3186
- SwitchPrimitive.Root,
3187
- {
3188
- "data-slot": "switch",
3189
- className: cn(
3190
- "peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
3191
- className
3192
- ),
3193
- ...props,
3194
- children: /* @__PURE__ */ jsx(
3195
- SwitchPrimitive.Thumb,
3196
- {
3197
- "data-slot": "switch-thumb",
3198
- className: cn(
3199
- "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
3200
- )
3201
- }
3202
- )
3203
- }
3204
- );
3205
- }
3206
- function Table({ className, ...props }) {
3207
- return /* @__PURE__ */ jsx(
3208
- "div",
3209
- {
3210
- "data-slot": "table-container",
3211
- className: "relative w-full overflow-x-auto",
3212
- children: /* @__PURE__ */ jsx(
3213
- "table",
3214
- {
3215
- "data-slot": "table",
3216
- className: cn("w-full caption-bottom text-sm", className),
3217
- ...props
3218
- }
3219
- )
3220
- }
3221
- );
3222
- }
3223
- function TableHeader({ className, ...props }) {
3224
- return /* @__PURE__ */ jsx(
3225
- "thead",
3226
- {
3227
- "data-slot": "table-header",
3228
- className: cn("[&_tr]:border-b", className),
3229
- ...props
3230
- }
3231
- );
3232
- }
3233
- function TableBody({ className, ...props }) {
3234
- return /* @__PURE__ */ jsx(
3235
- "tbody",
3236
- {
3237
- "data-slot": "table-body",
3238
- className: cn("[&_tr:last-child]:border-0", className),
3239
- ...props
3240
- }
3241
- );
3242
- }
3243
- function TableFooter({ className, ...props }) {
3244
- return /* @__PURE__ */ jsx(
3245
- "tfoot",
3246
- {
3247
- "data-slot": "table-footer",
3248
- className: cn(
3249
- "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
3250
- className
3251
- ),
3252
- ...props
3253
- }
3254
- );
3255
- }
3256
- function TableRow({ className, ...props }) {
3257
- return /* @__PURE__ */ jsx(
3258
- "tr",
3259
- {
3260
- "data-slot": "table-row",
3261
- className: cn(
3262
- "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
3263
- className
3264
- ),
3265
- ...props
3266
- }
3267
- );
3268
- }
3269
- function TableHead({ className, ...props }) {
3270
- return /* @__PURE__ */ jsx(
3271
- "th",
3272
- {
3273
- "data-slot": "table-head",
3274
- className: cn(
3275
- "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
3276
- className
3277
- ),
3278
- ...props
3279
- }
3280
- );
3281
- }
3282
- function TableCell({ className, ...props }) {
3283
- return /* @__PURE__ */ jsx(
3284
- "td",
3285
- {
3286
- "data-slot": "table-cell",
3287
- className: cn(
3288
- "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
3289
- className
3290
- ),
3291
- ...props
3292
- }
3293
- );
3294
- }
3295
- function TableCaption({
3296
- className,
3297
- ...props
3298
- }) {
3299
- return /* @__PURE__ */ jsx(
3300
- "caption",
3301
- {
3302
- "data-slot": "table-caption",
3303
- className: cn("text-muted-foreground mt-4 text-sm", className),
3304
- ...props
3305
- }
3306
- );
3307
- }
3308
- function Tabs({
3309
- className,
3310
- ...props
3311
- }) {
3312
- return /* @__PURE__ */ jsx(
3313
- TabsPrimitive.Root,
3314
- {
3315
- "data-slot": "tabs",
3316
- className: cn("flex flex-col gap-2", className),
3317
- ...props
3318
- }
3319
- );
3320
- }
3321
- function TabsList({
3322
- className,
3323
- ...props
3324
- }) {
3325
- return /* @__PURE__ */ jsx(
3326
- TabsPrimitive.List,
3327
- {
3328
- "data-slot": "tabs-list",
3329
- className: cn(
3330
- "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
3331
- className
3332
- ),
3333
- ...props
3334
- }
3335
- );
3336
- }
3337
- function TabsTrigger({
3338
- className,
3339
- ...props
3340
- }) {
3341
- return /* @__PURE__ */ jsx(
3342
- TabsPrimitive.Trigger,
3343
- {
3344
- "data-slot": "tabs-trigger",
3345
- className: cn(
3346
- "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3347
- className
3348
- ),
3349
- ...props
3350
- }
3351
- );
3352
- }
3353
- function TabsContent({
3354
- className,
3355
- ...props
3356
- }) {
3357
- return /* @__PURE__ */ jsx(
3358
- TabsPrimitive.Content,
3359
- {
3360
- "data-slot": "tabs-content",
3361
- className: cn("flex-1 outline-none", className),
3362
- ...props
3363
- }
3364
- );
3365
- }
3366
- function Textarea({ className, ...props }) {
3367
- return /* @__PURE__ */ jsx(
3368
- "textarea",
3369
- {
3370
- "data-slot": "textarea",
3371
- className: cn(
3372
- "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
3373
- className
3374
- ),
3375
- ...props
3376
- }
3377
- );
3378
- }
3379
- const toggleVariants = cva(
3380
- "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-tertiary data-[state=on]:text-tertiary-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error whitespace-nowrap",
3381
- {
3382
- variants: {
3383
- variant: {
3384
- default: "bg-transparent",
3385
- outline: "border border-input bg-transparent shadow-xs hover:bg-tertiary hover:text-tertiary-foreground"
3386
- },
3387
- size: {
3388
- default: "h-9 px-2 min-w-9",
3389
- sm: "h-8 px-1.5 min-w-8",
3390
- lg: "h-10 px-2.5 min-w-10"
3391
- }
3392
- },
3393
- defaultVariants: {
3394
- variant: "default",
3395
- size: "default"
3396
- }
3397
- }
3398
- );
3399
- function Toggle({
3400
- className,
3401
- variant,
3402
- size,
3403
- ...props
3404
- }) {
3405
- return /* @__PURE__ */ jsx(
3406
- TogglePrimitive.Root,
3407
- {
3408
- "data-slot": "toggle",
3409
- className: cn(toggleVariants({ variant, size, className })),
3410
- ...props
3411
- }
3412
- );
3413
- }
3414
- const ToggleGroupContext = React.createContext({
3415
- size: "default",
3416
- variant: "default",
3417
- spacing: 0
3418
- });
3419
- function ToggleGroup({
3420
- className,
3421
- variant,
3422
- size,
3423
- spacing = 0,
3424
- children,
3425
- ...props
3426
- }) {
3427
- return /* @__PURE__ */ jsx(
3428
- ToggleGroupPrimitive.Root,
3429
- {
3430
- "data-slot": "toggle-group",
3431
- "data-variant": variant,
3432
- "data-size": size,
3433
- "data-spacing": spacing,
3434
- style: { "--gap": spacing },
3435
- className: cn(
3436
- "group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs",
3437
- className
3438
- ),
3439
- ...props,
3440
- children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
3441
- }
3442
- );
3443
- }
3444
- function ToggleGroupItem({
3445
- className,
3446
- children,
3447
- variant,
3448
- size,
3449
- ...props
3450
- }) {
3451
- const context = React.useContext(ToggleGroupContext);
3452
- return /* @__PURE__ */ jsx(
3453
- ToggleGroupPrimitive.Item,
3454
- {
3455
- "data-slot": "toggle-group-item",
3456
- "data-variant": context.variant || variant,
3457
- "data-size": context.size || size,
3458
- "data-spacing": context.spacing,
3459
- className: cn(
3460
- toggleVariants({
3461
- variant: context.variant || variant,
3462
- size: context.size || size
3463
- }),
3464
- "w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10",
3465
- "data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l",
3466
- className
3467
- ),
3468
- ...props,
3469
- children
3470
- }
3471
- );
3472
- }
3473
- function Panel({ className, ...props }) {
3474
- return /* @__PURE__ */ jsx(
3475
- "div",
3476
- {
3477
- "data-slot": "panel",
3478
- className: cn(
3479
- "bg-panel text-foreground rounded-xl border p-6 shadow-sm",
3480
- className
3481
- ),
3482
- ...props
3483
- }
3484
- );
3485
- }
3486
- function PanelHeader({ className, ...props }) {
3487
- return /* @__PURE__ */ jsx(
3488
- "div",
3489
- {
3490
- "data-slot": "panel-header",
3491
- className: cn(
3492
- "@container/panel-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 has-data-[slot=panel-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
3493
- className
3494
- ),
3495
- ...props
3496
- }
3497
- );
3498
- }
3499
- function PanelTitle({ className, ...props }) {
3500
- return /* @__PURE__ */ jsx(
3501
- "div",
3502
- {
3503
- "data-slot": "panel-title",
3504
- className: cn("text-xl leading-none font-semibold", className),
3505
- ...props
3506
- }
3507
- );
3508
- }
3509
- function PanelDescription({
3510
- className,
3511
- ...props
3512
- }) {
3513
- return /* @__PURE__ */ jsx(
3514
- "div",
3515
- {
3516
- "data-slot": "panel-description",
3517
- className: cn("text-muted-foreground text-sm", className),
3518
- ...props
3519
- }
3520
- );
3521
- }
3522
- function PanelContent({ className, ...props }) {
3523
- return /* @__PURE__ */ jsx(
3524
- "div",
3525
- {
3526
- "data-slot": "panel-content",
3527
- className: cn("pt-6 text-base", className),
3528
- ...props
3529
- }
3530
- );
3531
- }
3532
- function PanelFooter({ className, ...props }) {
3533
- return /* @__PURE__ */ jsx(
3534
- "div",
3535
- {
3536
- "data-slot": "panel-footer",
3537
- className: cn("flex items-center pt-6", className),
3538
- ...props
3539
- }
3540
- );
3541
- }
3542
- const H1 = React.forwardRef(function H12({ className, ...props }, ref) {
3543
- return /* @__PURE__ */ jsx(
3544
- "h1",
3545
- {
3546
- ref,
3547
- className: cn("text-4xl font-bold tracking-tight", className),
3548
- ...props
3549
- }
3550
- );
3551
- });
3552
- const H2 = React.forwardRef(function H22({ className, ...props }, ref) {
3553
- return /* @__PURE__ */ jsx(
3554
- "h2",
3555
- {
3556
- ref,
3557
- className: cn("text-3xl font-semibold tracking-tight", className),
3558
- ...props
3559
- }
3560
- );
3561
- });
3562
- function H3({
3563
- className,
3564
- ...props
3565
- }) {
3566
- return /* @__PURE__ */ jsx(
3567
- "h3",
3568
- {
3569
- className: cn("text-2xl font-semibold tracking-tight", className),
3570
- ...props
3571
- }
3572
- );
3573
- }
3574
- function H4({
3575
- className,
3576
- ...props
3577
- }) {
3578
- return /* @__PURE__ */ jsx("h4", { className: cn("text-xl font-semibold", className), ...props });
3579
- }
3580
- function P({
3581
- className,
3582
- ...props
3583
- }) {
3584
- return /* @__PURE__ */ jsx("p", { className: cn("text-base leading-7", className), ...props });
3585
- }
3586
- function Lead({
3587
- className,
3588
- ...props
3589
- }) {
3590
- return /* @__PURE__ */ jsx(
3591
- "p",
3592
- {
3593
- className: cn("text-lg leading-8 text-muted-foreground", className),
3594
- ...props
3595
- }
3596
- );
3597
- }
3598
- function Strong({
3599
- className,
3600
- ...props
3601
- }) {
3602
- return /* @__PURE__ */ jsx(
3603
- "p",
3604
- {
3605
- className: cn("text-base font-semibold leading-7", className),
3606
- ...props
3607
- }
3608
- );
3609
- }
3610
- function Small({
3611
- className,
3612
- ...props
3613
- }) {
3614
- return /* @__PURE__ */ jsx(
3615
- "p",
3616
- {
3617
- className: cn("text-sm text-muted-foreground leading-6", className),
3618
- ...props
3619
- }
3620
- );
3621
- }
3622
- function Muted({
3623
- className,
3624
- ...props
3625
- }) {
3626
- return /* @__PURE__ */ jsx(
3627
- "p",
3628
- {
3629
- className: cn("text-xs text-muted-foreground leading-5", className),
3630
- ...props
3631
- }
3632
- );
3633
- }
3634
- function Code({
3635
- className,
3636
- ...props
3637
- }) {
3638
- return /* @__PURE__ */ jsx(
3639
- "code",
3640
- {
3641
- className: cn("text-sm font-mono bg-muted px-2 py-1 rounded", className),
3642
- ...props
3643
- }
3644
- );
3645
- }
3646
- function Link({
3647
- className,
3648
- ...props
3649
- }) {
3650
- return /* @__PURE__ */ jsx(
3651
- "a",
3652
- {
3653
- className: cn("text-primary underline hover:no-underline", className),
3654
- ...props
3655
- }
3656
- );
3657
- }
3658
- function Blockquote({
3659
- className,
3660
- ...props
3661
- }) {
3662
- return /* @__PURE__ */ jsx(
3663
- "blockquote",
3664
- {
3665
- className: cn("border-l-4 border-primary pl-4 italic", className),
3666
- ...props
3667
- }
3668
- );
3669
- }
3670
- function List({
3671
- className,
3672
- ...props
3673
- }) {
3674
- return /* @__PURE__ */ jsx(
3675
- "ul",
3676
- {
3677
- className: cn("list-disc list-inside space-y-2", className),
3678
- ...props
3679
- }
3680
- );
3681
- }
3682
- function OrderedList({
3683
- className,
3684
- ...props
3685
- }) {
3686
- return /* @__PURE__ */ jsx(
3687
- "ol",
3688
- {
3689
- className: cn("list-decimal list-inside space-y-2", className),
3690
- ...props
3691
- }
3692
- );
3693
- }
3694
- const ContentContainer = React.forwardRef(({ className, children, ...props }, ref) => {
3695
- return /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-8 py-8 px-4", className), ...props, children });
3696
- });
3697
- ContentContainer.displayName = "Content";
3698
- const ContentHeading = React.forwardRef(({ className, children, ...props }, ref) => {
3699
- return /* @__PURE__ */ jsx(H1, { ref, className, ...props, children });
3700
- });
3701
- ContentHeading.displayName = "Content.Heading";
3702
- const ContentSubheading = React.forwardRef(({ className, children, ...props }, ref) => {
3703
- return /* @__PURE__ */ jsx(H2, { ref, className, ...props, children });
3704
- });
3705
- ContentSubheading.displayName = "Content.Subheading";
3706
- const ContentBody = React.forwardRef(({ className, children, ...props }, ref) => {
3707
- return /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-4", className), ...props, children });
3708
- });
3709
- ContentBody.displayName = "Content.Body";
3710
- const Content = Object.assign(ContentContainer, {
3711
- Heading: ContentHeading,
3712
- Subheading: ContentSubheading,
3713
- Body: ContentBody
3714
- });
3715
- function ContentExample() {
3716
- return /* @__PURE__ */ jsxs(Content, { children: [
3717
- /* @__PURE__ */ jsx(Content.Heading, { children: "Welcome to Our Platform" }),
3718
- /* @__PURE__ */ jsx(Content.Subheading, { children: "Getting Started" }),
3719
- /* @__PURE__ */ jsxs(Content.Body, { children: [
3720
- /* @__PURE__ */ jsx(P, { children: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." }),
3721
- /* @__PURE__ */ jsx(P, { children: "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." })
3722
- ] }),
3723
- /* @__PURE__ */ jsx(Content.Subheading, { children: "Features Overview" }),
3724
- /* @__PURE__ */ jsxs(Content.Body, { children: [
3725
- /* @__PURE__ */ jsx(P, { children: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo." }),
3726
- /* @__PURE__ */ jsx(P, { children: "Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt." })
3727
- ] })
3728
- ] });
3729
- }
3730
- const eInfraLogoDefault = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACPEAAAUeCAYAAAAVIja8AAAACXBIWXMAAAsSAAALEgHS3X78AAAgAElEQVR4nOzdz3HbWLrG4TNTs29nYC2xM24EVgajLVZWR2BNBC1HMOoIWlpxeeUMqAguuONSzkCKwFOYPryX12N36w/AFySfpwqlarfLBg/AlX/1fX/5+vVrAQAAAAAAAAAAcv7q7AEAAAAAAAAAIEvEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAAAAAAgDARDwAAAAAAAAAAhIl4AAAAAAAAAAAgTMQDAAAAAAAAAABhIh4AAAAAAAAAAAgT8QAAAAAAAAAAQJiIBwAAAAAAAAAAwkQ8AAAAAAAAAAAQJuIBAAAAAAAAAIAwEQ8AAAAAAAAAAISJeAAAAAAAAAAAIEzEAwAAAAAAAAAAYSIeAAAAAAAAAAAIE/EAAAAAAAAAAECYiAcAAAAAAAAAAMJEPAAAAAAAAAAAECbiAQAAAAAAAACAMBEPAAAAAAAAAACEiXgAAAAAAAAAACBMxAMAAAAAAAAAAGEiHgAAAAAAAAAACBPxAAAAAAAAAABAmIgHAAAAAAAAAADCRDwAAAAAAAAAABAm4gEAAAAA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gJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQEziAQAAAAAAAACAmMQDAAAAAAAAAAAxiQcAAAAAAAAAAGISDwAAAAAAAAAAxCQeAAAAAAAAAACISTwAAAAAAAAAABCTeAAAAAAAAAAAICbxAAAAAAAAAABATOIBAAAAAAAAAICYxAMAAAAAAAAAADGJBwAAAAAAAAAAYhIPAAAAAAAAAADEJB4AAAAAAAAAAIhJPAAAAAAAAAAAEJN4AAAAAAAAAAAgJvEAAAAAAAAAAEBM4gEAAAAAAAAAgJjEAwAAAAAAAAAAMYkHAAAAAAAAAABiEg8AAAAAAAAAAMQkHgAAAAAAAAAAiEk8AAAAAAAAAAAQk3gAAAAAAAAAACAm8QAAAAAAAAAAQGnbAZodrzfBqpZpAAAAAElFTkSuQmCC";
3731
- function resolveLogoSrc$1(logo) {
3732
- return typeof logo === "string" ? logo : logo.src;
3733
- }
3734
- function Header({
3735
- children,
3736
- className,
3737
- variant = "navigation",
3738
- navigationItems = [],
3739
- logo = eInfraLogoDefault,
3740
- logoAlt = "e-INFRA Logo"
3741
- }) {
3742
- return /* @__PURE__ */ jsx(
3743
- "header",
3744
- {
3745
- className: cn(
3746
- "sticky top-0 z-50 w-full bg-background/95 shadow-lg shadow-secondary/20 backdrop-blur supports-backdrop-filter:bg-background/60",
3747
- className
3748
- ),
3749
- children: /* @__PURE__ */ jsxs(
3750
- "div",
3751
- {
3752
- className: cn(
3753
- "flex h-16 items-center justify-between px-4 mx-auto",
3754
- variant === "navigation" && "container"
3755
- ),
3756
- children: [
3757
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
3758
- variant === "sidebar" && /* @__PURE__ */ jsx(PanelRight, {}),
3759
- /* @__PURE__ */ jsx("a", { href: "/", className: "flex items-center", children: /* @__PURE__ */ jsx(
3760
- "img",
3761
- {
3762
- src: resolveLogoSrc$1(logo),
3763
- alt: logoAlt,
3764
- className: "h-20 w-auto"
3765
- }
3766
- ) }),
3767
- variant === "navigation" && navigationItems.length > 0 && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(NavigationMenu, { children: /* @__PURE__ */ jsx(NavigationMenuList, { children: navigationItems.map((item) => /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(NavigationMenuLink, { href: item.href, children: item.label }) }, item.href)) }) }) })
3768
- ] }),
3769
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children })
3770
- ]
3771
- }
3772
- )
3773
- }
3774
- );
3775
- }
3776
- const Version = Date.now();
3777
- function resolveLogoSrc(logo) {
3778
- return typeof logo === "string" ? logo : logo.src;
3779
- }
3780
- const RedirectListItem = ({ href, text }) => {
3781
- return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("a", { href, className: "text-fd-primary flex items-center gap-2", children: [
3782
- /* @__PURE__ */ jsx(MoveRight, { className: "pt-[3px]" }),
3783
- text
3784
- ] }) });
3785
- };
3786
- const Footer = ({
3787
- logo = eInfraLogoDefault,
3788
- logoAlt = "e-INFRA CZ Logo"
3789
- }) => {
3790
- return /* @__PURE__ */ jsxs("footer", { className: "flex flex-col mt-0 items-center px-5 bg-gray-100 border-t border-gray-300 pb-5", children: [
3791
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col md:flex-row justify-between items-center md:items-start max-w-[1100px] w-full mx-auto", children: [
3792
- /* @__PURE__ */ jsx("div", { className: "flex-1 px-6 mt-8 flex justify-center", children: /* @__PURE__ */ jsxs("div", { className: "text-center md:text-left", children: [
3793
- /* @__PURE__ */ jsx("h4", { className: "font-semibold mb-3", children: "e-INFRA CZ" }),
3794
- /* @__PURE__ */ jsx("ul", { children: /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("p", { className: "text-sm text-fd-muted-foreground", children: [
3795
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: "CERIT-SC" }),
3796
- ",",
3797
- " ",
3798
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: "CESNET" }),
3799
- ", and",
3800
- " ",
3801
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: "IT4Innovations" }),
3802
- " are the three",
3803
- " ",
3804
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: "e-infrastructures" }),
3805
- " ",
3806
- "that constitute the national",
3807
- " ",
3808
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: "e-INFRA CZ" }),
3809
- " research infrastructure."
3810
- ] }) }) })
3811
- ] }) }),
3812
- /* @__PURE__ */ jsx("div", { className: "hidden md:block w-px bg-gray-300 self-stretch my-8" }),
3813
- /* @__PURE__ */ jsx("div", { className: "flex-1 px-6 mt-8 flex justify-center", children: /* @__PURE__ */ jsxs("div", { className: "text-center md:text-left", children: [
3814
- /* @__PURE__ */ jsx("h4", { className: "font-semibold mb-2", children: "General information" }),
3815
- /* @__PURE__ */ jsxs("ul", { className: "inline-flex flex-col items-center md:items-start", children: [
3816
- /* @__PURE__ */ jsx(
3817
- RedirectListItem,
3818
- {
3819
- href: "https://blog.e-infra.cz/",
3820
- text: "e-INFRA CZ Blog"
3821
- }
3822
- ),
3823
- /* @__PURE__ */ jsx(
3824
- RedirectListItem,
3825
- {
3826
- href: "https://e-infra.cz/",
3827
- text: "e-INFRA CZ Website"
3828
- }
3829
- )
3830
- ] })
3831
- ] }) }),
3832
- /* @__PURE__ */ jsx("div", { className: "hidden md:block w-px bg-gray-300 self-stretch my-8" }),
3833
- /* @__PURE__ */ jsx("div", { className: "flex-1 px-6 mt-8 flex justify-center", children: /* @__PURE__ */ jsxs("div", { className: "text-center md:text-left", children: [
3834
- /* @__PURE__ */ jsx("h4", { className: "font-semibold mb-2", children: "e-INFRA CZ Support" }),
3835
- /* @__PURE__ */ jsxs("ul", { className: "inline-flex flex-col items-center md:items-start", children: [
3836
- /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
3837
- /* @__PURE__ */ jsx(Clock, { className: "w-4 pt-[2px] h-4 text-fd-primary" }),
3838
- /* @__PURE__ */ jsx("p", { className: "text-fd-muted-foreground", children: "Available non-stop" })
3839
- ] }),
3840
- /* @__PURE__ */ jsxs("li", { className: "flex pt-[2px] items-center gap-2", children: [
3841
- /* @__PURE__ */ jsx(Mail, { className: "w-4 h-4 text-fd-primary" }),
3842
- /* @__PURE__ */ jsx(
3843
- "a",
3844
- {
3845
- href: "mailto:support@e-infra.cz",
3846
- className: "text-fd-primary hover:underline",
3847
- children: "support@e-infra.cz"
3848
- }
3849
- )
3850
- ] }),
3851
- /* @__PURE__ */ jsxs("li", { className: "flex pt-[2px] items-center gap-2", children: [
3852
- /* @__PURE__ */ jsx(Phone, { className: "w-4 h-4 text-fd-primary" }),
3853
- /* @__PURE__ */ jsx("p", { className: "text-fd-muted-foreground", children: "+420 234 680 222" })
3854
- ] })
3855
- ] })
3856
- ] }) })
3857
- ] }),
3858
- /* @__PURE__ */ jsx("div", { className: "flex justify-center items-center mt-4 max-w-[1100px] w-full mx-auto", children: /* @__PURE__ */ jsx("img", { src: resolveLogoSrc(logo), alt: logoAlt, className: "h-22 w-auto" }) }),
3859
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col md:flex-row justify-center md:justify-between items-center max-w-[1100px] w-full mx-auto", children: [
3860
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center md:justify-start gap-1", children: [
3861
- /* @__PURE__ */ jsx("p", { className: "text-sm text-fd-muted-foreground", children: "Copyright © 2025 e-INFRA CZ" }),
3862
- /* @__PURE__ */ jsx("p", { className: "text-sm text-fd-muted-foreground px-1 pb-[1px]", children: "|" }),
3863
- /* @__PURE__ */ jsx(
3864
- "a",
3865
- {
3866
- href: "https://www.e-infra.cz/en/personal-data-processing",
3867
- className: "text-sm text-fd-primary hover:underline",
3868
- children: "Privacy Policy"
3869
- }
3870
- )
3871
- ] }),
3872
- /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center md:justify-end gap-1 pt-4 md:pt-0", children: /* @__PURE__ */ jsxs("p", { className: "text-sm text-fd-muted-foreground", children: [
3873
- "Version: ",
3874
- new Date(Version).toLocaleDateString("cs-CS")
3875
- ] }) })
3876
- ] })
3877
- ] });
3878
- };
3879
- function FeedbackButton({
3880
- onClick,
3881
- position = "bottom-right"
3882
- }) {
3883
- return /* @__PURE__ */ jsxs(
3884
- "button",
3885
- {
3886
- onClick,
3887
- type: "button",
3888
- className: cn(
3889
- "group fixed z-50 px-3.5 flex items-center justify-center bg-primary hover:bg-primary-700 text-white rounded-full shadow-lg transition-all duration-300 cursor-pointer w-12 h-12 hover:w-44 overflow-hidden",
3890
- position === "bottom-right" ? "bottom-6 right-6" : "bottom-6 left-6"
3891
- ),
3892
- "aria-label": "Leave feedback",
3893
- children: [
3894
- /* @__PURE__ */ jsx("span", { className: "overflow-hidden whitespace-nowrap text-sm font-medium opacity-0 group-hover:opacity-100 transition-opacity duration-300", children: "Leave feedback?" }),
3895
- /* @__PURE__ */ jsx(MessageCircle, { className: "ms-auto w-5 h-5 shrink-0" })
3896
- ]
3897
- }
3898
- );
3899
- }
3900
- function FeedbackModal({
3901
- isOpen,
3902
- onClose,
3903
- onSubmit,
3904
- title = "Leave us Feedback",
3905
- description = "Help us improve by sharing your experience.",
3906
- satisfactionLabel = "Were you satisfied?",
3907
- recommendationsLabel = "Do you have any recommendations for improving? If you are open to follow-up, please leave your contact details.",
3908
- recommendationsPlaceholder = "Share your thoughts...",
3909
- submitButtonText = "Submit Feedback",
3910
- successMessage = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-success", children: [
3911
- /* @__PURE__ */ jsx(CheckCircle2, { className: "w-5 h-5" }),
3912
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: "Thank you for your feedback!" })
3913
- ] }),
3914
- autoCloseOnSuccess = true,
3915
- autoCloseDelay = 3e3
3916
- }) {
3917
- const [satisfaction, setSatisfaction] = React.useState(
3918
- null
3919
- );
3920
- const [recommendations, setRecommendations] = React.useState("");
3921
- const [isSubmitting, setIsSubmitting] = React.useState(false);
3922
- const [submitStatus, setSubmitStatus] = React.useState("idle");
3923
- const [errorMessage, setErrorMessage] = React.useState("");
3924
- const [progress, setProgress] = React.useState(0);
3925
- const progressIntervalRef = React.useRef(null);
3926
- React.useEffect(() => {
3927
- if (!isOpen) {
3928
- setSatisfaction(null);
3929
- setRecommendations("");
3930
- setSubmitStatus("idle");
3931
- setErrorMessage("");
3932
- setProgress(0);
3933
- if (progressIntervalRef.current) {
3934
- clearInterval(progressIntervalRef.current);
3935
- progressIntervalRef.current = null;
3936
- }
3937
- }
3938
- }, [isOpen]);
3939
- const handleSubmit = async () => {
3940
- setIsSubmitting(true);
3941
- setSubmitStatus("idle");
3942
- setErrorMessage("");
3943
- try {
3944
- const result = await onSubmit?.({
3945
- satisfaction: satisfaction || void 0,
3946
- recommendations: recommendations || void 0
3947
- });
3948
- if (result?.success) {
3949
- setSubmitStatus("success");
3950
- if (autoCloseOnSuccess) {
3951
- setProgress(0);
3952
- const updateInterval = 50;
3953
- const progressIncrement = 100 / (autoCloseDelay / updateInterval);
3954
- progressIntervalRef.current = setInterval(() => {
3955
- setProgress((prevProgress) => {
3956
- const newProgress = prevProgress + progressIncrement;
3957
- if (newProgress >= 100) {
3958
- clearInterval(progressIntervalRef.current ?? void 0);
3959
- requestAnimationFrame(() => onClose());
3960
- return 100;
3961
- }
3962
- return newProgress;
3963
- });
3964
- }, updateInterval);
3965
- }
3966
- } else {
3967
- setSubmitStatus("error");
3968
- setErrorMessage(result?.message || "Failed to submit feedback");
3969
- }
3970
- } catch (error) {
3971
- setSubmitStatus("error");
3972
- setErrorMessage(
3973
- error instanceof Error ? error.message : "An unexpected error occurred"
3974
- );
3975
- } finally {
3976
- setIsSubmitting(false);
3977
- }
3978
- };
3979
- React.useEffect(() => {
3980
- return () => {
3981
- if (progressIntervalRef.current) {
3982
- clearInterval(progressIntervalRef.current);
3983
- }
3984
- };
3985
- }, []);
3986
- if (!isOpen) {
3987
- return null;
3988
- }
3989
- return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 flex items-end sm:items-center justify-center sm:justify-end sm:bottom-3 sm:right-3 sm:inset-auto", children: [
3990
- /* @__PURE__ */ jsx(
3991
- "div",
3992
- {
3993
- className: "fixed inset-0 bg-black/50 sm:hidden",
3994
- onClick: onClose,
3995
- "aria-hidden": "true"
3996
- }
3997
- ),
3998
- /* @__PURE__ */ jsxs("div", { className: "relative w-full sm:w-96 bg-card border-t sm:border border-border shadow-lg sm:rounded-2xl overflow-hidden animate-slideUp", children: [
3999
- /* @__PURE__ */ jsx(
4000
- Button,
4001
- {
4002
- onClick: onClose,
4003
- variant: "ghost",
4004
- size: "icon-sm",
4005
- className: "absolute top-3 right-3 rounded-full",
4006
- "aria-label": "Close",
4007
- children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
4008
- }
4009
- ),
4010
- submitStatus === "success" && autoCloseOnSuccess && /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-muted overflow-hidden", children: /* @__PURE__ */ jsx(
4011
- "div",
4012
- {
4013
- className: "h-full bg-primary transition-all duration-50 ease-linear",
4014
- style: { width: `${progress}%` }
4015
- }
4016
- ) }),
4017
- /* @__PURE__ */ jsxs("div", { className: "p-6", children: [
4018
- /* @__PURE__ */ jsx("h4", { className: "text-lg font-semibold text-foreground mb-1", children: title }),
4019
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: description }),
4020
- submitStatus === "success" ? /* @__PURE__ */ jsx("div", { className: "py-4", children: successMessage }) : /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
4021
- /* @__PURE__ */ jsxs("div", { children: [
4022
- /* @__PURE__ */ jsx(Small, { className: "block mb-4", children: satisfactionLabel }),
4023
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
4024
- /* @__PURE__ */ jsx(
4025
- Button,
4026
- {
4027
- type: "button",
4028
- variant: satisfaction === "yes" ? "default" : "secondary",
4029
- size: "sm",
4030
- onClick: () => setSatisfaction("yes"),
4031
- children: "Yes"
4032
- }
4033
- ),
4034
- /* @__PURE__ */ jsx(
4035
- Button,
4036
- {
4037
- type: "button",
4038
- variant: satisfaction === "no" ? "default" : "secondary",
4039
- size: "sm",
4040
- onClick: () => setSatisfaction("no"),
4041
- children: "No"
4042
- }
4043
- )
4044
- ] })
4045
- ] }),
4046
- /* @__PURE__ */ jsxs("div", { children: [
4047
- /* @__PURE__ */ jsx(Small, { className: "block mb-4", children: recommendationsLabel }),
4048
- /* @__PURE__ */ jsx(
4049
- Textarea,
4050
- {
4051
- value: recommendations,
4052
- onChange: (e) => setRecommendations(e.target.value),
4053
- rows: 4,
4054
- placeholder: recommendationsPlaceholder
4055
- }
4056
- )
4057
- ] }),
4058
- submitStatus === "error" && /* @__PURE__ */ jsxs(Alert, { variant: "error", children: [
4059
- /* @__PURE__ */ jsx(AlertCircle, { className: "h-4 w-4" }),
4060
- /* @__PURE__ */ jsxs(AlertDescription, { children: [
4061
- /* @__PURE__ */ jsx("p", { className: "font-medium", children: "Failed to submit feedback" }),
4062
- /* @__PURE__ */ jsx("p", { className: "text-xs", children: errorMessage })
4063
- ] })
4064
- ] })
4065
- ] }),
4066
- /* @__PURE__ */ jsx("div", { className: "mt-4", children: submitStatus !== "success" && /* @__PURE__ */ jsx(
4067
- Button,
4068
- {
4069
- type: "button",
4070
- onClick: handleSubmit,
4071
- disabled: isSubmitting,
4072
- className: "w-full sm:w-auto",
4073
- children: isSubmitting ? /* @__PURE__ */ jsxs(Fragment, { children: [
4074
- /* @__PURE__ */ jsx(Loader2, { className: "w-4 h-4 mr-2 animate-spin" }),
4075
- "Submitting..."
4076
- ] }) : submitButtonText
4077
- }
4078
- ) })
4079
- ] })
4080
- ] })
4081
- ] });
4082
- }
4083
- function FeedbackForm({
4084
- isOpen: controlledIsOpen,
4085
- onOpen,
4086
- onClose,
4087
- onSubmit,
4088
- title,
4089
- description,
4090
- satisfactionLabel,
4091
- recommendationsLabel,
4092
- recommendationsPlaceholder,
4093
- submitButtonText,
4094
- successMessage,
4095
- showFeedbackButton = true,
4096
- feedbackButtonPosition = "bottom-right",
4097
- autoCloseOnSuccess,
4098
- autoCloseDelay
4099
- }) {
4100
- const [internalIsOpen, setInternalIsOpen] = React.useState(false);
4101
- const isOpen = controlledIsOpen !== void 0 ? controlledIsOpen : internalIsOpen;
4102
- const handleOpen = () => {
4103
- if (controlledIsOpen === void 0) {
4104
- setInternalIsOpen(true);
4105
- }
4106
- onOpen?.();
4107
- };
4108
- const handleClose = () => {
4109
- if (controlledIsOpen === void 0) {
4110
- setInternalIsOpen(false);
4111
- }
4112
- onClose?.();
4113
- };
4114
- return /* @__PURE__ */ jsxs(Fragment, { children: [
4115
- showFeedbackButton && /* @__PURE__ */ jsx(
4116
- FeedbackButton,
4117
- {
4118
- onClick: handleOpen,
4119
- position: feedbackButtonPosition
4120
- }
4121
- ),
4122
- /* @__PURE__ */ jsx(
4123
- FeedbackModal,
4124
- {
4125
- isOpen,
4126
- onClose: handleClose,
4127
- onSubmit,
4128
- title,
4129
- description,
4130
- satisfactionLabel,
4131
- recommendationsLabel,
4132
- recommendationsPlaceholder,
4133
- submitButtonText,
4134
- successMessage,
4135
- autoCloseOnSuccess,
4136
- autoCloseDelay
4137
- }
4138
- )
4139
- ] });
4140
- }
4141
- const defaultMessage = /* @__PURE__ */ jsxs(Fragment, { children: [
4142
- /* @__PURE__ */ jsx("strong", { children: "We use cookies" }),
4143
- " to improve your experience and analyze site usage. You can choose which cookies to accept.",
4144
- " "
4145
- ] });
4146
- const defaultLearnMoreLink = /* @__PURE__ */ jsx(
4147
- "a",
4148
- {
4149
- href: "/cookies",
4150
- className: "text-primary hover:text-primary-600 underline font-medium transition-colors duration-200",
4151
- children: "Learn more"
4152
- }
4153
- );
4154
- function CookiesBanner({
4155
- className,
4156
- message = defaultMessage,
4157
- learnMoreLink = defaultLearnMoreLink,
4158
- onReject,
4159
- onFunctional,
4160
- onAccept,
4161
- ...props
4162
- }) {
4163
- return /* @__PURE__ */ jsx(
4164
- "div",
4165
- {
4166
- "data-slot": "cookies-banner",
4167
- className: cn(
4168
- "fixed bottom-0 left-0 right-0 bg-card border-t border-border shadow-lg z-50",
4169
- className
4170
- ),
4171
- ...props,
4172
- children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-4", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4", children: [
4173
- /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxs(Small, { className: "text-foreground", children: [
4174
- message,
4175
- learnMoreLink
4176
- ] }) }),
4177
- /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-2 shrink-0", children: [
4178
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", type: "button", onClick: onReject, children: "Reject" }),
4179
- /* @__PURE__ */ jsx(
4180
- Button,
4181
- {
4182
- variant: "ghost",
4183
- size: "sm",
4184
- type: "button",
4185
- onClick: onFunctional,
4186
- children: "Only Functional"
4187
- }
4188
- ),
4189
- /* @__PURE__ */ jsx(
4190
- Button,
4191
- {
4192
- variant: "default",
4193
- size: "sm",
4194
- type: "button",
4195
- onClick: onAccept,
4196
- children: "Accept All"
4197
- }
4198
- )
4199
- ] })
4200
- ] }) })
4201
- }
4202
- );
4203
- }
4204
- export {
4205
- Accordion,
4206
- AccordionContent,
4207
- AccordionItem,
4208
- AccordionTrigger,
4209
- Alert,
4210
- AlertDescription,
4211
- AlertDialog,
4212
- AlertDialogAction,
4213
- AlertDialogCancel,
4214
- AlertDialogContent,
4215
- AlertDialogDescription,
4216
- AlertDialogFooter,
4217
- AlertDialogHeader,
4218
- AlertDialogOverlay,
4219
- AlertDialogPortal,
4220
- AlertDialogTitle,
4221
- AlertDialogTrigger,
4222
- AlertTitle,
4223
- AspectRatio,
4224
- Avatar,
4225
- AvatarFallback,
4226
- AvatarImage,
4227
- Badge,
4228
- Blockquote,
4229
- Breadcrumb,
4230
- BreadcrumbEllipsis,
4231
- BreadcrumbItem,
4232
- BreadcrumbLink,
4233
- BreadcrumbList,
4234
- BreadcrumbPage,
4235
- BreadcrumbSeparator,
4236
- Button,
4237
- Calendar,
4238
- CalendarDayButton,
4239
- Card,
4240
- CardAction,
4241
- CardContent,
4242
- CardDescription,
4243
- CardFooter,
4244
- CardHeader,
4245
- CardTitle,
4246
- Carousel,
4247
- CarouselContent,
4248
- CarouselItem,
4249
- CarouselNext,
4250
- CarouselPrevious,
4251
- Checkbox,
4252
- Code,
4253
- Collapsible,
4254
- CollapsibleContent,
4255
- CollapsibleTrigger,
4256
- Content,
4257
- ContentExample,
4258
- CookiesBanner,
4259
- Dialog,
4260
- DialogClose,
4261
- DialogContent,
4262
- DialogDescription,
4263
- DialogFooter,
4264
- DialogHeader,
4265
- DialogOverlay,
4266
- DialogPortal,
4267
- DialogTitle,
4268
- DialogTrigger,
4269
- DropdownMenu,
4270
- DropdownMenuCheckboxItem,
4271
- DropdownMenuContent,
4272
- DropdownMenuGroup,
4273
- DropdownMenuItem,
4274
- DropdownMenuLabel,
4275
- DropdownMenuPortal,
4276
- DropdownMenuRadioGroup,
4277
- DropdownMenuRadioItem,
4278
- DropdownMenuSeparator,
4279
- DropdownMenuShortcut,
4280
- DropdownMenuSub,
4281
- DropdownMenuSubContent,
4282
- DropdownMenuSubTrigger,
4283
- DropdownMenuTrigger,
4284
- FeedbackForm,
4285
- Footer,
4286
- Form,
4287
- FormControl,
4288
- FormDescription,
4289
- FormField,
4290
- FormItem,
4291
- FormLabel,
4292
- FormMessage,
4293
- H1,
4294
- H2,
4295
- H3,
4296
- H4,
4297
- Header,
4298
- Input,
4299
- Label,
4300
- Lead,
4301
- Link,
4302
- List,
4303
- Menubar,
4304
- MenubarCheckboxItem,
4305
- MenubarContent,
4306
- MenubarGroup,
4307
- MenubarItem,
4308
- MenubarLabel,
4309
- MenubarMenu,
4310
- MenubarPortal,
4311
- MenubarRadioGroup,
4312
- MenubarRadioItem,
4313
- MenubarSeparator,
4314
- MenubarShortcut,
4315
- MenubarSub,
4316
- MenubarSubContent,
4317
- MenubarSubTrigger,
4318
- MenubarTrigger,
4319
- Muted,
4320
- NavigationMenu,
4321
- NavigationMenuContent,
4322
- NavigationMenuIndicator,
4323
- NavigationMenuItem,
4324
- NavigationMenuLink,
4325
- NavigationMenuList,
4326
- NavigationMenuTrigger,
4327
- NavigationMenuViewport,
4328
- OrderedList,
4329
- P,
4330
- Panel,
4331
- PanelContent,
4332
- PanelDescription,
4333
- PanelFooter,
4334
- PanelHeader,
4335
- PanelTitle,
4336
- Progress,
4337
- RadioGroup,
4338
- RadioGroupItem,
4339
- ScrollArea,
4340
- ScrollBar,
4341
- Select,
4342
- SelectContent,
4343
- SelectGroup,
4344
- SelectItem,
4345
- SelectLabel,
4346
- SelectScrollDownButton,
4347
- SelectScrollUpButton,
4348
- SelectSeparator,
4349
- SelectTrigger,
4350
- SelectValue,
4351
- Separator,
4352
- Sheet,
4353
- SheetClose,
4354
- SheetContent,
4355
- SheetDescription,
4356
- SheetFooter,
4357
- SheetHeader,
4358
- SheetTitle,
4359
- SheetTrigger,
4360
- Sidebar,
4361
- SidebarContent,
4362
- SidebarFooter,
4363
- SidebarGroup,
4364
- SidebarGroupAction,
4365
- SidebarGroupContent,
4366
- SidebarGroupLabel,
4367
- SidebarHeader,
4368
- SidebarInput,
4369
- SidebarInset,
4370
- SidebarMenu,
4371
- SidebarMenuAction,
4372
- SidebarMenuBadge,
4373
- SidebarMenuButton,
4374
- SidebarMenuItem,
4375
- SidebarMenuSkeleton,
4376
- SidebarMenuSub,
4377
- SidebarMenuSubButton,
4378
- SidebarMenuSubItem,
4379
- SidebarProvider,
4380
- SidebarRail,
4381
- SidebarSeparator,
4382
- SidebarTrigger,
4383
- Skeleton,
4384
- Slider,
4385
- Small,
4386
- Stepper,
4387
- StepperContent,
4388
- StepperFooter,
4389
- StepperHeader,
4390
- Strong,
4391
- Switch,
4392
- Table,
4393
- TableBody,
4394
- TableCaption,
4395
- TableCell,
4396
- TableFooter,
4397
- TableHead,
4398
- TableHeader,
4399
- TableRow,
4400
- Tabs,
4401
- TabsContent,
4402
- TabsList,
4403
- TabsTrigger,
4404
- Textarea,
4405
- Toaster,
4406
- Toggle,
4407
- ToggleGroup,
4408
- ToggleGroupItem,
4409
- Tooltip,
4410
- TooltipContent,
4411
- TooltipProvider,
4412
- TooltipTrigger,
4413
- badgeVariants,
4414
- buttonVariants,
4415
- cn,
4416
- navigationMenuTriggerStyle,
4417
- toggleVariants,
4418
- useFormField,
4419
- useIsMobile,
4420
- useSidebar,
4421
- useStepper
4422
- };
4423
- //# sourceMappingURL=index.es.js.map