@nextop-os/ui-system 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,897 @@
1
+ import {
2
+ CheckIcon,
3
+ ChevronDownIcon,
4
+ ChevronUpIcon,
5
+ CloseIcon
6
+ } from "./chunk-V2GNGNUX.js";
7
+ import {
8
+ cn
9
+ } from "./chunk-DGPY4WP3.js";
10
+
11
+ // src/components/badge.tsx
12
+ import { cva } from "class-variance-authority";
13
+ import { Slot } from "radix-ui";
14
+ import { jsx } from "react/jsx-runtime";
15
+ var badgeVariants = cva(
16
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border border-transparent px-2 py-0.5 text-[0.72rem] font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/35 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
17
+ {
18
+ variants: {
19
+ variant: {
20
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/92",
21
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/88",
22
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/18",
23
+ outline: "border-border bg-card/90 text-foreground [a]:hover:bg-muted [a]:hover:text-foreground",
24
+ ghost: "hover:bg-accent/80 hover:text-accent-foreground dark:hover:bg-muted/50",
25
+ link: "text-primary underline-offset-4 hover:underline"
26
+ }
27
+ },
28
+ defaultVariants: {
29
+ variant: "default"
30
+ }
31
+ }
32
+ );
33
+ function Badge({
34
+ className,
35
+ variant = "default",
36
+ asChild = false,
37
+ ...props
38
+ }) {
39
+ const Comp = asChild ? Slot.Root : "span";
40
+ return /* @__PURE__ */ jsx(
41
+ Comp,
42
+ {
43
+ "data-slot": "badge",
44
+ "data-variant": variant,
45
+ className: cn(badgeVariants({ variant }), className),
46
+ ...props
47
+ }
48
+ );
49
+ }
50
+
51
+ // src/components/button.tsx
52
+ import { cva as cva2 } from "class-variance-authority";
53
+ import { Slot as Slot2 } from "radix-ui";
54
+ import { jsx as jsx2 } from "react/jsx-runtime";
55
+ var buttonVariants = cva2(
56
+ "group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow,transform] outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/35 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
57
+ {
58
+ variants: {
59
+ variant: {
60
+ default: "bg-primary text-primary-foreground shadow-soft hover:bg-primary/92",
61
+ outline: "border-border bg-card text-foreground hover:bg-muted/80 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
62
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/88 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
63
+ ghost: "hover:bg-accent/80 hover:text-accent-foreground aria-expanded:bg-accent aria-expanded:text-accent-foreground dark:hover:bg-muted/50",
64
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/18 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
65
+ link: "text-primary underline-offset-4 hover:underline"
66
+ },
67
+ size: {
68
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
69
+ xs: "h-6 gap-1 rounded-sm px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
70
+ sm: "h-7 gap-1 rounded-sm px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
71
+ lg: "h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
72
+ icon: "size-8",
73
+ "icon-xs": "size-6 rounded-sm in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
74
+ "icon-sm": "size-7 rounded-sm in-data-[slot=button-group]:rounded-md",
75
+ "icon-lg": "size-9"
76
+ }
77
+ },
78
+ defaultVariants: {
79
+ variant: "default",
80
+ size: "default"
81
+ }
82
+ }
83
+ );
84
+ function Button({
85
+ className,
86
+ variant = "default",
87
+ size = "default",
88
+ asChild = false,
89
+ ...props
90
+ }) {
91
+ const Comp = asChild ? Slot2.Root : "button";
92
+ return /* @__PURE__ */ jsx2(
93
+ Comp,
94
+ {
95
+ "data-slot": "button",
96
+ "data-variant": variant,
97
+ "data-size": size,
98
+ className: cn(buttonVariants({ variant, size, className })),
99
+ ...props
100
+ }
101
+ );
102
+ }
103
+
104
+ // src/components/card.tsx
105
+ import { jsx as jsx3 } from "react/jsx-runtime";
106
+ function Card({
107
+ className,
108
+ size = "default",
109
+ ...props
110
+ }) {
111
+ return /* @__PURE__ */ jsx3(
112
+ "div",
113
+ {
114
+ "data-slot": "card",
115
+ "data-size": size,
116
+ className: cn(
117
+ "group/card flex flex-col gap-4 overflow-hidden rounded-xl border border-border/70 bg-card py-4 text-sm text-card-foreground shadow-soft has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
118
+ className
119
+ ),
120
+ ...props
121
+ }
122
+ );
123
+ }
124
+ function CardHeader({ className, ...props }) {
125
+ return /* @__PURE__ */ jsx3(
126
+ "div",
127
+ {
128
+ "data-slot": "card-header",
129
+ className: cn(
130
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:border-border/70 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",
131
+ className
132
+ ),
133
+ ...props
134
+ }
135
+ );
136
+ }
137
+ function CardTitle({ className, ...props }) {
138
+ return /* @__PURE__ */ jsx3(
139
+ "div",
140
+ {
141
+ "data-slot": "card-title",
142
+ className: cn(
143
+ "text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
144
+ className
145
+ ),
146
+ ...props
147
+ }
148
+ );
149
+ }
150
+ function CardDescription({ className, ...props }) {
151
+ return /* @__PURE__ */ jsx3(
152
+ "div",
153
+ {
154
+ "data-slot": "card-description",
155
+ className: cn("text-sm text-muted-foreground", className),
156
+ ...props
157
+ }
158
+ );
159
+ }
160
+ function CardAction({ className, ...props }) {
161
+ return /* @__PURE__ */ jsx3(
162
+ "div",
163
+ {
164
+ "data-slot": "card-action",
165
+ className: cn(
166
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
167
+ className
168
+ ),
169
+ ...props
170
+ }
171
+ );
172
+ }
173
+ function CardContent({ className, ...props }) {
174
+ return /* @__PURE__ */ jsx3(
175
+ "div",
176
+ {
177
+ "data-slot": "card-content",
178
+ className: cn("px-4 group-data-[size=sm]/card:px-3", className),
179
+ ...props
180
+ }
181
+ );
182
+ }
183
+ function CardFooter({ className, ...props }) {
184
+ return /* @__PURE__ */ jsx3(
185
+ "div",
186
+ {
187
+ "data-slot": "card-footer",
188
+ className: cn(
189
+ "flex items-center rounded-b-xl border-t border-border/70 bg-muted/42 p-4 group-data-[size=sm]/card:p-3",
190
+ className
191
+ ),
192
+ ...props
193
+ }
194
+ );
195
+ }
196
+
197
+ // src/components/dialog.tsx
198
+ import { Dialog as DialogPrimitive } from "radix-ui";
199
+ import { Fragment, jsx as jsx4, jsxs } from "react/jsx-runtime";
200
+ function Dialog({
201
+ ...props
202
+ }) {
203
+ return /* @__PURE__ */ jsx4(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
204
+ }
205
+ function DialogTrigger({
206
+ ...props
207
+ }) {
208
+ return /* @__PURE__ */ jsx4(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
209
+ }
210
+ function DialogPortal({
211
+ ...props
212
+ }) {
213
+ return /* @__PURE__ */ jsx4(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
214
+ }
215
+ function DialogClose({
216
+ ...props
217
+ }) {
218
+ return /* @__PURE__ */ jsx4(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
219
+ }
220
+ function DialogOverlay({
221
+ className,
222
+ style,
223
+ ...props
224
+ }) {
225
+ return /* @__PURE__ */ jsx4(
226
+ DialogPrimitive.Overlay,
227
+ {
228
+ "data-slot": "dialog-overlay",
229
+ className: cn(
230
+ "fixed inset-0 isolate bg-black/12 duration-150 supports-backdrop-filter:backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
231
+ className
232
+ ),
233
+ style: { zIndex: "var(--z-dialog-overlay)", ...style },
234
+ ...props
235
+ }
236
+ );
237
+ }
238
+ function DialogContent({
239
+ className,
240
+ children,
241
+ overlayClassName,
242
+ portaled = true,
243
+ showCloseButton = true,
244
+ style,
245
+ ...props
246
+ }) {
247
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
248
+ /* @__PURE__ */ jsx4(DialogOverlay, { className: overlayClassName }),
249
+ /* @__PURE__ */ jsxs(
250
+ DialogPrimitive.Content,
251
+ {
252
+ "data-slot": "dialog-content",
253
+ className: cn(
254
+ portaled ? "fixed" : "absolute",
255
+ "top-1/2 left-1/2 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-5 rounded-2xl bg-popover/96 p-5 text-sm text-popover-foreground shadow-[0_24px_64px_rgba(15,23,42,0.14),0_8px_20px_rgba(15,23,42,0.1)] ring-1 ring-foreground/8 duration-150 outline-none supports-backdrop-filter:backdrop-blur-xl sm:max-w-sm 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",
256
+ className
257
+ ),
258
+ style: { zIndex: "var(--z-dialog)", ...style },
259
+ ...props,
260
+ children: [
261
+ children,
262
+ showCloseButton && /* @__PURE__ */ jsx4(DialogPrimitive.Close, { "data-slot": "dialog-close", asChild: true, children: /* @__PURE__ */ jsxs(
263
+ Button,
264
+ {
265
+ variant: "ghost",
266
+ className: "absolute top-2 right-2",
267
+ size: "icon-sm",
268
+ children: [
269
+ /* @__PURE__ */ jsx4(CloseIcon, {}),
270
+ /* @__PURE__ */ jsx4("span", { className: "sr-only", children: "Close" })
271
+ ]
272
+ }
273
+ ) })
274
+ ]
275
+ }
276
+ )
277
+ ] });
278
+ if (!portaled) {
279
+ return content;
280
+ }
281
+ return /* @__PURE__ */ jsx4(DialogPortal, { children: content });
282
+ }
283
+ function DialogHeader({ className, ...props }) {
284
+ return /* @__PURE__ */ jsx4(
285
+ "div",
286
+ {
287
+ "data-slot": "dialog-header",
288
+ className: cn("flex flex-col gap-2", className),
289
+ ...props
290
+ }
291
+ );
292
+ }
293
+ function DialogFooter({
294
+ className,
295
+ showCloseButton = false,
296
+ children,
297
+ ...props
298
+ }) {
299
+ return /* @__PURE__ */ jsxs(
300
+ "div",
301
+ {
302
+ "data-slot": "dialog-footer",
303
+ className: cn(
304
+ "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",
305
+ className
306
+ ),
307
+ ...props,
308
+ children: [
309
+ children,
310
+ showCloseButton && /* @__PURE__ */ jsx4(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx4(Button, { variant: "outline", children: "Close" }) })
311
+ ]
312
+ }
313
+ );
314
+ }
315
+ function DialogTitle({
316
+ className,
317
+ ...props
318
+ }) {
319
+ return /* @__PURE__ */ jsx4(
320
+ DialogPrimitive.Title,
321
+ {
322
+ "data-slot": "dialog-title",
323
+ className: cn("text-base leading-none font-medium", className),
324
+ ...props
325
+ }
326
+ );
327
+ }
328
+ function DialogDescription({
329
+ className,
330
+ ...props
331
+ }) {
332
+ return /* @__PURE__ */ jsx4(
333
+ DialogPrimitive.Description,
334
+ {
335
+ "data-slot": "dialog-description",
336
+ className: cn(
337
+ "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
338
+ className
339
+ ),
340
+ ...props
341
+ }
342
+ );
343
+ }
344
+
345
+ // src/components/confirmation-dialog.tsx
346
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
347
+ function confirmToneClassName(tone) {
348
+ if (tone === "destructive") {
349
+ return "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/92 focus-visible:border-destructive/40 focus-visible:ring-destructive/25";
350
+ }
351
+ return void 0;
352
+ }
353
+ function ConfirmationDialog({
354
+ cancelLabel,
355
+ children,
356
+ className,
357
+ confirmBusy = false,
358
+ confirmDisabled = false,
359
+ confirmLabel,
360
+ description,
361
+ disableCloseWhileBusy = true,
362
+ footer,
363
+ hideConfirmButton = false,
364
+ onCancel,
365
+ onConfirm,
366
+ onOpenChange,
367
+ open,
368
+ overlayClassName,
369
+ portaled = true,
370
+ tone = "default",
371
+ title
372
+ }) {
373
+ const isCloseDisabled = disableCloseWhileBusy && confirmBusy;
374
+ return /* @__PURE__ */ jsx5(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs2(
375
+ DialogContent,
376
+ {
377
+ className: cn(
378
+ "max-w-[24.5rem] gap-4 rounded-[1.15rem] border-0 bg-popover/96 px-6 py-5 text-left shadow-[0_18px_48px_rgba(15,23,42,0.14),0_6px_18px_rgba(15,23,42,0.08)] backdrop-blur-xl sm:max-w-[24.5rem]",
379
+ className
380
+ ),
381
+ overlayClassName: cn(
382
+ "bg-black/12 supports-backdrop-filter:backdrop-blur-[10px]",
383
+ overlayClassName
384
+ ),
385
+ portaled,
386
+ showCloseButton: false,
387
+ onEscapeKeyDown: (event) => {
388
+ if (isCloseDisabled) {
389
+ event.preventDefault();
390
+ }
391
+ },
392
+ onInteractOutside: (event) => {
393
+ if (isCloseDisabled) {
394
+ event.preventDefault();
395
+ }
396
+ },
397
+ children: [
398
+ /* @__PURE__ */ jsxs2(DialogHeader, { className: "gap-2", children: [
399
+ /* @__PURE__ */ jsx5(DialogTitle, { className: "text-base leading-6 font-semibold tracking-[-0.01em] text-foreground", children: title }),
400
+ description ? /* @__PURE__ */ jsx5(DialogDescription, { className: "text-[0.94rem] leading-6 text-muted-foreground", children: description }) : null
401
+ ] }),
402
+ children ? /* @__PURE__ */ jsx5("div", { className: "text-[0.82rem] leading-5 text-muted-foreground", children }) : null,
403
+ footer ?? /* @__PURE__ */ jsxs2("div", { className: "flex justify-end gap-2 pt-1", children: [
404
+ /* @__PURE__ */ jsx5(
405
+ Button,
406
+ {
407
+ disabled: confirmBusy,
408
+ size: "lg",
409
+ type: "button",
410
+ variant: "outline",
411
+ className: "min-w-[5.5rem]",
412
+ onClick: () => {
413
+ onCancel?.();
414
+ onOpenChange(false);
415
+ },
416
+ children: cancelLabel
417
+ }
418
+ ),
419
+ hideConfirmButton ? null : /* @__PURE__ */ jsx5(
420
+ Button,
421
+ {
422
+ disabled: confirmBusy || confirmDisabled,
423
+ size: "lg",
424
+ type: "button",
425
+ variant: tone === "default" ? "default" : "destructive",
426
+ className: cn(
427
+ "min-w-[7.5rem] font-medium shadow-none",
428
+ confirmToneClassName(tone)
429
+ ),
430
+ onClick: () => {
431
+ onConfirm?.();
432
+ },
433
+ children: confirmLabel
434
+ }
435
+ )
436
+ ] })
437
+ ]
438
+ }
439
+ ) });
440
+ }
441
+
442
+ // src/components/input.tsx
443
+ import { jsx as jsx6 } from "react/jsx-runtime";
444
+ function Input({ className, type, ...props }) {
445
+ return /* @__PURE__ */ jsx6(
446
+ "input",
447
+ {
448
+ type,
449
+ "data-slot": "input",
450
+ className: cn(
451
+ "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
452
+ className
453
+ ),
454
+ ...props
455
+ }
456
+ );
457
+ }
458
+
459
+ // src/components/resizable.tsx
460
+ import * as ResizablePrimitive from "react-resizable-panels";
461
+ import { jsx as jsx7 } from "react/jsx-runtime";
462
+ function ResizablePanelGroup({
463
+ className,
464
+ orientation = "horizontal",
465
+ ...props
466
+ }) {
467
+ return /* @__PURE__ */ jsx7(
468
+ ResizablePrimitive.Group,
469
+ {
470
+ "data-orientation": orientation,
471
+ "data-slot": "resizable-panel-group",
472
+ className: cn(
473
+ "flex h-full w-full data-[orientation=vertical]:flex-col",
474
+ className
475
+ ),
476
+ ...props,
477
+ orientation
478
+ }
479
+ );
480
+ }
481
+ function ResizablePanel(props) {
482
+ return /* @__PURE__ */ jsx7(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
483
+ }
484
+ function ResizableHandle({
485
+ className,
486
+ withHandle,
487
+ ...props
488
+ }) {
489
+ return /* @__PURE__ */ jsx7(
490
+ ResizablePrimitive.Separator,
491
+ {
492
+ "data-slot": "resizable-handle",
493
+ className: cn(
494
+ "group relative flex items-center justify-center bg-transparent outline-none after:absolute after:bg-border/70 after:transition-colors hover:after:bg-border focus-visible:after:bg-ring aria-[orientation=horizontal]:h-2 aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:cursor-row-resize aria-[orientation=horizontal]:after:inset-x-0 aria-[orientation=horizontal]:after:top-1/2 aria-[orientation=horizontal]:after:h-px aria-[orientation=horizontal]:after:-translate-y-1/2 aria-[orientation=vertical]:h-full aria-[orientation=vertical]:w-2 aria-[orientation=vertical]:cursor-col-resize aria-[orientation=vertical]:after:inset-y-0 aria-[orientation=vertical]:after:left-1/2 aria-[orientation=vertical]:after:w-px aria-[orientation=vertical]:after:-translate-x-1/2",
495
+ className
496
+ ),
497
+ ...props,
498
+ children: withHandle ? /* @__PURE__ */ jsx7("div", { className: "z-10 flex items-center justify-center rounded-full bg-border/85 transition-colors group-hover:bg-border group-aria-[orientation=horizontal]:h-[3px] group-aria-[orientation=horizontal]:w-10 group-aria-[orientation=vertical]:h-10 group-aria-[orientation=vertical]:w-[3px]" }) : null
499
+ }
500
+ );
501
+ }
502
+
503
+ // src/components/scroll-area.tsx
504
+ import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
505
+ import { jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
506
+ function ScrollArea({
507
+ className,
508
+ children,
509
+ ...props
510
+ }) {
511
+ return /* @__PURE__ */ jsxs3(
512
+ ScrollAreaPrimitive.Root,
513
+ {
514
+ "data-slot": "scroll-area",
515
+ className: cn("relative", className),
516
+ ...props,
517
+ children: [
518
+ /* @__PURE__ */ jsx8(
519
+ ScrollAreaPrimitive.Viewport,
520
+ {
521
+ "data-slot": "scroll-area-viewport",
522
+ className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
523
+ children
524
+ }
525
+ ),
526
+ /* @__PURE__ */ jsx8(ScrollBar, {}),
527
+ /* @__PURE__ */ jsx8(ScrollAreaPrimitive.Corner, {})
528
+ ]
529
+ }
530
+ );
531
+ }
532
+ function ScrollBar({
533
+ className,
534
+ orientation = "vertical",
535
+ ...props
536
+ }) {
537
+ return /* @__PURE__ */ jsx8(
538
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
539
+ {
540
+ "data-slot": "scroll-area-scrollbar",
541
+ "data-orientation": orientation,
542
+ orientation,
543
+ className: cn(
544
+ "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
545
+ className
546
+ ),
547
+ ...props,
548
+ children: /* @__PURE__ */ jsx8(
549
+ ScrollAreaPrimitive.ScrollAreaThumb,
550
+ {
551
+ "data-slot": "scroll-area-thumb",
552
+ className: "relative flex-1 rounded-full bg-border"
553
+ }
554
+ )
555
+ }
556
+ );
557
+ }
558
+
559
+ // src/components/select.tsx
560
+ import { Select as SelectPrimitive } from "radix-ui";
561
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
562
+ function Select({
563
+ ...props
564
+ }) {
565
+ return /* @__PURE__ */ jsx9(SelectPrimitive.Root, { "data-slot": "select", ...props });
566
+ }
567
+ function SelectGroup({
568
+ className,
569
+ ...props
570
+ }) {
571
+ return /* @__PURE__ */ jsx9(
572
+ SelectPrimitive.Group,
573
+ {
574
+ "data-slot": "select-group",
575
+ className: cn("scroll-my-1 p-1", className),
576
+ ...props
577
+ }
578
+ );
579
+ }
580
+ function SelectValue({
581
+ ...props
582
+ }) {
583
+ return /* @__PURE__ */ jsx9(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
584
+ }
585
+ function SelectTrigger({
586
+ className,
587
+ size = "default",
588
+ children,
589
+ ...props
590
+ }) {
591
+ return /* @__PURE__ */ jsxs4(
592
+ SelectPrimitive.Trigger,
593
+ {
594
+ "data-slot": "select-trigger",
595
+ "data-size": size,
596
+ className: cn(
597
+ "flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
598
+ className
599
+ ),
600
+ ...props,
601
+ children: [
602
+ children,
603
+ /* @__PURE__ */ jsx9(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx9(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })
604
+ ]
605
+ }
606
+ );
607
+ }
608
+ function SelectContent({
609
+ className,
610
+ children,
611
+ position = "item-aligned",
612
+ align = "center",
613
+ style,
614
+ ...props
615
+ }) {
616
+ return /* @__PURE__ */ jsx9(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs4(
617
+ SelectPrimitive.Content,
618
+ {
619
+ "data-slot": "select-content",
620
+ "data-align-trigger": position === "item-aligned",
621
+ className: cn(
622
+ "relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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",
623
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
624
+ className
625
+ ),
626
+ position,
627
+ align,
628
+ style: { zIndex: "var(--z-popover)", ...style },
629
+ ...props,
630
+ children: [
631
+ /* @__PURE__ */ jsx9(SelectScrollUpButton, {}),
632
+ /* @__PURE__ */ jsx9(
633
+ SelectPrimitive.Viewport,
634
+ {
635
+ "data-position": position,
636
+ className: cn(
637
+ "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",
638
+ position === "popper" && ""
639
+ ),
640
+ children
641
+ }
642
+ ),
643
+ /* @__PURE__ */ jsx9(SelectScrollDownButton, {})
644
+ ]
645
+ }
646
+ ) });
647
+ }
648
+ function SelectLabel({
649
+ className,
650
+ ...props
651
+ }) {
652
+ return /* @__PURE__ */ jsx9(
653
+ SelectPrimitive.Label,
654
+ {
655
+ "data-slot": "select-label",
656
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
657
+ ...props
658
+ }
659
+ );
660
+ }
661
+ function SelectItem({
662
+ className,
663
+ children,
664
+ ...props
665
+ }) {
666
+ return /* @__PURE__ */ jsxs4(
667
+ SelectPrimitive.Item,
668
+ {
669
+ "data-slot": "select-item",
670
+ className: cn(
671
+ "relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]: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 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
672
+ className
673
+ ),
674
+ ...props,
675
+ children: [
676
+ /* @__PURE__ */ jsx9("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx9(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx9(CheckIcon, { className: "pointer-events-none" }) }) }),
677
+ /* @__PURE__ */ jsx9(SelectPrimitive.ItemText, { children })
678
+ ]
679
+ }
680
+ );
681
+ }
682
+ function SelectSeparator({
683
+ className,
684
+ ...props
685
+ }) {
686
+ return /* @__PURE__ */ jsx9(
687
+ SelectPrimitive.Separator,
688
+ {
689
+ "data-slot": "select-separator",
690
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
691
+ ...props
692
+ }
693
+ );
694
+ }
695
+ function SelectScrollUpButton({
696
+ className,
697
+ ...props
698
+ }) {
699
+ return /* @__PURE__ */ jsx9(
700
+ SelectPrimitive.ScrollUpButton,
701
+ {
702
+ "data-slot": "select-scroll-up-button",
703
+ className: cn(
704
+ "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
705
+ className
706
+ ),
707
+ ...props,
708
+ children: /* @__PURE__ */ jsx9(ChevronUpIcon, {})
709
+ }
710
+ );
711
+ }
712
+ function SelectScrollDownButton({
713
+ className,
714
+ ...props
715
+ }) {
716
+ return /* @__PURE__ */ jsx9(
717
+ SelectPrimitive.ScrollDownButton,
718
+ {
719
+ "data-slot": "select-scroll-down-button",
720
+ className: cn(
721
+ "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
722
+ className
723
+ ),
724
+ ...props,
725
+ children: /* @__PURE__ */ jsx9(ChevronDownIcon, {})
726
+ }
727
+ );
728
+ }
729
+
730
+ // src/components/separator.tsx
731
+ import { Separator as SeparatorPrimitive } from "radix-ui";
732
+ import { jsx as jsx10 } from "react/jsx-runtime";
733
+ function Separator2({
734
+ className,
735
+ orientation = "horizontal",
736
+ decorative = true,
737
+ ...props
738
+ }) {
739
+ return /* @__PURE__ */ jsx10(
740
+ SeparatorPrimitive.Root,
741
+ {
742
+ "data-slot": "separator",
743
+ decorative,
744
+ orientation,
745
+ className: cn(
746
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
747
+ className
748
+ ),
749
+ ...props
750
+ }
751
+ );
752
+ }
753
+
754
+ // src/components/toast.tsx
755
+ import { Toast as ToastPrimitive } from "radix-ui";
756
+ import { cva as cva3 } from "class-variance-authority";
757
+ import { jsx as jsx11 } from "react/jsx-runtime";
758
+ var ToastProvider = ToastPrimitive.Provider;
759
+ var toastVariants = cva3(
760
+ "group pointer-events-auto relative grid w-full min-w-0 gap-1 overflow-hidden rounded-lg border bg-popover px-4 py-3 pr-10 text-sm text-popover-foreground shadow-panel transition-all data-closed:fade-out-80 data-closed:slide-out-to-right-full data-open:slide-in-from-top-full data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none sm:data-open:slide-in-from-bottom-full",
761
+ {
762
+ variants: {
763
+ variant: {
764
+ default: "border-border/70",
765
+ destructive: "border-destructive/30 bg-destructive/10 text-foreground"
766
+ }
767
+ },
768
+ defaultVariants: {
769
+ variant: "default"
770
+ }
771
+ }
772
+ );
773
+ function ToastRoot({
774
+ className,
775
+ variant,
776
+ ...props
777
+ }) {
778
+ return /* @__PURE__ */ jsx11(
779
+ ToastPrimitive.Root,
780
+ {
781
+ "data-slot": "toast",
782
+ className: cn(toastVariants({ variant }), className),
783
+ ...props
784
+ }
785
+ );
786
+ }
787
+ function ToastTitle({
788
+ className,
789
+ ...props
790
+ }) {
791
+ return /* @__PURE__ */ jsx11(
792
+ ToastPrimitive.Title,
793
+ {
794
+ "data-slot": "toast-title",
795
+ className: cn("text-sm font-semibold", className),
796
+ ...props
797
+ }
798
+ );
799
+ }
800
+ function ToastDescription({
801
+ className,
802
+ ...props
803
+ }) {
804
+ return /* @__PURE__ */ jsx11(
805
+ ToastPrimitive.Description,
806
+ {
807
+ "data-slot": "toast-description",
808
+ className: cn("text-xs leading-5 text-muted-foreground", className),
809
+ ...props
810
+ }
811
+ );
812
+ }
813
+ function ToastClose({
814
+ className,
815
+ ...props
816
+ }) {
817
+ return /* @__PURE__ */ jsx11(
818
+ ToastPrimitive.Close,
819
+ {
820
+ "data-slot": "toast-close",
821
+ className: cn(
822
+ "absolute right-2 top-2 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35",
823
+ className
824
+ ),
825
+ ...props,
826
+ children: /* @__PURE__ */ jsx11(CloseIcon, { className: "size-4" })
827
+ }
828
+ );
829
+ }
830
+ function ToastViewport({
831
+ className,
832
+ style,
833
+ ...props
834
+ }) {
835
+ return /* @__PURE__ */ jsx11(
836
+ ToastPrimitive.Viewport,
837
+ {
838
+ "data-slot": "toast-viewport",
839
+ className: cn(
840
+ "fixed right-0 top-0 flex max-h-screen w-full flex-col-reverse gap-2 p-4 sm:bottom-0 sm:top-auto sm:max-w-sm",
841
+ className
842
+ ),
843
+ style: { zIndex: "var(--z-toast)", ...style },
844
+ ...props
845
+ }
846
+ );
847
+ }
848
+
849
+ export {
850
+ badgeVariants,
851
+ Badge,
852
+ buttonVariants,
853
+ Button,
854
+ Card,
855
+ CardHeader,
856
+ CardTitle,
857
+ CardDescription,
858
+ CardAction,
859
+ CardContent,
860
+ CardFooter,
861
+ Dialog,
862
+ DialogTrigger,
863
+ DialogPortal,
864
+ DialogClose,
865
+ DialogOverlay,
866
+ DialogContent,
867
+ DialogHeader,
868
+ DialogFooter,
869
+ DialogTitle,
870
+ DialogDescription,
871
+ ConfirmationDialog,
872
+ Input,
873
+ ResizablePanelGroup,
874
+ ResizablePanel,
875
+ ResizableHandle,
876
+ ScrollArea,
877
+ ScrollBar,
878
+ Select,
879
+ SelectGroup,
880
+ SelectValue,
881
+ SelectTrigger,
882
+ SelectContent,
883
+ SelectLabel,
884
+ SelectItem,
885
+ SelectSeparator,
886
+ SelectScrollUpButton,
887
+ SelectScrollDownButton,
888
+ Separator2 as Separator,
889
+ ToastProvider,
890
+ toastVariants,
891
+ ToastRoot,
892
+ ToastTitle,
893
+ ToastDescription,
894
+ ToastClose,
895
+ ToastViewport
896
+ };
897
+ //# sourceMappingURL=chunk-UM7LPYRB.js.map