@use-stall/ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1,3525 @@
1
+ // src/components/accordion.tsx
2
+ import * as React from "react";
3
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
4
+ import { ChevronDown } from "lucide-react";
5
+
6
+ // src/lib/utils.ts
7
+ import { clsx } from "clsx";
8
+ import { twMerge } from "tailwind-merge";
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+
13
+ // src/components/accordion.tsx
14
+ import { jsx, jsxs } from "react/jsx-runtime";
15
+ var Accordion = AccordionPrimitive.Root;
16
+ var AccordionItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
17
+ AccordionPrimitive.Item,
18
+ {
19
+ ref,
20
+ className: cn("border-b last:border-b-0", className),
21
+ ...props
22
+ }
23
+ ));
24
+ AccordionItem.displayName = "AccordionItem";
25
+ var AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
26
+ AccordionPrimitive.Trigger,
27
+ {
28
+ ref,
29
+ className: cn(
30
+ "flex flex-1 items-center justify-between py-4 font-medium text-xs transition-all hover:underline [&[data-state=open]>svg]:rotate-180 cursor-pointer",
31
+ className
32
+ ),
33
+ ...props,
34
+ children: [
35
+ children,
36
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
37
+ ]
38
+ }
39
+ ) }));
40
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
41
+ var AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
42
+ AccordionPrimitive.Content,
43
+ {
44
+ ref,
45
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
46
+ ...props,
47
+ children: /* @__PURE__ */ jsx("div", { className: cn("pb-4 pt-0", className), children })
48
+ }
49
+ ));
50
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
51
+
52
+ // src/components/alert-dialog.tsx
53
+ import { AlertDialog as AlertDialogPrimitive } from "@base-ui-components/react/alert-dialog";
54
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
55
+ function AlertDialog(props) {
56
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
57
+ }
58
+ function AlertDialogTrigger(props) {
59
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
60
+ }
61
+ function AlertDialogPortal(props) {
62
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Portal, { ...props });
63
+ }
64
+ function AlertDialogBackdrop({
65
+ className,
66
+ ...props
67
+ }) {
68
+ return /* @__PURE__ */ jsx2(
69
+ AlertDialogPrimitive.Backdrop,
70
+ {
71
+ className: cn(
72
+ "fixed inset-0 z-50 bg-black/32 backdrop-blur-sm transition-all duration-200 ease-out data-ending-style:opacity-0 data-starting-style:opacity-0",
73
+ className
74
+ ),
75
+ "data-slot": "alert-dialog-backdrop",
76
+ ...props
77
+ }
78
+ );
79
+ }
80
+ function AlertDialogPopup({
81
+ className,
82
+ ...props
83
+ }) {
84
+ return /* @__PURE__ */ jsxs2(AlertDialogPortal, { children: [
85
+ /* @__PURE__ */ jsx2(AlertDialogBackdrop, {}),
86
+ /* @__PURE__ */ jsx2("div", { className: "fixed inset-0 z-50", children: /* @__PURE__ */ jsx2("div", { className: "flex h-dvh flex-col items-center overflow-hidden pt-6 max-sm:before:flex-1 sm:overflow-y-auto sm:p-4 sm:after:flex-1 sm:before:basis-[20vh]", children: /* @__PURE__ */ jsx2(
87
+ AlertDialogPrimitive.Popup,
88
+ {
89
+ className: cn(
90
+ "sm:-translate-y-[calc(1.25rem*var(--nested-dialogs))] row-start-2 grid w-full min-w-0 origin-top gap-4 border bg-popover bg-clip-padding p-6 text-popover-foreground shadow-lg transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform data-ending-style:opacity-0 data-starting-style:opacity-0 max-sm:overflow-y-auto max-sm:border-none max-sm:opacity-[calc(1-min(var(--nested-dialogs),1))] max-sm:data-ending-style:translate-y-4 max-sm:data-starting-style:translate-y-4 sm:max-w-lg sm:scale-[calc(1-0.1*var(--nested-dialogs))] sm:rounded-2xl sm:data-ending-style:scale-98 sm:data-starting-style:scale-98 dark:bg-clip-border",
91
+ "relative before:pointer-events-none before:absolute before:inset-0 before:shadow-[0_1px_--theme(--color-black/4%)] max-sm:before:hidden sm:data-nested:data-ending-style:translate-y-8 sm:data-nested:data-starting-style:translate-y-8 sm:before:rounded-[calc(var(--radius-2xl)-1px)] dark:before:shadow-[0_-1px_--theme(--color-white/8%)]",
92
+ className
93
+ ),
94
+ "data-slot": "alert-dialog-popup",
95
+ ...props
96
+ }
97
+ ) }) })
98
+ ] });
99
+ }
100
+ function AlertDialogHeader({
101
+ className,
102
+ ...props
103
+ }) {
104
+ return /* @__PURE__ */ jsx2(
105
+ "div",
106
+ {
107
+ className: cn("flex flex-col gap-1 text-center sm:text-left", className),
108
+ "data-slot": "alert-dialog-header",
109
+ ...props
110
+ }
111
+ );
112
+ }
113
+ function AlertDialogFooter({
114
+ className,
115
+ ...props
116
+ }) {
117
+ return /* @__PURE__ */ jsx2(
118
+ "div",
119
+ {
120
+ className: cn(
121
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
122
+ className
123
+ ),
124
+ "data-slot": "alert-dialog-footer",
125
+ ...props
126
+ }
127
+ );
128
+ }
129
+ function AlertDialogTitle({
130
+ className,
131
+ ...props
132
+ }) {
133
+ return /* @__PURE__ */ jsx2(
134
+ AlertDialogPrimitive.Title,
135
+ {
136
+ className: cn("font-semibold text-lg", className),
137
+ "data-slot": "alert-dialog-title",
138
+ ...props
139
+ }
140
+ );
141
+ }
142
+ function AlertDialogDescription({
143
+ className,
144
+ ...props
145
+ }) {
146
+ return /* @__PURE__ */ jsx2(
147
+ AlertDialogPrimitive.Description,
148
+ {
149
+ className: cn("text-muted-foreground text-sm", className),
150
+ "data-slot": "alert-dialog-description",
151
+ ...props
152
+ }
153
+ );
154
+ }
155
+ function AlertDialogClose(props) {
156
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Close, { "data-slot": "alert-dialog-close", ...props });
157
+ }
158
+
159
+ // src/components/avatar.tsx
160
+ import * as React2 from "react";
161
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
162
+ import { jsx as jsx3 } from "react/jsx-runtime";
163
+ var Avatar = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
164
+ AvatarPrimitive.Root,
165
+ {
166
+ ref,
167
+ className: cn(
168
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
169
+ className
170
+ ),
171
+ ...props
172
+ }
173
+ ));
174
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
175
+ var AvatarImage = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
176
+ AvatarPrimitive.Image,
177
+ {
178
+ ref,
179
+ className: cn("aspect-square h-full w-full object-cover object-center", className),
180
+ ...props
181
+ }
182
+ ));
183
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
184
+ var AvatarFallback = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
185
+ AvatarPrimitive.Fallback,
186
+ {
187
+ ref,
188
+ className: cn(
189
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
190
+ className
191
+ ),
192
+ ...props
193
+ }
194
+ ));
195
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
196
+
197
+ // src/components/badge.tsx
198
+ import { mergeProps } from "@base-ui-components/react/merge-props";
199
+ import { useRender } from "@base-ui-components/react/use-render";
200
+ import { cva } from "class-variance-authority";
201
+ var badgeVariants = cva(
202
+ "relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-lg border border-transparent font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 [&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0 [button,a&]:cursor-pointer [button,a&]:pointer-coarse:after:absolute [button,a&]:pointer-coarse:after:size-full [button,a&]:pointer-coarse:after:min-h-11 [button,a&]:pointer-coarse:after:min-w-11",
203
+ {
204
+ defaultVariants: {
205
+ size: "default",
206
+ variant: "default"
207
+ },
208
+ variants: {
209
+ size: {
210
+ default: "px-[calc(--spacing(1)-1px)] text-xs",
211
+ lg: "px-[calc(--spacing(1.5)-1px)] text-sm",
212
+ sm: "px-[calc(--spacing(1)-1px)] text-[.625rem]"
213
+ },
214
+ variant: {
215
+ default: "bg-primary text-primary-foreground [button,a&]:hover:bg-primary/90",
216
+ destructive: "bg-destructive text-white [button,a&]:hover:bg-destructive/90",
217
+ error: "bg-destructive/8 text-destructive-foreground dark:bg-destructive/16",
218
+ info: "bg-info/8 text-info-foreground dark:bg-info/16",
219
+ outline: "border-border bg-accent/30 text-muted-foreground [button,a&]:hover:bg-accent/50 dark:[button,a&]:hover:bg-input/48",
220
+ secondary: "bg-secondary text-secondary-foreground [button,a&]:hover:bg-secondary/90",
221
+ success: "bg-success/8 text-success-foreground dark:bg-success/16",
222
+ warning: "bg-warning/8 text-warning-foreground dark:bg-warning/16"
223
+ }
224
+ }
225
+ }
226
+ );
227
+ function Badge({ className, variant, size, render, ...props }) {
228
+ const defaultProps = {
229
+ className: cn(badgeVariants({ className, size, variant })),
230
+ "data-slot": "badge"
231
+ };
232
+ return useRender({
233
+ defaultTagName: "span",
234
+ props: mergeProps(defaultProps, props),
235
+ render
236
+ });
237
+ }
238
+
239
+ // src/components/breadcrumb.tsx
240
+ import * as React3 from "react";
241
+ import { Slot } from "@radix-ui/react-slot";
242
+ import { ChevronRight, MoreHorizontal } from "lucide-react";
243
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
244
+ var Breadcrumb = React3.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx4("nav", { ref, "aria-label": "breadcrumb", ...props }));
245
+ Breadcrumb.displayName = "Breadcrumb";
246
+ var BreadcrumbList = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
247
+ "ol",
248
+ {
249
+ ref,
250
+ className: cn(
251
+ "flex flex-wrap items-center gap-1 wrap-break-word text-sm text-muted-foreground",
252
+ className
253
+ ),
254
+ ...props
255
+ }
256
+ ));
257
+ BreadcrumbList.displayName = "BreadcrumbList";
258
+ var BreadcrumbItem = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
259
+ "li",
260
+ {
261
+ ref,
262
+ className: cn("inline-flex items-center gap-1.5", className),
263
+ ...props
264
+ }
265
+ ));
266
+ BreadcrumbItem.displayName = "BreadcrumbItem";
267
+ var BreadcrumbLink = React3.forwardRef(({ asChild, className, ...props }, ref) => {
268
+ const Comp = asChild ? Slot : "a";
269
+ return /* @__PURE__ */ jsx4(
270
+ Comp,
271
+ {
272
+ ref,
273
+ className: cn("transition-colors hover:text-foreground", className),
274
+ ...props
275
+ }
276
+ );
277
+ });
278
+ BreadcrumbLink.displayName = "BreadcrumbLink";
279
+ var BreadcrumbPage = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
280
+ "span",
281
+ {
282
+ ref,
283
+ role: "link",
284
+ "aria-disabled": "true",
285
+ "aria-current": "page",
286
+ className: cn("font-normal text-foreground", className),
287
+ ...props
288
+ }
289
+ ));
290
+ BreadcrumbPage.displayName = "BreadcrumbPage";
291
+ var BreadcrumbSeparator = ({
292
+ children,
293
+ className,
294
+ ...props
295
+ }) => /* @__PURE__ */ jsx4(
296
+ "li",
297
+ {
298
+ role: "presentation",
299
+ "aria-hidden": "true",
300
+ className: cn("[&>svg]:w-3.5 [&>svg]:h-3.5", className),
301
+ ...props,
302
+ children: children ?? /* @__PURE__ */ jsx4(ChevronRight, {})
303
+ }
304
+ );
305
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
306
+ var BreadcrumbEllipsis = ({
307
+ className,
308
+ ...props
309
+ }) => /* @__PURE__ */ jsxs3(
310
+ "span",
311
+ {
312
+ role: "presentation",
313
+ "aria-hidden": "true",
314
+ className: cn("flex h-9 w-9 items-center justify-center", className),
315
+ ...props,
316
+ children: [
317
+ /* @__PURE__ */ jsx4(MoreHorizontal, { className: "h-4 w-4" }),
318
+ /* @__PURE__ */ jsx4("span", { className: "sr-only", children: "More" })
319
+ ]
320
+ }
321
+ );
322
+ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
323
+
324
+ // src/components/button.tsx
325
+ import { mergeProps as mergeProps2 } from "@base-ui-components/react/merge-props";
326
+ import { useRender as useRender2 } from "@base-ui-components/react/use-render";
327
+ import { cva as cva2 } from "class-variance-authority";
328
+ var buttonVariants = cva2(
329
+ "relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-10 border bg-clip-padding text-sm font-medium whitespace-nowrap transition-shadow outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
330
+ {
331
+ variants: {
332
+ variant: {
333
+ default: "border-primary bg-primary text-primary-foreground shadow-xs shadow-primary/24 not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] hover:bg-primary/90 [&:is(:active,[data-pressed])]:inset-shadow-[0_1px_--theme(--color-black/8%)] [&:is(:disabled,:active,[data-pressed])]:shadow-none",
334
+ outline: "border-border bg-background text-muted-foreground shadow-xs not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-input/32 dark:not-in-data-[slot=group]:bg-clip-border dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/4%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/8%)] [&:is(:disabled,:active,[data-pressed])]:shadow-none [&:is(:hover,[data-pressed])]:opacity-80",
335
+ secondary: "border-secondary bg-secondary text-secondary-foreground hover:bg-secondary/90 data-pressed:bg-secondary/90",
336
+ destructive: "border-destructive bg-destructive text-white shadow-xs shadow-destructive/24 not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] hover:bg-destructive/90 [&:is(:active,[data-pressed])]:inset-shadow-[0_1px_--theme(--color-black/8%)] [&:is(:disabled,:active,[data-pressed])]:shadow-none",
337
+ "destructive-outline": "border-border bg-transparent text-destructive-foreground shadow-xs not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-input/32 dark:not-in-data-[slot=group]:bg-clip-border dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/4%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/8%)] [&:is(:disabled,:active,[data-pressed])]:shadow-none [&:is(:hover,[data-pressed])]:border-destructive/32 [&:is(:hover,[data-pressed])]:bg-destructive/4",
338
+ ghost: "border-transparent hover:bg-accent data-pressed:bg-accent",
339
+ link: "border-transparent underline-offset-4 hover:underline"
340
+ },
341
+ size: {
342
+ default: "min-h-10 px-[calc(--spacing(3)-1px)] py-[calc(--spacing(1.5)-1px)]",
343
+ xs: "min-h-7 gap-1 rounded-md px-[calc(--spacing(2)-1px)] py-[calc(--spacing(1)-1px)] text-xs before:rounded-[calc(var(--radius-md)-1px)] [&_svg:not([class*='size-'])]:size-3",
344
+ sm: "min-h-8 gap-1.5 px-[calc(--spacing(2.5)-1px)] py-[calc(--spacing(1)-1px)]",
345
+ lg: "min-h-10 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2)-1px)]",
346
+ xl: "min-h-12 px-[calc(--spacing(4)-1px)] py-[calc(--spacing(2)-1px)] text-base [&_svg:not([class*='size-'])]:size-4.5",
347
+ icon: "size-10",
348
+ "icon-xs": "size-6 rounded-md before:rounded-[calc(var(--radius-md)-1px)]",
349
+ "icon-sm": "size-7",
350
+ "icon-lg": "size-9",
351
+ "icon-xl": "size-10 [&_svg:not([class*='size-'])]:size-4.5"
352
+ }
353
+ },
354
+ defaultVariants: {
355
+ variant: "default",
356
+ size: "default"
357
+ }
358
+ }
359
+ );
360
+ function Button({ className, variant, size, render, ...props }) {
361
+ const typeValue = render ? void 0 : "button";
362
+ const defaultProps = {
363
+ "data-slot": "button",
364
+ className: cn(buttonVariants({ variant, size, className })),
365
+ type: typeValue
366
+ };
367
+ return useRender2({
368
+ defaultTagName: "button",
369
+ render,
370
+ props: mergeProps2(defaultProps, props)
371
+ });
372
+ }
373
+
374
+ // src/components/card.tsx
375
+ import * as React4 from "react";
376
+ import { jsx as jsx5 } from "react/jsx-runtime";
377
+ var Card = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
378
+ "div",
379
+ {
380
+ ref,
381
+ className: cn(
382
+ "rounded-2xl border bg-card text-card-foreground shadow-xs",
383
+ className
384
+ ),
385
+ ...props
386
+ }
387
+ ));
388
+ Card.displayName = "Card";
389
+ var CardHeader = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
390
+ "div",
391
+ {
392
+ ref,
393
+ className: cn("flex flex-col space-y-1.5 p-5", className),
394
+ ...props
395
+ }
396
+ ));
397
+ CardHeader.displayName = "CardHeader";
398
+ var CardTitle = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
399
+ "h3",
400
+ {
401
+ ref,
402
+ className: cn(
403
+ "text-2xl font-semibold leading-none tracking-tight",
404
+ className
405
+ ),
406
+ ...props
407
+ }
408
+ ));
409
+ CardTitle.displayName = "CardTitle";
410
+ var CardDescription = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
411
+ "p",
412
+ {
413
+ ref,
414
+ className: cn("text-sm text-muted-foreground", className),
415
+ ...props
416
+ }
417
+ ));
418
+ CardDescription.displayName = "CardDescription";
419
+ var CardContent = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5("div", { ref, className: cn("p-5 pt-0", className), ...props }));
420
+ CardContent.displayName = "CardContent";
421
+ var CardFooter = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
422
+ "div",
423
+ {
424
+ ref,
425
+ className: cn("flex items-center p-5 pt-0", className),
426
+ ...props
427
+ }
428
+ ));
429
+ CardFooter.displayName = "CardFooter";
430
+
431
+ // src/components/checkbox.tsx
432
+ import * as React5 from "react";
433
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
434
+ import { Check } from "lucide-react";
435
+ import { jsx as jsx6 } from "react/jsx-runtime";
436
+ var Checkbox = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
437
+ CheckboxPrimitive.Root,
438
+ {
439
+ ref,
440
+ className: cn(
441
+ "peer h-4 w-4 shrink-0 rounded-sm shadow-xs border border-border ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-none",
442
+ className
443
+ ),
444
+ ...props,
445
+ children: /* @__PURE__ */ jsx6(
446
+ CheckboxPrimitive.Indicator,
447
+ {
448
+ className: cn("flex items-center justify-center text-current"),
449
+ children: /* @__PURE__ */ jsx6(Check, { className: "h-3 w-3 stroke-white" })
450
+ }
451
+ )
452
+ }
453
+ ));
454
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
455
+
456
+ // src/components/combobox-multi.tsx
457
+ import { Combobox as ComboboxPrimitive } from "@base-ui/react/combobox";
458
+ import { ChevronsUpDownIcon, XIcon } from "lucide-react";
459
+ import * as React8 from "react";
460
+
461
+ // src/components/input.tsx
462
+ import * as React6 from "react";
463
+ import { jsx as jsx7 } from "react/jsx-runtime";
464
+ var Input = React6.forwardRef(
465
+ ({ className, type, removeFocusIndicator, ...props }, ref) => {
466
+ return /* @__PURE__ */ jsx7(
467
+ "input",
468
+ {
469
+ type,
470
+ className: cn(
471
+ `flex h-10 w-full rounded-10 border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0
472
+ file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground/30 font-normal
473
+ focus-visible:outline-hidden focus-visible:border-primary/80 focus-visible:ring-2 focus-visible:ring-ring/30
474
+ focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50`,
475
+ removeFocusIndicator && "focus-visible:ring-0 focus:ring-0 focus-visible:ring-offset-0 focus-visible:border-input",
476
+ className
477
+ ),
478
+ ref,
479
+ ...props
480
+ }
481
+ );
482
+ }
483
+ );
484
+ Input.displayName = "Input";
485
+
486
+ // src/components/scroll-area.tsx
487
+ import * as React7 from "react";
488
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
489
+ import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
490
+ var ScrollArea = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs4(
491
+ ScrollAreaPrimitive.Root,
492
+ {
493
+ ref,
494
+ className: cn("relative overflow-hidden", className),
495
+ ...props,
496
+ children: [
497
+ /* @__PURE__ */ jsx8(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
498
+ /* @__PURE__ */ jsx8(ScrollBar, {}),
499
+ /* @__PURE__ */ jsx8(ScrollAreaPrimitive.Corner, {})
500
+ ]
501
+ }
502
+ ));
503
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
504
+ var ScrollBar = React7.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx8(
505
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
506
+ {
507
+ ref,
508
+ orientation,
509
+ className: cn(
510
+ "flex touch-none select-none transition-colors",
511
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-px",
512
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-px",
513
+ className
514
+ ),
515
+ ...props,
516
+ children: /* @__PURE__ */ jsx8(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
517
+ }
518
+ ));
519
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
520
+
521
+ // src/components/combobox-multi.tsx
522
+ import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
523
+ var ComboboxContext = React8.createContext({
524
+ chipsRef: null,
525
+ multiple: false
526
+ });
527
+ function Combobox(props) {
528
+ const chipsRef = React8.useRef(null);
529
+ return /* @__PURE__ */ jsx9(ComboboxContext.Provider, { value: { chipsRef, multiple: !!props.multiple }, children: /* @__PURE__ */ jsx9(
530
+ ComboboxPrimitive.Root,
531
+ {
532
+ ...props
533
+ }
534
+ ) });
535
+ }
536
+ function ComboboxInput({
537
+ className,
538
+ showTrigger = true,
539
+ showClear = false,
540
+ startAddon,
541
+ size,
542
+ ...props
543
+ }) {
544
+ const { multiple } = React8.useContext(ComboboxContext);
545
+ const sizeValue = size ?? "default";
546
+ if (multiple) {
547
+ return /* @__PURE__ */ jsx9(
548
+ ComboboxPrimitive.Input,
549
+ {
550
+ className: cn(
551
+ "min-w-12 flex-1 text-base outline-none sm:text-sm [[data-slot=combobox-chip]+&]:ps-0.5",
552
+ sizeValue === "sm" ? "ps-1.5" : "ps-2",
553
+ className
554
+ ),
555
+ "data-size": typeof sizeValue === "string" ? sizeValue : void 0,
556
+ "data-slot": "combobox-input",
557
+ size: typeof sizeValue === "number" ? sizeValue : void 0,
558
+ ...props
559
+ }
560
+ );
561
+ }
562
+ return /* @__PURE__ */ jsxs5("div", { className: "relative not-has-[>*.w-full]:w-fit w-full text-foreground has-disabled:opacity-64", children: [
563
+ startAddon && /* @__PURE__ */ jsx9(
564
+ "div",
565
+ {
566
+ "aria-hidden": "true",
567
+ className: "[&_svg]:-mx-0.5 pointer-events-none absolute inset-y-0 start-px z-10 flex items-center ps-[calc(--spacing(3)-1px)] opacity-80 has-[+[data-size=sm]]:ps-[calc(--spacing(2.5)-1px)] [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4",
568
+ "data-slot": "combobox-start-addon",
569
+ children: startAddon
570
+ }
571
+ ),
572
+ /* @__PURE__ */ jsx9(
573
+ ComboboxPrimitive.Input,
574
+ {
575
+ className: cn(
576
+ startAddon && "data-[size=sm]:*:data-[slot=combobox-input]:ps-[calc(--spacing(7.5)-1px)] *:data-[slot=combobox-input]:ps-[calc(--spacing(8.5)-1px)] sm:data-[size=sm]:*:data-[slot=combobox-input]:ps-[calc(--spacing(7)-1px)] sm:*:data-[slot=combobox-input]:ps-[calc(--spacing(8)-1px)]",
577
+ sizeValue === "sm" ? "has-[+[data-slot=combobox-trigger],+[data-slot=combobox-clear]]:*:data-[slot=combobox-input]:pe-6.5" : "has-[+[data-slot=combobox-trigger],+[data-slot=combobox-clear]]:*:data-[slot=combobox-input]:pe-7",
578
+ className
579
+ ),
580
+ "data-slot": "combobox-input",
581
+ render: /* @__PURE__ */ jsx9(
582
+ Input,
583
+ {
584
+ className: "has-disabled:opacity-100",
585
+ size: sizeValue
586
+ }
587
+ ),
588
+ ...props
589
+ }
590
+ ),
591
+ showTrigger && /* @__PURE__ */ jsx9(
592
+ ComboboxTrigger,
593
+ {
594
+ className: cn(
595
+ "-translate-y-1/2 absolute top-1/2 inline-flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-opacity pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 has-[+[data-slot=combobox-clear]]:hidden sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
596
+ sizeValue === "sm" ? "end-0" : "end-0.5"
597
+ ),
598
+ children: /* @__PURE__ */ jsx9(ChevronsUpDownIcon, {})
599
+ }
600
+ ),
601
+ showClear && /* @__PURE__ */ jsx9(
602
+ ComboboxClear,
603
+ {
604
+ className: cn(
605
+ "-translate-y-1/2 absolute top-1/2 inline-flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-opacity pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 has-[+[data-slot=combobox-clear]]:hidden sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
606
+ sizeValue === "sm" ? "end-0" : "end-0.5"
607
+ ),
608
+ children: /* @__PURE__ */ jsx9(XIcon, {})
609
+ }
610
+ )
611
+ ] });
612
+ }
613
+ function ComboboxTrigger({
614
+ className,
615
+ ...props
616
+ }) {
617
+ return /* @__PURE__ */ jsx9(
618
+ ComboboxPrimitive.Trigger,
619
+ {
620
+ className,
621
+ "data-slot": "combobox-trigger",
622
+ ...props
623
+ }
624
+ );
625
+ }
626
+ function ComboboxPopup({
627
+ className,
628
+ children,
629
+ sideOffset = 4,
630
+ ...props
631
+ }) {
632
+ const { chipsRef } = React8.useContext(ComboboxContext);
633
+ return /* @__PURE__ */ jsx9(ComboboxPrimitive.Portal, { children: /* @__PURE__ */ jsx9(
634
+ ComboboxPrimitive.Positioner,
635
+ {
636
+ anchor: chipsRef,
637
+ className: "z-50 select-none",
638
+ "data-slot": "combobox-positioner",
639
+ sideOffset,
640
+ children: /* @__PURE__ */ jsx9(
641
+ "span",
642
+ {
643
+ className: cn(
644
+ "relative flex max-h-full origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 transition-[scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/6%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]",
645
+ className
646
+ ),
647
+ children: /* @__PURE__ */ jsx9(
648
+ ComboboxPrimitive.Popup,
649
+ {
650
+ className: "flex max-h-[min(var(--available-height),23rem)] w-(--anchor-width) max-w-(--available-width) flex-col text-foreground",
651
+ "data-slot": "combobox-popup",
652
+ ...props,
653
+ children
654
+ }
655
+ )
656
+ }
657
+ )
658
+ }
659
+ ) });
660
+ }
661
+ function ComboboxItem({
662
+ className,
663
+ children,
664
+ ...props
665
+ }) {
666
+ return /* @__PURE__ */ jsxs5(
667
+ ComboboxPrimitive.Item,
668
+ {
669
+ className: cn(
670
+ "grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default grid-cols-[1rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-base outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
671
+ className
672
+ ),
673
+ "data-slot": "combobox-item",
674
+ ...props,
675
+ children: [
676
+ /* @__PURE__ */ jsx9(ComboboxPrimitive.ItemIndicator, { className: "col-start-1", children: /* @__PURE__ */ jsx9(
677
+ "svg",
678
+ {
679
+ fill: "none",
680
+ height: "24",
681
+ stroke: "currentColor",
682
+ strokeLinecap: "round",
683
+ strokeLinejoin: "round",
684
+ strokeWidth: "2",
685
+ viewBox: "0 0 24 24",
686
+ width: "24",
687
+ xmlns: "http://www.w3.org/1500/svg",
688
+ children: /* @__PURE__ */ jsx9("path", { d: "M5.252 12.7 10.2 18.63 18.748 5.37" })
689
+ }
690
+ ) }),
691
+ /* @__PURE__ */ jsx9("div", { className: "col-start-2", children })
692
+ ]
693
+ }
694
+ );
695
+ }
696
+ function ComboboxSeparator({
697
+ className,
698
+ ...props
699
+ }) {
700
+ return /* @__PURE__ */ jsx9(
701
+ ComboboxPrimitive.Separator,
702
+ {
703
+ className: cn("mx-2 my-1 h-px bg-border last:hidden", className),
704
+ "data-slot": "combobox-separator",
705
+ ...props
706
+ }
707
+ );
708
+ }
709
+ function ComboboxGroup({ className, ...props }) {
710
+ return /* @__PURE__ */ jsx9(
711
+ ComboboxPrimitive.Group,
712
+ {
713
+ className: cn("[[role=group]+&]:mt-1.5", className),
714
+ "data-slot": "combobox-group",
715
+ ...props
716
+ }
717
+ );
718
+ }
719
+ function ComboboxGroupLabel({
720
+ className,
721
+ ...props
722
+ }) {
723
+ return /* @__PURE__ */ jsx9(
724
+ ComboboxPrimitive.GroupLabel,
725
+ {
726
+ className: cn(
727
+ "px-2 py-1.5 font-medium text-muted-foreground text-xs",
728
+ className
729
+ ),
730
+ "data-slot": "combobox-group-label",
731
+ ...props
732
+ }
733
+ );
734
+ }
735
+ function ComboboxEmpty({ className, ...props }) {
736
+ return /* @__PURE__ */ jsx9(
737
+ ComboboxPrimitive.Empty,
738
+ {
739
+ className: cn(
740
+ "not-empty:p-2 text-center text-base text-muted-foreground sm:text-sm",
741
+ className
742
+ ),
743
+ "data-slot": "combobox-empty",
744
+ ...props
745
+ }
746
+ );
747
+ }
748
+ function ComboboxRow({ className, ...props }) {
749
+ return /* @__PURE__ */ jsx9(
750
+ ComboboxPrimitive.Row,
751
+ {
752
+ className,
753
+ "data-slot": "combobox-row",
754
+ ...props
755
+ }
756
+ );
757
+ }
758
+ function ComboboxValue({ ...props }) {
759
+ return /* @__PURE__ */ jsx9(ComboboxPrimitive.Value, { "data-slot": "combobox-value", ...props });
760
+ }
761
+ function ComboboxList({ className, ...props }) {
762
+ return /* @__PURE__ */ jsx9(ScrollArea, { children: /* @__PURE__ */ jsx9(
763
+ ComboboxPrimitive.List,
764
+ {
765
+ className: cn(
766
+ "not-empty:scroll-py-1 not-empty:px-1 not-empty:py-1 in-data-has-overflow-y:pe-3",
767
+ className
768
+ ),
769
+ "data-slot": "combobox-list",
770
+ ...props
771
+ }
772
+ ) });
773
+ }
774
+ function ComboboxClear({ className, ...props }) {
775
+ return /* @__PURE__ */ jsx9(
776
+ ComboboxPrimitive.Clear,
777
+ {
778
+ className,
779
+ "data-slot": "combobox-clear",
780
+ ...props
781
+ }
782
+ );
783
+ }
784
+ function ComboboxStatus({
785
+ className,
786
+ ...props
787
+ }) {
788
+ return /* @__PURE__ */ jsx9(
789
+ ComboboxPrimitive.Status,
790
+ {
791
+ className: cn(
792
+ "px-3 py-2 font-medium text-muted-foreground text-xs empty:m-0 empty:p-0",
793
+ className
794
+ ),
795
+ "data-slot": "combobox-status",
796
+ ...props
797
+ }
798
+ );
799
+ }
800
+ function ComboboxCollection(props) {
801
+ return /* @__PURE__ */ jsx9(ComboboxPrimitive.Collection, { "data-slot": "combobox-collection", ...props });
802
+ }
803
+ function ComboboxChips({
804
+ className,
805
+ children,
806
+ startAddon,
807
+ ...props
808
+ }) {
809
+ const { chipsRef } = React8.useContext(ComboboxContext);
810
+ return /* @__PURE__ */ jsxs5(
811
+ ComboboxPrimitive.Chips,
812
+ {
813
+ className: cn(
814
+ "relative inline-flex min-h-9 w-full flex-wrap gap-1 rounded-lg border border-input bg-background not-dark:bg-clip-padding p-[calc(--spacing(1)-1px)] text-base shadow-xs/5 outline-none ring-ring/24 transition-shadow *:min-h-7 before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] not-has-disabled:not-focus-within:not-aria-invalid:before:shadow-[0_1px_--theme(--color-black/6%)] focus-within:border-ring focus-within:ring-[3px] has-disabled:pointer-events-none has-data-[size=lg]:min-h-10 has-data-[size=sm]:min-h-8 has-aria-invalid:border-destructive/36 has-disabled:opacity-64 has-[:disabled,:focus-within,[aria-invalid]]:shadow-none focus-within:has-aria-invalid:border-destructive/64 focus-within:has-aria-invalid:ring-destructive/16 has-data-[size=lg]:*:min-h-8 has-data-[size=sm]:*:min-h-6 sm:min-h-8 sm:text-sm sm:has-data-[size=lg]:min-h-9 sm:has-data-[size=sm]:min-h-7 sm:*:min-h-6 sm:has-data-[size=lg]:*:min-h-7 sm:has-data-[size=sm]:*:min-h-5 dark:not-has-disabled:bg-input/32 dark:has-aria-invalid:ring-destructive/24 dark:not-has-disabled:not-focus-within:not-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]",
815
+ className
816
+ ),
817
+ "data-slot": "combobox-chips",
818
+ onMouseDown: (e) => {
819
+ const target = e.target;
820
+ const isChip = target.closest('[data-slot="combobox-chip"]');
821
+ if (isChip || !chipsRef?.current) return;
822
+ e.preventDefault();
823
+ const input = chipsRef.current.querySelector("input");
824
+ if (input && !chipsRef.current.querySelector("input:focus")) {
825
+ input.focus();
826
+ }
827
+ },
828
+ ref: chipsRef,
829
+ ...props,
830
+ children: [
831
+ startAddon && /* @__PURE__ */ jsx9(
832
+ "div",
833
+ {
834
+ "aria-hidden": "true",
835
+ className: "[&_svg]:-ms-0.5 [&_svg]:-me-1.5 flex shrink-0 items-center ps-2 opacity-80 has-[~[data-size=sm]]:has-[+[data-slot=combobox-chip]]:pe-1.5 has-[~[data-size=sm]]:ps-1.5 has-[+[data-slot=combobox-chip]]:pe-2 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
836
+ "data-slot": "combobox-start-addon",
837
+ children: startAddon
838
+ }
839
+ ),
840
+ children
841
+ ]
842
+ }
843
+ );
844
+ }
845
+ function ComboboxChip({ children, ...props }) {
846
+ return /* @__PURE__ */ jsxs5(
847
+ ComboboxPrimitive.Chip,
848
+ {
849
+ className: "flex items-center rounded-[calc(var(--radius-md)-1px)] bg-accent ps-2 font-medium text-accent-foreground text-sm outline-none sm:text-xs/(--text-xs--line-height) [&_svg:not([class*='size-'])]:size-4 sm:[&_svg:not([class*='size-'])]:size-3.5",
850
+ "data-slot": "combobox-chip",
851
+ ...props,
852
+ children: [
853
+ children,
854
+ /* @__PURE__ */ jsx9(ComboboxChipRemove, {})
855
+ ]
856
+ }
857
+ );
858
+ }
859
+ function ComboboxChipRemove(props) {
860
+ return /* @__PURE__ */ jsx9(
861
+ ComboboxPrimitive.ChipRemove,
862
+ {
863
+ "aria-label": "Remove",
864
+ className: "h-full shrink-0 cursor-pointer px-1.5 opacity-80 hover:opacity-100 [&_svg:not([class*='size-'])]:size-4 sm:[&_svg:not([class*='size-'])]:size-3.5",
865
+ "data-slot": "combobox-chip-remove",
866
+ ...props,
867
+ children: /* @__PURE__ */ jsx9(XIcon, {})
868
+ }
869
+ );
870
+ }
871
+ var useComboboxFilter = ComboboxPrimitive.useFilter;
872
+
873
+ // src/components/combobox.tsx
874
+ import * as React11 from "react";
875
+ import { Check as Check2, ChevronsUpDown } from "lucide-react";
876
+
877
+ // src/components/command.tsx
878
+ import * as React9 from "react";
879
+ import { Command as CommandPrimitive } from "cmdk";
880
+ import { Search } from "lucide-react";
881
+
882
+ // src/components/dialog.tsx
883
+ import { Dialog as DialogPrimitive } from "@base-ui-components/react/dialog";
884
+ import { XIcon as XIcon2 } from "lucide-react";
885
+ import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
886
+ var Dialog = DialogPrimitive.Root;
887
+ function DialogTrigger(props) {
888
+ return /* @__PURE__ */ jsx10(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
889
+ }
890
+ function DialogPortal(props) {
891
+ return /* @__PURE__ */ jsx10(DialogPrimitive.Portal, { ...props });
892
+ }
893
+ function DialogClose(props) {
894
+ return /* @__PURE__ */ jsx10(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
895
+ }
896
+ function DialogBackdrop({
897
+ className,
898
+ ...props
899
+ }) {
900
+ return /* @__PURE__ */ jsx10(
901
+ DialogPrimitive.Backdrop,
902
+ {
903
+ className: cn(
904
+ "fixed inset-0 z-50 bg-black/32 backdrop-blur-sm transition-all duration-200 data-ending-style:opacity-0 data-starting-style:opacity-0",
905
+ className
906
+ ),
907
+ "data-slot": "dialog-backdrop",
908
+ ...props
909
+ }
910
+ );
911
+ }
912
+ function DialogPopup({
913
+ className,
914
+ children,
915
+ showCloseButton = true,
916
+ ...props
917
+ }) {
918
+ return /* @__PURE__ */ jsxs6(DialogPortal, { children: [
919
+ /* @__PURE__ */ jsx10(DialogBackdrop, {}),
920
+ /* @__PURE__ */ jsx10("div", { className: "fixed inset-0 z-50", children: /* @__PURE__ */ jsx10("div", { className: "grid h-dvh grid-rows-[1fr_auto] justify-items-center pt-6 sm:grid-rows-[1fr_auto_3fr] sm:p-4", children: /* @__PURE__ */ jsx10(
921
+ DialogPrimitive.Popup,
922
+ {
923
+ className: cn(
924
+ "sm:-translate-y-[calc(1.25rem*var(--nested-dialogs))] relative row-start-2 grid max-h-full w-full min-w-0 origin-top overflow-hidden border bg-popover bg-clip-padding text-popover-foreground opacity-[calc(1-0.1*var(--nested-dialogs))] shadow-lg transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform before:pointer-events-none before:absolute before:inset-0 before:shadow-[0_1px_--theme(--color-black/4%)] **:has-[+[data-slot=dialog-footer]]:pb-4 data-ending-style:opacity-0 data-starting-style:opacity-0 max-sm:border-none max-sm:opacity-[calc(1-min(var(--nested-dialogs),1))] max-sm:data-ending-style:translate-y-4 max-sm:data-starting-style:translate-y-4 max-sm:before:hidden sm:max-w-lg sm:data-nested:data-ending-style:translate-y-8 sm:data-nested:data-starting-style:translate-y-8 sm:scale-[calc(1-0.1*var(--nested-dialogs))] sm:rounded-2xl sm:data-ending-style:scale-98 sm:data-starting-style:scale-98 sm:before:rounded-[calc(var(--radius-2xl)-1px)] sm:**:has-[+[data-slot=dialog-footer]]:pb-6 dark:bg-clip-border dark:before:shadow-[0_-1px_--theme(--color-white/8%)]",
925
+ className
926
+ ),
927
+ "data-slot": "dialog-popup",
928
+ ...props,
929
+ children: /* @__PURE__ */ jsxs6("div", { className: "flex h-full flex-col overflow-y-auto", children: [
930
+ children,
931
+ showCloseButton && /* @__PURE__ */ jsxs6(DialogPrimitive.Close, { className: "absolute end-2 top-2 inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-72 outline-none transition-[color,background-color,box-shadow,opacity] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", children: [
932
+ /* @__PURE__ */ jsx10(XIcon2, {}),
933
+ /* @__PURE__ */ jsx10("span", { className: "sr-only", children: "Close" })
934
+ ] })
935
+ ] })
936
+ }
937
+ ) }) })
938
+ ] });
939
+ }
940
+ function DialogHeader({ className, ...props }) {
941
+ return /* @__PURE__ */ jsx10(
942
+ "div",
943
+ {
944
+ className: cn(
945
+ "flex flex-col gap-1 px-6 pt-6 pb-4 text-center last:pb-6 sm:text-left",
946
+ className
947
+ ),
948
+ "data-slot": "dialog-header",
949
+ ...props
950
+ }
951
+ );
952
+ }
953
+ function DialogFooter({ className, ...props }) {
954
+ return /* @__PURE__ */ jsx10(
955
+ "div",
956
+ {
957
+ className: cn(
958
+ "flex flex-col-reverse gap-2 px-6 pb-4 sm:flex-row sm:justify-end sm:rounded-b-xl sm:border-t sm:bg-muted/50 sm:pt-4",
959
+ className
960
+ ),
961
+ "data-slot": "dialog-footer",
962
+ ...props
963
+ }
964
+ );
965
+ }
966
+ function DialogTitle({ className, ...props }) {
967
+ return /* @__PURE__ */ jsx10(
968
+ DialogPrimitive.Title,
969
+ {
970
+ className: cn("font-heading text-xl font-semibold leading-none", className),
971
+ "data-slot": "dialog-title",
972
+ ...props
973
+ }
974
+ );
975
+ }
976
+ function DialogDescription({
977
+ className,
978
+ ...props
979
+ }) {
980
+ return /* @__PURE__ */ jsx10(
981
+ DialogPrimitive.Description,
982
+ {
983
+ className: cn("text-muted-foreground text-sm", className),
984
+ "data-slot": "dialog-description",
985
+ ...props
986
+ }
987
+ );
988
+ }
989
+
990
+ // src/components/command.tsx
991
+ import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
992
+ var Command = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
993
+ CommandPrimitive,
994
+ {
995
+ ref,
996
+ className: cn(
997
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
998
+ className
999
+ ),
1000
+ ...props
1001
+ }
1002
+ ));
1003
+ Command.displayName = CommandPrimitive.displayName;
1004
+ var CommandDialog = ({ children, ...props }) => {
1005
+ return /* @__PURE__ */ jsx11(Dialog, { ...props, children: /* @__PURE__ */ jsx11(DialogPopup, { className: "overflow-hidden p-0 shadow-lg", children: /* @__PURE__ */ jsx11(Command, { className: "**:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 **:[[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 **:[[cmdk-input]]:h-12 **:[[cmdk-item]]:px-2 **:[[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
1006
+ };
1007
+ var CommandInput = React9.forwardRef(({ className, searchContainerClassName, icon, ...props }, ref) => /* @__PURE__ */ jsxs7(
1008
+ "div",
1009
+ {
1010
+ className: cn("flex items-center border-b px-3", searchContainerClassName),
1011
+ "cmdk-input-wrapper": "",
1012
+ children: [
1013
+ icon || /* @__PURE__ */ jsx11(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1014
+ /* @__PURE__ */ jsx11(
1015
+ CommandPrimitive.Input,
1016
+ {
1017
+ ref,
1018
+ className: cn(
1019
+ "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
1020
+ className
1021
+ ),
1022
+ ...props
1023
+ }
1024
+ )
1025
+ ]
1026
+ }
1027
+ ));
1028
+ CommandInput.displayName = CommandPrimitive.Input.displayName;
1029
+ var CommandList = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
1030
+ CommandPrimitive.List,
1031
+ {
1032
+ ref,
1033
+ className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
1034
+ ...props
1035
+ }
1036
+ ));
1037
+ CommandList.displayName = CommandPrimitive.List.displayName;
1038
+ var CommandEmpty = React9.forwardRef((props, ref) => /* @__PURE__ */ jsx11(
1039
+ CommandPrimitive.Empty,
1040
+ {
1041
+ ref,
1042
+ className: "py-6 text-center text-sm",
1043
+ ...props
1044
+ }
1045
+ ));
1046
+ CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
1047
+ var CommandGroup = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
1048
+ CommandPrimitive.Group,
1049
+ {
1050
+ ref,
1051
+ className: cn(
1052
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
1053
+ className
1054
+ ),
1055
+ ...props
1056
+ }
1057
+ ));
1058
+ CommandGroup.displayName = CommandPrimitive.Group.displayName;
1059
+ var CommandSeparator = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
1060
+ CommandPrimitive.Separator,
1061
+ {
1062
+ ref,
1063
+ className: cn("-mx-1 h-px bg-border", className),
1064
+ ...props
1065
+ }
1066
+ ));
1067
+ CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
1068
+ var CommandItem = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
1069
+ CommandPrimitive.Item,
1070
+ {
1071
+ ref,
1072
+ className: cn(
1073
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50",
1074
+ className
1075
+ ),
1076
+ ...props
1077
+ }
1078
+ ));
1079
+ CommandItem.displayName = CommandPrimitive.Item.displayName;
1080
+ var CommandShortcut = ({
1081
+ className,
1082
+ ...props
1083
+ }) => {
1084
+ return /* @__PURE__ */ jsx11(
1085
+ "span",
1086
+ {
1087
+ className: cn(
1088
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1089
+ className
1090
+ ),
1091
+ ...props
1092
+ }
1093
+ );
1094
+ };
1095
+ CommandShortcut.displayName = "CommandShortcut";
1096
+
1097
+ // src/components/popover.tsx
1098
+ import * as React10 from "react";
1099
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
1100
+ import { jsx as jsx12 } from "react/jsx-runtime";
1101
+ var Popover = PopoverPrimitive.Root;
1102
+ var PopoverTrigger = PopoverPrimitive.Trigger;
1103
+ var PopoverContent = React10.forwardRef(
1104
+ ({
1105
+ className,
1106
+ align = "center",
1107
+ sideOffset = 4,
1108
+ hidePrimitive = false,
1109
+ ...props
1110
+ }, ref) => {
1111
+ const Contents = () => /* @__PURE__ */ jsx12(
1112
+ PopoverPrimitive.Content,
1113
+ {
1114
+ ref,
1115
+ align,
1116
+ sideOffset,
1117
+ className: cn(
1118
+ `z-50 w-72 rounded-10 border bg-popover p-4 text-popover-foreground shadow-md
1119
+ outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out
1120
+ data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95
1121
+ data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2
1122
+ data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,
1123
+ className
1124
+ ),
1125
+ ...props
1126
+ }
1127
+ );
1128
+ if (hidePrimitive) {
1129
+ return /* @__PURE__ */ jsx12(Contents, {});
1130
+ }
1131
+ return /* @__PURE__ */ jsx12(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx12(Contents, {}) });
1132
+ }
1133
+ );
1134
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1135
+
1136
+ // src/components/combobox.tsx
1137
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
1138
+ function Combobox2({ modal = false, ...props }) {
1139
+ const [open, setOpen] = React11.useState(false);
1140
+ const options2 = props?.options || props?.data_source;
1141
+ const active_option = React11.useMemo(
1142
+ () => options2?.find((item) => item.value === props.value)?.label,
1143
+ [options2, props.value]
1144
+ );
1145
+ return /* @__PURE__ */ jsxs8(Popover, { open, onOpenChange: setOpen, modal, children: [
1146
+ /* @__PURE__ */ jsx13(
1147
+ PopoverTrigger,
1148
+ {
1149
+ disabled: props.disabled,
1150
+ asChild: !!props.trigger,
1151
+ className: cn(
1152
+ "bg-tranparent w-full px-0",
1153
+ props.disabled && "pointer-events-none cursor-not-allowed"
1154
+ ),
1155
+ children: props.trigger ? props.trigger : /* @__PURE__ */ jsxs8(
1156
+ "button",
1157
+ {
1158
+ type: "button",
1159
+ role: "combobox",
1160
+ "aria-expanded": open,
1161
+ disabled: props.disabled,
1162
+ className: cn(
1163
+ buttonVariants({ variant: "outline" }),
1164
+ `relative w-full h-10 px-3 gap-2 overflow-hidden justify-between bg-background shadow-none
1165
+ text-muted-foreground/40 ring-offset-0 ring-inset [font-weight:inherit]`,
1166
+ props.value && "text-foreground",
1167
+ props?.className,
1168
+ props.disabled && "pointer-events-none cursor-not-allowed"
1169
+ ),
1170
+ children: [
1171
+ /* @__PURE__ */ jsx13(
1172
+ "span",
1173
+ {
1174
+ className: cn(
1175
+ "max-w-full whitespace-nowrap truncate overflow-hidden text-inherit",
1176
+ props.nestedClassName
1177
+ ),
1178
+ children: active_option ? active_option : props.placeholder || "Select ..."
1179
+ }
1180
+ ),
1181
+ !props.disabled && /* @__PURE__ */ jsx13(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50 -mr-1" }),
1182
+ /* @__PURE__ */ jsx13(
1183
+ "input",
1184
+ {
1185
+ onChange: (e) => props.onChange(e.target.value),
1186
+ type: "text",
1187
+ className: "scale-0 absolute",
1188
+ value: props.value ?? "",
1189
+ required: props.required ?? false
1190
+ }
1191
+ )
1192
+ ]
1193
+ }
1194
+ )
1195
+ }
1196
+ ),
1197
+ /* @__PURE__ */ jsx13(
1198
+ PopoverContent,
1199
+ {
1200
+ align: props.align || "center",
1201
+ hidePrimitive: props.hidePrimitive,
1202
+ className: "w-[var(--radix-popover-trigger-width)] max-h-(--radix-popover-content-available-height)\n min-w-40 p-0 overflow-hidden",
1203
+ children: /* @__PURE__ */ jsxs8(
1204
+ Command,
1205
+ {
1206
+ className: "w-full",
1207
+ filter: (value, search, keywords = []) => {
1208
+ const extendValue = value + " " + keywords.join(" ");
1209
+ if (extendValue.toLowerCase().includes(search.toLowerCase())) {
1210
+ return 1;
1211
+ }
1212
+ return 0;
1213
+ },
1214
+ children: [
1215
+ !props.hideSearch && /* @__PURE__ */ jsx13(CommandInput, { placeholder: "Search ...", className: "text-xs" }),
1216
+ /* @__PURE__ */ jsxs8(CommandList, { children: [
1217
+ /* @__PURE__ */ jsx13(CommandEmpty, { className: "flex flex-col items-center justify-center p-6", children: /* @__PURE__ */ jsx13("span", { className: "mt-2 text-xs text-zinc-400", children: "No data found" }) }),
1218
+ /* @__PURE__ */ jsx13(CommandGroup, { children: options2?.map((item) => /* @__PURE__ */ jsxs8(
1219
+ CommandItem,
1220
+ {
1221
+ value: item.value,
1222
+ onSelect: (currentValue) => {
1223
+ props.onChange(
1224
+ currentValue === props.value ? "" : currentValue,
1225
+ item.item
1226
+ );
1227
+ setOpen(false);
1228
+ },
1229
+ keywords: [item.label],
1230
+ className: "cursor-pointer font-medium text-xs capitalize",
1231
+ children: [
1232
+ /* @__PURE__ */ jsx13(
1233
+ Check2,
1234
+ {
1235
+ className: cn(
1236
+ "h-3 w-3",
1237
+ props.value === item.value ? "opacity-100" : "opacity-0"
1238
+ )
1239
+ }
1240
+ ),
1241
+ item.label
1242
+ ]
1243
+ },
1244
+ item.value
1245
+ )) })
1246
+ ] })
1247
+ ]
1248
+ }
1249
+ )
1250
+ }
1251
+ )
1252
+ ] });
1253
+ }
1254
+
1255
+ // src/components/confirm-dialog.tsx
1256
+ import React14 from "react";
1257
+
1258
+ // src/components/fancy-button.tsx
1259
+ import * as React13 from "react";
1260
+ import { Slot as Slot2 } from "@radix-ui/react-slot";
1261
+
1262
+ // src/lib/recursive-clone-children.tsx
1263
+ import * as React12 from "react";
1264
+ function recursiveCloneChildren(children, additionalProps, displayNames, uniqueId, asChild) {
1265
+ const mappedChildren = React12.Children.map(
1266
+ children,
1267
+ (child, index) => {
1268
+ if (!React12.isValidElement(child)) {
1269
+ return child;
1270
+ }
1271
+ const displayName = child.type?.displayName || "";
1272
+ const newProps = displayNames.includes(displayName) ? additionalProps : {};
1273
+ const childProps = child.props;
1274
+ return React12.cloneElement(
1275
+ child,
1276
+ { ...newProps, key: `${uniqueId}-${index}` },
1277
+ recursiveCloneChildren(
1278
+ childProps?.children,
1279
+ additionalProps,
1280
+ displayNames,
1281
+ uniqueId,
1282
+ childProps?.asChild
1283
+ )
1284
+ );
1285
+ }
1286
+ );
1287
+ return asChild ? mappedChildren?.[0] : mappedChildren;
1288
+ }
1289
+
1290
+ // src/lib/tv.ts
1291
+ import { createTV } from "tailwind-variants";
1292
+ var tv = createTV({});
1293
+
1294
+ // src/components/fancy-button.tsx
1295
+ import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
1296
+ var BUTTON_ROOT_NAME = "ButtonRoot";
1297
+ var BUTTON_ICON_NAME = "ButtonIcon";
1298
+ var fancyButtonVariants = tv({
1299
+ slots: {
1300
+ root: [
1301
+ // base
1302
+ "group relative inline-flex items-center justify-center whitespace-nowrap text-label-sm outline-none",
1303
+ "transition duration-200 ease-out cursor-pointer",
1304
+ // focus
1305
+ "focus:outline-none",
1306
+ // disabled
1307
+ "disabled:pointer-events-none",
1308
+ "disabled:opacity-80"
1309
+ ],
1310
+ icon: "relative z-10 size-5 shrink-0"
1311
+ },
1312
+ variants: {
1313
+ variant: {
1314
+ neutral: {
1315
+ root: "bg-bg-strong-950 text-text-white-0 border border-border shadow-ancy-buttons-neutral"
1316
+ },
1317
+ primary: {
1318
+ root: "bg-primary-base text-static-white shadow-fancy-buttons-primary"
1319
+ },
1320
+ destructive: {
1321
+ root: "bg-error-base text-static-white shadow-fancy-buttons-error"
1322
+ },
1323
+ basic: {
1324
+ root: [
1325
+ // base
1326
+ "bg-bg-white-0 text-text-sub-600 shadow-fancy-buttons-stroke",
1327
+ // hover
1328
+ "hover:bg-bg-weak-50 hover:text-text-strong-950 hover:shadow-none"
1329
+ ]
1330
+ }
1331
+ },
1332
+ size: {
1333
+ medium: {
1334
+ root: "h-10 gap-3 rounded-10 px-3.5",
1335
+ icon: "-mx-1"
1336
+ },
1337
+ small: {
1338
+ root: "h-9 gap-3 rounded-lg px-3",
1339
+ icon: "-mx-1"
1340
+ },
1341
+ xsmall: {
1342
+ root: "h-8 gap-3 rounded-lg px-2.5",
1343
+ icon: "-mx-1"
1344
+ },
1345
+ icon: {
1346
+ root: "size-10 rounded-10 p-0",
1347
+ icon: ""
1348
+ }
1349
+ }
1350
+ },
1351
+ compoundVariants: [
1352
+ {
1353
+ variant: ["neutral", "primary", "destructive"],
1354
+ class: {
1355
+ root: [
1356
+ // before
1357
+ "before:pointer-events-none before:absolute before:inset-0 before:z-10 before:rounded-[inherit]",
1358
+ "before:bg-gradient-to-b before:p-px",
1359
+ "before:from-static-white/[.12] before:to-transparent",
1360
+ // before mask
1361
+ "before:[mask-clip:content-box,border-box] before:[mask-composite:exclude] before:[mask-image:linear-gradient(#fff_0_0),linear-gradient(#fff_0_0)]",
1362
+ // after
1363
+ "after:absolute after:inset-0 after:rounded-[inherit] after:bg-gradient-to-b after:from-static-white after:to-transparent",
1364
+ "after:pointer-events-none after:opacity-[.16] after:transition after:duration-200 after:ease-out",
1365
+ // hover
1366
+ "hover:after:opacity-[.24]"
1367
+ ]
1368
+ }
1369
+ }
1370
+ ],
1371
+ defaultVariants: {
1372
+ variant: "primary",
1373
+ size: "medium"
1374
+ }
1375
+ });
1376
+ var ButtonRoot = React13.forwardRef(
1377
+ ({
1378
+ asChild,
1379
+ children,
1380
+ variant = "primary",
1381
+ size,
1382
+ className,
1383
+ loading,
1384
+ ...rest
1385
+ }, forwardedRef) => {
1386
+ const uniqueId = React13.useId();
1387
+ const Component = asChild ? Slot2 : "button";
1388
+ const { root } = fancyButtonVariants({ variant, size });
1389
+ const sharedProps = {
1390
+ variant,
1391
+ size
1392
+ };
1393
+ const extendedChildren = recursiveCloneChildren(
1394
+ children,
1395
+ sharedProps,
1396
+ [BUTTON_ICON_NAME],
1397
+ uniqueId,
1398
+ asChild
1399
+ );
1400
+ return /* @__PURE__ */ jsxs9(
1401
+ Component,
1402
+ {
1403
+ ref: forwardedRef,
1404
+ className: root({ class: className }),
1405
+ disabled: loading,
1406
+ ...rest,
1407
+ children: [
1408
+ loading && /* @__PURE__ */ jsx14(
1409
+ "div",
1410
+ {
1411
+ className: cn(
1412
+ `size-4 shrink-0 rounded-full border-2 border-background/30
1413
+ border-l-background animate-spin`,
1414
+ {
1415
+ "border-primary/30 border-l-primary": ![
1416
+ "primary",
1417
+ "destructive"
1418
+ ].includes(variant)
1419
+ }
1420
+ )
1421
+ }
1422
+ ),
1423
+ extendedChildren
1424
+ ]
1425
+ }
1426
+ );
1427
+ }
1428
+ );
1429
+ ButtonRoot.displayName = BUTTON_ROOT_NAME;
1430
+ function ButtonIcon({
1431
+ className,
1432
+ variant,
1433
+ size,
1434
+ as,
1435
+ ...rest
1436
+ }) {
1437
+ const Component = as || "div";
1438
+ const { icon } = fancyButtonVariants({ variant, size });
1439
+ return /* @__PURE__ */ jsx14(Component, { className: icon({ class: className }), ...rest });
1440
+ }
1441
+ ButtonIcon.displayName = BUTTON_ICON_NAME;
1442
+
1443
+ // src/components/confirm-dialog.tsx
1444
+ import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
1445
+ var ConfirmDialog = React14.memo(({ trigger, confirmAction }) => {
1446
+ return /* @__PURE__ */ jsxs10(AlertDialog, { children: [
1447
+ /* @__PURE__ */ jsx15(AlertDialogTrigger, { className: "contents", children: trigger || /* @__PURE__ */ jsx15(ButtonRoot, { variant: "neutral", children: "Confirm" }) }),
1448
+ /* @__PURE__ */ jsxs10(AlertDialogPopup, { children: [
1449
+ /* @__PURE__ */ jsxs10(AlertDialogHeader, { children: [
1450
+ /* @__PURE__ */ jsx15(AlertDialogTitle, { className: "text-lg", children: "Are you want to proceed?" }),
1451
+ /* @__PURE__ */ jsx15(AlertDialogDescription, { className: "text-sm", children: "This action may be destructive and can potentially harm any related data. Please ensure that you have backed up all important information before proceeding. If you are unsure about the consequences, it is recommended to cancel and seek further assistance." })
1452
+ ] }),
1453
+ /* @__PURE__ */ jsxs10(AlertDialogFooter, { className: "justify-start!", children: [
1454
+ /* @__PURE__ */ jsx15(
1455
+ AlertDialogClose,
1456
+ {
1457
+ render: /* @__PURE__ */ jsx15(ButtonRoot, { variant: "neutral", className: "w-full max-sm:bg-accent sm:w-24" }),
1458
+ children: "Cancel"
1459
+ }
1460
+ ),
1461
+ /* @__PURE__ */ jsx15(
1462
+ AlertDialogClose,
1463
+ {
1464
+ onClick: async () => {
1465
+ confirmAction();
1466
+ },
1467
+ render: /* @__PURE__ */ jsx15(ButtonRoot, { variant: "destructive", className: "w-full sm:w-24" }),
1468
+ children: "Continue"
1469
+ }
1470
+ )
1471
+ ] })
1472
+ ] })
1473
+ ] });
1474
+ });
1475
+
1476
+ // src/components/copy-button.tsx
1477
+ import { StCheckMarkCircle, StCopy } from "@use-stall/icons";
1478
+ import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
1479
+ var CopyButton = ({
1480
+ isCopied,
1481
+ copyFunction,
1482
+ clearFunction,
1483
+ className,
1484
+ icon_size
1485
+ }) => {
1486
+ return /* @__PURE__ */ jsx16(
1487
+ Button,
1488
+ {
1489
+ onClick: () => {
1490
+ copyFunction();
1491
+ setTimeout(() => {
1492
+ clearFunction();
1493
+ }, 2e3);
1494
+ },
1495
+ size: "icon",
1496
+ variant: "ghost",
1497
+ className: cn("size-6 text-primary", className),
1498
+ children: /* @__PURE__ */ jsxs11("div", { className: "relative", children: [
1499
+ /* @__PURE__ */ jsx16(
1500
+ "div",
1501
+ {
1502
+ className: cn(
1503
+ "absolute inset-0 flex items-center justify-center transition-all duration-300 ease-in-out will-change-[transform, opacity, filter]",
1504
+ isCopied ? "scale-100 opacity-100 blur-0" : "blur-xs scale-[0.25] opacity-0"
1505
+ ),
1506
+ children: /* @__PURE__ */ jsx16(StCheckMarkCircle, { size: icon_size, className: "fill-primary/20" })
1507
+ }
1508
+ ),
1509
+ /* @__PURE__ */ jsx16(
1510
+ "div",
1511
+ {
1512
+ className: cn(
1513
+ "transition-[transform, opacity, filter] duration-300 ease-in-out will-change-[transform, opacity, filter]",
1514
+ isCopied ? "blur-xs scale-[0.25] opacity-0" : "scale-100 opacity-100 blur-0"
1515
+ ),
1516
+ children: /* @__PURE__ */ jsx16(StCopy, { size: icon_size, className: "fill-primary/20" })
1517
+ }
1518
+ )
1519
+ ] })
1520
+ }
1521
+ );
1522
+ };
1523
+
1524
+ // src/components/country-picker.tsx
1525
+ import * as React15 from "react";
1526
+ import { Check as Check3, ChevronsUpDown as ChevronsUpDown2 } from "lucide-react";
1527
+
1528
+ // src/constants/countries.ts
1529
+ var COUNTRIES = [
1530
+ { code: "AF", name: "Afghanistan", label: "\u{1F1E6}\u{1F1EB} Afghanistan" },
1531
+ { code: "AL", name: "Albania", label: "\u{1F1E6}\u{1F1F1} Albania" },
1532
+ { code: "DZ", name: "Algeria", label: "\u{1F1E9}\u{1F1FF} Algeria" },
1533
+ { code: "AD", name: "Andorra", label: "\u{1F1E6}\u{1F1E9} Andorra" },
1534
+ { code: "AO", name: "Angola", label: "\u{1F1E6}\u{1F1F4} Angola" },
1535
+ { code: "AG", name: "Antigua and Barbuda", label: "\u{1F1E6}\u{1F1EC} Antigua and Barbuda" },
1536
+ { code: "AR", name: "Argentina", label: "\u{1F1E6}\u{1F1F7} Argentina" },
1537
+ { code: "AM", name: "Armenia", label: "\u{1F1E6}\u{1F1F2} Armenia" },
1538
+ { code: "AU", name: "Australia", label: "\u{1F1E6}\u{1F1FA} Australia" },
1539
+ { code: "AT", name: "Austria", label: "\u{1F1E6}\u{1F1F9} Austria" },
1540
+ { code: "AZ", name: "Azerbaijan", label: "\u{1F1E6}\u{1F1FF} Azerbaijan" },
1541
+ { code: "BS", name: "Bahamas", label: "\u{1F1E7}\u{1F1F8} Bahamas" },
1542
+ { code: "BH", name: "Bahrain", label: "\u{1F1E7}\u{1F1ED} Bahrain" },
1543
+ { code: "BD", name: "Bangladesh", label: "\u{1F1E7}\u{1F1E9} Bangladesh" },
1544
+ { code: "BB", name: "Barbados", label: "\u{1F1E7}\u{1F1E7} Barbados" },
1545
+ { code: "BY", name: "Belarus", label: "\u{1F1E7}\u{1F1FE} Belarus" },
1546
+ { code: "BE", name: "Belgium", label: "\u{1F1E7}\u{1F1EA} Belgium" },
1547
+ { code: "BZ", name: "Belize", label: "\u{1F1E7}\u{1F1FF} Belize" },
1548
+ { code: "BJ", name: "Benin", label: "\u{1F1E7}\u{1F1EF} Benin" },
1549
+ { code: "BT", name: "Bhutan", label: "\u{1F1E7}\u{1F1F9} Bhutan" },
1550
+ { code: "BO", name: "Bolivia", label: "\u{1F1E7}\u{1F1F4} Bolivia" },
1551
+ { code: "BA", name: "Bosnia and Herzegovina", label: "\u{1F1E7}\u{1F1E6} Bosnia and Herzegovina" },
1552
+ { code: "BW", name: "Botswana", label: "\u{1F1E7}\u{1F1FC} Botswana" },
1553
+ { code: "BR", name: "Brazil", label: "\u{1F1E7}\u{1F1F7} Brazil" },
1554
+ { code: "BN", name: "Brunei", label: "\u{1F1E7}\u{1F1F3} Brunei" },
1555
+ { code: "BG", name: "Bulgaria", label: "\u{1F1E7}\u{1F1EC} Bulgaria" },
1556
+ { code: "BF", name: "Burkina Faso", label: "\u{1F1E7}\u{1F1EB} Burkina Faso" },
1557
+ { code: "BI", name: "Burundi", label: "\u{1F1E7}\u{1F1EE} Burundi" },
1558
+ { code: "CV", name: "Cabo Verde", label: "\u{1F1E8}\u{1F1FB} Cabo Verde" },
1559
+ { code: "KH", name: "Cambodia", label: "\u{1F1F0}\u{1F1ED} Cambodia" },
1560
+ { code: "CM", name: "Cameroon", label: "\u{1F1E8}\u{1F1F2} Cameroon" },
1561
+ { code: "CA", name: "Canada", label: "\u{1F1E8}\u{1F1E6} Canada" },
1562
+ { code: "CF", name: "Central African Republic", label: "\u{1F1E8}\u{1F1EB} Central African Republic" },
1563
+ { code: "TD", name: "Chad", label: "\u{1F1F9}\u{1F1E9} Chad" },
1564
+ { code: "CL", name: "Chile", label: "\u{1F1E8}\u{1F1F1} Chile" },
1565
+ { code: "CN", name: "China", label: "\u{1F1E8}\u{1F1F3} China" },
1566
+ { code: "CO", name: "Colombia", label: "\u{1F1E8}\u{1F1F4} Colombia" },
1567
+ { code: "KM", name: "Comoros", label: "\u{1F1F0}\u{1F1F2} Comoros" },
1568
+ { code: "CG", name: "Congo", label: "\u{1F1E8}\u{1F1EC} Congo" },
1569
+ { code: "CD", name: "Congo (DRC)", label: "\u{1F1E8}\u{1F1E9} Congo (DRC)" },
1570
+ { code: "CR", name: "Costa Rica", label: "\u{1F1E8}\u{1F1F7} Costa Rica" },
1571
+ { code: "CI", name: "C\xF4te d\u2019Ivoire", label: "\u{1F1E8}\u{1F1EE} C\xF4te d\u2019Ivoire" },
1572
+ { code: "HR", name: "Croatia", label: "\u{1F1ED}\u{1F1F7} Croatia" },
1573
+ { code: "CU", name: "Cuba", label: "\u{1F1E8}\u{1F1FA} Cuba" },
1574
+ { code: "CY", name: "Cyprus", label: "\u{1F1E8}\u{1F1FE} Cyprus" },
1575
+ { code: "CZ", name: "Czechia", label: "\u{1F1E8}\u{1F1FF} Czechia" },
1576
+ { code: "DK", name: "Denmark", label: "\u{1F1E9}\u{1F1F0} Denmark" },
1577
+ { code: "DJ", name: "Djibouti", label: "\u{1F1E9}\u{1F1EF} Djibouti" },
1578
+ { code: "DM", name: "Dominica", label: "\u{1F1E9}\u{1F1F2} Dominica" },
1579
+ { code: "DO", name: "Dominican Republic", label: "\u{1F1E9}\u{1F1F4} Dominican Republic" },
1580
+ { code: "EC", name: "Ecuador", label: "\u{1F1EA}\u{1F1E8} Ecuador" },
1581
+ { code: "EG", name: "Egypt", label: "\u{1F1EA}\u{1F1EC} Egypt" },
1582
+ { code: "SV", name: "El Salvador", label: "\u{1F1F8}\u{1F1FB} El Salvador" },
1583
+ { code: "GQ", name: "Equatorial Guinea", label: "\u{1F1EC}\u{1F1F6} Equatorial Guinea" },
1584
+ { code: "ER", name: "Eritrea", label: "\u{1F1EA}\u{1F1F7} Eritrea" },
1585
+ { code: "EE", name: "Estonia", label: "\u{1F1EA}\u{1F1EA} Estonia" },
1586
+ { code: "SZ", name: "Eswatini", label: "\u{1F1F8}\u{1F1FF} Eswatini" },
1587
+ { code: "ET", name: "Ethiopia", label: "\u{1F1EA}\u{1F1F9} Ethiopia" },
1588
+ { code: "FJ", name: "Fiji", label: "\u{1F1EB}\u{1F1EF} Fiji" },
1589
+ { code: "FI", name: "Finland", label: "\u{1F1EB}\u{1F1EE} Finland" },
1590
+ { code: "FR", name: "France", label: "\u{1F1EB}\u{1F1F7} France" },
1591
+ { code: "GA", name: "Gabon", label: "\u{1F1EC}\u{1F1E6} Gabon" },
1592
+ { code: "GM", name: "Gambia", label: "\u{1F1EC}\u{1F1F2} Gambia" },
1593
+ { code: "GE", name: "Georgia", label: "\u{1F1EC}\u{1F1EA} Georgia" },
1594
+ { code: "DE", name: "Germany", label: "\u{1F1E9}\u{1F1EA} Germany" },
1595
+ { code: "GH", name: "Ghana", label: "\u{1F1EC}\u{1F1ED} Ghana" },
1596
+ { code: "GR", name: "Greece", label: "\u{1F1EC}\u{1F1F7} Greece" },
1597
+ { code: "GD", name: "Grenada", label: "\u{1F1EC}\u{1F1E9} Grenada" },
1598
+ { code: "GT", name: "Guatemala", label: "\u{1F1EC}\u{1F1F9} Guatemala" },
1599
+ { code: "GN", name: "Guinea", label: "\u{1F1EC}\u{1F1F3} Guinea" },
1600
+ { code: "GW", name: "Guinea-Bissau", label: "\u{1F1EC}\u{1F1FC} Guinea-Bissau" },
1601
+ { code: "GY", name: "Guyana", label: "\u{1F1EC}\u{1F1FE} Guyana" },
1602
+ { code: "HT", name: "Haiti", label: "\u{1F1ED}\u{1F1F9} Haiti" },
1603
+ { code: "HN", name: "Honduras", label: "\u{1F1ED}\u{1F1F3} Honduras" },
1604
+ { code: "HU", name: "Hungary", label: "\u{1F1ED}\u{1F1FA} Hungary" },
1605
+ { code: "IS", name: "Iceland", label: "\u{1F1EE}\u{1F1F8} Iceland" },
1606
+ { code: "IN", name: "India", label: "\u{1F1EE}\u{1F1F3} India" },
1607
+ { code: "ID", name: "Indonesia", label: "\u{1F1EE}\u{1F1E9} Indonesia" },
1608
+ { code: "IR", name: "Iran", label: "\u{1F1EE}\u{1F1F7} Iran" },
1609
+ { code: "IQ", name: "Iraq", label: "\u{1F1EE}\u{1F1F6} Iraq" },
1610
+ { code: "IE", name: "Ireland", label: "\u{1F1EE}\u{1F1EA} Ireland" },
1611
+ { code: "IL", name: "Israel", label: "\u{1F1EE}\u{1F1F1} Israel" },
1612
+ { code: "IT", name: "Italy", label: "\u{1F1EE}\u{1F1F9} Italy" },
1613
+ { code: "JM", name: "Jamaica", label: "\u{1F1EF}\u{1F1F2} Jamaica" },
1614
+ { code: "JP", name: "Japan", label: "\u{1F1EF}\u{1F1F5} Japan" },
1615
+ { code: "JO", name: "Jordan", label: "\u{1F1EF}\u{1F1F4} Jordan" },
1616
+ { code: "KZ", name: "Kazakhstan", label: "\u{1F1F0}\u{1F1FF} Kazakhstan" },
1617
+ { code: "KE", name: "Kenya", label: "\u{1F1F0}\u{1F1EA} Kenya" },
1618
+ { code: "KI", name: "Kiribati", label: "\u{1F1F0}\u{1F1EE} Kiribati" },
1619
+ { code: "KP", name: "North Korea", label: "\u{1F1F0}\u{1F1F5} North Korea" },
1620
+ { code: "KR", name: "South Korea", label: "\u{1F1F0}\u{1F1F7} South Korea" },
1621
+ { code: "KW", name: "Kuwait", label: "\u{1F1F0}\u{1F1FC} Kuwait" },
1622
+ { code: "KG", name: "Kyrgyzstan", label: "\u{1F1F0}\u{1F1EC} Kyrgyzstan" },
1623
+ { code: "LA", name: "Laos", label: "\u{1F1F1}\u{1F1E6} Laos" },
1624
+ { code: "LV", name: "Latvia", label: "\u{1F1F1}\u{1F1FB} Latvia" },
1625
+ { code: "LB", name: "Lebanon", label: "\u{1F1F1}\u{1F1E7} Lebanon" },
1626
+ { code: "LS", name: "Lesotho", label: "\u{1F1F1}\u{1F1F8} Lesotho" },
1627
+ { code: "LR", name: "Liberia", label: "\u{1F1F1}\u{1F1F7} Liberia" },
1628
+ { code: "LY", name: "Libya", label: "\u{1F1F1}\u{1F1FE} Libya" },
1629
+ { code: "LI", name: "Liechtenstein", label: "\u{1F1F1}\u{1F1EE} Liechtenstein" },
1630
+ { code: "LT", name: "Lithuania", label: "\u{1F1F1}\u{1F1F9} Lithuania" },
1631
+ { code: "LU", name: "Luxembourg", label: "\u{1F1F1}\u{1F1FA} Luxembourg" },
1632
+ { code: "MG", name: "Madagascar", label: "\u{1F1F2}\u{1F1EC} Madagascar" },
1633
+ { code: "MW", name: "Malawi", label: "\u{1F1F2}\u{1F1FC} Malawi" },
1634
+ { code: "MY", name: "Malaysia", label: "\u{1F1F2}\u{1F1FE} Malaysia" },
1635
+ { code: "MV", name: "Maldives", label: "\u{1F1F2}\u{1F1FB} Maldives" },
1636
+ { code: "ML", name: "Mali", label: "\u{1F1F2}\u{1F1F1} Mali" },
1637
+ { code: "MT", name: "Malta", label: "\u{1F1F2}\u{1F1F9} Malta" },
1638
+ { code: "MH", name: "Marshall Islands", label: "\u{1F1F2}\u{1F1ED} Marshall Islands" },
1639
+ { code: "MR", name: "Mauritania", label: "\u{1F1F2}\u{1F1F7} Mauritania" },
1640
+ { code: "MU", name: "Mauritius", label: "\u{1F1F2}\u{1F1FA} Mauritius" },
1641
+ { code: "MX", name: "Mexico", label: "\u{1F1F2}\u{1F1FD} Mexico" },
1642
+ { code: "FM", name: "Micronesia", label: "\u{1F1EB}\u{1F1F2} Micronesia" },
1643
+ { code: "MD", name: "Moldova", label: "\u{1F1F2}\u{1F1E9} Moldova" },
1644
+ { code: "MC", name: "Monaco", label: "\u{1F1F2}\u{1F1E8} Monaco" },
1645
+ { code: "MN", name: "Mongolia", label: "\u{1F1F2}\u{1F1F3} Mongolia" },
1646
+ { code: "ME", name: "Montenegro", label: "\u{1F1F2}\u{1F1EA} Montenegro" },
1647
+ { code: "MA", name: "Morocco", label: "\u{1F1F2}\u{1F1E6} Morocco" },
1648
+ { code: "MZ", name: "Mozambique", label: "\u{1F1F2}\u{1F1FF} Mozambique" },
1649
+ { code: "MM", name: "Myanmar", label: "\u{1F1F2}\u{1F1F2} Myanmar" },
1650
+ { code: "NA", name: "Namibia", label: "\u{1F1F3}\u{1F1E6} Namibia" },
1651
+ { code: "NR", name: "Nauru", label: "\u{1F1F3}\u{1F1F7} Nauru" },
1652
+ { code: "NP", name: "Nepal", label: "\u{1F1F3}\u{1F1F5} Nepal" },
1653
+ { code: "NL", name: "Netherlands", label: "\u{1F1F3}\u{1F1F1} Netherlands" },
1654
+ { code: "NZ", name: "New Zealand", label: "\u{1F1F3}\u{1F1FF} New Zealand" },
1655
+ { code: "NI", name: "Nicaragua", label: "\u{1F1F3}\u{1F1EE} Nicaragua" },
1656
+ { code: "NE", name: "Niger", label: "\u{1F1F3}\u{1F1EA} Niger" },
1657
+ { code: "NG", name: "Nigeria", label: "\u{1F1F3}\u{1F1EC} Nigeria" },
1658
+ { code: "MK", name: "North Macedonia", label: "\u{1F1F2}\u{1F1F0} North Macedonia" },
1659
+ { code: "NO", name: "Norway", label: "\u{1F1F3}\u{1F1F4} Norway" },
1660
+ { code: "OM", name: "Oman", label: "\u{1F1F4}\u{1F1F2} Oman" },
1661
+ { code: "PK", name: "Pakistan", label: "\u{1F1F5}\u{1F1F0} Pakistan" },
1662
+ { code: "PW", name: "Palau", label: "\u{1F1F5}\u{1F1FC} Palau" },
1663
+ { code: "PA", name: "Panama", label: "\u{1F1F5}\u{1F1E6} Panama" },
1664
+ { code: "PG", name: "Papua New Guinea", label: "\u{1F1F5}\u{1F1EC} Papua New Guinea" },
1665
+ { code: "PY", name: "Paraguay", label: "\u{1F1F5}\u{1F1FE} Paraguay" },
1666
+ { code: "PE", name: "Peru", label: "\u{1F1F5}\u{1F1EA} Peru" },
1667
+ { code: "PH", name: "Philippines", label: "\u{1F1F5}\u{1F1ED} Philippines" },
1668
+ { code: "PL", name: "Poland", label: "\u{1F1F5}\u{1F1F1} Poland" },
1669
+ { code: "PT", name: "Portugal", label: "\u{1F1F5}\u{1F1F9} Portugal" },
1670
+ { code: "QA", name: "Qatar", label: "\u{1F1F6}\u{1F1E6} Qatar" },
1671
+ { code: "RO", name: "Romania", label: "\u{1F1F7}\u{1F1F4} Romania" },
1672
+ { code: "RU", name: "Russia", label: "\u{1F1F7}\u{1F1FA} Russia" },
1673
+ { code: "RW", name: "Rwanda", label: "\u{1F1F7}\u{1F1FC} Rwanda" },
1674
+ { code: "KN", name: "Saint Kitts and Nevis", label: "\u{1F1F0}\u{1F1F3} Saint Kitts and Nevis" },
1675
+ { code: "LC", name: "Saint Lucia", label: "\u{1F1F1}\u{1F1E8} Saint Lucia" },
1676
+ { code: "VC", name: "Saint Vincent and the Grenadines", label: "\u{1F1FB}\u{1F1E8} Saint Vincent and the Grenadines" },
1677
+ { code: "WS", name: "Samoa", label: "\u{1F1FC}\u{1F1F8} Samoa" },
1678
+ { code: "SM", name: "San Marino", label: "\u{1F1F8}\u{1F1F2} San Marino" },
1679
+ { code: "ST", name: "Sao Tome and Principe", label: "\u{1F1F8}\u{1F1F9} Sao Tome and Principe" },
1680
+ { code: "SA", name: "Saudi Arabia", label: "\u{1F1F8}\u{1F1E6} Saudi Arabia" },
1681
+ { code: "SN", name: "Senegal", label: "\u{1F1F8}\u{1F1F3} Senegal" },
1682
+ { code: "RS", name: "Serbia", label: "\u{1F1F7}\u{1F1F8} Serbia" },
1683
+ { code: "SC", name: "Seychelles", label: "\u{1F1F8}\u{1F1E8} Seychelles" },
1684
+ { code: "SL", name: "Sierra Leone", label: "\u{1F1F8}\u{1F1F1} Sierra Leone" },
1685
+ { code: "SG", name: "Singapore", label: "\u{1F1F8}\u{1F1EC} Singapore" },
1686
+ { code: "SK", name: "Slovakia", label: "\u{1F1F8}\u{1F1F0} Slovakia" },
1687
+ { code: "SI", name: "Slovenia", label: "\u{1F1F8}\u{1F1EE} Slovenia" },
1688
+ { code: "SB", name: "Solomon Islands", label: "\u{1F1F8}\u{1F1E7} Solomon Islands" },
1689
+ { code: "SO", name: "Somalia", label: "\u{1F1F8}\u{1F1F4} Somalia" },
1690
+ { code: "ZA", name: "South Africa", label: "\u{1F1FF}\u{1F1E6} South Africa" },
1691
+ { code: "SS", name: "South Sudan", label: "\u{1F1F8}\u{1F1F8} South Sudan" },
1692
+ { code: "ES", name: "Spain", label: "\u{1F1EA}\u{1F1F8} Spain" },
1693
+ { code: "LK", name: "Sri Lanka", label: "\u{1F1F1}\u{1F1F0} Sri Lanka" },
1694
+ { code: "SD", name: "Sudan", label: "\u{1F1F8}\u{1F1E9} Sudan" },
1695
+ { code: "SR", name: "Suriname", label: "\u{1F1F8}\u{1F1F7} Suriname" },
1696
+ { code: "SE", name: "Sweden", label: "\u{1F1F8}\u{1F1EA} Sweden" },
1697
+ { code: "CH", name: "Switzerland", label: "\u{1F1E8}\u{1F1ED} Switzerland" },
1698
+ { code: "SY", name: "Syria", label: "\u{1F1F8}\u{1F1FE} Syria" },
1699
+ { code: "TW", name: "Taiwan", label: "\u{1F1F9}\u{1F1FC} Taiwan" },
1700
+ { code: "TJ", name: "Tajikistan", label: "\u{1F1F9}\u{1F1EF} Tajikistan" },
1701
+ { code: "TZ", name: "Tanzania", label: "\u{1F1F9}\u{1F1FF} Tanzania" },
1702
+ { code: "TH", name: "Thailand", label: "\u{1F1F9}\u{1F1ED} Thailand" },
1703
+ { code: "TL", name: "Timor-Leste", label: "\u{1F1F9}\u{1F1F1} Timor-Leste" },
1704
+ { code: "TG", name: "Togo", label: "\u{1F1F9}\u{1F1EC} Togo" },
1705
+ { code: "TO", name: "Tonga", label: "\u{1F1F9}\u{1F1F4} Tonga" },
1706
+ { code: "TT", name: "Trinidad and Tobago", label: "\u{1F1F9}\u{1F1F9} Trinidad and Tobago" },
1707
+ { code: "TN", name: "Tunisia", label: "\u{1F1F9}\u{1F1F3} Tunisia" },
1708
+ { code: "TR", name: "Turkey", label: "\u{1F1F9}\u{1F1F7} Turkey" },
1709
+ { code: "TM", name: "Turkmenistan", label: "\u{1F1F9}\u{1F1F2} Turkmenistan" },
1710
+ { code: "TV", name: "Tuvalu", label: "\u{1F1F9}\u{1F1FB} Tuvalu" },
1711
+ { code: "UG", name: "Uganda", label: "\u{1F1FA}\u{1F1EC} Uganda" },
1712
+ { code: "UA", name: "Ukraine", label: "\u{1F1FA}\u{1F1E6} Ukraine" },
1713
+ { code: "AE", name: "United Arab Emirates", label: "\u{1F1E6}\u{1F1EA} United Arab Emirates" },
1714
+ { code: "GB", name: "United Kingdom", label: "\u{1F1EC}\u{1F1E7} United Kingdom" },
1715
+ { code: "US", name: "United States", label: "\u{1F1FA}\u{1F1F8} United States" },
1716
+ { code: "UY", name: "Uruguay", label: "\u{1F1FA}\u{1F1FE} Uruguay" },
1717
+ { code: "UZ", name: "Uzbekistan", label: "\u{1F1FA}\u{1F1FF} Uzbekistan" },
1718
+ { code: "VU", name: "Vanuatu", label: "\u{1F1FB}\u{1F1FA} Vanuatu" },
1719
+ { code: "VA", name: "Vatican City", label: "\u{1F1FB}\u{1F1E6} Vatican City" },
1720
+ { code: "VE", name: "Venezuela", label: "\u{1F1FB}\u{1F1EA} Venezuela" },
1721
+ { code: "VN", name: "Vietnam", label: "\u{1F1FB}\u{1F1F3} Vietnam" },
1722
+ { code: "YE", name: "Yemen", label: "\u{1F1FE}\u{1F1EA} Yemen" },
1723
+ { code: "ZM", name: "Zambia", label: "\u{1F1FF}\u{1F1F2} Zambia" },
1724
+ { code: "ZW", name: "Zimbabwe", label: "\u{1F1FF}\u{1F1FC} Zimbabwe" }
1725
+ ];
1726
+
1727
+ // src/components/country-picker.tsx
1728
+ import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
1729
+ var options = COUNTRIES.map((c) => ({
1730
+ label: c.label,
1731
+ value: c.name,
1732
+ name: c.name,
1733
+ alpha2: c.code
1734
+ }));
1735
+ function CountryPicker({
1736
+ modal = false,
1737
+ value_key = "value",
1738
+ ...props
1739
+ }) {
1740
+ const [open, setOpen] = React15.useState(false);
1741
+ const active_option = React15.useMemo(
1742
+ () => options?.find(
1743
+ (item) => item[value_key] === props.value
1744
+ )?.label,
1745
+ [props.value, value_key]
1746
+ );
1747
+ return /* @__PURE__ */ jsxs12(Popover, { open, onOpenChange: setOpen, modal, children: [
1748
+ /* @__PURE__ */ jsx17(
1749
+ PopoverTrigger,
1750
+ {
1751
+ disabled: props.disabled,
1752
+ asChild: !!props.trigger,
1753
+ className: cn(
1754
+ "bg-tranparent w-full px-0",
1755
+ props.disabled && "pointer-events-none cursor-not-allowed"
1756
+ ),
1757
+ children: props.trigger ? props.trigger : /* @__PURE__ */ jsxs12(
1758
+ "button",
1759
+ {
1760
+ type: "button",
1761
+ role: "combobox",
1762
+ "aria-expanded": open,
1763
+ disabled: props.disabled,
1764
+ className: cn(
1765
+ buttonVariants({ variant: "outline" }),
1766
+ `relative w-full h-10 px-3 gap-2 overflow-hidden justify-between bg-background shadow-none
1767
+ text-muted-foreground/40 ring-offset-0 ring-inset [font-weight:inherit]`,
1768
+ props.value && "text-foreground",
1769
+ props?.className,
1770
+ props.disabled && "pointer-events-none cursor-not-allowed"
1771
+ ),
1772
+ children: [
1773
+ /* @__PURE__ */ jsx17(
1774
+ "span",
1775
+ {
1776
+ className: cn(
1777
+ "max-w-full whitespace-nowrap truncate overflow-hidden text-inherit",
1778
+ props.nestedClassName
1779
+ ),
1780
+ children: active_option ? active_option : props.placeholder || "Pick a country"
1781
+ }
1782
+ ),
1783
+ !props.disabled && /* @__PURE__ */ jsx17(ChevronsUpDown2, { className: "h-4 w-4 shrink-0 opacity-50 -mr-1" }),
1784
+ /* @__PURE__ */ jsx17(
1785
+ "input",
1786
+ {
1787
+ type: "text",
1788
+ className: "scale-0 absolute",
1789
+ value: props.value ?? "",
1790
+ required: props.required ?? false
1791
+ }
1792
+ )
1793
+ ]
1794
+ }
1795
+ )
1796
+ }
1797
+ ),
1798
+ /* @__PURE__ */ jsx17(
1799
+ PopoverContent,
1800
+ {
1801
+ align: props.align || "center",
1802
+ hidePrimitive: props.hidePrimitive,
1803
+ className: "w-[var(--radix-popover-trigger-width)] max-h-(--radix-popover-content-available-height)\n min-w-40 p-0 overflow-hidden",
1804
+ children: /* @__PURE__ */ jsxs12(
1805
+ Command,
1806
+ {
1807
+ className: "w-full",
1808
+ filter: (value, search, keywords = []) => {
1809
+ const extendValue = value + " " + keywords.join(" ");
1810
+ if (extendValue.toLowerCase().includes(search.toLowerCase())) {
1811
+ return 1;
1812
+ }
1813
+ return 0;
1814
+ },
1815
+ children: [
1816
+ !props.hideSearch && /* @__PURE__ */ jsx17(CommandInput, { placeholder: "Search ...", className: "text-xs" }),
1817
+ /* @__PURE__ */ jsxs12(CommandList, { children: [
1818
+ /* @__PURE__ */ jsx17(CommandEmpty, { className: "flex flex-col items-center justify-center p-6", children: /* @__PURE__ */ jsx17("span", { className: "mt-2 text-xs text-zinc-400", children: "No data found" }) }),
1819
+ /* @__PURE__ */ jsx17(CommandGroup, { children: options?.map((item) => {
1820
+ const item_value = item[value_key];
1821
+ return /* @__PURE__ */ jsxs12(
1822
+ CommandItem,
1823
+ {
1824
+ value: item_value,
1825
+ onSelect: (e) => {
1826
+ props.onChange(e);
1827
+ setOpen(false);
1828
+ },
1829
+ keywords: [item.label],
1830
+ className: "cursor-pointer font-medium text-xs capitalize",
1831
+ children: [
1832
+ /* @__PURE__ */ jsx17(
1833
+ Check3,
1834
+ {
1835
+ className: cn(
1836
+ "h-3 w-3",
1837
+ props.value === item_value ? "opacity-100" : "opacity-0"
1838
+ )
1839
+ }
1840
+ ),
1841
+ item.label
1842
+ ]
1843
+ },
1844
+ item_value
1845
+ );
1846
+ }) })
1847
+ ] })
1848
+ ]
1849
+ }
1850
+ )
1851
+ }
1852
+ )
1853
+ ] });
1854
+ }
1855
+
1856
+ // src/components/drawer.tsx
1857
+ import * as React16 from "react";
1858
+ import { Drawer as DrawerPrimitive } from "vaul";
1859
+ import { jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
1860
+ var Drawer = ({
1861
+ shouldScaleBackground = true,
1862
+ ...props
1863
+ }) => /* @__PURE__ */ jsx18(
1864
+ DrawerPrimitive.Root,
1865
+ {
1866
+ shouldScaleBackground,
1867
+ ...props
1868
+ }
1869
+ );
1870
+ Drawer.displayName = "Drawer";
1871
+ var DrawerTrigger = DrawerPrimitive.Trigger;
1872
+ var DrawerPortal = DrawerPrimitive.Portal;
1873
+ var DrawerClose = DrawerPrimitive.Close;
1874
+ var DrawerOverlay = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1875
+ DrawerPrimitive.Overlay,
1876
+ {
1877
+ ref,
1878
+ className: cn("fixed inset-0 z-50 bg-black/80", className),
1879
+ ...props
1880
+ }
1881
+ ));
1882
+ DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;
1883
+ var DrawerContent = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(DrawerPortal, { children: [
1884
+ /* @__PURE__ */ jsx18(DrawerOverlay, {}),
1885
+ /* @__PURE__ */ jsxs13(
1886
+ DrawerPrimitive.Content,
1887
+ {
1888
+ ref,
1889
+ className: cn(
1890
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",
1891
+ className
1892
+ ),
1893
+ ...props,
1894
+ children: [
1895
+ /* @__PURE__ */ jsx18("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
1896
+ children
1897
+ ]
1898
+ }
1899
+ )
1900
+ ] }));
1901
+ DrawerContent.displayName = "DrawerContent";
1902
+ var DrawerHeader = ({
1903
+ className,
1904
+ ...props
1905
+ }) => /* @__PURE__ */ jsx18(
1906
+ "div",
1907
+ {
1908
+ className: cn("grid gap-1.5 p-4 text-center sm:text-left", className),
1909
+ ...props
1910
+ }
1911
+ );
1912
+ DrawerHeader.displayName = "DrawerHeader";
1913
+ var DrawerFooter = ({
1914
+ className,
1915
+ ...props
1916
+ }) => /* @__PURE__ */ jsx18(
1917
+ "div",
1918
+ {
1919
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1920
+ ...props
1921
+ }
1922
+ );
1923
+ DrawerFooter.displayName = "DrawerFooter";
1924
+ var DrawerTitle = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1925
+ DrawerPrimitive.Title,
1926
+ {
1927
+ ref,
1928
+ className: cn(
1929
+ "text-lg font-semibold leading-none tracking-tight",
1930
+ className
1931
+ ),
1932
+ ...props
1933
+ }
1934
+ ));
1935
+ DrawerTitle.displayName = DrawerPrimitive.Title.displayName;
1936
+ var DrawerDescription = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1937
+ DrawerPrimitive.Description,
1938
+ {
1939
+ ref,
1940
+ className: cn("text-sm text-muted-foreground", className),
1941
+ ...props
1942
+ }
1943
+ ));
1944
+ DrawerDescription.displayName = DrawerPrimitive.Description.displayName;
1945
+
1946
+ // src/components/dropdown-menu.tsx
1947
+ import * as React17 from "react";
1948
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
1949
+ import { Check as Check4, ChevronRight as ChevronRight2, Circle } from "lucide-react";
1950
+ import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
1951
+ var DropdownMenu = DropdownMenuPrimitive.Root;
1952
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1953
+ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1954
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1955
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1956
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1957
+ var DropdownMenuSubTrigger = React17.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs14(
1958
+ DropdownMenuPrimitive.SubTrigger,
1959
+ {
1960
+ ref,
1961
+ className: cn(
1962
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent data-[state=open]:bg-accent",
1963
+ inset && "pl-8",
1964
+ className
1965
+ ),
1966
+ ...props,
1967
+ children: [
1968
+ children,
1969
+ /* @__PURE__ */ jsx19(ChevronRight2, { className: "ml-auto h-4 w-4" })
1970
+ ]
1971
+ }
1972
+ ));
1973
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1974
+ var DropdownMenuSubContent = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1975
+ DropdownMenuPrimitive.SubContent,
1976
+ {
1977
+ ref,
1978
+ className: cn(
1979
+ "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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",
1980
+ className
1981
+ ),
1982
+ ...props
1983
+ }
1984
+ ));
1985
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1986
+ var DropdownMenuContent = React17.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx19(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx19(
1987
+ DropdownMenuPrimitive.Content,
1988
+ {
1989
+ ref,
1990
+ sideOffset,
1991
+ className: cn(
1992
+ "z-50 min-w-32 overflow-hidden rounded-10 border bg-popover p-1 text-popover-foreground shadow-md 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",
1993
+ className
1994
+ ),
1995
+ ...props
1996
+ }
1997
+ ) }));
1998
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1999
+ var DropdownMenuItem = React17.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx19(
2000
+ DropdownMenuPrimitive.Item,
2001
+ {
2002
+ ref,
2003
+ className: cn(
2004
+ "relative flex cursor-pointer select-none items-center rounded-[0.45rem] px-2 py-1 text-xs font-medium outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
2005
+ inset && "pl-8",
2006
+ className
2007
+ ),
2008
+ ...props
2009
+ }
2010
+ ));
2011
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
2012
+ var DropdownMenuCheckboxItem = React17.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs14(
2013
+ DropdownMenuPrimitive.CheckboxItem,
2014
+ {
2015
+ ref,
2016
+ className: cn(
2017
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
2018
+ className
2019
+ ),
2020
+ checked,
2021
+ ...props,
2022
+ children: [
2023
+ /* @__PURE__ */ jsx19("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx19(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx19(Check4, { className: "h-4 w-4" }) }) }),
2024
+ children
2025
+ ]
2026
+ }
2027
+ ));
2028
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
2029
+ var DropdownMenuRadioItem = React17.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs14(
2030
+ DropdownMenuPrimitive.RadioItem,
2031
+ {
2032
+ ref,
2033
+ className: cn(
2034
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
2035
+ className
2036
+ ),
2037
+ ...props,
2038
+ children: [
2039
+ /* @__PURE__ */ jsx19("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx19(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx19(Circle, { className: "h-2 w-2 fill-current" }) }) }),
2040
+ children
2041
+ ]
2042
+ }
2043
+ ));
2044
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
2045
+ var DropdownMenuLabel = React17.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx19(
2046
+ DropdownMenuPrimitive.Label,
2047
+ {
2048
+ ref,
2049
+ className: cn(
2050
+ "px-2 py-1.5 text-sm font-semibold",
2051
+ inset && "pl-8",
2052
+ className
2053
+ ),
2054
+ ...props
2055
+ }
2056
+ ));
2057
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
2058
+ var DropdownMenuSeparator = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
2059
+ DropdownMenuPrimitive.Separator,
2060
+ {
2061
+ ref,
2062
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
2063
+ ...props
2064
+ }
2065
+ ));
2066
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
2067
+ var DropdownMenuShortcut = ({
2068
+ className,
2069
+ ...props
2070
+ }) => {
2071
+ return /* @__PURE__ */ jsx19(
2072
+ "span",
2073
+ {
2074
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
2075
+ ...props
2076
+ }
2077
+ );
2078
+ };
2079
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
2080
+
2081
+ // src/components/field.tsx
2082
+ import { Field as FieldPrimitive } from "@base-ui-components/react/field";
2083
+ import { jsx as jsx20 } from "react/jsx-runtime";
2084
+ function Field({ className, ...props }) {
2085
+ return /* @__PURE__ */ jsx20(
2086
+ FieldPrimitive.Root,
2087
+ {
2088
+ className: cn("flex flex-col items-start gap-2", className),
2089
+ "data-slot": "field",
2090
+ ...props
2091
+ }
2092
+ );
2093
+ }
2094
+ function FieldLabel({ className, ...props }) {
2095
+ return /* @__PURE__ */ jsx20(
2096
+ FieldPrimitive.Label,
2097
+ {
2098
+ className: cn("inline-flex items-center gap-2 text-sm/4", className),
2099
+ "data-slot": "field-label",
2100
+ ...props
2101
+ }
2102
+ );
2103
+ }
2104
+ function FieldDescription({
2105
+ className,
2106
+ ...props
2107
+ }) {
2108
+ return /* @__PURE__ */ jsx20(
2109
+ FieldPrimitive.Description,
2110
+ {
2111
+ className: cn("text-muted-foreground text-xs", className),
2112
+ "data-slot": "field-description",
2113
+ ...props
2114
+ }
2115
+ );
2116
+ }
2117
+ function FieldError({ className, ...props }) {
2118
+ return /* @__PURE__ */ jsx20(
2119
+ FieldPrimitive.Error,
2120
+ {
2121
+ className: cn("text-destructive-foreground text-xs", className),
2122
+ "data-slot": "field-error",
2123
+ ...props
2124
+ }
2125
+ );
2126
+ }
2127
+ var FieldControl = FieldPrimitive.Control;
2128
+ var FieldValidity = FieldPrimitive.Validity;
2129
+
2130
+ // src/components/form.tsx
2131
+ import * as React19 from "react";
2132
+ import { Slot as Slot3 } from "@radix-ui/react-slot";
2133
+ import {
2134
+ Controller,
2135
+ FormProvider,
2136
+ useFormContext
2137
+ } from "react-hook-form";
2138
+
2139
+ // src/components/label.tsx
2140
+ import * as React18 from "react";
2141
+ import * as LabelPrimitive from "@radix-ui/react-label";
2142
+ import { cva as cva3 } from "class-variance-authority";
2143
+ import { jsx as jsx21 } from "react/jsx-runtime";
2144
+ var labelVariants = cva3(
2145
+ "text-xs text-muted-foreground font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
2146
+ );
2147
+ var Label2 = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
2148
+ LabelPrimitive.Root,
2149
+ {
2150
+ ref,
2151
+ className: cn(labelVariants(), className),
2152
+ ...props
2153
+ }
2154
+ ));
2155
+ Label2.displayName = LabelPrimitive.Root.displayName;
2156
+
2157
+ // src/components/form.tsx
2158
+ import { jsx as jsx22 } from "react/jsx-runtime";
2159
+ var Form = FormProvider;
2160
+ var FormFieldContext = React19.createContext(
2161
+ {}
2162
+ );
2163
+ var FormField = ({
2164
+ ...props
2165
+ }) => {
2166
+ return /* @__PURE__ */ jsx22(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx22(Controller, { ...props }) });
2167
+ };
2168
+ var useFormField = () => {
2169
+ const fieldContext = React19.useContext(FormFieldContext);
2170
+ const itemContext = React19.useContext(FormItemContext);
2171
+ const { getFieldState, formState } = useFormContext();
2172
+ const fieldState = getFieldState(fieldContext.name, formState);
2173
+ if (!fieldContext) {
2174
+ throw new Error("useFormField should be used within <FormField>");
2175
+ }
2176
+ const { id } = itemContext;
2177
+ return {
2178
+ id,
2179
+ name: fieldContext.name,
2180
+ formItemId: `${id}-form-item`,
2181
+ formDescriptionId: `${id}-form-item-description`,
2182
+ formMessageId: `${id}-form-item-message`,
2183
+ ...fieldState
2184
+ };
2185
+ };
2186
+ var FormItemContext = React19.createContext(
2187
+ {}
2188
+ );
2189
+ var FormItem = React19.forwardRef(({ className, ...props }, ref) => {
2190
+ const id = React19.useId();
2191
+ return /* @__PURE__ */ jsx22(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx22("div", { ref, className: cn("space-y-2", className), ...props }) });
2192
+ });
2193
+ FormItem.displayName = "FormItem";
2194
+ var FormLabel = React19.forwardRef(({ className, ...props }, ref) => {
2195
+ const { error, formItemId } = useFormField();
2196
+ return /* @__PURE__ */ jsx22(
2197
+ Label2,
2198
+ {
2199
+ ref,
2200
+ className: cn(error && "text-destructive", className),
2201
+ htmlFor: formItemId,
2202
+ ...props
2203
+ }
2204
+ );
2205
+ });
2206
+ FormLabel.displayName = "FormLabel";
2207
+ var FormControl = React19.forwardRef(({ ...props }, ref) => {
2208
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
2209
+ return /* @__PURE__ */ jsx22(
2210
+ Slot3,
2211
+ {
2212
+ ref,
2213
+ id: formItemId,
2214
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
2215
+ "aria-invalid": !!error,
2216
+ ...props
2217
+ }
2218
+ );
2219
+ });
2220
+ FormControl.displayName = "FormControl";
2221
+ var FormDescription = React19.forwardRef(({ className, ...props }, ref) => {
2222
+ const { formDescriptionId } = useFormField();
2223
+ return /* @__PURE__ */ jsx22(
2224
+ "p",
2225
+ {
2226
+ ref,
2227
+ id: formDescriptionId,
2228
+ className: cn("text-sm text-muted-foreground", className),
2229
+ ...props
2230
+ }
2231
+ );
2232
+ });
2233
+ FormDescription.displayName = "FormDescription";
2234
+ var FormMessage = React19.forwardRef(({ className, children, ...props }, ref) => {
2235
+ const { error, formMessageId } = useFormField();
2236
+ const body = error ? String(error?.message) : children;
2237
+ if (!body) {
2238
+ return null;
2239
+ }
2240
+ return /* @__PURE__ */ jsx22(
2241
+ "p",
2242
+ {
2243
+ ref,
2244
+ id: formMessageId,
2245
+ className: cn("text-sm font-medium text-destructive", className),
2246
+ ...props,
2247
+ children: body
2248
+ }
2249
+ );
2250
+ });
2251
+ FormMessage.displayName = "FormMessage";
2252
+
2253
+ // src/components/image-card.tsx
2254
+ import React20 from "react";
2255
+ import { jsx as jsx23 } from "react/jsx-runtime";
2256
+ var ImageCard = React20.memo(
2257
+ ({ src = "", alt = "", onErrorImage, className }) => {
2258
+ return /* @__PURE__ */ jsx23(
2259
+ "img",
2260
+ {
2261
+ onError: (e) => {
2262
+ const target = e?.currentTarget;
2263
+ if (target) {
2264
+ target.src = onErrorImage || "";
2265
+ }
2266
+ },
2267
+ src,
2268
+ alt,
2269
+ className: cn(
2270
+ `h-8 w-8 rounded-10 bg-main-background object-cover object-center shadow-s
2271
+ overflow-hidden border-4 border-main-background shrink-0`,
2272
+ className
2273
+ )
2274
+ }
2275
+ );
2276
+ }
2277
+ );
2278
+
2279
+ // src/components/input-otp.tsx
2280
+ import * as React21 from "react";
2281
+ import { OTPInput, OTPInputContext } from "input-otp";
2282
+ import { Dot } from "lucide-react";
2283
+ import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
2284
+ var InputOTP = React21.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx24(
2285
+ OTPInput,
2286
+ {
2287
+ ref,
2288
+ containerClassName: cn(
2289
+ "flex items-center gap-2 has-disabled:opacity-50",
2290
+ containerClassName
2291
+ ),
2292
+ className: cn("disabled:cursor-not-allowed", className),
2293
+ ...props
2294
+ }
2295
+ ));
2296
+ InputOTP.displayName = "InputOTP";
2297
+ var InputOTPGroup = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx24("div", { ref, className: cn("flex items-center", className), ...props }));
2298
+ InputOTPGroup.displayName = "InputOTPGroup";
2299
+ var InputOTPSlot = React21.forwardRef(({ index, className, ...props }, ref) => {
2300
+ const inputOTPContext = React21.useContext(OTPInputContext);
2301
+ const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
2302
+ return /* @__PURE__ */ jsxs15(
2303
+ "div",
2304
+ {
2305
+ ref,
2306
+ className: cn(
2307
+ "relative flex h-10 w-10 items-center justify-center bg-background border-y border-r border-input text-sm transition-all first:rounded-l-10 first:border-l last:rounded-r-10",
2308
+ isActive && "z-10 ring-2 ring-ring ring-offset-background",
2309
+ className
2310
+ ),
2311
+ ...props,
2312
+ children: [
2313
+ char,
2314
+ hasFakeCaret && /* @__PURE__ */ jsx24("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx24("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
2315
+ ]
2316
+ }
2317
+ );
2318
+ });
2319
+ InputOTPSlot.displayName = "InputOTPSlot";
2320
+ var InputOTPSeparator = React21.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx24("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ jsx24(Dot, {}) }));
2321
+ InputOTPSeparator.displayName = "InputOTPSeparator";
2322
+
2323
+ // src/components/modal-container.tsx
2324
+ import React22 from "react";
2325
+ import { motion } from "framer-motion";
2326
+ import { jsx as jsx25 } from "react/jsx-runtime";
2327
+ var ModalContainer = React22.memo((props) => {
2328
+ return /* @__PURE__ */ jsx25(
2329
+ motion.div,
2330
+ {
2331
+ initial: { y: 10, opacity: 0 },
2332
+ exit: { y: 10, opacity: 0 },
2333
+ animate: { y: 0, opacity: 1 },
2334
+ className: "fixed inset-0 md:inset-2 md:rounded-xl md:border-4 border-white dark:border-zinc-700\n shadow-3xl bg-main-background overflow-hidden z-10",
2335
+ children: /* @__PURE__ */ jsx25("div", { className: "w-full h-full overflow-hidden overflow-y-auto flex justify-center", children: /* @__PURE__ */ jsx25("div", { className: "w-full max-w-[700px] h-fit shrink-0 overflow-hidden flex flex-col p-4", children: props.children }) })
2336
+ }
2337
+ );
2338
+ });
2339
+
2340
+ // src/components/multi-select.tsx
2341
+ import * as React23 from "react";
2342
+ import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
2343
+ var MultiSelect = ({
2344
+ options: options2 = [],
2345
+ value = [],
2346
+ onValueChange,
2347
+ className,
2348
+ searchInputClassName,
2349
+ placeholder,
2350
+ maxCount,
2351
+ required
2352
+ }) => {
2353
+ const selectedOptions = React23.useMemo(() => {
2354
+ return value.map((v) => options2.find((opt) => opt.value === v)).filter(Boolean);
2355
+ }, [value, options2]);
2356
+ const handleValueChange = React23.useCallback(
2357
+ (newValue) => {
2358
+ if (Array.isArray(newValue)) {
2359
+ onValueChange?.(newValue.map((opt) => opt.value));
2360
+ } else if (newValue === null) {
2361
+ onValueChange?.([]);
2362
+ }
2363
+ },
2364
+ [onValueChange]
2365
+ );
2366
+ return /* @__PURE__ */ jsxs16(
2367
+ Combobox,
2368
+ {
2369
+ required,
2370
+ items: options2,
2371
+ multiple: true,
2372
+ value: selectedOptions,
2373
+ onValueChange: handleValueChange,
2374
+ disabled: maxCount === options2.length,
2375
+ children: [
2376
+ /* @__PURE__ */ jsx26(
2377
+ ComboboxChips,
2378
+ {
2379
+ className: cn(
2380
+ "min-h-10! before:hidden shadow-none rounded-10!",
2381
+ className
2382
+ ),
2383
+ children: /* @__PURE__ */ jsx26(ComboboxValue, { children: (value2) => /* @__PURE__ */ jsxs16(React23.Fragment, { children: [
2384
+ value2?.map((item) => /* @__PURE__ */ jsx26(
2385
+ ComboboxChip,
2386
+ {
2387
+ "aria-label": item.value,
2388
+ className: "bg-background border border-border text-xs text-primary [&_svg]:text-muted-foreground/80\n [&_svg]:hover:text-destructive cursor-default font-medium pl-2 flex items-center rounded-lg",
2389
+ children: item.label
2390
+ },
2391
+ item.value
2392
+ )),
2393
+ /* @__PURE__ */ jsx26(
2394
+ ComboboxInput,
2395
+ {
2396
+ placeholder: value2.length > 0 ? void 0 : placeholder || "Select an item...",
2397
+ "aria-label": "Select an item",
2398
+ className: cn(
2399
+ "text-sm! placeholder:text-muted-foreground/50 rounded-10",
2400
+ searchInputClassName
2401
+ )
2402
+ }
2403
+ )
2404
+ ] }) })
2405
+ }
2406
+ ),
2407
+ /* @__PURE__ */ jsxs16(ComboboxPopup, { className: "rounded-xl", children: [
2408
+ /* @__PURE__ */ jsxs16(ComboboxEmpty, { className: "w-full center-flex flex-col", children: [
2409
+ /* @__PURE__ */ jsx26(
2410
+ "div",
2411
+ {
2412
+ style: { borderRadius: "30% 70% 70% 30% / 30% 38% 62% 70%" },
2413
+ className: "mt-8 size-24 center-flex bg-accent/50 rounded-blob",
2414
+ children: /* @__PURE__ */ jsx26(
2415
+ "img",
2416
+ {
2417
+ src: "/images/no-direction.png",
2418
+ alt: "no-results",
2419
+ className: "size-16 object-cover object-center"
2420
+ }
2421
+ )
2422
+ }
2423
+ ),
2424
+ /* @__PURE__ */ jsx26("h1", { className: "mt-4 text-sm text-foreground font-semibold", children: "Nothing Found" }),
2425
+ /* @__PURE__ */ jsx26("p", { className: "mt-1 mb-8 text-sm text-center text-muted-foreground max-w-62", children: "We couldn't find anything matching your search" })
2426
+ ] }),
2427
+ /* @__PURE__ */ jsx26(ComboboxList, { children: (item) => /* @__PURE__ */ jsx26(
2428
+ ComboboxItem,
2429
+ {
2430
+ value: item,
2431
+ className: "pe-0! flex data-selected:hidden",
2432
+ children: item.label
2433
+ },
2434
+ item.value
2435
+ ) })
2436
+ ] })
2437
+ ]
2438
+ }
2439
+ );
2440
+ };
2441
+ MultiSelect.displayName = "MultiSelect";
2442
+
2443
+ // src/components/password-input.tsx
2444
+ import { Check as Check5, Eye, EyeOff, X } from "lucide-react";
2445
+ import React24 from "react";
2446
+ import { jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
2447
+ var PasswordInput = React24.forwardRef(
2448
+ ({ className, onSubmit, showStrength, ...props }, ref) => {
2449
+ const [isVisible, setIsVisible] = React24.useState(false);
2450
+ const toggleVisibility = () => setIsVisible((prevState) => !prevState);
2451
+ const checkStrength = (pass) => {
2452
+ const requirements = [
2453
+ { regex: /.{8,}/, text: "At least 8 characters" },
2454
+ { regex: /[0-9]/, text: "At least 1 number" },
2455
+ { regex: /[a-z]/, text: "At least 1 lowercase letter" },
2456
+ { regex: /[A-Z]/, text: "At least 1 uppercase letter" }
2457
+ ];
2458
+ return requirements.map((req) => ({
2459
+ met: req.regex.test(pass),
2460
+ text: req.text
2461
+ }));
2462
+ };
2463
+ const strength = checkStrength(props.value?.toString() || "");
2464
+ const strengthScore = React24.useMemo(() => {
2465
+ return strength.filter((req) => req.met).length;
2466
+ }, [strength]);
2467
+ const getStrengthColor = (score) => {
2468
+ if (score === 0) return "bg-border";
2469
+ if (score <= 1) return "bg-red-500";
2470
+ if (score <= 2) return "bg-orange-500";
2471
+ if (score === 3) return "bg-amber-500";
2472
+ return "bg-emerald-500";
2473
+ };
2474
+ const getStrengthText = (score) => {
2475
+ if (score === 0) return "Enter a password";
2476
+ if (score <= 2) return "Weak password";
2477
+ if (score === 3) return "Medium password";
2478
+ return "Strong password";
2479
+ };
2480
+ const handleSubmit = (event) => {
2481
+ if (showStrength && strengthScore < 4) {
2482
+ event.preventDefault();
2483
+ return;
2484
+ }
2485
+ onSubmit?.(event);
2486
+ };
2487
+ return /* @__PURE__ */ jsxs17("div", { className: "relative w-full", children: [
2488
+ /* @__PURE__ */ jsxs17("div", { className: "relative w-full", children: [
2489
+ /* @__PURE__ */ jsx27(
2490
+ Input,
2491
+ {
2492
+ className: cn("pe-9", className),
2493
+ ...props,
2494
+ ref,
2495
+ type: isVisible ? "text" : "password",
2496
+ "aria-invalid": showStrength ? strengthScore < 4 : false,
2497
+ onSubmit: handleSubmit
2498
+ }
2499
+ ),
2500
+ showStrength && /* @__PURE__ */ jsx27(
2501
+ "input",
2502
+ {
2503
+ title: "password",
2504
+ type: "password",
2505
+ className: "scale-0 absolute",
2506
+ required: true,
2507
+ value: showStrength ? strengthScore >= 4 ? props?.value : "" : props.value
2508
+ }
2509
+ ),
2510
+ /* @__PURE__ */ jsx27(
2511
+ "button",
2512
+ {
2513
+ className: "absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-lg text-muted-foreground/80 outline-offset-2 transition-colors hover:text-foreground focus:z-10 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-ring/70 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
2514
+ type: "button",
2515
+ onClick: toggleVisibility,
2516
+ "aria-label": isVisible ? "Hide password" : "Show password",
2517
+ "aria-pressed": isVisible,
2518
+ "aria-controls": "password",
2519
+ children: isVisible ? /* @__PURE__ */ jsx27(EyeOff, { size: 16, strokeWidth: 2, "aria-hidden": "true" }) : /* @__PURE__ */ jsx27(Eye, { size: 16, strokeWidth: 2, "aria-hidden": "true" })
2520
+ }
2521
+ )
2522
+ ] }),
2523
+ showStrength && /* @__PURE__ */ jsxs17(React24.Fragment, { children: [
2524
+ /* @__PURE__ */ jsx27(
2525
+ "div",
2526
+ {
2527
+ className: "my-3 h-1 w-full overflow-hidden rounded-full bg-border",
2528
+ role: "progressbar",
2529
+ "aria-valuenow": strengthScore,
2530
+ "aria-valuemin": 0,
2531
+ "aria-valuemax": 4,
2532
+ "aria-label": "Password strength",
2533
+ children: /* @__PURE__ */ jsx27(
2534
+ "div",
2535
+ {
2536
+ className: `h-full ${getStrengthColor(
2537
+ strengthScore
2538
+ )} transition-all duration-500 ease-out`,
2539
+ style: { width: `${strengthScore / 4 * 100}%` }
2540
+ }
2541
+ )
2542
+ }
2543
+ ),
2544
+ /* @__PURE__ */ jsxs17(
2545
+ "p",
2546
+ {
2547
+ id: "password-strength",
2548
+ className: "mb-2 text-xs font-medium text-zinc-600",
2549
+ children: [
2550
+ getStrengthText(strengthScore),
2551
+ ". Must contain:"
2552
+ ]
2553
+ }
2554
+ ),
2555
+ /* @__PURE__ */ jsx27("ul", { className: "space-y-1.5", "aria-label": "Password requirements", children: strength.map((req, index) => /* @__PURE__ */ jsxs17("li", { className: "flex items-center gap-2", children: [
2556
+ req.met ? /* @__PURE__ */ jsx27(
2557
+ Check5,
2558
+ {
2559
+ size: 16,
2560
+ className: "text-emerald-500",
2561
+ "aria-hidden": "true"
2562
+ }
2563
+ ) : /* @__PURE__ */ jsx27(
2564
+ X,
2565
+ {
2566
+ size: 16,
2567
+ className: "text-muted-foreground/80",
2568
+ "aria-hidden": "true"
2569
+ }
2570
+ ),
2571
+ /* @__PURE__ */ jsxs17(
2572
+ "span",
2573
+ {
2574
+ className: `text-xs ${req.met ? "text-emerald-600" : "text-muted-foreground"}`,
2575
+ children: [
2576
+ req.text,
2577
+ /* @__PURE__ */ jsx27("span", { className: "sr-only", children: req.met ? " - Requirement met" : " - Requirement not met" })
2578
+ ]
2579
+ }
2580
+ )
2581
+ ] }, index)) })
2582
+ ] })
2583
+ ] });
2584
+ }
2585
+ );
2586
+ PasswordInput.displayName = "PasswordInput";
2587
+ var password_input_default = React24.memo(PasswordInput);
2588
+
2589
+ // src/components/phone-number-input.tsx
2590
+ import { ChevronDown as ChevronDown2, Phone } from "lucide-react";
2591
+ import { forwardRef as forwardRef16, useState as useState3 } from "react";
2592
+ import * as RPNInput from "react-phone-number-input";
2593
+ import flags from "react-phone-number-input/flags";
2594
+ import { isValidPhoneNumber } from "react-phone-number-input";
2595
+ import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
2596
+ var PhoneInput = forwardRef16(
2597
+ ({ className, ...props }, ref) => {
2598
+ return /* @__PURE__ */ jsx28(
2599
+ Input,
2600
+ {
2601
+ className: cn(
2602
+ "-ms-px rounded-s-none shadow-none focus-visible:z-10 ring-0! border!",
2603
+ className
2604
+ ),
2605
+ ref,
2606
+ ...props
2607
+ }
2608
+ );
2609
+ }
2610
+ );
2611
+ PhoneInput.displayName = "PhoneInput";
2612
+
2613
+ // src/components/price-input.tsx
2614
+ import React26 from "react";
2615
+ import { jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
2616
+ var PriceInput = React26.forwardRef(({ currency, ...props }, ref) => {
2617
+ return /* @__PURE__ */ jsxs19(
2618
+ "div",
2619
+ {
2620
+ className: cn(
2621
+ "relative h-fit flex overflow-hidden p-0",
2622
+ props.containerClassname
2623
+ ),
2624
+ children: [
2625
+ !props.hide_currency_symbol && /* @__PURE__ */ jsx29("div", { className: "absolute inset-y-0.5 flex items-center pl-4 pr-2", children: /* @__PURE__ */ jsx29("span", { className: "[fontSize:inherit] font-medium text-muted-foreground/50", children: currency?.symbol }) }),
2626
+ /* @__PURE__ */ jsx29(
2627
+ Input,
2628
+ {
2629
+ ref,
2630
+ placeholder: "0.00",
2631
+ type: "text",
2632
+ ...props,
2633
+ className: cn("px-10 shadow-none m-0! py-0", props.className)
2634
+ }
2635
+ ),
2636
+ !props.hide_currency_code && /* @__PURE__ */ jsx29("div", { className: "absolute inset-y-0.5 right-0 flex items-center pl-3 pr-4", children: /* @__PURE__ */ jsx29("span", { className: "[fontSize:inherit] font-medium text-muted-foreground/50", children: currency?.code }) })
2637
+ ]
2638
+ }
2639
+ );
2640
+ });
2641
+ PriceInput.displayName = "PriceInput";
2642
+
2643
+ // src/components/progress.tsx
2644
+ import * as React27 from "react";
2645
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
2646
+ import { jsx as jsx30 } from "react/jsx-runtime";
2647
+ var Progress = React27.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx30(
2648
+ ProgressPrimitive.Root,
2649
+ {
2650
+ ref,
2651
+ className: cn(
2652
+ "relative h-4 w-full overflow-hidden rounded-full bg-secondary",
2653
+ className
2654
+ ),
2655
+ ...props,
2656
+ children: /* @__PURE__ */ jsx30(
2657
+ ProgressPrimitive.Indicator,
2658
+ {
2659
+ className: "h-full w-full flex-1 bg-primary transition-all",
2660
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
2661
+ }
2662
+ )
2663
+ }
2664
+ ));
2665
+ Progress.displayName = ProgressPrimitive.Root.displayName;
2666
+
2667
+ // src/components/select.tsx
2668
+ import * as React28 from "react";
2669
+ import * as SelectPrimitive from "@radix-ui/react-select";
2670
+ import { Check as Check6, ChevronDown as ChevronDown3, ChevronUp } from "lucide-react";
2671
+ import { jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
2672
+ var Select = SelectPrimitive.Root;
2673
+ var SelectGroup = SelectPrimitive.Group;
2674
+ var SelectValue = SelectPrimitive.Value;
2675
+ var SelectTrigger = React28.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs20(
2676
+ SelectPrimitive.Trigger,
2677
+ {
2678
+ ref,
2679
+ className: cn(
2680
+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-xs ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
2681
+ className
2682
+ ),
2683
+ ...props,
2684
+ children: [
2685
+ children,
2686
+ /* @__PURE__ */ jsx31(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx31(ChevronDown3, { className: "h-4 w-4 opacity-50" }) })
2687
+ ]
2688
+ }
2689
+ ));
2690
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
2691
+ var SelectScrollUpButton = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
2692
+ SelectPrimitive.ScrollUpButton,
2693
+ {
2694
+ ref,
2695
+ className: cn(
2696
+ "flex cursor-default items-center justify-center py-1",
2697
+ className
2698
+ ),
2699
+ ...props,
2700
+ children: /* @__PURE__ */ jsx31(ChevronUp, { className: "h-4 w-4" })
2701
+ }
2702
+ ));
2703
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
2704
+ var SelectScrollDownButton = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
2705
+ SelectPrimitive.ScrollDownButton,
2706
+ {
2707
+ ref,
2708
+ className: cn(
2709
+ "flex cursor-default items-center justify-center py-1",
2710
+ className
2711
+ ),
2712
+ ...props,
2713
+ children: /* @__PURE__ */ jsx31(ChevronDown3, { className: "h-4 w-4" })
2714
+ }
2715
+ ));
2716
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
2717
+ var SelectContent = React28.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx31(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs20(
2718
+ SelectPrimitive.Content,
2719
+ {
2720
+ ref,
2721
+ className: cn(
2722
+ "relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md 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",
2723
+ 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",
2724
+ className
2725
+ ),
2726
+ position,
2727
+ ...props,
2728
+ children: [
2729
+ /* @__PURE__ */ jsx31(SelectScrollUpButton, {}),
2730
+ /* @__PURE__ */ jsx31(
2731
+ SelectPrimitive.Viewport,
2732
+ {
2733
+ className: cn(
2734
+ "p-1",
2735
+ position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)"
2736
+ ),
2737
+ children
2738
+ }
2739
+ ),
2740
+ /* @__PURE__ */ jsx31(SelectScrollDownButton, {})
2741
+ ]
2742
+ }
2743
+ ) }));
2744
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
2745
+ var SelectLabel = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
2746
+ SelectPrimitive.Label,
2747
+ {
2748
+ ref,
2749
+ className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
2750
+ ...props
2751
+ }
2752
+ ));
2753
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
2754
+ var SelectItem = React28.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs20(
2755
+ SelectPrimitive.Item,
2756
+ {
2757
+ ref,
2758
+ className: cn(
2759
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-xs outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
2760
+ className
2761
+ ),
2762
+ ...props,
2763
+ children: [
2764
+ /* @__PURE__ */ jsx31("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx31(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx31(Check6, { className: "h-4 w-4" }) }) }),
2765
+ /* @__PURE__ */ jsx31(SelectPrimitive.ItemText, { children })
2766
+ ]
2767
+ }
2768
+ ));
2769
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
2770
+ var SelectSeparator = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
2771
+ SelectPrimitive.Separator,
2772
+ {
2773
+ ref,
2774
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
2775
+ ...props
2776
+ }
2777
+ ));
2778
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
2779
+
2780
+ // src/components/separator.tsx
2781
+ import * as React29 from "react";
2782
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
2783
+ import { jsx as jsx32 } from "react/jsx-runtime";
2784
+ var Separator3 = React29.forwardRef(
2785
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx32(
2786
+ SeparatorPrimitive.Root,
2787
+ {
2788
+ ref,
2789
+ decorative,
2790
+ orientation,
2791
+ className: cn(
2792
+ "shrink-0 bg-border",
2793
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
2794
+ className
2795
+ ),
2796
+ ...props
2797
+ }
2798
+ )
2799
+ );
2800
+ Separator3.displayName = SeparatorPrimitive.Root.displayName;
2801
+
2802
+ // src/components/sheet.tsx
2803
+ import * as React30 from "react";
2804
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
2805
+ import { cva as cva4 } from "class-variance-authority";
2806
+ import { X as X2 } from "lucide-react";
2807
+ import { jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
2808
+ var Sheet = SheetPrimitive.Root;
2809
+ var SheetTrigger = SheetPrimitive.Trigger;
2810
+ var SheetClose = SheetPrimitive.Close;
2811
+ var SheetPortal = SheetPrimitive.Portal;
2812
+ var SheetOverlay = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
2813
+ SheetPrimitive.Overlay,
2814
+ {
2815
+ className: cn(
2816
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2817
+ className
2818
+ ),
2819
+ ...props,
2820
+ ref
2821
+ }
2822
+ ));
2823
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
2824
+ var sheetVariants = cva4(
2825
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
2826
+ {
2827
+ variants: {
2828
+ side: {
2829
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
2830
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
2831
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
2832
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
2833
+ }
2834
+ },
2835
+ defaultVariants: {
2836
+ side: "right"
2837
+ }
2838
+ }
2839
+ );
2840
+ var SheetContent = React30.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs21(SheetPortal, { children: [
2841
+ /* @__PURE__ */ jsx33(SheetOverlay, {}),
2842
+ /* @__PURE__ */ jsxs21(
2843
+ SheetPrimitive.Content,
2844
+ {
2845
+ ref,
2846
+ className: cn(sheetVariants({ side }), className),
2847
+ ...props,
2848
+ children: [
2849
+ children,
2850
+ /* @__PURE__ */ jsxs21(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
2851
+ /* @__PURE__ */ jsx33(X2, { className: "h-4 w-4" }),
2852
+ /* @__PURE__ */ jsx33("span", { className: "sr-only", children: "Close" })
2853
+ ] })
2854
+ ]
2855
+ }
2856
+ )
2857
+ ] }));
2858
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
2859
+ var SheetHeader = ({
2860
+ className,
2861
+ ...props
2862
+ }) => /* @__PURE__ */ jsx33(
2863
+ "div",
2864
+ {
2865
+ className: cn(
2866
+ "flex flex-col space-y-2 text-center sm:text-left",
2867
+ className
2868
+ ),
2869
+ ...props
2870
+ }
2871
+ );
2872
+ SheetHeader.displayName = "SheetHeader";
2873
+ var SheetFooter = ({
2874
+ className,
2875
+ ...props
2876
+ }) => /* @__PURE__ */ jsx33(
2877
+ "div",
2878
+ {
2879
+ className: cn(
2880
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
2881
+ className
2882
+ ),
2883
+ ...props
2884
+ }
2885
+ );
2886
+ SheetFooter.displayName = "SheetFooter";
2887
+ var SheetTitle = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
2888
+ SheetPrimitive.Title,
2889
+ {
2890
+ ref,
2891
+ className: cn("text-lg font-semibold text-foreground", className),
2892
+ ...props
2893
+ }
2894
+ ));
2895
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
2896
+ var SheetDescription = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
2897
+ SheetPrimitive.Description,
2898
+ {
2899
+ ref,
2900
+ className: cn("text-sm text-muted-foreground", className),
2901
+ ...props
2902
+ }
2903
+ ));
2904
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
2905
+
2906
+ // src/components/skeleton.tsx
2907
+ import { jsx as jsx34 } from "react/jsx-runtime";
2908
+ function Skeleton({
2909
+ className,
2910
+ ...props
2911
+ }) {
2912
+ return /* @__PURE__ */ jsx34(
2913
+ "div",
2914
+ {
2915
+ className: cn("animate-pulse rounded-lg bg-muted", className),
2916
+ ...props
2917
+ }
2918
+ );
2919
+ }
2920
+
2921
+ // src/components/status-indicator.tsx
2922
+ import { mergeProps as mergeProps3 } from "@base-ui-components/react/merge-props";
2923
+ import { useRender as useRender3 } from "@base-ui-components/react/use-render";
2924
+ import { cva as cva5 } from "class-variance-authority";
2925
+ import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
2926
+ var statusIndicatorVariants = cva5(
2927
+ "relative inline-flex size-2.5 shrink-0",
2928
+ {
2929
+ defaultVariants: {
2930
+ variant: "active"
2931
+ },
2932
+ variants: {
2933
+ variant: {
2934
+ active: "[&>span:first-child]:bg-teal-500 [&>span:last-child]:bg-teal-600",
2935
+ degraded: "[&>span:first-child]:bg-yellow-500 [&>span:last-child]:bg-yellow-600",
2936
+ critical: "[&>span:first-child]:bg-red-500 [&>span:last-child]:bg-red-600",
2937
+ neutral: "[&>span:first-child]:bg-muted-foreground/80 [&>span:last-child]:bg-muted-foreground"
2938
+ }
2939
+ }
2940
+ }
2941
+ );
2942
+ function StatusIndicator({
2943
+ className,
2944
+ variant,
2945
+ animated = true,
2946
+ render,
2947
+ ...props
2948
+ }) {
2949
+ const defaultProps = {
2950
+ className: cn(statusIndicatorVariants({ className, variant })),
2951
+ "data-slot": "status-indicator"
2952
+ };
2953
+ return useRender3({
2954
+ defaultTagName: "span",
2955
+ props: mergeProps3(defaultProps, props),
2956
+ render: render || /* @__PURE__ */ jsxs22("span", { ...defaultProps, children: [
2957
+ /* @__PURE__ */ jsx35(
2958
+ "span",
2959
+ {
2960
+ className: cn(
2961
+ "absolute inline-flex h-full w-full rounded-full opacity-75",
2962
+ animated && "animate-ping"
2963
+ )
2964
+ }
2965
+ ),
2966
+ /* @__PURE__ */ jsx35("span", { className: "relative inline-flex rounded-full size-2.5" })
2967
+ ] })
2968
+ });
2969
+ }
2970
+
2971
+ // src/components/switch.tsx
2972
+ import { Switch as SwitchPrimitive } from "@base-ui-components/react/switch";
2973
+ import { jsx as jsx36 } from "react/jsx-runtime";
2974
+ function Switch({ className, ...props }) {
2975
+ return /* @__PURE__ */ jsx36(
2976
+ SwitchPrimitive.Root,
2977
+ {
2978
+ className: cn(
2979
+ "cursor-pointer group/switch inset-shadow-[0_1px_--theme(--color-black/4%)] inline-flex h-4.5 w-7.5 shrink-0 items-center rounded-full p-px outline-none transition-all focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-64 data-checked:bg-primary data-unchecked:bg-input",
2980
+ className
2981
+ ),
2982
+ "data-slot": "switch",
2983
+ ...props,
2984
+ children: /* @__PURE__ */ jsx36(
2985
+ SwitchPrimitive.Thumb,
2986
+ {
2987
+ className: cn(
2988
+ "pointer-events-none block size-4 rounded-full bg-background shadow-sm transition-[translate,width] group-active/switch:w-4.5 data-checked:translate-x-3 data-unchecked:translate-x-0 data-checked:group-active/switch:translate-x-2.5"
2989
+ ),
2990
+ "data-slot": "switch-thumb"
2991
+ }
2992
+ )
2993
+ }
2994
+ );
2995
+ }
2996
+
2997
+ // src/components/table.tsx
2998
+ import { jsx as jsx37 } from "react/jsx-runtime";
2999
+ function Table({ className, ...props }) {
3000
+ return /* @__PURE__ */ jsx37(
3001
+ "div",
3002
+ {
3003
+ className: "relative w-full overflow-x-auto",
3004
+ "data-slot": "table-container",
3005
+ children: /* @__PURE__ */ jsx37(
3006
+ "table",
3007
+ {
3008
+ className: cn(
3009
+ "w-full caption-bottom in-data-[slot=frame]:border-separate in-data-[slot=frame]:border-spacing-0 text-sm",
3010
+ className
3011
+ ),
3012
+ "data-slot": "table",
3013
+ ...props
3014
+ }
3015
+ )
3016
+ }
3017
+ );
3018
+ }
3019
+ function TableHeader({ className, ...props }) {
3020
+ return /* @__PURE__ */ jsx37(
3021
+ "thead",
3022
+ {
3023
+ className: cn(
3024
+ "[&_tr]:border-b in-data-[slot=frame]:**:[th]:h-9 in-data-[slot=frame]:*:[tr]:border-none in-data-[slot=frame]:*:[tr]:hover:bg-transparent",
3025
+ className
3026
+ ),
3027
+ "data-slot": "table-header",
3028
+ ...props
3029
+ }
3030
+ );
3031
+ }
3032
+ function TableBody({ className, ...props }) {
3033
+ return /* @__PURE__ */ jsx37(
3034
+ "tbody",
3035
+ {
3036
+ className: cn(
3037
+ "relative in-data-[slot=frame]:rounded-xl in-data-[slot=frame]:shadow-xs before:pointer-events-none before:absolute before:inset-px not-in-data-[slot=frame]:before:hidden before:rounded-[calc(var(--radius-xl)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-clip-border dark:before:shadow-[0_-1px_--theme(--color-white/8%)] [&_tr:last-child]:border-0 in-data-[slot=frame]:*:[tr]:border-0 in-data-[slot=frame]:*:[tr]:*:[td]:border-b in-data-[slot=frame]:*:[tr]:*:[td]:bg-card in-data-[slot=frame]:*:[tr]:*:[td]:bg-clip-padding in-data-[slot=frame]:*:[tr]:first:*:[td]:first:rounded-ss-xl in-data-[slot=frame]:*:[tr]:*:[td]:first:border-s in-data-[slot=frame]:*:[tr]:first:*:[td]:border-t in-data-[slot=frame]:*:[tr]:last:*:[td]:last:rounded-ee-xl in-data-[slot=frame]:*:[tr]:*:[td]:last:border-e in-data-[slot=frame]:*:[tr]:first:*:[td]:last:rounded-se-xl in-data-[slot=frame]:*:[tr]:last:*:[td]:first:rounded-es-xl in-data-[slot=frame]:*:[tr]:hover:*:[td]:bg-muted/32",
3038
+ className
3039
+ ),
3040
+ "data-slot": "table-body",
3041
+ ...props
3042
+ }
3043
+ );
3044
+ }
3045
+ function TableFooter({ className, ...props }) {
3046
+ return /* @__PURE__ */ jsx37(
3047
+ "tfoot",
3048
+ {
3049
+ className: cn(
3050
+ "border-t in-data-[slot=frame]:border-none bg-muted/72 in-data-[slot=frame]:bg-transparent font-medium [&>tr]:last:border-b-0 in-data-[slot=frame]:*:[tr]:hover:bg-transparent",
3051
+ className
3052
+ ),
3053
+ "data-slot": "table-footer",
3054
+ ...props
3055
+ }
3056
+ );
3057
+ }
3058
+ function TableRow({ className, ...props }) {
3059
+ return /* @__PURE__ */ jsx37(
3060
+ "tr",
3061
+ {
3062
+ className: cn(
3063
+ "border-b transition-colors hover:bg-muted in-data-[slot=frame]:hover:bg-transparent data-[state=selected]:bg-muted in-data-[slot=frame]:data-[state=selected]:bg-transparent",
3064
+ className
3065
+ ),
3066
+ "data-slot": "table-row",
3067
+ ...props
3068
+ }
3069
+ );
3070
+ }
3071
+ function TableHead({ className, ...props }) {
3072
+ return /* @__PURE__ */ jsx37(
3073
+ "th",
3074
+ {
3075
+ className: cn(
3076
+ "h-10 whitespace-nowrap px-2 text-left align-middle font-medium text-foreground has-[[role=checkbox]]:pe-0 [&>[role=checkbox]]:translate-y-[2px]",
3077
+ className
3078
+ ),
3079
+ "data-slot": "table-head",
3080
+ ...props
3081
+ }
3082
+ );
3083
+ }
3084
+ function TableCell({ className, ...props }) {
3085
+ return /* @__PURE__ */ jsx37(
3086
+ "td",
3087
+ {
3088
+ className: cn(
3089
+ "whitespace-nowrap p-2 align-middle has-[[role=checkbox]]:pe-0 [&>[role=checkbox]]:translate-y-[2px]",
3090
+ className
3091
+ ),
3092
+ "data-slot": "table-cell",
3093
+ ...props
3094
+ }
3095
+ );
3096
+ }
3097
+ function TableCaption({
3098
+ className,
3099
+ ...props
3100
+ }) {
3101
+ return /* @__PURE__ */ jsx37(
3102
+ "caption",
3103
+ {
3104
+ className: cn(
3105
+ "in-data-[slot=frame]:my-4 mt-4 text-muted-foreground text-sm",
3106
+ className
3107
+ ),
3108
+ "data-slot": "table-caption",
3109
+ ...props
3110
+ }
3111
+ );
3112
+ }
3113
+
3114
+ // src/components/tabs.tsx
3115
+ import * as React31 from "react";
3116
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
3117
+ import { jsx as jsx38 } from "react/jsx-runtime";
3118
+ var Tabs = TabsPrimitive.Root;
3119
+ var TabsList = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx38(
3120
+ TabsPrimitive.List,
3121
+ {
3122
+ ref,
3123
+ className: cn(
3124
+ "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
3125
+ className
3126
+ ),
3127
+ ...props
3128
+ }
3129
+ ));
3130
+ TabsList.displayName = TabsPrimitive.List.displayName;
3131
+ var TabsTrigger = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx38(
3132
+ TabsPrimitive.Trigger,
3133
+ {
3134
+ ref,
3135
+ className: cn(
3136
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-[11px] font-medium ring-offset-background transition-all focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-xs",
3137
+ className
3138
+ ),
3139
+ ...props
3140
+ }
3141
+ ));
3142
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
3143
+ var TabsContent = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx38(
3144
+ TabsPrimitive.Content,
3145
+ {
3146
+ ref,
3147
+ className: cn(
3148
+ "mt-2 ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
3149
+ className
3150
+ ),
3151
+ ...props
3152
+ }
3153
+ ));
3154
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
3155
+
3156
+ // src/components/tags-input.tsx
3157
+ import { TagInput } from "emblor";
3158
+ import { useId as useId3, useState as useState4 } from "react";
3159
+ import { jsx as jsx39 } from "react/jsx-runtime";
3160
+
3161
+ // src/components/textarea.tsx
3162
+ import * as React32 from "react";
3163
+ import { jsx as jsx40 } from "react/jsx-runtime";
3164
+ var Textarea = React32.forwardRef(
3165
+ ({ className, ...props }, ref) => {
3166
+ return /* @__PURE__ */ jsx40(
3167
+ "textarea",
3168
+ {
3169
+ className: cn(
3170
+ "flex min-h-20 w-full rounded-10 border border-input bg-background p-3 text-sm font-normal ring-offset-background placeholder:text-muted-foreground/30 focus-visible:border-primary focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring/30 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50",
3171
+ className
3172
+ ),
3173
+ ref,
3174
+ ...props
3175
+ }
3176
+ );
3177
+ }
3178
+ );
3179
+ Textarea.displayName = "Textarea";
3180
+
3181
+ // src/components/timeline.tsx
3182
+ import * as React33 from "react";
3183
+ import { jsx as jsx41 } from "react/jsx-runtime";
3184
+ var TimelineContext = React33.createContext(null);
3185
+ function useTimeline() {
3186
+ const context = React33.useContext(TimelineContext);
3187
+ if (!context) {
3188
+ throw new Error("useTimeline must be used within a <Timeline />.");
3189
+ }
3190
+ return context;
3191
+ }
3192
+ var Timeline = React33.forwardRef(
3193
+ ({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx41(TimelineContext.Provider, { value: { orientation }, children: /* @__PURE__ */ jsx41(
3194
+ "ol",
3195
+ {
3196
+ ref,
3197
+ role: "list",
3198
+ "data-orientation": orientation,
3199
+ className: cn(
3200
+ "flex",
3201
+ orientation === "vertical" && "flex-col",
3202
+ className
3203
+ ),
3204
+ ...props
3205
+ }
3206
+ ) })
3207
+ );
3208
+ Timeline.displayName = "Timeline";
3209
+ var TimelineItem = React33.forwardRef(({ className, ...props }, ref) => {
3210
+ const { orientation } = useTimeline();
3211
+ return /* @__PURE__ */ jsx41(
3212
+ "li",
3213
+ {
3214
+ ref,
3215
+ "data-orientation": orientation,
3216
+ className: cn(
3217
+ "flex gap-4",
3218
+ orientation === "horizontal" && "flex-col",
3219
+ className
3220
+ ),
3221
+ ...props
3222
+ }
3223
+ );
3224
+ });
3225
+ TimelineItem.displayName = "TimelineItem";
3226
+ var TimelineSeparator = React33.forwardRef(({ className, ...props }, ref) => {
3227
+ const { orientation } = useTimeline();
3228
+ return /* @__PURE__ */ jsx41(
3229
+ "div",
3230
+ {
3231
+ ref,
3232
+ "data-orientation": orientation,
3233
+ className: cn(
3234
+ "flex items-center",
3235
+ orientation === "vertical" && "flex-col",
3236
+ className
3237
+ ),
3238
+ ...props
3239
+ }
3240
+ );
3241
+ });
3242
+ TimelineSeparator.displayName = "TimelineSeparator";
3243
+ var TimelineDot = React33.forwardRef(({ variant = "default", className, ...props }, ref) => {
3244
+ const { orientation } = useTimeline();
3245
+ return /* @__PURE__ */ jsx41(
3246
+ "div",
3247
+ {
3248
+ ref,
3249
+ "data-orientation": orientation,
3250
+ className: cn(
3251
+ "flex size-4 items-center justify-center empty:after:block empty:after:rounded-full empty:after:outline-current [&_svg]:size-4",
3252
+ orientation === "vertical" && "mt-1",
3253
+ variant === "default" && "empty:after:size-2.5 empty:after:bg-current",
3254
+ variant === "outline-solid" && "empty:after:size-2 empty:after:outline-solid",
3255
+ className
3256
+ ),
3257
+ ...props
3258
+ }
3259
+ );
3260
+ });
3261
+ TimelineDot.displayName = "TimelineDot";
3262
+ var TimelineConnector = React33.forwardRef(({ className, ...props }, ref) => {
3263
+ const { orientation } = useTimeline();
3264
+ return /* @__PURE__ */ jsx41(
3265
+ "div",
3266
+ {
3267
+ ref,
3268
+ "data-orientation": orientation,
3269
+ className: cn(
3270
+ "flex-1 bg-border",
3271
+ orientation === "vertical" && "my-2 w-0.5",
3272
+ orientation === "horizontal" && "mx-2 h-0.5",
3273
+ className
3274
+ ),
3275
+ ...props
3276
+ }
3277
+ );
3278
+ });
3279
+ TimelineConnector.displayName = "TimelineConnector";
3280
+ var TimelineContent = React33.forwardRef(({ className, ...props }, ref) => {
3281
+ const { orientation } = useTimeline();
3282
+ return /* @__PURE__ */ jsx41(
3283
+ "div",
3284
+ {
3285
+ ref,
3286
+ "data-orientation": orientation,
3287
+ className: cn(
3288
+ "flex-1",
3289
+ orientation === "vertical" && "pb-8 first:text-right last:text-left",
3290
+ orientation === "horizontal" && "pr-8",
3291
+ className
3292
+ ),
3293
+ ...props
3294
+ }
3295
+ );
3296
+ });
3297
+ TimelineContent.displayName = "TimelineContent";
3298
+ var TimelineTitle = React33.forwardRef((props, ref) => {
3299
+ const { orientation } = useTimeline();
3300
+ return /* @__PURE__ */ jsx41("div", { ref, "data-orientation": orientation, ...props });
3301
+ });
3302
+ TimelineTitle.displayName = "TimelineTitle";
3303
+ var TimelineDescription = React33.forwardRef(({ className, ...props }, ref) => {
3304
+ const { orientation } = useTimeline();
3305
+ return /* @__PURE__ */ jsx41(
3306
+ "div",
3307
+ {
3308
+ ref,
3309
+ "data-orientation": orientation,
3310
+ className: cn("text-sm text-muted-foreground", className),
3311
+ ...props
3312
+ }
3313
+ );
3314
+ });
3315
+ TimelineDescription.displayName = "TimelineDescription";
3316
+
3317
+ // src/components/tooltip.tsx
3318
+ import * as React34 from "react";
3319
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
3320
+ import { jsx as jsx42 } from "react/jsx-runtime";
3321
+ var TooltipProvider = TooltipPrimitive.Provider;
3322
+ var Tooltip = TooltipPrimitive.Root;
3323
+ var TooltipTrigger = TooltipPrimitive.Trigger;
3324
+ var TooltipContent = React34.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx42(
3325
+ TooltipPrimitive.Content,
3326
+ {
3327
+ ref,
3328
+ sideOffset,
3329
+ className: cn(
3330
+ "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md 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",
3331
+ className
3332
+ ),
3333
+ ...props
3334
+ }
3335
+ ));
3336
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
3337
+ export {
3338
+ Accordion,
3339
+ AccordionContent,
3340
+ AccordionItem,
3341
+ AccordionTrigger,
3342
+ AlertDialog,
3343
+ AlertDialogBackdrop,
3344
+ AlertDialogClose,
3345
+ AlertDialogPopup as AlertDialogContent,
3346
+ AlertDialogDescription,
3347
+ AlertDialogFooter,
3348
+ AlertDialogHeader,
3349
+ AlertDialogBackdrop as AlertDialogOverlay,
3350
+ AlertDialogPopup,
3351
+ AlertDialogPortal,
3352
+ AlertDialogTitle,
3353
+ AlertDialogTrigger,
3354
+ Avatar,
3355
+ AvatarFallback,
3356
+ AvatarImage,
3357
+ Badge,
3358
+ Breadcrumb,
3359
+ BreadcrumbEllipsis,
3360
+ BreadcrumbItem,
3361
+ BreadcrumbLink,
3362
+ BreadcrumbList,
3363
+ BreadcrumbPage,
3364
+ BreadcrumbSeparator,
3365
+ Button,
3366
+ Card,
3367
+ CardContent,
3368
+ CardDescription,
3369
+ CardFooter,
3370
+ CardHeader,
3371
+ CardTitle,
3372
+ Checkbox,
3373
+ Combobox2 as Combobox,
3374
+ ComboboxChip,
3375
+ ComboboxChips,
3376
+ ComboboxClear,
3377
+ ComboboxCollection,
3378
+ ComboboxEmpty,
3379
+ ComboboxGroup,
3380
+ ComboboxGroupLabel,
3381
+ ComboboxInput,
3382
+ ComboboxItem,
3383
+ ComboboxList,
3384
+ Combobox as ComboboxMulti,
3385
+ ComboboxPopup,
3386
+ ComboboxRow,
3387
+ ComboboxSeparator,
3388
+ ComboboxStatus,
3389
+ ComboboxTrigger,
3390
+ ComboboxValue,
3391
+ Command,
3392
+ CommandDialog,
3393
+ CommandEmpty,
3394
+ CommandGroup,
3395
+ CommandInput,
3396
+ CommandItem,
3397
+ CommandList,
3398
+ CommandSeparator,
3399
+ CommandShortcut,
3400
+ ConfirmDialog,
3401
+ CopyButton,
3402
+ CountryPicker,
3403
+ Dialog,
3404
+ DialogBackdrop,
3405
+ DialogClose,
3406
+ DialogPopup as DialogContent,
3407
+ DialogDescription,
3408
+ DialogFooter,
3409
+ DialogHeader,
3410
+ DialogBackdrop as DialogOverlay,
3411
+ DialogPopup,
3412
+ DialogPortal,
3413
+ DialogTitle,
3414
+ DialogTrigger,
3415
+ Drawer,
3416
+ DrawerClose,
3417
+ DrawerContent,
3418
+ DrawerDescription,
3419
+ DrawerFooter,
3420
+ DrawerHeader,
3421
+ DrawerOverlay,
3422
+ DrawerPortal,
3423
+ DrawerTitle,
3424
+ DrawerTrigger,
3425
+ DropdownMenu,
3426
+ DropdownMenuCheckboxItem,
3427
+ DropdownMenuContent,
3428
+ DropdownMenuGroup,
3429
+ DropdownMenuItem,
3430
+ DropdownMenuLabel,
3431
+ DropdownMenuPortal,
3432
+ DropdownMenuRadioGroup,
3433
+ DropdownMenuRadioItem,
3434
+ DropdownMenuSeparator,
3435
+ DropdownMenuShortcut,
3436
+ DropdownMenuSub,
3437
+ DropdownMenuSubContent,
3438
+ DropdownMenuSubTrigger,
3439
+ DropdownMenuTrigger,
3440
+ ButtonRoot as FancyButton,
3441
+ Field,
3442
+ FieldControl,
3443
+ FieldDescription,
3444
+ FieldError,
3445
+ FieldLabel,
3446
+ FieldValidity,
3447
+ Form,
3448
+ FormControl,
3449
+ FormDescription,
3450
+ FormField,
3451
+ FormItem,
3452
+ FormLabel,
3453
+ FormMessage,
3454
+ ButtonIcon as Icon,
3455
+ Input,
3456
+ InputOTP,
3457
+ InputOTPGroup,
3458
+ InputOTPSeparator,
3459
+ InputOTPSlot,
3460
+ Label2 as Label,
3461
+ MultiSelect,
3462
+ Popover,
3463
+ PopoverContent,
3464
+ PopoverTrigger,
3465
+ Progress,
3466
+ ButtonRoot as Root,
3467
+ ScrollArea,
3468
+ ScrollBar,
3469
+ Select,
3470
+ SelectContent,
3471
+ SelectGroup,
3472
+ SelectItem,
3473
+ SelectLabel,
3474
+ SelectScrollDownButton,
3475
+ SelectScrollUpButton,
3476
+ SelectSeparator,
3477
+ SelectTrigger,
3478
+ SelectValue,
3479
+ Separator3 as Separator,
3480
+ Sheet,
3481
+ SheetClose,
3482
+ SheetContent,
3483
+ SheetDescription,
3484
+ SheetFooter,
3485
+ SheetHeader,
3486
+ SheetOverlay,
3487
+ SheetPortal,
3488
+ SheetTitle,
3489
+ SheetTrigger,
3490
+ Skeleton,
3491
+ StatusIndicator,
3492
+ Switch,
3493
+ Table,
3494
+ TableBody,
3495
+ TableCaption,
3496
+ TableCell,
3497
+ TableFooter,
3498
+ TableHead,
3499
+ TableHeader,
3500
+ TableRow,
3501
+ Tabs,
3502
+ TabsContent,
3503
+ TabsList,
3504
+ TabsTrigger,
3505
+ Textarea,
3506
+ Timeline,
3507
+ TimelineConnector,
3508
+ TimelineContent,
3509
+ TimelineDescription,
3510
+ TimelineDot,
3511
+ TimelineItem,
3512
+ TimelineSeparator,
3513
+ TimelineTitle,
3514
+ Tooltip,
3515
+ TooltipContent,
3516
+ TooltipProvider,
3517
+ TooltipTrigger,
3518
+ badgeVariants,
3519
+ buttonVariants,
3520
+ cn,
3521
+ statusIndicatorVariants,
3522
+ tv,
3523
+ useComboboxFilter,
3524
+ useFormField
3525
+ };