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.
- package/README.md +175 -0
- package/config/tailwind-preset.js +106 -0
- package/dist/index.d.mts +1259 -0
- package/dist/index.d.ts +1259 -0
- package/dist/index.js +5175 -0
- package/dist/index.mjs +4929 -0
- package/package.json +94 -0
- package/src/atoms/AccordionAtom.tsx +44 -0
- package/src/atoms/AlertAtom.tsx +46 -0
- package/src/atoms/AlertDialogAtom.tsx +66 -0
- package/src/atoms/AspectRatioAtom.tsx +27 -0
- package/src/atoms/AvatarAtom.tsx +20 -0
- package/src/atoms/BadgeAtom.tsx +25 -0
- package/src/atoms/BreadcrumbAtom.tsx +36 -0
- package/src/atoms/ButtonAtom.tsx +63 -0
- package/src/atoms/CalendarAtom.tsx +24 -0
- package/src/atoms/CardAtom.tsx +64 -0
- package/src/atoms/CarouselAtom.tsx +40 -0
- package/src/atoms/CollapsibleAtom.tsx +44 -0
- package/src/atoms/CommandAtom.tsx +46 -0
- package/src/atoms/DialogAtom.tsx +68 -0
- package/src/atoms/InputAtom.tsx +162 -0
- package/src/atoms/LayoutAtom.tsx +43 -0
- package/src/atoms/PaginationAtom.tsx +49 -0
- package/src/atoms/PopoverAtom.tsx +40 -0
- package/src/atoms/ProgressAtom.tsx +15 -0
- package/src/atoms/ScrollAreaAtom.tsx +31 -0
- package/src/atoms/SeparatorAtom.tsx +16 -0
- package/src/atoms/SheetAtom.tsx +72 -0
- package/src/atoms/SkeletonAtom.tsx +22 -0
- package/src/atoms/SpinnerAtom.tsx +26 -0
- package/src/atoms/TableAtom.tsx +58 -0
- package/src/atoms/TabsAtom.tsx +40 -0
- package/src/atoms/TextAtom.tsx +35 -0
- package/src/atoms/TooltipAtom.tsx +39 -0
- package/src/atoms/index.ts +28 -0
- package/src/components/index.ts +178 -0
- package/src/components/ui/accordion.tsx +56 -0
- package/src/components/ui/alert-dialog.tsx +139 -0
- package/src/components/ui/alert.tsx +59 -0
- package/src/components/ui/aspect-ratio.tsx +5 -0
- package/src/components/ui/avatar.tsx +50 -0
- package/src/components/ui/badge.tsx +36 -0
- package/src/components/ui/breadcrumb.tsx +115 -0
- package/src/components/ui/button-group.tsx +83 -0
- package/src/components/ui/button.tsx +56 -0
- package/src/components/ui/calendar.tsx +213 -0
- package/src/components/ui/card.tsx +79 -0
- package/src/components/ui/carousel.tsx +260 -0
- package/src/components/ui/chart.tsx +367 -0
- package/src/components/ui/checkbox.tsx +28 -0
- package/src/components/ui/collapsible.tsx +11 -0
- package/src/components/ui/command.tsx +153 -0
- package/src/components/ui/context-menu.tsx +198 -0
- package/src/components/ui/dialog.tsx +122 -0
- package/src/components/ui/drawer.tsx +116 -0
- package/src/components/ui/dropdown-menu.tsx +200 -0
- package/src/components/ui/empty.tsx +104 -0
- package/src/components/ui/field.tsx +244 -0
- package/src/components/ui/form.tsx +176 -0
- package/src/components/ui/hover-card.tsx +27 -0
- package/src/components/ui/input-group.tsx +168 -0
- package/src/components/ui/input-otp.tsx +69 -0
- package/src/components/ui/input.tsx +22 -0
- package/src/components/ui/item.tsx +193 -0
- package/src/components/ui/kbd.tsx +28 -0
- package/src/components/ui/label.tsx +26 -0
- package/src/components/ui/menubar.tsx +254 -0
- package/src/components/ui/navigation-menu.tsx +128 -0
- package/src/components/ui/pagination.tsx +117 -0
- package/src/components/ui/popover.tsx +29 -0
- package/src/components/ui/progress.tsx +28 -0
- package/src/components/ui/radio-group.tsx +42 -0
- package/src/components/ui/resizable.tsx +45 -0
- package/src/components/ui/scroll-area.tsx +46 -0
- package/src/components/ui/select.tsx +160 -0
- package/src/components/ui/separator.tsx +29 -0
- package/src/components/ui/sheet.tsx +140 -0
- package/src/components/ui/sidebar.tsx +771 -0
- package/src/components/ui/skeleton.tsx +15 -0
- package/src/components/ui/slider.tsx +26 -0
- package/src/components/ui/sonner.tsx +45 -0
- package/src/components/ui/spinner.tsx +16 -0
- package/src/components/ui/switch.tsx +27 -0
- package/src/components/ui/table.tsx +117 -0
- package/src/components/ui/tabs.tsx +53 -0
- package/src/components/ui/textarea.tsx +22 -0
- package/src/components/ui/toggle-group.tsx +61 -0
- package/src/components/ui/toggle.tsx +43 -0
- package/src/components/ui/tooltip.tsx +30 -0
- package/src/hooks/use-mobile.tsx +19 -0
- package/src/index.ts +24 -0
- package/src/lib/countries.ts +203 -0
- package/src/lib/index.ts +2 -0
- package/src/lib/utils.ts +15 -0
- package/src/lib/validators/index.ts +1 -0
- package/src/lib/validators/theme.ts +148 -0
- package/src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.tsx +123 -0
- package/src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.types.ts +13 -0
- package/src/molecules/creator-discovery/CampaignSeedCard/index.ts +2 -0
- package/src/molecules/creator-discovery/MCQCard/MCQCard.tsx +165 -0
- package/src/molecules/creator-discovery/MCQCard/MCQCard.types.ts +71 -0
- package/src/molecules/creator-discovery/MCQCard/index.ts +2 -0
- package/src/molecules/creator-discovery/SearchSpecCard/CustomFieldRenderers.tsx +334 -0
- package/src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.tsx +111 -0
- package/src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.types.ts +18 -0
- package/src/molecules/creator-discovery/SearchSpecCard/index.ts +3 -0
- package/src/molecules/creator-discovery/index.ts +3 -0
- package/src/molecules/generic/ActionButton/ActionButton.tsx +137 -0
- package/src/molecules/generic/ActionButton/ActionButton.types.ts +68 -0
- package/src/molecules/generic/ActionButton/index.ts +2 -0
- package/src/molecules/generic/EditableField/EditableField.tsx +229 -0
- package/src/molecules/generic/EditableField/EditableField.types.ts +73 -0
- package/src/molecules/generic/EditableField/index.ts +2 -0
- package/src/molecules/generic/FormCard/FormCard.tsx +136 -0
- package/src/molecules/generic/FormCard/FormCard.types.ts +93 -0
- package/src/molecules/generic/FormCard/index.ts +2 -0
- package/src/molecules/generic/index.ts +3 -0
- package/src/molecules/index.ts +2 -0
- package/src/render/PXEngineRenderer.tsx +272 -0
- package/src/render/index.ts +1 -0
- package/src/styles/globals.css +146 -0
- package/src/types/atoms.ts +294 -0
- package/src/types/common.ts +116 -0
- package/src/types/index.ts +3 -0
- package/src/types/molecules.ts +54 -0
- 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
|
+
};
|