@hai3/uikit 0.1.0-alpha.8 → 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5386 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +843 -0
- package/dist/index.d.ts +843 -0
- package/dist/index.js +4843 -0
- package/dist/index.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
ADDED
|
@@ -0,0 +1,4843 @@
|
|
|
1
|
+
import { cva } from 'class-variance-authority';
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
|
|
6
|
+
import * as React24 from 'react';
|
|
7
|
+
import React24__default, { useMemo } from 'react';
|
|
8
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
9
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
10
|
+
import { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
|
|
11
|
+
export { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
|
|
12
|
+
import { getDefaultClassNames, DayPicker } from 'react-day-picker';
|
|
13
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
14
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
15
|
+
import { OTPInput, OTPInputContext } from 'input-otp';
|
|
16
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
17
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
18
|
+
import { FormProvider, Controller, useFormContext, useFormState } from 'react-hook-form';
|
|
19
|
+
import * as SwitchPrimitives from '@radix-ui/react-switch';
|
|
20
|
+
import { useReactTable, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
|
|
21
|
+
export { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table';
|
|
22
|
+
import { Loader2, X, ArrowLeft, ArrowRight, ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight, ArrowDown, ArrowUp, ChevronsUpDown, EyeOff, Settings2, XOctagon, AlertTriangle, Info, CheckCircle2, MoreHorizontal, GripVertical, User, Bot, Paperclip, Send, Plus, Search } from 'lucide-react';
|
|
23
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
24
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
25
|
+
import { trim, toUpper } from 'lodash';
|
|
26
|
+
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
27
|
+
import * as ProgressPrimitive from '@radix-ui/react-progress';
|
|
28
|
+
import { Toaster as Toaster$1 } from 'sonner';
|
|
29
|
+
export { toast } from 'sonner';
|
|
30
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
31
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
32
|
+
import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
|
|
33
|
+
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
34
|
+
import * as MenubarPrimitive from '@radix-ui/react-menubar';
|
|
35
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
36
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
37
|
+
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
38
|
+
import { Drawer as Drawer$1 } from 'vaul';
|
|
39
|
+
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
40
|
+
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
41
|
+
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
42
|
+
import useEmblaCarousel from 'embla-carousel-react';
|
|
43
|
+
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
44
|
+
export { Area, AreaChart, Bar, BarChart, Brush, CartesianGrid, Cell, Label as ChartLabel, Legend as ChartLegend, Tooltip as ChartTooltip, ComposedChart, Cross, Curve, Customized, Dot, ErrorBar, Funnel, FunnelChart, LabelList, Line, LineChart, Pie, PieChart, PolarAngleAxis, PolarGrid, PolarRadiusAxis, Polygon, Radar, RadarChart, RadialBar, RadialBarChart, Rectangle, ReferenceArea, ReferenceDot, ReferenceLine, ResponsiveContainer, Sankey, Scatter, ScatterChart, Sector, Text, Treemap, XAxis, YAxis, ZAxis } from 'recharts';
|
|
45
|
+
import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
|
|
46
|
+
import { format } from 'date-fns';
|
|
47
|
+
|
|
48
|
+
// src/base/alert.tsx
|
|
49
|
+
function cn(...inputs) {
|
|
50
|
+
return twMerge(clsx(inputs));
|
|
51
|
+
}
|
|
52
|
+
var alertVariants = cva(
|
|
53
|
+
"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
|
54
|
+
{
|
|
55
|
+
variants: {
|
|
56
|
+
variant: {
|
|
57
|
+
default: "bg-card text-card-foreground",
|
|
58
|
+
destructive: "text-destructive bg-card [&>svg]:text-current [&_[data-slot=alert-description]]:text-destructive/90"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
defaultVariants: {
|
|
62
|
+
variant: "default"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
function Alert({
|
|
67
|
+
className,
|
|
68
|
+
variant,
|
|
69
|
+
...props
|
|
70
|
+
}) {
|
|
71
|
+
return /* @__PURE__ */ jsx(
|
|
72
|
+
"div",
|
|
73
|
+
{
|
|
74
|
+
"data-slot": "alert",
|
|
75
|
+
role: "alert",
|
|
76
|
+
className: cn(alertVariants({ variant }), className),
|
|
77
|
+
...props
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function AlertTitle({ className, ...props }) {
|
|
82
|
+
return /* @__PURE__ */ jsx(
|
|
83
|
+
"div",
|
|
84
|
+
{
|
|
85
|
+
"data-slot": "alert-title",
|
|
86
|
+
className: cn(
|
|
87
|
+
"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
|
|
88
|
+
className
|
|
89
|
+
),
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
function AlertDescription({
|
|
95
|
+
className,
|
|
96
|
+
...props
|
|
97
|
+
}) {
|
|
98
|
+
return /* @__PURE__ */ jsx(
|
|
99
|
+
"div",
|
|
100
|
+
{
|
|
101
|
+
"data-slot": "alert-description",
|
|
102
|
+
className: cn(
|
|
103
|
+
"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
|
|
104
|
+
className
|
|
105
|
+
),
|
|
106
|
+
...props
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
function AspectRatio({
|
|
111
|
+
...props
|
|
112
|
+
}) {
|
|
113
|
+
return /* @__PURE__ */ jsx(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
|
|
114
|
+
}
|
|
115
|
+
function Empty({ className, ...props }) {
|
|
116
|
+
return /* @__PURE__ */ jsx(
|
|
117
|
+
"div",
|
|
118
|
+
{
|
|
119
|
+
"data-slot": "empty",
|
|
120
|
+
className: cn(
|
|
121
|
+
"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12",
|
|
122
|
+
className
|
|
123
|
+
),
|
|
124
|
+
...props
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
function EmptyHeader({ className, ...props }) {
|
|
129
|
+
return /* @__PURE__ */ jsx(
|
|
130
|
+
"div",
|
|
131
|
+
{
|
|
132
|
+
"data-slot": "empty-header",
|
|
133
|
+
className: cn(
|
|
134
|
+
"flex max-w-sm flex-col items-center gap-2 text-center",
|
|
135
|
+
className
|
|
136
|
+
),
|
|
137
|
+
...props
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
var emptyMediaVariants = cva(
|
|
142
|
+
"flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
143
|
+
{
|
|
144
|
+
variants: {
|
|
145
|
+
variant: {
|
|
146
|
+
default: "bg-transparent",
|
|
147
|
+
icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
defaultVariants: {
|
|
151
|
+
variant: "default"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
function EmptyMedia({
|
|
156
|
+
className,
|
|
157
|
+
variant = "default",
|
|
158
|
+
...props
|
|
159
|
+
}) {
|
|
160
|
+
return /* @__PURE__ */ jsx(
|
|
161
|
+
"div",
|
|
162
|
+
{
|
|
163
|
+
"data-slot": "empty-media",
|
|
164
|
+
"data-variant": variant,
|
|
165
|
+
className: cn(emptyMediaVariants({ variant, className })),
|
|
166
|
+
...props
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
function EmptyTitle({ className, ...props }) {
|
|
171
|
+
return /* @__PURE__ */ jsx(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
"data-slot": "empty-title",
|
|
175
|
+
className: cn("text-lg font-medium tracking-tight", className),
|
|
176
|
+
...props
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
function EmptyDescription({ className, ...props }) {
|
|
181
|
+
return /* @__PURE__ */ jsx(
|
|
182
|
+
"div",
|
|
183
|
+
{
|
|
184
|
+
"data-slot": "empty-description",
|
|
185
|
+
className: cn(
|
|
186
|
+
"text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
|
|
187
|
+
className
|
|
188
|
+
),
|
|
189
|
+
...props
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
function EmptyContent({ className, ...props }) {
|
|
194
|
+
return /* @__PURE__ */ jsx(
|
|
195
|
+
"div",
|
|
196
|
+
{
|
|
197
|
+
"data-slot": "empty-content",
|
|
198
|
+
className: cn(
|
|
199
|
+
"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance",
|
|
200
|
+
className
|
|
201
|
+
),
|
|
202
|
+
...props
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
var Avatar = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
207
|
+
AvatarPrimitive.Root,
|
|
208
|
+
{
|
|
209
|
+
ref,
|
|
210
|
+
className: cn(
|
|
211
|
+
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
|
|
212
|
+
className
|
|
213
|
+
),
|
|
214
|
+
...props
|
|
215
|
+
}
|
|
216
|
+
));
|
|
217
|
+
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
218
|
+
var AvatarImage = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
219
|
+
AvatarPrimitive.Image,
|
|
220
|
+
{
|
|
221
|
+
ref,
|
|
222
|
+
className: cn("aspect-square h-full w-full", className),
|
|
223
|
+
...props
|
|
224
|
+
}
|
|
225
|
+
));
|
|
226
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
227
|
+
var AvatarFallback = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
228
|
+
AvatarPrimitive.Fallback,
|
|
229
|
+
{
|
|
230
|
+
ref,
|
|
231
|
+
className: cn(
|
|
232
|
+
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
233
|
+
className
|
|
234
|
+
),
|
|
235
|
+
...props
|
|
236
|
+
}
|
|
237
|
+
));
|
|
238
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
239
|
+
var buttonVariants = cva(
|
|
240
|
+
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
241
|
+
{
|
|
242
|
+
variants: {
|
|
243
|
+
variant: {
|
|
244
|
+
[ButtonVariant.Default]: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
|
|
245
|
+
[ButtonVariant.Destructive]: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
|
|
246
|
+
[ButtonVariant.Outline]: "border border-input bg-background shadow-sm hover:bg-accent data-[state=open]:bg-accent",
|
|
247
|
+
[ButtonVariant.Secondary]: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
|
|
248
|
+
[ButtonVariant.Ghost]: "hover:bg-accent data-[state=open]:bg-accent",
|
|
249
|
+
[ButtonVariant.Link]: "text-primary underline-offset-4 hover:underline"
|
|
250
|
+
},
|
|
251
|
+
size: {
|
|
252
|
+
[ButtonSize.Default]: "h-9 px-4 py-2",
|
|
253
|
+
[ButtonSize.Sm]: "h-8 rounded-md px-3 text-xs",
|
|
254
|
+
[ButtonSize.Lg]: "h-10 rounded-md px-8",
|
|
255
|
+
[ButtonSize.Icon]: "h-9 w-9"
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
defaultVariants: {
|
|
259
|
+
variant: ButtonVariant.Default,
|
|
260
|
+
size: ButtonSize.Default
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
var Button = React24.forwardRef(
|
|
265
|
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
266
|
+
const Comp = asChild ? Slot : "button";
|
|
267
|
+
return /* @__PURE__ */ jsx(
|
|
268
|
+
Comp,
|
|
269
|
+
{
|
|
270
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
271
|
+
ref,
|
|
272
|
+
...props
|
|
273
|
+
}
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
);
|
|
277
|
+
Button.displayName = "Button";
|
|
278
|
+
var badgeVariants = cva(
|
|
279
|
+
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
280
|
+
{
|
|
281
|
+
variants: {
|
|
282
|
+
variant: {
|
|
283
|
+
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
284
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
285
|
+
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
286
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
defaultVariants: {
|
|
290
|
+
variant: "default"
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
);
|
|
294
|
+
function Badge({
|
|
295
|
+
className,
|
|
296
|
+
variant,
|
|
297
|
+
asChild = false,
|
|
298
|
+
...props
|
|
299
|
+
}) {
|
|
300
|
+
const Comp = asChild ? Slot : "span";
|
|
301
|
+
return /* @__PURE__ */ jsx(
|
|
302
|
+
Comp,
|
|
303
|
+
{
|
|
304
|
+
className: cn(badgeVariants({ variant }), className),
|
|
305
|
+
...props
|
|
306
|
+
}
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
var ChevronDownIcon = ({
|
|
310
|
+
className = "",
|
|
311
|
+
...props
|
|
312
|
+
}) => {
|
|
313
|
+
return /* @__PURE__ */ jsx(
|
|
314
|
+
"svg",
|
|
315
|
+
{
|
|
316
|
+
className,
|
|
317
|
+
width: "16",
|
|
318
|
+
height: "16",
|
|
319
|
+
viewBox: "0 0 24 24",
|
|
320
|
+
fill: "none",
|
|
321
|
+
stroke: "currentColor",
|
|
322
|
+
strokeWidth: "2",
|
|
323
|
+
strokeLinecap: "round",
|
|
324
|
+
strokeLinejoin: "round",
|
|
325
|
+
...props,
|
|
326
|
+
children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
|
|
327
|
+
}
|
|
328
|
+
);
|
|
329
|
+
};
|
|
330
|
+
var ChevronLeftIcon = ({ className = "" }) => {
|
|
331
|
+
return /* @__PURE__ */ jsx(
|
|
332
|
+
"svg",
|
|
333
|
+
{
|
|
334
|
+
className,
|
|
335
|
+
width: "16",
|
|
336
|
+
height: "16",
|
|
337
|
+
viewBox: "0 0 24 24",
|
|
338
|
+
fill: "none",
|
|
339
|
+
stroke: "currentColor",
|
|
340
|
+
strokeWidth: "2",
|
|
341
|
+
strokeLinecap: "round",
|
|
342
|
+
strokeLinejoin: "round",
|
|
343
|
+
children: /* @__PURE__ */ jsx("path", { d: "m15 18-6-6 6-6" })
|
|
344
|
+
}
|
|
345
|
+
);
|
|
346
|
+
};
|
|
347
|
+
var ChevronRightIcon = ({ className = "" }) => {
|
|
348
|
+
return /* @__PURE__ */ jsx(
|
|
349
|
+
"svg",
|
|
350
|
+
{
|
|
351
|
+
className,
|
|
352
|
+
width: "16",
|
|
353
|
+
height: "16",
|
|
354
|
+
viewBox: "0 0 24 24",
|
|
355
|
+
fill: "none",
|
|
356
|
+
stroke: "currentColor",
|
|
357
|
+
strokeWidth: "2",
|
|
358
|
+
strokeLinecap: "round",
|
|
359
|
+
strokeLinejoin: "round",
|
|
360
|
+
children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" })
|
|
361
|
+
}
|
|
362
|
+
);
|
|
363
|
+
};
|
|
364
|
+
function Calendar({
|
|
365
|
+
className,
|
|
366
|
+
classNames,
|
|
367
|
+
showOutsideDays = true,
|
|
368
|
+
captionLayout = "label",
|
|
369
|
+
buttonVariant = ButtonVariant.Ghost,
|
|
370
|
+
formatters,
|
|
371
|
+
components,
|
|
372
|
+
...props
|
|
373
|
+
}) {
|
|
374
|
+
const defaultClassNames = getDefaultClassNames();
|
|
375
|
+
return /* @__PURE__ */ jsx(
|
|
376
|
+
DayPicker,
|
|
377
|
+
{
|
|
378
|
+
showOutsideDays,
|
|
379
|
+
className: cn(
|
|
380
|
+
"bg-background group/calendar p-3 [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
|
|
381
|
+
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
|
|
382
|
+
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
|
|
383
|
+
className
|
|
384
|
+
),
|
|
385
|
+
captionLayout,
|
|
386
|
+
formatters: {
|
|
387
|
+
formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
|
|
388
|
+
...formatters
|
|
389
|
+
},
|
|
390
|
+
classNames: {
|
|
391
|
+
root: cn("w-fit", defaultClassNames.root),
|
|
392
|
+
months: cn(
|
|
393
|
+
"flex gap-4 flex-col md:flex-row relative",
|
|
394
|
+
defaultClassNames.months
|
|
395
|
+
),
|
|
396
|
+
month: cn("flex flex-col w-full gap-4", defaultClassNames.month),
|
|
397
|
+
nav: cn(
|
|
398
|
+
"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
|
|
399
|
+
defaultClassNames.nav
|
|
400
|
+
),
|
|
401
|
+
button_previous: cn(
|
|
402
|
+
buttonVariants({ variant: buttonVariant }),
|
|
403
|
+
"size-9 md:size-10 aria-disabled:opacity-50 p-0 select-none",
|
|
404
|
+
defaultClassNames.button_previous
|
|
405
|
+
),
|
|
406
|
+
button_next: cn(
|
|
407
|
+
buttonVariants({ variant: buttonVariant }),
|
|
408
|
+
"size-9 md:size-10 aria-disabled:opacity-50 p-0 select-none",
|
|
409
|
+
defaultClassNames.button_next
|
|
410
|
+
),
|
|
411
|
+
month_caption: cn(
|
|
412
|
+
"flex items-center justify-center h-9 md:h-10 w-full px-9 md:px-10",
|
|
413
|
+
defaultClassNames.month_caption
|
|
414
|
+
),
|
|
415
|
+
dropdowns: cn(
|
|
416
|
+
"w-full flex items-center text-sm font-medium justify-center h-9 md:h-10 gap-1.5",
|
|
417
|
+
defaultClassNames.dropdowns
|
|
418
|
+
),
|
|
419
|
+
dropdown_root: cn(
|
|
420
|
+
"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
|
|
421
|
+
defaultClassNames.dropdown_root
|
|
422
|
+
),
|
|
423
|
+
dropdown: cn(
|
|
424
|
+
"absolute bg-popover inset-0 opacity-0",
|
|
425
|
+
defaultClassNames.dropdown
|
|
426
|
+
),
|
|
427
|
+
caption_label: cn(
|
|
428
|
+
"select-none font-medium",
|
|
429
|
+
captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",
|
|
430
|
+
defaultClassNames.caption_label
|
|
431
|
+
),
|
|
432
|
+
table: "w-full border-collapse",
|
|
433
|
+
weekdays: cn("flex", defaultClassNames.weekdays),
|
|
434
|
+
weekday: cn(
|
|
435
|
+
"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",
|
|
436
|
+
defaultClassNames.weekday
|
|
437
|
+
),
|
|
438
|
+
week: cn("flex w-full mt-2", defaultClassNames.week),
|
|
439
|
+
week_number_header: cn(
|
|
440
|
+
"select-none w-9 md:w-10",
|
|
441
|
+
defaultClassNames.week_number_header
|
|
442
|
+
),
|
|
443
|
+
week_number: cn(
|
|
444
|
+
"text-[0.8rem] select-none text-muted-foreground",
|
|
445
|
+
defaultClassNames.week_number
|
|
446
|
+
),
|
|
447
|
+
day: cn(
|
|
448
|
+
"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
|
|
449
|
+
props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "[&:first-child[data-selected=true]_button]:rounded-l-md",
|
|
450
|
+
defaultClassNames.day
|
|
451
|
+
),
|
|
452
|
+
range_start: cn(
|
|
453
|
+
"rounded-l-md bg-accent",
|
|
454
|
+
defaultClassNames.range_start
|
|
455
|
+
),
|
|
456
|
+
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
457
|
+
range_end: cn("rounded-r-md bg-accent", defaultClassNames.range_end),
|
|
458
|
+
today: cn(
|
|
459
|
+
"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
|
|
460
|
+
defaultClassNames.today
|
|
461
|
+
),
|
|
462
|
+
outside: cn(
|
|
463
|
+
"text-muted-foreground aria-selected:text-muted-foreground",
|
|
464
|
+
defaultClassNames.outside
|
|
465
|
+
),
|
|
466
|
+
disabled: cn(
|
|
467
|
+
"text-muted-foreground opacity-50",
|
|
468
|
+
defaultClassNames.disabled
|
|
469
|
+
),
|
|
470
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
471
|
+
...classNames
|
|
472
|
+
},
|
|
473
|
+
components: {
|
|
474
|
+
Root: ({ className: className2, rootRef, ...props2 }) => {
|
|
475
|
+
return /* @__PURE__ */ jsx(
|
|
476
|
+
"div",
|
|
477
|
+
{
|
|
478
|
+
"data-slot": "calendar",
|
|
479
|
+
ref: rootRef,
|
|
480
|
+
className: cn(className2),
|
|
481
|
+
...props2
|
|
482
|
+
}
|
|
483
|
+
);
|
|
484
|
+
},
|
|
485
|
+
Chevron: ({ className: className2, orientation, ...props2 }) => {
|
|
486
|
+
if (orientation === "left") {
|
|
487
|
+
return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
|
|
488
|
+
}
|
|
489
|
+
if (orientation === "right") {
|
|
490
|
+
return /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
|
|
491
|
+
}
|
|
492
|
+
return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
|
|
493
|
+
},
|
|
494
|
+
DayButton: CalendarDayButton,
|
|
495
|
+
WeekNumber: ({ children, ...props2 }) => {
|
|
496
|
+
return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-9 md:size-10 items-center justify-center text-center", children }) });
|
|
497
|
+
},
|
|
498
|
+
...components
|
|
499
|
+
},
|
|
500
|
+
...props
|
|
501
|
+
}
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
function CalendarDayButton({
|
|
505
|
+
className,
|
|
506
|
+
day,
|
|
507
|
+
modifiers,
|
|
508
|
+
...props
|
|
509
|
+
}) {
|
|
510
|
+
const defaultClassNames = getDefaultClassNames();
|
|
511
|
+
const ref = React24.useRef(null);
|
|
512
|
+
React24.useEffect(() => {
|
|
513
|
+
if (modifiers.focused) ref.current?.focus();
|
|
514
|
+
}, [modifiers.focused]);
|
|
515
|
+
return /* @__PURE__ */ jsx(
|
|
516
|
+
Button,
|
|
517
|
+
{
|
|
518
|
+
ref,
|
|
519
|
+
variant: ButtonVariant.Ghost,
|
|
520
|
+
size: ButtonSize.Icon,
|
|
521
|
+
"data-day": day.date.toLocaleDateString(),
|
|
522
|
+
"data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
|
|
523
|
+
"data-range-start": modifiers.range_start,
|
|
524
|
+
"data-range-end": modifiers.range_end,
|
|
525
|
+
"data-range-middle": modifiers.range_middle,
|
|
526
|
+
className: cn(
|
|
527
|
+
"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 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-9 md:min-w-10 flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",
|
|
528
|
+
defaultClassNames.day,
|
|
529
|
+
className
|
|
530
|
+
),
|
|
531
|
+
...props
|
|
532
|
+
}
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
var CheckIcon = ({ className = "" }) => {
|
|
536
|
+
return /* @__PURE__ */ jsx(
|
|
537
|
+
"svg",
|
|
538
|
+
{
|
|
539
|
+
className,
|
|
540
|
+
width: "16",
|
|
541
|
+
height: "16",
|
|
542
|
+
viewBox: "0 0 24 24",
|
|
543
|
+
fill: "none",
|
|
544
|
+
stroke: "currentColor",
|
|
545
|
+
strokeWidth: "2",
|
|
546
|
+
strokeLinecap: "round",
|
|
547
|
+
strokeLinejoin: "round",
|
|
548
|
+
children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" })
|
|
549
|
+
}
|
|
550
|
+
);
|
|
551
|
+
};
|
|
552
|
+
function Checkbox({
|
|
553
|
+
className,
|
|
554
|
+
...props
|
|
555
|
+
}) {
|
|
556
|
+
return /* @__PURE__ */ jsx(
|
|
557
|
+
CheckboxPrimitive.Root,
|
|
558
|
+
{
|
|
559
|
+
"data-slot": "checkbox",
|
|
560
|
+
className: cn(
|
|
561
|
+
"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
562
|
+
className
|
|
563
|
+
),
|
|
564
|
+
...props,
|
|
565
|
+
children: /* @__PURE__ */ jsx(
|
|
566
|
+
CheckboxPrimitive.Indicator,
|
|
567
|
+
{
|
|
568
|
+
"data-slot": "checkbox-indicator",
|
|
569
|
+
className: "grid place-content-center text-current transition-none",
|
|
570
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
|
|
571
|
+
}
|
|
572
|
+
)
|
|
573
|
+
}
|
|
574
|
+
);
|
|
575
|
+
}
|
|
576
|
+
var CircleIcon = ({ className = "" }) => {
|
|
577
|
+
return /* @__PURE__ */ jsx(
|
|
578
|
+
"svg",
|
|
579
|
+
{
|
|
580
|
+
className,
|
|
581
|
+
width: "16",
|
|
582
|
+
height: "16",
|
|
583
|
+
viewBox: "0 0 24 24",
|
|
584
|
+
fill: "none",
|
|
585
|
+
stroke: "currentColor",
|
|
586
|
+
strokeWidth: "2",
|
|
587
|
+
strokeLinecap: "round",
|
|
588
|
+
strokeLinejoin: "round",
|
|
589
|
+
children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" })
|
|
590
|
+
}
|
|
591
|
+
);
|
|
592
|
+
};
|
|
593
|
+
function RadioGroup({
|
|
594
|
+
className,
|
|
595
|
+
...props
|
|
596
|
+
}) {
|
|
597
|
+
return /* @__PURE__ */ jsx(
|
|
598
|
+
RadioGroupPrimitive.Root,
|
|
599
|
+
{
|
|
600
|
+
"data-slot": "radio-group",
|
|
601
|
+
className: cn("grid gap-3", className),
|
|
602
|
+
...props
|
|
603
|
+
}
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
function RadioGroupItem({
|
|
607
|
+
className,
|
|
608
|
+
...props
|
|
609
|
+
}) {
|
|
610
|
+
return /* @__PURE__ */ jsx(
|
|
611
|
+
RadioGroupPrimitive.Item,
|
|
612
|
+
{
|
|
613
|
+
"data-slot": "radio-group-item",
|
|
614
|
+
className: cn(
|
|
615
|
+
"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
616
|
+
className
|
|
617
|
+
),
|
|
618
|
+
...props,
|
|
619
|
+
children: /* @__PURE__ */ jsx(
|
|
620
|
+
RadioGroupPrimitive.Indicator,
|
|
621
|
+
{
|
|
622
|
+
"data-slot": "radio-group-indicator",
|
|
623
|
+
className: "relative flex items-center justify-center",
|
|
624
|
+
children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-current absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
|
|
625
|
+
}
|
|
626
|
+
)
|
|
627
|
+
}
|
|
628
|
+
);
|
|
629
|
+
}
|
|
630
|
+
function NativeSelect({ className, ...props }) {
|
|
631
|
+
return /* @__PURE__ */ jsxs(
|
|
632
|
+
"div",
|
|
633
|
+
{
|
|
634
|
+
className: "group/native-select relative w-fit has-[select:disabled]:opacity-50",
|
|
635
|
+
"data-slot": "native-select-wrapper",
|
|
636
|
+
children: [
|
|
637
|
+
/* @__PURE__ */ jsx(
|
|
638
|
+
"select",
|
|
639
|
+
{
|
|
640
|
+
"data-slot": "native-select",
|
|
641
|
+
className: cn(
|
|
642
|
+
"border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 appearance-none rounded-md border bg-transparent px-3 py-2 pr-9 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
643
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
644
|
+
"aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/30 aria-[invalid=true]:border-destructive",
|
|
645
|
+
className
|
|
646
|
+
),
|
|
647
|
+
...props
|
|
648
|
+
}
|
|
649
|
+
),
|
|
650
|
+
/* @__PURE__ */ jsx(
|
|
651
|
+
ChevronDownIcon,
|
|
652
|
+
{
|
|
653
|
+
className: "text-muted-foreground pointer-events-none absolute top-1/2 right-3.5 size-4 -translate-y-1/2 opacity-50 select-none",
|
|
654
|
+
"aria-hidden": "true",
|
|
655
|
+
"data-slot": "native-select-icon"
|
|
656
|
+
}
|
|
657
|
+
)
|
|
658
|
+
]
|
|
659
|
+
}
|
|
660
|
+
);
|
|
661
|
+
}
|
|
662
|
+
function NativeSelectOption({ ...props }) {
|
|
663
|
+
return /* @__PURE__ */ jsx("option", { "data-slot": "native-select-option", ...props });
|
|
664
|
+
}
|
|
665
|
+
function NativeSelectOptGroup({
|
|
666
|
+
className,
|
|
667
|
+
...props
|
|
668
|
+
}) {
|
|
669
|
+
return /* @__PURE__ */ jsx(
|
|
670
|
+
"optgroup",
|
|
671
|
+
{
|
|
672
|
+
"data-slot": "native-select-optgroup",
|
|
673
|
+
className: cn(className),
|
|
674
|
+
...props
|
|
675
|
+
}
|
|
676
|
+
);
|
|
677
|
+
}
|
|
678
|
+
var MinusIcon = ({
|
|
679
|
+
className = "",
|
|
680
|
+
...props
|
|
681
|
+
}) => {
|
|
682
|
+
return /* @__PURE__ */ jsx(
|
|
683
|
+
"svg",
|
|
684
|
+
{
|
|
685
|
+
className,
|
|
686
|
+
width: "16",
|
|
687
|
+
height: "16",
|
|
688
|
+
viewBox: "0 0 24 24",
|
|
689
|
+
fill: "none",
|
|
690
|
+
stroke: "currentColor",
|
|
691
|
+
strokeWidth: "2",
|
|
692
|
+
strokeLinecap: "round",
|
|
693
|
+
strokeLinejoin: "round",
|
|
694
|
+
...props,
|
|
695
|
+
children: /* @__PURE__ */ jsx("path", { d: "M5 12h14" })
|
|
696
|
+
}
|
|
697
|
+
);
|
|
698
|
+
};
|
|
699
|
+
function InputOTP({
|
|
700
|
+
className,
|
|
701
|
+
containerClassName,
|
|
702
|
+
...props
|
|
703
|
+
}) {
|
|
704
|
+
return /* @__PURE__ */ jsx(
|
|
705
|
+
OTPInput,
|
|
706
|
+
{
|
|
707
|
+
"data-slot": "input-otp",
|
|
708
|
+
containerClassName: cn(
|
|
709
|
+
"flex items-center gap-2 has-disabled:opacity-50",
|
|
710
|
+
containerClassName
|
|
711
|
+
),
|
|
712
|
+
className: cn("disabled:cursor-not-allowed", className),
|
|
713
|
+
...props
|
|
714
|
+
}
|
|
715
|
+
);
|
|
716
|
+
}
|
|
717
|
+
function InputOTPGroup({ className, ...props }) {
|
|
718
|
+
return /* @__PURE__ */ jsx(
|
|
719
|
+
"div",
|
|
720
|
+
{
|
|
721
|
+
"data-slot": "input-otp-group",
|
|
722
|
+
className: cn("flex items-center", className),
|
|
723
|
+
...props
|
|
724
|
+
}
|
|
725
|
+
);
|
|
726
|
+
}
|
|
727
|
+
function InputOTPSlot({
|
|
728
|
+
index,
|
|
729
|
+
className,
|
|
730
|
+
...props
|
|
731
|
+
}) {
|
|
732
|
+
const inputOTPContext = React24.useContext(OTPInputContext);
|
|
733
|
+
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
|
734
|
+
return /* @__PURE__ */ jsxs(
|
|
735
|
+
"div",
|
|
736
|
+
{
|
|
737
|
+
"data-slot": "input-otp-slot",
|
|
738
|
+
"data-active": isActive,
|
|
739
|
+
className: cn(
|
|
740
|
+
"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
|
|
741
|
+
className
|
|
742
|
+
),
|
|
743
|
+
...props,
|
|
744
|
+
children: [
|
|
745
|
+
char,
|
|
746
|
+
hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
|
|
747
|
+
]
|
|
748
|
+
}
|
|
749
|
+
);
|
|
750
|
+
}
|
|
751
|
+
function InputOTPSeparator({ ...props }) {
|
|
752
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx(MinusIcon, {}) });
|
|
753
|
+
}
|
|
754
|
+
var Input = React24.forwardRef(
|
|
755
|
+
({ className, type, ...props }, ref) => {
|
|
756
|
+
return /* @__PURE__ */ jsx(
|
|
757
|
+
"input",
|
|
758
|
+
{
|
|
759
|
+
type,
|
|
760
|
+
className: cn(
|
|
761
|
+
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors 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-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
762
|
+
className
|
|
763
|
+
),
|
|
764
|
+
ref,
|
|
765
|
+
...props
|
|
766
|
+
}
|
|
767
|
+
);
|
|
768
|
+
}
|
|
769
|
+
);
|
|
770
|
+
Input.displayName = "Input";
|
|
771
|
+
function Label({
|
|
772
|
+
className,
|
|
773
|
+
...props
|
|
774
|
+
}) {
|
|
775
|
+
return /* @__PURE__ */ jsx(
|
|
776
|
+
LabelPrimitive.Root,
|
|
777
|
+
{
|
|
778
|
+
"data-slot": "label",
|
|
779
|
+
className: cn(
|
|
780
|
+
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
781
|
+
className
|
|
782
|
+
),
|
|
783
|
+
...props
|
|
784
|
+
}
|
|
785
|
+
);
|
|
786
|
+
}
|
|
787
|
+
function Separator({
|
|
788
|
+
className,
|
|
789
|
+
orientation = "horizontal",
|
|
790
|
+
decorative = true,
|
|
791
|
+
...props
|
|
792
|
+
}) {
|
|
793
|
+
return /* @__PURE__ */ jsx(
|
|
794
|
+
SeparatorPrimitive.Root,
|
|
795
|
+
{
|
|
796
|
+
"data-slot": "separator",
|
|
797
|
+
decorative,
|
|
798
|
+
orientation,
|
|
799
|
+
className: cn(
|
|
800
|
+
"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
801
|
+
className
|
|
802
|
+
),
|
|
803
|
+
...props
|
|
804
|
+
}
|
|
805
|
+
);
|
|
806
|
+
}
|
|
807
|
+
function FieldSet({ className, ...props }) {
|
|
808
|
+
return /* @__PURE__ */ jsx(
|
|
809
|
+
"fieldset",
|
|
810
|
+
{
|
|
811
|
+
"data-slot": "field-set",
|
|
812
|
+
className: cn(
|
|
813
|
+
"flex flex-col gap-6",
|
|
814
|
+
"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
|
|
815
|
+
className
|
|
816
|
+
),
|
|
817
|
+
...props
|
|
818
|
+
}
|
|
819
|
+
);
|
|
820
|
+
}
|
|
821
|
+
function FieldLegend({
|
|
822
|
+
className,
|
|
823
|
+
variant = "legend",
|
|
824
|
+
...props
|
|
825
|
+
}) {
|
|
826
|
+
return /* @__PURE__ */ jsx(
|
|
827
|
+
"legend",
|
|
828
|
+
{
|
|
829
|
+
"data-slot": "field-legend",
|
|
830
|
+
"data-variant": variant,
|
|
831
|
+
className: cn(
|
|
832
|
+
"mb-3 font-medium",
|
|
833
|
+
"data-[variant=legend]:text-base",
|
|
834
|
+
"data-[variant=label]:text-sm",
|
|
835
|
+
className
|
|
836
|
+
),
|
|
837
|
+
...props
|
|
838
|
+
}
|
|
839
|
+
);
|
|
840
|
+
}
|
|
841
|
+
function FieldGroup({ className, ...props }) {
|
|
842
|
+
return /* @__PURE__ */ jsx(
|
|
843
|
+
"div",
|
|
844
|
+
{
|
|
845
|
+
"data-slot": "field-group",
|
|
846
|
+
className: cn(
|
|
847
|
+
"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",
|
|
848
|
+
className
|
|
849
|
+
),
|
|
850
|
+
...props
|
|
851
|
+
}
|
|
852
|
+
);
|
|
853
|
+
}
|
|
854
|
+
var fieldVariants = cva(
|
|
855
|
+
"group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
|
|
856
|
+
{
|
|
857
|
+
variants: {
|
|
858
|
+
orientation: {
|
|
859
|
+
vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
|
|
860
|
+
horizontal: [
|
|
861
|
+
"flex-row items-center",
|
|
862
|
+
"[&>[data-slot=field-label]]:flex-auto",
|
|
863
|
+
"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
864
|
+
],
|
|
865
|
+
responsive: [
|
|
866
|
+
"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto",
|
|
867
|
+
"@md/field-group:[&>[data-slot=field-label]]:flex-auto",
|
|
868
|
+
"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
869
|
+
]
|
|
870
|
+
}
|
|
871
|
+
},
|
|
872
|
+
defaultVariants: {
|
|
873
|
+
orientation: "vertical"
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
);
|
|
877
|
+
function Field({
|
|
878
|
+
className,
|
|
879
|
+
orientation = "vertical",
|
|
880
|
+
...props
|
|
881
|
+
}) {
|
|
882
|
+
return /* @__PURE__ */ jsx(
|
|
883
|
+
"div",
|
|
884
|
+
{
|
|
885
|
+
role: "group",
|
|
886
|
+
"data-slot": "field",
|
|
887
|
+
"data-orientation": orientation,
|
|
888
|
+
className: cn(fieldVariants({ orientation }), className),
|
|
889
|
+
...props
|
|
890
|
+
}
|
|
891
|
+
);
|
|
892
|
+
}
|
|
893
|
+
function FieldContent({ className, ...props }) {
|
|
894
|
+
return /* @__PURE__ */ jsx(
|
|
895
|
+
"div",
|
|
896
|
+
{
|
|
897
|
+
"data-slot": "field-content",
|
|
898
|
+
className: cn(
|
|
899
|
+
"group/field-content flex flex-1 flex-col gap-1.5 leading-snug",
|
|
900
|
+
className
|
|
901
|
+
),
|
|
902
|
+
...props
|
|
903
|
+
}
|
|
904
|
+
);
|
|
905
|
+
}
|
|
906
|
+
function FieldLabel({
|
|
907
|
+
className,
|
|
908
|
+
...props
|
|
909
|
+
}) {
|
|
910
|
+
return /* @__PURE__ */ jsx(
|
|
911
|
+
Label,
|
|
912
|
+
{
|
|
913
|
+
"data-slot": "field-label",
|
|
914
|
+
className: cn(
|
|
915
|
+
"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
|
|
916
|
+
"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4",
|
|
917
|
+
"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10",
|
|
918
|
+
className
|
|
919
|
+
),
|
|
920
|
+
...props
|
|
921
|
+
}
|
|
922
|
+
);
|
|
923
|
+
}
|
|
924
|
+
function FieldTitle({ className, ...props }) {
|
|
925
|
+
return /* @__PURE__ */ jsx(
|
|
926
|
+
"div",
|
|
927
|
+
{
|
|
928
|
+
"data-slot": "field-label",
|
|
929
|
+
className: cn(
|
|
930
|
+
"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",
|
|
931
|
+
className
|
|
932
|
+
),
|
|
933
|
+
...props
|
|
934
|
+
}
|
|
935
|
+
);
|
|
936
|
+
}
|
|
937
|
+
function FieldDescription({ className, ...props }) {
|
|
938
|
+
return /* @__PURE__ */ jsx(
|
|
939
|
+
"p",
|
|
940
|
+
{
|
|
941
|
+
"data-slot": "field-description",
|
|
942
|
+
className: cn(
|
|
943
|
+
"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance",
|
|
944
|
+
"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5",
|
|
945
|
+
"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
|
|
946
|
+
className
|
|
947
|
+
),
|
|
948
|
+
...props
|
|
949
|
+
}
|
|
950
|
+
);
|
|
951
|
+
}
|
|
952
|
+
function FieldSeparator({
|
|
953
|
+
children,
|
|
954
|
+
className,
|
|
955
|
+
...props
|
|
956
|
+
}) {
|
|
957
|
+
return /* @__PURE__ */ jsxs(
|
|
958
|
+
"div",
|
|
959
|
+
{
|
|
960
|
+
"data-slot": "field-separator",
|
|
961
|
+
"data-content": !!children,
|
|
962
|
+
className: cn(
|
|
963
|
+
"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
|
|
964
|
+
className
|
|
965
|
+
),
|
|
966
|
+
...props,
|
|
967
|
+
children: [
|
|
968
|
+
/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }),
|
|
969
|
+
children && /* @__PURE__ */ jsx(
|
|
970
|
+
"span",
|
|
971
|
+
{
|
|
972
|
+
className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
|
|
973
|
+
"data-slot": "field-separator-content",
|
|
974
|
+
children
|
|
975
|
+
}
|
|
976
|
+
)
|
|
977
|
+
]
|
|
978
|
+
}
|
|
979
|
+
);
|
|
980
|
+
}
|
|
981
|
+
function FieldError({
|
|
982
|
+
className,
|
|
983
|
+
children,
|
|
984
|
+
errors,
|
|
985
|
+
...props
|
|
986
|
+
}) {
|
|
987
|
+
const content = useMemo(() => {
|
|
988
|
+
if (children) {
|
|
989
|
+
return children;
|
|
990
|
+
}
|
|
991
|
+
if (!errors?.length) {
|
|
992
|
+
return null;
|
|
993
|
+
}
|
|
994
|
+
const uniqueErrors = [
|
|
995
|
+
...new Map(errors.map((error) => [error?.message, error])).values()
|
|
996
|
+
];
|
|
997
|
+
if (uniqueErrors?.length == 1) {
|
|
998
|
+
return uniqueErrors[0]?.message;
|
|
999
|
+
}
|
|
1000
|
+
return /* @__PURE__ */ jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
|
|
1001
|
+
(error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index)
|
|
1002
|
+
) });
|
|
1003
|
+
}, [children, errors]);
|
|
1004
|
+
if (!content) {
|
|
1005
|
+
return null;
|
|
1006
|
+
}
|
|
1007
|
+
return /* @__PURE__ */ jsx(
|
|
1008
|
+
"div",
|
|
1009
|
+
{
|
|
1010
|
+
role: "alert",
|
|
1011
|
+
"data-slot": "field-error",
|
|
1012
|
+
className: cn("text-destructive text-sm font-normal", className),
|
|
1013
|
+
...props,
|
|
1014
|
+
children: content
|
|
1015
|
+
}
|
|
1016
|
+
);
|
|
1017
|
+
}
|
|
1018
|
+
var Form = FormProvider;
|
|
1019
|
+
var FormFieldContext = React24.createContext(
|
|
1020
|
+
{}
|
|
1021
|
+
);
|
|
1022
|
+
var FormField = ({
|
|
1023
|
+
...props
|
|
1024
|
+
}) => {
|
|
1025
|
+
return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
|
|
1026
|
+
};
|
|
1027
|
+
var FormItemContext = React24.createContext(
|
|
1028
|
+
{}
|
|
1029
|
+
);
|
|
1030
|
+
var useFormField = () => {
|
|
1031
|
+
const fieldContext = React24.useContext(FormFieldContext);
|
|
1032
|
+
const itemContext = React24.useContext(FormItemContext);
|
|
1033
|
+
const { getFieldState } = useFormContext();
|
|
1034
|
+
const formState = useFormState({ name: fieldContext.name });
|
|
1035
|
+
const fieldState = getFieldState(fieldContext.name, formState);
|
|
1036
|
+
if (!fieldContext) {
|
|
1037
|
+
throw new Error("useFormField should be used within <FormField>");
|
|
1038
|
+
}
|
|
1039
|
+
const { id } = itemContext;
|
|
1040
|
+
return {
|
|
1041
|
+
id,
|
|
1042
|
+
name: fieldContext.name,
|
|
1043
|
+
formItemId: `${id}-form-item`,
|
|
1044
|
+
formDescriptionId: `${id}-form-item-description`,
|
|
1045
|
+
formMessageId: `${id}-form-item-message`,
|
|
1046
|
+
...fieldState
|
|
1047
|
+
};
|
|
1048
|
+
};
|
|
1049
|
+
function FormItem({ className, ...props }) {
|
|
1050
|
+
const id = React24.useId();
|
|
1051
|
+
return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
|
|
1052
|
+
"div",
|
|
1053
|
+
{
|
|
1054
|
+
"data-slot": "form-item",
|
|
1055
|
+
className: cn("grid gap-2", className),
|
|
1056
|
+
...props
|
|
1057
|
+
}
|
|
1058
|
+
) });
|
|
1059
|
+
}
|
|
1060
|
+
function FormLabel({
|
|
1061
|
+
className,
|
|
1062
|
+
...props
|
|
1063
|
+
}) {
|
|
1064
|
+
const { error, formItemId } = useFormField();
|
|
1065
|
+
return /* @__PURE__ */ jsx(
|
|
1066
|
+
Label,
|
|
1067
|
+
{
|
|
1068
|
+
"data-slot": "form-label",
|
|
1069
|
+
"data-error": !!error,
|
|
1070
|
+
className: cn("data-[error=true]:text-destructive", className),
|
|
1071
|
+
htmlFor: formItemId,
|
|
1072
|
+
...props
|
|
1073
|
+
}
|
|
1074
|
+
);
|
|
1075
|
+
}
|
|
1076
|
+
function FormControl({ ...props }) {
|
|
1077
|
+
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
|
1078
|
+
return /* @__PURE__ */ jsx(
|
|
1079
|
+
Slot,
|
|
1080
|
+
{
|
|
1081
|
+
"data-slot": "form-control",
|
|
1082
|
+
id: formItemId,
|
|
1083
|
+
"aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
|
|
1084
|
+
"aria-invalid": !!error,
|
|
1085
|
+
...props
|
|
1086
|
+
}
|
|
1087
|
+
);
|
|
1088
|
+
}
|
|
1089
|
+
function FormDescription({ className, ...props }) {
|
|
1090
|
+
const { formDescriptionId } = useFormField();
|
|
1091
|
+
return /* @__PURE__ */ jsx(
|
|
1092
|
+
"p",
|
|
1093
|
+
{
|
|
1094
|
+
"data-slot": "form-description",
|
|
1095
|
+
id: formDescriptionId,
|
|
1096
|
+
className: cn("text-muted-foreground text-sm", className),
|
|
1097
|
+
...props
|
|
1098
|
+
}
|
|
1099
|
+
);
|
|
1100
|
+
}
|
|
1101
|
+
function FormMessage({ className, ...props }) {
|
|
1102
|
+
const { error, formMessageId } = useFormField();
|
|
1103
|
+
const body = error ? String(error?.message ?? "") : props.children;
|
|
1104
|
+
if (!body) {
|
|
1105
|
+
return null;
|
|
1106
|
+
}
|
|
1107
|
+
return /* @__PURE__ */ jsx(
|
|
1108
|
+
"p",
|
|
1109
|
+
{
|
|
1110
|
+
"data-slot": "form-message",
|
|
1111
|
+
id: formMessageId,
|
|
1112
|
+
className: cn("text-destructive text-sm", className),
|
|
1113
|
+
...props,
|
|
1114
|
+
children: body
|
|
1115
|
+
}
|
|
1116
|
+
);
|
|
1117
|
+
}
|
|
1118
|
+
var Textarea = React24.forwardRef(
|
|
1119
|
+
({ className, autoResize = false, minHeight = 50, maxHeight = 350, size = "default", onChange, ...props }, ref) => {
|
|
1120
|
+
const internalRef = React24.useRef(null);
|
|
1121
|
+
React24.useImperativeHandle(ref, () => internalRef.current);
|
|
1122
|
+
const sizeClasses = {
|
|
1123
|
+
sm: "min-h-11 h-11",
|
|
1124
|
+
// 44px / 2.75rem - exact height
|
|
1125
|
+
default: "min-h-[60px]",
|
|
1126
|
+
// 60px / 3.75rem
|
|
1127
|
+
lg: "min-h-20"
|
|
1128
|
+
// 80px / 5rem
|
|
1129
|
+
};
|
|
1130
|
+
const paddingClasses = {
|
|
1131
|
+
sm: "py-3",
|
|
1132
|
+
// 12px top + 12px bottom + 20px line-height = 44px
|
|
1133
|
+
default: "py-2",
|
|
1134
|
+
// 8px top + 8px bottom (default)
|
|
1135
|
+
lg: "py-2"
|
|
1136
|
+
// 8px top + 8px bottom (default)
|
|
1137
|
+
};
|
|
1138
|
+
const handleResize = React24.useCallback(() => {
|
|
1139
|
+
if (autoResize && size !== "sm" && internalRef.current) {
|
|
1140
|
+
const textarea = internalRef.current;
|
|
1141
|
+
textarea.style.height = "auto";
|
|
1142
|
+
const scrollHeight = textarea.scrollHeight;
|
|
1143
|
+
textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`;
|
|
1144
|
+
}
|
|
1145
|
+
}, [autoResize, size, minHeight, maxHeight]);
|
|
1146
|
+
React24.useEffect(() => {
|
|
1147
|
+
handleResize();
|
|
1148
|
+
}, [handleResize, props.value]);
|
|
1149
|
+
const handleChange = React24.useCallback(
|
|
1150
|
+
(e) => {
|
|
1151
|
+
handleResize();
|
|
1152
|
+
onChange?.(e);
|
|
1153
|
+
},
|
|
1154
|
+
[onChange, handleResize]
|
|
1155
|
+
);
|
|
1156
|
+
return /* @__PURE__ */ jsx(
|
|
1157
|
+
"textarea",
|
|
1158
|
+
{
|
|
1159
|
+
className: cn(
|
|
1160
|
+
"flex w-full rounded-md border border-input bg-transparent px-3 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
1161
|
+
sizeClasses[size],
|
|
1162
|
+
paddingClasses[size],
|
|
1163
|
+
className
|
|
1164
|
+
),
|
|
1165
|
+
ref: internalRef,
|
|
1166
|
+
onChange: handleChange,
|
|
1167
|
+
...props
|
|
1168
|
+
}
|
|
1169
|
+
);
|
|
1170
|
+
}
|
|
1171
|
+
);
|
|
1172
|
+
Textarea.displayName = "Textarea";
|
|
1173
|
+
var Switch = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1174
|
+
SwitchPrimitives.Root,
|
|
1175
|
+
{
|
|
1176
|
+
className: cn(
|
|
1177
|
+
"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm 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",
|
|
1178
|
+
className
|
|
1179
|
+
),
|
|
1180
|
+
...props,
|
|
1181
|
+
ref,
|
|
1182
|
+
children: /* @__PURE__ */ jsx(
|
|
1183
|
+
SwitchPrimitives.Thumb,
|
|
1184
|
+
{
|
|
1185
|
+
className: cn(
|
|
1186
|
+
"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform",
|
|
1187
|
+
"data-[state=checked]:ltr:translate-x-4 data-[state=checked]:rtl:-translate-x-4",
|
|
1188
|
+
"data-[state=unchecked]:translate-x-0"
|
|
1189
|
+
)
|
|
1190
|
+
}
|
|
1191
|
+
)
|
|
1192
|
+
}
|
|
1193
|
+
));
|
|
1194
|
+
Switch.displayName = SwitchPrimitives.Root.displayName;
|
|
1195
|
+
function Table({ className, ...props }) {
|
|
1196
|
+
return /* @__PURE__ */ jsx(
|
|
1197
|
+
"div",
|
|
1198
|
+
{
|
|
1199
|
+
"data-slot": "table-container",
|
|
1200
|
+
className: "relative w-full overflow-x-auto",
|
|
1201
|
+
children: /* @__PURE__ */ jsx(
|
|
1202
|
+
"table",
|
|
1203
|
+
{
|
|
1204
|
+
"data-slot": "table",
|
|
1205
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
1206
|
+
...props
|
|
1207
|
+
}
|
|
1208
|
+
)
|
|
1209
|
+
}
|
|
1210
|
+
);
|
|
1211
|
+
}
|
|
1212
|
+
function TableHeader({ className, ...props }) {
|
|
1213
|
+
return /* @__PURE__ */ jsx(
|
|
1214
|
+
"thead",
|
|
1215
|
+
{
|
|
1216
|
+
"data-slot": "table-header",
|
|
1217
|
+
className: cn("[&_tr]:border-b", className),
|
|
1218
|
+
...props
|
|
1219
|
+
}
|
|
1220
|
+
);
|
|
1221
|
+
}
|
|
1222
|
+
function TableBody({ className, ...props }) {
|
|
1223
|
+
return /* @__PURE__ */ jsx(
|
|
1224
|
+
"tbody",
|
|
1225
|
+
{
|
|
1226
|
+
"data-slot": "table-body",
|
|
1227
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
1228
|
+
...props
|
|
1229
|
+
}
|
|
1230
|
+
);
|
|
1231
|
+
}
|
|
1232
|
+
function TableFooter({ className, ...props }) {
|
|
1233
|
+
return /* @__PURE__ */ jsx(
|
|
1234
|
+
"tfoot",
|
|
1235
|
+
{
|
|
1236
|
+
"data-slot": "table-footer",
|
|
1237
|
+
className: cn(
|
|
1238
|
+
"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
|
|
1239
|
+
className
|
|
1240
|
+
),
|
|
1241
|
+
...props
|
|
1242
|
+
}
|
|
1243
|
+
);
|
|
1244
|
+
}
|
|
1245
|
+
function TableRow({ className, ...props }) {
|
|
1246
|
+
return /* @__PURE__ */ jsx(
|
|
1247
|
+
"tr",
|
|
1248
|
+
{
|
|
1249
|
+
"data-slot": "table-row",
|
|
1250
|
+
className: cn(
|
|
1251
|
+
"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
|
|
1252
|
+
className
|
|
1253
|
+
),
|
|
1254
|
+
...props
|
|
1255
|
+
}
|
|
1256
|
+
);
|
|
1257
|
+
}
|
|
1258
|
+
function TableHead({ className, ...props }) {
|
|
1259
|
+
return /* @__PURE__ */ jsx(
|
|
1260
|
+
"th",
|
|
1261
|
+
{
|
|
1262
|
+
"data-slot": "table-head",
|
|
1263
|
+
className: cn(
|
|
1264
|
+
"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
|
|
1265
|
+
className
|
|
1266
|
+
),
|
|
1267
|
+
...props
|
|
1268
|
+
}
|
|
1269
|
+
);
|
|
1270
|
+
}
|
|
1271
|
+
function TableCell({ className, ...props }) {
|
|
1272
|
+
return /* @__PURE__ */ jsx(
|
|
1273
|
+
"td",
|
|
1274
|
+
{
|
|
1275
|
+
"data-slot": "table-cell",
|
|
1276
|
+
className: cn(
|
|
1277
|
+
"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
|
|
1278
|
+
className
|
|
1279
|
+
),
|
|
1280
|
+
...props
|
|
1281
|
+
}
|
|
1282
|
+
);
|
|
1283
|
+
}
|
|
1284
|
+
function TableCaption({
|
|
1285
|
+
className,
|
|
1286
|
+
...props
|
|
1287
|
+
}) {
|
|
1288
|
+
return /* @__PURE__ */ jsx(
|
|
1289
|
+
"caption",
|
|
1290
|
+
{
|
|
1291
|
+
"data-slot": "table-caption",
|
|
1292
|
+
className: cn("text-muted-foreground mt-4 text-sm", className),
|
|
1293
|
+
...props
|
|
1294
|
+
}
|
|
1295
|
+
);
|
|
1296
|
+
}
|
|
1297
|
+
var ChevronUpIcon = ({
|
|
1298
|
+
className = "",
|
|
1299
|
+
...props
|
|
1300
|
+
}) => {
|
|
1301
|
+
return /* @__PURE__ */ jsx(
|
|
1302
|
+
"svg",
|
|
1303
|
+
{
|
|
1304
|
+
className,
|
|
1305
|
+
width: "16",
|
|
1306
|
+
height: "16",
|
|
1307
|
+
viewBox: "0 0 24 24",
|
|
1308
|
+
fill: "none",
|
|
1309
|
+
stroke: "currentColor",
|
|
1310
|
+
strokeWidth: "2",
|
|
1311
|
+
strokeLinecap: "round",
|
|
1312
|
+
strokeLinejoin: "round",
|
|
1313
|
+
...props,
|
|
1314
|
+
children: /* @__PURE__ */ jsx("path", { d: "m18 15-6-6-6 6" })
|
|
1315
|
+
}
|
|
1316
|
+
);
|
|
1317
|
+
};
|
|
1318
|
+
var Select = SelectPrimitive.Root;
|
|
1319
|
+
var SelectGroup = SelectPrimitive.Group;
|
|
1320
|
+
var SelectValue = SelectPrimitive.Value;
|
|
1321
|
+
var SelectTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
1322
|
+
SelectPrimitive.Trigger,
|
|
1323
|
+
{
|
|
1324
|
+
ref,
|
|
1325
|
+
className: cn(
|
|
1326
|
+
// HAI3 customization: bg-background and hover states for consistency with Button Outline
|
|
1327
|
+
"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm ring-offset-background hover:bg-accent hover:text-bg-accent-foreground data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
|
1328
|
+
className
|
|
1329
|
+
),
|
|
1330
|
+
...props,
|
|
1331
|
+
children: [
|
|
1332
|
+
children,
|
|
1333
|
+
/* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4 opacity-50" }) })
|
|
1334
|
+
]
|
|
1335
|
+
}
|
|
1336
|
+
));
|
|
1337
|
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
1338
|
+
var SelectScrollUpButton = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1339
|
+
SelectPrimitive.ScrollUpButton,
|
|
1340
|
+
{
|
|
1341
|
+
ref,
|
|
1342
|
+
className: cn(
|
|
1343
|
+
"flex cursor-default items-center justify-center py-1",
|
|
1344
|
+
className
|
|
1345
|
+
),
|
|
1346
|
+
...props,
|
|
1347
|
+
children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "h-4 w-4" })
|
|
1348
|
+
}
|
|
1349
|
+
));
|
|
1350
|
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
1351
|
+
var SelectScrollDownButton = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1352
|
+
SelectPrimitive.ScrollDownButton,
|
|
1353
|
+
{
|
|
1354
|
+
ref,
|
|
1355
|
+
className: cn(
|
|
1356
|
+
"flex cursor-default items-center justify-center py-1",
|
|
1357
|
+
className
|
|
1358
|
+
),
|
|
1359
|
+
...props,
|
|
1360
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4" })
|
|
1361
|
+
}
|
|
1362
|
+
));
|
|
1363
|
+
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
1364
|
+
var SelectContent = React24.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
1365
|
+
SelectPrimitive.Content,
|
|
1366
|
+
{
|
|
1367
|
+
ref,
|
|
1368
|
+
className: cn(
|
|
1369
|
+
"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]",
|
|
1370
|
+
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",
|
|
1371
|
+
className
|
|
1372
|
+
),
|
|
1373
|
+
position,
|
|
1374
|
+
...props,
|
|
1375
|
+
children: [
|
|
1376
|
+
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
1377
|
+
/* @__PURE__ */ jsx(
|
|
1378
|
+
SelectPrimitive.Viewport,
|
|
1379
|
+
{
|
|
1380
|
+
className: cn(
|
|
1381
|
+
"p-1",
|
|
1382
|
+
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
|
|
1383
|
+
),
|
|
1384
|
+
children
|
|
1385
|
+
}
|
|
1386
|
+
),
|
|
1387
|
+
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
1388
|
+
]
|
|
1389
|
+
}
|
|
1390
|
+
) }));
|
|
1391
|
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
1392
|
+
var SelectLabel = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1393
|
+
SelectPrimitive.Label,
|
|
1394
|
+
{
|
|
1395
|
+
ref,
|
|
1396
|
+
className: cn("px-2 py-1.5 text-sm font-semibold", className),
|
|
1397
|
+
...props
|
|
1398
|
+
}
|
|
1399
|
+
));
|
|
1400
|
+
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
1401
|
+
var SelectItem = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
1402
|
+
SelectPrimitive.Item,
|
|
1403
|
+
{
|
|
1404
|
+
ref,
|
|
1405
|
+
className: cn(
|
|
1406
|
+
"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-bg-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1407
|
+
className
|
|
1408
|
+
),
|
|
1409
|
+
...props,
|
|
1410
|
+
children: [
|
|
1411
|
+
/* @__PURE__ */ jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" }) }) }),
|
|
1412
|
+
/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
|
|
1413
|
+
]
|
|
1414
|
+
}
|
|
1415
|
+
));
|
|
1416
|
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
1417
|
+
var SelectSeparator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1418
|
+
SelectPrimitive.Separator,
|
|
1419
|
+
{
|
|
1420
|
+
ref,
|
|
1421
|
+
className: cn("-mx-1 my-1 h-px bg-muted", className),
|
|
1422
|
+
...props
|
|
1423
|
+
}
|
|
1424
|
+
));
|
|
1425
|
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
1426
|
+
function DataTablePagination({
|
|
1427
|
+
table,
|
|
1428
|
+
pageSizeOptions = [10, 20, 30, 40, 50]
|
|
1429
|
+
}) {
|
|
1430
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2", children: [
|
|
1431
|
+
/* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex-1 text-sm", children: [
|
|
1432
|
+
table.getFilteredSelectedRowModel().rows.length,
|
|
1433
|
+
" of",
|
|
1434
|
+
" ",
|
|
1435
|
+
table.getFilteredRowModel().rows.length,
|
|
1436
|
+
" row(s) selected."
|
|
1437
|
+
] }),
|
|
1438
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-6 lg:space-x-8", children: [
|
|
1439
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
|
|
1440
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Rows per page" }),
|
|
1441
|
+
/* @__PURE__ */ jsxs(
|
|
1442
|
+
Select,
|
|
1443
|
+
{
|
|
1444
|
+
value: `${table.getState().pagination.pageSize}`,
|
|
1445
|
+
onValueChange: (value) => {
|
|
1446
|
+
table.setPageSize(Number(value));
|
|
1447
|
+
},
|
|
1448
|
+
children: [
|
|
1449
|
+
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-8 w-[70px]", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: table.getState().pagination.pageSize }) }),
|
|
1450
|
+
/* @__PURE__ */ jsx(SelectContent, { side: "top", children: pageSizeOptions.map((pageSize) => /* @__PURE__ */ jsx(SelectItem, { value: `${pageSize}`, children: pageSize }, pageSize)) })
|
|
1451
|
+
]
|
|
1452
|
+
}
|
|
1453
|
+
)
|
|
1454
|
+
] }),
|
|
1455
|
+
/* @__PURE__ */ jsxs("div", { className: "flex w-[100px] items-center justify-center text-sm font-medium", children: [
|
|
1456
|
+
"Page ",
|
|
1457
|
+
table.getState().pagination.pageIndex + 1,
|
|
1458
|
+
" of",
|
|
1459
|
+
" ",
|
|
1460
|
+
table.getPageCount()
|
|
1461
|
+
] }),
|
|
1462
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
|
|
1463
|
+
/* @__PURE__ */ jsxs(
|
|
1464
|
+
Button,
|
|
1465
|
+
{
|
|
1466
|
+
variant: ButtonVariant.Outline,
|
|
1467
|
+
size: ButtonSize.Icon,
|
|
1468
|
+
className: "hidden size-8 lg:flex",
|
|
1469
|
+
onClick: () => table.setPageIndex(0),
|
|
1470
|
+
disabled: !table.getCanPreviousPage(),
|
|
1471
|
+
children: [
|
|
1472
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to first page" }),
|
|
1473
|
+
/* @__PURE__ */ jsx(ChevronsLeft, { className: "size-4" })
|
|
1474
|
+
]
|
|
1475
|
+
}
|
|
1476
|
+
),
|
|
1477
|
+
/* @__PURE__ */ jsxs(
|
|
1478
|
+
Button,
|
|
1479
|
+
{
|
|
1480
|
+
variant: ButtonVariant.Outline,
|
|
1481
|
+
size: ButtonSize.Icon,
|
|
1482
|
+
className: "size-8",
|
|
1483
|
+
onClick: () => table.previousPage(),
|
|
1484
|
+
disabled: !table.getCanPreviousPage(),
|
|
1485
|
+
children: [
|
|
1486
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to previous page" }),
|
|
1487
|
+
/* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" })
|
|
1488
|
+
]
|
|
1489
|
+
}
|
|
1490
|
+
),
|
|
1491
|
+
/* @__PURE__ */ jsxs(
|
|
1492
|
+
Button,
|
|
1493
|
+
{
|
|
1494
|
+
variant: ButtonVariant.Outline,
|
|
1495
|
+
size: ButtonSize.Icon,
|
|
1496
|
+
className: "size-8",
|
|
1497
|
+
onClick: () => table.nextPage(),
|
|
1498
|
+
disabled: !table.getCanNextPage(),
|
|
1499
|
+
children: [
|
|
1500
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to next page" }),
|
|
1501
|
+
/* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
|
|
1502
|
+
]
|
|
1503
|
+
}
|
|
1504
|
+
),
|
|
1505
|
+
/* @__PURE__ */ jsxs(
|
|
1506
|
+
Button,
|
|
1507
|
+
{
|
|
1508
|
+
variant: ButtonVariant.Outline,
|
|
1509
|
+
size: ButtonSize.Icon,
|
|
1510
|
+
className: "hidden size-8 lg:flex",
|
|
1511
|
+
onClick: () => table.setPageIndex(table.getPageCount() - 1),
|
|
1512
|
+
disabled: !table.getCanNextPage(),
|
|
1513
|
+
children: [
|
|
1514
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to last page" }),
|
|
1515
|
+
/* @__PURE__ */ jsx(ChevronsRight, { className: "size-4" })
|
|
1516
|
+
]
|
|
1517
|
+
}
|
|
1518
|
+
)
|
|
1519
|
+
] })
|
|
1520
|
+
] })
|
|
1521
|
+
] });
|
|
1522
|
+
}
|
|
1523
|
+
function DataTable({
|
|
1524
|
+
columns,
|
|
1525
|
+
data,
|
|
1526
|
+
table: externalTable,
|
|
1527
|
+
filterInput,
|
|
1528
|
+
toolbar,
|
|
1529
|
+
showPagination = true,
|
|
1530
|
+
pageSize = 10,
|
|
1531
|
+
noResultsMessage = "No results."
|
|
1532
|
+
}) {
|
|
1533
|
+
const [sorting, setSorting] = React24.useState([]);
|
|
1534
|
+
const [columnFilters, setColumnFilters] = React24.useState([]);
|
|
1535
|
+
const [columnVisibility, setColumnVisibility] = React24.useState({});
|
|
1536
|
+
const [rowSelection, setRowSelection] = React24.useState({});
|
|
1537
|
+
const internalTable = useReactTable({
|
|
1538
|
+
data,
|
|
1539
|
+
columns,
|
|
1540
|
+
onSortingChange: setSorting,
|
|
1541
|
+
onColumnFiltersChange: setColumnFilters,
|
|
1542
|
+
getCoreRowModel: getCoreRowModel(),
|
|
1543
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
1544
|
+
getSortedRowModel: getSortedRowModel(),
|
|
1545
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
1546
|
+
onColumnVisibilityChange: setColumnVisibility,
|
|
1547
|
+
onRowSelectionChange: setRowSelection,
|
|
1548
|
+
initialState: {
|
|
1549
|
+
pagination: {
|
|
1550
|
+
pageSize
|
|
1551
|
+
}
|
|
1552
|
+
},
|
|
1553
|
+
state: {
|
|
1554
|
+
sorting,
|
|
1555
|
+
columnFilters,
|
|
1556
|
+
columnVisibility,
|
|
1557
|
+
rowSelection
|
|
1558
|
+
}
|
|
1559
|
+
});
|
|
1560
|
+
const table = externalTable ?? internalTable;
|
|
1561
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-4", children: [
|
|
1562
|
+
(filterInput || toolbar) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
1563
|
+
filterInput,
|
|
1564
|
+
toolbar
|
|
1565
|
+
] }),
|
|
1566
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-md border", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
1567
|
+
/* @__PURE__ */ jsx(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx(TableHead, { children: header.isPlaceholder ? null : flexRender(
|
|
1568
|
+
header.column.columnDef.header,
|
|
1569
|
+
header.getContext()
|
|
1570
|
+
) }, header.id)) }, headerGroup.id)) }),
|
|
1571
|
+
/* @__PURE__ */ jsx(TableBody, { children: table.getRowModel().rows?.length ? table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx(
|
|
1572
|
+
TableRow,
|
|
1573
|
+
{
|
|
1574
|
+
"data-state": row.getIsSelected() && "selected",
|
|
1575
|
+
children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx(TableCell, { children: flexRender(
|
|
1576
|
+
cell.column.columnDef.cell,
|
|
1577
|
+
cell.getContext()
|
|
1578
|
+
) }, cell.id))
|
|
1579
|
+
},
|
|
1580
|
+
row.id
|
|
1581
|
+
)) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
|
|
1582
|
+
TableCell,
|
|
1583
|
+
{
|
|
1584
|
+
colSpan: columns.length,
|
|
1585
|
+
className: "h-24 text-center",
|
|
1586
|
+
children: noResultsMessage
|
|
1587
|
+
}
|
|
1588
|
+
) }) })
|
|
1589
|
+
] }) }),
|
|
1590
|
+
showPagination && /* @__PURE__ */ jsx(DataTablePagination, { table })
|
|
1591
|
+
] });
|
|
1592
|
+
}
|
|
1593
|
+
var DropdownMenu = ({ dir, ...props }) => /* @__PURE__ */ jsx(
|
|
1594
|
+
DropdownMenuPrimitive.Root,
|
|
1595
|
+
{
|
|
1596
|
+
...props,
|
|
1597
|
+
dir
|
|
1598
|
+
}
|
|
1599
|
+
);
|
|
1600
|
+
DropdownMenu.displayName = "DropdownMenu";
|
|
1601
|
+
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
1602
|
+
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
1603
|
+
var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
1604
|
+
var DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
1605
|
+
var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
1606
|
+
var DropdownMenuSubTrigger = React24.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
1607
|
+
DropdownMenuPrimitive.SubTrigger,
|
|
1608
|
+
{
|
|
1609
|
+
ref,
|
|
1610
|
+
className: cn(
|
|
1611
|
+
"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 data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
1612
|
+
inset && "pl-8",
|
|
1613
|
+
className
|
|
1614
|
+
),
|
|
1615
|
+
...props,
|
|
1616
|
+
children: [
|
|
1617
|
+
children,
|
|
1618
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ms-auto rtl:rotate-180" })
|
|
1619
|
+
]
|
|
1620
|
+
}
|
|
1621
|
+
));
|
|
1622
|
+
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
1623
|
+
var DropdownMenuSubContent = React24.forwardRef(({ className, container, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx(
|
|
1624
|
+
DropdownMenuPrimitive.SubContent,
|
|
1625
|
+
{
|
|
1626
|
+
ref,
|
|
1627
|
+
className: cn(
|
|
1628
|
+
"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]",
|
|
1629
|
+
className
|
|
1630
|
+
),
|
|
1631
|
+
...props
|
|
1632
|
+
}
|
|
1633
|
+
) }));
|
|
1634
|
+
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
1635
|
+
var DropdownMenuContent = React24.forwardRef(({ className, sideOffset = 4, container, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx(
|
|
1636
|
+
DropdownMenuPrimitive.Content,
|
|
1637
|
+
{
|
|
1638
|
+
ref,
|
|
1639
|
+
sideOffset,
|
|
1640
|
+
className: cn(
|
|
1641
|
+
"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",
|
|
1642
|
+
"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]",
|
|
1643
|
+
className
|
|
1644
|
+
),
|
|
1645
|
+
...props
|
|
1646
|
+
}
|
|
1647
|
+
) }));
|
|
1648
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
1649
|
+
var DropdownMenuItem = React24.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1650
|
+
DropdownMenuPrimitive.Item,
|
|
1651
|
+
{
|
|
1652
|
+
ref,
|
|
1653
|
+
className: cn(
|
|
1654
|
+
"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 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
1655
|
+
inset && "pl-8",
|
|
1656
|
+
className
|
|
1657
|
+
),
|
|
1658
|
+
...props
|
|
1659
|
+
}
|
|
1660
|
+
));
|
|
1661
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
1662
|
+
var DropdownMenuCheckboxItem = React24.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
1663
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
1664
|
+
{
|
|
1665
|
+
ref,
|
|
1666
|
+
className: cn(
|
|
1667
|
+
"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 data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1668
|
+
className
|
|
1669
|
+
),
|
|
1670
|
+
checked,
|
|
1671
|
+
...props,
|
|
1672
|
+
children: [
|
|
1673
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" }) }) }),
|
|
1674
|
+
children
|
|
1675
|
+
]
|
|
1676
|
+
}
|
|
1677
|
+
));
|
|
1678
|
+
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
1679
|
+
var DropdownMenuRadioItem = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
1680
|
+
DropdownMenuPrimitive.RadioItem,
|
|
1681
|
+
{
|
|
1682
|
+
ref,
|
|
1683
|
+
className: cn(
|
|
1684
|
+
"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 data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1685
|
+
className
|
|
1686
|
+
),
|
|
1687
|
+
...props,
|
|
1688
|
+
children: [
|
|
1689
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "h-2 w-2 fill-current" }) }) }),
|
|
1690
|
+
children
|
|
1691
|
+
]
|
|
1692
|
+
}
|
|
1693
|
+
));
|
|
1694
|
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
1695
|
+
var DropdownMenuLabel = React24.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1696
|
+
DropdownMenuPrimitive.Label,
|
|
1697
|
+
{
|
|
1698
|
+
ref,
|
|
1699
|
+
className: cn(
|
|
1700
|
+
"px-2 py-1.5 text-sm font-semibold",
|
|
1701
|
+
inset && "pl-8",
|
|
1702
|
+
className
|
|
1703
|
+
),
|
|
1704
|
+
...props
|
|
1705
|
+
}
|
|
1706
|
+
));
|
|
1707
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
1708
|
+
var DropdownMenuSeparator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1709
|
+
DropdownMenuPrimitive.Separator,
|
|
1710
|
+
{
|
|
1711
|
+
ref,
|
|
1712
|
+
className: cn("-mx-1 my-1 h-px bg-muted", className),
|
|
1713
|
+
...props
|
|
1714
|
+
}
|
|
1715
|
+
));
|
|
1716
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
1717
|
+
var DropdownMenuShortcut = ({
|
|
1718
|
+
className,
|
|
1719
|
+
...props
|
|
1720
|
+
}) => {
|
|
1721
|
+
return /* @__PURE__ */ jsx(
|
|
1722
|
+
"span",
|
|
1723
|
+
{
|
|
1724
|
+
className: cn("ml-auto text-xs tracking-widest opacity-60", className),
|
|
1725
|
+
...props
|
|
1726
|
+
}
|
|
1727
|
+
);
|
|
1728
|
+
};
|
|
1729
|
+
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
1730
|
+
function DataTableColumnHeader({
|
|
1731
|
+
column,
|
|
1732
|
+
title,
|
|
1733
|
+
className
|
|
1734
|
+
}) {
|
|
1735
|
+
if (!column.getCanSort()) {
|
|
1736
|
+
return /* @__PURE__ */ jsx("div", { className: cn(className), children: title });
|
|
1737
|
+
}
|
|
1738
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-2", className), children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
1739
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
1740
|
+
Button,
|
|
1741
|
+
{
|
|
1742
|
+
variant: ButtonVariant.Ghost,
|
|
1743
|
+
size: ButtonSize.Sm,
|
|
1744
|
+
className: "data-[state=open]:bg-accent -ml-3 h-8",
|
|
1745
|
+
children: [
|
|
1746
|
+
/* @__PURE__ */ jsx("span", { children: title }),
|
|
1747
|
+
column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { className: "size-4" }) : column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "size-4" }) : /* @__PURE__ */ jsx(ChevronsUpDown, { className: "size-4" })
|
|
1748
|
+
]
|
|
1749
|
+
}
|
|
1750
|
+
) }),
|
|
1751
|
+
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "start", children: [
|
|
1752
|
+
/* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(false), children: [
|
|
1753
|
+
/* @__PURE__ */ jsx(ArrowUp, { className: "size-4" }),
|
|
1754
|
+
"Asc"
|
|
1755
|
+
] }),
|
|
1756
|
+
/* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(true), children: [
|
|
1757
|
+
/* @__PURE__ */ jsx(ArrowDown, { className: "size-4" }),
|
|
1758
|
+
"Desc"
|
|
1759
|
+
] }),
|
|
1760
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
1761
|
+
/* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => column.toggleVisibility(false), children: [
|
|
1762
|
+
/* @__PURE__ */ jsx(EyeOff, { className: "size-4" }),
|
|
1763
|
+
"Hide"
|
|
1764
|
+
] })
|
|
1765
|
+
] })
|
|
1766
|
+
] }) });
|
|
1767
|
+
}
|
|
1768
|
+
function DataTableViewOptions({
|
|
1769
|
+
table,
|
|
1770
|
+
label = "Toggle columns",
|
|
1771
|
+
buttonText = "View"
|
|
1772
|
+
}) {
|
|
1773
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
1774
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
1775
|
+
Button,
|
|
1776
|
+
{
|
|
1777
|
+
variant: ButtonVariant.Outline,
|
|
1778
|
+
size: ButtonSize.Sm,
|
|
1779
|
+
className: "ml-auto hidden h-8 lg:flex",
|
|
1780
|
+
children: [
|
|
1781
|
+
/* @__PURE__ */ jsx(Settings2, { className: "size-4" }),
|
|
1782
|
+
buttonText
|
|
1783
|
+
]
|
|
1784
|
+
}
|
|
1785
|
+
) }),
|
|
1786
|
+
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "w-[150px]", children: [
|
|
1787
|
+
/* @__PURE__ */ jsx(DropdownMenuLabel, { children: label }),
|
|
1788
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
1789
|
+
table.getAllColumns().filter(
|
|
1790
|
+
(column) => typeof column.accessorFn !== "undefined" && column.getCanHide()
|
|
1791
|
+
).map((column) => {
|
|
1792
|
+
return /* @__PURE__ */ jsx(
|
|
1793
|
+
DropdownMenuCheckboxItem,
|
|
1794
|
+
{
|
|
1795
|
+
className: "capitalize",
|
|
1796
|
+
checked: column.getIsVisible(),
|
|
1797
|
+
onCheckedChange: (value) => column.toggleVisibility(!!value),
|
|
1798
|
+
children: column.id
|
|
1799
|
+
},
|
|
1800
|
+
column.id
|
|
1801
|
+
);
|
|
1802
|
+
})
|
|
1803
|
+
] })
|
|
1804
|
+
] });
|
|
1805
|
+
}
|
|
1806
|
+
function Skeleton({
|
|
1807
|
+
className,
|
|
1808
|
+
inheritColor = false,
|
|
1809
|
+
...props
|
|
1810
|
+
}) {
|
|
1811
|
+
return /* @__PURE__ */ jsx(
|
|
1812
|
+
"div",
|
|
1813
|
+
{
|
|
1814
|
+
className: cn(
|
|
1815
|
+
"animate-pulse rounded-md",
|
|
1816
|
+
inheritColor ? "bg-current opacity-20" : "bg-muted",
|
|
1817
|
+
className
|
|
1818
|
+
),
|
|
1819
|
+
...props
|
|
1820
|
+
}
|
|
1821
|
+
);
|
|
1822
|
+
}
|
|
1823
|
+
var Spinner = React24.forwardRef(
|
|
1824
|
+
({ className, icon: Icon2 = Loader2, size = "size-4", ...props }, ref) => {
|
|
1825
|
+
const textColorClasses = className?.match(/\btext-\S+/g)?.join(" ") || "";
|
|
1826
|
+
const wrapperClasses = trim(className?.replace(/\btext-\S+/g, "") || "");
|
|
1827
|
+
return /* @__PURE__ */ jsx(
|
|
1828
|
+
"div",
|
|
1829
|
+
{
|
|
1830
|
+
ref,
|
|
1831
|
+
className: cn("inline-flex items-center justify-center", wrapperClasses),
|
|
1832
|
+
...props,
|
|
1833
|
+
children: /* @__PURE__ */ jsx(Icon2, { className: cn("animate-spin", size, textColorClasses) })
|
|
1834
|
+
}
|
|
1835
|
+
);
|
|
1836
|
+
}
|
|
1837
|
+
);
|
|
1838
|
+
Spinner.displayName = "Spinner";
|
|
1839
|
+
var Slider = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1840
|
+
SliderPrimitive.Root,
|
|
1841
|
+
{
|
|
1842
|
+
ref,
|
|
1843
|
+
className: cn(
|
|
1844
|
+
"relative flex w-full touch-none select-none items-center",
|
|
1845
|
+
className
|
|
1846
|
+
),
|
|
1847
|
+
...props
|
|
1848
|
+
}
|
|
1849
|
+
));
|
|
1850
|
+
Slider.displayName = SliderPrimitive.Root.displayName;
|
|
1851
|
+
var SliderTrack = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1852
|
+
SliderPrimitive.Track,
|
|
1853
|
+
{
|
|
1854
|
+
ref,
|
|
1855
|
+
className: cn(
|
|
1856
|
+
"relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20",
|
|
1857
|
+
className
|
|
1858
|
+
),
|
|
1859
|
+
...props
|
|
1860
|
+
}
|
|
1861
|
+
));
|
|
1862
|
+
SliderTrack.displayName = SliderPrimitive.Track.displayName;
|
|
1863
|
+
var SliderRange = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1864
|
+
SliderPrimitive.Range,
|
|
1865
|
+
{
|
|
1866
|
+
ref,
|
|
1867
|
+
className: cn("absolute h-full bg-primary", className),
|
|
1868
|
+
...props
|
|
1869
|
+
}
|
|
1870
|
+
));
|
|
1871
|
+
SliderRange.displayName = SliderPrimitive.Range.displayName;
|
|
1872
|
+
var SliderThumb = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1873
|
+
SliderPrimitive.Thumb,
|
|
1874
|
+
{
|
|
1875
|
+
ref,
|
|
1876
|
+
className: cn(
|
|
1877
|
+
"block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
|
|
1878
|
+
className
|
|
1879
|
+
),
|
|
1880
|
+
...props
|
|
1881
|
+
}
|
|
1882
|
+
));
|
|
1883
|
+
SliderThumb.displayName = SliderPrimitive.Thumb.displayName;
|
|
1884
|
+
var Progress = React24.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1885
|
+
ProgressPrimitive.Root,
|
|
1886
|
+
{
|
|
1887
|
+
ref,
|
|
1888
|
+
className: cn(
|
|
1889
|
+
"relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
|
|
1890
|
+
className
|
|
1891
|
+
),
|
|
1892
|
+
...props,
|
|
1893
|
+
children: /* @__PURE__ */ jsx(
|
|
1894
|
+
ProgressPrimitive.Indicator,
|
|
1895
|
+
{
|
|
1896
|
+
className: "h-full w-full flex-1 bg-primary transition-all",
|
|
1897
|
+
style: { transform: `translateX(-${100 - (value || 0)}%)` }
|
|
1898
|
+
}
|
|
1899
|
+
)
|
|
1900
|
+
}
|
|
1901
|
+
));
|
|
1902
|
+
Progress.displayName = ProgressPrimitive.Root.displayName;
|
|
1903
|
+
var Toaster = ({ ...props }) => {
|
|
1904
|
+
return /* @__PURE__ */ jsx(
|
|
1905
|
+
Toaster$1,
|
|
1906
|
+
{
|
|
1907
|
+
className: "toaster group",
|
|
1908
|
+
icons: {
|
|
1909
|
+
success: /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4" }),
|
|
1910
|
+
info: /* @__PURE__ */ jsx(Info, { className: "size-4" }),
|
|
1911
|
+
warning: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-4" }),
|
|
1912
|
+
error: /* @__PURE__ */ jsx(XOctagon, { className: "size-4" }),
|
|
1913
|
+
loading: /* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin" })
|
|
1914
|
+
},
|
|
1915
|
+
...props
|
|
1916
|
+
}
|
|
1917
|
+
);
|
|
1918
|
+
};
|
|
1919
|
+
var TooltipProvider = ({
|
|
1920
|
+
delayDuration = 0,
|
|
1921
|
+
...props
|
|
1922
|
+
}) => /* @__PURE__ */ jsx(
|
|
1923
|
+
TooltipPrimitive.Provider,
|
|
1924
|
+
{
|
|
1925
|
+
delayDuration,
|
|
1926
|
+
...props
|
|
1927
|
+
}
|
|
1928
|
+
);
|
|
1929
|
+
TooltipProvider.displayName = TooltipPrimitive.Provider.displayName;
|
|
1930
|
+
var Tooltip = ({
|
|
1931
|
+
...props
|
|
1932
|
+
}) => /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { ...props }) });
|
|
1933
|
+
Tooltip.displayName = TooltipPrimitive.Root.displayName;
|
|
1934
|
+
var TooltipTrigger = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { ref, ...props }));
|
|
1935
|
+
TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
|
|
1936
|
+
var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
1937
|
+
TooltipPrimitive.Content,
|
|
1938
|
+
{
|
|
1939
|
+
ref,
|
|
1940
|
+
sideOffset,
|
|
1941
|
+
className: cn(
|
|
1942
|
+
"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground 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",
|
|
1943
|
+
className
|
|
1944
|
+
),
|
|
1945
|
+
...props
|
|
1946
|
+
}
|
|
1947
|
+
) }));
|
|
1948
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
1949
|
+
var Popover = PopoverPrimitive.Root;
|
|
1950
|
+
Popover.displayName = "Popover";
|
|
1951
|
+
var PopoverTrigger = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1952
|
+
PopoverPrimitive.Trigger,
|
|
1953
|
+
{
|
|
1954
|
+
ref,
|
|
1955
|
+
"data-slot": "popover-trigger",
|
|
1956
|
+
...props
|
|
1957
|
+
}
|
|
1958
|
+
));
|
|
1959
|
+
PopoverTrigger.displayName = "PopoverTrigger";
|
|
1960
|
+
var PopoverContent = React24.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
1961
|
+
PopoverPrimitive.Content,
|
|
1962
|
+
{
|
|
1963
|
+
ref,
|
|
1964
|
+
"data-slot": "popover-content",
|
|
1965
|
+
align,
|
|
1966
|
+
sideOffset,
|
|
1967
|
+
className: cn(
|
|
1968
|
+
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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",
|
|
1969
|
+
className
|
|
1970
|
+
),
|
|
1971
|
+
...props
|
|
1972
|
+
}
|
|
1973
|
+
) }));
|
|
1974
|
+
PopoverContent.displayName = "PopoverContent";
|
|
1975
|
+
var PopoverAnchor = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1976
|
+
PopoverPrimitive.Anchor,
|
|
1977
|
+
{
|
|
1978
|
+
ref,
|
|
1979
|
+
"data-slot": "popover-anchor",
|
|
1980
|
+
...props
|
|
1981
|
+
}
|
|
1982
|
+
));
|
|
1983
|
+
PopoverAnchor.displayName = "PopoverAnchor";
|
|
1984
|
+
var HoverCard = HoverCardPrimitive.Root;
|
|
1985
|
+
HoverCard.displayName = "HoverCard";
|
|
1986
|
+
var HoverCardTrigger = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1987
|
+
HoverCardPrimitive.Trigger,
|
|
1988
|
+
{
|
|
1989
|
+
ref,
|
|
1990
|
+
"data-slot": "hover-card-trigger",
|
|
1991
|
+
...props
|
|
1992
|
+
}
|
|
1993
|
+
));
|
|
1994
|
+
HoverCardTrigger.displayName = "HoverCardTrigger";
|
|
1995
|
+
var HoverCardContent = React24.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
|
|
1996
|
+
HoverCardPrimitive.Content,
|
|
1997
|
+
{
|
|
1998
|
+
ref,
|
|
1999
|
+
"data-slot": "hover-card-content",
|
|
2000
|
+
align,
|
|
2001
|
+
sideOffset,
|
|
2002
|
+
className: cn(
|
|
2003
|
+
"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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",
|
|
2004
|
+
className
|
|
2005
|
+
),
|
|
2006
|
+
...props
|
|
2007
|
+
}
|
|
2008
|
+
) }));
|
|
2009
|
+
HoverCardContent.displayName = "HoverCardContent";
|
|
2010
|
+
var Card = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2011
|
+
"div",
|
|
2012
|
+
{
|
|
2013
|
+
ref,
|
|
2014
|
+
className: cn(
|
|
2015
|
+
"rounded-xl border bg-card text-card-foreground shadow",
|
|
2016
|
+
className
|
|
2017
|
+
),
|
|
2018
|
+
...props
|
|
2019
|
+
}
|
|
2020
|
+
));
|
|
2021
|
+
Card.displayName = "Card";
|
|
2022
|
+
var CardHeader = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2023
|
+
"div",
|
|
2024
|
+
{
|
|
2025
|
+
ref,
|
|
2026
|
+
className: cn("flex flex-col space-y-1.5 p-6", className),
|
|
2027
|
+
...props
|
|
2028
|
+
}
|
|
2029
|
+
));
|
|
2030
|
+
CardHeader.displayName = "CardHeader";
|
|
2031
|
+
var CardTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2032
|
+
"div",
|
|
2033
|
+
{
|
|
2034
|
+
ref,
|
|
2035
|
+
className: cn("font-semibold leading-none tracking-tight", className),
|
|
2036
|
+
...props
|
|
2037
|
+
}
|
|
2038
|
+
));
|
|
2039
|
+
CardTitle.displayName = "CardTitle";
|
|
2040
|
+
var CardDescription = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2041
|
+
"div",
|
|
2042
|
+
{
|
|
2043
|
+
ref,
|
|
2044
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
2045
|
+
...props
|
|
2046
|
+
}
|
|
2047
|
+
));
|
|
2048
|
+
CardDescription.displayName = "CardDescription";
|
|
2049
|
+
var CardContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props }));
|
|
2050
|
+
CardContent.displayName = "CardContent";
|
|
2051
|
+
var CardFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2052
|
+
"div",
|
|
2053
|
+
{
|
|
2054
|
+
ref,
|
|
2055
|
+
className: cn("flex items-center p-6 pt-0", className),
|
|
2056
|
+
...props
|
|
2057
|
+
}
|
|
2058
|
+
));
|
|
2059
|
+
CardFooter.displayName = "CardFooter";
|
|
2060
|
+
var Header = React24__default.forwardRef(
|
|
2061
|
+
({ children, className }, ref) => {
|
|
2062
|
+
return /* @__PURE__ */ jsx(
|
|
2063
|
+
"header",
|
|
2064
|
+
{
|
|
2065
|
+
ref,
|
|
2066
|
+
className: cn(
|
|
2067
|
+
"flex items-center justify-end px-6 py-4 bg-background border-b border-border h-16 w-full",
|
|
2068
|
+
className
|
|
2069
|
+
),
|
|
2070
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children })
|
|
2071
|
+
}
|
|
2072
|
+
);
|
|
2073
|
+
}
|
|
2074
|
+
);
|
|
2075
|
+
Header.displayName = "Header";
|
|
2076
|
+
var NavigationMenu = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
2077
|
+
NavigationMenuPrimitive.Root,
|
|
2078
|
+
{
|
|
2079
|
+
ref,
|
|
2080
|
+
className: cn(
|
|
2081
|
+
"relative z-10 flex max-w-max flex-1 items-center justify-center",
|
|
2082
|
+
className
|
|
2083
|
+
),
|
|
2084
|
+
...props,
|
|
2085
|
+
children: [
|
|
2086
|
+
children,
|
|
2087
|
+
/* @__PURE__ */ jsx(NavigationMenuViewport, {})
|
|
2088
|
+
]
|
|
2089
|
+
}
|
|
2090
|
+
));
|
|
2091
|
+
NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
|
|
2092
|
+
var NavigationMenuList = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2093
|
+
NavigationMenuPrimitive.List,
|
|
2094
|
+
{
|
|
2095
|
+
ref,
|
|
2096
|
+
className: cn(
|
|
2097
|
+
"group flex flex-1 list-none items-center justify-center space-x-1",
|
|
2098
|
+
className
|
|
2099
|
+
),
|
|
2100
|
+
...props
|
|
2101
|
+
}
|
|
2102
|
+
));
|
|
2103
|
+
NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
|
|
2104
|
+
var NavigationMenuItem = NavigationMenuPrimitive.Item;
|
|
2105
|
+
var navigationMenuTriggerStyle = cva(
|
|
2106
|
+
"group inline-flex h-9 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"
|
|
2107
|
+
);
|
|
2108
|
+
var NavigationMenuTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
2109
|
+
NavigationMenuPrimitive.Trigger,
|
|
2110
|
+
{
|
|
2111
|
+
ref,
|
|
2112
|
+
className: cn(navigationMenuTriggerStyle(), "group", className),
|
|
2113
|
+
...props,
|
|
2114
|
+
children: [
|
|
2115
|
+
children,
|
|
2116
|
+
" ",
|
|
2117
|
+
/* @__PURE__ */ jsx(
|
|
2118
|
+
ChevronDownIcon,
|
|
2119
|
+
{
|
|
2120
|
+
className: "relative top-[1px] ml-1 h-3 w-3 transition duration-300 group-data-[state=open]:rotate-180",
|
|
2121
|
+
"aria-hidden": "true"
|
|
2122
|
+
}
|
|
2123
|
+
)
|
|
2124
|
+
]
|
|
2125
|
+
}
|
|
2126
|
+
));
|
|
2127
|
+
NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
|
|
2128
|
+
var NavigationMenuContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2129
|
+
NavigationMenuPrimitive.Content,
|
|
2130
|
+
{
|
|
2131
|
+
ref,
|
|
2132
|
+
className: cn(
|
|
2133
|
+
"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 ",
|
|
2134
|
+
className
|
|
2135
|
+
),
|
|
2136
|
+
...props
|
|
2137
|
+
}
|
|
2138
|
+
));
|
|
2139
|
+
NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
|
|
2140
|
+
var NavigationMenuLink = NavigationMenuPrimitive.Link;
|
|
2141
|
+
var NavigationMenuViewport = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx(
|
|
2142
|
+
NavigationMenuPrimitive.Viewport,
|
|
2143
|
+
{
|
|
2144
|
+
className: cn(
|
|
2145
|
+
"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 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)]",
|
|
2146
|
+
className
|
|
2147
|
+
),
|
|
2148
|
+
ref,
|
|
2149
|
+
...props
|
|
2150
|
+
}
|
|
2151
|
+
) }));
|
|
2152
|
+
NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
|
|
2153
|
+
var NavigationMenuIndicator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2154
|
+
NavigationMenuPrimitive.Indicator,
|
|
2155
|
+
{
|
|
2156
|
+
ref,
|
|
2157
|
+
className: cn(
|
|
2158
|
+
"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",
|
|
2159
|
+
className
|
|
2160
|
+
),
|
|
2161
|
+
...props,
|
|
2162
|
+
children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
|
|
2163
|
+
}
|
|
2164
|
+
));
|
|
2165
|
+
NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
|
|
2166
|
+
function Breadcrumb({ ...props }) {
|
|
2167
|
+
return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
|
|
2168
|
+
}
|
|
2169
|
+
function BreadcrumbList({ className, ...props }) {
|
|
2170
|
+
return /* @__PURE__ */ jsx(
|
|
2171
|
+
"ol",
|
|
2172
|
+
{
|
|
2173
|
+
"data-slot": "breadcrumb-list",
|
|
2174
|
+
className: cn(
|
|
2175
|
+
"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
|
|
2176
|
+
className
|
|
2177
|
+
),
|
|
2178
|
+
...props
|
|
2179
|
+
}
|
|
2180
|
+
);
|
|
2181
|
+
}
|
|
2182
|
+
function BreadcrumbItem({ className, ...props }) {
|
|
2183
|
+
return /* @__PURE__ */ jsx(
|
|
2184
|
+
"li",
|
|
2185
|
+
{
|
|
2186
|
+
"data-slot": "breadcrumb-item",
|
|
2187
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
2188
|
+
...props
|
|
2189
|
+
}
|
|
2190
|
+
);
|
|
2191
|
+
}
|
|
2192
|
+
function BreadcrumbLink({
|
|
2193
|
+
asChild,
|
|
2194
|
+
className,
|
|
2195
|
+
...props
|
|
2196
|
+
}) {
|
|
2197
|
+
const Comp = asChild ? Slot : "a";
|
|
2198
|
+
return /* @__PURE__ */ jsx(
|
|
2199
|
+
Comp,
|
|
2200
|
+
{
|
|
2201
|
+
"data-slot": "breadcrumb-link",
|
|
2202
|
+
className: cn("hover:text-foreground transition-colors", className),
|
|
2203
|
+
...props
|
|
2204
|
+
}
|
|
2205
|
+
);
|
|
2206
|
+
}
|
|
2207
|
+
function BreadcrumbPage({ className, ...props }) {
|
|
2208
|
+
return /* @__PURE__ */ jsx(
|
|
2209
|
+
"span",
|
|
2210
|
+
{
|
|
2211
|
+
"data-slot": "breadcrumb-page",
|
|
2212
|
+
role: "link",
|
|
2213
|
+
"aria-disabled": "true",
|
|
2214
|
+
"aria-current": "page",
|
|
2215
|
+
className: cn("text-foreground font-normal", className),
|
|
2216
|
+
...props
|
|
2217
|
+
}
|
|
2218
|
+
);
|
|
2219
|
+
}
|
|
2220
|
+
function BreadcrumbSeparator({
|
|
2221
|
+
children,
|
|
2222
|
+
className,
|
|
2223
|
+
...props
|
|
2224
|
+
}) {
|
|
2225
|
+
return /* @__PURE__ */ jsx(
|
|
2226
|
+
"li",
|
|
2227
|
+
{
|
|
2228
|
+
"data-slot": "breadcrumb-separator",
|
|
2229
|
+
role: "presentation",
|
|
2230
|
+
"aria-hidden": "true",
|
|
2231
|
+
className: cn("[&>svg]:size-3.5", className),
|
|
2232
|
+
...props,
|
|
2233
|
+
children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
|
|
2234
|
+
}
|
|
2235
|
+
);
|
|
2236
|
+
}
|
|
2237
|
+
function BreadcrumbEllipsis({
|
|
2238
|
+
className,
|
|
2239
|
+
...props
|
|
2240
|
+
}) {
|
|
2241
|
+
return /* @__PURE__ */ jsxs(
|
|
2242
|
+
"span",
|
|
2243
|
+
{
|
|
2244
|
+
"data-slot": "breadcrumb-ellipsis",
|
|
2245
|
+
role: "presentation",
|
|
2246
|
+
"aria-hidden": "true",
|
|
2247
|
+
className: cn("flex size-9 items-center justify-center", className),
|
|
2248
|
+
...props,
|
|
2249
|
+
children: [
|
|
2250
|
+
/* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }),
|
|
2251
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
|
|
2252
|
+
]
|
|
2253
|
+
}
|
|
2254
|
+
);
|
|
2255
|
+
}
|
|
2256
|
+
function Menubar({
|
|
2257
|
+
className,
|
|
2258
|
+
...props
|
|
2259
|
+
}) {
|
|
2260
|
+
return /* @__PURE__ */ jsx(
|
|
2261
|
+
MenubarPrimitive.Root,
|
|
2262
|
+
{
|
|
2263
|
+
"data-slot": "menubar",
|
|
2264
|
+
className: cn(
|
|
2265
|
+
"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
|
|
2266
|
+
className
|
|
2267
|
+
),
|
|
2268
|
+
...props
|
|
2269
|
+
}
|
|
2270
|
+
);
|
|
2271
|
+
}
|
|
2272
|
+
function MenubarMenu({
|
|
2273
|
+
...props
|
|
2274
|
+
}) {
|
|
2275
|
+
return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
|
|
2276
|
+
}
|
|
2277
|
+
function MenubarGroup({
|
|
2278
|
+
...props
|
|
2279
|
+
}) {
|
|
2280
|
+
return /* @__PURE__ */ jsx(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
|
|
2281
|
+
}
|
|
2282
|
+
function MenubarPortal({
|
|
2283
|
+
...props
|
|
2284
|
+
}) {
|
|
2285
|
+
return /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
|
|
2286
|
+
}
|
|
2287
|
+
function MenubarRadioGroup({
|
|
2288
|
+
...props
|
|
2289
|
+
}) {
|
|
2290
|
+
return /* @__PURE__ */ jsx(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
|
|
2291
|
+
}
|
|
2292
|
+
function MenubarTrigger({
|
|
2293
|
+
className,
|
|
2294
|
+
...props
|
|
2295
|
+
}) {
|
|
2296
|
+
return /* @__PURE__ */ jsx(
|
|
2297
|
+
MenubarPrimitive.Trigger,
|
|
2298
|
+
{
|
|
2299
|
+
"data-slot": "menubar-trigger",
|
|
2300
|
+
className: cn(
|
|
2301
|
+
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
|
|
2302
|
+
className
|
|
2303
|
+
),
|
|
2304
|
+
...props
|
|
2305
|
+
}
|
|
2306
|
+
);
|
|
2307
|
+
}
|
|
2308
|
+
function MenubarContent({
|
|
2309
|
+
className,
|
|
2310
|
+
align = "start",
|
|
2311
|
+
alignOffset = -4,
|
|
2312
|
+
sideOffset = 8,
|
|
2313
|
+
...props
|
|
2314
|
+
}) {
|
|
2315
|
+
return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
|
|
2316
|
+
MenubarPrimitive.Content,
|
|
2317
|
+
{
|
|
2318
|
+
"data-slot": "menubar-content",
|
|
2319
|
+
align,
|
|
2320
|
+
alignOffset,
|
|
2321
|
+
sideOffset,
|
|
2322
|
+
className: cn(
|
|
2323
|
+
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
|
|
2324
|
+
className
|
|
2325
|
+
),
|
|
2326
|
+
...props
|
|
2327
|
+
}
|
|
2328
|
+
) });
|
|
2329
|
+
}
|
|
2330
|
+
function MenubarItem({
|
|
2331
|
+
className,
|
|
2332
|
+
inset,
|
|
2333
|
+
variant = "default",
|
|
2334
|
+
...props
|
|
2335
|
+
}) {
|
|
2336
|
+
return /* @__PURE__ */ jsx(
|
|
2337
|
+
MenubarPrimitive.Item,
|
|
2338
|
+
{
|
|
2339
|
+
"data-slot": "menubar-item",
|
|
2340
|
+
"data-inset": inset,
|
|
2341
|
+
"data-variant": variant,
|
|
2342
|
+
className: cn(
|
|
2343
|
+
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2344
|
+
className
|
|
2345
|
+
),
|
|
2346
|
+
...props
|
|
2347
|
+
}
|
|
2348
|
+
);
|
|
2349
|
+
}
|
|
2350
|
+
function MenubarCheckboxItem({
|
|
2351
|
+
className,
|
|
2352
|
+
children,
|
|
2353
|
+
checked,
|
|
2354
|
+
...props
|
|
2355
|
+
}) {
|
|
2356
|
+
return /* @__PURE__ */ jsxs(
|
|
2357
|
+
MenubarPrimitive.CheckboxItem,
|
|
2358
|
+
{
|
|
2359
|
+
"data-slot": "menubar-checkbox-item",
|
|
2360
|
+
className: cn(
|
|
2361
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2362
|
+
className
|
|
2363
|
+
),
|
|
2364
|
+
checked,
|
|
2365
|
+
...props,
|
|
2366
|
+
children: [
|
|
2367
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
|
|
2368
|
+
children
|
|
2369
|
+
]
|
|
2370
|
+
}
|
|
2371
|
+
);
|
|
2372
|
+
}
|
|
2373
|
+
function MenubarRadioItem({
|
|
2374
|
+
className,
|
|
2375
|
+
children,
|
|
2376
|
+
...props
|
|
2377
|
+
}) {
|
|
2378
|
+
return /* @__PURE__ */ jsxs(
|
|
2379
|
+
MenubarPrimitive.RadioItem,
|
|
2380
|
+
{
|
|
2381
|
+
"data-slot": "menubar-radio-item",
|
|
2382
|
+
className: cn(
|
|
2383
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2384
|
+
className
|
|
2385
|
+
),
|
|
2386
|
+
...props,
|
|
2387
|
+
children: [
|
|
2388
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
|
|
2389
|
+
children
|
|
2390
|
+
]
|
|
2391
|
+
}
|
|
2392
|
+
);
|
|
2393
|
+
}
|
|
2394
|
+
function MenubarLabel({
|
|
2395
|
+
className,
|
|
2396
|
+
inset,
|
|
2397
|
+
...props
|
|
2398
|
+
}) {
|
|
2399
|
+
return /* @__PURE__ */ jsx(
|
|
2400
|
+
MenubarPrimitive.Label,
|
|
2401
|
+
{
|
|
2402
|
+
"data-slot": "menubar-label",
|
|
2403
|
+
"data-inset": inset,
|
|
2404
|
+
className: cn(
|
|
2405
|
+
"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
|
|
2406
|
+
className
|
|
2407
|
+
),
|
|
2408
|
+
...props
|
|
2409
|
+
}
|
|
2410
|
+
);
|
|
2411
|
+
}
|
|
2412
|
+
function MenubarSeparator({
|
|
2413
|
+
className,
|
|
2414
|
+
...props
|
|
2415
|
+
}) {
|
|
2416
|
+
return /* @__PURE__ */ jsx(
|
|
2417
|
+
MenubarPrimitive.Separator,
|
|
2418
|
+
{
|
|
2419
|
+
"data-slot": "menubar-separator",
|
|
2420
|
+
className: cn("bg-border -mx-1 my-1 h-px", className),
|
|
2421
|
+
...props
|
|
2422
|
+
}
|
|
2423
|
+
);
|
|
2424
|
+
}
|
|
2425
|
+
function MenubarShortcut({
|
|
2426
|
+
className,
|
|
2427
|
+
...props
|
|
2428
|
+
}) {
|
|
2429
|
+
return /* @__PURE__ */ jsx(
|
|
2430
|
+
"span",
|
|
2431
|
+
{
|
|
2432
|
+
"data-slot": "menubar-shortcut",
|
|
2433
|
+
className: cn(
|
|
2434
|
+
"text-muted-foreground ml-auto text-xs tracking-widest",
|
|
2435
|
+
className
|
|
2436
|
+
),
|
|
2437
|
+
...props
|
|
2438
|
+
}
|
|
2439
|
+
);
|
|
2440
|
+
}
|
|
2441
|
+
function MenubarSub({
|
|
2442
|
+
...props
|
|
2443
|
+
}) {
|
|
2444
|
+
return /* @__PURE__ */ jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
|
|
2445
|
+
}
|
|
2446
|
+
function MenubarSubTrigger({
|
|
2447
|
+
className,
|
|
2448
|
+
inset,
|
|
2449
|
+
children,
|
|
2450
|
+
...props
|
|
2451
|
+
}) {
|
|
2452
|
+
return /* @__PURE__ */ jsxs(
|
|
2453
|
+
MenubarPrimitive.SubTrigger,
|
|
2454
|
+
{
|
|
2455
|
+
"data-slot": "menubar-sub-trigger",
|
|
2456
|
+
"data-inset": inset,
|
|
2457
|
+
className: cn(
|
|
2458
|
+
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8",
|
|
2459
|
+
className
|
|
2460
|
+
),
|
|
2461
|
+
...props,
|
|
2462
|
+
children: [
|
|
2463
|
+
children,
|
|
2464
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto h-4 w-4" })
|
|
2465
|
+
]
|
|
2466
|
+
}
|
|
2467
|
+
);
|
|
2468
|
+
}
|
|
2469
|
+
function MenubarSubContent({
|
|
2470
|
+
className,
|
|
2471
|
+
...props
|
|
2472
|
+
}) {
|
|
2473
|
+
return /* @__PURE__ */ jsx(
|
|
2474
|
+
MenubarPrimitive.SubContent,
|
|
2475
|
+
{
|
|
2476
|
+
"data-slot": "menubar-sub-content",
|
|
2477
|
+
className: cn(
|
|
2478
|
+
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
|
|
2479
|
+
className
|
|
2480
|
+
),
|
|
2481
|
+
...props
|
|
2482
|
+
}
|
|
2483
|
+
);
|
|
2484
|
+
}
|
|
2485
|
+
var MoreHorizontalIcon = ({ className = "" }) => {
|
|
2486
|
+
return /* @__PURE__ */ jsxs(
|
|
2487
|
+
"svg",
|
|
2488
|
+
{
|
|
2489
|
+
className,
|
|
2490
|
+
width: "16",
|
|
2491
|
+
height: "16",
|
|
2492
|
+
viewBox: "0 0 24 24",
|
|
2493
|
+
fill: "none",
|
|
2494
|
+
stroke: "currentColor",
|
|
2495
|
+
strokeWidth: "2",
|
|
2496
|
+
strokeLinecap: "round",
|
|
2497
|
+
strokeLinejoin: "round",
|
|
2498
|
+
children: [
|
|
2499
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1" }),
|
|
2500
|
+
/* @__PURE__ */ jsx("circle", { cx: "19", cy: "12", r: "1" }),
|
|
2501
|
+
/* @__PURE__ */ jsx("circle", { cx: "5", cy: "12", r: "1" })
|
|
2502
|
+
]
|
|
2503
|
+
}
|
|
2504
|
+
);
|
|
2505
|
+
};
|
|
2506
|
+
function Pagination({ className, ...props }) {
|
|
2507
|
+
return /* @__PURE__ */ jsx(
|
|
2508
|
+
"nav",
|
|
2509
|
+
{
|
|
2510
|
+
role: "navigation",
|
|
2511
|
+
"aria-label": "pagination",
|
|
2512
|
+
"data-slot": "pagination",
|
|
2513
|
+
className: cn("mx-auto flex w-full justify-center", className),
|
|
2514
|
+
...props
|
|
2515
|
+
}
|
|
2516
|
+
);
|
|
2517
|
+
}
|
|
2518
|
+
function PaginationContent({
|
|
2519
|
+
className,
|
|
2520
|
+
...props
|
|
2521
|
+
}) {
|
|
2522
|
+
return /* @__PURE__ */ jsx(
|
|
2523
|
+
"ul",
|
|
2524
|
+
{
|
|
2525
|
+
"data-slot": "pagination-content",
|
|
2526
|
+
className: cn("flex flex-row items-center gap-1", className),
|
|
2527
|
+
...props
|
|
2528
|
+
}
|
|
2529
|
+
);
|
|
2530
|
+
}
|
|
2531
|
+
function PaginationItem({ ...props }) {
|
|
2532
|
+
return /* @__PURE__ */ jsx("li", { "data-slot": "pagination-item", ...props });
|
|
2533
|
+
}
|
|
2534
|
+
function PaginationLink({
|
|
2535
|
+
className,
|
|
2536
|
+
isActive,
|
|
2537
|
+
size = ButtonSize.Icon,
|
|
2538
|
+
asChild,
|
|
2539
|
+
...props
|
|
2540
|
+
}) {
|
|
2541
|
+
const Comp = asChild ? Slot : "a";
|
|
2542
|
+
return /* @__PURE__ */ jsx(
|
|
2543
|
+
Comp,
|
|
2544
|
+
{
|
|
2545
|
+
"aria-current": isActive ? "page" : void 0,
|
|
2546
|
+
"data-slot": "pagination-link",
|
|
2547
|
+
"data-active": isActive,
|
|
2548
|
+
className: cn(
|
|
2549
|
+
buttonVariants({
|
|
2550
|
+
variant: isActive ? ButtonVariant.Outline : ButtonVariant.Ghost,
|
|
2551
|
+
size
|
|
2552
|
+
}),
|
|
2553
|
+
className
|
|
2554
|
+
),
|
|
2555
|
+
...props
|
|
2556
|
+
}
|
|
2557
|
+
);
|
|
2558
|
+
}
|
|
2559
|
+
function PaginationPrevious({
|
|
2560
|
+
className,
|
|
2561
|
+
children,
|
|
2562
|
+
...props
|
|
2563
|
+
}) {
|
|
2564
|
+
return /* @__PURE__ */ jsxs(
|
|
2565
|
+
PaginationLink,
|
|
2566
|
+
{
|
|
2567
|
+
"aria-label": "Go to previous page",
|
|
2568
|
+
size: ButtonSize.Default,
|
|
2569
|
+
className: cn("gap-1 px-2.5 sm:pl-2.5", className),
|
|
2570
|
+
...props,
|
|
2571
|
+
children: [
|
|
2572
|
+
/* @__PURE__ */ jsx(ChevronLeftIcon, { className: "h-4 w-4" }),
|
|
2573
|
+
/* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: children ?? "Previous" })
|
|
2574
|
+
]
|
|
2575
|
+
}
|
|
2576
|
+
);
|
|
2577
|
+
}
|
|
2578
|
+
function PaginationNext({
|
|
2579
|
+
className,
|
|
2580
|
+
children,
|
|
2581
|
+
...props
|
|
2582
|
+
}) {
|
|
2583
|
+
return /* @__PURE__ */ jsxs(
|
|
2584
|
+
PaginationLink,
|
|
2585
|
+
{
|
|
2586
|
+
"aria-label": "Go to next page",
|
|
2587
|
+
size: ButtonSize.Default,
|
|
2588
|
+
className: cn("gap-1 px-2.5 sm:pr-2.5", className),
|
|
2589
|
+
...props,
|
|
2590
|
+
children: [
|
|
2591
|
+
/* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: children ?? "Next" }),
|
|
2592
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-4 w-4" })
|
|
2593
|
+
]
|
|
2594
|
+
}
|
|
2595
|
+
);
|
|
2596
|
+
}
|
|
2597
|
+
function PaginationEllipsis({
|
|
2598
|
+
className,
|
|
2599
|
+
...props
|
|
2600
|
+
}) {
|
|
2601
|
+
return /* @__PURE__ */ jsxs(
|
|
2602
|
+
"span",
|
|
2603
|
+
{
|
|
2604
|
+
"aria-hidden": true,
|
|
2605
|
+
"data-slot": "pagination-ellipsis",
|
|
2606
|
+
className: cn("flex size-9 items-center justify-center", className),
|
|
2607
|
+
...props,
|
|
2608
|
+
children: [
|
|
2609
|
+
/* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "h-4 w-4" }),
|
|
2610
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
|
|
2611
|
+
]
|
|
2612
|
+
}
|
|
2613
|
+
);
|
|
2614
|
+
}
|
|
2615
|
+
function Tabs({
|
|
2616
|
+
className,
|
|
2617
|
+
...props
|
|
2618
|
+
}) {
|
|
2619
|
+
return /* @__PURE__ */ jsx(
|
|
2620
|
+
TabsPrimitive.Root,
|
|
2621
|
+
{
|
|
2622
|
+
"data-slot": "tabs",
|
|
2623
|
+
className: cn("flex flex-col gap-2", className),
|
|
2624
|
+
...props
|
|
2625
|
+
}
|
|
2626
|
+
);
|
|
2627
|
+
}
|
|
2628
|
+
function TabsList({
|
|
2629
|
+
className,
|
|
2630
|
+
...props
|
|
2631
|
+
}) {
|
|
2632
|
+
return /* @__PURE__ */ jsx(
|
|
2633
|
+
TabsPrimitive.List,
|
|
2634
|
+
{
|
|
2635
|
+
"data-slot": "tabs-list",
|
|
2636
|
+
className: cn(
|
|
2637
|
+
"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
|
|
2638
|
+
className
|
|
2639
|
+
),
|
|
2640
|
+
...props
|
|
2641
|
+
}
|
|
2642
|
+
);
|
|
2643
|
+
}
|
|
2644
|
+
function TabsTrigger({
|
|
2645
|
+
className,
|
|
2646
|
+
...props
|
|
2647
|
+
}) {
|
|
2648
|
+
return /* @__PURE__ */ jsx(
|
|
2649
|
+
TabsPrimitive.Trigger,
|
|
2650
|
+
{
|
|
2651
|
+
"data-slot": "tabs-trigger",
|
|
2652
|
+
className: cn(
|
|
2653
|
+
"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2654
|
+
className
|
|
2655
|
+
),
|
|
2656
|
+
...props
|
|
2657
|
+
}
|
|
2658
|
+
);
|
|
2659
|
+
}
|
|
2660
|
+
function TabsContent({
|
|
2661
|
+
className,
|
|
2662
|
+
...props
|
|
2663
|
+
}) {
|
|
2664
|
+
return /* @__PURE__ */ jsx(
|
|
2665
|
+
TabsPrimitive.Content,
|
|
2666
|
+
{
|
|
2667
|
+
"data-slot": "tabs-content",
|
|
2668
|
+
className: cn("flex-1 outline-none", className),
|
|
2669
|
+
...props
|
|
2670
|
+
}
|
|
2671
|
+
);
|
|
2672
|
+
}
|
|
2673
|
+
var Sheet = SheetPrimitive.Root;
|
|
2674
|
+
var SheetTrigger = SheetPrimitive.Trigger;
|
|
2675
|
+
var SheetClose = SheetPrimitive.Close;
|
|
2676
|
+
var SheetPortal = SheetPrimitive.Portal;
|
|
2677
|
+
var SheetOverlay = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2678
|
+
SheetPrimitive.Overlay,
|
|
2679
|
+
{
|
|
2680
|
+
className: cn(
|
|
2681
|
+
"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",
|
|
2682
|
+
className
|
|
2683
|
+
),
|
|
2684
|
+
...props,
|
|
2685
|
+
ref
|
|
2686
|
+
}
|
|
2687
|
+
));
|
|
2688
|
+
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
2689
|
+
var sheetVariants = cva(
|
|
2690
|
+
"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
2691
|
+
{
|
|
2692
|
+
variants: {
|
|
2693
|
+
side: {
|
|
2694
|
+
top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
2695
|
+
bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
2696
|
+
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",
|
|
2697
|
+
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"
|
|
2698
|
+
}
|
|
2699
|
+
},
|
|
2700
|
+
defaultVariants: {
|
|
2701
|
+
side: "right"
|
|
2702
|
+
}
|
|
2703
|
+
}
|
|
2704
|
+
);
|
|
2705
|
+
var SheetContent = React24.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
|
|
2706
|
+
/* @__PURE__ */ jsx(SheetOverlay, {}),
|
|
2707
|
+
/* @__PURE__ */ jsxs(
|
|
2708
|
+
SheetPrimitive.Content,
|
|
2709
|
+
{
|
|
2710
|
+
ref,
|
|
2711
|
+
className: cn(sheetVariants({ side }), className),
|
|
2712
|
+
...props,
|
|
2713
|
+
children: [
|
|
2714
|
+
/* @__PURE__ */ jsxs(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: [
|
|
2715
|
+
/* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
|
|
2716
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
2717
|
+
] }),
|
|
2718
|
+
children
|
|
2719
|
+
]
|
|
2720
|
+
}
|
|
2721
|
+
)
|
|
2722
|
+
] }));
|
|
2723
|
+
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
2724
|
+
var SheetHeader = ({
|
|
2725
|
+
className,
|
|
2726
|
+
...props
|
|
2727
|
+
}) => /* @__PURE__ */ jsx(
|
|
2728
|
+
"div",
|
|
2729
|
+
{
|
|
2730
|
+
className: cn(
|
|
2731
|
+
"flex flex-col space-y-2 text-center sm:text-left",
|
|
2732
|
+
className
|
|
2733
|
+
),
|
|
2734
|
+
...props
|
|
2735
|
+
}
|
|
2736
|
+
);
|
|
2737
|
+
SheetHeader.displayName = "SheetHeader";
|
|
2738
|
+
var SheetFooter = ({
|
|
2739
|
+
className,
|
|
2740
|
+
...props
|
|
2741
|
+
}) => /* @__PURE__ */ jsx(
|
|
2742
|
+
"div",
|
|
2743
|
+
{
|
|
2744
|
+
className: cn(
|
|
2745
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
2746
|
+
className
|
|
2747
|
+
),
|
|
2748
|
+
...props
|
|
2749
|
+
}
|
|
2750
|
+
);
|
|
2751
|
+
SheetFooter.displayName = "SheetFooter";
|
|
2752
|
+
var SheetTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2753
|
+
SheetPrimitive.Title,
|
|
2754
|
+
{
|
|
2755
|
+
ref,
|
|
2756
|
+
className: cn("text-lg font-semibold text-foreground", className),
|
|
2757
|
+
...props
|
|
2758
|
+
}
|
|
2759
|
+
));
|
|
2760
|
+
SheetTitle.displayName = SheetPrimitive.Title.displayName;
|
|
2761
|
+
var SheetDescription = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2762
|
+
SheetPrimitive.Description,
|
|
2763
|
+
{
|
|
2764
|
+
ref,
|
|
2765
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
2766
|
+
...props
|
|
2767
|
+
}
|
|
2768
|
+
));
|
|
2769
|
+
SheetDescription.displayName = SheetPrimitive.Description.displayName;
|
|
2770
|
+
var Dialog = SheetPrimitive.Root;
|
|
2771
|
+
var DialogTrigger = SheetPrimitive.Trigger;
|
|
2772
|
+
var DialogPortal = SheetPrimitive.Portal;
|
|
2773
|
+
var DialogClose = SheetPrimitive.Close;
|
|
2774
|
+
var DialogOverlay = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2775
|
+
SheetPrimitive.Overlay,
|
|
2776
|
+
{
|
|
2777
|
+
ref,
|
|
2778
|
+
className: cn(
|
|
2779
|
+
"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",
|
|
2780
|
+
className
|
|
2781
|
+
),
|
|
2782
|
+
...props
|
|
2783
|
+
}
|
|
2784
|
+
));
|
|
2785
|
+
DialogOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
2786
|
+
var DialogContent = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
2787
|
+
/* @__PURE__ */ jsx(DialogOverlay, {}),
|
|
2788
|
+
/* @__PURE__ */ jsxs(
|
|
2789
|
+
SheetPrimitive.Content,
|
|
2790
|
+
{
|
|
2791
|
+
ref,
|
|
2792
|
+
className: cn(
|
|
2793
|
+
"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",
|
|
2794
|
+
className
|
|
2795
|
+
),
|
|
2796
|
+
...props,
|
|
2797
|
+
children: [
|
|
2798
|
+
children,
|
|
2799
|
+
/* @__PURE__ */ jsxs(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-accent data-[state=open]:text-muted-foreground", children: [
|
|
2800
|
+
/* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
|
|
2801
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
2802
|
+
] })
|
|
2803
|
+
]
|
|
2804
|
+
}
|
|
2805
|
+
)
|
|
2806
|
+
] }));
|
|
2807
|
+
DialogContent.displayName = SheetPrimitive.Content.displayName;
|
|
2808
|
+
var DialogHeader = ({
|
|
2809
|
+
className,
|
|
2810
|
+
...props
|
|
2811
|
+
}) => /* @__PURE__ */ jsx(
|
|
2812
|
+
"div",
|
|
2813
|
+
{
|
|
2814
|
+
className: cn(
|
|
2815
|
+
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
2816
|
+
className
|
|
2817
|
+
),
|
|
2818
|
+
...props
|
|
2819
|
+
}
|
|
2820
|
+
);
|
|
2821
|
+
DialogHeader.displayName = "DialogHeader";
|
|
2822
|
+
var DialogFooter = ({
|
|
2823
|
+
className,
|
|
2824
|
+
...props
|
|
2825
|
+
}) => /* @__PURE__ */ jsx(
|
|
2826
|
+
"div",
|
|
2827
|
+
{
|
|
2828
|
+
className: cn(
|
|
2829
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
2830
|
+
className
|
|
2831
|
+
),
|
|
2832
|
+
...props
|
|
2833
|
+
}
|
|
2834
|
+
);
|
|
2835
|
+
DialogFooter.displayName = "DialogFooter";
|
|
2836
|
+
var DialogTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2837
|
+
SheetPrimitive.Title,
|
|
2838
|
+
{
|
|
2839
|
+
ref,
|
|
2840
|
+
className: cn(
|
|
2841
|
+
"text-lg font-semibold leading-none tracking-tight",
|
|
2842
|
+
className
|
|
2843
|
+
),
|
|
2844
|
+
...props
|
|
2845
|
+
}
|
|
2846
|
+
));
|
|
2847
|
+
DialogTitle.displayName = SheetPrimitive.Title.displayName;
|
|
2848
|
+
var DialogDescription = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2849
|
+
SheetPrimitive.Description,
|
|
2850
|
+
{
|
|
2851
|
+
ref,
|
|
2852
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
2853
|
+
...props
|
|
2854
|
+
}
|
|
2855
|
+
));
|
|
2856
|
+
DialogDescription.displayName = SheetPrimitive.Description.displayName;
|
|
2857
|
+
function AlertDialog({
|
|
2858
|
+
...props
|
|
2859
|
+
}) {
|
|
2860
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
2861
|
+
}
|
|
2862
|
+
function AlertDialogTrigger({
|
|
2863
|
+
...props
|
|
2864
|
+
}) {
|
|
2865
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
|
|
2866
|
+
}
|
|
2867
|
+
function AlertDialogPortal({
|
|
2868
|
+
...props
|
|
2869
|
+
}) {
|
|
2870
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
2871
|
+
}
|
|
2872
|
+
function AlertDialogOverlay({
|
|
2873
|
+
className,
|
|
2874
|
+
...props
|
|
2875
|
+
}) {
|
|
2876
|
+
return /* @__PURE__ */ jsx(
|
|
2877
|
+
AlertDialogPrimitive.Overlay,
|
|
2878
|
+
{
|
|
2879
|
+
"data-slot": "alert-dialog-overlay",
|
|
2880
|
+
className: cn(
|
|
2881
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
|
2882
|
+
className
|
|
2883
|
+
),
|
|
2884
|
+
...props
|
|
2885
|
+
}
|
|
2886
|
+
);
|
|
2887
|
+
}
|
|
2888
|
+
function AlertDialogContent({
|
|
2889
|
+
className,
|
|
2890
|
+
...props
|
|
2891
|
+
}) {
|
|
2892
|
+
return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
|
|
2893
|
+
/* @__PURE__ */ jsx(AlertDialogOverlay, {}),
|
|
2894
|
+
/* @__PURE__ */ jsx(
|
|
2895
|
+
AlertDialogPrimitive.Content,
|
|
2896
|
+
{
|
|
2897
|
+
"data-slot": "alert-dialog-content",
|
|
2898
|
+
className: cn(
|
|
2899
|
+
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
|
|
2900
|
+
className
|
|
2901
|
+
),
|
|
2902
|
+
...props
|
|
2903
|
+
}
|
|
2904
|
+
)
|
|
2905
|
+
] });
|
|
2906
|
+
}
|
|
2907
|
+
function AlertDialogHeader({
|
|
2908
|
+
className,
|
|
2909
|
+
...props
|
|
2910
|
+
}) {
|
|
2911
|
+
return /* @__PURE__ */ jsx(
|
|
2912
|
+
"div",
|
|
2913
|
+
{
|
|
2914
|
+
"data-slot": "alert-dialog-header",
|
|
2915
|
+
className: cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
2916
|
+
...props
|
|
2917
|
+
}
|
|
2918
|
+
);
|
|
2919
|
+
}
|
|
2920
|
+
function AlertDialogFooter({
|
|
2921
|
+
className,
|
|
2922
|
+
...props
|
|
2923
|
+
}) {
|
|
2924
|
+
return /* @__PURE__ */ jsx(
|
|
2925
|
+
"div",
|
|
2926
|
+
{
|
|
2927
|
+
"data-slot": "alert-dialog-footer",
|
|
2928
|
+
className: cn(
|
|
2929
|
+
"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
|
|
2930
|
+
className
|
|
2931
|
+
),
|
|
2932
|
+
...props
|
|
2933
|
+
}
|
|
2934
|
+
);
|
|
2935
|
+
}
|
|
2936
|
+
function AlertDialogTitle({
|
|
2937
|
+
className,
|
|
2938
|
+
...props
|
|
2939
|
+
}) {
|
|
2940
|
+
return /* @__PURE__ */ jsx(
|
|
2941
|
+
AlertDialogPrimitive.Title,
|
|
2942
|
+
{
|
|
2943
|
+
"data-slot": "alert-dialog-title",
|
|
2944
|
+
className: cn("text-lg font-semibold", className),
|
|
2945
|
+
...props
|
|
2946
|
+
}
|
|
2947
|
+
);
|
|
2948
|
+
}
|
|
2949
|
+
function AlertDialogDescription({
|
|
2950
|
+
className,
|
|
2951
|
+
...props
|
|
2952
|
+
}) {
|
|
2953
|
+
return /* @__PURE__ */ jsx(
|
|
2954
|
+
AlertDialogPrimitive.Description,
|
|
2955
|
+
{
|
|
2956
|
+
"data-slot": "alert-dialog-description",
|
|
2957
|
+
className: cn("text-muted-foreground text-sm", className),
|
|
2958
|
+
...props
|
|
2959
|
+
}
|
|
2960
|
+
);
|
|
2961
|
+
}
|
|
2962
|
+
function AlertDialogAction({
|
|
2963
|
+
className,
|
|
2964
|
+
...props
|
|
2965
|
+
}) {
|
|
2966
|
+
return /* @__PURE__ */ jsx(
|
|
2967
|
+
AlertDialogPrimitive.Action,
|
|
2968
|
+
{
|
|
2969
|
+
className: cn(buttonVariants(), className),
|
|
2970
|
+
...props
|
|
2971
|
+
}
|
|
2972
|
+
);
|
|
2973
|
+
}
|
|
2974
|
+
function AlertDialogCancel({
|
|
2975
|
+
className,
|
|
2976
|
+
...props
|
|
2977
|
+
}) {
|
|
2978
|
+
return /* @__PURE__ */ jsx(
|
|
2979
|
+
AlertDialogPrimitive.Cancel,
|
|
2980
|
+
{
|
|
2981
|
+
className: cn(buttonVariants({ variant: ButtonVariant.Outline }), className),
|
|
2982
|
+
...props
|
|
2983
|
+
}
|
|
2984
|
+
);
|
|
2985
|
+
}
|
|
2986
|
+
function Drawer({
|
|
2987
|
+
...props
|
|
2988
|
+
}) {
|
|
2989
|
+
return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
|
|
2990
|
+
}
|
|
2991
|
+
function DrawerTrigger({
|
|
2992
|
+
...props
|
|
2993
|
+
}) {
|
|
2994
|
+
return /* @__PURE__ */ jsx(Drawer$1.Trigger, { "data-slot": "drawer-trigger", ...props });
|
|
2995
|
+
}
|
|
2996
|
+
function DrawerPortal({
|
|
2997
|
+
...props
|
|
2998
|
+
}) {
|
|
2999
|
+
return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
|
|
3000
|
+
}
|
|
3001
|
+
function DrawerClose({
|
|
3002
|
+
...props
|
|
3003
|
+
}) {
|
|
3004
|
+
return /* @__PURE__ */ jsx(Drawer$1.Close, { "data-slot": "drawer-close", ...props });
|
|
3005
|
+
}
|
|
3006
|
+
function DrawerOverlay({
|
|
3007
|
+
className,
|
|
3008
|
+
...props
|
|
3009
|
+
}) {
|
|
3010
|
+
return /* @__PURE__ */ jsx(
|
|
3011
|
+
Drawer$1.Overlay,
|
|
3012
|
+
{
|
|
3013
|
+
"data-slot": "drawer-overlay",
|
|
3014
|
+
className: cn(
|
|
3015
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
|
3016
|
+
className
|
|
3017
|
+
),
|
|
3018
|
+
...props
|
|
3019
|
+
}
|
|
3020
|
+
);
|
|
3021
|
+
}
|
|
3022
|
+
function DrawerContent({
|
|
3023
|
+
className,
|
|
3024
|
+
children,
|
|
3025
|
+
...props
|
|
3026
|
+
}) {
|
|
3027
|
+
return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
|
|
3028
|
+
/* @__PURE__ */ jsx(DrawerOverlay, {}),
|
|
3029
|
+
/* @__PURE__ */ jsxs(
|
|
3030
|
+
Drawer$1.Content,
|
|
3031
|
+
{
|
|
3032
|
+
"data-slot": "drawer-content",
|
|
3033
|
+
className: cn(
|
|
3034
|
+
"group/drawer-content bg-background fixed z-50 flex h-auto flex-col",
|
|
3035
|
+
"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b",
|
|
3036
|
+
"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t",
|
|
3037
|
+
"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
|
3038
|
+
"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm",
|
|
3039
|
+
className
|
|
3040
|
+
),
|
|
3041
|
+
...props,
|
|
3042
|
+
children: [
|
|
3043
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
|
|
3044
|
+
children
|
|
3045
|
+
]
|
|
3046
|
+
}
|
|
3047
|
+
)
|
|
3048
|
+
] });
|
|
3049
|
+
}
|
|
3050
|
+
function DrawerHeader({ className, ...props }) {
|
|
3051
|
+
return /* @__PURE__ */ jsx(
|
|
3052
|
+
"div",
|
|
3053
|
+
{
|
|
3054
|
+
"data-slot": "drawer-header",
|
|
3055
|
+
className: cn(
|
|
3056
|
+
"flex flex-col gap-1.5 p-4 text-center sm:text-left",
|
|
3057
|
+
className
|
|
3058
|
+
),
|
|
3059
|
+
...props
|
|
3060
|
+
}
|
|
3061
|
+
);
|
|
3062
|
+
}
|
|
3063
|
+
function DrawerFooter({ className, ...props }) {
|
|
3064
|
+
return /* @__PURE__ */ jsx(
|
|
3065
|
+
"div",
|
|
3066
|
+
{
|
|
3067
|
+
"data-slot": "drawer-footer",
|
|
3068
|
+
className: cn("mt-auto flex flex-col gap-2 p-4", className),
|
|
3069
|
+
...props
|
|
3070
|
+
}
|
|
3071
|
+
);
|
|
3072
|
+
}
|
|
3073
|
+
function DrawerTitle({
|
|
3074
|
+
className,
|
|
3075
|
+
...props
|
|
3076
|
+
}) {
|
|
3077
|
+
return /* @__PURE__ */ jsx(
|
|
3078
|
+
Drawer$1.Title,
|
|
3079
|
+
{
|
|
3080
|
+
"data-slot": "drawer-title",
|
|
3081
|
+
className: cn("text-lg font-semibold text-foreground", className),
|
|
3082
|
+
...props
|
|
3083
|
+
}
|
|
3084
|
+
);
|
|
3085
|
+
}
|
|
3086
|
+
function DrawerDescription({
|
|
3087
|
+
className,
|
|
3088
|
+
...props
|
|
3089
|
+
}) {
|
|
3090
|
+
return /* @__PURE__ */ jsx(
|
|
3091
|
+
Drawer$1.Description,
|
|
3092
|
+
{
|
|
3093
|
+
"data-slot": "drawer-description",
|
|
3094
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
3095
|
+
...props
|
|
3096
|
+
}
|
|
3097
|
+
);
|
|
3098
|
+
}
|
|
3099
|
+
function ResizablePanelGroup({
|
|
3100
|
+
className,
|
|
3101
|
+
...props
|
|
3102
|
+
}) {
|
|
3103
|
+
return /* @__PURE__ */ jsx(
|
|
3104
|
+
ResizablePrimitive.PanelGroup,
|
|
3105
|
+
{
|
|
3106
|
+
"data-slot": "resizable-panel-group",
|
|
3107
|
+
className: cn(
|
|
3108
|
+
"flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
|
|
3109
|
+
className
|
|
3110
|
+
),
|
|
3111
|
+
...props
|
|
3112
|
+
}
|
|
3113
|
+
);
|
|
3114
|
+
}
|
|
3115
|
+
function ResizablePanel({
|
|
3116
|
+
...props
|
|
3117
|
+
}) {
|
|
3118
|
+
return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
|
|
3119
|
+
}
|
|
3120
|
+
function ResizableHandle({
|
|
3121
|
+
withHandle,
|
|
3122
|
+
className,
|
|
3123
|
+
...props
|
|
3124
|
+
}) {
|
|
3125
|
+
return /* @__PURE__ */ jsx(
|
|
3126
|
+
ResizablePrimitive.PanelResizeHandle,
|
|
3127
|
+
{
|
|
3128
|
+
"data-slot": "resizable-handle",
|
|
3129
|
+
className: cn(
|
|
3130
|
+
"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
|
|
3131
|
+
className
|
|
3132
|
+
),
|
|
3133
|
+
...props,
|
|
3134
|
+
children: withHandle && /* @__PURE__ */ jsx("div", { className: "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-sm border", children: /* @__PURE__ */ jsx(GripVertical, { className: "size-2.5" }) })
|
|
3135
|
+
}
|
|
3136
|
+
);
|
|
3137
|
+
}
|
|
3138
|
+
function ScrollArea({
|
|
3139
|
+
className,
|
|
3140
|
+
children,
|
|
3141
|
+
...props
|
|
3142
|
+
}) {
|
|
3143
|
+
return /* @__PURE__ */ jsxs(
|
|
3144
|
+
ScrollAreaPrimitive.Root,
|
|
3145
|
+
{
|
|
3146
|
+
"data-slot": "scroll-area",
|
|
3147
|
+
className: cn("relative", className),
|
|
3148
|
+
...props,
|
|
3149
|
+
children: [
|
|
3150
|
+
/* @__PURE__ */ jsx(
|
|
3151
|
+
ScrollAreaPrimitive.Viewport,
|
|
3152
|
+
{
|
|
3153
|
+
"data-slot": "scroll-area-viewport",
|
|
3154
|
+
className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
|
|
3155
|
+
children
|
|
3156
|
+
}
|
|
3157
|
+
),
|
|
3158
|
+
/* @__PURE__ */ jsx(ScrollBar, {}),
|
|
3159
|
+
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
|
|
3160
|
+
]
|
|
3161
|
+
}
|
|
3162
|
+
);
|
|
3163
|
+
}
|
|
3164
|
+
function ScrollBar({
|
|
3165
|
+
className,
|
|
3166
|
+
orientation = "vertical",
|
|
3167
|
+
...props
|
|
3168
|
+
}) {
|
|
3169
|
+
return /* @__PURE__ */ jsx(
|
|
3170
|
+
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
3171
|
+
{
|
|
3172
|
+
"data-slot": "scroll-area-scrollbar",
|
|
3173
|
+
orientation,
|
|
3174
|
+
className: cn(
|
|
3175
|
+
"flex touch-none p-px transition-colors select-none",
|
|
3176
|
+
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
|
|
3177
|
+
orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
|
|
3178
|
+
className
|
|
3179
|
+
),
|
|
3180
|
+
...props,
|
|
3181
|
+
children: /* @__PURE__ */ jsx(
|
|
3182
|
+
ScrollAreaPrimitive.ScrollAreaThumb,
|
|
3183
|
+
{
|
|
3184
|
+
"data-slot": "scroll-area-thumb",
|
|
3185
|
+
className: "bg-border relative flex-1 rounded-full"
|
|
3186
|
+
}
|
|
3187
|
+
)
|
|
3188
|
+
}
|
|
3189
|
+
);
|
|
3190
|
+
}
|
|
3191
|
+
function ItemGroup({ className, ...props }) {
|
|
3192
|
+
return /* @__PURE__ */ jsx(
|
|
3193
|
+
"div",
|
|
3194
|
+
{
|
|
3195
|
+
role: "list",
|
|
3196
|
+
"data-slot": "item-group",
|
|
3197
|
+
className: cn("group/item-group flex flex-col", className),
|
|
3198
|
+
...props
|
|
3199
|
+
}
|
|
3200
|
+
);
|
|
3201
|
+
}
|
|
3202
|
+
function ItemSeparator({
|
|
3203
|
+
className,
|
|
3204
|
+
...props
|
|
3205
|
+
}) {
|
|
3206
|
+
return /* @__PURE__ */ jsx(
|
|
3207
|
+
Separator,
|
|
3208
|
+
{
|
|
3209
|
+
"data-slot": "item-separator",
|
|
3210
|
+
orientation: "horizontal",
|
|
3211
|
+
className: cn("my-0", className),
|
|
3212
|
+
...props
|
|
3213
|
+
}
|
|
3214
|
+
);
|
|
3215
|
+
}
|
|
3216
|
+
var itemVariants = cva(
|
|
3217
|
+
"group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
3218
|
+
{
|
|
3219
|
+
variants: {
|
|
3220
|
+
variant: {
|
|
3221
|
+
default: "bg-transparent",
|
|
3222
|
+
outline: "border-border",
|
|
3223
|
+
muted: "bg-muted/50"
|
|
3224
|
+
},
|
|
3225
|
+
size: {
|
|
3226
|
+
default: "p-4 gap-4 ",
|
|
3227
|
+
sm: "py-3 px-4 gap-2.5"
|
|
3228
|
+
}
|
|
3229
|
+
},
|
|
3230
|
+
defaultVariants: {
|
|
3231
|
+
variant: "default",
|
|
3232
|
+
size: "default"
|
|
3233
|
+
}
|
|
3234
|
+
}
|
|
3235
|
+
);
|
|
3236
|
+
function Item6({
|
|
3237
|
+
className,
|
|
3238
|
+
variant = "default",
|
|
3239
|
+
size = "default",
|
|
3240
|
+
asChild = false,
|
|
3241
|
+
...props
|
|
3242
|
+
}) {
|
|
3243
|
+
const Comp = asChild ? Slot : "div";
|
|
3244
|
+
return /* @__PURE__ */ jsx(
|
|
3245
|
+
Comp,
|
|
3246
|
+
{
|
|
3247
|
+
"data-slot": "item",
|
|
3248
|
+
"data-variant": variant,
|
|
3249
|
+
"data-size": size,
|
|
3250
|
+
className: cn(itemVariants({ variant, size, className })),
|
|
3251
|
+
...props
|
|
3252
|
+
}
|
|
3253
|
+
);
|
|
3254
|
+
}
|
|
3255
|
+
var itemMediaVariants = cva(
|
|
3256
|
+
"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5",
|
|
3257
|
+
{
|
|
3258
|
+
variants: {
|
|
3259
|
+
variant: {
|
|
3260
|
+
default: "bg-transparent",
|
|
3261
|
+
icon: "size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4",
|
|
3262
|
+
image: "size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover"
|
|
3263
|
+
}
|
|
3264
|
+
},
|
|
3265
|
+
defaultVariants: {
|
|
3266
|
+
variant: "default"
|
|
3267
|
+
}
|
|
3268
|
+
}
|
|
3269
|
+
);
|
|
3270
|
+
function ItemMedia({
|
|
3271
|
+
className,
|
|
3272
|
+
variant = "default",
|
|
3273
|
+
...props
|
|
3274
|
+
}) {
|
|
3275
|
+
return /* @__PURE__ */ jsx(
|
|
3276
|
+
"div",
|
|
3277
|
+
{
|
|
3278
|
+
"data-slot": "item-media",
|
|
3279
|
+
"data-variant": variant,
|
|
3280
|
+
className: cn(itemMediaVariants({ variant, className })),
|
|
3281
|
+
...props
|
|
3282
|
+
}
|
|
3283
|
+
);
|
|
3284
|
+
}
|
|
3285
|
+
function ItemContent({ className, ...props }) {
|
|
3286
|
+
return /* @__PURE__ */ jsx(
|
|
3287
|
+
"div",
|
|
3288
|
+
{
|
|
3289
|
+
"data-slot": "item-content",
|
|
3290
|
+
className: cn(
|
|
3291
|
+
"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none",
|
|
3292
|
+
className
|
|
3293
|
+
),
|
|
3294
|
+
...props
|
|
3295
|
+
}
|
|
3296
|
+
);
|
|
3297
|
+
}
|
|
3298
|
+
function ItemTitle({ className, ...props }) {
|
|
3299
|
+
return /* @__PURE__ */ jsx(
|
|
3300
|
+
"div",
|
|
3301
|
+
{
|
|
3302
|
+
"data-slot": "item-title",
|
|
3303
|
+
className: cn(
|
|
3304
|
+
"flex w-fit items-center gap-2 text-sm leading-snug font-medium",
|
|
3305
|
+
className
|
|
3306
|
+
),
|
|
3307
|
+
...props
|
|
3308
|
+
}
|
|
3309
|
+
);
|
|
3310
|
+
}
|
|
3311
|
+
function ItemDescription({ className, ...props }) {
|
|
3312
|
+
return /* @__PURE__ */ jsx(
|
|
3313
|
+
"p",
|
|
3314
|
+
{
|
|
3315
|
+
"data-slot": "item-description",
|
|
3316
|
+
className: cn(
|
|
3317
|
+
"text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance",
|
|
3318
|
+
"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
|
|
3319
|
+
className
|
|
3320
|
+
),
|
|
3321
|
+
...props
|
|
3322
|
+
}
|
|
3323
|
+
);
|
|
3324
|
+
}
|
|
3325
|
+
function ItemActions({ className, ...props }) {
|
|
3326
|
+
return /* @__PURE__ */ jsx(
|
|
3327
|
+
"div",
|
|
3328
|
+
{
|
|
3329
|
+
"data-slot": "item-actions",
|
|
3330
|
+
className: cn("flex items-center gap-2", className),
|
|
3331
|
+
...props
|
|
3332
|
+
}
|
|
3333
|
+
);
|
|
3334
|
+
}
|
|
3335
|
+
function ItemHeader({ className, ...props }) {
|
|
3336
|
+
return /* @__PURE__ */ jsx(
|
|
3337
|
+
"div",
|
|
3338
|
+
{
|
|
3339
|
+
"data-slot": "item-header",
|
|
3340
|
+
className: cn(
|
|
3341
|
+
"flex basis-full items-center justify-between gap-2",
|
|
3342
|
+
className
|
|
3343
|
+
),
|
|
3344
|
+
...props
|
|
3345
|
+
}
|
|
3346
|
+
);
|
|
3347
|
+
}
|
|
3348
|
+
function ItemFooter({ className, ...props }) {
|
|
3349
|
+
return /* @__PURE__ */ jsx(
|
|
3350
|
+
"div",
|
|
3351
|
+
{
|
|
3352
|
+
"data-slot": "item-footer",
|
|
3353
|
+
className: cn(
|
|
3354
|
+
"flex basis-full items-center justify-between gap-2",
|
|
3355
|
+
className
|
|
3356
|
+
),
|
|
3357
|
+
...props
|
|
3358
|
+
}
|
|
3359
|
+
);
|
|
3360
|
+
}
|
|
3361
|
+
var Accordion = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3362
|
+
AccordionPrimitive.Root,
|
|
3363
|
+
{
|
|
3364
|
+
ref,
|
|
3365
|
+
"data-slot": "accordion",
|
|
3366
|
+
...props
|
|
3367
|
+
}
|
|
3368
|
+
));
|
|
3369
|
+
Accordion.displayName = "Accordion";
|
|
3370
|
+
var AccordionItem = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3371
|
+
AccordionPrimitive.Item,
|
|
3372
|
+
{
|
|
3373
|
+
ref,
|
|
3374
|
+
"data-slot": "accordion-item",
|
|
3375
|
+
className: cn("border-b last:border-b-0", className),
|
|
3376
|
+
...props
|
|
3377
|
+
}
|
|
3378
|
+
));
|
|
3379
|
+
AccordionItem.displayName = "AccordionItem";
|
|
3380
|
+
var AccordionTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
3381
|
+
AccordionPrimitive.Trigger,
|
|
3382
|
+
{
|
|
3383
|
+
ref,
|
|
3384
|
+
"data-slot": "accordion-trigger",
|
|
3385
|
+
className: cn(
|
|
3386
|
+
"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] focus-visible:border-ring focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
|
|
3387
|
+
className
|
|
3388
|
+
),
|
|
3389
|
+
...props,
|
|
3390
|
+
children: [
|
|
3391
|
+
children,
|
|
3392
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" })
|
|
3393
|
+
]
|
|
3394
|
+
}
|
|
3395
|
+
) }));
|
|
3396
|
+
AccordionTrigger.displayName = "AccordionTrigger";
|
|
3397
|
+
var AccordionContent = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3398
|
+
AccordionPrimitive.Content,
|
|
3399
|
+
{
|
|
3400
|
+
ref,
|
|
3401
|
+
"data-slot": "accordion-content",
|
|
3402
|
+
className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
|
|
3403
|
+
...props,
|
|
3404
|
+
children: /* @__PURE__ */ jsx("div", { className: cn("pt-0 pb-4", className), children })
|
|
3405
|
+
}
|
|
3406
|
+
));
|
|
3407
|
+
AccordionContent.displayName = "AccordionContent";
|
|
3408
|
+
var CarouselContext = React24.createContext(null);
|
|
3409
|
+
function useCarousel() {
|
|
3410
|
+
const context = React24.useContext(CarouselContext);
|
|
3411
|
+
if (!context) {
|
|
3412
|
+
throw new Error("useCarousel must be used within a <Carousel />");
|
|
3413
|
+
}
|
|
3414
|
+
return context;
|
|
3415
|
+
}
|
|
3416
|
+
var Carousel = React24.forwardRef(
|
|
3417
|
+
({
|
|
3418
|
+
orientation = "horizontal",
|
|
3419
|
+
opts,
|
|
3420
|
+
setApi,
|
|
3421
|
+
plugins,
|
|
3422
|
+
className,
|
|
3423
|
+
children,
|
|
3424
|
+
...props
|
|
3425
|
+
}, ref) => {
|
|
3426
|
+
const [carouselRef, api] = useEmblaCarousel(
|
|
3427
|
+
{
|
|
3428
|
+
...opts,
|
|
3429
|
+
axis: orientation === "horizontal" ? "x" : "y"
|
|
3430
|
+
},
|
|
3431
|
+
plugins
|
|
3432
|
+
);
|
|
3433
|
+
const [canScrollPrev, setCanScrollPrev] = React24.useState(false);
|
|
3434
|
+
const [canScrollNext, setCanScrollNext] = React24.useState(false);
|
|
3435
|
+
const onSelect = React24.useCallback((api2) => {
|
|
3436
|
+
if (!api2) return;
|
|
3437
|
+
setCanScrollPrev(api2.canScrollPrev());
|
|
3438
|
+
setCanScrollNext(api2.canScrollNext());
|
|
3439
|
+
}, []);
|
|
3440
|
+
const scrollPrev = React24.useCallback(() => {
|
|
3441
|
+
api?.scrollPrev();
|
|
3442
|
+
}, [api]);
|
|
3443
|
+
const scrollNext = React24.useCallback(() => {
|
|
3444
|
+
api?.scrollNext();
|
|
3445
|
+
}, [api]);
|
|
3446
|
+
const handleKeyDown = React24.useCallback(
|
|
3447
|
+
(event) => {
|
|
3448
|
+
if (event.key === "ArrowLeft") {
|
|
3449
|
+
event.preventDefault();
|
|
3450
|
+
scrollPrev();
|
|
3451
|
+
} else if (event.key === "ArrowRight") {
|
|
3452
|
+
event.preventDefault();
|
|
3453
|
+
scrollNext();
|
|
3454
|
+
}
|
|
3455
|
+
},
|
|
3456
|
+
[scrollPrev, scrollNext]
|
|
3457
|
+
);
|
|
3458
|
+
React24.useEffect(() => {
|
|
3459
|
+
if (!api || !setApi) return;
|
|
3460
|
+
setApi(api);
|
|
3461
|
+
}, [api, setApi]);
|
|
3462
|
+
React24.useEffect(() => {
|
|
3463
|
+
if (!api) return;
|
|
3464
|
+
onSelect(api);
|
|
3465
|
+
api.on("reInit", onSelect);
|
|
3466
|
+
api.on("select", onSelect);
|
|
3467
|
+
return () => {
|
|
3468
|
+
api?.off("select", onSelect);
|
|
3469
|
+
};
|
|
3470
|
+
}, [api, onSelect]);
|
|
3471
|
+
return /* @__PURE__ */ jsx(
|
|
3472
|
+
CarouselContext.Provider,
|
|
3473
|
+
{
|
|
3474
|
+
value: {
|
|
3475
|
+
carouselRef,
|
|
3476
|
+
api,
|
|
3477
|
+
opts,
|
|
3478
|
+
orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
|
|
3479
|
+
scrollPrev,
|
|
3480
|
+
scrollNext,
|
|
3481
|
+
canScrollPrev,
|
|
3482
|
+
canScrollNext
|
|
3483
|
+
},
|
|
3484
|
+
children: /* @__PURE__ */ jsx(
|
|
3485
|
+
"div",
|
|
3486
|
+
{
|
|
3487
|
+
ref,
|
|
3488
|
+
onKeyDownCapture: handleKeyDown,
|
|
3489
|
+
className: cn("relative", className),
|
|
3490
|
+
role: "region",
|
|
3491
|
+
"aria-roledescription": "carousel",
|
|
3492
|
+
"data-slot": "carousel",
|
|
3493
|
+
...props,
|
|
3494
|
+
children
|
|
3495
|
+
}
|
|
3496
|
+
)
|
|
3497
|
+
}
|
|
3498
|
+
);
|
|
3499
|
+
}
|
|
3500
|
+
);
|
|
3501
|
+
Carousel.displayName = "Carousel";
|
|
3502
|
+
var CarouselContent = React24.forwardRef(({ className, ...props }, ref) => {
|
|
3503
|
+
const { carouselRef, orientation } = useCarousel();
|
|
3504
|
+
return /* @__PURE__ */ jsx(
|
|
3505
|
+
"div",
|
|
3506
|
+
{
|
|
3507
|
+
ref: carouselRef,
|
|
3508
|
+
className: "overflow-hidden",
|
|
3509
|
+
"data-slot": "carousel-content",
|
|
3510
|
+
children: /* @__PURE__ */ jsx(
|
|
3511
|
+
"div",
|
|
3512
|
+
{
|
|
3513
|
+
ref,
|
|
3514
|
+
className: cn(
|
|
3515
|
+
"flex",
|
|
3516
|
+
orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
|
|
3517
|
+
className
|
|
3518
|
+
),
|
|
3519
|
+
...props
|
|
3520
|
+
}
|
|
3521
|
+
)
|
|
3522
|
+
}
|
|
3523
|
+
);
|
|
3524
|
+
});
|
|
3525
|
+
CarouselContent.displayName = "CarouselContent";
|
|
3526
|
+
var CarouselItem = React24.forwardRef(({ className, ...props }, ref) => {
|
|
3527
|
+
const { orientation } = useCarousel();
|
|
3528
|
+
return /* @__PURE__ */ jsx(
|
|
3529
|
+
"div",
|
|
3530
|
+
{
|
|
3531
|
+
ref,
|
|
3532
|
+
role: "group",
|
|
3533
|
+
"aria-roledescription": "slide",
|
|
3534
|
+
"data-slot": "carousel-item",
|
|
3535
|
+
className: cn(
|
|
3536
|
+
"min-w-0 shrink-0 grow-0 basis-full",
|
|
3537
|
+
orientation === "horizontal" ? "pl-4" : "pt-4",
|
|
3538
|
+
className
|
|
3539
|
+
),
|
|
3540
|
+
...props
|
|
3541
|
+
}
|
|
3542
|
+
);
|
|
3543
|
+
});
|
|
3544
|
+
CarouselItem.displayName = "CarouselItem";
|
|
3545
|
+
var CarouselPrevious = React24.forwardRef(({ className, variant = ButtonVariant.Outline, size = ButtonSize.Icon, ...props }, ref) => {
|
|
3546
|
+
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
3547
|
+
return /* @__PURE__ */ jsxs(
|
|
3548
|
+
Button,
|
|
3549
|
+
{
|
|
3550
|
+
ref,
|
|
3551
|
+
"data-slot": "carousel-previous",
|
|
3552
|
+
variant,
|
|
3553
|
+
size,
|
|
3554
|
+
className: cn(
|
|
3555
|
+
"absolute h-8 w-8 rounded-full",
|
|
3556
|
+
orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
3557
|
+
className
|
|
3558
|
+
),
|
|
3559
|
+
disabled: !canScrollPrev,
|
|
3560
|
+
onClick: scrollPrev,
|
|
3561
|
+
...props,
|
|
3562
|
+
children: [
|
|
3563
|
+
/* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
|
|
3564
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
|
|
3565
|
+
]
|
|
3566
|
+
}
|
|
3567
|
+
);
|
|
3568
|
+
});
|
|
3569
|
+
CarouselPrevious.displayName = "CarouselPrevious";
|
|
3570
|
+
var CarouselNext = React24.forwardRef(({ className, variant = ButtonVariant.Outline, size = ButtonSize.Icon, ...props }, ref) => {
|
|
3571
|
+
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
3572
|
+
return /* @__PURE__ */ jsxs(
|
|
3573
|
+
Button,
|
|
3574
|
+
{
|
|
3575
|
+
ref,
|
|
3576
|
+
"data-slot": "carousel-next",
|
|
3577
|
+
variant,
|
|
3578
|
+
size,
|
|
3579
|
+
className: cn(
|
|
3580
|
+
"absolute h-8 w-8 rounded-full",
|
|
3581
|
+
orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
3582
|
+
className
|
|
3583
|
+
),
|
|
3584
|
+
disabled: !canScrollNext,
|
|
3585
|
+
onClick: scrollNext,
|
|
3586
|
+
...props,
|
|
3587
|
+
children: [
|
|
3588
|
+
/* @__PURE__ */ jsx(ArrowRight, { className: "h-4 w-4" }),
|
|
3589
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
|
|
3590
|
+
]
|
|
3591
|
+
}
|
|
3592
|
+
);
|
|
3593
|
+
});
|
|
3594
|
+
CarouselNext.displayName = "CarouselNext";
|
|
3595
|
+
var Collapsible = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3596
|
+
CollapsiblePrimitive.Root,
|
|
3597
|
+
{
|
|
3598
|
+
ref,
|
|
3599
|
+
"data-slot": "collapsible",
|
|
3600
|
+
...props
|
|
3601
|
+
}
|
|
3602
|
+
));
|
|
3603
|
+
Collapsible.displayName = "Collapsible";
|
|
3604
|
+
var CollapsibleTrigger2 = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3605
|
+
CollapsiblePrimitive.CollapsibleTrigger,
|
|
3606
|
+
{
|
|
3607
|
+
ref,
|
|
3608
|
+
"data-slot": "collapsible-trigger",
|
|
3609
|
+
...props
|
|
3610
|
+
}
|
|
3611
|
+
));
|
|
3612
|
+
CollapsibleTrigger2.displayName = "CollapsibleTrigger";
|
|
3613
|
+
var CollapsibleContent2 = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3614
|
+
CollapsiblePrimitive.CollapsibleContent,
|
|
3615
|
+
{
|
|
3616
|
+
ref,
|
|
3617
|
+
"data-slot": "collapsible-content",
|
|
3618
|
+
...props
|
|
3619
|
+
}
|
|
3620
|
+
));
|
|
3621
|
+
CollapsibleContent2.displayName = "CollapsibleContent";
|
|
3622
|
+
function ChartContainer({
|
|
3623
|
+
className,
|
|
3624
|
+
children,
|
|
3625
|
+
width = "100%",
|
|
3626
|
+
height = 350
|
|
3627
|
+
}) {
|
|
3628
|
+
return /* @__PURE__ */ jsx(
|
|
3629
|
+
"div",
|
|
3630
|
+
{
|
|
3631
|
+
"data-slot": "chart-container",
|
|
3632
|
+
className: cn("w-full", className),
|
|
3633
|
+
style: { width, height: typeof height === "number" ? `${height}px` : height },
|
|
3634
|
+
children
|
|
3635
|
+
}
|
|
3636
|
+
);
|
|
3637
|
+
}
|
|
3638
|
+
function ChartTooltipContent({
|
|
3639
|
+
className,
|
|
3640
|
+
label,
|
|
3641
|
+
payload,
|
|
3642
|
+
active
|
|
3643
|
+
}) {
|
|
3644
|
+
if (!active || !payload || payload.length === 0) {
|
|
3645
|
+
return null;
|
|
3646
|
+
}
|
|
3647
|
+
return /* @__PURE__ */ jsxs(
|
|
3648
|
+
"div",
|
|
3649
|
+
{
|
|
3650
|
+
"data-slot": "chart-tooltip-content",
|
|
3651
|
+
className: cn(
|
|
3652
|
+
"bg-background border-border text-foreground rounded-lg border p-2 shadow-md",
|
|
3653
|
+
className
|
|
3654
|
+
),
|
|
3655
|
+
children: [
|
|
3656
|
+
label && /* @__PURE__ */ jsx("div", { className: "mb-1 text-xs font-medium text-muted-foreground", children: label }),
|
|
3657
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1", children: payload.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs", children: [
|
|
3658
|
+
/* @__PURE__ */ jsx(
|
|
3659
|
+
"div",
|
|
3660
|
+
{
|
|
3661
|
+
className: "h-2 w-2 rounded-full",
|
|
3662
|
+
style: { backgroundColor: item.color }
|
|
3663
|
+
}
|
|
3664
|
+
),
|
|
3665
|
+
/* @__PURE__ */ jsxs("span", { className: "font-medium", children: [
|
|
3666
|
+
item.name,
|
|
3667
|
+
":"
|
|
3668
|
+
] }),
|
|
3669
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: item.value })
|
|
3670
|
+
] }, index)) })
|
|
3671
|
+
]
|
|
3672
|
+
}
|
|
3673
|
+
);
|
|
3674
|
+
}
|
|
3675
|
+
function ChartLegendContent({
|
|
3676
|
+
className,
|
|
3677
|
+
payload
|
|
3678
|
+
}) {
|
|
3679
|
+
if (!payload || payload.length === 0) {
|
|
3680
|
+
return null;
|
|
3681
|
+
}
|
|
3682
|
+
return /* @__PURE__ */ jsx(
|
|
3683
|
+
"div",
|
|
3684
|
+
{
|
|
3685
|
+
"data-slot": "chart-legend-content",
|
|
3686
|
+
className: cn("flex items-center justify-center gap-4 text-sm pt-4", className),
|
|
3687
|
+
children: payload.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3688
|
+
/* @__PURE__ */ jsx(
|
|
3689
|
+
"div",
|
|
3690
|
+
{
|
|
3691
|
+
className: "h-3 w-3 rounded-sm",
|
|
3692
|
+
style: { backgroundColor: item.color }
|
|
3693
|
+
}
|
|
3694
|
+
),
|
|
3695
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: item.value })
|
|
3696
|
+
] }, index))
|
|
3697
|
+
}
|
|
3698
|
+
);
|
|
3699
|
+
}
|
|
3700
|
+
function ContextMenu({
|
|
3701
|
+
...props
|
|
3702
|
+
}) {
|
|
3703
|
+
return /* @__PURE__ */ jsx(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
|
|
3704
|
+
}
|
|
3705
|
+
function ContextMenuTrigger({
|
|
3706
|
+
...props
|
|
3707
|
+
}) {
|
|
3708
|
+
return /* @__PURE__ */ jsx(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
|
|
3709
|
+
}
|
|
3710
|
+
function ContextMenuGroup({
|
|
3711
|
+
...props
|
|
3712
|
+
}) {
|
|
3713
|
+
return /* @__PURE__ */ jsx(ContextMenuPrimitive.Group, { "data-slot": "context-menu-group", ...props });
|
|
3714
|
+
}
|
|
3715
|
+
function ContextMenuPortal({
|
|
3716
|
+
...props
|
|
3717
|
+
}) {
|
|
3718
|
+
return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { "data-slot": "context-menu-portal", ...props });
|
|
3719
|
+
}
|
|
3720
|
+
function ContextMenuSub({
|
|
3721
|
+
...props
|
|
3722
|
+
}) {
|
|
3723
|
+
return /* @__PURE__ */ jsx(ContextMenuPrimitive.Sub, { "data-slot": "context-menu-sub", ...props });
|
|
3724
|
+
}
|
|
3725
|
+
function ContextMenuRadioGroup({
|
|
3726
|
+
...props
|
|
3727
|
+
}) {
|
|
3728
|
+
return /* @__PURE__ */ jsx(
|
|
3729
|
+
ContextMenuPrimitive.RadioGroup,
|
|
3730
|
+
{
|
|
3731
|
+
"data-slot": "context-menu-radio-group",
|
|
3732
|
+
...props
|
|
3733
|
+
}
|
|
3734
|
+
);
|
|
3735
|
+
}
|
|
3736
|
+
function ContextMenuSubTrigger({
|
|
3737
|
+
className,
|
|
3738
|
+
inset,
|
|
3739
|
+
children,
|
|
3740
|
+
...props
|
|
3741
|
+
}) {
|
|
3742
|
+
return /* @__PURE__ */ jsxs(
|
|
3743
|
+
ContextMenuPrimitive.SubTrigger,
|
|
3744
|
+
{
|
|
3745
|
+
"data-slot": "context-menu-sub-trigger",
|
|
3746
|
+
"data-inset": inset,
|
|
3747
|
+
className: cn(
|
|
3748
|
+
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
3749
|
+
className
|
|
3750
|
+
),
|
|
3751
|
+
...props,
|
|
3752
|
+
children: [
|
|
3753
|
+
children,
|
|
3754
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
|
|
3755
|
+
]
|
|
3756
|
+
}
|
|
3757
|
+
);
|
|
3758
|
+
}
|
|
3759
|
+
function ContextMenuSubContent({
|
|
3760
|
+
className,
|
|
3761
|
+
...props
|
|
3762
|
+
}) {
|
|
3763
|
+
return /* @__PURE__ */ jsx(
|
|
3764
|
+
ContextMenuPrimitive.SubContent,
|
|
3765
|
+
{
|
|
3766
|
+
"data-slot": "context-menu-sub-content",
|
|
3767
|
+
className: cn(
|
|
3768
|
+
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border p-1 shadow-lg",
|
|
3769
|
+
className
|
|
3770
|
+
),
|
|
3771
|
+
...props
|
|
3772
|
+
}
|
|
3773
|
+
);
|
|
3774
|
+
}
|
|
3775
|
+
function ContextMenuContent({
|
|
3776
|
+
className,
|
|
3777
|
+
...props
|
|
3778
|
+
}) {
|
|
3779
|
+
return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
3780
|
+
ContextMenuPrimitive.Content,
|
|
3781
|
+
{
|
|
3782
|
+
"data-slot": "context-menu-content",
|
|
3783
|
+
className: cn(
|
|
3784
|
+
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-[var(--radix-context-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
|
|
3785
|
+
className
|
|
3786
|
+
),
|
|
3787
|
+
...props
|
|
3788
|
+
}
|
|
3789
|
+
) });
|
|
3790
|
+
}
|
|
3791
|
+
function ContextMenuItem({
|
|
3792
|
+
className,
|
|
3793
|
+
inset,
|
|
3794
|
+
variant = "default",
|
|
3795
|
+
...props
|
|
3796
|
+
}) {
|
|
3797
|
+
return /* @__PURE__ */ jsx(
|
|
3798
|
+
ContextMenuPrimitive.Item,
|
|
3799
|
+
{
|
|
3800
|
+
"data-slot": "context-menu-item",
|
|
3801
|
+
"data-inset": inset,
|
|
3802
|
+
"data-variant": variant,
|
|
3803
|
+
className: cn(
|
|
3804
|
+
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
3805
|
+
className
|
|
3806
|
+
),
|
|
3807
|
+
...props
|
|
3808
|
+
}
|
|
3809
|
+
);
|
|
3810
|
+
}
|
|
3811
|
+
function ContextMenuCheckboxItem({
|
|
3812
|
+
className,
|
|
3813
|
+
children,
|
|
3814
|
+
checked,
|
|
3815
|
+
...props
|
|
3816
|
+
}) {
|
|
3817
|
+
return /* @__PURE__ */ jsxs(
|
|
3818
|
+
ContextMenuPrimitive.CheckboxItem,
|
|
3819
|
+
{
|
|
3820
|
+
"data-slot": "context-menu-checkbox-item",
|
|
3821
|
+
className: cn(
|
|
3822
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
3823
|
+
className
|
|
3824
|
+
),
|
|
3825
|
+
checked,
|
|
3826
|
+
...props,
|
|
3827
|
+
children: [
|
|
3828
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
|
|
3829
|
+
children
|
|
3830
|
+
]
|
|
3831
|
+
}
|
|
3832
|
+
);
|
|
3833
|
+
}
|
|
3834
|
+
function ContextMenuRadioItem({
|
|
3835
|
+
className,
|
|
3836
|
+
children,
|
|
3837
|
+
...props
|
|
3838
|
+
}) {
|
|
3839
|
+
return /* @__PURE__ */ jsxs(
|
|
3840
|
+
ContextMenuPrimitive.RadioItem,
|
|
3841
|
+
{
|
|
3842
|
+
"data-slot": "context-menu-radio-item",
|
|
3843
|
+
className: cn(
|
|
3844
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
3845
|
+
className
|
|
3846
|
+
),
|
|
3847
|
+
...props,
|
|
3848
|
+
children: [
|
|
3849
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
|
|
3850
|
+
children
|
|
3851
|
+
]
|
|
3852
|
+
}
|
|
3853
|
+
);
|
|
3854
|
+
}
|
|
3855
|
+
function ContextMenuLabel({
|
|
3856
|
+
className,
|
|
3857
|
+
inset,
|
|
3858
|
+
...props
|
|
3859
|
+
}) {
|
|
3860
|
+
return /* @__PURE__ */ jsx(
|
|
3861
|
+
ContextMenuPrimitive.Label,
|
|
3862
|
+
{
|
|
3863
|
+
"data-slot": "context-menu-label",
|
|
3864
|
+
"data-inset": inset,
|
|
3865
|
+
className: cn(
|
|
3866
|
+
"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
|
|
3867
|
+
className
|
|
3868
|
+
),
|
|
3869
|
+
...props
|
|
3870
|
+
}
|
|
3871
|
+
);
|
|
3872
|
+
}
|
|
3873
|
+
function ContextMenuSeparator({
|
|
3874
|
+
className,
|
|
3875
|
+
...props
|
|
3876
|
+
}) {
|
|
3877
|
+
return /* @__PURE__ */ jsx(
|
|
3878
|
+
ContextMenuPrimitive.Separator,
|
|
3879
|
+
{
|
|
3880
|
+
"data-slot": "context-menu-separator",
|
|
3881
|
+
className: cn("bg-border -mx-1 my-1 h-px", className),
|
|
3882
|
+
...props
|
|
3883
|
+
}
|
|
3884
|
+
);
|
|
3885
|
+
}
|
|
3886
|
+
function ContextMenuShortcut({
|
|
3887
|
+
className,
|
|
3888
|
+
...props
|
|
3889
|
+
}) {
|
|
3890
|
+
return /* @__PURE__ */ jsx(
|
|
3891
|
+
"span",
|
|
3892
|
+
{
|
|
3893
|
+
"data-slot": "context-menu-shortcut",
|
|
3894
|
+
className: cn(
|
|
3895
|
+
"text-muted-foreground ml-auto text-xs tracking-widest",
|
|
3896
|
+
className
|
|
3897
|
+
),
|
|
3898
|
+
...props
|
|
3899
|
+
}
|
|
3900
|
+
);
|
|
3901
|
+
}
|
|
3902
|
+
var IconButton = React24__default.forwardRef(
|
|
3903
|
+
({ variant = ButtonVariant.Ghost, size = IconButtonSize.Default, className, ...props }, ref) => {
|
|
3904
|
+
const sizeStyles = {
|
|
3905
|
+
[IconButtonSize.Small]: "h-8 w-8",
|
|
3906
|
+
[IconButtonSize.Default]: "h-9 w-9",
|
|
3907
|
+
[IconButtonSize.Large]: "h-11 w-11"
|
|
3908
|
+
};
|
|
3909
|
+
return /* @__PURE__ */ jsx(
|
|
3910
|
+
Button,
|
|
3911
|
+
{
|
|
3912
|
+
ref,
|
|
3913
|
+
variant,
|
|
3914
|
+
size: ButtonSize.Icon,
|
|
3915
|
+
className: cn(sizeStyles[size], className),
|
|
3916
|
+
...props
|
|
3917
|
+
}
|
|
3918
|
+
);
|
|
3919
|
+
}
|
|
3920
|
+
);
|
|
3921
|
+
IconButton.displayName = "IconButton";
|
|
3922
|
+
var DropdownButton = React24__default.forwardRef(({ children, variant = ButtonVariant.Outline, className, ...props }, ref) => {
|
|
3923
|
+
return /* @__PURE__ */ jsxs(
|
|
3924
|
+
Button,
|
|
3925
|
+
{
|
|
3926
|
+
ref,
|
|
3927
|
+
variant,
|
|
3928
|
+
className: cn("min-w-40 justify-between rtl:flex-row-reverse", className),
|
|
3929
|
+
...props,
|
|
3930
|
+
children: [
|
|
3931
|
+
/* @__PURE__ */ jsx("span", { children }),
|
|
3932
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4" })
|
|
3933
|
+
]
|
|
3934
|
+
}
|
|
3935
|
+
);
|
|
3936
|
+
});
|
|
3937
|
+
DropdownButton.displayName = "DropdownButton";
|
|
3938
|
+
function InputGroup({ className, ...props }) {
|
|
3939
|
+
return /* @__PURE__ */ jsx(
|
|
3940
|
+
"div",
|
|
3941
|
+
{
|
|
3942
|
+
"data-slot": "input-group",
|
|
3943
|
+
role: "group",
|
|
3944
|
+
className: cn(
|
|
3945
|
+
"group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none",
|
|
3946
|
+
"h-9 min-w-0 has-[>textarea]:h-auto",
|
|
3947
|
+
// Variants based on alignment.
|
|
3948
|
+
"has-[>[data-align=inline-start]]:[&>input]:pl-2",
|
|
3949
|
+
"has-[>[data-align=inline-end]]:[&>input]:pr-2",
|
|
3950
|
+
"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
|
|
3951
|
+
"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
|
|
3952
|
+
// Focus state.
|
|
3953
|
+
"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]",
|
|
3954
|
+
// Error state.
|
|
3955
|
+
"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
|
|
3956
|
+
className
|
|
3957
|
+
),
|
|
3958
|
+
...props
|
|
3959
|
+
}
|
|
3960
|
+
);
|
|
3961
|
+
}
|
|
3962
|
+
var inputGroupAddonVariants = cva(
|
|
3963
|
+
"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50",
|
|
3964
|
+
{
|
|
3965
|
+
variants: {
|
|
3966
|
+
align: {
|
|
3967
|
+
"inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
|
|
3968
|
+
"inline-end": "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
|
|
3969
|
+
"block-start": "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
|
|
3970
|
+
"block-end": "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"
|
|
3971
|
+
}
|
|
3972
|
+
},
|
|
3973
|
+
defaultVariants: {
|
|
3974
|
+
align: "inline-start"
|
|
3975
|
+
}
|
|
3976
|
+
}
|
|
3977
|
+
);
|
|
3978
|
+
function InputGroupAddon({
|
|
3979
|
+
className,
|
|
3980
|
+
align = "inline-start",
|
|
3981
|
+
...props
|
|
3982
|
+
}) {
|
|
3983
|
+
return /* @__PURE__ */ jsx(
|
|
3984
|
+
"div",
|
|
3985
|
+
{
|
|
3986
|
+
role: "group",
|
|
3987
|
+
"data-slot": "input-group-addon",
|
|
3988
|
+
"data-align": align,
|
|
3989
|
+
className: cn(inputGroupAddonVariants({ align }), className),
|
|
3990
|
+
onClick: (e) => {
|
|
3991
|
+
if (e.target.closest("button")) {
|
|
3992
|
+
return;
|
|
3993
|
+
}
|
|
3994
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
3995
|
+
},
|
|
3996
|
+
...props
|
|
3997
|
+
}
|
|
3998
|
+
);
|
|
3999
|
+
}
|
|
4000
|
+
var inputGroupButtonVariants = cva(
|
|
4001
|
+
"text-sm shadow-none flex gap-2 items-center",
|
|
4002
|
+
{
|
|
4003
|
+
variants: {
|
|
4004
|
+
size: {
|
|
4005
|
+
xs: "h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",
|
|
4006
|
+
sm: "h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5",
|
|
4007
|
+
"icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
|
|
4008
|
+
"icon-sm": "size-8 p-0 has-[>svg]:p-0"
|
|
4009
|
+
}
|
|
4010
|
+
},
|
|
4011
|
+
defaultVariants: {
|
|
4012
|
+
size: "xs"
|
|
4013
|
+
}
|
|
4014
|
+
}
|
|
4015
|
+
);
|
|
4016
|
+
function InputGroupButton({
|
|
4017
|
+
className,
|
|
4018
|
+
type = "button",
|
|
4019
|
+
variant = ButtonVariant.Ghost,
|
|
4020
|
+
size = "xs",
|
|
4021
|
+
...props
|
|
4022
|
+
}) {
|
|
4023
|
+
return /* @__PURE__ */ jsx(
|
|
4024
|
+
Button,
|
|
4025
|
+
{
|
|
4026
|
+
type,
|
|
4027
|
+
"data-size": size,
|
|
4028
|
+
variant,
|
|
4029
|
+
className: cn(inputGroupButtonVariants({ size }), className),
|
|
4030
|
+
...props
|
|
4031
|
+
}
|
|
4032
|
+
);
|
|
4033
|
+
}
|
|
4034
|
+
function InputGroupText({ className, ...props }) {
|
|
4035
|
+
return /* @__PURE__ */ jsx(
|
|
4036
|
+
"span",
|
|
4037
|
+
{
|
|
4038
|
+
className: cn(
|
|
4039
|
+
"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
|
|
4040
|
+
className
|
|
4041
|
+
),
|
|
4042
|
+
...props
|
|
4043
|
+
}
|
|
4044
|
+
);
|
|
4045
|
+
}
|
|
4046
|
+
function InputGroupInput({
|
|
4047
|
+
className,
|
|
4048
|
+
...props
|
|
4049
|
+
}) {
|
|
4050
|
+
return /* @__PURE__ */ jsx(
|
|
4051
|
+
Input,
|
|
4052
|
+
{
|
|
4053
|
+
"data-slot": "input-group-control",
|
|
4054
|
+
className: cn(
|
|
4055
|
+
"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
|
|
4056
|
+
className
|
|
4057
|
+
),
|
|
4058
|
+
...props
|
|
4059
|
+
}
|
|
4060
|
+
);
|
|
4061
|
+
}
|
|
4062
|
+
function InputGroupTextarea({
|
|
4063
|
+
className,
|
|
4064
|
+
...props
|
|
4065
|
+
}) {
|
|
4066
|
+
return /* @__PURE__ */ jsx(
|
|
4067
|
+
Textarea,
|
|
4068
|
+
{
|
|
4069
|
+
"data-slot": "input-group-control",
|
|
4070
|
+
className: cn(
|
|
4071
|
+
"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
|
|
4072
|
+
className
|
|
4073
|
+
),
|
|
4074
|
+
...props
|
|
4075
|
+
}
|
|
4076
|
+
);
|
|
4077
|
+
}
|
|
4078
|
+
var CalendarIcon = ({
|
|
4079
|
+
className = "",
|
|
4080
|
+
...props
|
|
4081
|
+
}) => {
|
|
4082
|
+
return /* @__PURE__ */ jsxs(
|
|
4083
|
+
"svg",
|
|
4084
|
+
{
|
|
4085
|
+
className,
|
|
4086
|
+
width: "16",
|
|
4087
|
+
height: "16",
|
|
4088
|
+
viewBox: "0 0 24 24",
|
|
4089
|
+
fill: "none",
|
|
4090
|
+
stroke: "currentColor",
|
|
4091
|
+
strokeWidth: "2",
|
|
4092
|
+
strokeLinecap: "round",
|
|
4093
|
+
strokeLinejoin: "round",
|
|
4094
|
+
...props,
|
|
4095
|
+
children: [
|
|
4096
|
+
/* @__PURE__ */ jsx("path", { d: "M8 2v4" }),
|
|
4097
|
+
/* @__PURE__ */ jsx("path", { d: "M16 2v4" }),
|
|
4098
|
+
/* @__PURE__ */ jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
|
|
4099
|
+
/* @__PURE__ */ jsx("path", { d: "M3 10h18" })
|
|
4100
|
+
]
|
|
4101
|
+
}
|
|
4102
|
+
);
|
|
4103
|
+
};
|
|
4104
|
+
var DatePickerContext = React24.createContext(null);
|
|
4105
|
+
function useDatePickerContext() {
|
|
4106
|
+
const context = React24.useContext(DatePickerContext);
|
|
4107
|
+
if (!context) {
|
|
4108
|
+
throw new Error("DatePicker components must be used within a DatePicker");
|
|
4109
|
+
}
|
|
4110
|
+
return context;
|
|
4111
|
+
}
|
|
4112
|
+
function defaultFormatDate(date) {
|
|
4113
|
+
return format(date, "PPP");
|
|
4114
|
+
}
|
|
4115
|
+
function DatePicker({
|
|
4116
|
+
children,
|
|
4117
|
+
date: controlledDate,
|
|
4118
|
+
onDateChange,
|
|
4119
|
+
defaultDate,
|
|
4120
|
+
open: controlledOpen,
|
|
4121
|
+
onOpenChange,
|
|
4122
|
+
defaultOpen = false,
|
|
4123
|
+
formatDate: formatDateProp = defaultFormatDate
|
|
4124
|
+
}) {
|
|
4125
|
+
const [uncontrolledDate, setUncontrolledDate] = React24.useState(defaultDate);
|
|
4126
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React24.useState(defaultOpen);
|
|
4127
|
+
const isDateControlled = controlledDate !== void 0;
|
|
4128
|
+
const isOpenControlled = controlledOpen !== void 0;
|
|
4129
|
+
const date = isDateControlled ? controlledDate : uncontrolledDate;
|
|
4130
|
+
const open = isOpenControlled ? controlledOpen : uncontrolledOpen;
|
|
4131
|
+
const setDate = React24.useCallback((newDate) => {
|
|
4132
|
+
if (!isDateControlled) {
|
|
4133
|
+
setUncontrolledDate(newDate);
|
|
4134
|
+
}
|
|
4135
|
+
onDateChange?.(newDate);
|
|
4136
|
+
}, [isDateControlled, onDateChange]);
|
|
4137
|
+
const setOpen = React24.useCallback((newOpen) => {
|
|
4138
|
+
if (!isOpenControlled) {
|
|
4139
|
+
setUncontrolledOpen(newOpen);
|
|
4140
|
+
}
|
|
4141
|
+
onOpenChange?.(newOpen);
|
|
4142
|
+
}, [isOpenControlled, onOpenChange]);
|
|
4143
|
+
const contextValue = React24.useMemo(() => ({
|
|
4144
|
+
date,
|
|
4145
|
+
setDate,
|
|
4146
|
+
open,
|
|
4147
|
+
setOpen,
|
|
4148
|
+
formatDate: formatDateProp
|
|
4149
|
+
}), [date, setDate, open, setOpen, formatDateProp]);
|
|
4150
|
+
return /* @__PURE__ */ jsx(DatePickerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(Popover, { open, onOpenChange: setOpen, children }) });
|
|
4151
|
+
}
|
|
4152
|
+
function DatePickerTrigger({
|
|
4153
|
+
className,
|
|
4154
|
+
placeholder = "Pick a date",
|
|
4155
|
+
icon = "calendar",
|
|
4156
|
+
children,
|
|
4157
|
+
...props
|
|
4158
|
+
}) {
|
|
4159
|
+
const { date, formatDate } = useDatePickerContext();
|
|
4160
|
+
return /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
4161
|
+
Button,
|
|
4162
|
+
{
|
|
4163
|
+
variant: ButtonVariant.Outline,
|
|
4164
|
+
"data-slot": "date-picker-trigger",
|
|
4165
|
+
"data-empty": !date,
|
|
4166
|
+
className: cn(
|
|
4167
|
+
"w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",
|
|
4168
|
+
className
|
|
4169
|
+
),
|
|
4170
|
+
...props,
|
|
4171
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4172
|
+
icon === "calendar" && /* @__PURE__ */ jsx(CalendarIcon, { className: "mr-2 size-4" }),
|
|
4173
|
+
date ? formatDate(date) : /* @__PURE__ */ jsx("span", { children: placeholder }),
|
|
4174
|
+
icon === "chevron" && /* @__PURE__ */ jsx(ChevronDownIcon, { className: "ml-auto size-4" })
|
|
4175
|
+
] })
|
|
4176
|
+
}
|
|
4177
|
+
) });
|
|
4178
|
+
}
|
|
4179
|
+
function DatePickerContent({
|
|
4180
|
+
className,
|
|
4181
|
+
calendarProps,
|
|
4182
|
+
children,
|
|
4183
|
+
align = "start",
|
|
4184
|
+
...props
|
|
4185
|
+
}) {
|
|
4186
|
+
const { date, setDate, setOpen } = useDatePickerContext();
|
|
4187
|
+
return /* @__PURE__ */ jsx(
|
|
4188
|
+
PopoverContent,
|
|
4189
|
+
{
|
|
4190
|
+
"data-slot": "date-picker-content",
|
|
4191
|
+
className: cn("w-auto overflow-hidden p-0", className),
|
|
4192
|
+
align,
|
|
4193
|
+
...props,
|
|
4194
|
+
children: children ?? /* @__PURE__ */ jsx(
|
|
4195
|
+
Calendar,
|
|
4196
|
+
{
|
|
4197
|
+
mode: "single",
|
|
4198
|
+
selected: date,
|
|
4199
|
+
onSelect: (newDate) => {
|
|
4200
|
+
setDate(newDate);
|
|
4201
|
+
setOpen(false);
|
|
4202
|
+
},
|
|
4203
|
+
...calendarProps
|
|
4204
|
+
}
|
|
4205
|
+
)
|
|
4206
|
+
}
|
|
4207
|
+
);
|
|
4208
|
+
}
|
|
4209
|
+
function DatePickerInput({
|
|
4210
|
+
className,
|
|
4211
|
+
inputProps,
|
|
4212
|
+
placeholder = "Select date",
|
|
4213
|
+
id
|
|
4214
|
+
}) {
|
|
4215
|
+
const { date, setDate, setOpen, formatDate } = useDatePickerContext();
|
|
4216
|
+
const [inputValue, setInputValue] = React24.useState(date ? formatDate(date) : "");
|
|
4217
|
+
const [month, setMonth] = React24.useState(date);
|
|
4218
|
+
React24.useEffect(() => {
|
|
4219
|
+
setInputValue(date ? formatDate(date) : "");
|
|
4220
|
+
}, [date, formatDate]);
|
|
4221
|
+
const handleInputChange = (e) => {
|
|
4222
|
+
const value = e.target.value;
|
|
4223
|
+
setInputValue(value);
|
|
4224
|
+
const parsed = new Date(value);
|
|
4225
|
+
if (!isNaN(parsed.getTime())) {
|
|
4226
|
+
setDate(parsed);
|
|
4227
|
+
setMonth(parsed);
|
|
4228
|
+
}
|
|
4229
|
+
};
|
|
4230
|
+
const handleKeyDown = (e) => {
|
|
4231
|
+
if (e.key === "ArrowDown") {
|
|
4232
|
+
e.preventDefault();
|
|
4233
|
+
setOpen(true);
|
|
4234
|
+
}
|
|
4235
|
+
};
|
|
4236
|
+
const handleCalendarSelect = (newDate) => {
|
|
4237
|
+
setDate(newDate);
|
|
4238
|
+
setInputValue(newDate ? formatDate(newDate) : "");
|
|
4239
|
+
setOpen(false);
|
|
4240
|
+
};
|
|
4241
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("relative flex gap-2", className), "data-slot": "date-picker-input", children: [
|
|
4242
|
+
/* @__PURE__ */ jsx(
|
|
4243
|
+
Input,
|
|
4244
|
+
{
|
|
4245
|
+
id,
|
|
4246
|
+
value: inputValue,
|
|
4247
|
+
placeholder,
|
|
4248
|
+
className: "bg-background pr-10",
|
|
4249
|
+
onChange: handleInputChange,
|
|
4250
|
+
onKeyDown: handleKeyDown,
|
|
4251
|
+
...inputProps
|
|
4252
|
+
}
|
|
4253
|
+
),
|
|
4254
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
4255
|
+
Button,
|
|
4256
|
+
{
|
|
4257
|
+
variant: ButtonVariant.Ghost,
|
|
4258
|
+
className: "absolute top-1/2 right-2 size-6 -translate-y-1/2 p-0",
|
|
4259
|
+
"aria-label": "Select date",
|
|
4260
|
+
children: /* @__PURE__ */ jsx(CalendarIcon, { className: "size-3.5" })
|
|
4261
|
+
}
|
|
4262
|
+
) }),
|
|
4263
|
+
/* @__PURE__ */ jsx(
|
|
4264
|
+
PopoverContent,
|
|
4265
|
+
{
|
|
4266
|
+
className: "w-auto overflow-hidden p-0",
|
|
4267
|
+
align: "end",
|
|
4268
|
+
alignOffset: -8,
|
|
4269
|
+
sideOffset: 10,
|
|
4270
|
+
children: /* @__PURE__ */ jsx(
|
|
4271
|
+
Calendar,
|
|
4272
|
+
{
|
|
4273
|
+
mode: "single",
|
|
4274
|
+
selected: date,
|
|
4275
|
+
captionLayout: "dropdown",
|
|
4276
|
+
month,
|
|
4277
|
+
onMonthChange: setMonth,
|
|
4278
|
+
onSelect: handleCalendarSelect
|
|
4279
|
+
}
|
|
4280
|
+
)
|
|
4281
|
+
}
|
|
4282
|
+
)
|
|
4283
|
+
] });
|
|
4284
|
+
}
|
|
4285
|
+
var Sidebar = React24.forwardRef(({ collapsed = false, className, children, ...props }, ref) => {
|
|
4286
|
+
return /* @__PURE__ */ jsx(
|
|
4287
|
+
"aside",
|
|
4288
|
+
{
|
|
4289
|
+
ref,
|
|
4290
|
+
"data-state": collapsed ? "collapsed" : "expanded",
|
|
4291
|
+
"data-collapsible": collapsed ? "icon" : "",
|
|
4292
|
+
className: cn(
|
|
4293
|
+
"group flex flex-col border-r border-mainMenu-border transition-[width] duration-200 ease-linear",
|
|
4294
|
+
"bg-mainMenu text-mainMenu-foreground",
|
|
4295
|
+
collapsed ? "w-14" : "w-64",
|
|
4296
|
+
className
|
|
4297
|
+
),
|
|
4298
|
+
...props,
|
|
4299
|
+
children
|
|
4300
|
+
}
|
|
4301
|
+
);
|
|
4302
|
+
});
|
|
4303
|
+
Sidebar.displayName = "Sidebar";
|
|
4304
|
+
var SidebarContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4305
|
+
"div",
|
|
4306
|
+
{
|
|
4307
|
+
ref,
|
|
4308
|
+
"data-sidebar": "content",
|
|
4309
|
+
className: cn(
|
|
4310
|
+
// HAI3 customization: gap and padding use rem-based spacing for theme scaling
|
|
4311
|
+
"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden p-2",
|
|
4312
|
+
className
|
|
4313
|
+
),
|
|
4314
|
+
...props
|
|
4315
|
+
}
|
|
4316
|
+
));
|
|
4317
|
+
SidebarContent.displayName = "SidebarContent";
|
|
4318
|
+
var SidebarMenu = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4319
|
+
"ul",
|
|
4320
|
+
{
|
|
4321
|
+
ref,
|
|
4322
|
+
"data-sidebar": "menu",
|
|
4323
|
+
className: cn("flex w-full min-w-0 flex-col gap-1", className),
|
|
4324
|
+
...props
|
|
4325
|
+
}
|
|
4326
|
+
));
|
|
4327
|
+
SidebarMenu.displayName = "SidebarMenu";
|
|
4328
|
+
var SidebarMenuItem = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4329
|
+
"li",
|
|
4330
|
+
{
|
|
4331
|
+
ref,
|
|
4332
|
+
"data-sidebar": "menu-item",
|
|
4333
|
+
className: cn("group/menu-item relative", className),
|
|
4334
|
+
...props
|
|
4335
|
+
}
|
|
4336
|
+
));
|
|
4337
|
+
SidebarMenuItem.displayName = "SidebarMenuItem";
|
|
4338
|
+
var sidebarMenuButtonVariants = cva(
|
|
4339
|
+
// HAI3 customization: All sizing uses rem-based Tailwind classes for theme responsiveness
|
|
4340
|
+
"peer/menu-button flex w-full items-center gap-2 rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>span:last-child]:overflow-hidden [&>svg]:size-5 [&>svg]:shrink-0 text-mainMenu-foreground hover:bg-mainMenu-hover data-[active=true]:bg-mainMenu-selected data-[active=true]:text-white data-[active=true]:font-medium",
|
|
4341
|
+
{
|
|
4342
|
+
variants: {
|
|
4343
|
+
variant: {
|
|
4344
|
+
default: "",
|
|
4345
|
+
outline: "bg-background shadow-[0_0_0_1px_hsl(var(--border))] hover:bg-mainMenu-hover"
|
|
4346
|
+
},
|
|
4347
|
+
size: {
|
|
4348
|
+
// HAI3 customization: All heights use rem-based Tailwind classes (h-10=2.5rem, h-7=1.75rem, h-12=3rem)
|
|
4349
|
+
default: "h-10 text-sm",
|
|
4350
|
+
sm: "h-7 text-xs",
|
|
4351
|
+
lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0"
|
|
4352
|
+
}
|
|
4353
|
+
},
|
|
4354
|
+
defaultVariants: {
|
|
4355
|
+
variant: "default",
|
|
4356
|
+
size: "default"
|
|
4357
|
+
}
|
|
4358
|
+
}
|
|
4359
|
+
);
|
|
4360
|
+
var SidebarMenuButton = React24.forwardRef(
|
|
4361
|
+
({
|
|
4362
|
+
asChild = false,
|
|
4363
|
+
isActive = false,
|
|
4364
|
+
variant = "default",
|
|
4365
|
+
size = "default",
|
|
4366
|
+
tooltip,
|
|
4367
|
+
className,
|
|
4368
|
+
...props
|
|
4369
|
+
}, ref) => {
|
|
4370
|
+
const Comp = asChild ? Slot : "button";
|
|
4371
|
+
return /* @__PURE__ */ jsx(
|
|
4372
|
+
Comp,
|
|
4373
|
+
{
|
|
4374
|
+
ref,
|
|
4375
|
+
"data-sidebar": "menu-button",
|
|
4376
|
+
"data-size": size,
|
|
4377
|
+
"data-active": isActive,
|
|
4378
|
+
title: tooltip,
|
|
4379
|
+
className: cn(sidebarMenuButtonVariants({ variant, size }), className),
|
|
4380
|
+
...props
|
|
4381
|
+
}
|
|
4382
|
+
);
|
|
4383
|
+
}
|
|
4384
|
+
);
|
|
4385
|
+
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
4386
|
+
var SidebarMenuIcon = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4387
|
+
"span",
|
|
4388
|
+
{
|
|
4389
|
+
ref,
|
|
4390
|
+
className: cn("size-5 min-w-[1.5rem] flex-shrink-0 [&>svg]:w-full [&>svg]:h-full", className),
|
|
4391
|
+
...props
|
|
4392
|
+
}
|
|
4393
|
+
));
|
|
4394
|
+
SidebarMenuIcon.displayName = "SidebarMenuIcon";
|
|
4395
|
+
var SidebarMenuLabel = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4396
|
+
"span",
|
|
4397
|
+
{
|
|
4398
|
+
ref,
|
|
4399
|
+
className: cn(className),
|
|
4400
|
+
...props
|
|
4401
|
+
}
|
|
4402
|
+
));
|
|
4403
|
+
SidebarMenuLabel.displayName = "SidebarMenuLabel";
|
|
4404
|
+
var SidebarHeader = React24.forwardRef(
|
|
4405
|
+
({ logo, logoText, collapsed = false, onClick, className, ...props }, ref) => {
|
|
4406
|
+
return /* @__PURE__ */ jsxs(
|
|
4407
|
+
"div",
|
|
4408
|
+
{
|
|
4409
|
+
ref,
|
|
4410
|
+
className: cn(
|
|
4411
|
+
"flex flex-col h-16",
|
|
4412
|
+
className
|
|
4413
|
+
),
|
|
4414
|
+
...props,
|
|
4415
|
+
children: [
|
|
4416
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center flex-1 px-2", children: /* @__PURE__ */ jsxs(SidebarMenuButton, { onClick, tooltip: collapsed ? "Expand menu" : "Collapse menu", children: [
|
|
4417
|
+
logo && /* @__PURE__ */ jsx(SidebarMenuIcon, { children: logo }),
|
|
4418
|
+
logoText && /* @__PURE__ */ jsx(SidebarMenuLabel, { className: "[&>svg]:h-5 [&>svg]:w-auto", children: logoText })
|
|
4419
|
+
] }) }),
|
|
4420
|
+
/* @__PURE__ */ jsx("div", { className: "border-b border-mainMenu-border mx-4" })
|
|
4421
|
+
]
|
|
4422
|
+
}
|
|
4423
|
+
);
|
|
4424
|
+
}
|
|
4425
|
+
);
|
|
4426
|
+
SidebarHeader.displayName = "SidebarHeader";
|
|
4427
|
+
var UserInfo = React24__default.forwardRef(
|
|
4428
|
+
({ displayName, email, avatarUrl, className, loading }, ref) => {
|
|
4429
|
+
const getInitials = () => {
|
|
4430
|
+
if (!displayName) return toUpper(email?.[0] || "") || "?";
|
|
4431
|
+
const parts = trim(displayName).split(/\s+/);
|
|
4432
|
+
if (parts.length >= 2) {
|
|
4433
|
+
return toUpper(`${parts[0][0]}${parts[parts.length - 1][0]}`);
|
|
4434
|
+
}
|
|
4435
|
+
return toUpper(displayName.slice(0, 2));
|
|
4436
|
+
};
|
|
4437
|
+
const initials = getInitials();
|
|
4438
|
+
const displayText = displayName || email || "User";
|
|
4439
|
+
if (loading) {
|
|
4440
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-center gap-2 text-sm", className), children: [
|
|
4441
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-full" }),
|
|
4442
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
|
|
4443
|
+
] });
|
|
4444
|
+
}
|
|
4445
|
+
return /* @__PURE__ */ jsxs(
|
|
4446
|
+
"div",
|
|
4447
|
+
{
|
|
4448
|
+
ref,
|
|
4449
|
+
className: cn(
|
|
4450
|
+
"flex items-center gap-2 text-sm text-muted-foreground",
|
|
4451
|
+
className
|
|
4452
|
+
),
|
|
4453
|
+
children: [
|
|
4454
|
+
/* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8", children: [
|
|
4455
|
+
avatarUrl && /* @__PURE__ */ jsx(AvatarImage, { src: avatarUrl, alt: displayText }),
|
|
4456
|
+
/* @__PURE__ */ jsx(AvatarFallback, { children: initials })
|
|
4457
|
+
] }),
|
|
4458
|
+
/* @__PURE__ */ jsx("span", { children: displayText })
|
|
4459
|
+
]
|
|
4460
|
+
}
|
|
4461
|
+
);
|
|
4462
|
+
}
|
|
4463
|
+
);
|
|
4464
|
+
UserInfo.displayName = "UserInfo";
|
|
4465
|
+
var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
4466
|
+
MessageType2["User"] = "user";
|
|
4467
|
+
MessageType2["Assistant"] = "assistant";
|
|
4468
|
+
return MessageType2;
|
|
4469
|
+
})(MessageType || {});
|
|
4470
|
+
var MessageBubble = ({
|
|
4471
|
+
type,
|
|
4472
|
+
content,
|
|
4473
|
+
className = "",
|
|
4474
|
+
onCopy,
|
|
4475
|
+
onEdit,
|
|
4476
|
+
onDelete
|
|
4477
|
+
}) => {
|
|
4478
|
+
const isUser = type === "user" /* User */;
|
|
4479
|
+
return /* @__PURE__ */ jsxs("div", { className: `flex gap-4 group ${className}`, children: [
|
|
4480
|
+
/* @__PURE__ */ jsx(Avatar, { className: "h-8 w-8 flex-shrink-0", children: /* @__PURE__ */ jsx(
|
|
4481
|
+
AvatarFallback,
|
|
4482
|
+
{
|
|
4483
|
+
className: isUser ? "bg-blue-500 text-white" : "bg-green-500 text-white",
|
|
4484
|
+
children: isUser ? /* @__PURE__ */ jsx(User, { size: 16 }) : /* @__PURE__ */ jsx(Bot, { size: 16 })
|
|
4485
|
+
}
|
|
4486
|
+
) }),
|
|
4487
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4488
|
+
/* @__PURE__ */ jsx("div", { className: "prose prose-sm max-w-none", children: /* @__PURE__ */ jsx("div", { className: "leading-relaxed whitespace-pre-wrap", children: content }) }),
|
|
4489
|
+
(onCopy || onEdit || onDelete) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 mt-2 opacity-0 group-hover:opacity-100 transition-opacity", children: [
|
|
4490
|
+
onCopy && /* @__PURE__ */ jsx(
|
|
4491
|
+
"button",
|
|
4492
|
+
{
|
|
4493
|
+
onClick: onCopy,
|
|
4494
|
+
className: "p-1.5 hover:bg-muted rounded-lg transition-colors text-muted-foreground hover:text-foreground",
|
|
4495
|
+
title: "Copy message",
|
|
4496
|
+
children: /* @__PURE__ */ jsxs(
|
|
4497
|
+
"svg",
|
|
4498
|
+
{
|
|
4499
|
+
width: "14",
|
|
4500
|
+
height: "14",
|
|
4501
|
+
viewBox: "0 0 24 24",
|
|
4502
|
+
fill: "none",
|
|
4503
|
+
stroke: "currentColor",
|
|
4504
|
+
strokeWidth: "2",
|
|
4505
|
+
strokeLinecap: "round",
|
|
4506
|
+
strokeLinejoin: "round",
|
|
4507
|
+
children: [
|
|
4508
|
+
/* @__PURE__ */ jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }),
|
|
4509
|
+
/* @__PURE__ */ jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
|
|
4510
|
+
]
|
|
4511
|
+
}
|
|
4512
|
+
)
|
|
4513
|
+
}
|
|
4514
|
+
),
|
|
4515
|
+
onEdit && /* @__PURE__ */ jsx(
|
|
4516
|
+
"button",
|
|
4517
|
+
{
|
|
4518
|
+
onClick: onEdit,
|
|
4519
|
+
className: "p-1.5 hover:bg-muted rounded-lg transition-colors text-muted-foreground hover:text-foreground",
|
|
4520
|
+
title: "Edit message",
|
|
4521
|
+
children: /* @__PURE__ */ jsxs(
|
|
4522
|
+
"svg",
|
|
4523
|
+
{
|
|
4524
|
+
width: "14",
|
|
4525
|
+
height: "14",
|
|
4526
|
+
viewBox: "0 0 24 24",
|
|
4527
|
+
fill: "none",
|
|
4528
|
+
stroke: "currentColor",
|
|
4529
|
+
strokeWidth: "2",
|
|
4530
|
+
strokeLinecap: "round",
|
|
4531
|
+
strokeLinejoin: "round",
|
|
4532
|
+
children: [
|
|
4533
|
+
/* @__PURE__ */ jsx("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
|
|
4534
|
+
/* @__PURE__ */ jsx("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
|
|
4535
|
+
]
|
|
4536
|
+
}
|
|
4537
|
+
)
|
|
4538
|
+
}
|
|
4539
|
+
),
|
|
4540
|
+
onDelete && /* @__PURE__ */ jsx(
|
|
4541
|
+
"button",
|
|
4542
|
+
{
|
|
4543
|
+
onClick: onDelete,
|
|
4544
|
+
className: "p-1.5 hover:bg-destructive/10 rounded-lg transition-colors text-muted-foreground hover:text-destructive",
|
|
4545
|
+
title: "Delete message",
|
|
4546
|
+
children: /* @__PURE__ */ jsxs(
|
|
4547
|
+
"svg",
|
|
4548
|
+
{
|
|
4549
|
+
width: "14",
|
|
4550
|
+
height: "14",
|
|
4551
|
+
viewBox: "0 0 24 24",
|
|
4552
|
+
fill: "none",
|
|
4553
|
+
stroke: "currentColor",
|
|
4554
|
+
strokeWidth: "2",
|
|
4555
|
+
strokeLinecap: "round",
|
|
4556
|
+
strokeLinejoin: "round",
|
|
4557
|
+
children: [
|
|
4558
|
+
/* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
|
|
4559
|
+
/* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
|
|
4560
|
+
]
|
|
4561
|
+
}
|
|
4562
|
+
)
|
|
4563
|
+
}
|
|
4564
|
+
)
|
|
4565
|
+
] })
|
|
4566
|
+
] })
|
|
4567
|
+
] });
|
|
4568
|
+
};
|
|
4569
|
+
var ChatInput = ({
|
|
4570
|
+
value,
|
|
4571
|
+
onChange,
|
|
4572
|
+
onSend,
|
|
4573
|
+
onAttachFile,
|
|
4574
|
+
placeholder = "Type a message...",
|
|
4575
|
+
disabled = false,
|
|
4576
|
+
maxRows = 14,
|
|
4577
|
+
className = ""
|
|
4578
|
+
}) => {
|
|
4579
|
+
const handleKeyDown = (e) => {
|
|
4580
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
4581
|
+
e.preventDefault();
|
|
4582
|
+
if (!disabled && trim(value)) {
|
|
4583
|
+
onSend();
|
|
4584
|
+
}
|
|
4585
|
+
}
|
|
4586
|
+
};
|
|
4587
|
+
const rows = Math.min(
|
|
4588
|
+
Math.max(value.split("\n").length, 1),
|
|
4589
|
+
maxRows
|
|
4590
|
+
);
|
|
4591
|
+
return /* @__PURE__ */ jsxs("div", { className: `flex items-end gap-2 ${className}`, children: [
|
|
4592
|
+
onAttachFile && /* @__PURE__ */ jsx(
|
|
4593
|
+
Button,
|
|
4594
|
+
{
|
|
4595
|
+
variant: ButtonVariant.Ghost,
|
|
4596
|
+
size: ButtonSize.Icon,
|
|
4597
|
+
onClick: onAttachFile,
|
|
4598
|
+
disabled,
|
|
4599
|
+
className: "flex-shrink-0",
|
|
4600
|
+
"aria-label": "Attach file",
|
|
4601
|
+
children: /* @__PURE__ */ jsx(Paperclip, { size: 20 })
|
|
4602
|
+
}
|
|
4603
|
+
),
|
|
4604
|
+
/* @__PURE__ */ jsx(
|
|
4605
|
+
"textarea",
|
|
4606
|
+
{
|
|
4607
|
+
value,
|
|
4608
|
+
onChange: (e) => onChange(e.target.value),
|
|
4609
|
+
onKeyDown: handleKeyDown,
|
|
4610
|
+
placeholder,
|
|
4611
|
+
disabled,
|
|
4612
|
+
rows,
|
|
4613
|
+
className: "flex-1 resize-none rounded-lg border border-input bg-background px-3 py-2 text-sm 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"
|
|
4614
|
+
}
|
|
4615
|
+
),
|
|
4616
|
+
/* @__PURE__ */ jsx(
|
|
4617
|
+
Button,
|
|
4618
|
+
{
|
|
4619
|
+
onClick: onSend,
|
|
4620
|
+
disabled: disabled || !trim(value),
|
|
4621
|
+
className: "flex-shrink-0",
|
|
4622
|
+
"aria-label": "Send message",
|
|
4623
|
+
children: /* @__PURE__ */ jsx(Send, { size: 20 })
|
|
4624
|
+
}
|
|
4625
|
+
)
|
|
4626
|
+
] });
|
|
4627
|
+
};
|
|
4628
|
+
var ThreadList = ({
|
|
4629
|
+
threads,
|
|
4630
|
+
selectedThreadId,
|
|
4631
|
+
onThreadSelect,
|
|
4632
|
+
onNewThread,
|
|
4633
|
+
onDeleteThread,
|
|
4634
|
+
searchQuery = "",
|
|
4635
|
+
onSearchChange,
|
|
4636
|
+
loading = false,
|
|
4637
|
+
className = ""
|
|
4638
|
+
}) => {
|
|
4639
|
+
if (loading) {
|
|
4640
|
+
return /* @__PURE__ */ jsxs("div", { className: `flex flex-col h-full ${className}`, children: [
|
|
4641
|
+
/* @__PURE__ */ jsxs("div", { className: "p-4 border-b", children: [
|
|
4642
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-full mb-3" }),
|
|
4643
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" })
|
|
4644
|
+
] }),
|
|
4645
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto p-2", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-16 w-full mb-2" }, i)) })
|
|
4646
|
+
] });
|
|
4647
|
+
}
|
|
4648
|
+
return /* @__PURE__ */ jsxs("div", { className: `flex flex-col h-full ${className}`, children: [
|
|
4649
|
+
/* @__PURE__ */ jsxs("div", { className: "p-4 border-b", children: [
|
|
4650
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
|
|
4651
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: "Recent Chats" }),
|
|
4652
|
+
/* @__PURE__ */ jsx(
|
|
4653
|
+
Button,
|
|
4654
|
+
{
|
|
4655
|
+
variant: ButtonVariant.Ghost,
|
|
4656
|
+
size: ButtonSize.Icon,
|
|
4657
|
+
onClick: onNewThread,
|
|
4658
|
+
"aria-label": "New chat",
|
|
4659
|
+
children: /* @__PURE__ */ jsx(Plus, { size: 16 })
|
|
4660
|
+
}
|
|
4661
|
+
)
|
|
4662
|
+
] }),
|
|
4663
|
+
onSearchChange && /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
4664
|
+
/* @__PURE__ */ jsx(
|
|
4665
|
+
Search,
|
|
4666
|
+
{
|
|
4667
|
+
size: 16,
|
|
4668
|
+
className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground"
|
|
4669
|
+
}
|
|
4670
|
+
),
|
|
4671
|
+
/* @__PURE__ */ jsx(
|
|
4672
|
+
"input",
|
|
4673
|
+
{
|
|
4674
|
+
type: "text",
|
|
4675
|
+
placeholder: "Search chats...",
|
|
4676
|
+
value: searchQuery,
|
|
4677
|
+
onChange: (e) => onSearchChange(e.target.value),
|
|
4678
|
+
className: "w-full pl-9 pr-3 py-2 border border-input rounded-lg text-sm bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
4679
|
+
}
|
|
4680
|
+
)
|
|
4681
|
+
] })
|
|
4682
|
+
] }),
|
|
4683
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: threads.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted-foreground text-sm", children: "No chats yet. Start a new conversation!" }) : threads.map((thread) => /* @__PURE__ */ jsx(
|
|
4684
|
+
"div",
|
|
4685
|
+
{
|
|
4686
|
+
onClick: () => onThreadSelect(thread.id),
|
|
4687
|
+
className: `p-3 border-b cursor-pointer transition-colors hover:bg-muted/50 ${selectedThreadId === thread.id ? "bg-muted" : ""}`,
|
|
4688
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
|
|
4689
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4690
|
+
/* @__PURE__ */ jsxs("h3", { className: "font-medium text-sm truncate mb-1", children: [
|
|
4691
|
+
thread.title,
|
|
4692
|
+
thread.isTemporary && /* @__PURE__ */ jsx("span", { className: "ml-2 text-xs text-muted-foreground", children: "(Temporary)" })
|
|
4693
|
+
] }),
|
|
4694
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate", children: thread.preview })
|
|
4695
|
+
] }),
|
|
4696
|
+
onDeleteThread && /* @__PURE__ */ jsx(
|
|
4697
|
+
"button",
|
|
4698
|
+
{
|
|
4699
|
+
onClick: (e) => {
|
|
4700
|
+
e.stopPropagation();
|
|
4701
|
+
onDeleteThread(thread.id);
|
|
4702
|
+
},
|
|
4703
|
+
className: "p-1 opacity-0 group-hover:opacity-100 hover:bg-destructive/10 rounded transition-opacity text-muted-foreground hover:text-destructive",
|
|
4704
|
+
"aria-label": "Delete thread",
|
|
4705
|
+
children: /* @__PURE__ */ jsxs(
|
|
4706
|
+
"svg",
|
|
4707
|
+
{
|
|
4708
|
+
width: "14",
|
|
4709
|
+
height: "14",
|
|
4710
|
+
viewBox: "0 0 24 24",
|
|
4711
|
+
fill: "none",
|
|
4712
|
+
stroke: "currentColor",
|
|
4713
|
+
strokeWidth: "2",
|
|
4714
|
+
strokeLinecap: "round",
|
|
4715
|
+
strokeLinejoin: "round",
|
|
4716
|
+
children: [
|
|
4717
|
+
/* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
|
|
4718
|
+
/* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
|
|
4719
|
+
]
|
|
4720
|
+
}
|
|
4721
|
+
)
|
|
4722
|
+
}
|
|
4723
|
+
)
|
|
4724
|
+
] })
|
|
4725
|
+
},
|
|
4726
|
+
thread.id
|
|
4727
|
+
)) })
|
|
4728
|
+
] });
|
|
4729
|
+
};
|
|
4730
|
+
var MENU_ICON_ID = "menu";
|
|
4731
|
+
var MenuIcon = ({ className = "" }) => {
|
|
4732
|
+
return /* @__PURE__ */ jsxs(
|
|
4733
|
+
"svg",
|
|
4734
|
+
{
|
|
4735
|
+
className,
|
|
4736
|
+
width: "20",
|
|
4737
|
+
height: "20",
|
|
4738
|
+
viewBox: "0 0 24 24",
|
|
4739
|
+
fill: "none",
|
|
4740
|
+
stroke: "currentColor",
|
|
4741
|
+
strokeWidth: "2",
|
|
4742
|
+
strokeLinecap: "round",
|
|
4743
|
+
strokeLinejoin: "round",
|
|
4744
|
+
children: [
|
|
4745
|
+
/* @__PURE__ */ jsx("line", { x1: "3", y1: "12", x2: "21", y2: "12" }),
|
|
4746
|
+
/* @__PURE__ */ jsx("line", { x1: "3", y1: "6", x2: "21", y2: "6" }),
|
|
4747
|
+
/* @__PURE__ */ jsx("line", { x1: "3", y1: "18", x2: "21", y2: "18" })
|
|
4748
|
+
]
|
|
4749
|
+
}
|
|
4750
|
+
);
|
|
4751
|
+
};
|
|
4752
|
+
var CLOSE_ICON_ID = "close";
|
|
4753
|
+
var CloseIcon = ({ className = "" }) => {
|
|
4754
|
+
return /* @__PURE__ */ jsxs(
|
|
4755
|
+
"svg",
|
|
4756
|
+
{
|
|
4757
|
+
className,
|
|
4758
|
+
width: "20",
|
|
4759
|
+
height: "20",
|
|
4760
|
+
viewBox: "0 0 24 24",
|
|
4761
|
+
fill: "none",
|
|
4762
|
+
stroke: "currentColor",
|
|
4763
|
+
strokeWidth: "2",
|
|
4764
|
+
strokeLinecap: "round",
|
|
4765
|
+
strokeLinejoin: "round",
|
|
4766
|
+
children: [
|
|
4767
|
+
/* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
4768
|
+
/* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
4769
|
+
]
|
|
4770
|
+
}
|
|
4771
|
+
);
|
|
4772
|
+
};
|
|
4773
|
+
|
|
4774
|
+
// src/styles/applyTheme.ts
|
|
4775
|
+
var hslToVar = (color) => {
|
|
4776
|
+
if (color === "transparent") {
|
|
4777
|
+
return "transparent";
|
|
4778
|
+
}
|
|
4779
|
+
if (color.startsWith("hsl(")) {
|
|
4780
|
+
return color.replace("hsl(", "").replace(")", "");
|
|
4781
|
+
}
|
|
4782
|
+
return color;
|
|
4783
|
+
};
|
|
4784
|
+
var applyTheme = (theme, themeName) => {
|
|
4785
|
+
const root = document.documentElement;
|
|
4786
|
+
if (themeName) {
|
|
4787
|
+
root.setAttribute("data-theme", themeName);
|
|
4788
|
+
}
|
|
4789
|
+
root.style.setProperty("--background", hslToVar(theme.colors.background));
|
|
4790
|
+
root.style.setProperty("--foreground", hslToVar(theme.colors.foreground));
|
|
4791
|
+
root.style.setProperty("--card", hslToVar(theme.colors.background));
|
|
4792
|
+
root.style.setProperty("--card-foreground", hslToVar(theme.colors.foreground));
|
|
4793
|
+
root.style.setProperty("--popover", hslToVar(theme.colors.background));
|
|
4794
|
+
root.style.setProperty("--popover-foreground", hslToVar(theme.colors.foreground));
|
|
4795
|
+
root.style.setProperty("--primary", hslToVar(theme.colors.primary));
|
|
4796
|
+
root.style.setProperty("--primary-foreground", hslToVar(theme.colors.background));
|
|
4797
|
+
root.style.setProperty("--secondary", hslToVar(theme.colors.secondary));
|
|
4798
|
+
root.style.setProperty("--secondary-foreground", hslToVar(theme.colors.foreground));
|
|
4799
|
+
root.style.setProperty("--muted", hslToVar(theme.colors.muted));
|
|
4800
|
+
root.style.setProperty("--muted-foreground", hslToVar(theme.colors.foreground));
|
|
4801
|
+
root.style.setProperty("--accent", hslToVar(theme.colors.accent));
|
|
4802
|
+
root.style.setProperty("--accent-foreground", hslToVar(theme.colors.background));
|
|
4803
|
+
root.style.setProperty("--destructive", hslToVar(theme.colors.error));
|
|
4804
|
+
root.style.setProperty("--destructive-foreground", hslToVar(theme.colors.foreground));
|
|
4805
|
+
root.style.setProperty("--border", hslToVar(theme.colors.border));
|
|
4806
|
+
root.style.setProperty("--input", hslToVar(theme.colors.border));
|
|
4807
|
+
root.style.setProperty("--ring", hslToVar(theme.colors.primary));
|
|
4808
|
+
root.style.setProperty("--error", hslToVar(theme.colors.error));
|
|
4809
|
+
root.style.setProperty("--warning", hslToVar(theme.colors.warning));
|
|
4810
|
+
root.style.setProperty("--success", hslToVar(theme.colors.success));
|
|
4811
|
+
root.style.setProperty("--info", hslToVar(theme.colors.info));
|
|
4812
|
+
root.style.setProperty("--chart-1", theme.colors.chart[1]);
|
|
4813
|
+
root.style.setProperty("--chart-2", theme.colors.chart[2]);
|
|
4814
|
+
root.style.setProperty("--chart-3", theme.colors.chart[3]);
|
|
4815
|
+
root.style.setProperty("--chart-4", theme.colors.chart[4]);
|
|
4816
|
+
root.style.setProperty("--chart-5", theme.colors.chart[5]);
|
|
4817
|
+
root.style.setProperty("--left-menu", hslToVar(theme.colors.mainMenu.DEFAULT));
|
|
4818
|
+
root.style.setProperty("--left-menu-foreground", hslToVar(theme.colors.mainMenu.foreground));
|
|
4819
|
+
root.style.setProperty("--left-menu-hover", hslToVar(theme.colors.mainMenu.hover));
|
|
4820
|
+
root.style.setProperty("--left-menu-selected", hslToVar(theme.colors.mainMenu.selected));
|
|
4821
|
+
root.style.setProperty("--left-menu-border", hslToVar(theme.colors.mainMenu.border));
|
|
4822
|
+
Object.entries(theme.spacing).forEach(([key, value]) => {
|
|
4823
|
+
root.style.setProperty(`--spacing-${key}`, value);
|
|
4824
|
+
});
|
|
4825
|
+
Object.entries(theme.borderRadius).forEach(([key, value]) => {
|
|
4826
|
+
root.style.setProperty(`--radius-${key}`, value);
|
|
4827
|
+
});
|
|
4828
|
+
Object.entries(theme.shadows).forEach(([key, value]) => {
|
|
4829
|
+
root.style.setProperty(`--shadow-${key}`, value);
|
|
4830
|
+
});
|
|
4831
|
+
Object.entries(theme.transitions).forEach(([key, value]) => {
|
|
4832
|
+
root.style.setProperty(`--transition-${key}`, value);
|
|
4833
|
+
});
|
|
4834
|
+
if (themeName?.endsWith("-large")) {
|
|
4835
|
+
root.style.fontSize = "125%";
|
|
4836
|
+
} else {
|
|
4837
|
+
root.style.fontSize = "";
|
|
4838
|
+
}
|
|
4839
|
+
};
|
|
4840
|
+
|
|
4841
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, CLOSE_ICON_ID, Calendar, CalendarDayButton, CalendarIcon, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegendContent, ChartTooltipContent, ChatInput, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, DatePicker, DatePickerContent, DatePickerInput, DatePickerTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownButton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Header, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item6 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, MENU_ICON_ID, MenuIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MessageBubble, MessageType, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuIcon, SidebarMenuItem, SidebarMenuLabel, Skeleton, Slider, SliderRange, SliderThumb, SliderTrack, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThreadList, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserInfo, alertVariants, applyTheme, badgeVariants, emptyMediaVariants, useFormField };
|
|
4842
|
+
//# sourceMappingURL=index.js.map
|
|
4843
|
+
//# sourceMappingURL=index.js.map
|