pxengine 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +175 -0
  2. package/config/tailwind-preset.js +106 -0
  3. package/dist/index.d.mts +1259 -0
  4. package/dist/index.d.ts +1259 -0
  5. package/dist/index.js +5175 -0
  6. package/dist/index.mjs +4929 -0
  7. package/package.json +94 -0
  8. package/src/atoms/AccordionAtom.tsx +44 -0
  9. package/src/atoms/AlertAtom.tsx +46 -0
  10. package/src/atoms/AlertDialogAtom.tsx +66 -0
  11. package/src/atoms/AspectRatioAtom.tsx +27 -0
  12. package/src/atoms/AvatarAtom.tsx +20 -0
  13. package/src/atoms/BadgeAtom.tsx +25 -0
  14. package/src/atoms/BreadcrumbAtom.tsx +36 -0
  15. package/src/atoms/ButtonAtom.tsx +63 -0
  16. package/src/atoms/CalendarAtom.tsx +24 -0
  17. package/src/atoms/CardAtom.tsx +64 -0
  18. package/src/atoms/CarouselAtom.tsx +40 -0
  19. package/src/atoms/CollapsibleAtom.tsx +44 -0
  20. package/src/atoms/CommandAtom.tsx +46 -0
  21. package/src/atoms/DialogAtom.tsx +68 -0
  22. package/src/atoms/InputAtom.tsx +162 -0
  23. package/src/atoms/LayoutAtom.tsx +43 -0
  24. package/src/atoms/PaginationAtom.tsx +49 -0
  25. package/src/atoms/PopoverAtom.tsx +40 -0
  26. package/src/atoms/ProgressAtom.tsx +15 -0
  27. package/src/atoms/ScrollAreaAtom.tsx +31 -0
  28. package/src/atoms/SeparatorAtom.tsx +16 -0
  29. package/src/atoms/SheetAtom.tsx +72 -0
  30. package/src/atoms/SkeletonAtom.tsx +22 -0
  31. package/src/atoms/SpinnerAtom.tsx +26 -0
  32. package/src/atoms/TableAtom.tsx +58 -0
  33. package/src/atoms/TabsAtom.tsx +40 -0
  34. package/src/atoms/TextAtom.tsx +35 -0
  35. package/src/atoms/TooltipAtom.tsx +39 -0
  36. package/src/atoms/index.ts +28 -0
  37. package/src/components/index.ts +178 -0
  38. package/src/components/ui/accordion.tsx +56 -0
  39. package/src/components/ui/alert-dialog.tsx +139 -0
  40. package/src/components/ui/alert.tsx +59 -0
  41. package/src/components/ui/aspect-ratio.tsx +5 -0
  42. package/src/components/ui/avatar.tsx +50 -0
  43. package/src/components/ui/badge.tsx +36 -0
  44. package/src/components/ui/breadcrumb.tsx +115 -0
  45. package/src/components/ui/button-group.tsx +83 -0
  46. package/src/components/ui/button.tsx +56 -0
  47. package/src/components/ui/calendar.tsx +213 -0
  48. package/src/components/ui/card.tsx +79 -0
  49. package/src/components/ui/carousel.tsx +260 -0
  50. package/src/components/ui/chart.tsx +367 -0
  51. package/src/components/ui/checkbox.tsx +28 -0
  52. package/src/components/ui/collapsible.tsx +11 -0
  53. package/src/components/ui/command.tsx +153 -0
  54. package/src/components/ui/context-menu.tsx +198 -0
  55. package/src/components/ui/dialog.tsx +122 -0
  56. package/src/components/ui/drawer.tsx +116 -0
  57. package/src/components/ui/dropdown-menu.tsx +200 -0
  58. package/src/components/ui/empty.tsx +104 -0
  59. package/src/components/ui/field.tsx +244 -0
  60. package/src/components/ui/form.tsx +176 -0
  61. package/src/components/ui/hover-card.tsx +27 -0
  62. package/src/components/ui/input-group.tsx +168 -0
  63. package/src/components/ui/input-otp.tsx +69 -0
  64. package/src/components/ui/input.tsx +22 -0
  65. package/src/components/ui/item.tsx +193 -0
  66. package/src/components/ui/kbd.tsx +28 -0
  67. package/src/components/ui/label.tsx +26 -0
  68. package/src/components/ui/menubar.tsx +254 -0
  69. package/src/components/ui/navigation-menu.tsx +128 -0
  70. package/src/components/ui/pagination.tsx +117 -0
  71. package/src/components/ui/popover.tsx +29 -0
  72. package/src/components/ui/progress.tsx +28 -0
  73. package/src/components/ui/radio-group.tsx +42 -0
  74. package/src/components/ui/resizable.tsx +45 -0
  75. package/src/components/ui/scroll-area.tsx +46 -0
  76. package/src/components/ui/select.tsx +160 -0
  77. package/src/components/ui/separator.tsx +29 -0
  78. package/src/components/ui/sheet.tsx +140 -0
  79. package/src/components/ui/sidebar.tsx +771 -0
  80. package/src/components/ui/skeleton.tsx +15 -0
  81. package/src/components/ui/slider.tsx +26 -0
  82. package/src/components/ui/sonner.tsx +45 -0
  83. package/src/components/ui/spinner.tsx +16 -0
  84. package/src/components/ui/switch.tsx +27 -0
  85. package/src/components/ui/table.tsx +117 -0
  86. package/src/components/ui/tabs.tsx +53 -0
  87. package/src/components/ui/textarea.tsx +22 -0
  88. package/src/components/ui/toggle-group.tsx +61 -0
  89. package/src/components/ui/toggle.tsx +43 -0
  90. package/src/components/ui/tooltip.tsx +30 -0
  91. package/src/hooks/use-mobile.tsx +19 -0
  92. package/src/index.ts +24 -0
  93. package/src/lib/countries.ts +203 -0
  94. package/src/lib/index.ts +2 -0
  95. package/src/lib/utils.ts +15 -0
  96. package/src/lib/validators/index.ts +1 -0
  97. package/src/lib/validators/theme.ts +148 -0
  98. package/src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.tsx +123 -0
  99. package/src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.types.ts +13 -0
  100. package/src/molecules/creator-discovery/CampaignSeedCard/index.ts +2 -0
  101. package/src/molecules/creator-discovery/MCQCard/MCQCard.tsx +165 -0
  102. package/src/molecules/creator-discovery/MCQCard/MCQCard.types.ts +71 -0
  103. package/src/molecules/creator-discovery/MCQCard/index.ts +2 -0
  104. package/src/molecules/creator-discovery/SearchSpecCard/CustomFieldRenderers.tsx +334 -0
  105. package/src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.tsx +111 -0
  106. package/src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.types.ts +18 -0
  107. package/src/molecules/creator-discovery/SearchSpecCard/index.ts +3 -0
  108. package/src/molecules/creator-discovery/index.ts +3 -0
  109. package/src/molecules/generic/ActionButton/ActionButton.tsx +137 -0
  110. package/src/molecules/generic/ActionButton/ActionButton.types.ts +68 -0
  111. package/src/molecules/generic/ActionButton/index.ts +2 -0
  112. package/src/molecules/generic/EditableField/EditableField.tsx +229 -0
  113. package/src/molecules/generic/EditableField/EditableField.types.ts +73 -0
  114. package/src/molecules/generic/EditableField/index.ts +2 -0
  115. package/src/molecules/generic/FormCard/FormCard.tsx +136 -0
  116. package/src/molecules/generic/FormCard/FormCard.types.ts +93 -0
  117. package/src/molecules/generic/FormCard/index.ts +2 -0
  118. package/src/molecules/generic/index.ts +3 -0
  119. package/src/molecules/index.ts +2 -0
  120. package/src/render/PXEngineRenderer.tsx +272 -0
  121. package/src/render/index.ts +1 -0
  122. package/src/styles/globals.css +146 -0
  123. package/src/types/atoms.ts +294 -0
  124. package/src/types/common.ts +116 -0
  125. package/src/types/index.ts +3 -0
  126. package/src/types/molecules.ts +54 -0
  127. package/src/types/schema.ts +12 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,4929 @@
