@pactor-app/ui 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-OH3U6PCM.js → chunk-BZSRLTQQ.js} +60 -66
- package/dist/{chunk-DMK6RSTK.js → chunk-D6G4J5XS.js} +18 -11
- package/dist/chunk-F3H23KYG.js +330 -0
- package/dist/chunk-FVZMNP5P.js +3222 -0
- package/dist/{chunk-SNFDI77B.js → chunk-GL7IO22L.js} +94 -5
- package/dist/chunk-TUXCPXPA.js +3085 -0
- package/dist/chunk-UR3I4WXQ.js +236 -0
- package/dist/components/index.cjs +5889 -546
- package/dist/components/index.d.cts +1477 -30
- package/dist/components/index.d.ts +1477 -30
- package/dist/components/index.js +124 -4
- package/dist/index.cjs +6194 -1083
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +126 -8
- package/dist/interaction/index.cjs +152 -77
- package/dist/interaction/index.d.cts +7 -5
- package/dist/interaction/index.d.ts +7 -5
- package/dist/interaction/index.js +2 -3
- package/dist/layout/index.cjs +217 -71
- package/dist/layout/index.js +3 -3
- package/dist/typography-DsGdDBc2.d.cts +24 -0
- package/dist/typography-DsGdDBc2.d.ts +24 -0
- package/dist/ui/index.cjs +2969 -172
- package/dist/ui/index.d.cts +416 -14
- package/dist/ui/index.d.ts +416 -14
- package/dist/ui/index.js +330 -126
- package/package.json +13 -5
- package/styles.css +1135 -20
- package/dist/chunk-57NRUZ5G.js +0 -95
- package/dist/chunk-OUTSIJMO.js +0 -442
- package/dist/chunk-QDTVOJ5P.js +0 -147
- package/dist/chunk-QWZ23QLS.js +0 -68
- package/dist/chunk-XGOTHOI6.js +0 -619
|
@@ -0,0 +1,3085 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Button,
|
|
3
|
+
buttonVariants
|
|
4
|
+
} from "./chunk-F3H23KYG.js";
|
|
5
|
+
import {
|
|
6
|
+
Popover,
|
|
7
|
+
PopoverContent,
|
|
8
|
+
PopoverTrigger
|
|
9
|
+
} from "./chunk-GL7IO22L.js";
|
|
10
|
+
import {
|
|
11
|
+
cn
|
|
12
|
+
} from "./chunk-RQHJBTEU.js";
|
|
13
|
+
|
|
14
|
+
// src/ui/alert.tsx
|
|
15
|
+
import { cva } from "class-variance-authority";
|
|
16
|
+
import { jsx } from "react/jsx-runtime";
|
|
17
|
+
var alertVariants = cva(
|
|
18
|
+
"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border border-border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
|
19
|
+
{
|
|
20
|
+
variants: {
|
|
21
|
+
variant: {
|
|
22
|
+
default: "bg-card text-card-foreground",
|
|
23
|
+
destructive: "border-destructive/50 text-destructive bg-card [&>svg]:text-current",
|
|
24
|
+
success: "border-success/50 text-success bg-card [&>svg]:text-current",
|
|
25
|
+
warning: "border-warning/50 text-warning bg-card [&>svg]:text-current",
|
|
26
|
+
info: "border-info/50 text-info bg-card [&>svg]:text-current"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: {
|
|
30
|
+
variant: "default"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
function Alert({
|
|
35
|
+
className,
|
|
36
|
+
variant,
|
|
37
|
+
...props
|
|
38
|
+
}) {
|
|
39
|
+
return /* @__PURE__ */ jsx(
|
|
40
|
+
"div",
|
|
41
|
+
{
|
|
42
|
+
"data-slot": "alert",
|
|
43
|
+
role: "alert",
|
|
44
|
+
className: cn(alertVariants({ variant }), className),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
function AlertTitle({ className, ...props }) {
|
|
50
|
+
return /* @__PURE__ */ jsx(
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
"data-slot": "alert-title",
|
|
54
|
+
className: cn(
|
|
55
|
+
"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
|
|
56
|
+
className
|
|
57
|
+
),
|
|
58
|
+
...props
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
function AlertDescription({
|
|
63
|
+
className,
|
|
64
|
+
...props
|
|
65
|
+
}) {
|
|
66
|
+
return /* @__PURE__ */ jsx(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
"data-slot": "alert-description",
|
|
70
|
+
className: cn(
|
|
71
|
+
"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed",
|
|
72
|
+
className
|
|
73
|
+
),
|
|
74
|
+
...props
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// src/ui/alert-dialog.tsx
|
|
80
|
+
import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog";
|
|
81
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
82
|
+
function AlertDialog({
|
|
83
|
+
...props
|
|
84
|
+
}) {
|
|
85
|
+
return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
86
|
+
}
|
|
87
|
+
function AlertDialogTrigger({
|
|
88
|
+
...props
|
|
89
|
+
}) {
|
|
90
|
+
return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
|
|
91
|
+
}
|
|
92
|
+
function AlertDialogPortal({
|
|
93
|
+
...props
|
|
94
|
+
}) {
|
|
95
|
+
return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
96
|
+
}
|
|
97
|
+
function AlertDialogOverlay({
|
|
98
|
+
className,
|
|
99
|
+
...props
|
|
100
|
+
}) {
|
|
101
|
+
return /* @__PURE__ */ jsx2(
|
|
102
|
+
AlertDialogPrimitive.Backdrop,
|
|
103
|
+
{
|
|
104
|
+
"data-slot": "alert-dialog-overlay",
|
|
105
|
+
className: cn(
|
|
106
|
+
"fixed inset-0 z-50 bg-black/50 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
107
|
+
className
|
|
108
|
+
),
|
|
109
|
+
...props
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
function AlertDialogContent({
|
|
114
|
+
className,
|
|
115
|
+
...props
|
|
116
|
+
}) {
|
|
117
|
+
return /* @__PURE__ */ jsxs(AlertDialogPortal, { "data-slot": "alert-dialog-portal", children: [
|
|
118
|
+
/* @__PURE__ */ jsx2(AlertDialogOverlay, {}),
|
|
119
|
+
/* @__PURE__ */ jsx2(
|
|
120
|
+
AlertDialogPrimitive.Popup,
|
|
121
|
+
{
|
|
122
|
+
"data-slot": "alert-dialog-content",
|
|
123
|
+
className: cn(
|
|
124
|
+
"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 border-border bg-background p-6 shadow-lg duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 sm:max-w-lg",
|
|
125
|
+
className
|
|
126
|
+
),
|
|
127
|
+
...props
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
] });
|
|
131
|
+
}
|
|
132
|
+
function AlertDialogHeader({
|
|
133
|
+
className,
|
|
134
|
+
...props
|
|
135
|
+
}) {
|
|
136
|
+
return /* @__PURE__ */ jsx2(
|
|
137
|
+
"div",
|
|
138
|
+
{
|
|
139
|
+
"data-slot": "alert-dialog-header",
|
|
140
|
+
className: cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
141
|
+
...props
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
function AlertDialogFooter({
|
|
146
|
+
className,
|
|
147
|
+
...props
|
|
148
|
+
}) {
|
|
149
|
+
return /* @__PURE__ */ jsx2(
|
|
150
|
+
"div",
|
|
151
|
+
{
|
|
152
|
+
"data-slot": "alert-dialog-footer",
|
|
153
|
+
className: cn(
|
|
154
|
+
"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
|
|
155
|
+
className
|
|
156
|
+
),
|
|
157
|
+
...props
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
function AlertDialogTitle({
|
|
162
|
+
className,
|
|
163
|
+
...props
|
|
164
|
+
}) {
|
|
165
|
+
return /* @__PURE__ */ jsx2(
|
|
166
|
+
AlertDialogPrimitive.Title,
|
|
167
|
+
{
|
|
168
|
+
"data-slot": "alert-dialog-title",
|
|
169
|
+
className: cn("text-lg font-semibold", className),
|
|
170
|
+
...props
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
function AlertDialogDescription({
|
|
175
|
+
className,
|
|
176
|
+
...props
|
|
177
|
+
}) {
|
|
178
|
+
return /* @__PURE__ */ jsx2(
|
|
179
|
+
AlertDialogPrimitive.Description,
|
|
180
|
+
{
|
|
181
|
+
"data-slot": "alert-dialog-description",
|
|
182
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
183
|
+
...props
|
|
184
|
+
}
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
function AlertDialogAction({
|
|
188
|
+
className,
|
|
189
|
+
variant = "default",
|
|
190
|
+
...props
|
|
191
|
+
}) {
|
|
192
|
+
return /* @__PURE__ */ jsx2(
|
|
193
|
+
AlertDialogPrimitive.Close,
|
|
194
|
+
{
|
|
195
|
+
"data-slot": "alert-dialog-action",
|
|
196
|
+
className: cn(buttonVariants({ variant }), className),
|
|
197
|
+
...props
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
function AlertDialogCancel({
|
|
202
|
+
className,
|
|
203
|
+
variant = "outline",
|
|
204
|
+
...props
|
|
205
|
+
}) {
|
|
206
|
+
return /* @__PURE__ */ jsx2(
|
|
207
|
+
AlertDialogPrimitive.Close,
|
|
208
|
+
{
|
|
209
|
+
"data-slot": "alert-dialog-cancel",
|
|
210
|
+
className: cn(buttonVariants({ variant }), className),
|
|
211
|
+
...props
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// src/ui/aspect-ratio.tsx
|
|
217
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
218
|
+
function AspectRatio({
|
|
219
|
+
ratio = 1,
|
|
220
|
+
className,
|
|
221
|
+
style,
|
|
222
|
+
...props
|
|
223
|
+
}) {
|
|
224
|
+
return /* @__PURE__ */ jsx3(
|
|
225
|
+
"div",
|
|
226
|
+
{
|
|
227
|
+
"data-slot": "aspect-ratio",
|
|
228
|
+
className: cn("w-full overflow-hidden", className),
|
|
229
|
+
style: { aspectRatio: String(ratio), ...style },
|
|
230
|
+
...props
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// src/ui/avatar.tsx
|
|
236
|
+
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
|
|
237
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
238
|
+
function Avatar({ className, ...props }) {
|
|
239
|
+
return /* @__PURE__ */ jsx4(
|
|
240
|
+
AvatarPrimitive.Root,
|
|
241
|
+
{
|
|
242
|
+
"data-slot": "avatar",
|
|
243
|
+
className: cn(
|
|
244
|
+
"relative flex size-8 shrink-0 overflow-hidden rounded-full",
|
|
245
|
+
className
|
|
246
|
+
),
|
|
247
|
+
...props
|
|
248
|
+
}
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
function AvatarImage({ className, ...props }) {
|
|
252
|
+
return /* @__PURE__ */ jsx4(
|
|
253
|
+
AvatarPrimitive.Image,
|
|
254
|
+
{
|
|
255
|
+
"data-slot": "avatar-image",
|
|
256
|
+
className: cn("aspect-square size-full object-cover", className),
|
|
257
|
+
...props
|
|
258
|
+
}
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
function AvatarFallback({ className, ...props }) {
|
|
262
|
+
return /* @__PURE__ */ jsx4(
|
|
263
|
+
AvatarPrimitive.Fallback,
|
|
264
|
+
{
|
|
265
|
+
"data-slot": "avatar-fallback",
|
|
266
|
+
className: cn(
|
|
267
|
+
"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground",
|
|
268
|
+
className
|
|
269
|
+
),
|
|
270
|
+
...props
|
|
271
|
+
}
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// src/ui/badge.tsx
|
|
276
|
+
import { cva as cva2 } from "class-variance-authority";
|
|
277
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
278
|
+
var badgeVariants = cva2(
|
|
279
|
+
"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap [&>svg]:pointer-events-none [&>svg]:size-3",
|
|
280
|
+
{
|
|
281
|
+
variants: {
|
|
282
|
+
variant: {
|
|
283
|
+
default: "border-transparent bg-primary text-primary-foreground",
|
|
284
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground",
|
|
285
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground",
|
|
286
|
+
outline: "border-border text-foreground"
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
defaultVariants: {
|
|
290
|
+
variant: "default"
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
);
|
|
294
|
+
function Badge({
|
|
295
|
+
className,
|
|
296
|
+
variant,
|
|
297
|
+
...props
|
|
298
|
+
}) {
|
|
299
|
+
return /* @__PURE__ */ jsx5(
|
|
300
|
+
"span",
|
|
301
|
+
{
|
|
302
|
+
"data-slot": "badge",
|
|
303
|
+
className: cn(badgeVariants({ variant }), className),
|
|
304
|
+
...props
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// src/ui/breadcrumb.tsx
|
|
310
|
+
import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
|
|
311
|
+
import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
312
|
+
function Breadcrumb({ ...props }) {
|
|
313
|
+
return /* @__PURE__ */ jsx6("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
|
|
314
|
+
}
|
|
315
|
+
function BreadcrumbList({ className, ...props }) {
|
|
316
|
+
return /* @__PURE__ */ jsx6(
|
|
317
|
+
"ol",
|
|
318
|
+
{
|
|
319
|
+
"data-slot": "breadcrumb-list",
|
|
320
|
+
className: cn(
|
|
321
|
+
"flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5",
|
|
322
|
+
className
|
|
323
|
+
),
|
|
324
|
+
...props
|
|
325
|
+
}
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
function BreadcrumbItem({ className, ...props }) {
|
|
329
|
+
return /* @__PURE__ */ jsx6(
|
|
330
|
+
"li",
|
|
331
|
+
{
|
|
332
|
+
"data-slot": "breadcrumb-item",
|
|
333
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
334
|
+
...props
|
|
335
|
+
}
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
function BreadcrumbLink({ className, ...props }) {
|
|
339
|
+
return /* @__PURE__ */ jsx6(
|
|
340
|
+
"a",
|
|
341
|
+
{
|
|
342
|
+
"data-slot": "breadcrumb-link",
|
|
343
|
+
className: cn("transition-colors hover:text-foreground", className),
|
|
344
|
+
...props
|
|
345
|
+
}
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
function BreadcrumbPage({ className, ...props }) {
|
|
349
|
+
return /* @__PURE__ */ jsx6(
|
|
350
|
+
"span",
|
|
351
|
+
{
|
|
352
|
+
"data-slot": "breadcrumb-page",
|
|
353
|
+
role: "link",
|
|
354
|
+
"aria-disabled": "true",
|
|
355
|
+
"aria-current": "page",
|
|
356
|
+
className: cn("font-normal text-foreground", className),
|
|
357
|
+
...props
|
|
358
|
+
}
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
function BreadcrumbSeparator({
|
|
362
|
+
children,
|
|
363
|
+
className,
|
|
364
|
+
...props
|
|
365
|
+
}) {
|
|
366
|
+
return /* @__PURE__ */ jsx6(
|
|
367
|
+
"li",
|
|
368
|
+
{
|
|
369
|
+
"data-slot": "breadcrumb-separator",
|
|
370
|
+
role: "presentation",
|
|
371
|
+
"aria-hidden": "true",
|
|
372
|
+
className: cn("[&>svg]:size-3.5", className),
|
|
373
|
+
...props,
|
|
374
|
+
children: children ?? /* @__PURE__ */ jsx6(ChevronRightIcon, {})
|
|
375
|
+
}
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
function BreadcrumbEllipsis({ className, ...props }) {
|
|
379
|
+
return /* @__PURE__ */ jsxs2(
|
|
380
|
+
"span",
|
|
381
|
+
{
|
|
382
|
+
"data-slot": "breadcrumb-ellipsis",
|
|
383
|
+
role: "presentation",
|
|
384
|
+
"aria-hidden": "true",
|
|
385
|
+
className: cn("flex size-9 items-center justify-center", className),
|
|
386
|
+
...props,
|
|
387
|
+
children: [
|
|
388
|
+
/* @__PURE__ */ jsx6(MoreHorizontalIcon, { className: "size-4" }),
|
|
389
|
+
/* @__PURE__ */ jsx6("span", { className: "sr-only", children: "More" })
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// src/ui/button-group.tsx
|
|
396
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
397
|
+
function ButtonGroup({ className, ...props }) {
|
|
398
|
+
return /* @__PURE__ */ jsx7(
|
|
399
|
+
"div",
|
|
400
|
+
{
|
|
401
|
+
role: "group",
|
|
402
|
+
"data-slot": "button-group",
|
|
403
|
+
className: cn(
|
|
404
|
+
"flex w-fit items-stretch [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 [&>[data-slot=button]]:rounded-none [&>[data-slot=button]]:first:rounded-l-md [&>[data-slot=button]]:last:rounded-r-md [&>[data-slot=button]:not(:first-child)]:-ml-px",
|
|
405
|
+
className
|
|
406
|
+
),
|
|
407
|
+
...props
|
|
408
|
+
}
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// src/ui/calendar.tsx
|
|
413
|
+
import { ChevronLeftIcon, ChevronRightIcon as ChevronRightIcon2 } from "lucide-react";
|
|
414
|
+
import { DayPicker, getDefaultClassNames } from "react-day-picker";
|
|
415
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
416
|
+
function Calendar({
|
|
417
|
+
className,
|
|
418
|
+
classNames,
|
|
419
|
+
showOutsideDays = true,
|
|
420
|
+
...props
|
|
421
|
+
}) {
|
|
422
|
+
const defaultClassNames = getDefaultClassNames();
|
|
423
|
+
return /* @__PURE__ */ jsx8(
|
|
424
|
+
DayPicker,
|
|
425
|
+
{
|
|
426
|
+
showOutsideDays,
|
|
427
|
+
className: cn("bg-background p-3", className),
|
|
428
|
+
classNames: {
|
|
429
|
+
root: cn("w-fit", defaultClassNames.root),
|
|
430
|
+
months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
|
|
431
|
+
month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
|
|
432
|
+
nav: cn(
|
|
433
|
+
"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
|
|
434
|
+
defaultClassNames.nav
|
|
435
|
+
),
|
|
436
|
+
button_previous: cn(
|
|
437
|
+
buttonVariants({ variant: "outline" }),
|
|
438
|
+
"size-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
|
439
|
+
defaultClassNames.button_previous
|
|
440
|
+
),
|
|
441
|
+
button_next: cn(
|
|
442
|
+
buttonVariants({ variant: "outline" }),
|
|
443
|
+
"size-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
|
444
|
+
defaultClassNames.button_next
|
|
445
|
+
),
|
|
446
|
+
month_caption: cn(
|
|
447
|
+
"flex h-7 w-full items-center justify-center px-7",
|
|
448
|
+
defaultClassNames.month_caption
|
|
449
|
+
),
|
|
450
|
+
caption_label: cn("text-sm font-medium", defaultClassNames.caption_label),
|
|
451
|
+
month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
|
|
452
|
+
weekdays: cn("flex", defaultClassNames.weekdays),
|
|
453
|
+
weekday: cn(
|
|
454
|
+
"w-8 rounded-md text-[0.8rem] font-normal text-muted-foreground",
|
|
455
|
+
defaultClassNames.weekday
|
|
456
|
+
),
|
|
457
|
+
week: cn("mt-2 flex w-full", defaultClassNames.week),
|
|
458
|
+
day: cn("h-8 w-8 p-0 text-center text-sm", defaultClassNames.day),
|
|
459
|
+
day_button: cn(
|
|
460
|
+
"size-8 cursor-pointer rounded-md p-0 font-normal hover:bg-accent hover:text-accent-foreground aria-selected:opacity-100",
|
|
461
|
+
defaultClassNames.day_button
|
|
462
|
+
),
|
|
463
|
+
selected: cn(
|
|
464
|
+
"[&>button]:bg-primary [&>button]:text-primary-foreground [&>button]:hover:bg-primary",
|
|
465
|
+
defaultClassNames.selected
|
|
466
|
+
),
|
|
467
|
+
today: cn(
|
|
468
|
+
"[&>button]:bg-accent [&>button]:text-accent-foreground",
|
|
469
|
+
defaultClassNames.today
|
|
470
|
+
),
|
|
471
|
+
outside: cn(
|
|
472
|
+
"text-muted-foreground opacity-50 aria-selected:text-muted-foreground",
|
|
473
|
+
defaultClassNames.outside
|
|
474
|
+
),
|
|
475
|
+
disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
|
|
476
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
477
|
+
...classNames
|
|
478
|
+
},
|
|
479
|
+
components: {
|
|
480
|
+
Chevron: ({ orientation }) => orientation === "left" ? /* @__PURE__ */ jsx8(ChevronLeftIcon, { className: "size-4" }) : /* @__PURE__ */ jsx8(ChevronRightIcon2, { className: "size-4" })
|
|
481
|
+
},
|
|
482
|
+
...props
|
|
483
|
+
}
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// src/ui/carousel.tsx
|
|
488
|
+
import useEmblaCarousel from "embla-carousel-react";
|
|
489
|
+
import { ChevronLeftIcon as ChevronLeftIcon2, ChevronRightIcon as ChevronRightIcon3 } from "lucide-react";
|
|
490
|
+
import * as React from "react";
|
|
491
|
+
import { jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
492
|
+
var CarouselContext = React.createContext(null);
|
|
493
|
+
function useCarousel() {
|
|
494
|
+
const context = React.useContext(CarouselContext);
|
|
495
|
+
if (!context) {
|
|
496
|
+
throw new Error("useCarousel must be used within a <Carousel />");
|
|
497
|
+
}
|
|
498
|
+
return context;
|
|
499
|
+
}
|
|
500
|
+
function Carousel({
|
|
501
|
+
orientation = "horizontal",
|
|
502
|
+
opts,
|
|
503
|
+
setApi,
|
|
504
|
+
plugins,
|
|
505
|
+
className,
|
|
506
|
+
children,
|
|
507
|
+
...props
|
|
508
|
+
}) {
|
|
509
|
+
const [carouselRef, api] = useEmblaCarousel(
|
|
510
|
+
{ ...opts, axis: orientation === "horizontal" ? "x" : "y" },
|
|
511
|
+
plugins
|
|
512
|
+
);
|
|
513
|
+
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
514
|
+
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
515
|
+
const onSelect = React.useCallback((carouselApi) => {
|
|
516
|
+
if (!carouselApi) return;
|
|
517
|
+
setCanScrollPrev(carouselApi.canScrollPrev());
|
|
518
|
+
setCanScrollNext(carouselApi.canScrollNext());
|
|
519
|
+
}, []);
|
|
520
|
+
const scrollPrev = React.useCallback(() => api?.scrollPrev(), [api]);
|
|
521
|
+
const scrollNext = React.useCallback(() => api?.scrollNext(), [api]);
|
|
522
|
+
const handleKeyDown = React.useCallback(
|
|
523
|
+
(event) => {
|
|
524
|
+
if (event.key === "ArrowLeft") {
|
|
525
|
+
event.preventDefault();
|
|
526
|
+
scrollPrev();
|
|
527
|
+
} else if (event.key === "ArrowRight") {
|
|
528
|
+
event.preventDefault();
|
|
529
|
+
scrollNext();
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
[scrollPrev, scrollNext]
|
|
533
|
+
);
|
|
534
|
+
React.useEffect(() => {
|
|
535
|
+
if (api && setApi) setApi(api);
|
|
536
|
+
}, [api, setApi]);
|
|
537
|
+
React.useEffect(() => {
|
|
538
|
+
if (!api) return;
|
|
539
|
+
onSelect(api);
|
|
540
|
+
api.on("reInit", onSelect);
|
|
541
|
+
api.on("select", onSelect);
|
|
542
|
+
return () => {
|
|
543
|
+
api.off("select", onSelect);
|
|
544
|
+
};
|
|
545
|
+
}, [api, onSelect]);
|
|
546
|
+
return /* @__PURE__ */ jsx9(
|
|
547
|
+
CarouselContext.Provider,
|
|
548
|
+
{
|
|
549
|
+
value: {
|
|
550
|
+
carouselRef,
|
|
551
|
+
api,
|
|
552
|
+
opts,
|
|
553
|
+
orientation,
|
|
554
|
+
scrollPrev,
|
|
555
|
+
scrollNext,
|
|
556
|
+
canScrollPrev,
|
|
557
|
+
canScrollNext
|
|
558
|
+
},
|
|
559
|
+
children: /* @__PURE__ */ jsx9(
|
|
560
|
+
"div",
|
|
561
|
+
{
|
|
562
|
+
onKeyDownCapture: handleKeyDown,
|
|
563
|
+
className: cn("relative", className),
|
|
564
|
+
role: "region",
|
|
565
|
+
"aria-roledescription": "carousel",
|
|
566
|
+
"data-slot": "carousel",
|
|
567
|
+
...props,
|
|
568
|
+
children
|
|
569
|
+
}
|
|
570
|
+
)
|
|
571
|
+
}
|
|
572
|
+
);
|
|
573
|
+
}
|
|
574
|
+
function CarouselContent({ className, ...props }) {
|
|
575
|
+
const { carouselRef, orientation } = useCarousel();
|
|
576
|
+
return /* @__PURE__ */ jsx9("div", { ref: carouselRef, className: "overflow-hidden", "data-slot": "carousel-viewport", children: /* @__PURE__ */ jsx9(
|
|
577
|
+
"div",
|
|
578
|
+
{
|
|
579
|
+
className: cn(
|
|
580
|
+
"flex",
|
|
581
|
+
orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
|
|
582
|
+
className
|
|
583
|
+
),
|
|
584
|
+
...props
|
|
585
|
+
}
|
|
586
|
+
) });
|
|
587
|
+
}
|
|
588
|
+
function CarouselItem({ className, ...props }) {
|
|
589
|
+
const { orientation } = useCarousel();
|
|
590
|
+
return /* @__PURE__ */ jsx9(
|
|
591
|
+
"div",
|
|
592
|
+
{
|
|
593
|
+
role: "group",
|
|
594
|
+
"aria-roledescription": "slide",
|
|
595
|
+
"data-slot": "carousel-item",
|
|
596
|
+
className: cn(
|
|
597
|
+
"min-w-0 shrink-0 grow-0 basis-full",
|
|
598
|
+
orientation === "horizontal" ? "pl-4" : "pt-4",
|
|
599
|
+
className
|
|
600
|
+
),
|
|
601
|
+
...props
|
|
602
|
+
}
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
function CarouselPrevious({
|
|
606
|
+
className,
|
|
607
|
+
variant = "outline",
|
|
608
|
+
size = "icon",
|
|
609
|
+
...props
|
|
610
|
+
}) {
|
|
611
|
+
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
612
|
+
return /* @__PURE__ */ jsxs3(
|
|
613
|
+
Button,
|
|
614
|
+
{
|
|
615
|
+
"data-slot": "carousel-previous",
|
|
616
|
+
variant,
|
|
617
|
+
size,
|
|
618
|
+
className: cn(
|
|
619
|
+
"absolute size-8 rounded-full",
|
|
620
|
+
orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
621
|
+
className
|
|
622
|
+
),
|
|
623
|
+
disabled: !canScrollPrev,
|
|
624
|
+
onClick: scrollPrev,
|
|
625
|
+
...props,
|
|
626
|
+
children: [
|
|
627
|
+
/* @__PURE__ */ jsx9(ChevronLeftIcon2, {}),
|
|
628
|
+
/* @__PURE__ */ jsx9("span", { className: "sr-only", children: "Previous slide" })
|
|
629
|
+
]
|
|
630
|
+
}
|
|
631
|
+
);
|
|
632
|
+
}
|
|
633
|
+
function CarouselNext({
|
|
634
|
+
className,
|
|
635
|
+
variant = "outline",
|
|
636
|
+
size = "icon",
|
|
637
|
+
...props
|
|
638
|
+
}) {
|
|
639
|
+
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
640
|
+
return /* @__PURE__ */ jsxs3(
|
|
641
|
+
Button,
|
|
642
|
+
{
|
|
643
|
+
"data-slot": "carousel-next",
|
|
644
|
+
variant,
|
|
645
|
+
size,
|
|
646
|
+
className: cn(
|
|
647
|
+
"absolute size-8 rounded-full",
|
|
648
|
+
orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
649
|
+
className
|
|
650
|
+
),
|
|
651
|
+
disabled: !canScrollNext,
|
|
652
|
+
onClick: scrollNext,
|
|
653
|
+
...props,
|
|
654
|
+
children: [
|
|
655
|
+
/* @__PURE__ */ jsx9(ChevronRightIcon3, {}),
|
|
656
|
+
/* @__PURE__ */ jsx9("span", { className: "sr-only", children: "Next slide" })
|
|
657
|
+
]
|
|
658
|
+
}
|
|
659
|
+
);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
// src/ui/checkbox.tsx
|
|
663
|
+
import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
|
|
664
|
+
import { CheckIcon } from "lucide-react";
|
|
665
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
666
|
+
function Checkbox({ className, ...props }) {
|
|
667
|
+
return /* @__PURE__ */ jsx10(
|
|
668
|
+
CheckboxPrimitive.Root,
|
|
669
|
+
{
|
|
670
|
+
"data-slot": "checkbox",
|
|
671
|
+
className: cn(
|
|
672
|
+
"peer size-4 shrink-0 cursor-pointer rounded-[4px] border border-input shadow-xs transition-colors outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground",
|
|
673
|
+
className
|
|
674
|
+
),
|
|
675
|
+
...props,
|
|
676
|
+
children: /* @__PURE__ */ jsx10(
|
|
677
|
+
CheckboxPrimitive.Indicator,
|
|
678
|
+
{
|
|
679
|
+
"data-slot": "checkbox-indicator",
|
|
680
|
+
className: "flex items-center justify-center text-current",
|
|
681
|
+
children: /* @__PURE__ */ jsx10(CheckIcon, { className: "size-3.5" })
|
|
682
|
+
}
|
|
683
|
+
)
|
|
684
|
+
}
|
|
685
|
+
);
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
// src/ui/collapsible.tsx
|
|
689
|
+
import { Collapsible as CollapsiblePrimitive } from "@base-ui/react/collapsible";
|
|
690
|
+
import { ChevronDownIcon } from "lucide-react";
|
|
691
|
+
import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
692
|
+
function Collapsible({
|
|
693
|
+
...props
|
|
694
|
+
}) {
|
|
695
|
+
return /* @__PURE__ */ jsx11(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
|
|
696
|
+
}
|
|
697
|
+
function CollapsibleTrigger({
|
|
698
|
+
className,
|
|
699
|
+
children,
|
|
700
|
+
...props
|
|
701
|
+
}) {
|
|
702
|
+
return /* @__PURE__ */ jsxs4(
|
|
703
|
+
CollapsiblePrimitive.Trigger,
|
|
704
|
+
{
|
|
705
|
+
"data-slot": "collapsible-trigger",
|
|
706
|
+
className: cn(
|
|
707
|
+
"flex w-full cursor-pointer items-center justify-between gap-4 rounded-md py-2 text-left text-sm font-medium transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 [&[data-panel-open]>svg]:rotate-180",
|
|
708
|
+
className
|
|
709
|
+
),
|
|
710
|
+
...props,
|
|
711
|
+
children: [
|
|
712
|
+
children,
|
|
713
|
+
/* @__PURE__ */ jsx11(ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
|
|
714
|
+
]
|
|
715
|
+
}
|
|
716
|
+
);
|
|
717
|
+
}
|
|
718
|
+
function CollapsibleContent({
|
|
719
|
+
className,
|
|
720
|
+
...props
|
|
721
|
+
}) {
|
|
722
|
+
return /* @__PURE__ */ jsx11(
|
|
723
|
+
CollapsiblePrimitive.Panel,
|
|
724
|
+
{
|
|
725
|
+
"data-slot": "collapsible-content",
|
|
726
|
+
className: cn(
|
|
727
|
+
"overflow-hidden text-sm transition-[height] duration-200 ease-out",
|
|
728
|
+
className
|
|
729
|
+
),
|
|
730
|
+
...props
|
|
731
|
+
}
|
|
732
|
+
);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
// src/ui/combobox.tsx
|
|
736
|
+
import { ChevronsUpDownIcon } from "lucide-react";
|
|
737
|
+
import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
738
|
+
function Combobox({
|
|
739
|
+
open,
|
|
740
|
+
onOpenChange,
|
|
741
|
+
children
|
|
742
|
+
}) {
|
|
743
|
+
return /* @__PURE__ */ jsx12(Popover, { open, onOpenChange: (next) => onOpenChange?.(next), children });
|
|
744
|
+
}
|
|
745
|
+
function ComboboxTrigger({
|
|
746
|
+
className,
|
|
747
|
+
children,
|
|
748
|
+
...props
|
|
749
|
+
}) {
|
|
750
|
+
return /* @__PURE__ */ jsxs5(
|
|
751
|
+
PopoverTrigger,
|
|
752
|
+
{
|
|
753
|
+
"data-slot": "combobox-trigger",
|
|
754
|
+
className: cn(
|
|
755
|
+
"flex h-9 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors outline-none hover:bg-accent focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50",
|
|
756
|
+
className
|
|
757
|
+
),
|
|
758
|
+
...props,
|
|
759
|
+
children: [
|
|
760
|
+
/* @__PURE__ */ jsx12("span", { className: "min-w-0 flex-1 truncate text-left", children }),
|
|
761
|
+
/* @__PURE__ */ jsx12(ChevronsUpDownIcon, { className: "size-4 shrink-0 opacity-50" })
|
|
762
|
+
]
|
|
763
|
+
}
|
|
764
|
+
);
|
|
765
|
+
}
|
|
766
|
+
function ComboboxContent({
|
|
767
|
+
className,
|
|
768
|
+
children,
|
|
769
|
+
...props
|
|
770
|
+
}) {
|
|
771
|
+
return /* @__PURE__ */ jsx12(
|
|
772
|
+
PopoverContent,
|
|
773
|
+
{
|
|
774
|
+
"data-slot": "combobox-content",
|
|
775
|
+
className: cn("w-[--anchor-width] p-0", className),
|
|
776
|
+
...props,
|
|
777
|
+
children
|
|
778
|
+
}
|
|
779
|
+
);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
// src/ui/command.tsx
|
|
783
|
+
import { Command as CommandPrimitive } from "cmdk";
|
|
784
|
+
import { SearchIcon } from "lucide-react";
|
|
785
|
+
import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
786
|
+
function Command({
|
|
787
|
+
className,
|
|
788
|
+
...props
|
|
789
|
+
}) {
|
|
790
|
+
return /* @__PURE__ */ jsx13(
|
|
791
|
+
CommandPrimitive,
|
|
792
|
+
{
|
|
793
|
+
"data-slot": "command",
|
|
794
|
+
className: cn(
|
|
795
|
+
"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
|
|
796
|
+
className
|
|
797
|
+
),
|
|
798
|
+
...props
|
|
799
|
+
}
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
function CommandInput({
|
|
803
|
+
className,
|
|
804
|
+
...props
|
|
805
|
+
}) {
|
|
806
|
+
return /* @__PURE__ */ jsxs6(
|
|
807
|
+
"div",
|
|
808
|
+
{
|
|
809
|
+
"data-slot": "command-input-wrapper",
|
|
810
|
+
className: "flex items-center gap-2 border-b border-border px-3",
|
|
811
|
+
children: [
|
|
812
|
+
/* @__PURE__ */ jsx13(SearchIcon, { className: "size-4 shrink-0 opacity-50" }),
|
|
813
|
+
/* @__PURE__ */ jsx13(
|
|
814
|
+
CommandPrimitive.Input,
|
|
815
|
+
{
|
|
816
|
+
"data-slot": "command-input",
|
|
817
|
+
className: cn(
|
|
818
|
+
"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
819
|
+
className
|
|
820
|
+
),
|
|
821
|
+
...props
|
|
822
|
+
}
|
|
823
|
+
)
|
|
824
|
+
]
|
|
825
|
+
}
|
|
826
|
+
);
|
|
827
|
+
}
|
|
828
|
+
function CommandList({
|
|
829
|
+
className,
|
|
830
|
+
...props
|
|
831
|
+
}) {
|
|
832
|
+
return /* @__PURE__ */ jsx13(
|
|
833
|
+
CommandPrimitive.List,
|
|
834
|
+
{
|
|
835
|
+
"data-slot": "command-list",
|
|
836
|
+
className: cn(
|
|
837
|
+
"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
|
|
838
|
+
className
|
|
839
|
+
),
|
|
840
|
+
...props
|
|
841
|
+
}
|
|
842
|
+
);
|
|
843
|
+
}
|
|
844
|
+
function CommandEmpty({
|
|
845
|
+
...props
|
|
846
|
+
}) {
|
|
847
|
+
return /* @__PURE__ */ jsx13(
|
|
848
|
+
CommandPrimitive.Empty,
|
|
849
|
+
{
|
|
850
|
+
"data-slot": "command-empty",
|
|
851
|
+
className: "py-6 text-center text-sm",
|
|
852
|
+
...props
|
|
853
|
+
}
|
|
854
|
+
);
|
|
855
|
+
}
|
|
856
|
+
function CommandGroup({
|
|
857
|
+
className,
|
|
858
|
+
...props
|
|
859
|
+
}) {
|
|
860
|
+
return /* @__PURE__ */ jsx13(
|
|
861
|
+
CommandPrimitive.Group,
|
|
862
|
+
{
|
|
863
|
+
"data-slot": "command-group",
|
|
864
|
+
className: cn(
|
|
865
|
+
"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
|
|
866
|
+
className
|
|
867
|
+
),
|
|
868
|
+
...props
|
|
869
|
+
}
|
|
870
|
+
);
|
|
871
|
+
}
|
|
872
|
+
function CommandItem({
|
|
873
|
+
className,
|
|
874
|
+
...props
|
|
875
|
+
}) {
|
|
876
|
+
return /* @__PURE__ */ jsx13(
|
|
877
|
+
CommandPrimitive.Item,
|
|
878
|
+
{
|
|
879
|
+
"data-slot": "command-item",
|
|
880
|
+
className: cn(
|
|
881
|
+
"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
882
|
+
className
|
|
883
|
+
),
|
|
884
|
+
...props
|
|
885
|
+
}
|
|
886
|
+
);
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
// src/ui/chart.tsx
|
|
890
|
+
import { ResponsiveContainer } from "recharts";
|
|
891
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
892
|
+
var CHART_TOKEN_COLORS = [
|
|
893
|
+
"hsl(var(--chart-1))",
|
|
894
|
+
"hsl(var(--chart-2))",
|
|
895
|
+
"hsl(var(--chart-3))",
|
|
896
|
+
"hsl(var(--chart-4))",
|
|
897
|
+
"hsl(var(--chart-5))"
|
|
898
|
+
];
|
|
899
|
+
function chartColor(index, colors) {
|
|
900
|
+
if (colors && colors.length > 0) {
|
|
901
|
+
return colors[index % colors.length];
|
|
902
|
+
}
|
|
903
|
+
return CHART_TOKEN_COLORS[index % CHART_TOKEN_COLORS.length];
|
|
904
|
+
}
|
|
905
|
+
function ChartContainer({
|
|
906
|
+
className,
|
|
907
|
+
children,
|
|
908
|
+
...props
|
|
909
|
+
}) {
|
|
910
|
+
return /* @__PURE__ */ jsx14(
|
|
911
|
+
"div",
|
|
912
|
+
{
|
|
913
|
+
"data-slot": "chart-container",
|
|
914
|
+
className: cn("h-64 w-full", className),
|
|
915
|
+
...props,
|
|
916
|
+
children: /* @__PURE__ */ jsx14(ResponsiveContainer, { width: "100%", height: "100%", children })
|
|
917
|
+
}
|
|
918
|
+
);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// src/ui/context-menu.tsx
|
|
922
|
+
import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu";
|
|
923
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
924
|
+
function ContextMenu({
|
|
925
|
+
...props
|
|
926
|
+
}) {
|
|
927
|
+
return /* @__PURE__ */ jsx15(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
|
|
928
|
+
}
|
|
929
|
+
function ContextMenuTrigger({
|
|
930
|
+
...props
|
|
931
|
+
}) {
|
|
932
|
+
return /* @__PURE__ */ jsx15(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
|
|
933
|
+
}
|
|
934
|
+
function ContextMenuContent({
|
|
935
|
+
className,
|
|
936
|
+
...props
|
|
937
|
+
}) {
|
|
938
|
+
return /* @__PURE__ */ jsx15(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx15(ContextMenuPrimitive.Positioner, { className: "isolate z-50", children: /* @__PURE__ */ jsx15(
|
|
939
|
+
ContextMenuPrimitive.Popup,
|
|
940
|
+
{
|
|
941
|
+
"data-slot": "context-menu-content",
|
|
942
|
+
className: cn(
|
|
943
|
+
"z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
944
|
+
className
|
|
945
|
+
),
|
|
946
|
+
...props
|
|
947
|
+
}
|
|
948
|
+
) }) });
|
|
949
|
+
}
|
|
950
|
+
function ContextMenuItem({
|
|
951
|
+
className,
|
|
952
|
+
variant = "default",
|
|
953
|
+
...props
|
|
954
|
+
}) {
|
|
955
|
+
return /* @__PURE__ */ jsx15(
|
|
956
|
+
ContextMenuPrimitive.Item,
|
|
957
|
+
{
|
|
958
|
+
"data-slot": "context-menu-item",
|
|
959
|
+
"data-variant": variant,
|
|
960
|
+
className: cn(
|
|
961
|
+
"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
962
|
+
className
|
|
963
|
+
),
|
|
964
|
+
...props
|
|
965
|
+
}
|
|
966
|
+
);
|
|
967
|
+
}
|
|
968
|
+
function ContextMenuSeparator({
|
|
969
|
+
className,
|
|
970
|
+
...props
|
|
971
|
+
}) {
|
|
972
|
+
return /* @__PURE__ */ jsx15(
|
|
973
|
+
ContextMenuPrimitive.Separator,
|
|
974
|
+
{
|
|
975
|
+
"data-slot": "context-menu-separator",
|
|
976
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
977
|
+
...props
|
|
978
|
+
}
|
|
979
|
+
);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
// src/ui/input.tsx
|
|
983
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
984
|
+
function Input({ className, type, ...props }) {
|
|
985
|
+
return /* @__PURE__ */ jsx16(
|
|
986
|
+
"input",
|
|
987
|
+
{
|
|
988
|
+
type,
|
|
989
|
+
"data-slot": "input",
|
|
990
|
+
className: cn(
|
|
991
|
+
"flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50",
|
|
992
|
+
className
|
|
993
|
+
),
|
|
994
|
+
...props
|
|
995
|
+
}
|
|
996
|
+
);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
// src/ui/table.tsx
|
|
1000
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
1001
|
+
function Table({ className, ...props }) {
|
|
1002
|
+
return /* @__PURE__ */ jsx17(
|
|
1003
|
+
"div",
|
|
1004
|
+
{
|
|
1005
|
+
"data-slot": "table-container",
|
|
1006
|
+
className: "relative w-full overflow-x-auto",
|
|
1007
|
+
children: /* @__PURE__ */ jsx17(
|
|
1008
|
+
"table",
|
|
1009
|
+
{
|
|
1010
|
+
"data-slot": "table",
|
|
1011
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
1012
|
+
...props
|
|
1013
|
+
}
|
|
1014
|
+
)
|
|
1015
|
+
}
|
|
1016
|
+
);
|
|
1017
|
+
}
|
|
1018
|
+
function TableHeader({ className, ...props }) {
|
|
1019
|
+
return /* @__PURE__ */ jsx17(
|
|
1020
|
+
"thead",
|
|
1021
|
+
{
|
|
1022
|
+
"data-slot": "table-header",
|
|
1023
|
+
className: cn("[&_tr]:border-b [&_tr]:border-border", className),
|
|
1024
|
+
...props
|
|
1025
|
+
}
|
|
1026
|
+
);
|
|
1027
|
+
}
|
|
1028
|
+
function TableBody({ className, ...props }) {
|
|
1029
|
+
return /* @__PURE__ */ jsx17(
|
|
1030
|
+
"tbody",
|
|
1031
|
+
{
|
|
1032
|
+
"data-slot": "table-body",
|
|
1033
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
1034
|
+
...props
|
|
1035
|
+
}
|
|
1036
|
+
);
|
|
1037
|
+
}
|
|
1038
|
+
function TableFooter({ className, ...props }) {
|
|
1039
|
+
return /* @__PURE__ */ jsx17(
|
|
1040
|
+
"tfoot",
|
|
1041
|
+
{
|
|
1042
|
+
"data-slot": "table-footer",
|
|
1043
|
+
className: cn(
|
|
1044
|
+
"border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
1045
|
+
className
|
|
1046
|
+
),
|
|
1047
|
+
...props
|
|
1048
|
+
}
|
|
1049
|
+
);
|
|
1050
|
+
}
|
|
1051
|
+
function TableRow({ className, ...props }) {
|
|
1052
|
+
return /* @__PURE__ */ jsx17(
|
|
1053
|
+
"tr",
|
|
1054
|
+
{
|
|
1055
|
+
"data-slot": "table-row",
|
|
1056
|
+
className: cn(
|
|
1057
|
+
"border-b border-border transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
|
|
1058
|
+
className
|
|
1059
|
+
),
|
|
1060
|
+
...props
|
|
1061
|
+
}
|
|
1062
|
+
);
|
|
1063
|
+
}
|
|
1064
|
+
function TableHead({ className, ...props }) {
|
|
1065
|
+
return /* @__PURE__ */ jsx17(
|
|
1066
|
+
"th",
|
|
1067
|
+
{
|
|
1068
|
+
"data-slot": "table-head",
|
|
1069
|
+
className: cn(
|
|
1070
|
+
"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
|
|
1071
|
+
className
|
|
1072
|
+
),
|
|
1073
|
+
...props
|
|
1074
|
+
}
|
|
1075
|
+
);
|
|
1076
|
+
}
|
|
1077
|
+
function TableCell({ className, ...props }) {
|
|
1078
|
+
return /* @__PURE__ */ jsx17(
|
|
1079
|
+
"td",
|
|
1080
|
+
{
|
|
1081
|
+
"data-slot": "table-cell",
|
|
1082
|
+
className: cn(
|
|
1083
|
+
"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
|
|
1084
|
+
className
|
|
1085
|
+
),
|
|
1086
|
+
...props
|
|
1087
|
+
}
|
|
1088
|
+
);
|
|
1089
|
+
}
|
|
1090
|
+
function TableCaption({
|
|
1091
|
+
className,
|
|
1092
|
+
...props
|
|
1093
|
+
}) {
|
|
1094
|
+
return /* @__PURE__ */ jsx17(
|
|
1095
|
+
"caption",
|
|
1096
|
+
{
|
|
1097
|
+
"data-slot": "table-caption",
|
|
1098
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
1099
|
+
...props
|
|
1100
|
+
}
|
|
1101
|
+
);
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
// src/ui/dropdown-menu.tsx
|
|
1105
|
+
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
1106
|
+
import { ChevronRightIcon as ChevronRightIcon4 } from "lucide-react";
|
|
1107
|
+
import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1108
|
+
function DropdownMenu({
|
|
1109
|
+
...props
|
|
1110
|
+
}) {
|
|
1111
|
+
return /* @__PURE__ */ jsx18(MenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
1112
|
+
}
|
|
1113
|
+
function DropdownMenuTrigger({
|
|
1114
|
+
...props
|
|
1115
|
+
}) {
|
|
1116
|
+
return /* @__PURE__ */ jsx18(MenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
1117
|
+
}
|
|
1118
|
+
function DropdownMenuContent({
|
|
1119
|
+
className,
|
|
1120
|
+
align = "start",
|
|
1121
|
+
side = "bottom",
|
|
1122
|
+
sideOffset = 4,
|
|
1123
|
+
...props
|
|
1124
|
+
}) {
|
|
1125
|
+
return /* @__PURE__ */ jsx18(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx18(
|
|
1126
|
+
MenuPrimitive.Positioner,
|
|
1127
|
+
{
|
|
1128
|
+
align,
|
|
1129
|
+
side,
|
|
1130
|
+
sideOffset,
|
|
1131
|
+
className: "isolate z-50",
|
|
1132
|
+
children: /* @__PURE__ */ jsx18(
|
|
1133
|
+
MenuPrimitive.Popup,
|
|
1134
|
+
{
|
|
1135
|
+
"data-slot": "dropdown-menu-content",
|
|
1136
|
+
className: cn(
|
|
1137
|
+
"z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1138
|
+
className
|
|
1139
|
+
),
|
|
1140
|
+
...props
|
|
1141
|
+
}
|
|
1142
|
+
)
|
|
1143
|
+
}
|
|
1144
|
+
) });
|
|
1145
|
+
}
|
|
1146
|
+
function DropdownMenuItem({
|
|
1147
|
+
className,
|
|
1148
|
+
variant = "default",
|
|
1149
|
+
...props
|
|
1150
|
+
}) {
|
|
1151
|
+
return /* @__PURE__ */ jsx18(
|
|
1152
|
+
MenuPrimitive.Item,
|
|
1153
|
+
{
|
|
1154
|
+
"data-slot": "dropdown-menu-item",
|
|
1155
|
+
"data-variant": variant,
|
|
1156
|
+
className: cn(
|
|
1157
|
+
"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1158
|
+
className
|
|
1159
|
+
),
|
|
1160
|
+
...props
|
|
1161
|
+
}
|
|
1162
|
+
);
|
|
1163
|
+
}
|
|
1164
|
+
function DropdownMenuSeparator({
|
|
1165
|
+
className,
|
|
1166
|
+
...props
|
|
1167
|
+
}) {
|
|
1168
|
+
return /* @__PURE__ */ jsx18(
|
|
1169
|
+
MenuPrimitive.Separator,
|
|
1170
|
+
{
|
|
1171
|
+
"data-slot": "dropdown-menu-separator",
|
|
1172
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1173
|
+
...props
|
|
1174
|
+
}
|
|
1175
|
+
);
|
|
1176
|
+
}
|
|
1177
|
+
function DropdownMenuSub({
|
|
1178
|
+
...props
|
|
1179
|
+
}) {
|
|
1180
|
+
return /* @__PURE__ */ jsx18(MenuPrimitive.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
|
|
1181
|
+
}
|
|
1182
|
+
function DropdownMenuSubTrigger({
|
|
1183
|
+
className,
|
|
1184
|
+
children,
|
|
1185
|
+
...props
|
|
1186
|
+
}) {
|
|
1187
|
+
return /* @__PURE__ */ jsxs7(
|
|
1188
|
+
MenuPrimitive.SubmenuTrigger,
|
|
1189
|
+
{
|
|
1190
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
1191
|
+
className: cn(
|
|
1192
|
+
"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1193
|
+
className
|
|
1194
|
+
),
|
|
1195
|
+
...props,
|
|
1196
|
+
children: [
|
|
1197
|
+
children,
|
|
1198
|
+
/* @__PURE__ */ jsx18(ChevronRightIcon4, { className: "ml-auto" })
|
|
1199
|
+
]
|
|
1200
|
+
}
|
|
1201
|
+
);
|
|
1202
|
+
}
|
|
1203
|
+
function DropdownMenuSubContent({
|
|
1204
|
+
className,
|
|
1205
|
+
sideOffset = 2,
|
|
1206
|
+
...props
|
|
1207
|
+
}) {
|
|
1208
|
+
return /* @__PURE__ */ jsx18(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx18(MenuPrimitive.Positioner, { sideOffset, className: "isolate z-50", children: /* @__PURE__ */ jsx18(
|
|
1209
|
+
MenuPrimitive.Popup,
|
|
1210
|
+
{
|
|
1211
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
1212
|
+
className: cn(
|
|
1213
|
+
"z-50 min-w-32 origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1214
|
+
className
|
|
1215
|
+
),
|
|
1216
|
+
...props
|
|
1217
|
+
}
|
|
1218
|
+
) }) });
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
// src/ui/empty.tsx
|
|
1222
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1223
|
+
function Empty({ className, ...props }) {
|
|
1224
|
+
return /* @__PURE__ */ jsx19(
|
|
1225
|
+
"div",
|
|
1226
|
+
{
|
|
1227
|
+
"data-slot": "empty",
|
|
1228
|
+
className: cn(
|
|
1229
|
+
"flex min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-6 text-center text-balance",
|
|
1230
|
+
className
|
|
1231
|
+
),
|
|
1232
|
+
...props
|
|
1233
|
+
}
|
|
1234
|
+
);
|
|
1235
|
+
}
|
|
1236
|
+
function EmptyHeader({ className, ...props }) {
|
|
1237
|
+
return /* @__PURE__ */ jsx19(
|
|
1238
|
+
"div",
|
|
1239
|
+
{
|
|
1240
|
+
"data-slot": "empty-header",
|
|
1241
|
+
className: cn("flex max-w-sm flex-col items-center gap-2", className),
|
|
1242
|
+
...props
|
|
1243
|
+
}
|
|
1244
|
+
);
|
|
1245
|
+
}
|
|
1246
|
+
function EmptyTitle({ className, ...props }) {
|
|
1247
|
+
return /* @__PURE__ */ jsx19(
|
|
1248
|
+
"div",
|
|
1249
|
+
{
|
|
1250
|
+
"data-slot": "empty-title",
|
|
1251
|
+
className: cn("text-lg font-medium tracking-tight", className),
|
|
1252
|
+
...props
|
|
1253
|
+
}
|
|
1254
|
+
);
|
|
1255
|
+
}
|
|
1256
|
+
function EmptyDescription({ className, ...props }) {
|
|
1257
|
+
return /* @__PURE__ */ jsx19(
|
|
1258
|
+
"p",
|
|
1259
|
+
{
|
|
1260
|
+
"data-slot": "empty-description",
|
|
1261
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1262
|
+
...props
|
|
1263
|
+
}
|
|
1264
|
+
);
|
|
1265
|
+
}
|
|
1266
|
+
function EmptyContent({ className, ...props }) {
|
|
1267
|
+
return /* @__PURE__ */ jsx19(
|
|
1268
|
+
"div",
|
|
1269
|
+
{
|
|
1270
|
+
"data-slot": "empty-content",
|
|
1271
|
+
className: cn(
|
|
1272
|
+
"flex w-full max-w-sm min-w-0 flex-col items-center gap-2 text-sm text-balance",
|
|
1273
|
+
className
|
|
1274
|
+
),
|
|
1275
|
+
...props
|
|
1276
|
+
}
|
|
1277
|
+
);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
// src/ui/field.tsx
|
|
1281
|
+
import { Field as FieldPrimitive } from "@base-ui/react/field";
|
|
1282
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1283
|
+
function Field({ className, ...props }) {
|
|
1284
|
+
return /* @__PURE__ */ jsx20(
|
|
1285
|
+
FieldPrimitive.Root,
|
|
1286
|
+
{
|
|
1287
|
+
"data-slot": "field",
|
|
1288
|
+
className: cn("flex flex-col gap-1.5", className),
|
|
1289
|
+
...props
|
|
1290
|
+
}
|
|
1291
|
+
);
|
|
1292
|
+
}
|
|
1293
|
+
function FieldLabel({ className, ...props }) {
|
|
1294
|
+
return /* @__PURE__ */ jsx20(
|
|
1295
|
+
FieldPrimitive.Label,
|
|
1296
|
+
{
|
|
1297
|
+
"data-slot": "field-label",
|
|
1298
|
+
className: cn("text-sm leading-none font-medium", className),
|
|
1299
|
+
...props
|
|
1300
|
+
}
|
|
1301
|
+
);
|
|
1302
|
+
}
|
|
1303
|
+
function FieldDescription({ className, ...props }) {
|
|
1304
|
+
return /* @__PURE__ */ jsx20(
|
|
1305
|
+
FieldPrimitive.Description,
|
|
1306
|
+
{
|
|
1307
|
+
"data-slot": "field-description",
|
|
1308
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1309
|
+
...props
|
|
1310
|
+
}
|
|
1311
|
+
);
|
|
1312
|
+
}
|
|
1313
|
+
function FieldError({ className, ...props }) {
|
|
1314
|
+
return /* @__PURE__ */ jsx20(
|
|
1315
|
+
FieldPrimitive.Error,
|
|
1316
|
+
{
|
|
1317
|
+
"data-slot": "field-error",
|
|
1318
|
+
className: cn("text-sm text-destructive", className),
|
|
1319
|
+
...props
|
|
1320
|
+
}
|
|
1321
|
+
);
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
// src/ui/hover-card.tsx
|
|
1325
|
+
import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
|
|
1326
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1327
|
+
function HoverCard({
|
|
1328
|
+
...props
|
|
1329
|
+
}) {
|
|
1330
|
+
return /* @__PURE__ */ jsx21(PreviewCardPrimitive.Root, { "data-slot": "hover-card", ...props });
|
|
1331
|
+
}
|
|
1332
|
+
function HoverCardTrigger({
|
|
1333
|
+
...props
|
|
1334
|
+
}) {
|
|
1335
|
+
return /* @__PURE__ */ jsx21(PreviewCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
|
|
1336
|
+
}
|
|
1337
|
+
function HoverCardContent({
|
|
1338
|
+
className,
|
|
1339
|
+
align = "center",
|
|
1340
|
+
side = "bottom",
|
|
1341
|
+
sideOffset = 4,
|
|
1342
|
+
...props
|
|
1343
|
+
}) {
|
|
1344
|
+
return /* @__PURE__ */ jsx21(PreviewCardPrimitive.Portal, { children: /* @__PURE__ */ jsx21(
|
|
1345
|
+
PreviewCardPrimitive.Positioner,
|
|
1346
|
+
{
|
|
1347
|
+
align,
|
|
1348
|
+
side,
|
|
1349
|
+
sideOffset,
|
|
1350
|
+
className: "isolate z-50",
|
|
1351
|
+
children: /* @__PURE__ */ jsx21(
|
|
1352
|
+
PreviewCardPrimitive.Popup,
|
|
1353
|
+
{
|
|
1354
|
+
"data-slot": "hover-card-content",
|
|
1355
|
+
className: cn(
|
|
1356
|
+
"z-50 w-64 origin-(--transform-origin) rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-hidden duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1357
|
+
className
|
|
1358
|
+
),
|
|
1359
|
+
...props
|
|
1360
|
+
}
|
|
1361
|
+
)
|
|
1362
|
+
}
|
|
1363
|
+
) });
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
// src/ui/input-group.tsx
|
|
1367
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1368
|
+
function InputGroup({ className, ...props }) {
|
|
1369
|
+
return /* @__PURE__ */ jsx22(
|
|
1370
|
+
"div",
|
|
1371
|
+
{
|
|
1372
|
+
"data-slot": "input-group",
|
|
1373
|
+
role: "group",
|
|
1374
|
+
className: cn(
|
|
1375
|
+
"group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs transition-colors outline-none focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-disabled:opacity-50",
|
|
1376
|
+
// 消化 DSL 子元素:Input 去边框/焦点环并伸展;Text 作前后缀;Button 贴边去圆角
|
|
1377
|
+
"[&_[data-slot=input]]:min-w-0 [&_[data-slot=input]]:flex-1 [&_[data-slot=input]]:border-0 [&_[data-slot=input]]:shadow-none [&_[data-slot=input]]:focus-visible:ring-0",
|
|
1378
|
+
"[&>[data-slot=text]]:shrink-0 [&>[data-slot=text]]:px-3 [&>[data-slot=text]]:text-sm [&>[data-slot=text]]:text-muted-foreground",
|
|
1379
|
+
"[&>[data-slot=button]]:shrink-0 [&>[data-slot=button]]:rounded-none [&>[data-slot=button]]:first:rounded-l-md [&>[data-slot=button]]:last:rounded-r-md",
|
|
1380
|
+
className
|
|
1381
|
+
),
|
|
1382
|
+
...props
|
|
1383
|
+
}
|
|
1384
|
+
);
|
|
1385
|
+
}
|
|
1386
|
+
function InputGroupAddon({
|
|
1387
|
+
className,
|
|
1388
|
+
align = "inline-start",
|
|
1389
|
+
...props
|
|
1390
|
+
}) {
|
|
1391
|
+
return /* @__PURE__ */ jsx22(
|
|
1392
|
+
"div",
|
|
1393
|
+
{
|
|
1394
|
+
role: "group",
|
|
1395
|
+
"data-slot": "input-group-addon",
|
|
1396
|
+
"data-align": align,
|
|
1397
|
+
className: cn(
|
|
1398
|
+
"flex items-center gap-1 px-3 text-sm text-muted-foreground [&>svg]:size-4",
|
|
1399
|
+
align === "inline-start" ? "order-first pl-3" : "order-last pr-3",
|
|
1400
|
+
className
|
|
1401
|
+
),
|
|
1402
|
+
...props
|
|
1403
|
+
}
|
|
1404
|
+
);
|
|
1405
|
+
}
|
|
1406
|
+
function InputGroupInput({
|
|
1407
|
+
className,
|
|
1408
|
+
...props
|
|
1409
|
+
}) {
|
|
1410
|
+
return /* @__PURE__ */ jsx22(
|
|
1411
|
+
"input",
|
|
1412
|
+
{
|
|
1413
|
+
"data-slot": "input-group-input",
|
|
1414
|
+
className: cn(
|
|
1415
|
+
"h-9 min-w-0 flex-1 border-0 bg-transparent px-3 py-1 text-base shadow-none outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed md:text-sm",
|
|
1416
|
+
className
|
|
1417
|
+
),
|
|
1418
|
+
...props
|
|
1419
|
+
}
|
|
1420
|
+
);
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
// src/ui/input-otp.tsx
|
|
1424
|
+
import { OTPInput, OTPInputContext } from "input-otp";
|
|
1425
|
+
import { MinusIcon } from "lucide-react";
|
|
1426
|
+
import * as React2 from "react";
|
|
1427
|
+
import { jsx as jsx23, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1428
|
+
function InputOTP({
|
|
1429
|
+
className,
|
|
1430
|
+
containerClassName,
|
|
1431
|
+
...props
|
|
1432
|
+
}) {
|
|
1433
|
+
return /* @__PURE__ */ jsx23(
|
|
1434
|
+
OTPInput,
|
|
1435
|
+
{
|
|
1436
|
+
"data-slot": "input-otp",
|
|
1437
|
+
containerClassName: cn(
|
|
1438
|
+
"flex items-center gap-2 has-disabled:opacity-50",
|
|
1439
|
+
containerClassName
|
|
1440
|
+
),
|
|
1441
|
+
className: cn("disabled:cursor-not-allowed", className),
|
|
1442
|
+
...props
|
|
1443
|
+
}
|
|
1444
|
+
);
|
|
1445
|
+
}
|
|
1446
|
+
function InputOTPGroup({ className, ...props }) {
|
|
1447
|
+
return /* @__PURE__ */ jsx23(
|
|
1448
|
+
"div",
|
|
1449
|
+
{
|
|
1450
|
+
"data-slot": "input-otp-group",
|
|
1451
|
+
className: cn("flex items-center", className),
|
|
1452
|
+
...props
|
|
1453
|
+
}
|
|
1454
|
+
);
|
|
1455
|
+
}
|
|
1456
|
+
function InputOTPSlot({
|
|
1457
|
+
index,
|
|
1458
|
+
className,
|
|
1459
|
+
...props
|
|
1460
|
+
}) {
|
|
1461
|
+
const inputOTPContext = React2.useContext(OTPInputContext);
|
|
1462
|
+
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
|
1463
|
+
return /* @__PURE__ */ jsxs8(
|
|
1464
|
+
"div",
|
|
1465
|
+
{
|
|
1466
|
+
"data-slot": "input-otp-slot",
|
|
1467
|
+
"data-active": isActive,
|
|
1468
|
+
className: cn(
|
|
1469
|
+
"relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50",
|
|
1470
|
+
className
|
|
1471
|
+
),
|
|
1472
|
+
...props,
|
|
1473
|
+
children: [
|
|
1474
|
+
char,
|
|
1475
|
+
hasFakeCaret ? /* @__PURE__ */ jsx23("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx23("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) }) : null
|
|
1476
|
+
]
|
|
1477
|
+
}
|
|
1478
|
+
);
|
|
1479
|
+
}
|
|
1480
|
+
function InputOTPSeparator({ ...props }) {
|
|
1481
|
+
return /* @__PURE__ */ jsx23("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx23(MinusIcon, {}) });
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
// src/ui/item.tsx
|
|
1485
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
1486
|
+
function Item({ className, ...props }) {
|
|
1487
|
+
return /* @__PURE__ */ jsx24(
|
|
1488
|
+
"div",
|
|
1489
|
+
{
|
|
1490
|
+
"data-slot": "item",
|
|
1491
|
+
className: cn(
|
|
1492
|
+
"group/item flex items-center gap-3 rounded-lg border border-border p-3 text-sm",
|
|
1493
|
+
className
|
|
1494
|
+
),
|
|
1495
|
+
...props
|
|
1496
|
+
}
|
|
1497
|
+
);
|
|
1498
|
+
}
|
|
1499
|
+
function ItemMedia({ className, ...props }) {
|
|
1500
|
+
return /* @__PURE__ */ jsx24(
|
|
1501
|
+
"div",
|
|
1502
|
+
{
|
|
1503
|
+
"data-slot": "item-media",
|
|
1504
|
+
className: cn(
|
|
1505
|
+
"flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-5",
|
|
1506
|
+
className
|
|
1507
|
+
),
|
|
1508
|
+
...props
|
|
1509
|
+
}
|
|
1510
|
+
);
|
|
1511
|
+
}
|
|
1512
|
+
function ItemContent({ className, ...props }) {
|
|
1513
|
+
return /* @__PURE__ */ jsx24(
|
|
1514
|
+
"div",
|
|
1515
|
+
{
|
|
1516
|
+
"data-slot": "item-content",
|
|
1517
|
+
className: cn("flex min-w-0 flex-1 flex-col gap-0.5", className),
|
|
1518
|
+
...props
|
|
1519
|
+
}
|
|
1520
|
+
);
|
|
1521
|
+
}
|
|
1522
|
+
function ItemTitle({ className, ...props }) {
|
|
1523
|
+
return /* @__PURE__ */ jsx24(
|
|
1524
|
+
"div",
|
|
1525
|
+
{
|
|
1526
|
+
"data-slot": "item-title",
|
|
1527
|
+
className: cn("line-clamp-1 font-medium", className),
|
|
1528
|
+
...props
|
|
1529
|
+
}
|
|
1530
|
+
);
|
|
1531
|
+
}
|
|
1532
|
+
function ItemDescription({ className, ...props }) {
|
|
1533
|
+
return /* @__PURE__ */ jsx24(
|
|
1534
|
+
"p",
|
|
1535
|
+
{
|
|
1536
|
+
"data-slot": "item-description",
|
|
1537
|
+
className: cn("line-clamp-2 text-xs text-muted-foreground", className),
|
|
1538
|
+
...props
|
|
1539
|
+
}
|
|
1540
|
+
);
|
|
1541
|
+
}
|
|
1542
|
+
function ItemActions({ className, ...props }) {
|
|
1543
|
+
return /* @__PURE__ */ jsx24(
|
|
1544
|
+
"div",
|
|
1545
|
+
{
|
|
1546
|
+
"data-slot": "item-actions",
|
|
1547
|
+
className: cn("flex shrink-0 items-center gap-2", className),
|
|
1548
|
+
...props
|
|
1549
|
+
}
|
|
1550
|
+
);
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
// src/ui/kbd.tsx
|
|
1554
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
1555
|
+
function Kbd({ className, ...props }) {
|
|
1556
|
+
return /* @__PURE__ */ jsx25(
|
|
1557
|
+
"kbd",
|
|
1558
|
+
{
|
|
1559
|
+
"data-slot": "kbd",
|
|
1560
|
+
className: cn(
|
|
1561
|
+
"pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none",
|
|
1562
|
+
className
|
|
1563
|
+
),
|
|
1564
|
+
...props
|
|
1565
|
+
}
|
|
1566
|
+
);
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
// src/ui/label.tsx
|
|
1570
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
1571
|
+
function Label({
|
|
1572
|
+
className,
|
|
1573
|
+
...props
|
|
1574
|
+
}) {
|
|
1575
|
+
return /* @__PURE__ */ jsx26(
|
|
1576
|
+
"label",
|
|
1577
|
+
{
|
|
1578
|
+
"data-slot": "label",
|
|
1579
|
+
className: cn(
|
|
1580
|
+
"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",
|
|
1581
|
+
className
|
|
1582
|
+
),
|
|
1583
|
+
...props
|
|
1584
|
+
}
|
|
1585
|
+
);
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
// src/ui/menubar.tsx
|
|
1589
|
+
import { Menu as MenuPrimitive2 } from "@base-ui/react/menu";
|
|
1590
|
+
import { Menubar as MenubarPrimitive } from "@base-ui/react/menubar";
|
|
1591
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
1592
|
+
function Menubar({
|
|
1593
|
+
className,
|
|
1594
|
+
...props
|
|
1595
|
+
}) {
|
|
1596
|
+
return /* @__PURE__ */ jsx27(
|
|
1597
|
+
MenubarPrimitive,
|
|
1598
|
+
{
|
|
1599
|
+
"data-slot": "menubar",
|
|
1600
|
+
className: cn(
|
|
1601
|
+
"flex h-9 items-center gap-1 rounded-md border border-border bg-background p-1 shadow-xs",
|
|
1602
|
+
className
|
|
1603
|
+
),
|
|
1604
|
+
...props
|
|
1605
|
+
}
|
|
1606
|
+
);
|
|
1607
|
+
}
|
|
1608
|
+
function MenubarMenu({
|
|
1609
|
+
...props
|
|
1610
|
+
}) {
|
|
1611
|
+
return /* @__PURE__ */ jsx27(MenuPrimitive2.Root, { "data-slot": "menubar-menu", ...props });
|
|
1612
|
+
}
|
|
1613
|
+
function MenubarTrigger({
|
|
1614
|
+
className,
|
|
1615
|
+
...props
|
|
1616
|
+
}) {
|
|
1617
|
+
return /* @__PURE__ */ jsx27(
|
|
1618
|
+
MenuPrimitive2.Trigger,
|
|
1619
|
+
{
|
|
1620
|
+
"data-slot": "menubar-trigger",
|
|
1621
|
+
className: cn(
|
|
1622
|
+
"flex cursor-pointer items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground",
|
|
1623
|
+
className
|
|
1624
|
+
),
|
|
1625
|
+
...props
|
|
1626
|
+
}
|
|
1627
|
+
);
|
|
1628
|
+
}
|
|
1629
|
+
function MenubarContent({
|
|
1630
|
+
className,
|
|
1631
|
+
align = "start",
|
|
1632
|
+
side = "bottom",
|
|
1633
|
+
sideOffset = 8,
|
|
1634
|
+
...props
|
|
1635
|
+
}) {
|
|
1636
|
+
return /* @__PURE__ */ jsx27(MenuPrimitive2.Portal, { children: /* @__PURE__ */ jsx27(
|
|
1637
|
+
MenuPrimitive2.Positioner,
|
|
1638
|
+
{
|
|
1639
|
+
align,
|
|
1640
|
+
side,
|
|
1641
|
+
sideOffset,
|
|
1642
|
+
className: "isolate z-50",
|
|
1643
|
+
children: /* @__PURE__ */ jsx27(
|
|
1644
|
+
MenuPrimitive2.Popup,
|
|
1645
|
+
{
|
|
1646
|
+
"data-slot": "menubar-content",
|
|
1647
|
+
className: cn(
|
|
1648
|
+
"z-50 min-w-36 origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1649
|
+
className
|
|
1650
|
+
),
|
|
1651
|
+
...props
|
|
1652
|
+
}
|
|
1653
|
+
)
|
|
1654
|
+
}
|
|
1655
|
+
) });
|
|
1656
|
+
}
|
|
1657
|
+
function MenubarItem({
|
|
1658
|
+
className,
|
|
1659
|
+
variant = "default",
|
|
1660
|
+
...props
|
|
1661
|
+
}) {
|
|
1662
|
+
return /* @__PURE__ */ jsx27(
|
|
1663
|
+
MenuPrimitive2.Item,
|
|
1664
|
+
{
|
|
1665
|
+
"data-slot": "menubar-item",
|
|
1666
|
+
"data-variant": variant,
|
|
1667
|
+
className: cn(
|
|
1668
|
+
"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1669
|
+
className
|
|
1670
|
+
),
|
|
1671
|
+
...props
|
|
1672
|
+
}
|
|
1673
|
+
);
|
|
1674
|
+
}
|
|
1675
|
+
function MenubarSeparator({
|
|
1676
|
+
className,
|
|
1677
|
+
...props
|
|
1678
|
+
}) {
|
|
1679
|
+
return /* @__PURE__ */ jsx27(
|
|
1680
|
+
MenuPrimitive2.Separator,
|
|
1681
|
+
{
|
|
1682
|
+
"data-slot": "menubar-separator",
|
|
1683
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1684
|
+
...props
|
|
1685
|
+
}
|
|
1686
|
+
);
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
// src/ui/navigation-menu.tsx
|
|
1690
|
+
import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu";
|
|
1691
|
+
import { ChevronDownIcon as ChevronDownIcon2 } from "lucide-react";
|
|
1692
|
+
import { cva as cva3 } from "class-variance-authority";
|
|
1693
|
+
import { jsx as jsx28, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1694
|
+
function NavigationMenu({
|
|
1695
|
+
className,
|
|
1696
|
+
children,
|
|
1697
|
+
...props
|
|
1698
|
+
}) {
|
|
1699
|
+
return /* @__PURE__ */ jsxs9(
|
|
1700
|
+
NavigationMenuPrimitive.Root,
|
|
1701
|
+
{
|
|
1702
|
+
"data-slot": "navigation-menu",
|
|
1703
|
+
className: cn("relative z-10 flex max-w-max items-center justify-center", className),
|
|
1704
|
+
...props,
|
|
1705
|
+
children: [
|
|
1706
|
+
children,
|
|
1707
|
+
/* @__PURE__ */ jsx28(NavigationMenuViewport, {})
|
|
1708
|
+
]
|
|
1709
|
+
}
|
|
1710
|
+
);
|
|
1711
|
+
}
|
|
1712
|
+
function NavigationMenuList({
|
|
1713
|
+
className,
|
|
1714
|
+
...props
|
|
1715
|
+
}) {
|
|
1716
|
+
return /* @__PURE__ */ jsx28(
|
|
1717
|
+
NavigationMenuPrimitive.List,
|
|
1718
|
+
{
|
|
1719
|
+
"data-slot": "navigation-menu-list",
|
|
1720
|
+
className: cn("flex flex-1 list-none items-center justify-center gap-1", className),
|
|
1721
|
+
...props
|
|
1722
|
+
}
|
|
1723
|
+
);
|
|
1724
|
+
}
|
|
1725
|
+
function NavigationMenuItem({
|
|
1726
|
+
className,
|
|
1727
|
+
...props
|
|
1728
|
+
}) {
|
|
1729
|
+
return /* @__PURE__ */ jsx28(
|
|
1730
|
+
NavigationMenuPrimitive.Item,
|
|
1731
|
+
{
|
|
1732
|
+
"data-slot": "navigation-menu-item",
|
|
1733
|
+
className: cn("relative", className),
|
|
1734
|
+
...props
|
|
1735
|
+
}
|
|
1736
|
+
);
|
|
1737
|
+
}
|
|
1738
|
+
var navigationMenuTriggerStyle = cva3(
|
|
1739
|
+
"group/navigation-menu-trigger 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-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-open:bg-accent/50 data-open:text-accent-foreground"
|
|
1740
|
+
);
|
|
1741
|
+
function NavigationMenuTrigger({
|
|
1742
|
+
className,
|
|
1743
|
+
children,
|
|
1744
|
+
...props
|
|
1745
|
+
}) {
|
|
1746
|
+
return /* @__PURE__ */ jsxs9(
|
|
1747
|
+
NavigationMenuPrimitive.Trigger,
|
|
1748
|
+
{
|
|
1749
|
+
"data-slot": "navigation-menu-trigger",
|
|
1750
|
+
className: cn(navigationMenuTriggerStyle(), className),
|
|
1751
|
+
...props,
|
|
1752
|
+
children: [
|
|
1753
|
+
children,
|
|
1754
|
+
/* @__PURE__ */ jsx28(
|
|
1755
|
+
ChevronDownIcon2,
|
|
1756
|
+
{
|
|
1757
|
+
className: "relative top-px ml-1 size-3 transition-transform duration-200 group-data-open/navigation-menu-trigger:rotate-180",
|
|
1758
|
+
"aria-hidden": "true"
|
|
1759
|
+
}
|
|
1760
|
+
)
|
|
1761
|
+
]
|
|
1762
|
+
}
|
|
1763
|
+
);
|
|
1764
|
+
}
|
|
1765
|
+
function NavigationMenuContent({
|
|
1766
|
+
className,
|
|
1767
|
+
...props
|
|
1768
|
+
}) {
|
|
1769
|
+
return /* @__PURE__ */ jsx28(
|
|
1770
|
+
NavigationMenuPrimitive.Content,
|
|
1771
|
+
{
|
|
1772
|
+
"data-slot": "navigation-menu-content",
|
|
1773
|
+
className: cn(
|
|
1774
|
+
"w-full p-2 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[instant]:transition-none **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
|
|
1775
|
+
className
|
|
1776
|
+
),
|
|
1777
|
+
...props
|
|
1778
|
+
}
|
|
1779
|
+
);
|
|
1780
|
+
}
|
|
1781
|
+
function NavigationMenuViewport({ className }) {
|
|
1782
|
+
return /* @__PURE__ */ jsx28(NavigationMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx28(
|
|
1783
|
+
NavigationMenuPrimitive.Positioner,
|
|
1784
|
+
{
|
|
1785
|
+
side: "bottom",
|
|
1786
|
+
align: "start",
|
|
1787
|
+
className: "isolate z-50",
|
|
1788
|
+
children: /* @__PURE__ */ jsx28(
|
|
1789
|
+
NavigationMenuPrimitive.Popup,
|
|
1790
|
+
{
|
|
1791
|
+
"data-slot": "navigation-menu-popup",
|
|
1792
|
+
className: cn(
|
|
1793
|
+
"origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1794
|
+
className
|
|
1795
|
+
),
|
|
1796
|
+
children: /* @__PURE__ */ jsx28(NavigationMenuPrimitive.Viewport, { "data-slot": "navigation-menu-viewport" })
|
|
1797
|
+
}
|
|
1798
|
+
)
|
|
1799
|
+
}
|
|
1800
|
+
) });
|
|
1801
|
+
}
|
|
1802
|
+
function NavigationMenuLink({
|
|
1803
|
+
className,
|
|
1804
|
+
...props
|
|
1805
|
+
}) {
|
|
1806
|
+
return /* @__PURE__ */ jsx28(
|
|
1807
|
+
NavigationMenuPrimitive.Link,
|
|
1808
|
+
{
|
|
1809
|
+
"data-slot": "navigation-menu-link",
|
|
1810
|
+
className: cn(
|
|
1811
|
+
"flex flex-col gap-1 rounded-md p-2 text-sm transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 data-active:bg-accent/50 data-active:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
|
|
1812
|
+
className
|
|
1813
|
+
),
|
|
1814
|
+
...props
|
|
1815
|
+
}
|
|
1816
|
+
);
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
// src/ui/pagination.tsx
|
|
1820
|
+
import { ChevronLeftIcon as ChevronLeftIcon3, ChevronRightIcon as ChevronRightIcon5, MoreHorizontalIcon as MoreHorizontalIcon2 } from "lucide-react";
|
|
1821
|
+
import { jsx as jsx29, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1822
|
+
function Pagination({ className, ...props }) {
|
|
1823
|
+
return /* @__PURE__ */ jsx29(
|
|
1824
|
+
"nav",
|
|
1825
|
+
{
|
|
1826
|
+
role: "navigation",
|
|
1827
|
+
"aria-label": "pagination",
|
|
1828
|
+
"data-slot": "pagination",
|
|
1829
|
+
className: cn("mx-auto flex w-full justify-center", className),
|
|
1830
|
+
...props
|
|
1831
|
+
}
|
|
1832
|
+
);
|
|
1833
|
+
}
|
|
1834
|
+
function PaginationContent({ className, ...props }) {
|
|
1835
|
+
return /* @__PURE__ */ jsx29(
|
|
1836
|
+
"ul",
|
|
1837
|
+
{
|
|
1838
|
+
"data-slot": "pagination-content",
|
|
1839
|
+
className: cn("flex flex-row items-center gap-1", className),
|
|
1840
|
+
...props
|
|
1841
|
+
}
|
|
1842
|
+
);
|
|
1843
|
+
}
|
|
1844
|
+
function PaginationItem({ ...props }) {
|
|
1845
|
+
return /* @__PURE__ */ jsx29("li", { "data-slot": "pagination-item", ...props });
|
|
1846
|
+
}
|
|
1847
|
+
function PaginationLink({
|
|
1848
|
+
className,
|
|
1849
|
+
isActive,
|
|
1850
|
+
disabled,
|
|
1851
|
+
...props
|
|
1852
|
+
}) {
|
|
1853
|
+
return /* @__PURE__ */ jsx29(
|
|
1854
|
+
"a",
|
|
1855
|
+
{
|
|
1856
|
+
"aria-current": isActive ? "page" : void 0,
|
|
1857
|
+
"aria-disabled": disabled || void 0,
|
|
1858
|
+
tabIndex: disabled ? -1 : void 0,
|
|
1859
|
+
"data-slot": "pagination-link",
|
|
1860
|
+
"data-active": isActive || void 0,
|
|
1861
|
+
className: cn(
|
|
1862
|
+
buttonVariants({
|
|
1863
|
+
variant: isActive ? "outline" : "ghost"
|
|
1864
|
+
}),
|
|
1865
|
+
disabled && "pointer-events-none opacity-50",
|
|
1866
|
+
className
|
|
1867
|
+
),
|
|
1868
|
+
...props
|
|
1869
|
+
}
|
|
1870
|
+
);
|
|
1871
|
+
}
|
|
1872
|
+
function PaginationPrevious({
|
|
1873
|
+
className,
|
|
1874
|
+
...props
|
|
1875
|
+
}) {
|
|
1876
|
+
return /* @__PURE__ */ jsxs10(
|
|
1877
|
+
PaginationLink,
|
|
1878
|
+
{
|
|
1879
|
+
"aria-label": "Go to previous page",
|
|
1880
|
+
className: cn("gap-1 px-2.5 sm:pl-2.5", className),
|
|
1881
|
+
...props,
|
|
1882
|
+
children: [
|
|
1883
|
+
/* @__PURE__ */ jsx29(ChevronLeftIcon3, {}),
|
|
1884
|
+
/* @__PURE__ */ jsx29("span", { className: "hidden sm:block", children: "Previous" })
|
|
1885
|
+
]
|
|
1886
|
+
}
|
|
1887
|
+
);
|
|
1888
|
+
}
|
|
1889
|
+
function PaginationNext({
|
|
1890
|
+
className,
|
|
1891
|
+
...props
|
|
1892
|
+
}) {
|
|
1893
|
+
return /* @__PURE__ */ jsxs10(
|
|
1894
|
+
PaginationLink,
|
|
1895
|
+
{
|
|
1896
|
+
"aria-label": "Go to next page",
|
|
1897
|
+
className: cn("gap-1 px-2.5 sm:pr-2.5", className),
|
|
1898
|
+
...props,
|
|
1899
|
+
children: [
|
|
1900
|
+
/* @__PURE__ */ jsx29("span", { className: "hidden sm:block", children: "Next" }),
|
|
1901
|
+
/* @__PURE__ */ jsx29(ChevronRightIcon5, {})
|
|
1902
|
+
]
|
|
1903
|
+
}
|
|
1904
|
+
);
|
|
1905
|
+
}
|
|
1906
|
+
function PaginationEllipsis({ className, ...props }) {
|
|
1907
|
+
return /* @__PURE__ */ jsxs10(
|
|
1908
|
+
"span",
|
|
1909
|
+
{
|
|
1910
|
+
"aria-hidden": true,
|
|
1911
|
+
"data-slot": "pagination-ellipsis",
|
|
1912
|
+
className: cn("flex size-9 items-center justify-center", className),
|
|
1913
|
+
...props,
|
|
1914
|
+
children: [
|
|
1915
|
+
/* @__PURE__ */ jsx29(MoreHorizontalIcon2, { className: "size-4" }),
|
|
1916
|
+
/* @__PURE__ */ jsx29("span", { className: "sr-only", children: "More pages" })
|
|
1917
|
+
]
|
|
1918
|
+
}
|
|
1919
|
+
);
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
// src/ui/progress.tsx
|
|
1923
|
+
import { Progress as ProgressPrimitive } from "@base-ui/react/progress";
|
|
1924
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
1925
|
+
function Progress({ className, ...props }) {
|
|
1926
|
+
return /* @__PURE__ */ jsx30(
|
|
1927
|
+
ProgressPrimitive.Root,
|
|
1928
|
+
{
|
|
1929
|
+
"data-slot": "progress",
|
|
1930
|
+
className: cn("relative w-full", className),
|
|
1931
|
+
...props
|
|
1932
|
+
}
|
|
1933
|
+
);
|
|
1934
|
+
}
|
|
1935
|
+
function ProgressTrack({ className, ...props }) {
|
|
1936
|
+
return /* @__PURE__ */ jsx30(
|
|
1937
|
+
ProgressPrimitive.Track,
|
|
1938
|
+
{
|
|
1939
|
+
"data-slot": "progress-track",
|
|
1940
|
+
className: cn("h-2 w-full overflow-hidden rounded-full bg-muted", className),
|
|
1941
|
+
...props
|
|
1942
|
+
}
|
|
1943
|
+
);
|
|
1944
|
+
}
|
|
1945
|
+
function ProgressIndicator({
|
|
1946
|
+
className,
|
|
1947
|
+
...props
|
|
1948
|
+
}) {
|
|
1949
|
+
return /* @__PURE__ */ jsx30(
|
|
1950
|
+
ProgressPrimitive.Indicator,
|
|
1951
|
+
{
|
|
1952
|
+
"data-slot": "progress-indicator",
|
|
1953
|
+
className: cn(
|
|
1954
|
+
"h-full bg-primary transition-[width] duration-300 ease-in-out",
|
|
1955
|
+
className
|
|
1956
|
+
),
|
|
1957
|
+
...props
|
|
1958
|
+
}
|
|
1959
|
+
);
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
// src/ui/radio-group.tsx
|
|
1963
|
+
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
1964
|
+
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
1965
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
1966
|
+
function RadioGroup({ className, ...props }) {
|
|
1967
|
+
return /* @__PURE__ */ jsx31(
|
|
1968
|
+
RadioGroupPrimitive,
|
|
1969
|
+
{
|
|
1970
|
+
"data-slot": "radio-group",
|
|
1971
|
+
className: cn("grid gap-3", className),
|
|
1972
|
+
...props
|
|
1973
|
+
}
|
|
1974
|
+
);
|
|
1975
|
+
}
|
|
1976
|
+
function RadioGroupItem({ className, ...props }) {
|
|
1977
|
+
return /* @__PURE__ */ jsx31(
|
|
1978
|
+
RadioPrimitive.Root,
|
|
1979
|
+
{
|
|
1980
|
+
"data-slot": "radio-group-item",
|
|
1981
|
+
className: cn(
|
|
1982
|
+
"aspect-square size-4 shrink-0 cursor-pointer rounded-full border border-input shadow-xs transition-colors outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-checked:border-primary",
|
|
1983
|
+
className
|
|
1984
|
+
),
|
|
1985
|
+
...props,
|
|
1986
|
+
children: /* @__PURE__ */ jsx31(
|
|
1987
|
+
RadioPrimitive.Indicator,
|
|
1988
|
+
{
|
|
1989
|
+
"data-slot": "radio-group-indicator",
|
|
1990
|
+
className: "flex items-center justify-center",
|
|
1991
|
+
children: /* @__PURE__ */ jsx31("span", { className: "size-2 rounded-full bg-primary" })
|
|
1992
|
+
}
|
|
1993
|
+
)
|
|
1994
|
+
}
|
|
1995
|
+
);
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
// src/ui/resizable.tsx
|
|
1999
|
+
import { GripVerticalIcon } from "lucide-react";
|
|
2000
|
+
import {
|
|
2001
|
+
Group as PanelGroupPrimitive,
|
|
2002
|
+
Panel as PanelPrimitive,
|
|
2003
|
+
Separator as PanelResizeHandlePrimitive
|
|
2004
|
+
} from "react-resizable-panels";
|
|
2005
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
2006
|
+
function PanelGroup({
|
|
2007
|
+
className,
|
|
2008
|
+
...props
|
|
2009
|
+
}) {
|
|
2010
|
+
return /* @__PURE__ */ jsx32(
|
|
2011
|
+
PanelGroupPrimitive,
|
|
2012
|
+
{
|
|
2013
|
+
"data-slot": "resizable-panel-group",
|
|
2014
|
+
className: cn(
|
|
2015
|
+
"flex h-full w-full data-[orientation=vertical]:flex-col",
|
|
2016
|
+
className
|
|
2017
|
+
),
|
|
2018
|
+
...props
|
|
2019
|
+
}
|
|
2020
|
+
);
|
|
2021
|
+
}
|
|
2022
|
+
function Panel({ ...props }) {
|
|
2023
|
+
return /* @__PURE__ */ jsx32(PanelPrimitive, { "data-slot": "resizable-panel", ...props });
|
|
2024
|
+
}
|
|
2025
|
+
function ResizableHandle({
|
|
2026
|
+
withHandle,
|
|
2027
|
+
className,
|
|
2028
|
+
...props
|
|
2029
|
+
}) {
|
|
2030
|
+
return /* @__PURE__ */ jsx32(
|
|
2031
|
+
PanelResizeHandlePrimitive,
|
|
2032
|
+
{
|
|
2033
|
+
"data-slot": "resizable-handle",
|
|
2034
|
+
className: cn(
|
|
2035
|
+
"relative flex w-px items-center justify-center bg-border 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-ring focus-visible:ring-offset-1 focus-visible:outline-none data-[orientation=vertical]:h-px data-[orientation=vertical]:w-full data-[orientation=vertical]:after:left-0 data-[orientation=vertical]:after:h-1 data-[orientation=vertical]:after:w-full data-[orientation=vertical]:after:translate-x-0 data-[orientation=vertical]:after:-translate-y-1/2 [&[data-orientation=vertical]>div]:rotate-90",
|
|
2036
|
+
className
|
|
2037
|
+
),
|
|
2038
|
+
...props,
|
|
2039
|
+
children: withHandle ? /* @__PURE__ */ jsx32("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border border-border bg-border", children: /* @__PURE__ */ jsx32(GripVerticalIcon, { className: "size-2.5" }) }) : null
|
|
2040
|
+
}
|
|
2041
|
+
);
|
|
2042
|
+
}
|
|
2043
|
+
|
|
2044
|
+
// src/ui/scroll-area.tsx
|
|
2045
|
+
import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
|
|
2046
|
+
import { jsx as jsx33, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2047
|
+
function ScrollArea({
|
|
2048
|
+
className,
|
|
2049
|
+
children,
|
|
2050
|
+
...props
|
|
2051
|
+
}) {
|
|
2052
|
+
return /* @__PURE__ */ jsxs11(
|
|
2053
|
+
ScrollAreaPrimitive.Root,
|
|
2054
|
+
{
|
|
2055
|
+
"data-slot": "scroll-area",
|
|
2056
|
+
className: cn("relative overflow-hidden", className),
|
|
2057
|
+
...props,
|
|
2058
|
+
children: [
|
|
2059
|
+
/* @__PURE__ */ jsx33(
|
|
2060
|
+
ScrollAreaPrimitive.Viewport,
|
|
2061
|
+
{
|
|
2062
|
+
"data-slot": "scroll-area-viewport",
|
|
2063
|
+
className: "size-full rounded-[inherit] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
2064
|
+
children
|
|
2065
|
+
}
|
|
2066
|
+
),
|
|
2067
|
+
/* @__PURE__ */ jsx33(ScrollBar, {}),
|
|
2068
|
+
/* @__PURE__ */ jsx33(ScrollAreaPrimitive.Corner, {})
|
|
2069
|
+
]
|
|
2070
|
+
}
|
|
2071
|
+
);
|
|
2072
|
+
}
|
|
2073
|
+
function ScrollBar({
|
|
2074
|
+
className,
|
|
2075
|
+
orientation = "vertical",
|
|
2076
|
+
...props
|
|
2077
|
+
}) {
|
|
2078
|
+
return /* @__PURE__ */ jsx33(
|
|
2079
|
+
ScrollAreaPrimitive.Scrollbar,
|
|
2080
|
+
{
|
|
2081
|
+
"data-slot": "scroll-area-scrollbar",
|
|
2082
|
+
orientation,
|
|
2083
|
+
className: cn(
|
|
2084
|
+
"flex touch-none p-px transition-colors select-none",
|
|
2085
|
+
orientation === "vertical" && "h-full w-2 border-l border-l-transparent",
|
|
2086
|
+
orientation === "horizontal" && "h-2 flex-col border-t border-t-transparent",
|
|
2087
|
+
className
|
|
2088
|
+
),
|
|
2089
|
+
...props,
|
|
2090
|
+
children: /* @__PURE__ */ jsx33(
|
|
2091
|
+
ScrollAreaPrimitive.Thumb,
|
|
2092
|
+
{
|
|
2093
|
+
"data-slot": "scroll-area-thumb",
|
|
2094
|
+
className: "relative flex-1 rounded-full bg-border"
|
|
2095
|
+
}
|
|
2096
|
+
)
|
|
2097
|
+
}
|
|
2098
|
+
);
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2101
|
+
// src/ui/select.tsx
|
|
2102
|
+
import { Select as SelectPrimitive } from "@base-ui/react/select";
|
|
2103
|
+
import { CheckIcon as CheckIcon2, ChevronDownIcon as ChevronDownIcon3, ChevronUpIcon } from "lucide-react";
|
|
2104
|
+
import { jsx as jsx34, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
2105
|
+
var Select = SelectPrimitive.Root;
|
|
2106
|
+
function SelectGroup({
|
|
2107
|
+
...props
|
|
2108
|
+
}) {
|
|
2109
|
+
return /* @__PURE__ */ jsx34(SelectPrimitive.Group, { "data-slot": "select-group", ...props });
|
|
2110
|
+
}
|
|
2111
|
+
function SelectValue({
|
|
2112
|
+
...props
|
|
2113
|
+
}) {
|
|
2114
|
+
return /* @__PURE__ */ jsx34(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
|
|
2115
|
+
}
|
|
2116
|
+
function SelectTrigger({
|
|
2117
|
+
className,
|
|
2118
|
+
size = "default",
|
|
2119
|
+
children,
|
|
2120
|
+
...props
|
|
2121
|
+
}) {
|
|
2122
|
+
return /* @__PURE__ */ jsxs12(
|
|
2123
|
+
SelectPrimitive.Trigger,
|
|
2124
|
+
{
|
|
2125
|
+
"data-slot": "select-trigger",
|
|
2126
|
+
"data-size": size,
|
|
2127
|
+
className: cn(
|
|
2128
|
+
"flex w-fit cursor-pointer items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-colors outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 data-[placeholder]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2129
|
+
className
|
|
2130
|
+
),
|
|
2131
|
+
...props,
|
|
2132
|
+
children: [
|
|
2133
|
+
children,
|
|
2134
|
+
/* @__PURE__ */ jsx34(
|
|
2135
|
+
SelectPrimitive.Icon,
|
|
2136
|
+
{
|
|
2137
|
+
render: /* @__PURE__ */ jsx34(ChevronDownIcon3, { className: "size-4 opacity-50" })
|
|
2138
|
+
}
|
|
2139
|
+
)
|
|
2140
|
+
]
|
|
2141
|
+
}
|
|
2142
|
+
);
|
|
2143
|
+
}
|
|
2144
|
+
function SelectContent({
|
|
2145
|
+
className,
|
|
2146
|
+
children,
|
|
2147
|
+
side = "bottom",
|
|
2148
|
+
sideOffset = 4,
|
|
2149
|
+
align = "center",
|
|
2150
|
+
alignItemWithTrigger = false,
|
|
2151
|
+
...props
|
|
2152
|
+
}) {
|
|
2153
|
+
return /* @__PURE__ */ jsx34(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx34(
|
|
2154
|
+
SelectPrimitive.Positioner,
|
|
2155
|
+
{
|
|
2156
|
+
side,
|
|
2157
|
+
sideOffset,
|
|
2158
|
+
align,
|
|
2159
|
+
alignItemWithTrigger,
|
|
2160
|
+
className: "isolate z-50",
|
|
2161
|
+
children: /* @__PURE__ */ jsxs12(
|
|
2162
|
+
SelectPrimitive.Popup,
|
|
2163
|
+
{
|
|
2164
|
+
"data-slot": "select-content",
|
|
2165
|
+
className: cn(
|
|
2166
|
+
"relative z-50 max-h-96 min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
2167
|
+
className
|
|
2168
|
+
),
|
|
2169
|
+
...props,
|
|
2170
|
+
children: [
|
|
2171
|
+
/* @__PURE__ */ jsx34(SelectScrollUpButton, {}),
|
|
2172
|
+
/* @__PURE__ */ jsx34(SelectPrimitive.List, { className: "p-1", children }),
|
|
2173
|
+
/* @__PURE__ */ jsx34(SelectScrollDownButton, {})
|
|
2174
|
+
]
|
|
2175
|
+
}
|
|
2176
|
+
)
|
|
2177
|
+
}
|
|
2178
|
+
) });
|
|
2179
|
+
}
|
|
2180
|
+
function SelectLabel({
|
|
2181
|
+
className,
|
|
2182
|
+
...props
|
|
2183
|
+
}) {
|
|
2184
|
+
return /* @__PURE__ */ jsx34(
|
|
2185
|
+
SelectPrimitive.GroupLabel,
|
|
2186
|
+
{
|
|
2187
|
+
"data-slot": "select-label",
|
|
2188
|
+
className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
|
|
2189
|
+
...props
|
|
2190
|
+
}
|
|
2191
|
+
);
|
|
2192
|
+
}
|
|
2193
|
+
function SelectItem({
|
|
2194
|
+
className,
|
|
2195
|
+
children,
|
|
2196
|
+
...props
|
|
2197
|
+
}) {
|
|
2198
|
+
return /* @__PURE__ */ jsxs12(
|
|
2199
|
+
SelectPrimitive.Item,
|
|
2200
|
+
{
|
|
2201
|
+
"data-slot": "select-item",
|
|
2202
|
+
className: cn(
|
|
2203
|
+
"relative flex w-full cursor-pointer items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2204
|
+
className
|
|
2205
|
+
),
|
|
2206
|
+
...props,
|
|
2207
|
+
children: [
|
|
2208
|
+
/* @__PURE__ */ jsx34("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx34(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx34(CheckIcon2, { className: "size-4" }) }) }),
|
|
2209
|
+
/* @__PURE__ */ jsx34(SelectPrimitive.ItemText, { children })
|
|
2210
|
+
]
|
|
2211
|
+
}
|
|
2212
|
+
);
|
|
2213
|
+
}
|
|
2214
|
+
function SelectSeparator({
|
|
2215
|
+
className,
|
|
2216
|
+
...props
|
|
2217
|
+
}) {
|
|
2218
|
+
return /* @__PURE__ */ jsx34(
|
|
2219
|
+
SelectPrimitive.Separator,
|
|
2220
|
+
{
|
|
2221
|
+
"data-slot": "select-separator",
|
|
2222
|
+
className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
|
|
2223
|
+
...props
|
|
2224
|
+
}
|
|
2225
|
+
);
|
|
2226
|
+
}
|
|
2227
|
+
function SelectScrollUpButton({
|
|
2228
|
+
className,
|
|
2229
|
+
...props
|
|
2230
|
+
}) {
|
|
2231
|
+
return /* @__PURE__ */ jsx34(
|
|
2232
|
+
SelectPrimitive.ScrollUpArrow,
|
|
2233
|
+
{
|
|
2234
|
+
"data-slot": "select-scroll-up-button",
|
|
2235
|
+
className: cn(
|
|
2236
|
+
"flex cursor-default items-center justify-center py-1",
|
|
2237
|
+
className
|
|
2238
|
+
),
|
|
2239
|
+
...props,
|
|
2240
|
+
children: /* @__PURE__ */ jsx34(ChevronUpIcon, { className: "size-4" })
|
|
2241
|
+
}
|
|
2242
|
+
);
|
|
2243
|
+
}
|
|
2244
|
+
function SelectScrollDownButton({
|
|
2245
|
+
className,
|
|
2246
|
+
...props
|
|
2247
|
+
}) {
|
|
2248
|
+
return /* @__PURE__ */ jsx34(
|
|
2249
|
+
SelectPrimitive.ScrollDownArrow,
|
|
2250
|
+
{
|
|
2251
|
+
"data-slot": "select-scroll-down-button",
|
|
2252
|
+
className: cn(
|
|
2253
|
+
"flex cursor-default items-center justify-center py-1",
|
|
2254
|
+
className
|
|
2255
|
+
),
|
|
2256
|
+
...props,
|
|
2257
|
+
children: /* @__PURE__ */ jsx34(ChevronDownIcon3, { className: "size-4" })
|
|
2258
|
+
}
|
|
2259
|
+
);
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
// src/ui/separator.tsx
|
|
2263
|
+
import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
|
|
2264
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
2265
|
+
function Separator({
|
|
2266
|
+
className,
|
|
2267
|
+
orientation = "horizontal",
|
|
2268
|
+
decorative: _decorative,
|
|
2269
|
+
...props
|
|
2270
|
+
}) {
|
|
2271
|
+
return /* @__PURE__ */ jsx35(
|
|
2272
|
+
SeparatorPrimitive,
|
|
2273
|
+
{
|
|
2274
|
+
"data-slot": "separator",
|
|
2275
|
+
orientation,
|
|
2276
|
+
className: cn(
|
|
2277
|
+
"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
2278
|
+
className
|
|
2279
|
+
),
|
|
2280
|
+
...props
|
|
2281
|
+
}
|
|
2282
|
+
);
|
|
2283
|
+
}
|
|
2284
|
+
|
|
2285
|
+
// src/ui/sheet.tsx
|
|
2286
|
+
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
2287
|
+
import { XIcon } from "lucide-react";
|
|
2288
|
+
import { cva as cva4 } from "class-variance-authority";
|
|
2289
|
+
import { jsx as jsx36, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2290
|
+
function Sheet({
|
|
2291
|
+
...props
|
|
2292
|
+
}) {
|
|
2293
|
+
return /* @__PURE__ */ jsx36(DialogPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
2294
|
+
}
|
|
2295
|
+
function SheetTrigger({
|
|
2296
|
+
...props
|
|
2297
|
+
}) {
|
|
2298
|
+
return /* @__PURE__ */ jsx36(DialogPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
2299
|
+
}
|
|
2300
|
+
function SheetClose({
|
|
2301
|
+
...props
|
|
2302
|
+
}) {
|
|
2303
|
+
return /* @__PURE__ */ jsx36(DialogPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
2304
|
+
}
|
|
2305
|
+
function SheetPortal({
|
|
2306
|
+
...props
|
|
2307
|
+
}) {
|
|
2308
|
+
return /* @__PURE__ */ jsx36(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
2309
|
+
}
|
|
2310
|
+
function SheetOverlay({
|
|
2311
|
+
className,
|
|
2312
|
+
...props
|
|
2313
|
+
}) {
|
|
2314
|
+
return /* @__PURE__ */ jsx36(
|
|
2315
|
+
DialogPrimitive.Backdrop,
|
|
2316
|
+
{
|
|
2317
|
+
"data-slot": "sheet-overlay",
|
|
2318
|
+
className: cn(
|
|
2319
|
+
"fixed inset-0 z-50 bg-black/50 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
2320
|
+
className
|
|
2321
|
+
),
|
|
2322
|
+
...props
|
|
2323
|
+
}
|
|
2324
|
+
);
|
|
2325
|
+
}
|
|
2326
|
+
var sheetVariants = cva4(
|
|
2327
|
+
"fixed z-50 flex flex-col gap-4 border-border bg-background shadow-lg transition ease-in-out data-open:animate-in data-open:duration-300 data-closed:animate-out data-closed:duration-200",
|
|
2328
|
+
{
|
|
2329
|
+
variants: {
|
|
2330
|
+
side: {
|
|
2331
|
+
right: "inset-y-0 right-0 h-full w-3/4 border-l data-open:slide-in-from-right data-closed:slide-out-to-right sm:max-w-sm",
|
|
2332
|
+
left: "inset-y-0 left-0 h-full w-3/4 border-r data-open:slide-in-from-left data-closed:slide-out-to-left sm:max-w-sm",
|
|
2333
|
+
top: "inset-x-0 top-0 border-b data-open:slide-in-from-top data-closed:slide-out-to-top",
|
|
2334
|
+
bottom: "inset-x-0 bottom-0 border-t data-open:slide-in-from-bottom data-closed:slide-out-to-bottom"
|
|
2335
|
+
}
|
|
2336
|
+
},
|
|
2337
|
+
defaultVariants: {
|
|
2338
|
+
side: "right"
|
|
2339
|
+
}
|
|
2340
|
+
}
|
|
2341
|
+
);
|
|
2342
|
+
function SheetContent({
|
|
2343
|
+
className,
|
|
2344
|
+
children,
|
|
2345
|
+
side = "right",
|
|
2346
|
+
...props
|
|
2347
|
+
}) {
|
|
2348
|
+
return /* @__PURE__ */ jsxs13(SheetPortal, { "data-slot": "sheet-portal", children: [
|
|
2349
|
+
/* @__PURE__ */ jsx36(SheetOverlay, {}),
|
|
2350
|
+
/* @__PURE__ */ jsxs13(
|
|
2351
|
+
DialogPrimitive.Popup,
|
|
2352
|
+
{
|
|
2353
|
+
"data-slot": "sheet-content",
|
|
2354
|
+
className: cn(sheetVariants({ side }), className),
|
|
2355
|
+
...props,
|
|
2356
|
+
children: [
|
|
2357
|
+
children,
|
|
2358
|
+
/* @__PURE__ */ jsxs13(
|
|
2359
|
+
DialogPrimitive.Close,
|
|
2360
|
+
{
|
|
2361
|
+
"data-slot": "sheet-close",
|
|
2362
|
+
render: /* @__PURE__ */ jsx36(
|
|
2363
|
+
"button",
|
|
2364
|
+
{
|
|
2365
|
+
type: "button",
|
|
2366
|
+
className: "absolute top-4 right-4 cursor-pointer rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
|
|
2367
|
+
}
|
|
2368
|
+
),
|
|
2369
|
+
children: [
|
|
2370
|
+
/* @__PURE__ */ jsx36(XIcon, {}),
|
|
2371
|
+
/* @__PURE__ */ jsx36("span", { className: "sr-only", children: "Close" })
|
|
2372
|
+
]
|
|
2373
|
+
}
|
|
2374
|
+
)
|
|
2375
|
+
]
|
|
2376
|
+
}
|
|
2377
|
+
)
|
|
2378
|
+
] });
|
|
2379
|
+
}
|
|
2380
|
+
function SheetHeader({ className, ...props }) {
|
|
2381
|
+
return /* @__PURE__ */ jsx36(
|
|
2382
|
+
"div",
|
|
2383
|
+
{
|
|
2384
|
+
"data-slot": "sheet-header",
|
|
2385
|
+
className: cn("flex flex-col gap-1.5 p-4", className),
|
|
2386
|
+
...props
|
|
2387
|
+
}
|
|
2388
|
+
);
|
|
2389
|
+
}
|
|
2390
|
+
function SheetFooter({ className, ...props }) {
|
|
2391
|
+
return /* @__PURE__ */ jsx36(
|
|
2392
|
+
"div",
|
|
2393
|
+
{
|
|
2394
|
+
"data-slot": "sheet-footer",
|
|
2395
|
+
className: cn("mt-auto flex flex-col gap-2 p-4", className),
|
|
2396
|
+
...props
|
|
2397
|
+
}
|
|
2398
|
+
);
|
|
2399
|
+
}
|
|
2400
|
+
function SheetTitle({
|
|
2401
|
+
className,
|
|
2402
|
+
...props
|
|
2403
|
+
}) {
|
|
2404
|
+
return /* @__PURE__ */ jsx36(
|
|
2405
|
+
DialogPrimitive.Title,
|
|
2406
|
+
{
|
|
2407
|
+
"data-slot": "sheet-title",
|
|
2408
|
+
className: cn("font-semibold text-foreground", className),
|
|
2409
|
+
...props
|
|
2410
|
+
}
|
|
2411
|
+
);
|
|
2412
|
+
}
|
|
2413
|
+
function SheetDescription({
|
|
2414
|
+
className,
|
|
2415
|
+
...props
|
|
2416
|
+
}) {
|
|
2417
|
+
return /* @__PURE__ */ jsx36(
|
|
2418
|
+
DialogPrimitive.Description,
|
|
2419
|
+
{
|
|
2420
|
+
"data-slot": "sheet-description",
|
|
2421
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
2422
|
+
...props
|
|
2423
|
+
}
|
|
2424
|
+
);
|
|
2425
|
+
}
|
|
2426
|
+
|
|
2427
|
+
// src/ui/skeleton.tsx
|
|
2428
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
2429
|
+
function Skeleton({ className, ...props }) {
|
|
2430
|
+
return /* @__PURE__ */ jsx37(
|
|
2431
|
+
"div",
|
|
2432
|
+
{
|
|
2433
|
+
"data-slot": "skeleton",
|
|
2434
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
2435
|
+
...props
|
|
2436
|
+
}
|
|
2437
|
+
);
|
|
2438
|
+
}
|
|
2439
|
+
|
|
2440
|
+
// src/ui/slider.tsx
|
|
2441
|
+
import { Slider as SliderPrimitive } from "@base-ui/react/slider";
|
|
2442
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
|
2443
|
+
function Slider({ className, ...props }) {
|
|
2444
|
+
return /* @__PURE__ */ jsx38(
|
|
2445
|
+
SliderPrimitive.Root,
|
|
2446
|
+
{
|
|
2447
|
+
"data-slot": "slider",
|
|
2448
|
+
className: cn(
|
|
2449
|
+
"relative flex w-full touch-none items-center select-none data-disabled:opacity-50",
|
|
2450
|
+
className
|
|
2451
|
+
),
|
|
2452
|
+
...props
|
|
2453
|
+
}
|
|
2454
|
+
);
|
|
2455
|
+
}
|
|
2456
|
+
function SliderControl({ className, ...props }) {
|
|
2457
|
+
return /* @__PURE__ */ jsx38(
|
|
2458
|
+
SliderPrimitive.Control,
|
|
2459
|
+
{
|
|
2460
|
+
"data-slot": "slider-control",
|
|
2461
|
+
className: cn("flex w-full items-center py-2", className),
|
|
2462
|
+
...props
|
|
2463
|
+
}
|
|
2464
|
+
);
|
|
2465
|
+
}
|
|
2466
|
+
function SliderTrack({ className, ...props }) {
|
|
2467
|
+
return /* @__PURE__ */ jsx38(
|
|
2468
|
+
SliderPrimitive.Track,
|
|
2469
|
+
{
|
|
2470
|
+
"data-slot": "slider-track",
|
|
2471
|
+
className: cn(
|
|
2472
|
+
"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted",
|
|
2473
|
+
className
|
|
2474
|
+
),
|
|
2475
|
+
...props
|
|
2476
|
+
}
|
|
2477
|
+
);
|
|
2478
|
+
}
|
|
2479
|
+
function SliderIndicator({ className, ...props }) {
|
|
2480
|
+
return /* @__PURE__ */ jsx38(
|
|
2481
|
+
SliderPrimitive.Indicator,
|
|
2482
|
+
{
|
|
2483
|
+
"data-slot": "slider-indicator",
|
|
2484
|
+
className: cn("absolute h-full bg-primary", className),
|
|
2485
|
+
...props
|
|
2486
|
+
}
|
|
2487
|
+
);
|
|
2488
|
+
}
|
|
2489
|
+
function SliderThumb({ className, ...props }) {
|
|
2490
|
+
return /* @__PURE__ */ jsx38(
|
|
2491
|
+
SliderPrimitive.Thumb,
|
|
2492
|
+
{
|
|
2493
|
+
"data-slot": "slider-thumb",
|
|
2494
|
+
className: cn(
|
|
2495
|
+
"block size-4 shrink-0 cursor-grab rounded-full border border-primary bg-background shadow-sm transition-colors focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none active:cursor-grabbing disabled:pointer-events-none disabled:opacity-50",
|
|
2496
|
+
className
|
|
2497
|
+
),
|
|
2498
|
+
...props
|
|
2499
|
+
}
|
|
2500
|
+
);
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2503
|
+
// src/ui/toast.tsx
|
|
2504
|
+
import { Toast as ToastPrimitive } from "@base-ui/react/toast";
|
|
2505
|
+
import { XIcon as XIcon2 } from "lucide-react";
|
|
2506
|
+
import { jsx as jsx39, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2507
|
+
var toastManager = ToastPrimitive.createToastManager();
|
|
2508
|
+
function toast(message, options = {}) {
|
|
2509
|
+
return toastManager.add({
|
|
2510
|
+
title: message,
|
|
2511
|
+
description: options.description,
|
|
2512
|
+
type: options.variant ?? "info"
|
|
2513
|
+
});
|
|
2514
|
+
}
|
|
2515
|
+
var toastVariantClass = {
|
|
2516
|
+
success: "border-l-4 border-l-success",
|
|
2517
|
+
error: "border-l-4 border-l-destructive",
|
|
2518
|
+
info: "border-l-4 border-l-info"
|
|
2519
|
+
};
|
|
2520
|
+
function ToasterViewport({ className }) {
|
|
2521
|
+
const { toasts } = ToastPrimitive.useToastManager();
|
|
2522
|
+
return /* @__PURE__ */ jsx39(ToastPrimitive.Portal, { children: /* @__PURE__ */ jsx39(
|
|
2523
|
+
ToastPrimitive.Viewport,
|
|
2524
|
+
{
|
|
2525
|
+
"data-slot": "toast-viewport",
|
|
2526
|
+
className: cn(
|
|
2527
|
+
"fixed top-4 right-4 z-[100] flex w-80 flex-col gap-2 outline-none",
|
|
2528
|
+
className
|
|
2529
|
+
),
|
|
2530
|
+
children: toasts.map((item) => /* @__PURE__ */ jsx39(
|
|
2531
|
+
ToastPrimitive.Root,
|
|
2532
|
+
{
|
|
2533
|
+
toast: item,
|
|
2534
|
+
"data-slot": "toast",
|
|
2535
|
+
"data-type": item.type ?? "info",
|
|
2536
|
+
className: cn(
|
|
2537
|
+
"rounded-md border border-border bg-popover px-4 py-3 text-sm text-popover-foreground shadow-md transition-[opacity,transform] duration-200 data-ending-style:animate-toast-out data-starting-style:animate-toast-in",
|
|
2538
|
+
toastVariantClass[item.type ?? "info"] ?? toastVariantClass.info
|
|
2539
|
+
),
|
|
2540
|
+
children: /* @__PURE__ */ jsxs14(ToastPrimitive.Content, { className: "flex items-start justify-between gap-2", children: [
|
|
2541
|
+
/* @__PURE__ */ jsxs14("div", { className: "grid gap-0.5", children: [
|
|
2542
|
+
/* @__PURE__ */ jsx39(
|
|
2543
|
+
ToastPrimitive.Title,
|
|
2544
|
+
{
|
|
2545
|
+
"data-slot": "toast-title",
|
|
2546
|
+
className: "font-medium"
|
|
2547
|
+
}
|
|
2548
|
+
),
|
|
2549
|
+
/* @__PURE__ */ jsx39(
|
|
2550
|
+
ToastPrimitive.Description,
|
|
2551
|
+
{
|
|
2552
|
+
"data-slot": "toast-description",
|
|
2553
|
+
className: "text-muted-foreground"
|
|
2554
|
+
}
|
|
2555
|
+
)
|
|
2556
|
+
] }),
|
|
2557
|
+
/* @__PURE__ */ jsx39(
|
|
2558
|
+
ToastPrimitive.Close,
|
|
2559
|
+
{
|
|
2560
|
+
"data-slot": "toast-close",
|
|
2561
|
+
"aria-label": "Close",
|
|
2562
|
+
className: "cursor-pointer rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none [&_svg]:size-3.5",
|
|
2563
|
+
children: /* @__PURE__ */ jsx39(XIcon2, {})
|
|
2564
|
+
}
|
|
2565
|
+
)
|
|
2566
|
+
] })
|
|
2567
|
+
},
|
|
2568
|
+
item.id
|
|
2569
|
+
))
|
|
2570
|
+
}
|
|
2571
|
+
) });
|
|
2572
|
+
}
|
|
2573
|
+
function Toaster({ className }) {
|
|
2574
|
+
return /* @__PURE__ */ jsx39(ToastPrimitive.Provider, { toastManager, children: /* @__PURE__ */ jsx39(ToasterViewport, { className }) });
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2577
|
+
// src/ui/spinner.tsx
|
|
2578
|
+
import { Loader2Icon } from "lucide-react";
|
|
2579
|
+
import { jsx as jsx40 } from "react/jsx-runtime";
|
|
2580
|
+
function Spinner({ className, ...props }) {
|
|
2581
|
+
return /* @__PURE__ */ jsx40(
|
|
2582
|
+
Loader2Icon,
|
|
2583
|
+
{
|
|
2584
|
+
role: "status",
|
|
2585
|
+
"aria-label": "Loading",
|
|
2586
|
+
"data-slot": "spinner",
|
|
2587
|
+
className: cn("size-4 animate-spin", className),
|
|
2588
|
+
...props
|
|
2589
|
+
}
|
|
2590
|
+
);
|
|
2591
|
+
}
|
|
2592
|
+
|
|
2593
|
+
// src/ui/switch.tsx
|
|
2594
|
+
import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
|
|
2595
|
+
import { jsx as jsx41 } from "react/jsx-runtime";
|
|
2596
|
+
function Switch({ className, ...props }) {
|
|
2597
|
+
return /* @__PURE__ */ jsx41(
|
|
2598
|
+
SwitchPrimitive.Root,
|
|
2599
|
+
{
|
|
2600
|
+
"data-slot": "switch",
|
|
2601
|
+
className: cn(
|
|
2602
|
+
"inline-flex h-[1.15rem] w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-checked:bg-primary data-unchecked:bg-input",
|
|
2603
|
+
className
|
|
2604
|
+
),
|
|
2605
|
+
...props,
|
|
2606
|
+
children: /* @__PURE__ */ jsx41(
|
|
2607
|
+
SwitchPrimitive.Thumb,
|
|
2608
|
+
{
|
|
2609
|
+
"data-slot": "switch-thumb",
|
|
2610
|
+
className: "pointer-events-none block size-4 rounded-full bg-background transition-transform data-checked:translate-x-[calc(100%-2px)] data-unchecked:translate-x-0"
|
|
2611
|
+
}
|
|
2612
|
+
)
|
|
2613
|
+
}
|
|
2614
|
+
);
|
|
2615
|
+
}
|
|
2616
|
+
|
|
2617
|
+
// src/ui/tabs.tsx
|
|
2618
|
+
import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
|
|
2619
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
2620
|
+
function Tabs({
|
|
2621
|
+
className,
|
|
2622
|
+
...props
|
|
2623
|
+
}) {
|
|
2624
|
+
return /* @__PURE__ */ jsx42(
|
|
2625
|
+
TabsPrimitive.Root,
|
|
2626
|
+
{
|
|
2627
|
+
"data-slot": "tabs",
|
|
2628
|
+
className: cn("flex flex-col gap-2", className),
|
|
2629
|
+
...props
|
|
2630
|
+
}
|
|
2631
|
+
);
|
|
2632
|
+
}
|
|
2633
|
+
function TabsList({
|
|
2634
|
+
className,
|
|
2635
|
+
...props
|
|
2636
|
+
}) {
|
|
2637
|
+
return /* @__PURE__ */ jsx42(
|
|
2638
|
+
TabsPrimitive.List,
|
|
2639
|
+
{
|
|
2640
|
+
"data-slot": "tabs-list",
|
|
2641
|
+
className: cn(
|
|
2642
|
+
"inline-flex h-9 w-fit items-center justify-center rounded-lg bg-muted p-[3px] text-muted-foreground",
|
|
2643
|
+
className
|
|
2644
|
+
),
|
|
2645
|
+
...props
|
|
2646
|
+
}
|
|
2647
|
+
);
|
|
2648
|
+
}
|
|
2649
|
+
function TabsTrigger({
|
|
2650
|
+
className,
|
|
2651
|
+
...props
|
|
2652
|
+
}) {
|
|
2653
|
+
return /* @__PURE__ */ jsx42(
|
|
2654
|
+
TabsPrimitive.Tab,
|
|
2655
|
+
{
|
|
2656
|
+
"data-slot": "tabs-trigger",
|
|
2657
|
+
className: cn(
|
|
2658
|
+
"inline-flex h-[calc(100%-1px)] flex-1 cursor-pointer items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-active:border-border data-active:bg-background data-active:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2659
|
+
className
|
|
2660
|
+
),
|
|
2661
|
+
...props
|
|
2662
|
+
}
|
|
2663
|
+
);
|
|
2664
|
+
}
|
|
2665
|
+
function TabsContent({
|
|
2666
|
+
className,
|
|
2667
|
+
...props
|
|
2668
|
+
}) {
|
|
2669
|
+
return /* @__PURE__ */ jsx42(
|
|
2670
|
+
TabsPrimitive.Panel,
|
|
2671
|
+
{
|
|
2672
|
+
"data-slot": "tabs-content",
|
|
2673
|
+
className: cn("flex-1 outline-none", className),
|
|
2674
|
+
...props
|
|
2675
|
+
}
|
|
2676
|
+
);
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
// src/ui/textarea.tsx
|
|
2680
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
2681
|
+
function Textarea({
|
|
2682
|
+
className,
|
|
2683
|
+
...props
|
|
2684
|
+
}) {
|
|
2685
|
+
return /* @__PURE__ */ jsx43(
|
|
2686
|
+
"textarea",
|
|
2687
|
+
{
|
|
2688
|
+
"data-slot": "textarea",
|
|
2689
|
+
className: cn(
|
|
2690
|
+
"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50",
|
|
2691
|
+
className
|
|
2692
|
+
),
|
|
2693
|
+
...props
|
|
2694
|
+
}
|
|
2695
|
+
);
|
|
2696
|
+
}
|
|
2697
|
+
|
|
2698
|
+
// src/ui/toggle.tsx
|
|
2699
|
+
import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
|
|
2700
|
+
import { cva as cva5 } from "class-variance-authority";
|
|
2701
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
2702
|
+
var toggleVariants = cva5(
|
|
2703
|
+
"inline-flex cursor-pointer items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-colors outline-none hover:bg-muted hover:text-muted-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-pressed:bg-accent data-pressed:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
2704
|
+
{
|
|
2705
|
+
variants: {
|
|
2706
|
+
variant: {
|
|
2707
|
+
default: "bg-transparent",
|
|
2708
|
+
outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
|
|
2709
|
+
},
|
|
2710
|
+
size: {
|
|
2711
|
+
default: "h-9 px-2 min-w-9",
|
|
2712
|
+
sm: "h-8 px-1.5 min-w-8",
|
|
2713
|
+
lg: "h-10 px-2.5 min-w-10"
|
|
2714
|
+
}
|
|
2715
|
+
},
|
|
2716
|
+
defaultVariants: {
|
|
2717
|
+
variant: "default",
|
|
2718
|
+
size: "default"
|
|
2719
|
+
}
|
|
2720
|
+
}
|
|
2721
|
+
);
|
|
2722
|
+
function Toggle({
|
|
2723
|
+
className,
|
|
2724
|
+
variant,
|
|
2725
|
+
size,
|
|
2726
|
+
...props
|
|
2727
|
+
}) {
|
|
2728
|
+
return /* @__PURE__ */ jsx44(
|
|
2729
|
+
TogglePrimitive,
|
|
2730
|
+
{
|
|
2731
|
+
"data-slot": "toggle",
|
|
2732
|
+
className: cn(toggleVariants({ variant, size, className })),
|
|
2733
|
+
...props
|
|
2734
|
+
}
|
|
2735
|
+
);
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2738
|
+
// src/ui/toggle-group.tsx
|
|
2739
|
+
import { Toggle as TogglePrimitive2 } from "@base-ui/react/toggle";
|
|
2740
|
+
import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
|
|
2741
|
+
import * as React3 from "react";
|
|
2742
|
+
import { jsx as jsx45 } from "react/jsx-runtime";
|
|
2743
|
+
var ToggleGroupContext = React3.createContext({
|
|
2744
|
+
size: "default",
|
|
2745
|
+
variant: "default"
|
|
2746
|
+
});
|
|
2747
|
+
function ToggleGroup({
|
|
2748
|
+
className,
|
|
2749
|
+
variant = "default",
|
|
2750
|
+
size = "default",
|
|
2751
|
+
children,
|
|
2752
|
+
...props
|
|
2753
|
+
}) {
|
|
2754
|
+
return /* @__PURE__ */ jsx45(
|
|
2755
|
+
ToggleGroupPrimitive,
|
|
2756
|
+
{
|
|
2757
|
+
"data-slot": "toggle-group",
|
|
2758
|
+
"data-variant": variant,
|
|
2759
|
+
"data-size": size,
|
|
2760
|
+
className: cn(
|
|
2761
|
+
"group/toggle-group flex w-fit items-center rounded-md [&>[data-slot=toggle]]:rounded-none [&>[data-slot=toggle]]:first:rounded-l-md [&>[data-slot=toggle]]:last:rounded-r-md",
|
|
2762
|
+
className
|
|
2763
|
+
),
|
|
2764
|
+
...props,
|
|
2765
|
+
children: /* @__PURE__ */ jsx45(ToggleGroupContext.Provider, { value: { variant, size }, children })
|
|
2766
|
+
}
|
|
2767
|
+
);
|
|
2768
|
+
}
|
|
2769
|
+
function ToggleGroupItem({
|
|
2770
|
+
className,
|
|
2771
|
+
children,
|
|
2772
|
+
variant,
|
|
2773
|
+
size,
|
|
2774
|
+
...props
|
|
2775
|
+
}) {
|
|
2776
|
+
const context = React3.useContext(ToggleGroupContext);
|
|
2777
|
+
return /* @__PURE__ */ jsx45(
|
|
2778
|
+
TogglePrimitive2,
|
|
2779
|
+
{
|
|
2780
|
+
"data-slot": "toggle-group-item",
|
|
2781
|
+
"data-variant": variant ?? context.variant,
|
|
2782
|
+
"data-size": size ?? context.size,
|
|
2783
|
+
className: cn(
|
|
2784
|
+
toggleVariants({
|
|
2785
|
+
variant: variant ?? context.variant,
|
|
2786
|
+
size: size ?? context.size
|
|
2787
|
+
}),
|
|
2788
|
+
"min-w-0 flex-1 shrink-0 shadow-none focus:z-10 focus-visible:z-10",
|
|
2789
|
+
className
|
|
2790
|
+
),
|
|
2791
|
+
...props,
|
|
2792
|
+
children
|
|
2793
|
+
}
|
|
2794
|
+
);
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
// src/ui/tooltip.tsx
|
|
2798
|
+
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|
2799
|
+
import { jsx as jsx46, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2800
|
+
function TooltipProvider({
|
|
2801
|
+
delay = 0,
|
|
2802
|
+
...props
|
|
2803
|
+
}) {
|
|
2804
|
+
return /* @__PURE__ */ jsx46(
|
|
2805
|
+
TooltipPrimitive.Provider,
|
|
2806
|
+
{
|
|
2807
|
+
"data-slot": "tooltip-provider",
|
|
2808
|
+
delay,
|
|
2809
|
+
...props
|
|
2810
|
+
}
|
|
2811
|
+
);
|
|
2812
|
+
}
|
|
2813
|
+
function Tooltip({
|
|
2814
|
+
...props
|
|
2815
|
+
}) {
|
|
2816
|
+
return /* @__PURE__ */ jsx46(TooltipProvider, { children: /* @__PURE__ */ jsx46(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
|
|
2817
|
+
}
|
|
2818
|
+
function TooltipTrigger({
|
|
2819
|
+
...props
|
|
2820
|
+
}) {
|
|
2821
|
+
return /* @__PURE__ */ jsx46(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
2822
|
+
}
|
|
2823
|
+
function TooltipContent({
|
|
2824
|
+
className,
|
|
2825
|
+
side = "top",
|
|
2826
|
+
sideOffset = 4,
|
|
2827
|
+
align = "center",
|
|
2828
|
+
children,
|
|
2829
|
+
...props
|
|
2830
|
+
}) {
|
|
2831
|
+
return /* @__PURE__ */ jsx46(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx46(
|
|
2832
|
+
TooltipPrimitive.Positioner,
|
|
2833
|
+
{
|
|
2834
|
+
align,
|
|
2835
|
+
side,
|
|
2836
|
+
sideOffset,
|
|
2837
|
+
className: "isolate z-50",
|
|
2838
|
+
children: /* @__PURE__ */ jsxs15(
|
|
2839
|
+
TooltipPrimitive.Popup,
|
|
2840
|
+
{
|
|
2841
|
+
"data-slot": "tooltip-content",
|
|
2842
|
+
className: cn(
|
|
2843
|
+
"z-50 w-fit origin-(--transform-origin) rounded-md bg-primary px-3 py-1.5 text-xs text-balance text-primary-foreground duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
2844
|
+
className
|
|
2845
|
+
),
|
|
2846
|
+
...props,
|
|
2847
|
+
children: [
|
|
2848
|
+
children,
|
|
2849
|
+
/* @__PURE__ */ jsx46(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary" })
|
|
2850
|
+
]
|
|
2851
|
+
}
|
|
2852
|
+
)
|
|
2853
|
+
}
|
|
2854
|
+
) });
|
|
2855
|
+
}
|
|
2856
|
+
|
|
2857
|
+
// src/ui/typography.tsx
|
|
2858
|
+
import { cva as cva6 } from "class-variance-authority";
|
|
2859
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
2860
|
+
var typographyVariants = cva6("", {
|
|
2861
|
+
variants: {
|
|
2862
|
+
variant: {
|
|
2863
|
+
h1: "scroll-m-20 text-4xl font-extrabold tracking-tight text-balance",
|
|
2864
|
+
h2: "scroll-m-20 border-b border-border pb-2 text-3xl font-semibold tracking-tight",
|
|
2865
|
+
h3: "scroll-m-20 text-2xl font-semibold tracking-tight",
|
|
2866
|
+
h4: "scroll-m-20 text-xl font-semibold tracking-tight",
|
|
2867
|
+
p: "leading-7",
|
|
2868
|
+
blockquote: "mt-6 border-l-2 border-border pl-6 italic",
|
|
2869
|
+
list: "my-6 ml-6 list-disc [&>li]:mt-2",
|
|
2870
|
+
"inline-code": "relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold",
|
|
2871
|
+
lead: "text-xl text-muted-foreground",
|
|
2872
|
+
muted: "text-sm text-muted-foreground",
|
|
2873
|
+
small: "text-sm leading-none font-medium"
|
|
2874
|
+
}
|
|
2875
|
+
},
|
|
2876
|
+
defaultVariants: {
|
|
2877
|
+
variant: "p"
|
|
2878
|
+
}
|
|
2879
|
+
});
|
|
2880
|
+
var variantTagMap = {
|
|
2881
|
+
h1: "h1",
|
|
2882
|
+
h2: "h2",
|
|
2883
|
+
h3: "h3",
|
|
2884
|
+
h4: "h4",
|
|
2885
|
+
p: "p",
|
|
2886
|
+
blockquote: "blockquote",
|
|
2887
|
+
list: "ul",
|
|
2888
|
+
"inline-code": "code",
|
|
2889
|
+
lead: "p",
|
|
2890
|
+
muted: "p",
|
|
2891
|
+
small: "small"
|
|
2892
|
+
};
|
|
2893
|
+
function Typography({ className, variant = "p", ...props }) {
|
|
2894
|
+
const Tag = variantTagMap[variant ?? "p"];
|
|
2895
|
+
return /* @__PURE__ */ jsx47(
|
|
2896
|
+
Tag,
|
|
2897
|
+
{
|
|
2898
|
+
"data-slot": "typography",
|
|
2899
|
+
"data-variant": variant,
|
|
2900
|
+
className: cn(typographyVariants({ variant }), className),
|
|
2901
|
+
...props
|
|
2902
|
+
}
|
|
2903
|
+
);
|
|
2904
|
+
}
|
|
2905
|
+
|
|
2906
|
+
export {
|
|
2907
|
+
Alert,
|
|
2908
|
+
AlertTitle,
|
|
2909
|
+
AlertDescription,
|
|
2910
|
+
AlertDialog,
|
|
2911
|
+
AlertDialogTrigger,
|
|
2912
|
+
AlertDialogPortal,
|
|
2913
|
+
AlertDialogOverlay,
|
|
2914
|
+
AlertDialogContent,
|
|
2915
|
+
AlertDialogHeader,
|
|
2916
|
+
AlertDialogFooter,
|
|
2917
|
+
AlertDialogTitle,
|
|
2918
|
+
AlertDialogDescription,
|
|
2919
|
+
AlertDialogAction,
|
|
2920
|
+
AlertDialogCancel,
|
|
2921
|
+
AspectRatio,
|
|
2922
|
+
Avatar,
|
|
2923
|
+
AvatarImage,
|
|
2924
|
+
AvatarFallback,
|
|
2925
|
+
badgeVariants,
|
|
2926
|
+
Badge,
|
|
2927
|
+
Breadcrumb,
|
|
2928
|
+
BreadcrumbList,
|
|
2929
|
+
BreadcrumbItem,
|
|
2930
|
+
BreadcrumbLink,
|
|
2931
|
+
BreadcrumbPage,
|
|
2932
|
+
BreadcrumbSeparator,
|
|
2933
|
+
BreadcrumbEllipsis,
|
|
2934
|
+
ButtonGroup,
|
|
2935
|
+
Calendar,
|
|
2936
|
+
useCarousel,
|
|
2937
|
+
Carousel,
|
|
2938
|
+
CarouselContent,
|
|
2939
|
+
CarouselItem,
|
|
2940
|
+
CarouselPrevious,
|
|
2941
|
+
CarouselNext,
|
|
2942
|
+
Checkbox,
|
|
2943
|
+
Collapsible,
|
|
2944
|
+
CollapsibleTrigger,
|
|
2945
|
+
CollapsibleContent,
|
|
2946
|
+
Combobox,
|
|
2947
|
+
ComboboxTrigger,
|
|
2948
|
+
ComboboxContent,
|
|
2949
|
+
Command,
|
|
2950
|
+
CommandInput,
|
|
2951
|
+
CommandList,
|
|
2952
|
+
CommandEmpty,
|
|
2953
|
+
CommandGroup,
|
|
2954
|
+
CommandItem,
|
|
2955
|
+
CHART_TOKEN_COLORS,
|
|
2956
|
+
chartColor,
|
|
2957
|
+
ChartContainer,
|
|
2958
|
+
ContextMenu,
|
|
2959
|
+
ContextMenuTrigger,
|
|
2960
|
+
ContextMenuContent,
|
|
2961
|
+
ContextMenuItem,
|
|
2962
|
+
ContextMenuSeparator,
|
|
2963
|
+
Input,
|
|
2964
|
+
Table,
|
|
2965
|
+
TableHeader,
|
|
2966
|
+
TableBody,
|
|
2967
|
+
TableFooter,
|
|
2968
|
+
TableRow,
|
|
2969
|
+
TableHead,
|
|
2970
|
+
TableCell,
|
|
2971
|
+
TableCaption,
|
|
2972
|
+
DropdownMenu,
|
|
2973
|
+
DropdownMenuTrigger,
|
|
2974
|
+
DropdownMenuContent,
|
|
2975
|
+
DropdownMenuItem,
|
|
2976
|
+
DropdownMenuSeparator,
|
|
2977
|
+
DropdownMenuSub,
|
|
2978
|
+
DropdownMenuSubTrigger,
|
|
2979
|
+
DropdownMenuSubContent,
|
|
2980
|
+
Empty,
|
|
2981
|
+
EmptyHeader,
|
|
2982
|
+
EmptyTitle,
|
|
2983
|
+
EmptyDescription,
|
|
2984
|
+
EmptyContent,
|
|
2985
|
+
Field,
|
|
2986
|
+
FieldLabel,
|
|
2987
|
+
FieldDescription,
|
|
2988
|
+
FieldError,
|
|
2989
|
+
HoverCard,
|
|
2990
|
+
HoverCardTrigger,
|
|
2991
|
+
HoverCardContent,
|
|
2992
|
+
InputGroup,
|
|
2993
|
+
InputGroupAddon,
|
|
2994
|
+
InputGroupInput,
|
|
2995
|
+
InputOTP,
|
|
2996
|
+
InputOTPGroup,
|
|
2997
|
+
InputOTPSlot,
|
|
2998
|
+
InputOTPSeparator,
|
|
2999
|
+
Item,
|
|
3000
|
+
ItemMedia,
|
|
3001
|
+
ItemContent,
|
|
3002
|
+
ItemTitle,
|
|
3003
|
+
ItemDescription,
|
|
3004
|
+
ItemActions,
|
|
3005
|
+
Kbd,
|
|
3006
|
+
Label,
|
|
3007
|
+
Menubar,
|
|
3008
|
+
MenubarMenu,
|
|
3009
|
+
MenubarTrigger,
|
|
3010
|
+
MenubarContent,
|
|
3011
|
+
MenubarItem,
|
|
3012
|
+
MenubarSeparator,
|
|
3013
|
+
NavigationMenu,
|
|
3014
|
+
NavigationMenuList,
|
|
3015
|
+
NavigationMenuItem,
|
|
3016
|
+
navigationMenuTriggerStyle,
|
|
3017
|
+
NavigationMenuTrigger,
|
|
3018
|
+
NavigationMenuContent,
|
|
3019
|
+
NavigationMenuViewport,
|
|
3020
|
+
NavigationMenuLink,
|
|
3021
|
+
Pagination,
|
|
3022
|
+
PaginationContent,
|
|
3023
|
+
PaginationItem,
|
|
3024
|
+
PaginationLink,
|
|
3025
|
+
PaginationPrevious,
|
|
3026
|
+
PaginationNext,
|
|
3027
|
+
PaginationEllipsis,
|
|
3028
|
+
Progress,
|
|
3029
|
+
ProgressTrack,
|
|
3030
|
+
ProgressIndicator,
|
|
3031
|
+
RadioGroup,
|
|
3032
|
+
RadioGroupItem,
|
|
3033
|
+
PanelGroup,
|
|
3034
|
+
Panel,
|
|
3035
|
+
ResizableHandle,
|
|
3036
|
+
ScrollArea,
|
|
3037
|
+
ScrollBar,
|
|
3038
|
+
Select,
|
|
3039
|
+
SelectGroup,
|
|
3040
|
+
SelectValue,
|
|
3041
|
+
SelectTrigger,
|
|
3042
|
+
SelectContent,
|
|
3043
|
+
SelectLabel,
|
|
3044
|
+
SelectItem,
|
|
3045
|
+
SelectSeparator,
|
|
3046
|
+
SelectScrollUpButton,
|
|
3047
|
+
SelectScrollDownButton,
|
|
3048
|
+
Separator,
|
|
3049
|
+
Sheet,
|
|
3050
|
+
SheetTrigger,
|
|
3051
|
+
SheetClose,
|
|
3052
|
+
SheetPortal,
|
|
3053
|
+
SheetOverlay,
|
|
3054
|
+
SheetContent,
|
|
3055
|
+
SheetHeader,
|
|
3056
|
+
SheetFooter,
|
|
3057
|
+
SheetTitle,
|
|
3058
|
+
SheetDescription,
|
|
3059
|
+
Skeleton,
|
|
3060
|
+
Slider,
|
|
3061
|
+
SliderControl,
|
|
3062
|
+
SliderTrack,
|
|
3063
|
+
SliderIndicator,
|
|
3064
|
+
SliderThumb,
|
|
3065
|
+
toastManager,
|
|
3066
|
+
toast,
|
|
3067
|
+
Toaster,
|
|
3068
|
+
Spinner,
|
|
3069
|
+
Switch,
|
|
3070
|
+
Tabs,
|
|
3071
|
+
TabsList,
|
|
3072
|
+
TabsTrigger,
|
|
3073
|
+
TabsContent,
|
|
3074
|
+
Textarea,
|
|
3075
|
+
toggleVariants,
|
|
3076
|
+
Toggle,
|
|
3077
|
+
ToggleGroup,
|
|
3078
|
+
ToggleGroupItem,
|
|
3079
|
+
TooltipProvider,
|
|
3080
|
+
Tooltip,
|
|
3081
|
+
TooltipTrigger,
|
|
3082
|
+
TooltipContent,
|
|
3083
|
+
typographyVariants,
|
|
3084
|
+
Typography
|
|
3085
|
+
};
|