1
+ // src/components/ui/button.tsx
2
+ import * as React from "react";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { cva } from "class-variance-authority";
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/ui/button.tsx
14
+ import { jsx } from "react/jsx-runtime";
15
+ var buttonVariants = cva(
16
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
17
+ {
18
+ variants: {
19
+ variant: {
20
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
21
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
22
+ outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
23
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
24
+ ghost: "hover:bg-accent hover:text-accent-foreground",
25
+ link: "text-primary underline-offset-4 hover:underline"
26
+ },
27
+ size: {
28
+ default: "h-10 px-4 py-2",
29
+ sm: "h-9 rounded-md px-3",
30
+ lg: "h-11 rounded-md px-8",
31
+ icon: "h-10 w-10"
32
+ }
33
+ },
34
+ defaultVariants: {
35
+ variant: "default",
36
+ size: "default"
37
+ }
38
+ }
39
+ );
40
+ var Button = React.forwardRef(
41
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
42
+ const Comp = asChild ? Slot : "button";
43
+ return /* @__PURE__ */ jsx(
44
+ Comp,
45
+ {
46
+ className: cn(buttonVariants({ variant, size, className })),
47
+ ref,
48
+ ...props
49
+ }
50
+ );
51
+ }
52
+ );
53
+ Button.displayName = "Button";
54
+
55
+ // src/components/ui/input.tsx
56
+ import * as React2 from "react";
57
+ import { jsx as jsx2 } from "react/jsx-runtime";
58
+ var Input = React2.forwardRef(
59
+ ({ className, type, ...props }, ref) => {
60
+ return /* @__PURE__ */ jsx2(
61
+ "input",
62
+ {
63
+ type,
64
+ className: cn(
65
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
66
+ className
67
+ ),
68
+ ref,
69
+ ...props
70
+ }
71
+ );
72
+ }
73
+ );
74
+ Input.displayName = "Input";
75
+
76
+ // src/components/ui/label.tsx
77
+ import * as React3 from "react";
78
+ import * as LabelPrimitive from "@radix-ui/react-label";
79
+ import { cva as cva2 } from "class-variance-authority";
80
+ import { jsx as jsx3 } from "react/jsx-runtime";
81
+ var labelVariants = cva2(
82
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
83
+ );
84
+ var Label = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
85
+ LabelPrimitive.Root,
86
+ {
87
+ ref,
88
+ className: cn(labelVariants(), className),
89
+ ...props
90
+ }
91
+ ));
92
+ Label.displayName = LabelPrimitive.Root.displayName;
93
+
94
+ // src/components/ui/checkbox.tsx
95
+ import * as React4 from "react";
96
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
97
+ import { Check } from "lucide-react";
98
+ import { jsx as jsx4 } from "react/jsx-runtime";
99
+ var Checkbox = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
100
+ CheckboxPrimitive.Root,
101
+ {
102
+ ref,
103
+ className: cn(
104
+ "grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none 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",
105
+ className
106
+ ),
107
+ ...props,
108
+ children: /* @__PURE__ */ jsx4(
109
+ CheckboxPrimitive.Indicator,
110
+ {
111
+ className: cn("grid place-content-center text-current"),
112
+ children: /* @__PURE__ */ jsx4(Check, { className: "h-4 w-4" })
113
+ }
114
+ )
115
+ }
116
+ ));
117
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
118
+
119
+ // src/components/ui/radio-group.tsx
120
+ import * as React5 from "react";
121
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
122
+ import { Circle } from "lucide-react";
123
+ import { jsx as jsx5 } from "react/jsx-runtime";
124
+ var RadioGroup = React5.forwardRef(({ className, ...props }, ref) => {
125
+ return /* @__PURE__ */ jsx5(
126
+ RadioGroupPrimitive.Root,
127
+ {
128
+ className: cn("grid gap-2", className),
129
+ ...props,
130
+ ref
131
+ }
132
+ );
133
+ });
134
+ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
135
+ var RadioGroupItem = React5.forwardRef(({ className, ...props }, ref) => {
136
+ return /* @__PURE__ */ jsx5(
137
+ RadioGroupPrimitive.Item,
138
+ {
139
+ ref,
140
+ className: cn(
141
+ "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
142
+ className
143
+ ),
144
+ ...props,
145
+ children: /* @__PURE__ */ jsx5(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx5(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
146
+ }
147
+ );
148
+ });
149
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
150
+
151
+ // src/components/ui/switch.tsx
152
+ import * as React6 from "react";
153
+ import * as SwitchPrimitives from "@radix-ui/react-switch";
154
+ import { jsx as jsx6 } from "react/jsx-runtime";
155
+ var Switch = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
156
+ SwitchPrimitives.Root,
157
+ {
158
+ className: cn(
159
+ "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
160
+ className
161
+ ),
162
+ ...props,
163
+ ref,
164
+ children: /* @__PURE__ */ jsx6(
165
+ SwitchPrimitives.Thumb,
166
+ {
167
+ className: cn(
168
+ "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
169
+ )
170
+ }
171
+ )
172
+ }
173
+ ));
174
+ Switch.displayName = SwitchPrimitives.Root.displayName;
175
+
176
+ // src/components/ui/slider.tsx
177
+ import * as React7 from "react";
178
+ import * as SliderPrimitive from "@radix-ui/react-slider";
179
+ import { jsx as jsx7, jsxs } from "react/jsx-runtime";
180
+ var Slider = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
181
+ SliderPrimitive.Root,
182
+ {
183
+ ref,
184
+ className: cn(
185
+ "relative flex w-full touch-none select-none items-center",
186
+ className
187
+ ),
188
+ ...props,
189
+ children: [
190
+ /* @__PURE__ */ jsx7(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx7(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
191
+ /* @__PURE__ */ jsx7(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })
192
+ ]
193
+ }
194
+ ));
195
+ Slider.displayName = SliderPrimitive.Root.displayName;
196
+
197
+ // src/components/ui/textarea.tsx
198
+ import * as React8 from "react";
199
+ import { jsx as jsx8 } from "react/jsx-runtime";
200
+ var Textarea = React8.forwardRef(({ className, ...props }, ref) => {
201
+ return /* @__PURE__ */ jsx8(
202
+ "textarea",
203
+ {
204
+ className: cn(
205
+ "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
206
+ className
207
+ ),
208
+ ref,
209
+ ...props
210
+ }
211
+ );
212
+ });
213
+ Textarea.displayName = "Textarea";
214
+
215
+ // src/components/ui/select.tsx
216
+ import * as React9 from "react";
217
+ import * as SelectPrimitive from "@radix-ui/react-select";
218
+ import { Check as Check2, ChevronDown, ChevronUp } from "lucide-react";
219
+ import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
220
+ var Select = SelectPrimitive.Root;
221
+ var SelectGroup = SelectPrimitive.Group;
222
+ var SelectValue = SelectPrimitive.Value;
223
+ var SelectTrigger = React9.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs2(
224
+ SelectPrimitive.Trigger,
225
+ {
226
+ ref,
227
+ className: cn(
228
+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
229
+ className
230
+ ),
231
+ ...props,
232
+ children: [
233
+ children,
234
+ /* @__PURE__ */ jsx9(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx9(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
235
+ ]
236
+ }
237
+ ));
238
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
239
+ var SelectScrollUpButton = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
240
+ SelectPrimitive.ScrollUpButton,
241
+ {
242
+ ref,
243
+ className: cn(
244
+ "flex cursor-default items-center justify-center py-1",
245
+ className
246
+ ),
247
+ ...props,
248
+ children: /* @__PURE__ */ jsx9(ChevronUp, { className: "h-4 w-4" })
249
+ }
250
+ ));
251
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
252
+ var SelectScrollDownButton = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
253
+ SelectPrimitive.ScrollDownButton,
254
+ {
255
+ ref,
256
+ className: cn(
257
+ "flex cursor-default items-center justify-center py-1",
258
+ className
259
+ ),
260
+ ...props,
261
+ children: /* @__PURE__ */ jsx9(ChevronDown, { className: "h-4 w-4" })
262
+ }
263
+ ));
264
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
265
+ var SelectContent = React9.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx9(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs2(
266
+ SelectPrimitive.Content,
267
+ {
268
+ ref,
269
+ className: cn(
270
+ "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-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 origin-[--radix-select-content-transform-origin]",
271
+ 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",
272
+ className
273
+ ),
274
+ position,
275
+ ...props,
276
+ children: [
277
+ /* @__PURE__ */ jsx9(SelectScrollUpButton, {}),
278
+ /* @__PURE__ */ jsx9(
279
+ SelectPrimitive.Viewport,
280
+ {
281
+ className: cn(
282
+ "p-1",
283
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
284
+ ),
285
+ children
286
+ }
287
+ ),
288
+ /* @__PURE__ */ jsx9(SelectScrollDownButton, {})
289
+ ]
290
+ }
291
+ ) }));
292
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
293
+ var SelectLabel = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
294
+ SelectPrimitive.Label,
295
+ {
296
+ ref,
297
+ className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
298
+ ...props
299
+ }
300
+ ));
301
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
302
+ var SelectItem = React9.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs2(
303
+ SelectPrimitive.Item,
304
+ {
305
+ ref,
306
+ className: cn(
307
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
308
+ className
309
+ ),
310
+ ...props,
311
+ children: [
312
+ /* @__PURE__ */ jsx9("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx9(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx9(Check2, { className: "h-4 w-4" }) }) }),
313
+ /* @__PURE__ */ jsx9(SelectPrimitive.ItemText, { children })
314
+ ]
315
+ }
316
+ ));
317
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
318
+ var SelectSeparator = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
319
+ SelectPrimitive.Separator,
320
+ {
321
+ ref,
322
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
323
+ ...props
324
+ }
325
+ ));
326
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
327
+
328
+ // src/components/ui/input-otp.tsx
329
+ import * as React10 from "react";
330
+ import { OTPInput, OTPInputContext } from "input-otp";
331
+ import { Dot } from "lucide-react";
332
+ import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
333
+ var InputOTP = React10.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx10(
334
+ OTPInput,
335
+ {
336
+ ref,
337
+ containerClassName: cn(
338
+ "flex items-center gap-2 has-[:disabled]:opacity-50",
339
+ containerClassName
340
+ ),
341
+ className: cn("disabled:cursor-not-allowed", className),
342
+ ...props
343
+ }
344
+ ));
345
+ InputOTP.displayName = "InputOTP";
346
+ var InputOTPGroup = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10("div", { ref, className: cn("flex items-center", className), ...props }));
347
+ InputOTPGroup.displayName = "InputOTPGroup";
348
+ var InputOTPSlot = React10.forwardRef(({ index, className, ...props }, ref) => {
349
+ const inputOTPContext = React10.useContext(OTPInputContext);
350
+ const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
351
+ return /* @__PURE__ */ jsxs3(
352
+ "div",
353
+ {
354
+ ref,
355
+ className: cn(
356
+ "relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md",
357
+ isActive && "z-10 ring-2 ring-ring ring-offset-background",
358
+ className
359
+ ),
360
+ ...props,
361
+ children: [
362
+ char,
363
+ hasFakeCaret && /* @__PURE__ */ jsx10("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx10("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
364
+ ]
365
+ }
366
+ );
367
+ });
368
+ InputOTPSlot.displayName = "InputOTPSlot";
369
+ var InputOTPSeparator = React10.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx10("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ jsx10(Dot, {}) }));
370
+ InputOTPSeparator.displayName = "InputOTPSeparator";
371
+
372
+ // src/components/ui/form.tsx
373
+ import * as React11 from "react";
374
+ import { Slot as Slot2 } from "@radix-ui/react-slot";
375
+ import {
376
+ Controller,
377
+ FormProvider,
378
+ useFormContext
379
+ } from "react-hook-form";
380
+ import { jsx as jsx11 } from "react/jsx-runtime";
381
+ var Form = FormProvider;
382
+ var FormFieldContext = React11.createContext(null);
383
+ var FormField = ({
384
+ ...props
385
+ }) => {
386
+ return /* @__PURE__ */ jsx11(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx11(Controller, { ...props }) });
387
+ };
388
+ var useFormField = () => {
389
+ const fieldContext = React11.useContext(FormFieldContext);
390
+ const itemContext = React11.useContext(FormItemContext);
391
+ const { getFieldState, formState } = useFormContext();
392
+ if (!fieldContext) {
393
+ throw new Error("useFormField should be used within <FormField>");
394
+ }
395
+ if (!itemContext) {
396
+ throw new Error("useFormField should be used within <FormItem>");
397
+ }
398
+ const fieldState = getFieldState(fieldContext.name, formState);
399
+ const { id } = itemContext;
400
+ return {
401
+ id,
402
+ name: fieldContext.name,
403
+ formItemId: `${id}-form-item`,
404
+ formDescriptionId: `${id}-form-item-description`,
405
+ formMessageId: `${id}-form-item-message`,
406
+ ...fieldState
407
+ };
408
+ };
409
+ var FormItemContext = React11.createContext(null);
410
+ var FormItem = React11.forwardRef(({ className, ...props }, ref) => {
411
+ const id = React11.useId();
412
+ return /* @__PURE__ */ jsx11(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx11("div", { ref, className: cn("space-y-2", className), ...props }) });
413
+ });
414
+ FormItem.displayName = "FormItem";
415
+ var FormLabel = React11.forwardRef(({ className, ...props }, ref) => {
416
+ const { error, formItemId } = useFormField();
417
+ return /* @__PURE__ */ jsx11(
418
+ Label,
419
+ {
420
+ ref,
421
+ className: cn(error && "text-destructive", className),
422
+ htmlFor: formItemId,
423
+ ...props
424
+ }
425
+ );
426
+ });
427
+ FormLabel.displayName = "FormLabel";
428
+ var FormControl = React11.forwardRef(({ ...props }, ref) => {
429
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
430
+ return /* @__PURE__ */ jsx11(
431
+ Slot2,
432
+ {
433
+ ref,
434
+ id: formItemId,
435
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
436
+ "aria-invalid": !!error,
437
+ ...props
438
+ }
439
+ );
440
+ });
441
+ FormControl.displayName = "FormControl";
442
+ var FormDescription = React11.forwardRef(({ className, ...props }, ref) => {
443
+ const { formDescriptionId } = useFormField();
444
+ return /* @__PURE__ */ jsx11(
445
+ "p",
446
+ {
447
+ ref,
448
+ id: formDescriptionId,
449
+ className: cn("text-sm text-muted-foreground", className),
450
+ ...props
451
+ }
452
+ );
453
+ });
454
+ FormDescription.displayName = "FormDescription";
455
+ var FormMessage = React11.forwardRef(({ className, children, ...props }, ref) => {
456
+ const { error, formMessageId } = useFormField();
457
+ const body = error ? String(error?.message ?? "") : children;
458
+ if (!body) {
459
+ return null;
460
+ }
461
+ return /* @__PURE__ */ jsx11(
462
+ "p",
463
+ {
464
+ ref,
465
+ id: formMessageId,
466
+ className: cn("text-sm font-medium text-destructive", className),
467
+ ...props,
468
+ children: body
469
+ }
470
+ );
471
+ });
472
+ FormMessage.displayName = "FormMessage";
473
+
474
+ // src/components/ui/card.tsx
475
+ import * as React12 from "react";
476
+ import { jsx as jsx12 } from "react/jsx-runtime";
477
+ var Card = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12(
478
+ "div",
479
+ {
480
+ ref,
481
+ className: cn(
482
+ "rounded-lg border bg-card text-card-foreground shadow-sm",
483
+ className
484
+ ),
485
+ ...props
486
+ }
487
+ ));
488
+ Card.displayName = "Card";
489
+ var CardHeader = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12(
490
+ "div",
491
+ {
492
+ ref,
493
+ className: cn("flex flex-col space-y-1.5 p-6", className),
494
+ ...props
495
+ }
496
+ ));
497
+ CardHeader.displayName = "CardHeader";
498
+ var CardTitle = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12(
499
+ "div",
500
+ {
501
+ ref,
502
+ className: cn(
503
+ "text-2xl font-semibold leading-none tracking-tight",
504
+ className
505
+ ),
506
+ ...props
507
+ }
508
+ ));
509
+ CardTitle.displayName = "CardTitle";
510
+ var CardDescription = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12(
511
+ "div",
512
+ {
513
+ ref,
514
+ className: cn("text-sm text-muted-foreground", className),
515
+ ...props
516
+ }
517
+ ));
518
+ CardDescription.displayName = "CardDescription";
519
+ var CardContent = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12("div", { ref, className: cn("p-6 pt-0", className), ...props }));
520
+ CardContent.displayName = "CardContent";
521
+ var CardFooter = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12(
522
+ "div",
523
+ {
524
+ ref,
525
+ className: cn("flex items-center p-6 pt-0", className),
526
+ ...props
527
+ }
528
+ ));
529
+ CardFooter.displayName = "CardFooter";
530
+
531
+ // src/components/ui/separator.tsx
532
+ import * as React13 from "react";
533
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
534
+ import { jsx as jsx13 } from "react/jsx-runtime";
535
+ var Separator2 = React13.forwardRef(
536
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx13(
537
+ SeparatorPrimitive.Root,
538
+ {
539
+ ref,
540
+ decorative,
541
+ orientation,
542
+ className: cn(
543
+ "shrink-0 bg-border",
544
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
545
+ className
546
+ ),
547
+ ...props
548
+ }
549
+ )
550
+ );
551
+ Separator2.displayName = SeparatorPrimitive.Root.displayName;
552
+
553
+ // src/components/ui/scroll-area.tsx
554
+ import * as React14 from "react";
555
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
556
+ import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
557
+ var ScrollArea = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs4(
558
+ ScrollAreaPrimitive.Root,
559
+ {
560
+ ref,
561
+ className: cn("relative overflow-hidden", className),
562
+ ...props,
563
+ children: [
564
+ /* @__PURE__ */ jsx14(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
565
+ /* @__PURE__ */ jsx14(ScrollBar, {}),
566
+ /* @__PURE__ */ jsx14(ScrollAreaPrimitive.Corner, {})
567
+ ]
568
+ }
569
+ ));
570
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
571
+ var ScrollBar = React14.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx14(
572
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
573
+ {
574
+ ref,
575
+ orientation,
576
+ className: cn(
577
+ "flex touch-none select-none transition-colors",
578
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
579
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
580
+ className
581
+ ),
582
+ ...props,
583
+ children: /* @__PURE__ */ jsx14(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
584
+ }
585
+ ));
586
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
587
+
588
+ // src/components/ui/aspect-ratio.tsx
589
+ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
590
+ var AspectRatio = AspectRatioPrimitive.Root;
591
+
592
+ // src/components/ui/resizable.tsx
593
+ import { GripVertical } from "lucide-react";
594
+ import * as ResizablePrimitive from "react-resizable-panels";
595
+ import { jsx as jsx15 } from "react/jsx-runtime";
596
+ var ResizablePanelGroup = ({
597
+ className,
598
+ ...props
599
+ }) => /* @__PURE__ */ jsx15(
600
+ ResizablePrimitive.Group,
601
+ {
602
+ className: cn(
603
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
604
+ className
605
+ ),
606
+ ...props
607
+ }
608
+ );
609
+ var ResizablePanel = ResizablePrimitive.Panel;
610
+
611
+ // src/components/ui/tabs.tsx
612
+ import * as React15 from "react";
613
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
614
+ import { jsx as jsx16 } from "react/jsx-runtime";
615
+ var Tabs = TabsPrimitive.Root;
616
+ var TabsList = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
617
+ TabsPrimitive.List,
618
+ {
619
+ ref,
620
+ className: cn(
621
+ "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
622
+ className
623
+ ),
624
+ ...props
625
+ }
626
+ ));
627
+ TabsList.displayName = TabsPrimitive.List.displayName;
628
+ var TabsTrigger = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
629
+ TabsPrimitive.Trigger,
630
+ {
631
+ ref,
632
+ className: cn(
633
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none 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-sm",
634
+ className
635
+ ),
636
+ ...props
637
+ }
638
+ ));
639
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
640
+ var TabsContent = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
641
+ TabsPrimitive.Content,
642
+ {
643
+ ref,
644
+ className: cn(
645
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
646
+ className
647
+ ),
648
+ ...props
649
+ }
650
+ ));
651
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
652
+
653
+ // src/components/ui/accordion.tsx
654
+ import * as React16 from "react";
655
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
656
+ import { ChevronDown as ChevronDown2 } from "lucide-react";
657
+ import { jsx as jsx17, jsxs as jsxs5 } from "react/jsx-runtime";
658
+ var Accordion = AccordionPrimitive.Root;
659
+ var AccordionItem = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
660
+ AccordionPrimitive.Item,
661
+ {
662
+ ref,
663
+ className: cn("border-b", className),
664
+ ...props
665
+ }
666
+ ));
667
+ AccordionItem.displayName = "AccordionItem";
668
+ var AccordionTrigger = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx17(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs5(
669
+ AccordionPrimitive.Trigger,
670
+ {
671
+ ref,
672
+ className: cn(
673
+ "flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
674
+ className
675
+ ),
676
+ ...props,
677
+ children: [
678
+ children,
679
+ /* @__PURE__ */ jsx17(ChevronDown2, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
680
+ ]
681
+ }
682
+ ) }));
683
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
684
+ var AccordionContent = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx17(
685
+ AccordionPrimitive.Content,
686
+ {
687
+ ref,
688
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
689
+ ...props,
690
+ children: /* @__PURE__ */ jsx17("div", { className: cn("pb-4 pt-0", className), children })
691
+ }
692
+ ));
693
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
694
+
695
+ // src/components/ui/collapsible.tsx
696
+ import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
697
+ var Collapsible = CollapsiblePrimitive.Root;
698
+ var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
699
+ var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
700
+
701
+ // src/components/ui/dialog.tsx
702
+ import * as React17 from "react";
703
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
704
+ import { X } from "lucide-react";
705
+ import { jsx as jsx18, jsxs as jsxs6 } from "react/jsx-runtime";
706
+ var Dialog = DialogPrimitive.Root;
707
+ var DialogTrigger = DialogPrimitive.Trigger;
708
+ var DialogPortal = DialogPrimitive.Portal;
709
+ var DialogClose = DialogPrimitive.Close;
710
+ var DialogOverlay = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
711
+ DialogPrimitive.Overlay,
712
+ {
713
+ ref,
714
+ className: cn(
715
+ "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",
716
+ className
717
+ ),
718
+ ...props
719
+ }
720
+ ));
721
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
722
+ var DialogContent = React17.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs6(DialogPortal, { children: [
723
+ /* @__PURE__ */ jsx18(DialogOverlay, {}),
724
+ /* @__PURE__ */ jsxs6(
725
+ DialogPrimitive.Content,
726
+ {
727
+ ref,
728
+ className: cn(
729
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
730
+ className
731
+ ),
732
+ ...props,
733
+ children: [
734
+ children,
735
+ /* @__PURE__ */ jsxs6(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
736
+ /* @__PURE__ */ jsx18(X, { className: "h-4 w-4" }),
737
+ /* @__PURE__ */ jsx18("span", { className: "sr-only", children: "Close" })
738
+ ] })
739
+ ]
740
+ }
741
+ )
742
+ ] }));
743
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
744
+ var DialogHeader = ({
745
+ className,
746
+ ...props
747
+ }) => /* @__PURE__ */ jsx18(
748
+ "div",
749
+ {
750
+ className: cn(
751
+ "flex flex-col space-y-1.5 text-center sm:text-left",
752
+ className
753
+ ),
754
+ ...props
755
+ }
756
+ );
757
+ DialogHeader.displayName = "DialogHeader";
758
+ var DialogFooter = ({
759
+ className,
760
+ ...props
761
+ }) => /* @__PURE__ */ jsx18(
762
+ "div",
763
+ {
764
+ className: cn(
765
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
766
+ className
767
+ ),
768
+ ...props
769
+ }
770
+ );
771
+ DialogFooter.displayName = "DialogFooter";
772
+ var DialogTitle = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
773
+ DialogPrimitive.Title,
774
+ {
775
+ ref,
776
+ className: cn(
777
+ "text-lg font-semibold leading-none tracking-tight",
778
+ className
779
+ ),
780
+ ...props
781
+ }
782
+ ));
783
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
784
+ var DialogDescription = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
785
+ DialogPrimitive.Description,
786
+ {
787
+ ref,
788
+ className: cn("text-sm text-muted-foreground", className),
789
+ ...props
790
+ }
791
+ ));
792
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
793
+
794
+ // src/components/ui/sheet.tsx
795
+ import * as React18 from "react";
796
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
797
+ import { cva as cva3 } from "class-variance-authority";
798
+ import { X as X2 } from "lucide-react";
799
+ import { jsx as jsx19, jsxs as jsxs7 } from "react/jsx-runtime";
800
+ var Sheet = SheetPrimitive.Root;
801
+ var SheetTrigger = SheetPrimitive.Trigger;
802
+ var SheetClose = SheetPrimitive.Close;
803
+ var SheetPortal = SheetPrimitive.Portal;
804
+ var SheetOverlay = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
805
+ SheetPrimitive.Overlay,
806
+ {
807
+ className: cn(
808
+ "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",
809
+ className
810
+ ),
811
+ ...props,
812
+ ref
813
+ }
814
+ ));
815
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
816
+ var sheetVariants = cva3(
817
+ "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",
818
+ {
819
+ variants: {
820
+ side: {
821
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
822
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
823
+ 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",
824
+ 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"
825
+ }
826
+ },
827
+ defaultVariants: {
828
+ side: "right"
829
+ }
830
+ }
831
+ );
832
+ var SheetContent = React18.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs7(SheetPortal, { children: [
833
+ /* @__PURE__ */ jsx19(SheetOverlay, {}),
834
+ /* @__PURE__ */ jsxs7(
835
+ SheetPrimitive.Content,
836
+ {
837
+ ref,
838
+ className: cn(sheetVariants({ side }), className),
839
+ ...props,
840
+ children: [
841
+ children,
842
+ /* @__PURE__ */ jsxs7(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
843
+ /* @__PURE__ */ jsx19(X2, { className: "h-4 w-4" }),
844
+ /* @__PURE__ */ jsx19("span", { className: "sr-only", children: "Close" })
845
+ ] })
846
+ ]
847
+ }
848
+ )
849
+ ] }));
850
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
851
+ var SheetHeader = ({
852
+ className,
853
+ ...props
854
+ }) => /* @__PURE__ */ jsx19(
855
+ "div",
856
+ {
857
+ className: cn(
858
+ "flex flex-col space-y-2 text-center sm:text-left",
859
+ className
860
+ ),
861
+ ...props
862
+ }
863
+ );
864
+ SheetHeader.displayName = "SheetHeader";
865
+ var SheetFooter = ({
866
+ className,
867
+ ...props
868
+ }) => /* @__PURE__ */ jsx19(
869
+ "div",
870
+ {
871
+ className: cn(
872
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
873
+ className
874
+ ),
875
+ ...props
876
+ }
877
+ );
878
+ SheetFooter.displayName = "SheetFooter";
879
+ var SheetTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
880
+ SheetPrimitive.Title,
881
+ {
882
+ ref,
883
+ className: cn("text-lg font-semibold text-foreground", className),
884
+ ...props
885
+ }
886
+ ));
887
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
888
+ var SheetDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
889
+ SheetPrimitive.Description,
890
+ {
891
+ ref,
892
+ className: cn("text-sm text-muted-foreground", className),
893
+ ...props
894
+ }
895
+ ));
896
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
897
+
898
+ // src/components/ui/drawer.tsx
899
+ import * as React19 from "react";
900
+ import { Drawer as DrawerPrimitive } from "vaul";
901
+ import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
902
+ var Drawer = ({
903
+ shouldScaleBackground = true,
904
+ ...props
905
+ }) => /* @__PURE__ */ jsx20(
906
+ DrawerPrimitive.Root,
907
+ {
908
+ shouldScaleBackground,
909
+ ...props
910
+ }
911
+ );
912
+ Drawer.displayName = "Drawer";
913
+ var DrawerTrigger = DrawerPrimitive.Trigger;
914
+ var DrawerPortal = DrawerPrimitive.Portal;
915
+ var DrawerClose = DrawerPrimitive.Close;
916
+ var DrawerOverlay = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
917
+ DrawerPrimitive.Overlay,
918
+ {
919
+ ref,
920
+ className: cn("fixed inset-0 z-50 bg-black/80", className),
921
+ ...props
922
+ }
923
+ ));
924
+ DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;
925
+ var DrawerContent = React19.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs8(DrawerPortal, { children: [
926
+ /* @__PURE__ */ jsx20(DrawerOverlay, {}),
927
+ /* @__PURE__ */ jsxs8(
928
+ DrawerPrimitive.Content,
929
+ {
930
+ ref,
931
+ className: cn(
932
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",
933
+ className
934
+ ),
935
+ ...props,
936
+ children: [
937
+ /* @__PURE__ */ jsx20("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
938
+ children
939
+ ]
940
+ }
941
+ )
942
+ ] }));
943
+ DrawerContent.displayName = "DrawerContent";
944
+ var DrawerHeader = ({
945
+ className,
946
+ ...props
947
+ }) => /* @__PURE__ */ jsx20(
948
+ "div",
949
+ {
950
+ className: cn("grid gap-1.5 p-4 text-center sm:text-left", className),
951
+ ...props
952
+ }
953
+ );
954
+ DrawerHeader.displayName = "DrawerHeader";
955
+ var DrawerFooter = ({
956
+ className,
957
+ ...props
958
+ }) => /* @__PURE__ */ jsx20(
959
+ "div",
960
+ {
961
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
962
+ ...props
963
+ }
964
+ );
965
+ DrawerFooter.displayName = "DrawerFooter";
966
+ var DrawerTitle = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
967
+ DrawerPrimitive.Title,
968
+ {
969
+ ref,
970
+ className: cn(
971
+ "text-lg font-semibold leading-none tracking-tight",
972
+ className
973
+ ),
974
+ ...props
975
+ }
976
+ ));
977
+ DrawerTitle.displayName = DrawerPrimitive.Title.displayName;
978
+ var DrawerDescription = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
979
+ DrawerPrimitive.Description,
980
+ {
981
+ ref,
982
+ className: cn("text-sm text-muted-foreground", className),
983
+ ...props
984
+ }
985
+ ));
986
+ DrawerDescription.displayName = DrawerPrimitive.Description.displayName;
987
+
988
+ // src/components/ui/alert-dialog.tsx
989
+ import * as React20 from "react";
990
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
991
+ import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
992
+ var AlertDialog = AlertDialogPrimitive.Root;
993
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
994
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
995
+ var AlertDialogOverlay = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
996
+ AlertDialogPrimitive.Overlay,
997
+ {
998
+ className: cn(
999
+ "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",
1000
+ className
1001
+ ),
1002
+ ...props,
1003
+ ref
1004
+ }
1005
+ ));
1006
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
1007
+ var AlertDialogContent = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs9(AlertDialogPortal, { children: [
1008
+ /* @__PURE__ */ jsx21(AlertDialogOverlay, {}),
1009
+ /* @__PURE__ */ jsx21(
1010
+ AlertDialogPrimitive.Content,
1011
+ {
1012
+ ref,
1013
+ className: cn(
1014
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
1015
+ className
1016
+ ),
1017
+ ...props
1018
+ }
1019
+ )
1020
+ ] }));
1021
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
1022
+ var AlertDialogHeader = ({
1023
+ className,
1024
+ ...props
1025
+ }) => /* @__PURE__ */ jsx21(
1026
+ "div",
1027
+ {
1028
+ className: cn(
1029
+ "flex flex-col space-y-2 text-center sm:text-left",
1030
+ className
1031
+ ),
1032
+ ...props
1033
+ }
1034
+ );
1035
+ AlertDialogHeader.displayName = "AlertDialogHeader";
1036
+ var AlertDialogFooter = ({
1037
+ className,
1038
+ ...props
1039
+ }) => /* @__PURE__ */ jsx21(
1040
+ "div",
1041
+ {
1042
+ className: cn(
1043
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
1044
+ className
1045
+ ),
1046
+ ...props
1047
+ }
1048
+ );
1049
+ AlertDialogFooter.displayName = "AlertDialogFooter";
1050
+ var AlertDialogTitle = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
1051
+ AlertDialogPrimitive.Title,
1052
+ {
1053
+ ref,
1054
+ className: cn("text-lg font-semibold", className),
1055
+ ...props
1056
+ }
1057
+ ));
1058
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
1059
+ var AlertDialogDescription = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
1060
+ AlertDialogPrimitive.Description,
1061
+ {
1062
+ ref,
1063
+ className: cn("text-sm text-muted-foreground", className),
1064
+ ...props
1065
+ }
1066
+ ));
1067
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
1068
+ var AlertDialogAction = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
1069
+ AlertDialogPrimitive.Action,
1070
+ {
1071
+ ref,
1072
+ className: cn(buttonVariants(), className),
1073
+ ...props
1074
+ }
1075
+ ));
1076
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
1077
+ var AlertDialogCancel = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
1078
+ AlertDialogPrimitive.Cancel,
1079
+ {
1080
+ ref,
1081
+ className: cn(
1082
+ buttonVariants({ variant: "outline" }),
1083
+ "mt-2 sm:mt-0",
1084
+ className
1085
+ ),
1086
+ ...props
1087
+ }
1088
+ ));
1089
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
1090
+
1091
+ // src/components/ui/popover.tsx
1092
+ import * as React21 from "react";
1093
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
1094
+ import { jsx as jsx22 } from "react/jsx-runtime";
1095
+ var Popover = PopoverPrimitive.Root;
1096
+ var PopoverTrigger = PopoverPrimitive.Trigger;
1097
+ var PopoverContent = React21.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx22(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx22(
1098
+ PopoverPrimitive.Content,
1099
+ {
1100
+ ref,
1101
+ align,
1102
+ sideOffset,
1103
+ className: cn(
1104
+ "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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 origin-[--radix-popover-content-transform-origin]",
1105
+ className
1106
+ ),
1107
+ ...props
1108
+ }
1109
+ ) }));
1110
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1111
+
1112
+ // src/components/ui/hover-card.tsx
1113
+ import * as React22 from "react";
1114
+ import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
1115
+ import { jsx as jsx23 } from "react/jsx-runtime";
1116
+ var HoverCard = HoverCardPrimitive.Root;
1117
+ var HoverCardTrigger = HoverCardPrimitive.Trigger;
1118
+ var HoverCardContent = React22.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx23(
1119
+ HoverCardPrimitive.Content,
1120
+ {
1121
+ ref,
1122
+ align,
1123
+ sideOffset,
1124
+ className: cn(
1125
+ "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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 origin-[--radix-hover-card-content-transform-origin]",
1126
+ className
1127
+ ),
1128
+ ...props
1129
+ }
1130
+ ));
1131
+ HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
1132
+
1133
+ // src/components/ui/tooltip.tsx
1134
+ import * as React23 from "react";
1135
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
1136
+ import { jsx as jsx24 } from "react/jsx-runtime";
1137
+ var TooltipProvider = TooltipPrimitive.Provider;
1138
+ var Tooltip = TooltipPrimitive.Root;
1139
+ var TooltipTrigger = TooltipPrimitive.Trigger;
1140
+ var TooltipContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx24(
1141
+ TooltipPrimitive.Content,
1142
+ {
1143
+ ref,
1144
+ sideOffset,
1145
+ className: cn(
1146
+ "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 origin-[--radix-tooltip-content-transform-origin]",
1147
+ className
1148
+ ),
1149
+ ...props
1150
+ }
1151
+ ));
1152
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
1153
+
1154
+ // src/components/ui/dropdown-menu.tsx
1155
+ import * as React24 from "react";
1156
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
1157
+ import { Check as Check3, ChevronRight, Circle as Circle2 } from "lucide-react";
1158
+ import { jsx as jsx25, jsxs as jsxs10 } from "react/jsx-runtime";
1159
+ var DropdownMenu = DropdownMenuPrimitive.Root;
1160
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1161
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1162
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1163
+ var DropdownMenuSubTrigger = React24.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs10(
1164
+ DropdownMenuPrimitive.SubTrigger,
1165
+ {
1166
+ ref,
1167
+ className: cn(
1168
+ "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1169
+ inset && "pl-8",
1170
+ className
1171
+ ),
1172
+ ...props,
1173
+ children: [
1174
+ children,
1175
+ /* @__PURE__ */ jsx25(ChevronRight, { className: "ml-auto" })
1176
+ ]
1177
+ }
1178
+ ));
1179
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1180
+ var DropdownMenuSubContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx25(
1181
+ DropdownMenuPrimitive.SubContent,
1182
+ {
1183
+ ref,
1184
+ className: cn(
1185
+ "z-50 min-w-[8rem] 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 origin-[--radix-dropdown-menu-content-transform-origin]",
1186
+ className
1187
+ ),
1188
+ ...props
1189
+ }
1190
+ ));
1191
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1192
+ var DropdownMenuContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx25(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx25(
1193
+ DropdownMenuPrimitive.Content,
1194
+ {
1195
+ ref,
1196
+ sideOffset,
1197
+ className: cn(
1198
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md 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 origin-[--radix-dropdown-menu-content-transform-origin]",
1199
+ className
1200
+ ),
1201
+ ...props
1202
+ }
1203
+ ) }));
1204
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1205
+ var DropdownMenuItem = React24.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx25(
1206
+ DropdownMenuPrimitive.Item,
1207
+ {
1208
+ ref,
1209
+ className: cn(
1210
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1211
+ inset && "pl-8",
1212
+ className
1213
+ ),
1214
+ ...props
1215
+ }
1216
+ ));
1217
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1218
+ var DropdownMenuCheckboxItem = React24.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs10(
1219
+ DropdownMenuPrimitive.CheckboxItem,
1220
+ {
1221
+ ref,
1222
+ className: cn(
1223
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1224
+ className
1225
+ ),
1226
+ checked,
1227
+ ...props,
1228
+ children: [
1229
+ /* @__PURE__ */ jsx25("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx25(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx25(Check3, { className: "h-4 w-4" }) }) }),
1230
+ children
1231
+ ]
1232
+ }
1233
+ ));
1234
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1235
+ var DropdownMenuRadioItem = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs10(
1236
+ DropdownMenuPrimitive.RadioItem,
1237
+ {
1238
+ ref,
1239
+ className: cn(
1240
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1241
+ className
1242
+ ),
1243
+ ...props,
1244
+ children: [
1245
+ /* @__PURE__ */ jsx25("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx25(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx25(Circle2, { className: "h-2 w-2 fill-current" }) }) }),
1246
+ children
1247
+ ]
1248
+ }
1249
+ ));
1250
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1251
+ var DropdownMenuLabel = React24.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx25(
1252
+ DropdownMenuPrimitive.Label,
1253
+ {
1254
+ ref,
1255
+ className: cn(
1256
+ "px-2 py-1.5 text-sm font-semibold",
1257
+ inset && "pl-8",
1258
+ className
1259
+ ),
1260
+ ...props
1261
+ }
1262
+ ));
1263
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1264
+ var DropdownMenuSeparator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx25(
1265
+ DropdownMenuPrimitive.Separator,
1266
+ {
1267
+ ref,
1268
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
1269
+ ...props
1270
+ }
1271
+ ));
1272
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1273
+ var DropdownMenuShortcut = ({
1274
+ className,
1275
+ ...props
1276
+ }) => {
1277
+ return /* @__PURE__ */ jsx25(
1278
+ "span",
1279
+ {
1280
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
1281
+ ...props
1282
+ }
1283
+ );
1284
+ };
1285
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1286
+
1287
+ // src/components/ui/context-menu.tsx
1288
+ import * as React25 from "react";
1289
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
1290
+ import { Check as Check4, ChevronRight as ChevronRight2, Circle as Circle3 } from "lucide-react";
1291
+ import { jsx as jsx26, jsxs as jsxs11 } from "react/jsx-runtime";
1292
+ var ContextMenu = ContextMenuPrimitive.Root;
1293
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
1294
+ var ContextMenuSubTrigger = React25.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs11(
1295
+ ContextMenuPrimitive.SubTrigger,
1296
+ {
1297
+ ref,
1298
+ className: cn(
1299
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
1300
+ inset && "pl-8",
1301
+ className
1302
+ ),
1303
+ ...props,
1304
+ children: [
1305
+ children,
1306
+ /* @__PURE__ */ jsx26(ChevronRight2, { className: "ml-auto h-4 w-4" })
1307
+ ]
1308
+ }
1309
+ ));
1310
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
1311
+ var ContextMenuSubContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1312
+ ContextMenuPrimitive.SubContent,
1313
+ {
1314
+ ref,
1315
+ className: cn(
1316
+ "z-50 min-w-[8rem] overflow-hidden rounded-md 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 origin-[--radix-context-menu-content-transform-origin]",
1317
+ className
1318
+ ),
1319
+ ...props
1320
+ }
1321
+ ));
1322
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
1323
+ var ContextMenuContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx26(
1324
+ ContextMenuPrimitive.Content,
1325
+ {
1326
+ ref,
1327
+ className: cn(
1328
+ "z-50 max-h-[--radix-context-menu-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 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 origin-[--radix-context-menu-content-transform-origin]",
1329
+ className
1330
+ ),
1331
+ ...props
1332
+ }
1333
+ ) }));
1334
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
1335
+ var ContextMenuItem = React25.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx26(
1336
+ ContextMenuPrimitive.Item,
1337
+ {
1338
+ ref,
1339
+ className: cn(
1340
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1341
+ inset && "pl-8",
1342
+ className
1343
+ ),
1344
+ ...props
1345
+ }
1346
+ ));
1347
+ ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
1348
+ var ContextMenuCheckboxItem = React25.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs11(
1349
+ ContextMenuPrimitive.CheckboxItem,
1350
+ {
1351
+ ref,
1352
+ className: cn(
1353
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1354
+ className
1355
+ ),
1356
+ checked,
1357
+ ...props,
1358
+ children: [
1359
+ /* @__PURE__ */ jsx26("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx26(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx26(Check4, { className: "h-4 w-4" }) }) }),
1360
+ children
1361
+ ]
1362
+ }
1363
+ ));
1364
+ ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
1365
+ var ContextMenuRadioItem = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs11(
1366
+ ContextMenuPrimitive.RadioItem,
1367
+ {
1368
+ ref,
1369
+ className: cn(
1370
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1371
+ className
1372
+ ),
1373
+ ...props,
1374
+ children: [
1375
+ /* @__PURE__ */ jsx26("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx26(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx26(Circle3, { className: "h-2 w-2 fill-current" }) }) }),
1376
+ children
1377
+ ]
1378
+ }
1379
+ ));
1380
+ ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
1381
+ var ContextMenuLabel = React25.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx26(
1382
+ ContextMenuPrimitive.Label,
1383
+ {
1384
+ ref,
1385
+ className: cn(
1386
+ "px-2 py-1.5 text-sm font-semibold text-foreground",
1387
+ inset && "pl-8",
1388
+ className
1389
+ ),
1390
+ ...props
1391
+ }
1392
+ ));
1393
+ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
1394
+ var ContextMenuSeparator = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1395
+ ContextMenuPrimitive.Separator,
1396
+ {
1397
+ ref,
1398
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1399
+ ...props
1400
+ }
1401
+ ));
1402
+ ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
1403
+ var ContextMenuShortcut = ({
1404
+ className,
1405
+ ...props
1406
+ }) => {
1407
+ return /* @__PURE__ */ jsx26(
1408
+ "span",
1409
+ {
1410
+ className: cn(
1411
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1412
+ className
1413
+ ),
1414
+ ...props
1415
+ }
1416
+ );
1417
+ };
1418
+ ContextMenuShortcut.displayName = "ContextMenuShortcut";
1419
+
1420
+ // src/components/ui/menubar.tsx
1421
+ import * as React26 from "react";
1422
+ import * as MenubarPrimitive from "@radix-ui/react-menubar";
1423
+ import { Check as Check5, ChevronRight as ChevronRight3, Circle as Circle4 } from "lucide-react";
1424
+ import { jsx as jsx27, jsxs as jsxs12 } from "react/jsx-runtime";
1425
+ var Menubar = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1426
+ MenubarPrimitive.Root,
1427
+ {
1428
+ ref,
1429
+ className: cn(
1430
+ "flex h-10 items-center space-x-1 rounded-md border bg-background p-1",
1431
+ className
1432
+ ),
1433
+ ...props
1434
+ }
1435
+ ));
1436
+ Menubar.displayName = MenubarPrimitive.Root.displayName;
1437
+ var MenubarTrigger = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1438
+ MenubarPrimitive.Trigger,
1439
+ {
1440
+ ref,
1441
+ className: cn(
1442
+ "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
1443
+ className
1444
+ ),
1445
+ ...props
1446
+ }
1447
+ ));
1448
+ MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
1449
+ var MenubarSubTrigger = React26.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs12(
1450
+ MenubarPrimitive.SubTrigger,
1451
+ {
1452
+ ref,
1453
+ className: cn(
1454
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
1455
+ inset && "pl-8",
1456
+ className
1457
+ ),
1458
+ ...props,
1459
+ children: [
1460
+ children,
1461
+ /* @__PURE__ */ jsx27(ChevronRight3, { className: "ml-auto h-4 w-4" })
1462
+ ]
1463
+ }
1464
+ ));
1465
+ MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
1466
+ var MenubarSubContent = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1467
+ MenubarPrimitive.SubContent,
1468
+ {
1469
+ ref,
1470
+ className: cn(
1471
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-menubar-content-transform-origin]",
1472
+ className
1473
+ ),
1474
+ ...props
1475
+ }
1476
+ ));
1477
+ MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
1478
+ var MenubarContent = React26.forwardRef(
1479
+ ({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx27(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx27(
1480
+ MenubarPrimitive.Content,
1481
+ {
1482
+ ref,
1483
+ align,
1484
+ alignOffset,
1485
+ sideOffset,
1486
+ className: cn(
1487
+ "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-menubar-content-transform-origin]",
1488
+ className
1489
+ ),
1490
+ ...props
1491
+ }
1492
+ ) })
1493
+ );
1494
+ MenubarContent.displayName = MenubarPrimitive.Content.displayName;
1495
+ var MenubarItem = React26.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx27(
1496
+ MenubarPrimitive.Item,
1497
+ {
1498
+ ref,
1499
+ className: cn(
1500
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1501
+ inset && "pl-8",
1502
+ className
1503
+ ),
1504
+ ...props
1505
+ }
1506
+ ));
1507
+ MenubarItem.displayName = MenubarPrimitive.Item.displayName;
1508
+ var MenubarCheckboxItem = React26.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs12(
1509
+ MenubarPrimitive.CheckboxItem,
1510
+ {
1511
+ ref,
1512
+ className: cn(
1513
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1514
+ className
1515
+ ),
1516
+ checked,
1517
+ ...props,
1518
+ children: [
1519
+ /* @__PURE__ */ jsx27("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx27(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx27(Check5, { className: "h-4 w-4" }) }) }),
1520
+ children
1521
+ ]
1522
+ }
1523
+ ));
1524
+ MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
1525
+ var MenubarRadioItem = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs12(
1526
+ MenubarPrimitive.RadioItem,
1527
+ {
1528
+ ref,
1529
+ className: cn(
1530
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1531
+ className
1532
+ ),
1533
+ ...props,
1534
+ children: [
1535
+ /* @__PURE__ */ jsx27("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx27(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx27(Circle4, { className: "h-2 w-2 fill-current" }) }) }),
1536
+ children
1537
+ ]
1538
+ }
1539
+ ));
1540
+ MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
1541
+ var MenubarLabel = React26.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx27(
1542
+ MenubarPrimitive.Label,
1543
+ {
1544
+ ref,
1545
+ className: cn(
1546
+ "px-2 py-1.5 text-sm font-semibold",
1547
+ inset && "pl-8",
1548
+ className
1549
+ ),
1550
+ ...props
1551
+ }
1552
+ ));
1553
+ MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
1554
+ var MenubarSeparator = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1555
+ MenubarPrimitive.Separator,
1556
+ {
1557
+ ref,
1558
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
1559
+ ...props
1560
+ }
1561
+ ));
1562
+ MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;
1563
+ var MenubarShortcut = ({
1564
+ className,
1565
+ ...props
1566
+ }) => {
1567
+ return /* @__PURE__ */ jsx27(
1568
+ "span",
1569
+ {
1570
+ className: cn(
1571
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1572
+ className
1573
+ ),
1574
+ ...props
1575
+ }
1576
+ );
1577
+ };
1578
+ MenubarShortcut.displayname = "MenubarShortcut";
1579
+
1580
+ // src/components/ui/navigation-menu.tsx
1581
+ import * as React27 from "react";
1582
+ import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
1583
+ import { cva as cva4 } from "class-variance-authority";
1584
+ import { ChevronDown as ChevronDown3 } from "lucide-react";
1585
+ import { jsx as jsx28, jsxs as jsxs13 } from "react/jsx-runtime";
1586
+ var NavigationMenu = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(
1587
+ NavigationMenuPrimitive.Root,
1588
+ {
1589
+ ref,
1590
+ className: cn(
1591
+ "relative z-10 flex max-w-max flex-1 items-center justify-center",
1592
+ className
1593
+ ),
1594
+ ...props,
1595
+ children: [
1596
+ children,
1597
+ /* @__PURE__ */ jsx28(NavigationMenuViewport, {})
1598
+ ]
1599
+ }
1600
+ ));
1601
+ NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
1602
+ var NavigationMenuList = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1603
+ NavigationMenuPrimitive.List,
1604
+ {
1605
+ ref,
1606
+ className: cn(
1607
+ "group flex flex-1 list-none items-center justify-center space-x-1",
1608
+ className
1609
+ ),
1610
+ ...props
1611
+ }
1612
+ ));
1613
+ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
1614
+ var NavigationMenuItem = NavigationMenuPrimitive.Item;
1615
+ var navigationMenuTriggerStyle = cva4(
1616
+ "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent"
1617
+ );
1618
+ var NavigationMenuTrigger = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(
1619
+ NavigationMenuPrimitive.Trigger,
1620
+ {
1621
+ ref,
1622
+ className: cn(navigationMenuTriggerStyle(), "group", className),
1623
+ ...props,
1624
+ children: [
1625
+ children,
1626
+ " ",
1627
+ /* @__PURE__ */ jsx28(
1628
+ ChevronDown3,
1629
+ {
1630
+ className: "relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180",
1631
+ "aria-hidden": "true"
1632
+ }
1633
+ )
1634
+ ]
1635
+ }
1636
+ ));
1637
+ NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
1638
+ var NavigationMenuContent = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1639
+ NavigationMenuPrimitive.Content,
1640
+ {
1641
+ ref,
1642
+ className: cn(
1643
+ "left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto ",
1644
+ className
1645
+ ),
1646
+ ...props
1647
+ }
1648
+ ));
1649
+ NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
1650
+ var NavigationMenuLink = NavigationMenuPrimitive.Link;
1651
+ var NavigationMenuViewport = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx28(
1652
+ NavigationMenuPrimitive.Viewport,
1653
+ {
1654
+ className: cn(
1655
+ "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
1656
+ className
1657
+ ),
1658
+ ref,
1659
+ ...props
1660
+ }
1661
+ ) }));
1662
+ NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
1663
+ var NavigationMenuIndicator = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1664
+ NavigationMenuPrimitive.Indicator,
1665
+ {
1666
+ ref,
1667
+ className: cn(
1668
+ "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
1669
+ className
1670
+ ),
1671
+ ...props,
1672
+ children: /* @__PURE__ */ jsx28("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
1673
+ }
1674
+ ));
1675
+ NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
1676
+
1677
+ // src/components/ui/breadcrumb.tsx
1678
+ import * as React28 from "react";
1679
+ import { Slot as Slot3 } from "@radix-ui/react-slot";
1680
+ import { ChevronRight as ChevronRight4, MoreHorizontal } from "lucide-react";
1681
+ import { jsx as jsx29, jsxs as jsxs14 } from "react/jsx-runtime";
1682
+ var Breadcrumb = React28.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx29("nav", { ref, "aria-label": "breadcrumb", ...props }));
1683
+ Breadcrumb.displayName = "Breadcrumb";
1684
+ var BreadcrumbList = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(
1685
+ "ol",
1686
+ {
1687
+ ref,
1688
+ className: cn(
1689
+ "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
1690
+ className
1691
+ ),
1692
+ ...props
1693
+ }
1694
+ ));
1695
+ BreadcrumbList.displayName = "BreadcrumbList";
1696
+ var BreadcrumbItem = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(
1697
+ "li",
1698
+ {
1699
+ ref,
1700
+ className: cn("inline-flex items-center gap-1.5", className),
1701
+ ...props
1702
+ }
1703
+ ));
1704
+ BreadcrumbItem.displayName = "BreadcrumbItem";
1705
+ var BreadcrumbLink = React28.forwardRef(({ asChild, className, ...props }, ref) => {
1706
+ const Comp = asChild ? Slot3 : "a";
1707
+ return /* @__PURE__ */ jsx29(
1708
+ Comp,
1709
+ {
1710
+ ref,
1711
+ className: cn("transition-colors hover:text-foreground", className),
1712
+ ...props
1713
+ }
1714
+ );
1715
+ });
1716
+ BreadcrumbLink.displayName = "BreadcrumbLink";
1717
+ var BreadcrumbPage = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(
1718
+ "span",
1719
+ {
1720
+ ref,
1721
+ role: "link",
1722
+ "aria-disabled": "true",
1723
+ "aria-current": "page",
1724
+ className: cn("font-normal text-foreground", className),
1725
+ ...props
1726
+ }
1727
+ ));
1728
+ BreadcrumbPage.displayName = "BreadcrumbPage";
1729
+ var BreadcrumbSeparator = ({
1730
+ children,
1731
+ className,
1732
+ ...props
1733
+ }) => /* @__PURE__ */ jsx29(
1734
+ "li",
1735
+ {
1736
+ role: "presentation",
1737
+ "aria-hidden": "true",
1738
+ className: cn("[&>svg]:w-3.5 [&>svg]:h-3.5", className),
1739
+ ...props,
1740
+ children: children ?? /* @__PURE__ */ jsx29(ChevronRight4, {})
1741
+ }
1742
+ );
1743
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1744
+ var BreadcrumbEllipsis = ({
1745
+ className,
1746
+ ...props
1747
+ }) => /* @__PURE__ */ jsxs14(
1748
+ "span",
1749
+ {
1750
+ role: "presentation",
1751
+ "aria-hidden": "true",
1752
+ className: cn("flex h-9 w-9 items-center justify-center", className),
1753
+ ...props,
1754
+ children: [
1755
+ /* @__PURE__ */ jsx29(MoreHorizontal, { className: "h-4 w-4" }),
1756
+ /* @__PURE__ */ jsx29("span", { className: "sr-only", children: "More" })
1757
+ ]
1758
+ }
1759
+ );
1760
+ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
1761
+
1762
+ // src/components/ui/pagination.tsx
1763
+ import * as React29 from "react";
1764
+ import { ChevronLeft, ChevronRight as ChevronRight5, MoreHorizontal as MoreHorizontal2 } from "lucide-react";
1765
+ import { jsx as jsx30, jsxs as jsxs15 } from "react/jsx-runtime";
1766
+ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx30(
1767
+ "nav",
1768
+ {
1769
+ role: "navigation",
1770
+ "aria-label": "pagination",
1771
+ className: cn("mx-auto flex w-full justify-center", className),
1772
+ ...props
1773
+ }
1774
+ );
1775
+ Pagination.displayName = "Pagination";
1776
+ var PaginationContent = React29.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
1777
+ "ul",
1778
+ {
1779
+ ref,
1780
+ className: cn("flex flex-row items-center gap-1", className),
1781
+ ...props
1782
+ }
1783
+ ));
1784
+ PaginationContent.displayName = "PaginationContent";
1785
+ var PaginationItem = React29.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30("li", { ref, className: cn("", className), ...props }));
1786
+ PaginationItem.displayName = "PaginationItem";
1787
+ var PaginationLink = ({
1788
+ className,
1789
+ isActive,
1790
+ size = "icon",
1791
+ ...props
1792
+ }) => /* @__PURE__ */ jsx30(
1793
+ "a",
1794
+ {
1795
+ "aria-current": isActive ? "page" : void 0,
1796
+ className: cn(
1797
+ buttonVariants({
1798
+ variant: isActive ? "outline" : "ghost",
1799
+ size
1800
+ }),
1801
+ className
1802
+ ),
1803
+ ...props
1804
+ }
1805
+ );
1806
+ PaginationLink.displayName = "PaginationLink";
1807
+ var PaginationPrevious = ({
1808
+ className,
1809
+ ...props
1810
+ }) => /* @__PURE__ */ jsxs15(
1811
+ PaginationLink,
1812
+ {
1813
+ "aria-label": "Go to previous page",
1814
+ size: "default",
1815
+ className: cn("gap-1 pl-2.5", className),
1816
+ ...props,
1817
+ children: [
1818
+ /* @__PURE__ */ jsx30(ChevronLeft, { className: "h-4 w-4" }),
1819
+ /* @__PURE__ */ jsx30("span", { children: "Previous" })
1820
+ ]
1821
+ }
1822
+ );
1823
+ PaginationPrevious.displayName = "PaginationPrevious";
1824
+ var PaginationNext = ({
1825
+ className,
1826
+ ...props
1827
+ }) => /* @__PURE__ */ jsxs15(
1828
+ PaginationLink,
1829
+ {
1830
+ "aria-label": "Go to next page",
1831
+ size: "default",
1832
+ className: cn("gap-1 pr-2.5", className),
1833
+ ...props,
1834
+ children: [
1835
+ /* @__PURE__ */ jsx30("span", { children: "Next" }),
1836
+ /* @__PURE__ */ jsx30(ChevronRight5, { className: "h-4 w-4" })
1837
+ ]
1838
+ }
1839
+ );
1840
+ PaginationNext.displayName = "PaginationNext";
1841
+ var PaginationEllipsis = ({
1842
+ className,
1843
+ ...props
1844
+ }) => /* @__PURE__ */ jsxs15(
1845
+ "span",
1846
+ {
1847
+ "aria-hidden": true,
1848
+ className: cn("flex h-9 w-9 items-center justify-center", className),
1849
+ ...props,
1850
+ children: [
1851
+ /* @__PURE__ */ jsx30(MoreHorizontal2, { className: "h-4 w-4" }),
1852
+ /* @__PURE__ */ jsx30("span", { className: "sr-only", children: "More pages" })
1853
+ ]
1854
+ }
1855
+ );
1856
+ PaginationEllipsis.displayName = "PaginationEllipsis";
1857
+
1858
+ // src/components/ui/command.tsx
1859
+ import * as React30 from "react";
1860
+ import { Command as CommandPrimitive } from "cmdk";
1861
+ import { Search } from "lucide-react";
1862
+ import { jsx as jsx31, jsxs as jsxs16 } from "react/jsx-runtime";
1863
+ var Command = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
1864
+ CommandPrimitive,
1865
+ {
1866
+ ref,
1867
+ className: cn(
1868
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
1869
+ className
1870
+ ),
1871
+ ...props
1872
+ }
1873
+ ));
1874
+ Command.displayName = CommandPrimitive.displayName;
1875
+ var CommandDialog = ({ children, ...props }) => {
1876
+ return /* @__PURE__ */ jsx31(Dialog, { ...props, children: /* @__PURE__ */ jsx31(DialogContent, { className: "overflow-hidden p-0 shadow-lg", children: /* @__PURE__ */ jsx31(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 }) }) });
1877
+ };
1878
+ var CommandInput = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs16("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
1879
+ /* @__PURE__ */ jsx31(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1880
+ /* @__PURE__ */ jsx31(
1881
+ CommandPrimitive.Input,
1882
+ {
1883
+ ref,
1884
+ className: cn(
1885
+ "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
1886
+ className
1887
+ ),
1888
+ ...props
1889
+ }
1890
+ )
1891
+ ] }));
1892
+ CommandInput.displayName = CommandPrimitive.Input.displayName;
1893
+ var CommandList = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
1894
+ CommandPrimitive.List,
1895
+ {
1896
+ ref,
1897
+ className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
1898
+ ...props
1899
+ }
1900
+ ));
1901
+ CommandList.displayName = CommandPrimitive.List.displayName;
1902
+ var CommandEmpty = React30.forwardRef((props, ref) => /* @__PURE__ */ jsx31(
1903
+ CommandPrimitive.Empty,
1904
+ {
1905
+ ref,
1906
+ className: "py-6 text-center text-sm",
1907
+ ...props
1908
+ }
1909
+ ));
1910
+ CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
1911
+ var CommandGroup = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
1912
+ CommandPrimitive.Group,
1913
+ {
1914
+ ref,
1915
+ className: cn(
1916
+ "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",
1917
+ className
1918
+ ),
1919
+ ...props
1920
+ }
1921
+ ));
1922
+ CommandGroup.displayName = CommandPrimitive.Group.displayName;
1923
+ var CommandSeparator = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
1924
+ CommandPrimitive.Separator,
1925
+ {
1926
+ ref,
1927
+ className: cn("-mx-1 h-px bg-border", className),
1928
+ ...props
1929
+ }
1930
+ ));
1931
+ CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
1932
+ var CommandItem = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
1933
+ CommandPrimitive.Item,
1934
+ {
1935
+ ref,
1936
+ className: cn(
1937
+ "relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1938
+ className
1939
+ ),
1940
+ ...props
1941
+ }
1942
+ ));
1943
+ CommandItem.displayName = CommandPrimitive.Item.displayName;
1944
+ var CommandShortcut = ({
1945
+ className,
1946
+ ...props
1947
+ }) => {
1948
+ return /* @__PURE__ */ jsx31(
1949
+ "span",
1950
+ {
1951
+ className: cn(
1952
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1953
+ className
1954
+ ),
1955
+ ...props
1956
+ }
1957
+ );
1958
+ };
1959
+ CommandShortcut.displayName = "CommandShortcut";
1960
+
1961
+ // src/components/ui/table.tsx
1962
+ import * as React31 from "react";
1963
+ import { jsx as jsx32 } from "react/jsx-runtime";
1964
+ var Table = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx32(
1965
+ "table",
1966
+ {
1967
+ ref,
1968
+ className: cn("w-full caption-bottom text-sm", className),
1969
+ ...props
1970
+ }
1971
+ ) }));
1972
+ Table.displayName = "Table";
1973
+ var TableHeader = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
1974
+ TableHeader.displayName = "TableHeader";
1975
+ var TableBody = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
1976
+ "tbody",
1977
+ {
1978
+ ref,
1979
+ className: cn("[&_tr:last-child]:border-0", className),
1980
+ ...props
1981
+ }
1982
+ ));
1983
+ TableBody.displayName = "TableBody";
1984
+ var TableFooter = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
1985
+ "tfoot",
1986
+ {
1987
+ ref,
1988
+ className: cn(
1989
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
1990
+ className
1991
+ ),
1992
+ ...props
1993
+ }
1994
+ ));
1995
+ TableFooter.displayName = "TableFooter";
1996
+ var TableRow = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
1997
+ "tr",
1998
+ {
1999
+ ref,
2000
+ className: cn(
2001
+ "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
2002
+ className
2003
+ ),
2004
+ ...props
2005
+ }
2006
+ ));
2007
+ TableRow.displayName = "TableRow";
2008
+ var TableHead = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
2009
+ "th",
2010
+ {
2011
+ ref,
2012
+ className: cn(
2013
+ "h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
2014
+ className
2015
+ ),
2016
+ ...props
2017
+ }
2018
+ ));
2019
+ TableHead.displayName = "TableHead";
2020
+ var TableCell = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
2021
+ "td",
2022
+ {
2023
+ ref,
2024
+ className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className),
2025
+ ...props
2026
+ }
2027
+ ));
2028
+ TableCell.displayName = "TableCell";
2029
+ var TableCaption = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
2030
+ "caption",
2031
+ {
2032
+ ref,
2033
+ className: cn("mt-4 text-sm text-muted-foreground", className),
2034
+ ...props
2035
+ }
2036
+ ));
2037
+ TableCaption.displayName = "TableCaption";
2038
+
2039
+ // src/components/ui/avatar.tsx
2040
+ import * as React32 from "react";
2041
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
2042
+ import { jsx as jsx33 } from "react/jsx-runtime";
2043
+ var Avatar = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
2044
+ AvatarPrimitive.Root,
2045
+ {
2046
+ ref,
2047
+ className: cn(
2048
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
2049
+ className
2050
+ ),
2051
+ ...props
2052
+ }
2053
+ ));
2054
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
2055
+ var AvatarImage = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
2056
+ AvatarPrimitive.Image,
2057
+ {
2058
+ ref,
2059
+ className: cn("aspect-square h-full w-full", className),
2060
+ ...props
2061
+ }
2062
+ ));
2063
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
2064
+ var AvatarFallback = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
2065
+ AvatarPrimitive.Fallback,
2066
+ {
2067
+ ref,
2068
+ className: cn(
2069
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
2070
+ className
2071
+ ),
2072
+ ...props
2073
+ }
2074
+ ));
2075
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
2076
+
2077
+ // src/components/ui/badge.tsx
2078
+ import { cva as cva5 } from "class-variance-authority";
2079
+ import { jsx as jsx34 } from "react/jsx-runtime";
2080
+ var badgeVariants = cva5(
2081
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
2082
+ {
2083
+ variants: {
2084
+ variant: {
2085
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
2086
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
2087
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
2088
+ outline: "text-foreground"
2089
+ }
2090
+ },
2091
+ defaultVariants: {
2092
+ variant: "default"
2093
+ }
2094
+ }
2095
+ );
2096
+ function Badge({ className, variant, ...props }) {
2097
+ return /* @__PURE__ */ jsx34("div", { className: cn(badgeVariants({ variant }), className), ...props });
2098
+ }
2099
+
2100
+ // src/components/ui/alert.tsx
2101
+ import * as React33 from "react";
2102
+ import { cva as cva6 } from "class-variance-authority";
2103
+ import { jsx as jsx35 } from "react/jsx-runtime";
2104
+ var alertVariants = cva6(
2105
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
2106
+ {
2107
+ variants: {
2108
+ variant: {
2109
+ default: "bg-background text-foreground",
2110
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
2111
+ }
2112
+ },
2113
+ defaultVariants: {
2114
+ variant: "default"
2115
+ }
2116
+ }
2117
+ );
2118
+ var Alert = React33.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx35(
2119
+ "div",
2120
+ {
2121
+ ref,
2122
+ role: "alert",
2123
+ className: cn(alertVariants({ variant }), className),
2124
+ ...props
2125
+ }
2126
+ ));
2127
+ Alert.displayName = "Alert";
2128
+ var AlertTitle = React33.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx35(
2129
+ "h5",
2130
+ {
2131
+ ref,
2132
+ className: cn("mb-1 font-medium leading-none tracking-tight", className),
2133
+ ...props
2134
+ }
2135
+ ));
2136
+ AlertTitle.displayName = "AlertTitle";
2137
+ var AlertDescription = React33.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx35(
2138
+ "div",
2139
+ {
2140
+ ref,
2141
+ className: cn("text-sm [&_p]:leading-relaxed", className),
2142
+ ...props
2143
+ }
2144
+ ));
2145
+ AlertDescription.displayName = "AlertDescription";
2146
+
2147
+ // src/components/ui/progress.tsx
2148
+ import * as React34 from "react";
2149
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
2150
+ import { jsx as jsx36 } from "react/jsx-runtime";
2151
+ var Progress = React34.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx36(
2152
+ ProgressPrimitive.Root,
2153
+ {
2154
+ ref,
2155
+ className: cn(
2156
+ "relative h-4 w-full overflow-hidden rounded-full bg-secondary",
2157
+ className
2158
+ ),
2159
+ ...props,
2160
+ children: /* @__PURE__ */ jsx36(
2161
+ ProgressPrimitive.Indicator,
2162
+ {
2163
+ className: "h-full w-full flex-1 bg-primary transition-all",
2164
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
2165
+ }
2166
+ )
2167
+ }
2168
+ ));
2169
+ Progress.displayName = ProgressPrimitive.Root.displayName;
2170
+
2171
+ // src/components/ui/skeleton.tsx
2172
+ import { jsx as jsx37 } from "react/jsx-runtime";
2173
+ function Skeleton({
2174
+ className,
2175
+ ...props
2176
+ }) {
2177
+ return /* @__PURE__ */ jsx37(
2178
+ "div",
2179
+ {
2180
+ className: cn("animate-pulse rounded-md bg-muted", className),
2181
+ ...props
2182
+ }
2183
+ );
2184
+ }
2185
+
2186
+ // src/components/ui/calendar.tsx
2187
+ import * as React35 from "react";
2188
+ import {
2189
+ ChevronDownIcon,
2190
+ ChevronLeftIcon,
2191
+ ChevronRightIcon
2192
+ } from "lucide-react";
2193
+ import { DayPicker, getDefaultClassNames } from "react-day-picker";
2194
+ import { jsx as jsx38 } from "react/jsx-runtime";
2195
+ function Calendar({
2196
+ className,
2197
+ classNames,
2198
+ showOutsideDays = true,
2199
+ captionLayout = "label",
2200
+ buttonVariant = "ghost",
2201
+ formatters,
2202
+ components,
2203
+ ...props
2204
+ }) {
2205
+ const defaultClassNames = getDefaultClassNames();
2206
+ return /* @__PURE__ */ jsx38(
2207
+ DayPicker,
2208
+ {
2209
+ showOutsideDays,
2210
+ className: cn(
2211
+ "bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
2212
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
2213
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
2214
+ className
2215
+ ),
2216
+ captionLayout,
2217
+ formatters: {
2218
+ formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
2219
+ ...formatters
2220
+ },
2221
+ classNames: {
2222
+ root: cn("w-fit", defaultClassNames.root),
2223
+ months: cn(
2224
+ "relative flex flex-col gap-4 md:flex-row",
2225
+ defaultClassNames.months
2226
+ ),
2227
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
2228
+ nav: cn(
2229
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
2230
+ defaultClassNames.nav
2231
+ ),
2232
+ button_previous: cn(
2233
+ buttonVariants({ variant: buttonVariant }),
2234
+ "h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",
2235
+ defaultClassNames.button_previous
2236
+ ),
2237
+ button_next: cn(
2238
+ buttonVariants({ variant: buttonVariant }),
2239
+ "h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",
2240
+ defaultClassNames.button_next
2241
+ ),
2242
+ month_caption: cn(
2243
+ "flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",
2244
+ defaultClassNames.month_caption
2245
+ ),
2246
+ dropdowns: cn(
2247
+ "flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",
2248
+ defaultClassNames.dropdowns
2249
+ ),
2250
+ dropdown_root: cn(
2251
+ "has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border",
2252
+ defaultClassNames.dropdown_root
2253
+ ),
2254
+ dropdown: cn(
2255
+ "bg-popover absolute inset-0 opacity-0",
2256
+ defaultClassNames.dropdown
2257
+ ),
2258
+ caption_label: cn(
2259
+ "select-none font-medium",
2260
+ captionLayout === "label" ? "text-sm" : "[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5",
2261
+ defaultClassNames.caption_label
2262
+ ),
2263
+ table: "w-full border-collapse",
2264
+ weekdays: cn("flex", defaultClassNames.weekdays),
2265
+ weekday: cn(
2266
+ "text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",
2267
+ defaultClassNames.weekday
2268
+ ),
2269
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
2270
+ week_number_header: cn(
2271
+ "w-[--cell-size] select-none",
2272
+ defaultClassNames.week_number_header
2273
+ ),
2274
+ week_number: cn(
2275
+ "text-muted-foreground select-none text-[0.8rem]",
2276
+ defaultClassNames.week_number
2277
+ ),
2278
+ day: cn(
2279
+ "group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md",
2280
+ defaultClassNames.day
2281
+ ),
2282
+ range_start: cn(
2283
+ "bg-accent rounded-l-md",
2284
+ defaultClassNames.range_start
2285
+ ),
2286
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
2287
+ range_end: cn("bg-accent rounded-r-md", defaultClassNames.range_end),
2288
+ today: cn(
2289
+ "bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
2290
+ defaultClassNames.today
2291
+ ),
2292
+ outside: cn(
2293
+ "text-muted-foreground aria-selected:text-muted-foreground",
2294
+ defaultClassNames.outside
2295
+ ),
2296
+ disabled: cn(
2297
+ "text-muted-foreground opacity-50",
2298
+ defaultClassNames.disabled
2299
+ ),
2300
+ hidden: cn("invisible", defaultClassNames.hidden),
2301
+ ...classNames
2302
+ },
2303
+ components: {
2304
+ Root: ({ className: className2, rootRef, ...props2 }) => {
2305
+ return /* @__PURE__ */ jsx38(
2306
+ "div",
2307
+ {
2308
+ "data-slot": "calendar",
2309
+ ref: rootRef,
2310
+ className: cn(className2),
2311
+ ...props2
2312
+ }
2313
+ );
2314
+ },
2315
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
2316
+ if (orientation === "left") {
2317
+ return /* @__PURE__ */ jsx38(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
2318
+ }
2319
+ if (orientation === "right") {
2320
+ return /* @__PURE__ */ jsx38(
2321
+ ChevronRightIcon,
2322
+ {
2323
+ className: cn("size-4", className2),
2324
+ ...props2
2325
+ }
2326
+ );
2327
+ }
2328
+ return /* @__PURE__ */ jsx38(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
2329
+ },
2330
+ DayButton: CalendarDayButton,
2331
+ WeekNumber: ({ children, ...props2 }) => {
2332
+ return /* @__PURE__ */ jsx38("td", { ...props2, children: /* @__PURE__ */ jsx38("div", { className: "flex size-[--cell-size] items-center justify-center text-center", children }) });
2333
+ },
2334
+ ...components
2335
+ },
2336
+ ...props
2337
+ }
2338
+ );
2339
+ }
2340
+ function CalendarDayButton({
2341
+ className,
2342
+ day,
2343
+ modifiers,
2344
+ ...props
2345
+ }) {
2346
+ const defaultClassNames = getDefaultClassNames();
2347
+ const ref = React35.useRef(null);
2348
+ React35.useEffect(() => {
2349
+ if (modifiers.focused) ref.current?.focus();
2350
+ }, [modifiers.focused]);
2351
+ return /* @__PURE__ */ jsx38(
2352
+ Button,
2353
+ {
2354
+ ref,
2355
+ variant: "ghost",
2356
+ size: "icon",
2357
+ "data-day": day.date.toLocaleDateString(),
2358
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
2359
+ "data-range-start": modifiers.range_start,
2360
+ "data-range-end": modifiers.range_end,
2361
+ "data-range-middle": modifiers.range_middle,
2362
+ className: cn(
2363
+ "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",
2364
+ defaultClassNames.day,
2365
+ className
2366
+ ),
2367
+ ...props
2368
+ }
2369
+ );
2370
+ }
2371
+
2372
+ // src/components/ui/carousel.tsx
2373
+ import * as React36 from "react";
2374
+ import useEmblaCarousel from "embla-carousel-react";
2375
+ import { ArrowLeft, ArrowRight } from "lucide-react";
2376
+ import { jsx as jsx39, jsxs as jsxs17 } from "react/jsx-runtime";
2377
+ var CarouselContext = React36.createContext(null);
2378
+ function useCarousel() {
2379
+ const context = React36.useContext(CarouselContext);
2380
+ if (!context) {
2381
+ throw new Error("useCarousel must be used within a <Carousel />");
2382
+ }
2383
+ return context;
2384
+ }
2385
+ var Carousel = React36.forwardRef(
2386
+ ({
2387
+ orientation = "horizontal",
2388
+ opts,
2389
+ setApi,
2390
+ plugins,
2391
+ className,
2392
+ children,
2393
+ ...props
2394
+ }, ref) => {
2395
+ const [carouselRef, api] = useEmblaCarousel(
2396
+ {
2397
+ ...opts,
2398
+ axis: orientation === "horizontal" ? "x" : "y"
2399
+ },
2400
+ plugins
2401
+ );
2402
+ const [canScrollPrev, setCanScrollPrev] = React36.useState(false);
2403
+ const [canScrollNext, setCanScrollNext] = React36.useState(false);
2404
+ const onSelect = React36.useCallback((api2) => {
2405
+ if (!api2) {
2406
+ return;
2407
+ }
2408
+ setCanScrollPrev(api2.canScrollPrev());
2409
+ setCanScrollNext(api2.canScrollNext());
2410
+ }, []);
2411
+ const scrollPrev = React36.useCallback(() => {
2412
+ api?.scrollPrev();
2413
+ }, [api]);
2414
+ const scrollNext = React36.useCallback(() => {
2415
+ api?.scrollNext();
2416
+ }, [api]);
2417
+ const handleKeyDown = React36.useCallback(
2418
+ (event) => {
2419
+ if (event.key === "ArrowLeft") {
2420
+ event.preventDefault();
2421
+ scrollPrev();
2422
+ } else if (event.key === "ArrowRight") {
2423
+ event.preventDefault();
2424
+ scrollNext();
2425
+ }
2426
+ },
2427
+ [scrollPrev, scrollNext]
2428
+ );
2429
+ React36.useEffect(() => {
2430
+ if (!api || !setApi) {
2431
+ return;
2432
+ }
2433
+ setApi(api);
2434
+ }, [api, setApi]);
2435
+ React36.useEffect(() => {
2436
+ if (!api) {
2437
+ return;
2438
+ }
2439
+ onSelect(api);
2440
+ api.on("reInit", onSelect);
2441
+ api.on("select", onSelect);
2442
+ return () => {
2443
+ api?.off("select", onSelect);
2444
+ };
2445
+ }, [api, onSelect]);
2446
+ return /* @__PURE__ */ jsx39(
2447
+ CarouselContext.Provider,
2448
+ {
2449
+ value: {
2450
+ carouselRef,
2451
+ api,
2452
+ opts,
2453
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
2454
+ scrollPrev,
2455
+ scrollNext,
2456
+ canScrollPrev,
2457
+ canScrollNext
2458
+ },
2459
+ children: /* @__PURE__ */ jsx39(
2460
+ "div",
2461
+ {
2462
+ ref,
2463
+ onKeyDownCapture: handleKeyDown,
2464
+ className: cn("relative", className),
2465
+ role: "region",
2466
+ "aria-roledescription": "carousel",
2467
+ ...props,
2468
+ children
2469
+ }
2470
+ )
2471
+ }
2472
+ );
2473
+ }
2474
+ );
2475
+ Carousel.displayName = "Carousel";
2476
+ var CarouselContent = React36.forwardRef(({ className, ...props }, ref) => {
2477
+ const { carouselRef, orientation } = useCarousel();
2478
+ return /* @__PURE__ */ jsx39("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx39(
2479
+ "div",
2480
+ {
2481
+ ref,
2482
+ className: cn(
2483
+ "flex",
2484
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
2485
+ className
2486
+ ),
2487
+ ...props
2488
+ }
2489
+ ) });
2490
+ });
2491
+ CarouselContent.displayName = "CarouselContent";
2492
+ var CarouselItem = React36.forwardRef(({ className, ...props }, ref) => {
2493
+ const { orientation } = useCarousel();
2494
+ return /* @__PURE__ */ jsx39(
2495
+ "div",
2496
+ {
2497
+ ref,
2498
+ role: "group",
2499
+ "aria-roledescription": "slide",
2500
+ className: cn(
2501
+ "min-w-0 shrink-0 grow-0 basis-full",
2502
+ orientation === "horizontal" ? "pl-4" : "pt-4",
2503
+ className
2504
+ ),
2505
+ ...props
2506
+ }
2507
+ );
2508
+ });
2509
+ CarouselItem.displayName = "CarouselItem";
2510
+ var CarouselPrevious = React36.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
2511
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
2512
+ return /* @__PURE__ */ jsxs17(
2513
+ Button,
2514
+ {
2515
+ ref,
2516
+ variant,
2517
+ size,
2518
+ className: cn(
2519
+ "absolute h-8 w-8 rounded-full",
2520
+ orientation === "horizontal" ? "-left-12 top-1/2 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
2521
+ className
2522
+ ),
2523
+ disabled: !canScrollPrev,
2524
+ onClick: scrollPrev,
2525
+ ...props,
2526
+ children: [
2527
+ /* @__PURE__ */ jsx39(ArrowLeft, { className: "h-4 w-4" }),
2528
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Previous slide" })
2529
+ ]
2530
+ }
2531
+ );
2532
+ });
2533
+ CarouselPrevious.displayName = "CarouselPrevious";
2534
+ var CarouselNext = React36.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
2535
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
2536
+ return /* @__PURE__ */ jsxs17(
2537
+ Button,
2538
+ {
2539
+ ref,
2540
+ variant,
2541
+ size,
2542
+ className: cn(
2543
+ "absolute h-8 w-8 rounded-full",
2544
+ orientation === "horizontal" ? "-right-12 top-1/2 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
2545
+ className
2546
+ ),
2547
+ disabled: !canScrollNext,
2548
+ onClick: scrollNext,
2549
+ ...props,
2550
+ children: [
2551
+ /* @__PURE__ */ jsx39(ArrowRight, { className: "h-4 w-4" }),
2552
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Next slide" })
2553
+ ]
2554
+ }
2555
+ );
2556
+ });
2557
+ CarouselNext.displayName = "CarouselNext";
2558
+
2559
+ // src/components/ui/spinner.tsx
2560
+ import { Loader2Icon } from "lucide-react";
2561
+ import { jsx as jsx40 } from "react/jsx-runtime";
2562
+ function Spinner({ className, ...props }) {
2563
+ return /* @__PURE__ */ jsx40(
2564
+ Loader2Icon,
2565
+ {
2566
+ role: "status",
2567
+ "aria-label": "Loading",
2568
+ className: cn("size-4 animate-spin", className),
2569
+ ...props
2570
+ }
2571
+ );
2572
+ }
2573
+
2574
+ // src/atoms/TextAtom.tsx
2575
+ import { jsx as jsx41 } from "react/jsx-runtime";
2576
+ var TextAtom = ({
2577
+ content,
2578
+ variant = "p",
2579
+ className
2580
+ }) => {
2581
+ const baseStyles = {
2582
+ h1: "scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl text-gray-900",
2583
+ h2: "scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0 text-gray-900",
2584
+ h3: "scroll-m-20 text-2xl font-semibold tracking-tight text-gray-900",
2585
+ h4: "scroll-m-20 text-xl font-semibold tracking-tight text-gray-900",
2586
+ p: "leading-7 [&:not(:first-child)]:mt-6 text-gray-700",
2587
+ small: "text-sm font-medium leading-none text-gray-600",
2588
+ muted: "text-sm text-muted-foreground",
2589
+ label: "text-[10px] font-bold text-gray-400 uppercase tracking-widest pl-1"
2590
+ };
2591
+ const Component = variant === "small" || variant === "muted" || variant === "label" ? "p" : variant;
2592
+ return /* @__PURE__ */ jsx41(Component, { className: cn(baseStyles[variant], className), children: content });
2593
+ };
2594
+
2595
+ // src/atoms/ButtonAtom.tsx
2596
+ import { Loader2 } from "lucide-react";
2597
+ import { Fragment, jsx as jsx42, jsxs as jsxs18 } from "react/jsx-runtime";
2598
+ var ButtonAtom = ({
2599
+ label,
2600
+ variant = "default",
2601
+ size = "default",
2602
+ action,
2603
+ disabled = false,
2604
+ isLoading = false,
2605
+ onAction,
2606
+ className
2607
+ }) => {
2608
+ const handleClick = (e) => {
2609
+ e.preventDefault();
2610
+ e.stopPropagation();
2611
+ if (action && onAction) {
2612
+ onAction(action);
2613
+ }
2614
+ };
2615
+ const variantMap = {
2616
+ purple: "bg-purple500 hover:bg-purple600 text-white shadow-md hover:shadow-lg transition-all",
2617
+ gradient: "bg-gradient-to-r from-purple500 to-indigo-600 hover:from-purple600 hover:to-indigo-700 text-white shadow-lg"
2618
+ };
2619
+ const customClass = variantMap[variant] || "";
2620
+ const shadcnVariant = ["purple", "gradient"].includes(variant) ? "default" : variant;
2621
+ return /* @__PURE__ */ jsx42(
2622
+ Button,
2623
+ {
2624
+ variant: shadcnVariant,
2625
+ size,
2626
+ disabled: disabled || isLoading,
2627
+ onClick: handleClick,
2628
+ className: cn("rounded-full font-semibold", customClass, className),
2629
+ children: isLoading ? /* @__PURE__ */ jsxs18(Fragment, { children: [
2630
+ /* @__PURE__ */ jsx42(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }),
2631
+ label
2632
+ ] }) : label
2633
+ }
2634
+ );
2635
+ };
2636
+
2637
+ // src/atoms/LayoutAtom.tsx
2638
+ import React37 from "react";
2639
+ import { jsx as jsx43 } from "react/jsx-runtime";
2640
+ var LayoutAtom = ({
2641
+ direction,
2642
+ gap = "md",
2643
+ children,
2644
+ className,
2645
+ renderComponent
2646
+ }) => {
2647
+ const gapMap = {
2648
+ none: "gap-0",
2649
+ sm: "gap-2",
2650
+ md: "gap-4",
2651
+ lg: "gap-8",
2652
+ xl: "gap-12"
2653
+ };
2654
+ const classes = cn(
2655
+ "flex",
2656
+ direction === "vertical" ? "flex-col" : "flex-row flex-wrap",
2657
+ direction === "grid" && "grid grid-cols-1 md:grid-cols-2",
2658
+ gapMap[gap],
2659
+ className
2660
+ );
2661
+ return /* @__PURE__ */ jsx43("div", { className: classes, children: children.map((child) => /* @__PURE__ */ jsx43(React37.Fragment, { children: renderComponent(child) }, child.id)) });
2662
+ };
2663
+
2664
+ // src/atoms/CardAtom.tsx
2665
+ import React38 from "react";
2666
+ import { jsx as jsx44, jsxs as jsxs19 } from "react/jsx-runtime";
2667
+ var CardAtom = ({
2668
+ title,
2669
+ description,
2670
+ children,
2671
+ footer,
2672
+ className,
2673
+ renderComponent
2674
+ }) => {
2675
+ return /* @__PURE__ */ jsxs19(
2676
+ Card,
2677
+ {
2678
+ className: cn(
2679
+ "rounded-[24px] border border-gray200 shadow-sm overflow-hidden",
2680
+ className
2681
+ ),
2682
+ children: [
2683
+ (title || description) && /* @__PURE__ */ jsxs19(CardHeader, { children: [
2684
+ title && /* @__PURE__ */ jsx44(CardTitle, { className: "text-xl font-bold text-gray-900", children: title }),
2685
+ description && /* @__PURE__ */ jsx44(CardDescription, { children: description })
2686
+ ] }),
2687
+ /* @__PURE__ */ jsx44(CardContent, { className: "space-y-4", children: children.map((child) => /* @__PURE__ */ jsx44(React38.Fragment, { children: renderComponent(child) }, child.id)) }),
2688
+ footer && footer.length > 0 && /* @__PURE__ */ jsx44(CardFooter, { className: "bg-gray-50/50 border-t border-gray-100 flex flex-wrap gap-2 pt-6", children: footer.map((footerChild) => /* @__PURE__ */ jsx44(React38.Fragment, { children: renderComponent(footerChild) }, footerChild.id)) })
2689
+ ]
2690
+ }
2691
+ );
2692
+ };
2693
+
2694
+ // src/atoms/InputAtom.tsx
2695
+ import { jsx as jsx45, jsxs as jsxs20 } from "react/jsx-runtime";
2696
+ var InputAtom = ({
2697
+ inputType,
2698
+ label,
2699
+ placeholder,
2700
+ defaultValue,
2701
+ required,
2702
+ disabled,
2703
+ options,
2704
+ config,
2705
+ className
2706
+ }) => {
2707
+ const containerClass = cn("flex flex-col gap-1.5 w-full", className);
2708
+ const renderLabel = () => {
2709
+ if (!label) return null;
2710
+ return /* @__PURE__ */ jsxs20(Label, { className: "text-xs font-bold text-gray-400 uppercase tracking-widest pl-1", children: [
2711
+ label,
2712
+ " ",
2713
+ required && /* @__PURE__ */ jsx45("span", { className: "text-destructive", children: "*" })
2714
+ ] });
2715
+ };
2716
+ const renderInput = () => {
2717
+ switch (inputType) {
2718
+ case "textarea":
2719
+ return /* @__PURE__ */ jsx45(
2720
+ Textarea,
2721
+ {
2722
+ placeholder,
2723
+ defaultValue,
2724
+ disabled,
2725
+ rows: config?.rows || 3
2726
+ }
2727
+ );
2728
+ case "select":
2729
+ return /* @__PURE__ */ jsxs20(Select, { defaultValue, disabled, children: [
2730
+ /* @__PURE__ */ jsx45(SelectTrigger, { children: /* @__PURE__ */ jsx45(SelectValue, { placeholder: placeholder || "Select option" }) }),
2731
+ /* @__PURE__ */ jsx45(SelectContent, { children: options?.map((opt) => /* @__PURE__ */ jsx45(SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
2732
+ ] });
2733
+ case "slider":
2734
+ return /* @__PURE__ */ jsx45("div", { className: "pt-4 pb-2", children: /* @__PURE__ */ jsx45(
2735
+ Slider,
2736
+ {
2737
+ defaultValue: [defaultValue || config?.min || 0],
2738
+ max: config?.max || 100,
2739
+ min: config?.min || 0,
2740
+ step: config?.step || 1,
2741
+ disabled
2742
+ }
2743
+ ) });
2744
+ case "checkbox":
2745
+ return /* @__PURE__ */ jsxs20("div", { className: "flex items-center space-x-2 py-2", children: [
2746
+ /* @__PURE__ */ jsx45(
2747
+ Checkbox,
2748
+ {
2749
+ id: label,
2750
+ defaultChecked: defaultValue,
2751
+ disabled
2752
+ }
2753
+ ),
2754
+ /* @__PURE__ */ jsx45(
2755
+ "label",
2756
+ {
2757
+ htmlFor: label,
2758
+ className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
2759
+ children: label
2760
+ }
2761
+ )
2762
+ ] });
2763
+ case "switch":
2764
+ return /* @__PURE__ */ jsxs20("div", { className: "flex items-center space-x-2 py-2", children: [
2765
+ /* @__PURE__ */ jsx45(
2766
+ Switch,
2767
+ {
2768
+ id: label,
2769
+ defaultChecked: defaultValue,
2770
+ disabled
2771
+ }
2772
+ ),
2773
+ /* @__PURE__ */ jsx45(Label, { htmlFor: label, children: label })
2774
+ ] });
2775
+ case "radio":
2776
+ return /* @__PURE__ */ jsx45(RadioGroup, { defaultValue, disabled, children: options?.map((opt) => /* @__PURE__ */ jsxs20("div", { className: "flex items-center space-x-2", children: [
2777
+ /* @__PURE__ */ jsx45(
2778
+ RadioGroupItem,
2779
+ {
2780
+ value: opt.value,
2781
+ id: `${label}-${opt.value}`
2782
+ }
2783
+ ),
2784
+ /* @__PURE__ */ jsx45(Label, { htmlFor: `${label}-${opt.value}`, children: opt.label })
2785
+ ] }, opt.value)) });
2786
+ case "otp":
2787
+ return /* @__PURE__ */ jsx45(
2788
+ InputOTP,
2789
+ {
2790
+ maxLength: config?.maxLength || 6,
2791
+ disabled,
2792
+ defaultValue,
2793
+ children: /* @__PURE__ */ jsx45(InputOTPGroup, { children: Array.from({ length: config?.maxLength || 6 }).map((_, i) => /* @__PURE__ */ jsx45(InputOTPSlot, { index: i }, i)) })
2794
+ }
2795
+ );
2796
+ default:
2797
+ return /* @__PURE__ */ jsx45(
2798
+ Input,
2799
+ {
2800
+ type: inputType,
2801
+ placeholder,
2802
+ defaultValue,
2803
+ disabled,
2804
+ required
2805
+ }
2806
+ );
2807
+ }
2808
+ };
2809
+ return /* @__PURE__ */ jsxs20("div", { className: containerClass, children: [
2810
+ inputType !== "checkbox" && inputType !== "switch" && renderLabel(),
2811
+ renderInput()
2812
+ ] });
2813
+ };
2814
+
2815
+ // src/atoms/BadgeAtom.tsx
2816
+ import { jsx as jsx46 } from "react/jsx-runtime";
2817
+ var BadgeAtom = ({
2818
+ label,
2819
+ variant = "default",
2820
+ className
2821
+ }) => {
2822
+ const customVariants = {
2823
+ purple: "bg-purple50 text-purple700 border-purple100 hover:bg-purple100",
2824
+ green: "bg-green-50 text-green-700 border-green-100 hover:bg-green-100"
2825
+ };
2826
+ const isCustom = ["purple", "green"].includes(variant || "");
2827
+ const shadcnVariant = isCustom ? "outline" : variant;
2828
+ const customClass = isCustom ? customVariants[variant] : "";
2829
+ return /* @__PURE__ */ jsx46(Badge, { variant: shadcnVariant, className: cn(customClass, className), children: label });
2830
+ };
2831
+
2832
+ // src/atoms/AvatarAtom.tsx
2833
+ import { jsx as jsx47, jsxs as jsxs21 } from "react/jsx-runtime";
2834
+ var AvatarAtom = ({
2835
+ src,
2836
+ fallback,
2837
+ alt,
2838
+ className
2839
+ }) => {
2840
+ return /* @__PURE__ */ jsxs21(Avatar, { className: cn("h-10 w-10", className), children: [
2841
+ src && /* @__PURE__ */ jsx47(AvatarImage, { src, alt }),
2842
+ /* @__PURE__ */ jsx47(AvatarFallback, { className: "bg-purple50 text-purple600 font-bold uppercase", children: fallback })
2843
+ ] });
2844
+ };
2845
+
2846
+ // src/atoms/TabsAtom.tsx
2847
+ import React39 from "react";
2848
+ import { jsx as jsx48, jsxs as jsxs22 } from "react/jsx-runtime";
2849
+ var TabsAtom = ({
2850
+ defaultValue,
2851
+ tabs,
2852
+ className,
2853
+ renderComponent
2854
+ }) => {
2855
+ return /* @__PURE__ */ jsxs22(Tabs, { defaultValue, className: cn("w-full", className), children: [
2856
+ /* @__PURE__ */ jsx48(TabsList, { className: "bg-gray-100/50 p-1 rounded-xl", children: tabs.map((tab) => /* @__PURE__ */ jsx48(
2857
+ TabsTrigger,
2858
+ {
2859
+ value: tab.value,
2860
+ className: "rounded-lg data-[state=active]:bg-white data-[state=active]:shadow-sm",
2861
+ children: tab.label
2862
+ },
2863
+ tab.value
2864
+ )) }),
2865
+ tabs.map((tab) => /* @__PURE__ */ jsx48(TabsContent, { value: tab.value, className: "mt-4", children: tab.content.map((child) => /* @__PURE__ */ jsx48(React39.Fragment, { children: renderComponent(child) }, child.id)) }, tab.value))
2866
+ ] });
2867
+ };
2868
+
2869
+ // src/atoms/AccordionAtom.tsx
2870
+ import React40 from "react";
2871
+ import { jsx as jsx49, jsxs as jsxs23 } from "react/jsx-runtime";
2872
+ var AccordionAtom = ({
2873
+ items,
2874
+ className,
2875
+ renderComponent
2876
+ }) => {
2877
+ return /* @__PURE__ */ jsx49(Accordion, { type: "single", collapsible: true, className: cn("w-full", className), children: items.map((item) => /* @__PURE__ */ jsxs23(
2878
+ AccordionItem,
2879
+ {
2880
+ value: item.value,
2881
+ className: "border-gray-100",
2882
+ children: [
2883
+ /* @__PURE__ */ jsx49(AccordionTrigger, { className: "text-sm font-semibold hover:no-underline hover:text-purple600 py-4", children: item.trigger }),
2884
+ /* @__PURE__ */ jsx49(AccordionContent, { children: /* @__PURE__ */ jsx49("div", { className: "pt-2 pb-4", children: item.content.map((child) => /* @__PURE__ */ jsx49(React40.Fragment, { children: renderComponent(child) }, child.id)) }) })
2885
+ ]
2886
+ },
2887
+ item.value
2888
+ )) });
2889
+ };
2890
+
2891
+ // src/atoms/ProgressAtom.tsx
2892
+ import { jsx as jsx50 } from "react/jsx-runtime";
2893
+ var ProgressAtom = ({
2894
+ value,
2895
+ className
2896
+ }) => {
2897
+ return /* @__PURE__ */ jsx50("div", { className: cn("w-full py-2", className), children: /* @__PURE__ */ jsx50(Progress, { value, className: "h-2 bg-gray-100" }) });
2898
+ };
2899
+
2900
+ // src/atoms/SkeletonAtom.tsx
2901
+ import { jsx as jsx51 } from "react/jsx-runtime";
2902
+ var SkeletonAtom = ({
2903
+ shape = "rect",
2904
+ width,
2905
+ height,
2906
+ className
2907
+ }) => {
2908
+ return /* @__PURE__ */ jsx51(
2909
+ Skeleton,
2910
+ {
2911
+ className: cn(
2912
+ shape === "circle" ? "rounded-full" : "rounded-md",
2913
+ "bg-gray-100",
2914
+ className
2915
+ ),
2916
+ style: { width, height }
2917
+ }
2918
+ );
2919
+ };
2920
+
2921
+ // src/atoms/AlertAtom.tsx
2922
+ import { AlertCircle, CheckCircle2, Info, AlertTriangle } from "lucide-react";
2923
+ import { jsx as jsx52, jsxs as jsxs24 } from "react/jsx-runtime";
2924
+ var AlertAtom = ({
2925
+ title,
2926
+ description,
2927
+ variant = "default",
2928
+ className
2929
+ }) => {
2930
+ const IconMap = {
2931
+ default: Info,
2932
+ destructive: AlertCircle,
2933
+ warning: AlertTriangle,
2934
+ info: Info,
2935
+ success: CheckCircle2
2936
+ };
2937
+ const Icon2 = IconMap[variant] || Info;
2938
+ const variantMap = {
2939
+ warning: "border-amber-200 bg-amber-50 text-amber-900 [&>svg]:text-amber-600",
2940
+ info: "border-blue-200 bg-blue-50 text-blue-900 [&>svg]:text-blue-600",
2941
+ success: "border-green-200 bg-green-50 text-green-900 [&>svg]:text-green-600"
2942
+ };
2943
+ const customClass = variantMap[variant] || "";
2944
+ const shadcnVariant = ["warning", "info", "success"].includes(variant) ? "default" : variant;
2945
+ return /* @__PURE__ */ jsxs24(
2946
+ Alert,
2947
+ {
2948
+ variant: shadcnVariant,
2949
+ className: cn("rounded-2xl", customClass, className),
2950
+ children: [
2951
+ /* @__PURE__ */ jsx52(Icon2, { className: "h-4 w-4" }),
2952
+ /* @__PURE__ */ jsx52(AlertTitle, { className: "font-bold", children: title }),
2953
+ description && /* @__PURE__ */ jsx52(AlertDescription, { children: description })
2954
+ ]
2955
+ }
2956
+ );
2957
+ };
2958
+
2959
+ // src/atoms/SeparatorAtom.tsx
2960
+ import { jsx as jsx53 } from "react/jsx-runtime";
2961
+ var SeparatorAtom = ({
2962
+ orientation = "horizontal",
2963
+ className
2964
+ }) => {
2965
+ return /* @__PURE__ */ jsx53(
2966
+ Separator2,
2967
+ {
2968
+ orientation,
2969
+ className: cn("bg-gray-100", className)
2970
+ }
2971
+ );
2972
+ };
2973
+
2974
+ // src/atoms/TableAtom.tsx
2975
+ import { jsx as jsx54, jsxs as jsxs25 } from "react/jsx-runtime";
2976
+ var TableAtom = ({
2977
+ headers,
2978
+ rows,
2979
+ className
2980
+ }) => {
2981
+ return /* @__PURE__ */ jsx54(
2982
+ "div",
2983
+ {
2984
+ className: cn(
2985
+ "rounded-2xl border border-gray-100 overflow-hidden bg-white",
2986
+ className
2987
+ ),
2988
+ children: /* @__PURE__ */ jsxs25(Table, { children: [
2989
+ /* @__PURE__ */ jsx54(TableHeader, { className: "bg-gray-50/50", children: /* @__PURE__ */ jsx54(TableRow, { children: headers.map((header, i) => /* @__PURE__ */ jsx54(
2990
+ TableHead,
2991
+ {
2992
+ className: "text-xs font-bold text-gray-400 uppercase tracking-widest px-6 py-4",
2993
+ children: header
2994
+ },
2995
+ i
2996
+ )) }) }),
2997
+ /* @__PURE__ */ jsx54(TableBody, { children: rows.map((row, i) => /* @__PURE__ */ jsx54(
2998
+ TableRow,
2999
+ {
3000
+ className: "hover:bg-purple-50/30 transition-colors border-gray-50",
3001
+ children: row.map((cell, j) => /* @__PURE__ */ jsx54(
3002
+ TableCell,
3003
+ {
3004
+ className: "text-sm text-gray-700 px-6 py-4 font-medium",
3005
+ children: cell
3006
+ },
3007
+ j
3008
+ ))
3009
+ },
3010
+ i
3011
+ )) })
3012
+ ] })
3013
+ }
3014
+ );
3015
+ };
3016
+
3017
+ // src/atoms/ScrollAreaAtom.tsx
3018
+ import React41 from "react";
3019
+ import { jsx as jsx55, jsxs as jsxs26 } from "react/jsx-runtime";
3020
+ var ScrollAreaAtom = ({
3021
+ maxHeight = "300px",
3022
+ children,
3023
+ className,
3024
+ renderComponent
3025
+ }) => {
3026
+ return /* @__PURE__ */ jsxs26(
3027
+ ScrollArea,
3028
+ {
3029
+ className: cn("rounded-xl border", className),
3030
+ style: { height: maxHeight },
3031
+ children: [
3032
+ /* @__PURE__ */ jsx55("div", { className: "p-4", children: children.map((child) => /* @__PURE__ */ jsx55(React41.Fragment, { children: renderComponent(child) }, child.id)) }),
3033
+ /* @__PURE__ */ jsx55(ScrollBar, { orientation: "vertical" })
3034
+ ]
3035
+ }
3036
+ );
3037
+ };
3038
+
3039
+ // src/atoms/CarouselAtom.tsx
3040
+ import React42 from "react";
3041
+ import { jsx as jsx56, jsxs as jsxs27 } from "react/jsx-runtime";
3042
+ var CarouselAtom = ({
3043
+ items,
3044
+ className,
3045
+ renderComponent
3046
+ }) => {
3047
+ return /* @__PURE__ */ jsxs27(Carousel, { className: cn("w-full max-w-xs mx-auto", className), children: [
3048
+ /* @__PURE__ */ jsx56(CarouselContent, { children: items.map((slide, index) => /* @__PURE__ */ jsx56(CarouselItem, { children: /* @__PURE__ */ jsx56("div", { className: "p-1", children: slide.map((child) => /* @__PURE__ */ jsx56(React42.Fragment, { children: renderComponent(child) }, child.id)) }) }, index)) }),
3049
+ /* @__PURE__ */ jsx56(CarouselPrevious, {}),
3050
+ /* @__PURE__ */ jsx56(CarouselNext, {})
3051
+ ] });
3052
+ };
3053
+
3054
+ // src/atoms/AspectRatioAtom.tsx
3055
+ import React43 from "react";
3056
+ import { jsx as jsx57 } from "react/jsx-runtime";
3057
+ var AspectRatioAtom = ({
3058
+ ratio = 16 / 9,
3059
+ children,
3060
+ className,
3061
+ renderComponent
3062
+ }) => {
3063
+ return /* @__PURE__ */ jsx57("div", { className: cn("w-full", className), children: /* @__PURE__ */ jsx57(AspectRatio, { ratio, children: children.map((child) => /* @__PURE__ */ jsx57(React43.Fragment, { children: renderComponent(child) }, child.id)) }) });
3064
+ };
3065
+
3066
+ // src/atoms/CollapsibleAtom.tsx
3067
+ import React44 from "react";
3068
+ import { jsx as jsx58, jsxs as jsxs28 } from "react/jsx-runtime";
3069
+ var CollapsibleAtom = ({
3070
+ trigger,
3071
+ content,
3072
+ defaultOpen = false,
3073
+ className,
3074
+ renderComponent
3075
+ }) => {
3076
+ return /* @__PURE__ */ jsxs28(
3077
+ Collapsible,
3078
+ {
3079
+ defaultOpen,
3080
+ className: cn("w-full space-y-2", className),
3081
+ children: [
3082
+ /* @__PURE__ */ jsx58(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsx58("div", { className: "flex items-center justify-between space-x-4 px-4 py-2 bg-gray-50 rounded-lg cursor-pointer hover:bg-gray-100 transition-colors", children: trigger.map((child) => /* @__PURE__ */ jsx58(React44.Fragment, { children: renderComponent(child) }, child.id)) }) }),
3083
+ /* @__PURE__ */ jsx58(CollapsibleContent2, { className: "space-y-2", children: content.map((child) => /* @__PURE__ */ jsx58(React44.Fragment, { children: renderComponent(child) }, child.id)) })
3084
+ ]
3085
+ }
3086
+ );
3087
+ };
3088
+
3089
+ // src/atoms/TooltipAtom.tsx
3090
+ import React45 from "react";
3091
+ import { jsx as jsx59, jsxs as jsxs29 } from "react/jsx-runtime";
3092
+ var TooltipAtom = ({
3093
+ content,
3094
+ children,
3095
+ className,
3096
+ renderComponent
3097
+ }) => {
3098
+ return /* @__PURE__ */ jsx59(TooltipProvider, { children: /* @__PURE__ */ jsxs29(Tooltip, { children: [
3099
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59("div", { className: cn("inline-block", className), children: children.map((child) => /* @__PURE__ */ jsx59(React45.Fragment, { children: renderComponent(child) }, child.id)) }) }),
3100
+ /* @__PURE__ */ jsx59(TooltipContent, { className: "bg-gray-900 text-white border-none rounded-lg shadow-xl px-3 py-1.5 text-xs", children: content })
3101
+ ] }) });
3102
+ };
3103
+
3104
+ // src/atoms/PopoverAtom.tsx
3105
+ import React46 from "react";
3106
+ import { jsx as jsx60, jsxs as jsxs30 } from "react/jsx-runtime";
3107
+ var PopoverAtom = ({
3108
+ trigger,
3109
+ content,
3110
+ className,
3111
+ renderComponent
3112
+ }) => {
3113
+ return /* @__PURE__ */ jsxs30(Popover, { children: [
3114
+ /* @__PURE__ */ jsx60(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx60("div", { className: cn("inline-block cursor-pointer", className), children: trigger.map((child) => /* @__PURE__ */ jsx60(React46.Fragment, { children: renderComponent(child) }, child.id)) }) }),
3115
+ /* @__PURE__ */ jsx60(PopoverContent, { className: "w-80 rounded-2xl shadow-2xl border-gray-100 p-4 bg-white/95 backdrop-blur-sm", children: content.map((child) => /* @__PURE__ */ jsx60(React46.Fragment, { children: renderComponent(child) }, child.id)) })
3116
+ ] });
3117
+ };
3118
+
3119
+ // src/atoms/DialogAtom.tsx
3120
+ import React47 from "react";
3121
+ import { jsx as jsx61, jsxs as jsxs31 } from "react/jsx-runtime";
3122
+ var DialogAtom = ({
3123
+ title,
3124
+ description,
3125
+ trigger,
3126
+ children,
3127
+ footer,
3128
+ className,
3129
+ renderComponent
3130
+ }) => {
3131
+ return /* @__PURE__ */ jsxs31(Dialog, { children: [
3132
+ /* @__PURE__ */ jsx61(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx61("div", { className: cn("inline-block cursor-pointer", className), children: trigger.map((child) => /* @__PURE__ */ jsx61(React47.Fragment, { children: renderComponent(child) }, child.id)) }) }),
3133
+ /* @__PURE__ */ jsxs31(DialogContent, { className: "sm:max-w-[425px] rounded-3xl p-6 bg-white/95 backdrop-blur-md shadow-3xl border-gray-100", children: [
3134
+ /* @__PURE__ */ jsxs31(DialogHeader, { children: [
3135
+ /* @__PURE__ */ jsx61(DialogTitle, { className: "text-xl font-bold bg-gradient-to-r from-purple600 to-indigo-600 bg-clip-text text-transparent", children: title }),
3136
+ description && /* @__PURE__ */ jsx61(DialogDescription, { className: "text-gray-500 font-medium pt-1", children: description })
3137
+ ] }),
3138
+ /* @__PURE__ */ jsx61("div", { className: "py-4", children: children.map((child) => /* @__PURE__ */ jsx61(React47.Fragment, { children: renderComponent(child) }, child.id)) }),
3139
+ footer && /* @__PURE__ */ jsx61(DialogFooter, { className: "pt-2", children: footer.map((child) => /* @__PURE__ */ jsx61(React47.Fragment, { children: renderComponent(child) }, child.id)) })
3140
+ ] })
3141
+ ] });
3142
+ };
3143
+
3144
+ // src/atoms/SheetAtom.tsx
3145
+ import React48 from "react";
3146
+ import { jsx as jsx62, jsxs as jsxs32 } from "react/jsx-runtime";
3147
+ var SheetAtom = ({
3148
+ side = "right",
3149
+ title,
3150
+ description,
3151
+ trigger,
3152
+ children,
3153
+ footer,
3154
+ className,
3155
+ renderComponent
3156
+ }) => {
3157
+ return /* @__PURE__ */ jsxs32(Sheet, { children: [
3158
+ /* @__PURE__ */ jsx62(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsx62("div", { className: cn("inline-block cursor-pointer", className), children: trigger.map((child) => /* @__PURE__ */ jsx62(React48.Fragment, { children: renderComponent(child) }, child.id)) }) }),
3159
+ /* @__PURE__ */ jsxs32(
3160
+ SheetContent,
3161
+ {
3162
+ side,
3163
+ className: "bg-white/95 backdrop-blur-md border-l-gray-100 shadow-2xl p-6",
3164
+ children: [
3165
+ /* @__PURE__ */ jsxs32(SheetHeader, { children: [
3166
+ /* @__PURE__ */ jsx62(SheetTitle, { className: "text-xl font-bold text-gray-900", children: title }),
3167
+ description && /* @__PURE__ */ jsx62(SheetDescription, { className: "text-gray-500 font-medium", children: description })
3168
+ ] }),
3169
+ /* @__PURE__ */ jsx62("div", { className: "py-8", children: children.map((child) => /* @__PURE__ */ jsx62(React48.Fragment, { children: renderComponent(child) }, child.id)) }),
3170
+ footer && /* @__PURE__ */ jsx62(SheetFooter, { className: "absolute bottom-6 left-6 right-6", children: footer.map((child) => /* @__PURE__ */ jsx62(React48.Fragment, { children: renderComponent(child) }, child.id)) })
3171
+ ]
3172
+ }
3173
+ )
3174
+ ] });
3175
+ };
3176
+
3177
+ // src/atoms/AlertDialogAtom.tsx
3178
+ import React49 from "react";
3179
+ import { jsx as jsx63, jsxs as jsxs33 } from "react/jsx-runtime";
3180
+ var AlertDialogAtom = ({
3181
+ title,
3182
+ description,
3183
+ trigger,
3184
+ confirmLabel = "Continue",
3185
+ cancelLabel = "Cancel",
3186
+ action,
3187
+ onAction,
3188
+ className,
3189
+ renderComponent
3190
+ }) => {
3191
+ return /* @__PURE__ */ jsxs33(AlertDialog, { children: [
3192
+ /* @__PURE__ */ jsx63(AlertDialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx63("div", { className: cn("inline-block cursor-pointer", className), children: trigger.map((child) => /* @__PURE__ */ jsx63(React49.Fragment, { children: renderComponent(child) }, child.id)) }) }),
3193
+ /* @__PURE__ */ jsxs33(AlertDialogContent, { className: "rounded-3xl p-6 bg-white shadow-3xl border-gray-100", children: [
3194
+ /* @__PURE__ */ jsxs33(AlertDialogHeader, { children: [
3195
+ /* @__PURE__ */ jsx63(AlertDialogTitle, { className: "text-lg font-bold text-gray-900", children: title }),
3196
+ /* @__PURE__ */ jsx63(AlertDialogDescription, { className: "text-gray-500 font-medium", children: description })
3197
+ ] }),
3198
+ /* @__PURE__ */ jsxs33(AlertDialogFooter, { className: "gap-2 sm:gap-0", children: [
3199
+ /* @__PURE__ */ jsx63(AlertDialogCancel, { className: "rounded-full border-gray-200 hover:bg-gray-50 font-semibold", children: cancelLabel }),
3200
+ /* @__PURE__ */ jsx63(
3201
+ AlertDialogAction,
3202
+ {
3203
+ onClick: () => action && onAction?.(action),
3204
+ className: "rounded-full bg-purple500 hover:bg-purple600 text-white font-semibold transition-all shadow-md hover:shadow-lg",
3205
+ children: confirmLabel
3206
+ }
3207
+ )
3208
+ ] })
3209
+ ] })
3210
+ ] });
3211
+ };
3212
+
3213
+ // src/atoms/BreadcrumbAtom.tsx
3214
+ import React50 from "react";
3215
+ import { jsx as jsx64, jsxs as jsxs34 } from "react/jsx-runtime";
3216
+ var BreadcrumbAtom = ({
3217
+ items,
3218
+ className
3219
+ }) => {
3220
+ return /* @__PURE__ */ jsx64(Breadcrumb, { className, children: /* @__PURE__ */ jsx64(BreadcrumbList, { children: items.map((item, index) => /* @__PURE__ */ jsxs34(React50.Fragment, { children: [
3221
+ /* @__PURE__ */ jsx64(BreadcrumbItem, { children: item.isCurrent ? /* @__PURE__ */ jsx64(BreadcrumbPage, { children: item.label }) : /* @__PURE__ */ jsx64(BreadcrumbLink, { href: item.href || "#", children: item.label }) }),
3222
+ index < items.length - 1 && /* @__PURE__ */ jsx64(BreadcrumbSeparator, {})
3223
+ ] }, index)) }) });
3224
+ };
3225
+
3226
+ // src/atoms/SpinnerAtom.tsx
3227
+ import { Loader2 as Loader22 } from "lucide-react";
3228
+ import { jsx as jsx65 } from "react/jsx-runtime";
3229
+ var SpinnerAtom = ({
3230
+ size = "md",
3231
+ className
3232
+ }) => {
3233
+ const sizeMap = {
3234
+ sm: "h-4 w-4",
3235
+ md: "h-6 w-6",
3236
+ lg: "h-8 w-8",
3237
+ xl: "h-12 w-12"
3238
+ };
3239
+ return /* @__PURE__ */ jsx65(
3240
+ Loader22,
3241
+ {
3242
+ className: cn(
3243
+ "animate-spin text-purple500",
3244
+ sizeMap[size] || sizeMap.md,
3245
+ className
3246
+ )
3247
+ }
3248
+ );
3249
+ };
3250
+
3251
+ // src/atoms/CalendarAtom.tsx
3252
+ import { jsx as jsx66 } from "react/jsx-runtime";
3253
+ var CalendarAtom = ({
3254
+ mode = "single",
3255
+ selectedDate,
3256
+ className
3257
+ }) => {
3258
+ const date = selectedDate ? new Date(selectedDate) : void 0;
3259
+ return /* @__PURE__ */ jsx66(
3260
+ "div",
3261
+ {
3262
+ className: cn(
3263
+ "p-3 bg-white rounded-3xl border border-gray-100 shadow-sm inline-block",
3264
+ className
3265
+ ),
3266
+ children: /* @__PURE__ */ jsx66(Calendar, { mode, selected: date, className: "rounded-xl" })
3267
+ }
3268
+ );
3269
+ };
3270
+
3271
+ // src/atoms/PaginationAtom.tsx
3272
+ import { jsx as jsx67, jsxs as jsxs35 } from "react/jsx-runtime";
3273
+ var PaginationAtom = ({
3274
+ currentPage,
3275
+ totalPages,
3276
+ hasNext = true,
3277
+ hasPrev = true,
3278
+ className
3279
+ }) => {
3280
+ return /* @__PURE__ */ jsx67(Pagination, { className, children: /* @__PURE__ */ jsxs35(PaginationContent, { children: [
3281
+ hasPrev && /* @__PURE__ */ jsx67(PaginationItem, { children: /* @__PURE__ */ jsx67(PaginationPrevious, { href: "#" }) }),
3282
+ /* @__PURE__ */ jsx67(PaginationItem, { children: /* @__PURE__ */ jsx67(PaginationLink, { href: "#", isActive: true, children: currentPage }) }),
3283
+ totalPages > currentPage && /* @__PURE__ */ jsx67(PaginationItem, { children: /* @__PURE__ */ jsx67(PaginationEllipsis, {}) }),
3284
+ hasNext && /* @__PURE__ */ jsx67(PaginationItem, { children: /* @__PURE__ */ jsx67(PaginationNext, { href: "#" }) })
3285
+ ] }) });
3286
+ };
3287
+
3288
+ // src/atoms/CommandAtom.tsx
3289
+ import React51 from "react";
3290
+ import { jsx as jsx68, jsxs as jsxs36 } from "react/jsx-runtime";
3291
+ var CommandAtom = ({
3292
+ placeholder = "Search...",
3293
+ groups,
3294
+ className
3295
+ }) => {
3296
+ return /* @__PURE__ */ jsx68(
3297
+ "div",
3298
+ {
3299
+ className: cn(
3300
+ "rounded-2xl border border-gray-100 shadow-lg overflow-hidden bg-white max-w-[400px]",
3301
+ className
3302
+ ),
3303
+ children: /* @__PURE__ */ jsxs36(Command, { children: [
3304
+ /* @__PURE__ */ jsx68(CommandInput, { placeholder }),
3305
+ /* @__PURE__ */ jsxs36(CommandList, { children: [
3306
+ /* @__PURE__ */ jsx68(CommandEmpty, { children: "No results found." }),
3307
+ groups.map((group, i) => /* @__PURE__ */ jsxs36(React51.Fragment, { children: [
3308
+ /* @__PURE__ */ jsx68(CommandGroup, { heading: group.heading, children: group.items.map((item, j) => /* @__PURE__ */ jsx68(CommandItem, { value: item.value, children: /* @__PURE__ */ jsx68("span", { children: item.label }) }, j)) }),
3309
+ i < groups.length - 1 && /* @__PURE__ */ jsx68(CommandSeparator, {})
3310
+ ] }, i))
3311
+ ] })
3312
+ ] })
3313
+ }
3314
+ );
3315
+ };
3316
+
3317
+ // src/molecules/generic/EditableField/EditableField.tsx
3318
+ import React52, { useState as useState2, useEffect as useEffect3, useRef as useRef2 } from "react";
3319
+ import { Check as Check6, X as X3, Pencil, Loader2 as Loader23 } from "lucide-react";
3320
+ import { jsx as jsx69, jsxs as jsxs37 } from "react/jsx-runtime";
3321
+ var EditableField = React52.memo(
3322
+ ({
3323
+ label,
3324
+ value,
3325
+ type,
3326
+ isEditing: isEditingProp,
3327
+ onEdit,
3328
+ onSave,
3329
+ onCancel,
3330
+ isSaving = false,
3331
+ isChanged = false,
3332
+ config = {},
3333
+ className,
3334
+ renderDisplay,
3335
+ renderEdit
3336
+ }) => {
3337
+ const [localValue, setLocalValue] = useState2(value);
3338
+ const inputRef = useRef2(null);
3339
+ useEffect3(() => {
3340
+ setLocalValue(value);
3341
+ }, [value, isEditingProp]);
3342
+ useEffect3(() => {
3343
+ if (isEditingProp) {
3344
+ setTimeout(() => inputRef.current?.focus(), 0);
3345
+ }
3346
+ }, [isEditingProp]);
3347
+ const handleSave = () => {
3348
+ onSave?.(localValue);
3349
+ };
3350
+ const handleKeyDown = (e) => {
3351
+ if (e.key === "Enter" && !e.shiftKey && type !== "textarea") {
3352
+ e.preventDefault();
3353
+ handleSave();
3354
+ } else if (e.key === "Escape") {
3355
+ onCancel?.();
3356
+ }
3357
+ };
3358
+ const renderInput = () => {
3359
+ if (renderEdit) {
3360
+ return renderEdit(localValue, setLocalValue);
3361
+ }
3362
+ switch (type) {
3363
+ case "textarea":
3364
+ return /* @__PURE__ */ jsx69(
3365
+ Textarea,
3366
+ {
3367
+ ref: inputRef,
3368
+ value: localValue || "",
3369
+ onChange: (e) => setLocalValue(e.target.value),
3370
+ onKeyDown: handleKeyDown,
3371
+ placeholder: config.placeholder,
3372
+ rows: config.rows || 3,
3373
+ className: "min-h-[80px] resize-none"
3374
+ }
3375
+ );
3376
+ case "select":
3377
+ return /* @__PURE__ */ jsxs37(
3378
+ Select,
3379
+ {
3380
+ value: localValue?.toString(),
3381
+ onValueChange: (val) => setLocalValue(val),
3382
+ children: [
3383
+ /* @__PURE__ */ jsx69(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx69(
3384
+ SelectValue,
3385
+ {
3386
+ placeholder: config.placeholder || "Select an option"
3387
+ }
3388
+ ) }),
3389
+ /* @__PURE__ */ jsx69(SelectContent, { children: config.options?.map((opt) => {
3390
+ const label2 = typeof opt === "string" ? opt : opt.label;
3391
+ const val = typeof opt === "string" ? opt : opt.value;
3392
+ return /* @__PURE__ */ jsx69(SelectItem, { value: val, children: label2 }, val);
3393
+ }) })
3394
+ ]
3395
+ }
3396
+ );
3397
+ case "slider":
3398
+ return /* @__PURE__ */ jsxs37("div", { className: "pt-6 pb-2 px-2", children: [
3399
+ /* @__PURE__ */ jsx69(
3400
+ Slider,
3401
+ {
3402
+ defaultValue: [localValue?.min || 0, localValue?.max || 100],
3403
+ max: config.sliderConfig?.max || 100,
3404
+ min: config.sliderConfig?.min || 0,
3405
+ step: config.sliderConfig?.step || 1,
3406
+ onValueChange: ([min, max]) => setLocalValue({ min, max })
3407
+ }
3408
+ ),
3409
+ config.sliderConfig?.formatValue && /* @__PURE__ */ jsx69("div", { className: "mt-2 text-xs text-muted-foreground text-center", children: config.sliderConfig.formatValue(localValue) })
3410
+ ] });
3411
+ case "number":
3412
+ return /* @__PURE__ */ jsx69(
3413
+ Input,
3414
+ {
3415
+ ref: inputRef,
3416
+ type: "number",
3417
+ value: localValue || "",
3418
+ onChange: (e) => setLocalValue(e.target.value),
3419
+ onKeyDown: handleKeyDown,
3420
+ min: config.numberConfig?.min,
3421
+ max: config.numberConfig?.max,
3422
+ step: config.numberConfig?.step
3423
+ }
3424
+ );
3425
+ default:
3426
+ return /* @__PURE__ */ jsx69(
3427
+ Input,
3428
+ {
3429
+ ref: inputRef,
3430
+ type: "text",
3431
+ value: localValue || "",
3432
+ onChange: (e) => setLocalValue(e.target.value),
3433
+ onKeyDown: handleKeyDown,
3434
+ placeholder: config.placeholder
3435
+ }
3436
+ );
3437
+ }
3438
+ };
3439
+ const formattedValue = () => {
3440
+ if (renderDisplay) return renderDisplay(value);
3441
+ if (type === "slider") {
3442
+ return config.sliderConfig?.formatValue ? config.sliderConfig.formatValue(value) : `${value?.min} - ${value?.max}`;
3443
+ }
3444
+ if (!value)
3445
+ return /* @__PURE__ */ jsx69("span", { className: "text-muted-foreground italic", children: "Not set" });
3446
+ return value.toString();
3447
+ };
3448
+ return /* @__PURE__ */ jsxs37("div", { className: cn("group flex flex-col gap-1.5 py-2", className), children: [
3449
+ /* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-between", children: [
3450
+ /* @__PURE__ */ jsx69(Label, { className: "text-xs font-medium text-gray500 uppercase tracking-tight", children: label }),
3451
+ isChanged && !isEditingProp && /* @__PURE__ */ jsx69(
3452
+ "div",
3453
+ {
3454
+ className: "w-1.5 h-1.5 rounded-full bg-amber-500",
3455
+ title: "Unsaved changes"
3456
+ }
3457
+ )
3458
+ ] }),
3459
+ isEditingProp ? /* @__PURE__ */ jsxs37("div", { className: "flex flex-col gap-2", children: [
3460
+ renderInput(),
3461
+ /* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-end gap-2", children: [
3462
+ /* @__PURE__ */ jsx69(
3463
+ Button,
3464
+ {
3465
+ size: "icon",
3466
+ variant: "outline",
3467
+ className: "h-8 w-8 text-destructive border-destructive/20 hover:bg-destructive/10",
3468
+ onClick: onCancel,
3469
+ disabled: isSaving,
3470
+ children: /* @__PURE__ */ jsx69(X3, { className: "h-4 w-4" })
3471
+ }
3472
+ ),
3473
+ /* @__PURE__ */ jsx69(
3474
+ Button,
3475
+ {
3476
+ size: "icon",
3477
+ className: "h-8 w-8 bg-purple500 hover:bg-purple600 text-white",
3478
+ onClick: handleSave,
3479
+ disabled: isSaving,
3480
+ children: isSaving ? /* @__PURE__ */ jsx69(Loader23, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx69(Check6, { className: "h-4 w-4" })
3481
+ }
3482
+ )
3483
+ ] })
3484
+ ] }) : /* @__PURE__ */ jsxs37(
3485
+ "div",
3486
+ {
3487
+ className: cn(
3488
+ "relative flex items-center justify-between rounded-md px-2 py-1.5 transition-all",
3489
+ "hover:bg-gray-100/50 cursor-pointer border border-transparent hover:border-gray-200"
3490
+ ),
3491
+ onClick: onEdit,
3492
+ children: [
3493
+ /* @__PURE__ */ jsx69("div", { className: "text-sm text-gray-900 font-medium truncate flex-1 leading-relaxed", children: formattedValue() }),
3494
+ /* @__PURE__ */ jsx69(Pencil, { className: "h-3.5 w-3.5 text-gray-400 opacity-0 group-hover:opacity-100 transition-opacity" })
3495
+ ]
3496
+ }
3497
+ )
3498
+ ] });
3499
+ }
3500
+ );
3501
+ EditableField.displayName = "EditableField";
3502
+
3503
+ // src/molecules/generic/ActionButton/ActionButton.tsx
3504
+ import React53, { useState as useState3, useEffect as useEffect4 } from "react";
3505
+ import { Pause, Play, ArrowRight as ArrowRight2, Loader2 as Loader24 } from "lucide-react";
3506
+ import { Fragment as Fragment2, jsx as jsx70, jsxs as jsxs38 } from "react/jsx-runtime";
3507
+ var ActionButton = React53.memo(
3508
+ ({
3509
+ label,
3510
+ secondaryLabel,
3511
+ countdown: countdownProp,
3512
+ isPaused = false,
3513
+ onPause,
3514
+ onProceed,
3515
+ variant = "default",
3516
+ size = "default",
3517
+ disabled = false,
3518
+ isLoading = false,
3519
+ className,
3520
+ showCountdown = true
3521
+ }) => {
3522
+ const [timeLeft, setTimeLeft] = useState3(countdownProp || 0);
3523
+ useEffect4(() => {
3524
+ if (countdownProp !== void 0) {
3525
+ setTimeLeft(countdownProp);
3526
+ }
3527
+ }, [countdownProp]);
3528
+ useEffect4(() => {
3529
+ if (countdownProp === void 0 || countdownProp <= 0 || isPaused || isLoading || disabled) {
3530
+ return;
3531
+ }
3532
+ const timer = setInterval(() => {
3533
+ setTimeLeft((prev) => {
3534
+ if (prev <= 1) {
3535
+ clearInterval(timer);
3536
+ onProceed();
3537
+ return 0;
3538
+ }
3539
+ return prev - 1;
3540
+ });
3541
+ }, 1e3);
3542
+ return () => clearInterval(timer);
3543
+ }, [countdownProp, isPaused, isLoading, disabled, onProceed]);
3544
+ const progress = countdownProp ? timeLeft / countdownProp * 100 : 0;
3545
+ return /* @__PURE__ */ jsxs38("div", { className: cn("inline-flex items-center gap-2", className), children: [
3546
+ /* @__PURE__ */ jsxs38(
3547
+ Button,
3548
+ {
3549
+ variant,
3550
+ size,
3551
+ disabled: disabled || isLoading,
3552
+ onClick: onProceed,
3553
+ className: cn(
3554
+ "relative min-w-[140px] overflow-hidden group transition-all duration-300",
3555
+ "bg-purple500 hover:bg-purple600 text-white font-semibold rounded-full px-6 py-2.5 shadow-md hover:shadow-lg",
3556
+ variant === "outline" && "bg-transparent border-purple500 text-purple500 hover:bg-purple50",
3557
+ isLoading && "opacity-80"
3558
+ ),
3559
+ children: [
3560
+ /* @__PURE__ */ jsx70("div", { className: "relative z-10 flex items-center justify-center gap-2", children: isLoading ? /* @__PURE__ */ jsx70(Loader24, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsxs38(Fragment2, { children: [
3561
+ /* @__PURE__ */ jsx70("span", { children: label }),
3562
+ showCountdown && countdownProp && countdownProp > 0 && !isLoading && /* @__PURE__ */ jsxs38("span", { className: "opacity-70 text-xs bg-white/20 px-1.5 py-0.5 rounded-md tabular-nums min-w-[24px]", children: [
3563
+ timeLeft,
3564
+ "s"
3565
+ ] }),
3566
+ /* @__PURE__ */ jsx70(ArrowRight2, { className: "h-4 w-4 group-hover:translate-x-1 transition-transform" })
3567
+ ] }) }),
3568
+ !isPaused && countdownProp && countdownProp > 0 && /* @__PURE__ */ jsx70(
3569
+ "div",
3570
+ {
3571
+ className: "absolute bottom-0 left-0 h-0.5 bg-white/30 transition-all duration-1000 ease-linear",
3572
+ style: { width: `${progress}%` }
3573
+ }
3574
+ )
3575
+ ]
3576
+ }
3577
+ ),
3578
+ countdownProp !== void 0 && countdownProp > 0 && onPause && /* @__PURE__ */ jsx70(
3579
+ Button,
3580
+ {
3581
+ variant: "ghost",
3582
+ size: "icon",
3583
+ onClick: onPause,
3584
+ className: "h-10 w-10 rounded-full hover:bg-gray-100 text-gray-500",
3585
+ title: isPaused ? "Resume auto-proceed" : "Pause auto-proceed",
3586
+ children: isPaused ? /* @__PURE__ */ jsx70(Play, { className: "h-4 w-4 fill-current" }) : /* @__PURE__ */ jsx70(Pause, { className: "h-4 w-4 fill-current" })
3587
+ }
3588
+ ),
3589
+ secondaryLabel && /* @__PURE__ */ jsx70("span", { className: "text-sm text-gray-500 font-medium italic", children: secondaryLabel })
3590
+ ] });
3591
+ }
3592
+ );
3593
+ ActionButton.displayName = "ActionButton";
3594
+
3595
+ // src/molecules/generic/FormCard/FormCard.tsx
3596
+ import React54 from "react";
3597
+ import { Copy } from "lucide-react";
3598
+ import { jsx as jsx71, jsxs as jsxs39 } from "react/jsx-runtime";
3599
+ var FormCard = React54.memo(
3600
+ ({
3601
+ title,
3602
+ fields,
3603
+ data,
3604
+ editingFields = {},
3605
+ changedFields = {},
3606
+ savingFields = {},
3607
+ onFieldEdit,
3608
+ onFieldSave,
3609
+ onFieldCancel,
3610
+ showTimeline = true,
3611
+ proceedLabel,
3612
+ countdown,
3613
+ isPaused = false,
3614
+ onPause,
3615
+ onProceed,
3616
+ className,
3617
+ footer
3618
+ }) => {
3619
+ const handleCopyAll = () => {
3620
+ const text = fields.map(
3621
+ (f) => `${f.label}: ${typeof data[f.key] === "object" ? JSON.stringify(data[f.key]) : data[f.key]}`
3622
+ ).join("\n");
3623
+ navigator.clipboard.writeText(text);
3624
+ };
3625
+ return /* @__PURE__ */ jsxs39(
3626
+ Card,
3627
+ {
3628
+ className: cn(
3629
+ "w-full rounded-[24px] border border-gray200 bg-white shadow-sm overflow-hidden",
3630
+ className
3631
+ ),
3632
+ children: [
3633
+ /* @__PURE__ */ jsxs39(CardHeader, { className: "flex flex-row items-center justify-between pb-2 space-y-0", children: [
3634
+ /* @__PURE__ */ jsx71(CardTitle, { className: "text-lg font-bold text-gray-900 tracking-tight", children: title }),
3635
+ /* @__PURE__ */ jsx71(
3636
+ "button",
3637
+ {
3638
+ onClick: handleCopyAll,
3639
+ className: "p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-600 transition-colors",
3640
+ title: "Copy all details",
3641
+ children: /* @__PURE__ */ jsx71(Copy, { className: "h-4 w-4" })
3642
+ }
3643
+ )
3644
+ ] }),
3645
+ /* @__PURE__ */ jsx71(CardContent, { className: "pt-2 pb-6", children: /* @__PURE__ */ jsxs39("div", { className: "relative", children: [
3646
+ showTimeline && /* @__PURE__ */ jsx71("div", { className: "absolute left-[7px] top-2 bottom-6 w-0.5 border-l-2 border-dotted border-gray200 pointer-events-none" }),
3647
+ /* @__PURE__ */ jsx71("div", { className: "space-y-4", children: fields.map((field) => /* @__PURE__ */ jsxs39("div", { className: "relative pl-6", children: [
3648
+ showTimeline && /* @__PURE__ */ jsx71(
3649
+ "div",
3650
+ {
3651
+ className: cn(
3652
+ "absolute left-0 top-[18px] w-[14px] h-[14px] -translate-x-1/2 rounded-full border-2 bg-white z-10",
3653
+ changedFields[field.key] ? "border-amber-500" : "border-gray-200"
3654
+ )
3655
+ }
3656
+ ),
3657
+ /* @__PURE__ */ jsx71(
3658
+ EditableField,
3659
+ {
3660
+ label: field.label,
3661
+ value: data[field.key],
3662
+ type: field.type,
3663
+ config: field,
3664
+ isEditing: editingFields[field.key],
3665
+ isChanged: changedFields[field.key],
3666
+ isSaving: savingFields[field.key],
3667
+ onEdit: () => onFieldEdit?.(field.key),
3668
+ onSave: (val) => onFieldSave?.(field.key, val),
3669
+ onCancel: () => onFieldCancel?.(field.key)
3670
+ }
3671
+ )
3672
+ ] }, field.key)) })
3673
+ ] }) }),
3674
+ (onProceed || footer) && /* @__PURE__ */ jsxs39(CardFooter, { className: "flex flex-col gap-4 pt-0 border-t border-gray-100/50 bg-gray-50/30 p-6", children: [
3675
+ onProceed && proceedLabel && /* @__PURE__ */ jsx71("div", { className: "w-full flex justify-center", children: /* @__PURE__ */ jsx71(
3676
+ ActionButton,
3677
+ {
3678
+ label: proceedLabel,
3679
+ countdown,
3680
+ isPaused,
3681
+ onPause,
3682
+ onProceed
3683
+ }
3684
+ ) }),
3685
+ footer
3686
+ ] })
3687
+ ]
3688
+ }
3689
+ );
3690
+ }
3691
+ );
3692
+ FormCard.displayName = "FormCard";
3693
+
3694
+ // src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.tsx
3695
+ import React55 from "react";
3696
+ import { CheckCircle2 as CheckCircle22 } from "lucide-react";
3697
+ import { jsx as jsx72, jsxs as jsxs40 } from "react/jsx-runtime";
3698
+ var CAMPAIGN_SEED_FIELDS = [
3699
+ {
3700
+ key: "brand",
3701
+ label: "Brand / Campaign",
3702
+ type: "text",
3703
+ placeholder: "Not specified"
3704
+ },
3705
+ {
3706
+ key: "objective",
3707
+ label: "Objective",
3708
+ type: "text",
3709
+ placeholder: "Not specified"
3710
+ },
3711
+ {
3712
+ key: "budget_hint",
3713
+ label: "Budget Hint",
3714
+ type: "slider",
3715
+ placeholder: "Not specified",
3716
+ sliderConfig: {
3717
+ min: 0,
3718
+ max: 1e6,
3719
+ step: 1e3,
3720
+ formatValue: (value) => {
3721
+ if (!value) return "$0 - $100K";
3722
+ const formatCurrency = (amount) => {
3723
+ if (amount >= 1e6) return `$${(amount / 1e6).toFixed(1)}M`;
3724
+ if (amount >= 1e3) return `$${(amount / 1e3).toFixed(0)}K`;
3725
+ return `$${amount.toLocaleString()}`;
3726
+ };
3727
+ let normalized;
3728
+ if (typeof value === "object" && value?.min !== void 0) {
3729
+ normalized = value;
3730
+ } else if (typeof value === "string" && value.includes("-")) {
3731
+ const [minStr, maxStr] = value.split("-");
3732
+ normalized = {
3733
+ min: Number(minStr) || 0,
3734
+ max: Number(maxStr) || 1e5
3735
+ };
3736
+ } else {
3737
+ const val = Number(String(value).replace(/[^0-9.]/g, "")) || 0;
3738
+ normalized = val > 0 ? { min: val, max: val } : { min: 0, max: 1e5 };
3739
+ }
3740
+ if (normalized.min === normalized.max)
3741
+ return formatCurrency(normalized.min);
3742
+ return `${formatCurrency(normalized.min)} - ${formatCurrency(normalized.max)}`;
3743
+ }
3744
+ }
3745
+ },
3746
+ {
3747
+ key: "geo_or_audience",
3748
+ label: "Geography or Audience",
3749
+ type: "text",
3750
+ placeholder: "Not specified"
3751
+ },
3752
+ {
3753
+ key: "timeline_opt",
3754
+ label: "Timeline Option",
3755
+ type: "text",
3756
+ placeholder: "Not specified"
3757
+ },
3758
+ {
3759
+ key: "notes",
3760
+ label: "Notes",
3761
+ type: "textarea",
3762
+ placeholder: "No notes",
3763
+ rows: 4
3764
+ }
3765
+ ];
3766
+ var CampaignSeedCard = React55.memo(
3767
+ ({
3768
+ selectionStatus,
3769
+ isLatestMessage = true,
3770
+ className,
3771
+ ...formCardProps
3772
+ }) => {
3773
+ return /* @__PURE__ */ jsx72("div", { className: "flex flex-col gap-2", children: /* @__PURE__ */ jsx72(
3774
+ FormCard,
3775
+ {
3776
+ ...formCardProps,
3777
+ title: formCardProps.title || "Brand Information",
3778
+ fields: CAMPAIGN_SEED_FIELDS,
3779
+ className,
3780
+ footer: !isLatestMessage && selectionStatus ? /* @__PURE__ */ jsxs40("div", { className: "flex justify-end items-center gap-1.5 text-green-600 text-xs font-semibold py-1", children: [
3781
+ /* @__PURE__ */ jsx72(CheckCircle22, { className: "h-4 w-4" }),
3782
+ /* @__PURE__ */ jsx72("span", { children: selectionStatus === "agent" ? "Selected by Agent" : "Selected by User" })
3783
+ ] }) : formCardProps.footer
3784
+ }
3785
+ ) });
3786
+ }
3787
+ );
3788
+ CampaignSeedCard.displayName = "CampaignSeedCard";
3789
+
3790
+ // src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.tsx
3791
+ import React56 from "react";
3792
+
3793
+ // src/molecules/creator-discovery/SearchSpecCard/CustomFieldRenderers.tsx
3794
+ import { useState as useState4, useRef as useRef3, useEffect as useEffect5 } from "react";
3795
+ import { ChevronDown as ChevronDown4, Check as Check7 } from "lucide-react";
3796
+
3797
+ // src/lib/countries.ts
3798
+ var countries = [
3799
+ { code: "AF", name: "Afghanistan", flag: "\u{1F1E6}\u{1F1EB}" },
3800
+ { code: "AL", name: "Albania", flag: "\u{1F1E6}\u{1F1F1}" },
3801
+ { code: "DZ", name: "Algeria", flag: "\u{1F1E9}\u{1F1FF}" },
3802
+ { code: "AD", name: "Andorra", flag: "\u{1F1E6}\u{1F1E9}" },
3803
+ { code: "AO", name: "Angola", flag: "\u{1F1E6}\u{1F1F4}" },
3804
+ { code: "AG", name: "Antigua and Barbuda", flag: "\u{1F1E6}\u{1F1EC}" },
3805
+ { code: "AR", name: "Argentina", flag: "\u{1F1E6}\u{1F1F7}" },
3806
+ { code: "AM", name: "Armenia", flag: "\u{1F1E6}\u{1F1F2}" },
3807
+ { code: "AU", name: "Australia", flag: "\u{1F1E6}\u{1F1FA}" },
3808
+ { code: "AT", name: "Austria", flag: "\u{1F1E6}\u{1F1F9}" },
3809
+ { code: "AZ", name: "Azerbaijan", flag: "\u{1F1E6}\u{1F1FF}" },
3810
+ { code: "BS", name: "Bahamas", flag: "\u{1F1E7}\u{1F1F8}" },
3811
+ { code: "BH", name: "Bahrain", flag: "\u{1F1E7}\u{1F1ED}" },
3812
+ { code: "BD", name: "Bangladesh", flag: "\u{1F1E7}\u{1F1E9}" },
3813
+ { code: "BB", name: "Barbados", flag: "\u{1F1E7}\u{1F1E7}" },
3814
+ { code: "BY", name: "Belarus", flag: "\u{1F1E7}\u{1F1FE}" },
3815
+ { code: "BE", name: "Belgium", flag: "\u{1F1E7}\u{1F1EA}" },
3816
+ { code: "BZ", name: "Belize", flag: "\u{1F1E7}\u{1F1FF}" },
3817
+ { code: "BJ", name: "Benin", flag: "\u{1F1E7}\u{1F1EF}" },
3818
+ { code: "BT", name: "Bhutan", flag: "\u{1F1E7}\u{1F1F9}" },
3819
+ { code: "BO", name: "Bolivia", flag: "\u{1F1E7}\u{1F1F4}" },
3820
+ { code: "BA", name: "Bosnia and Herzegovina", flag: "\u{1F1E7}\u{1F1E6}" },
3821
+ { code: "BW", name: "Botswana", flag: "\u{1F1E7}\u{1F1FC}" },
3822
+ { code: "BR", name: "Brazil", flag: "\u{1F1E7}\u{1F1F7}" },
3823
+ { code: "BN", name: "Brunei", flag: "\u{1F1E7}\u{1F1F3}" },
3824
+ { code: "BG", name: "Bulgaria", flag: "\u{1F1E7}\u{1F1EC}" },
3825
+ { code: "BF", name: "Burkina Faso", flag: "\u{1F1E7}\u{1F1EB}" },
3826
+ { code: "BI", name: "Burundi", flag: "\u{1F1E7}\u{1F1EE}" },
3827
+ { code: "CV", name: "Cabo Verde", flag: "\u{1F1E8}\u{1F1FB}" },
3828
+ { code: "KH", name: "Cambodia", flag: "\u{1F1F0}\u{1F1ED}" },
3829
+ { code: "CM", name: "Cameroon", flag: "\u{1F1E8}\u{1F1F2}" },
3830
+ { code: "CA", name: "Canada", flag: "\u{1F1E8}\u{1F1E6}" },
3831
+ { code: "CF", name: "Central African Republic", flag: "\u{1F1E8}\u{1F1EB}" },
3832
+ { code: "TD", name: "Chad", flag: "\u{1F1F9}\u{1F1E9}" },
3833
+ { code: "CL", name: "Chile", flag: "\u{1F1E8}\u{1F1F1}" },
3834
+ { code: "CN", name: "China", flag: "\u{1F1E8}\u{1F1F3}" },
3835
+ { code: "CO", name: "Colombia", flag: "\u{1F1E8}\u{1F1F4}" },
3836
+ { code: "KM", name: "Comoros", flag: "\u{1F1F0}\u{1F1F2}" },
3837
+ { code: "CG", name: "Congo", flag: "\u{1F1E8}\u{1F1EC}" },
3838
+ { code: "CD", name: "Democratic Republic of the Congo", flag: "\u{1F1E8}\u{1F1E9}" },
3839
+ { code: "CR", name: "Costa Rica", flag: "\u{1F1E8}\u{1F1F7}" },
3840
+ { code: "HR", name: "Croatia", flag: "\u{1F1ED}\u{1F1F7}" },
3841
+ { code: "CU", name: "Cuba", flag: "\u{1F1E8}\u{1F1FA}" },
3842
+ { code: "CY", name: "Cyprus", flag: "\u{1F1E8}\u{1F1FE}" },
3843
+ { code: "CZ", name: "Czech Republic", flag: "\u{1F1E8}\u{1F1FF}" },
3844
+ { code: "CI", name: "Ivory Coast", flag: "\u{1F1E8}\u{1F1EE}" },
3845
+ { code: "DK", name: "Denmark", flag: "\u{1F1E9}\u{1F1F0}" },
3846
+ { code: "DJ", name: "Djibouti", flag: "\u{1F1E9}\u{1F1EF}" },
3847
+ { code: "DM", name: "Dominica", flag: "\u{1F1E9}\u{1F1F2}" },
3848
+ { code: "DO", name: "Dominican Republic", flag: "\u{1F1E9}\u{1F1F4}" },
3849
+ { code: "EC", name: "Ecuador", flag: "\u{1F1EA}\u{1F1E8}" },
3850
+ { code: "EG", name: "Egypt", flag: "\u{1F1EA}\u{1F1EC}" },
3851
+ { code: "SV", name: "El Salvador", flag: "\u{1F1F8}\u{1F1FB}" },
3852
+ { code: "GQ", name: "Equatorial Guinea", flag: "\u{1F1EC}\u{1F1F6}" },
3853
+ { code: "ER", name: "Eritrea", flag: "\u{1F1EA}\u{1F1F7}" },
3854
+ { code: "EE", name: "Estonia", flag: "\u{1F1EA}\u{1F1EA}" },
3855
+ { code: "SZ", name: "Eswatini", flag: "\u{1F1F8}\u{1F1FF}" },
3856
+ { code: "ET", name: "Ethiopia", flag: "\u{1F1EA}\u{1F1F9}" },
3857
+ { code: "FJ", name: "Fiji", flag: "\u{1F1EB}\u{1F1EF}" },
3858
+ { code: "FI", name: "Finland", flag: "\u{1F1EB}\u{1F1EE}" },
3859
+ { code: "FR", name: "France", flag: "\u{1F1EB}\u{1F1F7}" },
3860
+ { code: "GA", name: "Gabon", flag: "\u{1F1EC}\u{1F1E6}" },
3861
+ { code: "GM", name: "Gambia", flag: "\u{1F1EC}\u{1F1F2}" },
3862
+ { code: "GE", name: "Georgia", flag: "\u{1F1EC}\u{1F1EA}" },
3863
+ { code: "DE", name: "Germany", flag: "\u{1F1E9}\u{1F1EA}" },
3864
+ { code: "GH", name: "Ghana", flag: "\u{1F1EC}\u{1F1ED}" },
3865
+ { code: "GR", name: "Greece", flag: "\u{1F1EC}\u{1F1F7}" },
3866
+ { code: "GD", name: "Grenada", flag: "\u{1F1EC}\u{1F1E9}" },
3867
+ { code: "GT", name: "Guatemala", flag: "\u{1F1EC}\u{1F1F9}" },
3868
+ { code: "GN", name: "Guinea", flag: "\u{1F1EC}\u{1F1F3}" },
3869
+ { code: "GW", name: "Guinea-Bissau", flag: "\u{1F1EC}\u{1F1FC}" },
3870
+ { code: "GY", name: "Guyana", flag: "\u{1F1EC}\u{1F1FE}" },
3871
+ { code: "HT", name: "Haiti", flag: "\u{1F1ED}\u{1F1F9}" },
3872
+ { code: "HN", name: "Honduras", flag: "\u{1F1ED}\u{1F1F3}" },
3873
+ { code: "HU", name: "Hungary", flag: "\u{1F1ED}\u{1F1FA}" },
3874
+ { code: "HK", name: "Hong Kong", flag: "\u{1F1ED}\u{1F1F0}" },
3875
+ { code: "IS", name: "Iceland", flag: "\u{1F1EE}\u{1F1F8}" },
3876
+ { code: "IN", name: "India", flag: "\u{1F1EE}\u{1F1F3}" },
3877
+ { code: "ID", name: "Indonesia", flag: "\u{1F1EE}\u{1F1E9}" },
3878
+ { code: "IR", name: "Iran", flag: "\u{1F1EE}\u{1F1F7}" },
3879
+ { code: "IQ", name: "Iraq", flag: "\u{1F1EE}\u{1F1F6}" },
3880
+ { code: "IE", name: "Ireland", flag: "\u{1F1EE}\u{1F1EA}" },
3881
+ { code: "IL", name: "Israel", flag: "\u{1F1EE}\u{1F1F1}" },
3882
+ { code: "IT", name: "Italy", flag: "\u{1F1EE}\u{1F1F9}" },
3883
+ { code: "JM", name: "Jamaica", flag: "\u{1F1EF}\u{1F1F2}" },
3884
+ { code: "JP", name: "Japan", flag: "\u{1F1EF}\u{1F1F5}" },
3885
+ { code: "JO", name: "Jordan", flag: "\u{1F1EF}\u{1F1F4}" },
3886
+ { code: "KZ", name: "Kazakhstan", flag: "\u{1F1F0}\u{1F1FF}" },
3887
+ { code: "KE", name: "Kenya", flag: "\u{1F1F0}\u{1F1EA}" },
3888
+ { code: "KI", name: "Kiribati", flag: "\u{1F1F0}\u{1F1EE}" },
3889
+ { code: "KP", name: "North Korea", flag: "\u{1F1F0}\u{1F1F5}" },
3890
+ { code: "KR", name: "South Korea", flag: "\u{1F1F0}\u{1F1F7}" },
3891
+ { code: "KW", name: "Kuwait", flag: "\u{1F1F0}\u{1F1FC}" },
3892
+ { code: "KG", name: "Kyrgyzstan", flag: "\u{1F1F0}\u{1F1EC}" },
3893
+ { code: "LA", name: "Laos", flag: "\u{1F1F1}\u{1F1E6}" },
3894
+ { code: "LV", name: "Latvia", flag: "\u{1F1F1}\u{1F1FB}" },
3895
+ { code: "LB", name: "Lebanon", flag: "\u{1F1F1}\u{1F1E7}" },
3896
+ { code: "LS", name: "Lesotho", flag: "\u{1F1F1}\u{1F1F8}" },
3897
+ { code: "LR", name: "Liberia", flag: "\u{1F1F1}\u{1F1F7}" },
3898
+ { code: "LY", name: "Libya", flag: "\u{1F1F1}\u{1F1FE}" },
3899
+ { code: "LI", name: "Liechtenstein", flag: "\u{1F1F1}\u{1F1EE}" },
3900
+ { code: "LT", name: "Lithuania", flag: "\u{1F1F1}\u{1F1F9}" },
3901
+ { code: "LU", name: "Luxembourg", flag: "\u{1F1F1}\u{1F1FA}" },
3902
+ { code: "MG", name: "Madagascar", flag: "\u{1F1F2}\u{1F1EC}" },
3903
+ { code: "MW", name: "Malawi", flag: "\u{1F1F2}\u{1F1FC}" },
3904
+ { code: "MY", name: "Malaysia", flag: "\u{1F1F2}\u{1F1FE}" },
3905
+ { code: "MV", name: "Maldives", flag: "\u{1F1F2}\u{1F1FB}" },
3906
+ { code: "ML", name: "Mali", flag: "\u{1F1F2}\u{1F1F1}" },
3907
+ { code: "MT", name: "Malta", flag: "\u{1F1F2}\u{1F1F9}" },
3908
+ { code: "MH", name: "Marshall Islands", flag: "\u{1F1F2}\u{1F1ED}" },
3909
+ { code: "MR", name: "Mauritania", flag: "\u{1F1F2}\u{1F1F7}" },
3910
+ { code: "MU", name: "Mauritius", flag: "\u{1F1F2}\u{1F1FA}" },
3911
+ { code: "MX", name: "Mexico", flag: "\u{1F1F2}\u{1F1FD}" },
3912
+ { code: "FM", name: "Micronesia", flag: "\u{1F1EB}\u{1F1F2}" },
3913
+ { code: "MD", name: "Moldova", flag: "\u{1F1F2}\u{1F1E9}" },
3914
+ { code: "MC", name: "Monaco", flag: "\u{1F1F2}\u{1F1E8}" },
3915
+ { code: "MN", name: "Mongolia", flag: "\u{1F1F2}\u{1F1F3}" },
3916
+ { code: "ME", name: "Montenegro", flag: "\u{1F1F2}\u{1F1EA}" },
3917
+ { code: "MA", name: "Morocco", flag: "\u{1F1F2}\u{1F1E6}" },
3918
+ { code: "MZ", name: "Mozambique", flag: "\u{1F1F2}\u{1F1FF}" },
3919
+ { code: "MM", name: "Myanmar", flag: "\u{1F1F2}\u{1F1F2}" },
3920
+ { code: "NA", name: "Namibia", flag: "\u{1F1F3}\u{1F1E6}" },
3921
+ { code: "NR", name: "Nauru", flag: "\u{1F1F3}\u{1F1F7}" },
3922
+ { code: "NP", name: "Nepal", flag: "\u{1F1F3}\u{1F1F5}" },
3923
+ { code: "NL", name: "Netherlands", flag: "\u{1F1F3}\u{1F1F1}" },
3924
+ { code: "NZ", name: "New Zealand", flag: "\u{1F1F3}\u{1F1FF}" },
3925
+ { code: "NI", name: "Nicaragua", flag: "\u{1F1F3}\u{1F1EE}" },
3926
+ { code: "NE", name: "Niger", flag: "\u{1F1F3}\u{1F1EA}" },
3927
+ { code: "NG", name: "Nigeria", flag: "\u{1F1F3}\u{1F1EC}" },
3928
+ { code: "MK", name: "North Macedonia", flag: "\u{1F1F2}\u{1F1F0}" },
3929
+ { code: "NO", name: "Norway", flag: "\u{1F1F3}\u{1F1F4}" },
3930
+ { code: "OM", name: "Oman", flag: "\u{1F1F4}\u{1F1F2}" },
3931
+ { code: "PK", name: "Pakistan", flag: "\u{1F1F5}\u{1F1F0}" },
3932
+ { code: "PW", name: "Palau", flag: "\u{1F1F5}\u{1F1FC}" },
3933
+ { code: "PS", name: "Palestine", flag: "\u{1F1F5}\u{1F1F8}" },
3934
+ { code: "PA", name: "Panama", flag: "\u{1F1F5}\u{1F1E6}" },
3935
+ { code: "PG", name: "Papua New Guinea", flag: "\u{1F1F5}\u{1F1EC}" },
3936
+ { code: "PY", name: "Paraguay", flag: "\u{1F1F5}\u{1F1FE}" },
3937
+ { code: "PE", name: "Peru", flag: "\u{1F1F5}\u{1F1EA}" },
3938
+ { code: "PH", name: "Philippines", flag: "\u{1F1F5}\u{1F1ED}" },
3939
+ { code: "PL", name: "Poland", flag: "\u{1F1F5}\u{1F1F1}" },
3940
+ { code: "PT", name: "Portugal", flag: "\u{1F1F5}\u{1F1F9}" },
3941
+ { code: "QA", name: "Qatar", flag: "\u{1F1F6}\u{1F1E6}" },
3942
+ { code: "RO", name: "Romania", flag: "\u{1F1F7}\u{1F1F4}" },
3943
+ { code: "RU", name: "Russia", flag: "\u{1F1F7}\u{1F1FA}" },
3944
+ { code: "RW", name: "Rwanda", flag: "\u{1F1F7}\u{1F1FC}" },
3945
+ { code: "KN", name: "Saint Kitts and Nevis", flag: "\u{1F1F0}\u{1F1F3}" },
3946
+ { code: "LC", name: "Saint Lucia", flag: "\u{1F1F1}\u{1F1E8}" },
3947
+ { code: "VC", name: "Saint Vincent and the Grenadines", flag: "\u{1F1FB}\u{1F1E8}" },
3948
+ { code: "WS", name: "Samoa", flag: "\u{1F1FC}\u{1F1F8}" },
3949
+ { code: "SM", name: "San Marino", flag: "\u{1F1F8}\u{1F1F2}" },
3950
+ { code: "ST", name: "Sao Tome and Principe", flag: "\u{1F1F8}\u{1F1F9}" },
3951
+ { code: "SA", name: "Saudi Arabia", flag: "\u{1F1F8}\u{1F1E6}" },
3952
+ { code: "SN", name: "Senegal", flag: "\u{1F1F8}\u{1F1F3}" },
3953
+ { code: "RS", name: "Serbia", flag: "\u{1F1F7}\u{1F1F8}" },
3954
+ { code: "SC", name: "Seychelles", flag: "\u{1F1F8}\u{1F1E8}" },
3955
+ { code: "SL", name: "Sierra Leone", flag: "\u{1F1F8}\u{1F1F1}" },
3956
+ { code: "SG", name: "Singapore", flag: "\u{1F1F8}\u{1F1EC}" },
3957
+ { code: "SK", name: "Slovakia", flag: "\u{1F1F8}\u{1F1F0}" },
3958
+ { code: "SI", name: "Slovenia", flag: "\u{1F1F8}\u{1F1EE}" },
3959
+ { code: "SB", name: "Solomon Islands", flag: "\u{1F1F8}\u{1F1E7}" },
3960
+ { code: "SO", name: "Somalia", flag: "\u{1F1F8}\u{1F1F4}" },
3961
+ { code: "ZA", name: "South Africa", flag: "\u{1F1FF}\u{1F1E6}" },
3962
+ { code: "SS", name: "South Sudan", flag: "\u{1F1F8}\u{1F1F8}" },
3963
+ { code: "ES", name: "Spain", flag: "\u{1F1EA}\u{1F1F8}" },
3964
+ { code: "LK", name: "Sri Lanka", flag: "\u{1F1F1}\u{1F1F0}" },
3965
+ { code: "SD", name: "Sudan", flag: "\u{1F1F8}\u{1F1E9}" },
3966
+ { code: "SR", name: "Suriname", flag: "\u{1F1F8}\u{1F1F7}" },
3967
+ { code: "SE", name: "Sweden", flag: "\u{1F1F8}\u{1F1EA}" },
3968
+ { code: "CH", name: "Switzerland", flag: "\u{1F1E8}\u{1F1ED}" },
3969
+ { code: "SY", name: "Syria", flag: "\u{1F1F8}\u{1F1FE}" },
3970
+ { code: "TW", name: "Taiwan", flag: "\u{1F1F9}\u{1F1FC}" },
3971
+ { code: "TJ", name: "Tajikistan", flag: "\u{1F1F9}\u{1F1EF}" },
3972
+ { code: "TZ", name: "Tanzania", flag: "\u{1F1F9}\u{1F1FF}" },
3973
+ { code: "TH", name: "Thailand", flag: "\u{1F1F9}\u{1F1ED}" },
3974
+ { code: "TL", name: "Timor-Leste", flag: "\u{1F1F9}\u{1F1F1}" },
3975
+ { code: "TG", name: "Togo", flag: "\u{1F1F9}\u{1F1EC}" },
3976
+ { code: "TO", name: "Tonga", flag: "\u{1F1F9}\u{1F1F4}" },
3977
+ { code: "TT", name: "Trinidad and Tobago", flag: "\u{1F1F9}\u{1F1F9}" },
3978
+ { code: "TN", name: "Tunisia", flag: "\u{1F1F9}\u{1F1F3}" },
3979
+ { code: "TR", name: "Turkey", flag: "\u{1F1F9}\u{1F1F7}" },
3980
+ { code: "TM", name: "Turkmenistan", flag: "\u{1F1F9}\u{1F1F2}" },
3981
+ { code: "TV", name: "Tuvalu", flag: "\u{1F1F9}\u{1F1FB}" },
3982
+ { code: "UG", name: "Uganda", flag: "\u{1F1FA}\u{1F1EC}" },
3983
+ { code: "UA", name: "Ukraine", flag: "\u{1F1FA}\u{1F1E6}" },
3984
+ { code: "AE", name: "United Arab Emirates", flag: "\u{1F1E6}\u{1F1EA}" },
3985
+ { code: "GB", name: "United Kingdom", flag: "\u{1F1EC}\u{1F1E7}" },
3986
+ { code: "US", name: "United States", flag: "\u{1F1FA}\u{1F1F8}" },
3987
+ { code: "UY", name: "Uruguay", flag: "\u{1F1FA}\u{1F1FE}" },
3988
+ { code: "UZ", name: "Uzbekistan", flag: "\u{1F1FA}\u{1F1FF}" },
3989
+ { code: "VU", name: "Vanuatu", flag: "\u{1F1FB}\u{1F1FA}" },
3990
+ { code: "VA", name: "Vatican City", flag: "\u{1F1FB}\u{1F1E6}" },
3991
+ { code: "VE", name: "Venezuela", flag: "\u{1F1FB}\u{1F1EA}" },
3992
+ { code: "VN", name: "Vietnam", flag: "\u{1F1FB}\u{1F1F3}" },
3993
+ { code: "YE", name: "Yemen", flag: "\u{1F1FE}\u{1F1EA}" },
3994
+ { code: "ZM", name: "Zambia", flag: "\u{1F1FF}\u{1F1F2}" },
3995
+ { code: "ZW", name: "Zimbabwe", flag: "\u{1F1FF}\u{1F1FC}" }
3996
+ ];
3997
+ var countriesWithFlags = Object.fromEntries(
3998
+ countries.map((c) => [c.code, { name: c.name, flag: c.flag }])
3999
+ );
4000
+
4001
+ // src/molecules/creator-discovery/SearchSpecCard/CustomFieldRenderers.tsx
4002
+ import { jsx as jsx73, jsxs as jsxs41 } from "react/jsx-runtime";
4003
+ var CountrySelectEdit = ({
4004
+ value,
4005
+ onChange
4006
+ }) => {
4007
+ const [isDropdownOpen, setIsDropdownOpen] = useState4(false);
4008
+ const [searchTerm, setSearchTerm] = useState4("");
4009
+ const dropdownRef = useRef3(null);
4010
+ useEffect5(() => {
4011
+ const handleClickOutside = (event) => {
4012
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
4013
+ setIsDropdownOpen(false);
4014
+ }
4015
+ };
4016
+ document.addEventListener("mousedown", handleClickOutside);
4017
+ return () => document.removeEventListener("mousedown", handleClickOutside);
4018
+ }, []);
4019
+ const inputValue = Array.isArray(value) ? value : [];
4020
+ return /* @__PURE__ */ jsxs41("div", { className: "space-y-3", children: [
4021
+ /* @__PURE__ */ jsxs41("div", { className: "relative", ref: dropdownRef, children: [
4022
+ /* @__PURE__ */ jsxs41(
4023
+ "div",
4024
+ {
4025
+ className: "flex-1 bg-white border border-gray200 rounded-md px-3 py-2 text-sm cursor-pointer flex items-center justify-between font-medium hover:border-purple500 transition-colors",
4026
+ onClick: () => setIsDropdownOpen(!isDropdownOpen),
4027
+ children: [
4028
+ /* @__PURE__ */ jsx73("span", { className: "text-gray-700", children: inputValue.length > 0 ? `${inputValue.length} ${inputValue.length === 1 ? "country" : "countries"} selected` : "Select countries..." }),
4029
+ /* @__PURE__ */ jsx73(
4030
+ ChevronDown4,
4031
+ {
4032
+ className: cn(
4033
+ "h-4 w-4 text-gray-400 transition-transform",
4034
+ isDropdownOpen && "rotate-180"
4035
+ )
4036
+ }
4037
+ )
4038
+ ]
4039
+ }
4040
+ ),
4041
+ isDropdownOpen && /* @__PURE__ */ jsxs41("div", { className: "absolute top-full left-0 right-0 mt-1 bg-white border border-gray200 rounded-lg shadow-xl z-50 max-h-60 overflow-hidden animate-in fade-in slide-in-from-top-1", children: [
4042
+ /* @__PURE__ */ jsx73("div", { className: "p-2 border-b border-gray-100", children: /* @__PURE__ */ jsx73(
4043
+ "input",
4044
+ {
4045
+ type: "text",
4046
+ placeholder: "Search countries...",
4047
+ value: searchTerm,
4048
+ onChange: (e) => setSearchTerm(e.target.value),
4049
+ className: "w-full px-3 py-1.5 text-sm border border-gray-100 rounded-md bg-gray-50 focus:outline-none focus:ring-2 focus:ring-purple500/20 focus:border-purple500",
4050
+ onClick: (e) => e.stopPropagation()
4051
+ }
4052
+ ) }),
4053
+ /* @__PURE__ */ jsx73("div", { className: "max-h-40 overflow-y-auto p-1", children: countries.filter(
4054
+ (country) => country.name.toLowerCase().includes(searchTerm.toLowerCase()) || country.code.toLowerCase().includes(searchTerm.toLowerCase())
4055
+ ).map((country) => /* @__PURE__ */ jsxs41(
4056
+ "div",
4057
+ {
4058
+ className: cn(
4059
+ "flex items-center justify-between px-3 py-2 rounded-md hover:bg-purple50 cursor-pointer transition-colors",
4060
+ inputValue.includes(country.code) && "bg-purple50/50"
4061
+ ),
4062
+ onClick: (e) => {
4063
+ e.stopPropagation();
4064
+ const currentGeography = inputValue;
4065
+ if (currentGeography.includes(country.code)) {
4066
+ onChange(
4067
+ currentGeography.filter(
4068
+ (c) => c !== country.code
4069
+ )
4070
+ );
4071
+ } else {
4072
+ onChange([...currentGeography, country.code]);
4073
+ }
4074
+ },
4075
+ children: [
4076
+ /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
4077
+ /* @__PURE__ */ jsx73("span", { className: "text-sm text-gray-700", children: country.name }),
4078
+ /* @__PURE__ */ jsx73("span", { className: "text-xs text-gray-400 font-mono", children: country.code })
4079
+ ] }),
4080
+ inputValue.includes(country.code) && /* @__PURE__ */ jsx73(Check7, { className: "h-4 w-4 text-purple500" })
4081
+ ]
4082
+ },
4083
+ country.code
4084
+ )) })
4085
+ ] })
4086
+ ] }),
4087
+ inputValue.length > 0 && /* @__PURE__ */ jsx73("div", { className: "flex flex-wrap gap-1.5", children: inputValue.map((countryCode) => /* @__PURE__ */ jsxs41(
4088
+ Badge,
4089
+ {
4090
+ variant: "secondary",
4091
+ className: "bg-purple50 text-purple700 border-purple100 hover:bg-purple100 cursor-default flex items-center gap-1 pr-1",
4092
+ children: [
4093
+ countryCode,
4094
+ /* @__PURE__ */ jsxs41(
4095
+ "button",
4096
+ {
4097
+ onClick: () => onChange(inputValue.filter((c) => c !== countryCode)),
4098
+ className: "hover:bg-purple200 rounded-full p-0.5 transition-colors",
4099
+ children: [
4100
+ /* @__PURE__ */ jsx73(ChevronDown4, { className: "h-3 w-3 rotate-45" }),
4101
+ " "
4102
+ ]
4103
+ }
4104
+ )
4105
+ ]
4106
+ },
4107
+ countryCode
4108
+ )) })
4109
+ ] });
4110
+ };
4111
+ var CountrySelectDisplay = ({ value }) => {
4112
+ if (!value || !Array.isArray(value) || value.length === 0) {
4113
+ return /* @__PURE__ */ jsx73("span", { className: "text-muted-foreground italic", children: "Not specified" });
4114
+ }
4115
+ return /* @__PURE__ */ jsx73("div", { className: "flex flex-wrap gap-1.5", children: value.map((countryCode) => /* @__PURE__ */ jsx73(
4116
+ Badge,
4117
+ {
4118
+ variant: "outline",
4119
+ className: "bg-gray-50 text-gray-700 border-gray-200",
4120
+ children: countryCode
4121
+ },
4122
+ countryCode
4123
+ )) });
4124
+ };
4125
+ var KeywordBundlesEdit = ({
4126
+ value,
4127
+ onChange
4128
+ }) => {
4129
+ const bundles = Array.isArray(value) ? value : [];
4130
+ const groups = {};
4131
+ bundles.forEach((b, idx) => {
4132
+ const p = Number(b?.priority) || 1;
4133
+ if (!groups[p]) groups[p] = [];
4134
+ groups[p].push({ bundle: b, index: idx });
4135
+ });
4136
+ const sortedPriorities = Object.keys(groups).map((n) => parseInt(n)).sort((a, b) => a - b);
4137
+ return /* @__PURE__ */ jsx73("div", { className: "space-y-6 pt-2", children: sortedPriorities.map((priority) => /* @__PURE__ */ jsxs41("div", { className: "space-y-3", children: [
4138
+ /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
4139
+ /* @__PURE__ */ jsxs41(Badge, { className: "bg-purple500 hover:bg-purple500", children: [
4140
+ "Priority ",
4141
+ priority
4142
+ ] }),
4143
+ /* @__PURE__ */ jsx73("div", { className: "h-px flex-1 bg-gray-100" })
4144
+ ] }),
4145
+ groups[priority].map(({ bundle, index: bundleIndex }) => /* @__PURE__ */ jsx73(
4146
+ "div",
4147
+ {
4148
+ className: "bg-gray-50/50 border border-gray-100 rounded-xl p-4 transition-all hover:bg-gray-50 hover:border-gray-200 shadow-sm",
4149
+ children: /* @__PURE__ */ jsxs41("div", { className: "flex flex-col gap-3", children: [
4150
+ /* @__PURE__ */ jsx73("label", { className: "text-[10px] font-bold text-gray-400 uppercase tracking-widest pl-1", children: "Keywords" }),
4151
+ /* @__PURE__ */ jsxs41("div", { className: "space-y-3", children: [
4152
+ /* @__PURE__ */ jsx73("div", { className: "flex flex-wrap gap-1.5", children: Array.isArray(bundle.keywords) && bundle.keywords.map((keyword, kIndex) => /* @__PURE__ */ jsxs41(
4153
+ Badge,
4154
+ {
4155
+ className: "bg-white border-gray-200 text-gray-700 hover:bg-red-50 hover:text-red-600 hover:border-red-100 transition-all cursor-pointer group",
4156
+ onClick: () => {
4157
+ const updatedBundles = [...bundles];
4158
+ updatedBundles[bundleIndex] = {
4159
+ ...bundle,
4160
+ keywords: bundle.keywords.filter(
4161
+ (_, i) => i !== kIndex
4162
+ )
4163
+ };
4164
+ onChange(updatedBundles);
4165
+ },
4166
+ children: [
4167
+ keyword,
4168
+ /* @__PURE__ */ jsx73("span", { className: "ml-1 opacity-0 group-hover:opacity-100 transition-opacity", children: "\xD7" })
4169
+ ]
4170
+ },
4171
+ kIndex
4172
+ )) }),
4173
+ /* @__PURE__ */ jsx73("div", { className: "flex gap-2", children: /* @__PURE__ */ jsx73(
4174
+ "input",
4175
+ {
4176
+ type: "text",
4177
+ placeholder: "Add keyword...",
4178
+ className: "flex-1 px-3 py-1.5 text-sm border border-gray-200 rounded-md bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 focus:border-purple-500",
4179
+ onKeyPress: (e) => {
4180
+ if (e.key === "Enter") {
4181
+ const input = e.target;
4182
+ const val = input.value.trim();
4183
+ if (val) {
4184
+ const updatedBundles = [...bundles];
4185
+ updatedBundles[bundleIndex] = {
4186
+ ...bundle,
4187
+ keywords: [...bundle.keywords || [], val]
4188
+ };
4189
+ onChange(updatedBundles);
4190
+ input.value = "";
4191
+ }
4192
+ }
4193
+ }
4194
+ }
4195
+ ) })
4196
+ ] }),
4197
+ /* @__PURE__ */ jsxs41("div", { className: "flex flex-col gap-1.5 mt-1", children: [
4198
+ /* @__PURE__ */ jsx73("label", { className: "text-[10px] font-bold text-gray-400 uppercase tracking-widest pl-1", children: "Priority Level (1-5)" }),
4199
+ /* @__PURE__ */ jsx73(
4200
+ "input",
4201
+ {
4202
+ type: "number",
4203
+ min: "1",
4204
+ max: "5",
4205
+ value: bundle.priority || 1,
4206
+ onChange: (e) => {
4207
+ const updatedBundles = [...bundles];
4208
+ updatedBundles[bundleIndex] = {
4209
+ ...bundle,
4210
+ priority: parseInt(e.target.value) || 1
4211
+ };
4212
+ onChange(updatedBundles);
4213
+ },
4214
+ className: "w-20 px-3 py-1.5 text-sm border border-gray-200 rounded-md bg-white focus:ring-2 focus:ring-purple-500/20 focus:border-purple-500 outline-none"
4215
+ }
4216
+ )
4217
+ ] })
4218
+ ] })
4219
+ },
4220
+ bundleIndex
4221
+ ))
4222
+ ] }, priority)) });
4223
+ };
4224
+ var KeywordBundlesDisplay = ({ value }) => {
4225
+ const bundles = Array.isArray(value) ? value : [];
4226
+ if (bundles.length === 0)
4227
+ return /* @__PURE__ */ jsx73("span", { className: "text-muted-foreground italic", children: "Not specified" });
4228
+ const groups = {};
4229
+ bundles.forEach((b) => {
4230
+ const p = Number(b?.priority) || 1;
4231
+ const keywords = Array.isArray(b?.keywords) ? b.keywords : [];
4232
+ if (!groups[p]) groups[p] = [];
4233
+ groups[p].push(...keywords);
4234
+ });
4235
+ const sortedPriorities = Object.keys(groups).map((n) => parseInt(n)).sort((a, b) => a - b);
4236
+ return /* @__PURE__ */ jsx73("div", { className: "space-y-4 pt-1", children: sortedPriorities.map((priority) => {
4237
+ const deduped = Array.from(new Set(groups[priority]));
4238
+ return /* @__PURE__ */ jsxs41("div", { className: "space-y-2", children: [
4239
+ /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
4240
+ /* @__PURE__ */ jsxs41(
4241
+ Badge,
4242
+ {
4243
+ variant: "outline",
4244
+ className: "text-[10px] uppercase tracking-wider text-purple600 border-purple100 bg-purple50/30",
4245
+ children: [
4246
+ "Priority ",
4247
+ priority
4248
+ ]
4249
+ }
4250
+ ),
4251
+ /* @__PURE__ */ jsx73("div", { className: "h-px flex-1 bg-gray-100/50" })
4252
+ ] }),
4253
+ /* @__PURE__ */ jsx73("div", { className: "flex flex-wrap gap-1.5", children: deduped.map((keyword) => /* @__PURE__ */ jsx73(
4254
+ Badge,
4255
+ {
4256
+ variant: "secondary",
4257
+ className: "bg-white border-gray-200 text-gray-700 font-medium",
4258
+ children: keyword
4259
+ },
4260
+ keyword
4261
+ )) })
4262
+ ] }, priority);
4263
+ }) });
4264
+ };
4265
+
4266
+ // src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.tsx
4267
+ import { CheckCircle2 as CheckCircle23 } from "lucide-react";
4268
+ import { jsx as jsx74, jsxs as jsxs42 } from "react/jsx-runtime";
4269
+ var SEARCH_SPEC_FIELDS = [
4270
+ {
4271
+ key: "platforms",
4272
+ label: "Platforms",
4273
+ type: "select",
4274
+ // Changed to select for simplicity in form, or custom if multi-select needed
4275
+ placeholder: "Select platforms",
4276
+ options: ["Instagram", "YouTube", "TikTok"]
4277
+ },
4278
+ {
4279
+ key: "follower_range",
4280
+ label: "Follower Range",
4281
+ type: "slider",
4282
+ placeholder: "Not specified",
4283
+ sliderConfig: {
4284
+ min: 0,
4285
+ max: 5e6,
4286
+ step: 1e4,
4287
+ formatValue: (value) => {
4288
+ if (!value || typeof value !== "object") return "0 - 2.5M followers";
4289
+ const formatNum = (n) => {
4290
+ if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
4291
+ if (n >= 1e3) return `${(n / 1e3).toFixed(0)}K`;
4292
+ return n.toLocaleString();
4293
+ };
4294
+ return `${formatNum(value.min || 0)} - ${formatNum(value.max || 25e5)} followers`;
4295
+ }
4296
+ }
4297
+ },
4298
+ {
4299
+ key: "geography",
4300
+ label: "Geography",
4301
+ type: "custom",
4302
+ renderEdit: (value, onChange) => /* @__PURE__ */ jsx74(CountrySelectEdit, { value, onChange }),
4303
+ renderDisplay: (value) => /* @__PURE__ */ jsx74(CountrySelectDisplay, { value })
4304
+ },
4305
+ {
4306
+ key: "keyword_bundles",
4307
+ label: "Keyword Bundles",
4308
+ type: "custom",
4309
+ renderEdit: (value, onChange) => /* @__PURE__ */ jsx74(KeywordBundlesEdit, { value, onChange }),
4310
+ renderDisplay: (value) => /* @__PURE__ */ jsx74(KeywordBundlesDisplay, { value })
4311
+ },
4312
+ {
4313
+ key: "desired_candidate_count",
4314
+ label: "Initial Creators",
4315
+ type: "number",
4316
+ numberConfig: {
4317
+ min: 1,
4318
+ formatValue: (value) => `${value || 0} creators`
4319
+ }
4320
+ }
4321
+ ];
4322
+ var SearchSpecCard = React56.memo(
4323
+ ({
4324
+ selectionStatus,
4325
+ isLatestMessage = true,
4326
+ className,
4327
+ ...formCardProps
4328
+ }) => {
4329
+ return /* @__PURE__ */ jsx74(
4330
+ FormCard,
4331
+ {
4332
+ ...formCardProps,
4333
+ title: formCardProps.title || "Creator Search Settings",
4334
+ fields: SEARCH_SPEC_FIELDS,
4335
+ className,
4336
+ footer: !isLatestMessage && selectionStatus ? /* @__PURE__ */ jsxs42("div", { className: "flex justify-end items-center gap-1.5 text-green-600 text-xs font-semibold py-1", children: [
4337
+ /* @__PURE__ */ jsx74(CheckCircle23, { className: "h-4 w-4" }),
4338
+ /* @__PURE__ */ jsx74("span", { children: selectionStatus === "agent" ? "Selected by Agent" : "Selected by User" })
4339
+ ] }) : formCardProps.footer
4340
+ }
4341
+ );
4342
+ }
4343
+ );
4344
+ SearchSpecCard.displayName = "SearchSpecCard";
4345
+
4346
+ // src/molecules/creator-discovery/MCQCard/MCQCard.tsx
4347
+ import React57 from "react";
4348
+ import { CheckCircle2 as CheckCircle24, Sparkles } from "lucide-react";
4349
+ import { jsx as jsx75, jsxs as jsxs43 } from "react/jsx-runtime";
4350
+ var MCQCard = React57.memo(
4351
+ ({
4352
+ question,
4353
+ options,
4354
+ recommended,
4355
+ selectedOption,
4356
+ onSelect,
4357
+ onProceed,
4358
+ isLatestMessage = true,
4359
+ countdown,
4360
+ isPaused = false,
4361
+ onPause,
4362
+ isLoading = false,
4363
+ className,
4364
+ selectionStatus
4365
+ }) => {
4366
+ const handleOptionClick = (key) => {
4367
+ if (isLatestMessage && !isLoading) {
4368
+ onSelect?.(key);
4369
+ }
4370
+ };
4371
+ const handleProceed = () => {
4372
+ if (selectedOption || recommended) {
4373
+ onProceed?.(selectedOption || recommended || "");
4374
+ }
4375
+ };
4376
+ return /* @__PURE__ */ jsxs43(
4377
+ Card,
4378
+ {
4379
+ className: cn(
4380
+ "w-full rounded-[24px] border border-gray200 bg-white shadow-sm overflow-hidden",
4381
+ className
4382
+ ),
4383
+ children: [
4384
+ /* @__PURE__ */ jsx75(CardHeader, { className: "pb-2", children: /* @__PURE__ */ jsx75(CardTitle, { className: "text-lg font-bold text-gray-900 tracking-tight leading-snug", children: question }) }),
4385
+ /* @__PURE__ */ jsx75(CardContent, { className: "space-y-3 pb-6", children: Object.entries(options).map(([key, label]) => {
4386
+ const isSelected = selectedOption === key;
4387
+ const isRecommended = key === recommended;
4388
+ return /* @__PURE__ */ jsxs43(
4389
+ "div",
4390
+ {
4391
+ onClick: () => handleOptionClick(key),
4392
+ className: cn(
4393
+ "group relative flex items-start gap-4 p-4 rounded-2xl border transition-all duration-200 cursor-pointer",
4394
+ isSelected ? "border-purple500 bg-purple50/30" : "border-gray-100 bg-gray-50/30 hover:border-gray-300 hover:bg-gray-50",
4395
+ isLoading && "opacity-50 cursor-not-allowed"
4396
+ ),
4397
+ children: [
4398
+ /* @__PURE__ */ jsx75(
4399
+ "div",
4400
+ {
4401
+ className: cn(
4402
+ "mt-1 w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors",
4403
+ isSelected ? "border-purple500 bg-purple500" : "border-gray-300 bg-white group-hover:border-gray-400"
4404
+ ),
4405
+ children: isSelected && /* @__PURE__ */ jsx75("div", { className: "w-1.5 h-1.5 rounded-full bg-white" })
4406
+ }
4407
+ ),
4408
+ /* @__PURE__ */ jsx75("div", { className: "flex-1 space-y-1.5", children: /* @__PURE__ */ jsxs43("div", { className: "flex items-center gap-2 flex-wrap", children: [
4409
+ /* @__PURE__ */ jsx75(
4410
+ "span",
4411
+ {
4412
+ className: cn(
4413
+ "text-sm font-semibold transition-colors",
4414
+ isSelected ? "text-purple900" : "text-gray700"
4415
+ ),
4416
+ children: label
4417
+ }
4418
+ ),
4419
+ isRecommended && /* @__PURE__ */ jsxs43(
4420
+ Badge,
4421
+ {
4422
+ variant: "outline",
4423
+ className: "bg-green-50 text-green-700 border-green-100 flex items-center gap-1 text-[10px] py-0 h-5",
4424
+ children: [
4425
+ /* @__PURE__ */ jsx75(Sparkles, { className: "h-3 w-3" }),
4426
+ "Recommended"
4427
+ ]
4428
+ }
4429
+ ),
4430
+ isSelected && !isLatestMessage && /* @__PURE__ */ jsx75(
4431
+ Badge,
4432
+ {
4433
+ variant: "outline",
4434
+ className: "bg-purple-50 text-purple-700 border-purple-100 text-[10px] py-0 h-5",
4435
+ children: "Selected"
4436
+ }
4437
+ )
4438
+ ] }) })
4439
+ ]
4440
+ },
4441
+ key
4442
+ );
4443
+ }) }),
4444
+ /* @__PURE__ */ jsx75(CardFooter, { className: "flex flex-col gap-4 pt-0 border-t border-gray-100/50 bg-gray-50/30 p-6", children: isLatestMessage ? /* @__PURE__ */ jsx75("div", { className: "w-full flex justify-center", children: /* @__PURE__ */ jsx75(
4445
+ ActionButton,
4446
+ {
4447
+ label: selectedOption ? "Continue" : "Proceed with Recommendation",
4448
+ countdown,
4449
+ isPaused,
4450
+ onPause,
4451
+ onProceed: handleProceed,
4452
+ isLoading,
4453
+ disabled: !selectedOption && !recommended
4454
+ }
4455
+ ) }) : /* @__PURE__ */ jsxs43("div", { className: "w-full flex justify-end items-center gap-1.5 text-green-600 text-xs font-semibold", children: [
4456
+ /* @__PURE__ */ jsx75(CheckCircle24, { className: "h-4 w-4" }),
4457
+ /* @__PURE__ */ jsx75("span", { children: selectionStatus === "agent" ? "Suggested by Agent, Approved by You" : "Selected by You" })
4458
+ ] }) })
4459
+ ]
4460
+ }
4461
+ );
4462
+ }
4463
+ );
4464
+ MCQCard.displayName = "MCQCard";
4465
+
4466
+ // src/render/PXEngineRenderer.tsx
4467
+ import { Fragment as Fragment3, jsx as jsx76 } from "react/jsx-runtime";
4468
+ var PXEngineRenderer = ({
4469
+ schema,
4470
+ onAction
4471
+ }) => {
4472
+ const root = "root" in schema ? schema.root : schema;
4473
+ const renderAtom = (atom, renderComponent2) => {
4474
+ const { type, id } = atom;
4475
+ switch (type) {
4476
+ case "layout":
4477
+ return /* @__PURE__ */ jsx76(
4478
+ LayoutAtom,
4479
+ {
4480
+ ...atom,
4481
+ renderComponent: renderComponent2
4482
+ },
4483
+ id
4484
+ );
4485
+ case "card":
4486
+ return /* @__PURE__ */ jsx76(
4487
+ CardAtom,
4488
+ {
4489
+ ...atom,
4490
+ renderComponent: renderComponent2
4491
+ },
4492
+ id
4493
+ );
4494
+ case "text":
4495
+ return /* @__PURE__ */ jsx76(TextAtom, { ...atom }, id);
4496
+ case "button":
4497
+ return /* @__PURE__ */ jsx76(ButtonAtom, { ...atom, onAction }, id);
4498
+ case "input":
4499
+ return /* @__PURE__ */ jsx76(InputAtom, { ...atom }, id);
4500
+ case "badge":
4501
+ return /* @__PURE__ */ jsx76(BadgeAtom, { ...atom }, id);
4502
+ case "avatar":
4503
+ return /* @__PURE__ */ jsx76(AvatarAtom, { ...atom }, id);
4504
+ case "progress":
4505
+ return /* @__PURE__ */ jsx76(ProgressAtom, { ...atom }, id);
4506
+ case "skeleton":
4507
+ return /* @__PURE__ */ jsx76(SkeletonAtom, { ...atom }, id);
4508
+ case "alert":
4509
+ return /* @__PURE__ */ jsx76(AlertAtom, { ...atom }, id);
4510
+ case "separator":
4511
+ return /* @__PURE__ */ jsx76(SeparatorAtom, { ...atom }, id);
4512
+ case "table":
4513
+ return /* @__PURE__ */ jsx76(TableAtom, { ...atom }, id);
4514
+ case "tabs":
4515
+ return /* @__PURE__ */ jsx76(
4516
+ TabsAtom,
4517
+ {
4518
+ ...atom,
4519
+ renderComponent: renderComponent2
4520
+ },
4521
+ id
4522
+ );
4523
+ case "accordion":
4524
+ return /* @__PURE__ */ jsx76(
4525
+ AccordionAtom,
4526
+ {
4527
+ ...atom,
4528
+ renderComponent: renderComponent2
4529
+ },
4530
+ id
4531
+ );
4532
+ case "scroll-area":
4533
+ return /* @__PURE__ */ jsx76(
4534
+ ScrollAreaAtom,
4535
+ {
4536
+ ...atom,
4537
+ renderComponent: renderComponent2
4538
+ },
4539
+ id
4540
+ );
4541
+ case "carousel":
4542
+ return /* @__PURE__ */ jsx76(
4543
+ CarouselAtom,
4544
+ {
4545
+ ...atom,
4546
+ renderComponent: renderComponent2
4547
+ },
4548
+ id
4549
+ );
4550
+ case "aspect-ratio":
4551
+ return /* @__PURE__ */ jsx76(
4552
+ AspectRatioAtom,
4553
+ {
4554
+ ...atom,
4555
+ renderComponent: renderComponent2
4556
+ },
4557
+ id
4558
+ );
4559
+ case "collapsible":
4560
+ return /* @__PURE__ */ jsx76(
4561
+ CollapsibleAtom,
4562
+ {
4563
+ ...atom,
4564
+ renderComponent: renderComponent2
4565
+ },
4566
+ id
4567
+ );
4568
+ case "tooltip":
4569
+ return /* @__PURE__ */ jsx76(
4570
+ TooltipAtom,
4571
+ {
4572
+ ...atom,
4573
+ renderComponent: renderComponent2
4574
+ },
4575
+ id
4576
+ );
4577
+ case "popover":
4578
+ return /* @__PURE__ */ jsx76(
4579
+ PopoverAtom,
4580
+ {
4581
+ ...atom,
4582
+ renderComponent: renderComponent2
4583
+ },
4584
+ id
4585
+ );
4586
+ case "dialog":
4587
+ return /* @__PURE__ */ jsx76(
4588
+ DialogAtom,
4589
+ {
4590
+ ...atom,
4591
+ renderComponent: renderComponent2
4592
+ },
4593
+ id
4594
+ );
4595
+ case "sheet":
4596
+ return /* @__PURE__ */ jsx76(
4597
+ SheetAtom,
4598
+ {
4599
+ ...atom,
4600
+ renderComponent: renderComponent2
4601
+ },
4602
+ id
4603
+ );
4604
+ case "alert-dialog":
4605
+ return /* @__PURE__ */ jsx76(
4606
+ AlertDialogAtom,
4607
+ {
4608
+ ...atom,
4609
+ onAction,
4610
+ renderComponent: renderComponent2
4611
+ },
4612
+ id
4613
+ );
4614
+ case "breadcrumb":
4615
+ return /* @__PURE__ */ jsx76(BreadcrumbAtom, { ...atom }, id);
4616
+ case "spinner":
4617
+ return /* @__PURE__ */ jsx76(SpinnerAtom, { ...atom }, id);
4618
+ case "calendar":
4619
+ return /* @__PURE__ */ jsx76(CalendarAtom, { ...atom }, id);
4620
+ case "pagination":
4621
+ return /* @__PURE__ */ jsx76(PaginationAtom, { ...atom }, id);
4622
+ case "command":
4623
+ return /* @__PURE__ */ jsx76(CommandAtom, { ...atom }, id);
4624
+ default:
4625
+ return null;
4626
+ }
4627
+ };
4628
+ const renderMolecule = (molecule) => {
4629
+ const { type, id } = molecule;
4630
+ switch (type) {
4631
+ case "campaign-seed":
4632
+ return /* @__PURE__ */ jsx76(
4633
+ CampaignSeedCard,
4634
+ {
4635
+ ...molecule,
4636
+ onProceed: () => onAction?.(molecule.proceedAction || "proceed")
4637
+ },
4638
+ id
4639
+ );
4640
+ case "search-spec":
4641
+ return /* @__PURE__ */ jsx76(
4642
+ SearchSpecCard,
4643
+ {
4644
+ ...molecule,
4645
+ onProceed: () => onAction?.(molecule.proceedAction || "proceed")
4646
+ },
4647
+ id
4648
+ );
4649
+ case "mcq":
4650
+ return /* @__PURE__ */ jsx76(
4651
+ MCQCard,
4652
+ {
4653
+ ...molecule,
4654
+ onProceed: () => onAction?.(molecule.proceedAction || "proceed")
4655
+ },
4656
+ id
4657
+ );
4658
+ case "action-button":
4659
+ return /* @__PURE__ */ jsx76(
4660
+ ActionButton,
4661
+ {
4662
+ ...molecule,
4663
+ onProceed: () => onAction?.(molecule.action || "proceed")
4664
+ },
4665
+ id
4666
+ );
4667
+ default:
4668
+ return null;
4669
+ }
4670
+ };
4671
+ const renderComponent = (component) => {
4672
+ const { type } = component;
4673
+ const isAtom = [
4674
+ "layout",
4675
+ "card",
4676
+ "text",
4677
+ "button",
4678
+ "input",
4679
+ "badge",
4680
+ "avatar",
4681
+ "progress",
4682
+ "skeleton",
4683
+ "alert",
4684
+ "separator",
4685
+ "table",
4686
+ "tabs",
4687
+ "accordion",
4688
+ "scroll-area",
4689
+ "carousel",
4690
+ "aspect-ratio",
4691
+ "collapsible",
4692
+ "tooltip",
4693
+ "popover",
4694
+ "dialog",
4695
+ "sheet",
4696
+ "alert-dialog",
4697
+ "breadcrumb",
4698
+ "spinner",
4699
+ "calendar",
4700
+ "pagination",
4701
+ "command"
4702
+ ].includes(type);
4703
+ if (isAtom) {
4704
+ return renderAtom(component, renderComponent);
4705
+ }
4706
+ return renderMolecule(component);
4707
+ };
4708
+ return /* @__PURE__ */ jsx76(Fragment3, { children: renderComponent(root) });
4709
+ };
4710
+ export {
4711
+ Accordion,
4712
+ AccordionAtom,
4713
+ AccordionContent,
4714
+ AccordionItem,
4715
+ AccordionTrigger,
4716
+ ActionButton,
4717
+ Alert,
4718
+ AlertAtom,
4719
+ AlertDescription,
4720
+ AlertDialog,
4721
+ AlertDialogAction,
4722
+ AlertDialogAtom,
4723
+ AlertDialogCancel,
4724
+ AlertDialogContent,
4725
+ AlertDialogDescription,
4726
+ AlertDialogFooter,
4727
+ AlertDialogHeader,
4728
+ AlertDialogTitle,
4729
+ AlertDialogTrigger,
4730
+ AlertTitle,
4731
+ AspectRatio,
4732
+ AspectRatioAtom,
4733
+ Avatar,
4734
+ AvatarAtom,
4735
+ AvatarFallback,
4736
+ AvatarImage,
4737
+ Badge,
4738
+ BadgeAtom,
4739
+ Breadcrumb,
4740
+ BreadcrumbAtom,
4741
+ BreadcrumbItem,
4742
+ BreadcrumbLink,
4743
+ BreadcrumbList,
4744
+ BreadcrumbPage,
4745
+ BreadcrumbSeparator,
4746
+ Button,
4747
+ ButtonAtom,
4748
+ CAMPAIGN_SEED_FIELDS,
4749
+ Calendar,
4750
+ CalendarAtom,
4751
+ CampaignSeedCard,
4752
+ Card,
4753
+ CardAtom,
4754
+ CardContent,
4755
+ CardDescription,
4756
+ CardFooter,
4757
+ CardHeader,
4758
+ CardTitle,
4759
+ Carousel,
4760
+ CarouselAtom,
4761
+ CarouselContent,
4762
+ CarouselItem,
4763
+ CarouselNext,
4764
+ CarouselPrevious,
4765
+ Checkbox,
4766
+ Collapsible,
4767
+ CollapsibleAtom,
4768
+ CollapsibleContent2 as CollapsibleContent,
4769
+ CollapsibleTrigger2 as CollapsibleTrigger,
4770
+ Command,
4771
+ CommandAtom,
4772
+ CommandDialog,
4773
+ CommandEmpty,
4774
+ CommandGroup,
4775
+ CommandInput,
4776
+ CommandItem,
4777
+ CommandList,
4778
+ CommandSeparator,
4779
+ CommandShortcut,
4780
+ ContextMenu,
4781
+ ContextMenuCheckboxItem,
4782
+ ContextMenuContent,
4783
+ ContextMenuItem,
4784
+ ContextMenuLabel,
4785
+ ContextMenuRadioItem,
4786
+ ContextMenuSeparator,
4787
+ ContextMenuShortcut,
4788
+ ContextMenuTrigger,
4789
+ CountrySelectDisplay,
4790
+ CountrySelectEdit,
4791
+ Dialog,
4792
+ DialogAtom,
4793
+ DialogClose,
4794
+ DialogContent,
4795
+ DialogDescription,
4796
+ DialogFooter,
4797
+ DialogHeader,
4798
+ DialogTitle,
4799
+ DialogTrigger,
4800
+ Drawer,
4801
+ DrawerClose,
4802
+ DrawerContent,
4803
+ DrawerDescription,
4804
+ DrawerFooter,
4805
+ DrawerHeader,
4806
+ DrawerTitle,
4807
+ DrawerTrigger,
4808
+ DropdownMenu,
4809
+ DropdownMenuCheckboxItem,
4810
+ DropdownMenuContent,
4811
+ DropdownMenuItem,
4812
+ DropdownMenuLabel,
4813
+ DropdownMenuPortal,
4814
+ DropdownMenuRadioGroup,
4815
+ DropdownMenuRadioItem,
4816
+ DropdownMenuSeparator,
4817
+ DropdownMenuShortcut,
4818
+ DropdownMenuTrigger,
4819
+ EditableField,
4820
+ Form,
4821
+ FormCard,
4822
+ FormControl,
4823
+ FormDescription,
4824
+ FormField,
4825
+ FormItem,
4826
+ FormLabel,
4827
+ FormMessage,
4828
+ HoverCard,
4829
+ HoverCardContent,
4830
+ HoverCardTrigger,
4831
+ Input,
4832
+ InputAtom,
4833
+ InputOTP,
4834
+ InputOTPGroup,
4835
+ InputOTPSeparator,
4836
+ InputOTPSlot,
4837
+ KeywordBundlesDisplay,
4838
+ KeywordBundlesEdit,
4839
+ Label,
4840
+ LayoutAtom,
4841
+ MCQCard,
4842
+ Menubar,
4843
+ MenubarCheckboxItem,
4844
+ MenubarContent,
4845
+ MenubarItem,
4846
+ MenubarLabel,
4847
+ MenubarRadioItem,
4848
+ MenubarSeparator,
4849
+ MenubarShortcut,
4850
+ MenubarTrigger,
4851
+ NavigationMenu,
4852
+ NavigationMenuContent,
4853
+ NavigationMenuItem,
4854
+ NavigationMenuLink,
4855
+ NavigationMenuList,
4856
+ NavigationMenuTrigger,
4857
+ PXEngineRenderer,
4858
+ Pagination,
4859
+ PaginationAtom,
4860
+ PaginationContent,
4861
+ PaginationEllipsis,
4862
+ PaginationItem,
4863
+ PaginationLink,
4864
+ PaginationNext,
4865
+ PaginationPrevious,
4866
+ Popover,
4867
+ PopoverAtom,
4868
+ PopoverContent,
4869
+ PopoverTrigger,
4870
+ Progress,
4871
+ ProgressAtom,
4872
+ RadioGroup,
4873
+ RadioGroupItem,
4874
+ ResizablePanel,
4875
+ ResizablePanelGroup,
4876
+ SEARCH_SPEC_FIELDS,
4877
+ ScrollArea,
4878
+ ScrollAreaAtom,
4879
+ ScrollBar,
4880
+ SearchSpecCard,
4881
+ Select,
4882
+ SelectContent,
4883
+ SelectGroup,
4884
+ SelectItem,
4885
+ SelectLabel,
4886
+ SelectScrollDownButton,
4887
+ SelectScrollUpButton,
4888
+ SelectSeparator,
4889
+ SelectTrigger,
4890
+ SelectValue,
4891
+ Separator2 as Separator,
4892
+ SeparatorAtom,
4893
+ Sheet,
4894
+ SheetAtom,
4895
+ SheetClose,
4896
+ SheetContent,
4897
+ SheetDescription,
4898
+ SheetFooter,
4899
+ SheetHeader,
4900
+ SheetTitle,
4901
+ SheetTrigger,
4902
+ Skeleton,
4903
+ SkeletonAtom,
4904
+ Slider,
4905
+ Spinner,
4906
+ SpinnerAtom,
4907
+ Switch,
4908
+ Table,
4909
+ TableAtom,
4910
+ TableBody,
4911
+ TableCaption,
4912
+ TableCell,
4913
+ TableHead,
4914
+ TableHeader,
4915
+ TableRow,
4916
+ Tabs,
4917
+ TabsAtom,
4918
+ TabsContent,
4919
+ TabsList,
4920
+ TabsTrigger,
4921
+ TextAtom,
4922
+ Textarea,
4923
+ Tooltip,
4924
+ TooltipAtom,
4925
+ TooltipContent,
4926
+ TooltipProvider,
4927
+ TooltipTrigger,
4928
+ cn
4929
+ };