@hachej/boring-ui-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +65 -0
- package/dist/index.d.ts +438 -0
- package/dist/index.js +2503 -0
- package/package.json +62 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,2503 @@
|
|
|
1
|
+
// src/lib.ts
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { twMerge } from "tailwind-merge";
|
|
4
|
+
function cn(...inputs) {
|
|
5
|
+
return twMerge(clsx(inputs));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/button.tsx
|
|
9
|
+
import * as React from "react";
|
|
10
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
11
|
+
import { cva } from "class-variance-authority";
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
var buttonVariants = cva(
|
|
14
|
+
"inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
15
|
+
{
|
|
16
|
+
variants: {
|
|
17
|
+
variant: {
|
|
18
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
19
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
|
|
20
|
+
outline: "border border-input bg-background shadow-xs hover:bg-muted/60 hover:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
21
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
22
|
+
ghost: "hover:bg-muted/60 hover:text-foreground dark:hover:bg-muted/40",
|
|
23
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
24
|
+
},
|
|
25
|
+
size: {
|
|
26
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
27
|
+
xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
28
|
+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
|
29
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
30
|
+
icon: "size-9",
|
|
31
|
+
"icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
|
|
32
|
+
"icon-sm": "size-8",
|
|
33
|
+
"icon-lg": "size-10"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
defaultVariants: {
|
|
37
|
+
variant: "default",
|
|
38
|
+
size: "default"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
var Button = React.forwardRef(
|
|
43
|
+
({ className, variant = "default", size = "default", asChild = false, ...props }, ref) => {
|
|
44
|
+
const Comp = asChild ? Slot : "button";
|
|
45
|
+
return /* @__PURE__ */ jsx(
|
|
46
|
+
Comp,
|
|
47
|
+
{
|
|
48
|
+
"data-slot": "button",
|
|
49
|
+
"data-variant": variant,
|
|
50
|
+
"data-size": size,
|
|
51
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
52
|
+
ref,
|
|
53
|
+
...props
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
Button.displayName = "Button";
|
|
59
|
+
|
|
60
|
+
// src/badge.tsx
|
|
61
|
+
import { Slot as Slot2 } from "@radix-ui/react-slot";
|
|
62
|
+
import { cva as cva2 } from "class-variance-authority";
|
|
63
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
64
|
+
var badgeVariants = cva2(
|
|
65
|
+
"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
|
|
66
|
+
{
|
|
67
|
+
variants: {
|
|
68
|
+
variant: {
|
|
69
|
+
default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
70
|
+
secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
71
|
+
destructive: "bg-destructive text-destructive-foreground focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
|
|
72
|
+
outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
73
|
+
ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
74
|
+
link: "text-primary underline-offset-4 [a&]:hover:underline"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
defaultVariants: {
|
|
78
|
+
variant: "default"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
function Badge({ className, variant = "default", asChild = false, ...props }) {
|
|
83
|
+
const Comp = asChild ? Slot2 : "span";
|
|
84
|
+
return /* @__PURE__ */ jsx2(
|
|
85
|
+
Comp,
|
|
86
|
+
{
|
|
87
|
+
"data-slot": "badge",
|
|
88
|
+
"data-variant": variant,
|
|
89
|
+
className: cn(badgeVariants({ variant }), className),
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// src/input.tsx
|
|
96
|
+
import * as React2 from "react";
|
|
97
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
98
|
+
var Input = React2.forwardRef(
|
|
99
|
+
({ className, type, ...props }, ref) => /* @__PURE__ */ jsx3(
|
|
100
|
+
"input",
|
|
101
|
+
{
|
|
102
|
+
type,
|
|
103
|
+
"data-slot": "input",
|
|
104
|
+
className: cn(
|
|
105
|
+
"h-9 w-full min-w-0 rounded-md border border-input bg-background px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30",
|
|
106
|
+
"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
107
|
+
"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
|
108
|
+
className
|
|
109
|
+
),
|
|
110
|
+
ref,
|
|
111
|
+
...props
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
);
|
|
115
|
+
Input.displayName = "Input";
|
|
116
|
+
|
|
117
|
+
// src/textarea.tsx
|
|
118
|
+
import * as React3 from "react";
|
|
119
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
120
|
+
var Textarea = React3.forwardRef(
|
|
121
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
|
|
122
|
+
"textarea",
|
|
123
|
+
{
|
|
124
|
+
"data-slot": "textarea",
|
|
125
|
+
className: cn(
|
|
126
|
+
"min-h-20 w-full rounded-md border border-input bg-background px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30",
|
|
127
|
+
"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
128
|
+
"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
|
129
|
+
className
|
|
130
|
+
),
|
|
131
|
+
ref,
|
|
132
|
+
...props
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
);
|
|
136
|
+
Textarea.displayName = "Textarea";
|
|
137
|
+
|
|
138
|
+
// src/separator.tsx
|
|
139
|
+
import * as React4 from "react";
|
|
140
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
141
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
142
|
+
var Separator = React4.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx5(
|
|
143
|
+
SeparatorPrimitive.Root,
|
|
144
|
+
{
|
|
145
|
+
ref,
|
|
146
|
+
"data-slot": "separator",
|
|
147
|
+
decorative,
|
|
148
|
+
orientation,
|
|
149
|
+
className: cn(
|
|
150
|
+
"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
151
|
+
className
|
|
152
|
+
),
|
|
153
|
+
...props
|
|
154
|
+
}
|
|
155
|
+
));
|
|
156
|
+
Separator.displayName = SeparatorPrimitive.Root.displayName;
|
|
157
|
+
|
|
158
|
+
// src/tooltip.tsx
|
|
159
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
160
|
+
import { jsx as jsx6, jsxs } from "react/jsx-runtime";
|
|
161
|
+
function TooltipProvider({
|
|
162
|
+
delayDuration = 0,
|
|
163
|
+
...props
|
|
164
|
+
}) {
|
|
165
|
+
return /* @__PURE__ */ jsx6(
|
|
166
|
+
TooltipPrimitive.Provider,
|
|
167
|
+
{
|
|
168
|
+
"data-slot": "tooltip-provider",
|
|
169
|
+
delayDuration,
|
|
170
|
+
...props
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
function Tooltip({ ...props }) {
|
|
175
|
+
return /* @__PURE__ */ jsx6(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
|
|
176
|
+
}
|
|
177
|
+
function TooltipTrigger({
|
|
178
|
+
...props
|
|
179
|
+
}) {
|
|
180
|
+
return /* @__PURE__ */ jsx6(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
181
|
+
}
|
|
182
|
+
function TooltipContent({
|
|
183
|
+
className,
|
|
184
|
+
sideOffset = 0,
|
|
185
|
+
children,
|
|
186
|
+
...props
|
|
187
|
+
}) {
|
|
188
|
+
return /* @__PURE__ */ jsx6(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
189
|
+
TooltipPrimitive.Content,
|
|
190
|
+
{
|
|
191
|
+
"data-slot": "tooltip-content",
|
|
192
|
+
sideOffset,
|
|
193
|
+
className: cn(
|
|
194
|
+
"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
|
195
|
+
className
|
|
196
|
+
),
|
|
197
|
+
...props,
|
|
198
|
+
children: [
|
|
199
|
+
children,
|
|
200
|
+
/* @__PURE__ */ jsx6(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
) });
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// src/dialog.tsx
|
|
207
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
208
|
+
import { jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
209
|
+
function Dialog({ ...props }) {
|
|
210
|
+
return /* @__PURE__ */ jsx7(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
|
|
211
|
+
}
|
|
212
|
+
function DialogTrigger({
|
|
213
|
+
...props
|
|
214
|
+
}) {
|
|
215
|
+
return /* @__PURE__ */ jsx7(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
|
|
216
|
+
}
|
|
217
|
+
function DialogPortal({
|
|
218
|
+
...props
|
|
219
|
+
}) {
|
|
220
|
+
return /* @__PURE__ */ jsx7(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
|
|
221
|
+
}
|
|
222
|
+
function DialogClose({ ...props }) {
|
|
223
|
+
return /* @__PURE__ */ jsx7(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
|
|
224
|
+
}
|
|
225
|
+
function DialogOverlay({
|
|
226
|
+
className,
|
|
227
|
+
...props
|
|
228
|
+
}) {
|
|
229
|
+
return /* @__PURE__ */ jsx7(
|
|
230
|
+
DialogPrimitive.Overlay,
|
|
231
|
+
{
|
|
232
|
+
"data-slot": "dialog-overlay",
|
|
233
|
+
className: cn(
|
|
234
|
+
"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
|
|
235
|
+
className
|
|
236
|
+
),
|
|
237
|
+
...props
|
|
238
|
+
}
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
function DialogContent({
|
|
242
|
+
className,
|
|
243
|
+
children,
|
|
244
|
+
showCloseButton = true,
|
|
245
|
+
...props
|
|
246
|
+
}) {
|
|
247
|
+
return /* @__PURE__ */ jsxs2(DialogPortal, { "data-slot": "dialog-portal", children: [
|
|
248
|
+
/* @__PURE__ */ jsx7(DialogOverlay, {}),
|
|
249
|
+
/* @__PURE__ */ jsxs2(
|
|
250
|
+
DialogPrimitive.Content,
|
|
251
|
+
{
|
|
252
|
+
"data-slot": "dialog-content",
|
|
253
|
+
className: cn(
|
|
254
|
+
"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 bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",
|
|
255
|
+
className
|
|
256
|
+
),
|
|
257
|
+
...props,
|
|
258
|
+
children: [
|
|
259
|
+
children,
|
|
260
|
+
showCloseButton && /* @__PURE__ */ jsxs2(
|
|
261
|
+
DialogPrimitive.Close,
|
|
262
|
+
{
|
|
263
|
+
"data-slot": "dialog-close",
|
|
264
|
+
className: "absolute top-4 right-4 inline-flex size-6 items-center justify-center rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
|
|
265
|
+
children: [
|
|
266
|
+
/* @__PURE__ */ jsx7("span", { "aria-hidden": "true", className: "text-base leading-none", children: "\xD7" }),
|
|
267
|
+
/* @__PURE__ */ jsx7("span", { className: "sr-only", children: "Close" })
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
)
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
)
|
|
274
|
+
] });
|
|
275
|
+
}
|
|
276
|
+
function DialogHeader({ className, ...props }) {
|
|
277
|
+
return /* @__PURE__ */ jsx7(
|
|
278
|
+
"div",
|
|
279
|
+
{
|
|
280
|
+
"data-slot": "dialog-header",
|
|
281
|
+
className: cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
282
|
+
...props
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
function DialogFooter({
|
|
287
|
+
className,
|
|
288
|
+
showCloseButton = false,
|
|
289
|
+
children,
|
|
290
|
+
...props
|
|
291
|
+
}) {
|
|
292
|
+
return /* @__PURE__ */ jsxs2(
|
|
293
|
+
"div",
|
|
294
|
+
{
|
|
295
|
+
"data-slot": "dialog-footer",
|
|
296
|
+
className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
|
|
297
|
+
...props,
|
|
298
|
+
children: [
|
|
299
|
+
children,
|
|
300
|
+
showCloseButton && /* @__PURE__ */ jsx7(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx7(Button, { variant: "outline", children: "Close" }) })
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
function DialogTitle({
|
|
306
|
+
className,
|
|
307
|
+
...props
|
|
308
|
+
}) {
|
|
309
|
+
return /* @__PURE__ */ jsx7(
|
|
310
|
+
DialogPrimitive.Title,
|
|
311
|
+
{
|
|
312
|
+
"data-slot": "dialog-title",
|
|
313
|
+
className: cn("text-lg leading-none font-semibold", className),
|
|
314
|
+
...props
|
|
315
|
+
}
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
function DialogDescription({
|
|
319
|
+
className,
|
|
320
|
+
...props
|
|
321
|
+
}) {
|
|
322
|
+
return /* @__PURE__ */ jsx7(
|
|
323
|
+
DialogPrimitive.Description,
|
|
324
|
+
{
|
|
325
|
+
"data-slot": "dialog-description",
|
|
326
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
327
|
+
...props
|
|
328
|
+
}
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// src/dropdown-menu.tsx
|
|
333
|
+
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
334
|
+
import { jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
335
|
+
function DropdownMenu({ ...props }) {
|
|
336
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
337
|
+
}
|
|
338
|
+
function DropdownMenuPortal({
|
|
339
|
+
...props
|
|
340
|
+
}) {
|
|
341
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
|
|
342
|
+
}
|
|
343
|
+
function DropdownMenuTrigger({
|
|
344
|
+
...props
|
|
345
|
+
}) {
|
|
346
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
347
|
+
}
|
|
348
|
+
function DropdownMenuContent({
|
|
349
|
+
className,
|
|
350
|
+
sideOffset = 4,
|
|
351
|
+
...props
|
|
352
|
+
}) {
|
|
353
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx8(
|
|
354
|
+
DropdownMenuPrimitive.Content,
|
|
355
|
+
{
|
|
356
|
+
"data-slot": "dropdown-menu-content",
|
|
357
|
+
sideOffset,
|
|
358
|
+
className: cn(
|
|
359
|
+
"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
360
|
+
className
|
|
361
|
+
),
|
|
362
|
+
...props
|
|
363
|
+
}
|
|
364
|
+
) });
|
|
365
|
+
}
|
|
366
|
+
function DropdownMenuGroup({
|
|
367
|
+
...props
|
|
368
|
+
}) {
|
|
369
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
370
|
+
}
|
|
371
|
+
function DropdownMenuItem({
|
|
372
|
+
className,
|
|
373
|
+
inset,
|
|
374
|
+
variant = "default",
|
|
375
|
+
...props
|
|
376
|
+
}) {
|
|
377
|
+
return /* @__PURE__ */ jsx8(
|
|
378
|
+
DropdownMenuPrimitive.Item,
|
|
379
|
+
{
|
|
380
|
+
"data-slot": "dropdown-menu-item",
|
|
381
|
+
"data-inset": inset,
|
|
382
|
+
"data-variant": variant,
|
|
383
|
+
className: cn(
|
|
384
|
+
"relative flex cursor-default 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-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!",
|
|
385
|
+
className
|
|
386
|
+
),
|
|
387
|
+
...props
|
|
388
|
+
}
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
function DropdownMenuCheckboxItem({
|
|
392
|
+
className,
|
|
393
|
+
children,
|
|
394
|
+
checked,
|
|
395
|
+
...props
|
|
396
|
+
}) {
|
|
397
|
+
return /* @__PURE__ */ jsxs3(
|
|
398
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
399
|
+
{
|
|
400
|
+
"data-slot": "dropdown-menu-checkbox-item",
|
|
401
|
+
className: cn(
|
|
402
|
+
"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
403
|
+
className
|
|
404
|
+
),
|
|
405
|
+
checked,
|
|
406
|
+
...props,
|
|
407
|
+
children: [
|
|
408
|
+
/* @__PURE__ */ jsx8("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx8(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx8("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" }) }) }),
|
|
409
|
+
children
|
|
410
|
+
]
|
|
411
|
+
}
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
function DropdownMenuRadioGroup({
|
|
415
|
+
...props
|
|
416
|
+
}) {
|
|
417
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props });
|
|
418
|
+
}
|
|
419
|
+
function DropdownMenuRadioItem({
|
|
420
|
+
className,
|
|
421
|
+
children,
|
|
422
|
+
...props
|
|
423
|
+
}) {
|
|
424
|
+
return /* @__PURE__ */ jsxs3(
|
|
425
|
+
DropdownMenuPrimitive.RadioItem,
|
|
426
|
+
{
|
|
427
|
+
"data-slot": "dropdown-menu-radio-item",
|
|
428
|
+
className: cn(
|
|
429
|
+
"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
430
|
+
className
|
|
431
|
+
),
|
|
432
|
+
...props,
|
|
433
|
+
children: [
|
|
434
|
+
/* @__PURE__ */ jsx8("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx8(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx8("span", { "aria-hidden": "true", className: "size-2 rounded-full bg-current" }) }) }),
|
|
435
|
+
children
|
|
436
|
+
]
|
|
437
|
+
}
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
function DropdownMenuLabel({
|
|
441
|
+
className,
|
|
442
|
+
inset,
|
|
443
|
+
...props
|
|
444
|
+
}) {
|
|
445
|
+
return /* @__PURE__ */ jsx8(
|
|
446
|
+
DropdownMenuPrimitive.Label,
|
|
447
|
+
{
|
|
448
|
+
"data-slot": "dropdown-menu-label",
|
|
449
|
+
"data-inset": inset,
|
|
450
|
+
className: cn("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className),
|
|
451
|
+
...props
|
|
452
|
+
}
|
|
453
|
+
);
|
|
454
|
+
}
|
|
455
|
+
function DropdownMenuSeparator({
|
|
456
|
+
className,
|
|
457
|
+
...props
|
|
458
|
+
}) {
|
|
459
|
+
return /* @__PURE__ */ jsx8(
|
|
460
|
+
DropdownMenuPrimitive.Separator,
|
|
461
|
+
{
|
|
462
|
+
"data-slot": "dropdown-menu-separator",
|
|
463
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
464
|
+
...props
|
|
465
|
+
}
|
|
466
|
+
);
|
|
467
|
+
}
|
|
468
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
469
|
+
return /* @__PURE__ */ jsx8(
|
|
470
|
+
"span",
|
|
471
|
+
{
|
|
472
|
+
"data-slot": "dropdown-menu-shortcut",
|
|
473
|
+
className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className),
|
|
474
|
+
...props
|
|
475
|
+
}
|
|
476
|
+
);
|
|
477
|
+
}
|
|
478
|
+
function DropdownMenuSub({ ...props }) {
|
|
479
|
+
return /* @__PURE__ */ jsx8(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
|
|
480
|
+
}
|
|
481
|
+
function DropdownMenuSubTrigger({
|
|
482
|
+
className,
|
|
483
|
+
inset,
|
|
484
|
+
children,
|
|
485
|
+
...props
|
|
486
|
+
}) {
|
|
487
|
+
return /* @__PURE__ */ jsxs3(
|
|
488
|
+
DropdownMenuPrimitive.SubTrigger,
|
|
489
|
+
{
|
|
490
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
491
|
+
"data-inset": inset,
|
|
492
|
+
className: cn(
|
|
493
|
+
"flex cursor-default 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-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
|
|
494
|
+
className
|
|
495
|
+
),
|
|
496
|
+
...props,
|
|
497
|
+
children: [
|
|
498
|
+
children,
|
|
499
|
+
/* @__PURE__ */ jsx8("span", { "aria-hidden": "true", className: "ml-auto text-sm leading-none", children: "\u203A" })
|
|
500
|
+
]
|
|
501
|
+
}
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
function DropdownMenuSubContent({
|
|
505
|
+
className,
|
|
506
|
+
...props
|
|
507
|
+
}) {
|
|
508
|
+
return /* @__PURE__ */ jsx8(
|
|
509
|
+
DropdownMenuPrimitive.SubContent,
|
|
510
|
+
{
|
|
511
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
512
|
+
className: cn(
|
|
513
|
+
"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
514
|
+
className
|
|
515
|
+
),
|
|
516
|
+
...props
|
|
517
|
+
}
|
|
518
|
+
);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// src/select.tsx
|
|
522
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
523
|
+
import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
524
|
+
function Select({
|
|
525
|
+
...props
|
|
526
|
+
}) {
|
|
527
|
+
return /* @__PURE__ */ jsx9(SelectPrimitive.Root, { "data-slot": "select", ...props });
|
|
528
|
+
}
|
|
529
|
+
function SelectGroup({
|
|
530
|
+
...props
|
|
531
|
+
}) {
|
|
532
|
+
return /* @__PURE__ */ jsx9(SelectPrimitive.Group, { "data-slot": "select-group", ...props });
|
|
533
|
+
}
|
|
534
|
+
function SelectValue({
|
|
535
|
+
...props
|
|
536
|
+
}) {
|
|
537
|
+
return /* @__PURE__ */ jsx9(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
|
|
538
|
+
}
|
|
539
|
+
function SelectTrigger({
|
|
540
|
+
className,
|
|
541
|
+
size = "default",
|
|
542
|
+
children,
|
|
543
|
+
...props
|
|
544
|
+
}) {
|
|
545
|
+
return /* @__PURE__ */ jsxs4(
|
|
546
|
+
SelectPrimitive.Trigger,
|
|
547
|
+
{
|
|
548
|
+
"data-slot": "select-trigger",
|
|
549
|
+
"data-size": size,
|
|
550
|
+
className: cn(
|
|
551
|
+
"flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
552
|
+
className
|
|
553
|
+
),
|
|
554
|
+
...props,
|
|
555
|
+
children: [
|
|
556
|
+
children,
|
|
557
|
+
/* @__PURE__ */ jsx9(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "text-xs opacity-50", children: "\u2304" }) })
|
|
558
|
+
]
|
|
559
|
+
}
|
|
560
|
+
);
|
|
561
|
+
}
|
|
562
|
+
function SelectContent({
|
|
563
|
+
className,
|
|
564
|
+
children,
|
|
565
|
+
position = "item-aligned",
|
|
566
|
+
align = "center",
|
|
567
|
+
...props
|
|
568
|
+
}) {
|
|
569
|
+
return /* @__PURE__ */ jsx9(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs4(
|
|
570
|
+
SelectPrimitive.Content,
|
|
571
|
+
{
|
|
572
|
+
"data-slot": "select-content",
|
|
573
|
+
className: cn(
|
|
574
|
+
"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md 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-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
575
|
+
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",
|
|
576
|
+
className
|
|
577
|
+
),
|
|
578
|
+
position,
|
|
579
|
+
align,
|
|
580
|
+
...props,
|
|
581
|
+
children: [
|
|
582
|
+
/* @__PURE__ */ jsx9(SelectScrollUpButton, {}),
|
|
583
|
+
/* @__PURE__ */ jsx9(
|
|
584
|
+
SelectPrimitive.Viewport,
|
|
585
|
+
{
|
|
586
|
+
className: cn(
|
|
587
|
+
"p-1",
|
|
588
|
+
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
|
|
589
|
+
),
|
|
590
|
+
children
|
|
591
|
+
}
|
|
592
|
+
),
|
|
593
|
+
/* @__PURE__ */ jsx9(SelectScrollDownButton, {})
|
|
594
|
+
]
|
|
595
|
+
}
|
|
596
|
+
) });
|
|
597
|
+
}
|
|
598
|
+
function SelectLabel({
|
|
599
|
+
className,
|
|
600
|
+
...props
|
|
601
|
+
}) {
|
|
602
|
+
return /* @__PURE__ */ jsx9(
|
|
603
|
+
SelectPrimitive.Label,
|
|
604
|
+
{
|
|
605
|
+
"data-slot": "select-label",
|
|
606
|
+
className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
|
|
607
|
+
...props
|
|
608
|
+
}
|
|
609
|
+
);
|
|
610
|
+
}
|
|
611
|
+
function SelectItem({
|
|
612
|
+
className,
|
|
613
|
+
children,
|
|
614
|
+
...props
|
|
615
|
+
}) {
|
|
616
|
+
return /* @__PURE__ */ jsxs4(
|
|
617
|
+
SelectPrimitive.Item,
|
|
618
|
+
{
|
|
619
|
+
"data-slot": "select-item",
|
|
620
|
+
className: cn(
|
|
621
|
+
"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden 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 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
|
|
622
|
+
className
|
|
623
|
+
),
|
|
624
|
+
...props,
|
|
625
|
+
children: [
|
|
626
|
+
/* @__PURE__ */ jsx9(
|
|
627
|
+
"span",
|
|
628
|
+
{
|
|
629
|
+
"data-slot": "select-item-indicator",
|
|
630
|
+
className: "absolute right-2 flex size-3.5 items-center justify-center",
|
|
631
|
+
children: /* @__PURE__ */ jsx9(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" }) })
|
|
632
|
+
}
|
|
633
|
+
),
|
|
634
|
+
/* @__PURE__ */ jsx9(SelectPrimitive.ItemText, { children })
|
|
635
|
+
]
|
|
636
|
+
}
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
function SelectSeparator({
|
|
640
|
+
className,
|
|
641
|
+
...props
|
|
642
|
+
}) {
|
|
643
|
+
return /* @__PURE__ */ jsx9(
|
|
644
|
+
SelectPrimitive.Separator,
|
|
645
|
+
{
|
|
646
|
+
"data-slot": "select-separator",
|
|
647
|
+
className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
|
|
648
|
+
...props
|
|
649
|
+
}
|
|
650
|
+
);
|
|
651
|
+
}
|
|
652
|
+
function SelectScrollUpButton({
|
|
653
|
+
className,
|
|
654
|
+
...props
|
|
655
|
+
}) {
|
|
656
|
+
return /* @__PURE__ */ jsx9(
|
|
657
|
+
SelectPrimitive.ScrollUpButton,
|
|
658
|
+
{
|
|
659
|
+
"data-slot": "select-scroll-up-button",
|
|
660
|
+
className: cn(
|
|
661
|
+
"flex cursor-default items-center justify-center py-1",
|
|
662
|
+
className
|
|
663
|
+
),
|
|
664
|
+
...props,
|
|
665
|
+
children: /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2303" })
|
|
666
|
+
}
|
|
667
|
+
);
|
|
668
|
+
}
|
|
669
|
+
function SelectScrollDownButton({
|
|
670
|
+
className,
|
|
671
|
+
...props
|
|
672
|
+
}) {
|
|
673
|
+
return /* @__PURE__ */ jsx9(
|
|
674
|
+
SelectPrimitive.ScrollDownButton,
|
|
675
|
+
{
|
|
676
|
+
"data-slot": "select-scroll-down-button",
|
|
677
|
+
className: cn(
|
|
678
|
+
"flex cursor-default items-center justify-center py-1",
|
|
679
|
+
className
|
|
680
|
+
),
|
|
681
|
+
...props,
|
|
682
|
+
children: /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2304" })
|
|
683
|
+
}
|
|
684
|
+
);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// src/command.tsx
|
|
688
|
+
import { Command as CommandPrimitive } from "cmdk";
|
|
689
|
+
import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
690
|
+
function Command({
|
|
691
|
+
className,
|
|
692
|
+
...props
|
|
693
|
+
}) {
|
|
694
|
+
return /* @__PURE__ */ jsx10(
|
|
695
|
+
CommandPrimitive,
|
|
696
|
+
{
|
|
697
|
+
"data-slot": "command",
|
|
698
|
+
className: cn(
|
|
699
|
+
"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
|
|
700
|
+
className
|
|
701
|
+
),
|
|
702
|
+
...props
|
|
703
|
+
}
|
|
704
|
+
);
|
|
705
|
+
}
|
|
706
|
+
function CommandDialog({
|
|
707
|
+
title = "Command Palette",
|
|
708
|
+
description = "Search for a command to run...",
|
|
709
|
+
children,
|
|
710
|
+
className,
|
|
711
|
+
showCloseButton = true,
|
|
712
|
+
...props
|
|
713
|
+
}) {
|
|
714
|
+
return /* @__PURE__ */ jsx10(Dialog, { ...props, children: /* @__PURE__ */ jsxs5(
|
|
715
|
+
DialogContent,
|
|
716
|
+
{
|
|
717
|
+
className: cn("overflow-hidden p-0", className),
|
|
718
|
+
showCloseButton,
|
|
719
|
+
children: [
|
|
720
|
+
/* @__PURE__ */ jsxs5(DialogHeader, { className: "sr-only", children: [
|
|
721
|
+
/* @__PURE__ */ jsx10(DialogTitle, { children: title }),
|
|
722
|
+
/* @__PURE__ */ jsx10(DialogDescription, { children: description })
|
|
723
|
+
] }),
|
|
724
|
+
/* @__PURE__ */ jsx10(Command, { className: "**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children })
|
|
725
|
+
]
|
|
726
|
+
}
|
|
727
|
+
) });
|
|
728
|
+
}
|
|
729
|
+
function CommandInput({
|
|
730
|
+
className,
|
|
731
|
+
...props
|
|
732
|
+
}) {
|
|
733
|
+
return /* @__PURE__ */ jsxs5(
|
|
734
|
+
"div",
|
|
735
|
+
{
|
|
736
|
+
"data-slot": "command-input-wrapper",
|
|
737
|
+
className: "flex h-9 items-center gap-2 border-b px-3",
|
|
738
|
+
children: [
|
|
739
|
+
/* @__PURE__ */ jsx10("span", { "aria-hidden": "true", className: "shrink-0 text-sm opacity-50", children: "\u2315" }),
|
|
740
|
+
/* @__PURE__ */ jsx10(
|
|
741
|
+
CommandPrimitive.Input,
|
|
742
|
+
{
|
|
743
|
+
"data-slot": "command-input",
|
|
744
|
+
className: cn(
|
|
745
|
+
"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
746
|
+
className
|
|
747
|
+
),
|
|
748
|
+
...props
|
|
749
|
+
}
|
|
750
|
+
)
|
|
751
|
+
]
|
|
752
|
+
}
|
|
753
|
+
);
|
|
754
|
+
}
|
|
755
|
+
function CommandList({
|
|
756
|
+
className,
|
|
757
|
+
...props
|
|
758
|
+
}) {
|
|
759
|
+
return /* @__PURE__ */ jsx10(
|
|
760
|
+
CommandPrimitive.List,
|
|
761
|
+
{
|
|
762
|
+
"data-slot": "command-list",
|
|
763
|
+
className: cn(
|
|
764
|
+
"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
|
|
765
|
+
className
|
|
766
|
+
),
|
|
767
|
+
...props
|
|
768
|
+
}
|
|
769
|
+
);
|
|
770
|
+
}
|
|
771
|
+
function CommandEmpty({
|
|
772
|
+
...props
|
|
773
|
+
}) {
|
|
774
|
+
return /* @__PURE__ */ jsx10(
|
|
775
|
+
CommandPrimitive.Empty,
|
|
776
|
+
{
|
|
777
|
+
"data-slot": "command-empty",
|
|
778
|
+
className: "py-6 text-center text-sm",
|
|
779
|
+
...props
|
|
780
|
+
}
|
|
781
|
+
);
|
|
782
|
+
}
|
|
783
|
+
function CommandGroup({
|
|
784
|
+
className,
|
|
785
|
+
...props
|
|
786
|
+
}) {
|
|
787
|
+
return /* @__PURE__ */ jsx10(
|
|
788
|
+
CommandPrimitive.Group,
|
|
789
|
+
{
|
|
790
|
+
"data-slot": "command-group",
|
|
791
|
+
className: cn(
|
|
792
|
+
"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",
|
|
793
|
+
className
|
|
794
|
+
),
|
|
795
|
+
...props
|
|
796
|
+
}
|
|
797
|
+
);
|
|
798
|
+
}
|
|
799
|
+
function CommandSeparator({
|
|
800
|
+
className,
|
|
801
|
+
...props
|
|
802
|
+
}) {
|
|
803
|
+
return /* @__PURE__ */ jsx10(
|
|
804
|
+
CommandPrimitive.Separator,
|
|
805
|
+
{
|
|
806
|
+
"data-slot": "command-separator",
|
|
807
|
+
className: cn("-mx-1 h-px bg-border", className),
|
|
808
|
+
...props
|
|
809
|
+
}
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
function CommandItem({
|
|
813
|
+
className,
|
|
814
|
+
...props
|
|
815
|
+
}) {
|
|
816
|
+
return /* @__PURE__ */ jsx10(
|
|
817
|
+
CommandPrimitive.Item,
|
|
818
|
+
{
|
|
819
|
+
"data-slot": "command-item",
|
|
820
|
+
className: cn(
|
|
821
|
+
"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden 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 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
822
|
+
className
|
|
823
|
+
),
|
|
824
|
+
...props
|
|
825
|
+
}
|
|
826
|
+
);
|
|
827
|
+
}
|
|
828
|
+
function CommandShortcut({
|
|
829
|
+
className,
|
|
830
|
+
...props
|
|
831
|
+
}) {
|
|
832
|
+
return /* @__PURE__ */ jsx10(
|
|
833
|
+
"span",
|
|
834
|
+
{
|
|
835
|
+
"data-slot": "command-shortcut",
|
|
836
|
+
className: cn(
|
|
837
|
+
"ml-auto text-xs tracking-widest text-muted-foreground",
|
|
838
|
+
className
|
|
839
|
+
),
|
|
840
|
+
...props
|
|
841
|
+
}
|
|
842
|
+
);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
// src/tabs.tsx
|
|
846
|
+
import { cva as cva3 } from "class-variance-authority";
|
|
847
|
+
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
848
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
849
|
+
function Tabs({
|
|
850
|
+
className,
|
|
851
|
+
orientation = "horizontal",
|
|
852
|
+
...props
|
|
853
|
+
}) {
|
|
854
|
+
return /* @__PURE__ */ jsx11(
|
|
855
|
+
TabsPrimitive.Root,
|
|
856
|
+
{
|
|
857
|
+
"data-slot": "tabs",
|
|
858
|
+
"data-orientation": orientation,
|
|
859
|
+
orientation,
|
|
860
|
+
className: cn(
|
|
861
|
+
"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col",
|
|
862
|
+
className
|
|
863
|
+
),
|
|
864
|
+
...props
|
|
865
|
+
}
|
|
866
|
+
);
|
|
867
|
+
}
|
|
868
|
+
var tabsListVariants = cva3(
|
|
869
|
+
"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none",
|
|
870
|
+
{
|
|
871
|
+
variants: {
|
|
872
|
+
variant: {
|
|
873
|
+
default: "bg-muted",
|
|
874
|
+
line: "gap-1 bg-transparent"
|
|
875
|
+
}
|
|
876
|
+
},
|
|
877
|
+
defaultVariants: {
|
|
878
|
+
variant: "default"
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
);
|
|
882
|
+
function TabsList({
|
|
883
|
+
className,
|
|
884
|
+
variant = "default",
|
|
885
|
+
...props
|
|
886
|
+
}) {
|
|
887
|
+
return /* @__PURE__ */ jsx11(
|
|
888
|
+
TabsPrimitive.List,
|
|
889
|
+
{
|
|
890
|
+
"data-slot": "tabs-list",
|
|
891
|
+
"data-variant": variant,
|
|
892
|
+
className: cn(tabsListVariants({ variant }), className),
|
|
893
|
+
...props
|
|
894
|
+
}
|
|
895
|
+
);
|
|
896
|
+
}
|
|
897
|
+
function TabsTrigger({
|
|
898
|
+
className,
|
|
899
|
+
...props
|
|
900
|
+
}) {
|
|
901
|
+
return /* @__PURE__ */ jsx11(
|
|
902
|
+
TabsPrimitive.Trigger,
|
|
903
|
+
{
|
|
904
|
+
"data-slot": "tabs-trigger",
|
|
905
|
+
className: cn(
|
|
906
|
+
"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
907
|
+
"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent",
|
|
908
|
+
"data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground",
|
|
909
|
+
"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",
|
|
910
|
+
className
|
|
911
|
+
),
|
|
912
|
+
...props
|
|
913
|
+
}
|
|
914
|
+
);
|
|
915
|
+
}
|
|
916
|
+
function TabsContent({
|
|
917
|
+
className,
|
|
918
|
+
...props
|
|
919
|
+
}) {
|
|
920
|
+
return /* @__PURE__ */ jsx11(
|
|
921
|
+
TabsPrimitive.Content,
|
|
922
|
+
{
|
|
923
|
+
"data-slot": "tabs-content",
|
|
924
|
+
className: cn("flex-1 outline-none", className),
|
|
925
|
+
...props
|
|
926
|
+
}
|
|
927
|
+
);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
// src/icon-button.tsx
|
|
931
|
+
import * as React5 from "react";
|
|
932
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
933
|
+
var IconButton = React5.forwardRef(
|
|
934
|
+
({ size = "icon-sm", ...props }, ref) => /* @__PURE__ */ jsx12(Button, { ref, size, ...props })
|
|
935
|
+
);
|
|
936
|
+
IconButton.displayName = "IconButton";
|
|
937
|
+
|
|
938
|
+
// src/kbd.tsx
|
|
939
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
940
|
+
function Kbd({ className, ...props }) {
|
|
941
|
+
return /* @__PURE__ */ jsx13(
|
|
942
|
+
"kbd",
|
|
943
|
+
{
|
|
944
|
+
"data-slot": "kbd",
|
|
945
|
+
className: cn(
|
|
946
|
+
"inline-flex h-5 min-w-5 items-center justify-center rounded border bg-muted px-1 font-mono text-[10px] font-medium text-muted-foreground shadow-xs",
|
|
947
|
+
className
|
|
948
|
+
),
|
|
949
|
+
...props
|
|
950
|
+
}
|
|
951
|
+
);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
// src/spinner.tsx
|
|
955
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
956
|
+
function Spinner({ className, ...props }) {
|
|
957
|
+
return /* @__PURE__ */ jsx14(
|
|
958
|
+
"span",
|
|
959
|
+
{
|
|
960
|
+
"data-slot": "spinner",
|
|
961
|
+
"aria-hidden": "true",
|
|
962
|
+
className: cn("inline-block size-4 animate-spin rounded-full border-2 border-current border-t-transparent", className),
|
|
963
|
+
...props
|
|
964
|
+
}
|
|
965
|
+
);
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
// src/empty-state.tsx
|
|
969
|
+
import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
970
|
+
function EmptyState({ className, title, description, icon, actions, children, ...props }) {
|
|
971
|
+
return /* @__PURE__ */ jsxs6("div", { "data-slot": "empty-state", className: cn("flex min-h-40 flex-col items-center justify-center gap-3 rounded-lg border border-dashed p-8 text-center", className), ...props, children: [
|
|
972
|
+
icon && /* @__PURE__ */ jsx15("div", { "data-slot": "empty-state-icon", className: "text-muted-foreground", children: icon }),
|
|
973
|
+
(title || description) && /* @__PURE__ */ jsxs6("div", { className: "space-y-1", children: [
|
|
974
|
+
title && /* @__PURE__ */ jsx15("h3", { "data-slot": "empty-state-title", className: "text-sm font-medium text-foreground", children: title }),
|
|
975
|
+
description && /* @__PURE__ */ jsx15("p", { "data-slot": "empty-state-description", className: "text-sm text-muted-foreground", children: description })
|
|
976
|
+
] }),
|
|
977
|
+
children,
|
|
978
|
+
actions && /* @__PURE__ */ jsx15("div", { "data-slot": "empty-state-actions", className: "flex items-center justify-center gap-2", children: actions })
|
|
979
|
+
] });
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
// src/error-state.tsx
|
|
983
|
+
import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
984
|
+
function ErrorState({ className, title = "Something went wrong", description, details, actions, children, ...props }) {
|
|
985
|
+
return /* @__PURE__ */ jsx16("div", { "data-slot": "error-state", className: cn("rounded-lg border border-destructive/30 bg-destructive/5 p-4 text-destructive-foreground", className), ...props, children: /* @__PURE__ */ jsxs7("div", { className: "space-y-2", children: [
|
|
986
|
+
title && /* @__PURE__ */ jsx16("h2", { "data-slot": "error-state-title", className: "text-base font-semibold text-destructive", children: title }),
|
|
987
|
+
description && /* @__PURE__ */ jsx16("p", { "data-slot": "error-state-description", className: "text-sm text-foreground", children: description }),
|
|
988
|
+
children,
|
|
989
|
+
details && /* @__PURE__ */ jsx16("pre", { "data-slot": "error-state-details", className: "max-h-48 overflow-auto rounded-md bg-background p-3 text-xs text-muted-foreground", children: details }),
|
|
990
|
+
actions && /* @__PURE__ */ jsx16("div", { "data-slot": "error-state-actions", className: "flex flex-wrap gap-2 pt-2", children: actions })
|
|
991
|
+
] }) });
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
// src/pane.tsx
|
|
995
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
996
|
+
function Pane({ className, ...props }) {
|
|
997
|
+
return /* @__PURE__ */ jsx17("section", { "data-slot": "pane", className: cn("flex min-h-0 flex-col rounded-lg border bg-card text-card-foreground", className), ...props });
|
|
998
|
+
}
|
|
999
|
+
function PaneHeader({ className, ...props }) {
|
|
1000
|
+
return /* @__PURE__ */ jsx17("header", { "data-slot": "pane-header", className: cn("flex min-h-11 items-center justify-between gap-3 border-b px-3", className), ...props });
|
|
1001
|
+
}
|
|
1002
|
+
function PaneTitle({ className, ...props }) {
|
|
1003
|
+
return /* @__PURE__ */ jsx17("h2", { "data-slot": "pane-title", className: cn("truncate text-sm font-semibold", className), ...props });
|
|
1004
|
+
}
|
|
1005
|
+
function PaneDescription({ className, ...props }) {
|
|
1006
|
+
return /* @__PURE__ */ jsx17("p", { "data-slot": "pane-description", className: cn("text-xs text-muted-foreground", className), ...props });
|
|
1007
|
+
}
|
|
1008
|
+
function PaneBody({ className, ...props }) {
|
|
1009
|
+
return /* @__PURE__ */ jsx17("div", { "data-slot": "pane-body", className: cn("min-h-0 flex-1 overflow-auto p-3", className), ...props });
|
|
1010
|
+
}
|
|
1011
|
+
function PaneFooter({ className, ...props }) {
|
|
1012
|
+
return /* @__PURE__ */ jsx17("footer", { "data-slot": "pane-footer", className: cn("flex items-center justify-end gap-2 border-t px-3 py-2", className), ...props });
|
|
1013
|
+
}
|
|
1014
|
+
function PaneToolbar({ className, ...props }) {
|
|
1015
|
+
return /* @__PURE__ */ jsx17("div", { "data-slot": "pane-toolbar", className: cn("flex items-center gap-1", className), ...props });
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
// src/field.tsx
|
|
1019
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1020
|
+
function Field({ className, ...props }) {
|
|
1021
|
+
return /* @__PURE__ */ jsx18("div", { "data-slot": "field", className: cn("grid gap-2", className), ...props });
|
|
1022
|
+
}
|
|
1023
|
+
function FieldLabel({ className, ...props }) {
|
|
1024
|
+
return /* @__PURE__ */ jsx18("label", { "data-slot": "field-label", className: cn("text-sm font-medium leading-none", className), ...props });
|
|
1025
|
+
}
|
|
1026
|
+
function FieldDescription({ className, ...props }) {
|
|
1027
|
+
return /* @__PURE__ */ jsx18("p", { "data-slot": "field-description", className: cn("text-sm text-muted-foreground", className), ...props });
|
|
1028
|
+
}
|
|
1029
|
+
function FieldError({ className, ...props }) {
|
|
1030
|
+
return /* @__PURE__ */ jsx18("p", { "data-slot": "field-error", className: cn("text-sm text-destructive", className), ...props });
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
// src/status-badge.tsx
|
|
1034
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1035
|
+
var toneClasses = {
|
|
1036
|
+
neutral: "bg-muted text-muted-foreground",
|
|
1037
|
+
success: "bg-[color:var(--boring-success-soft,var(--secondary))] text-[color:var(--boring-success,var(--secondary-foreground))]",
|
|
1038
|
+
warning: "bg-[color:var(--boring-warning-soft,var(--accent))] text-[color:var(--boring-warning,var(--accent-foreground))]",
|
|
1039
|
+
danger: "bg-destructive/10 text-destructive",
|
|
1040
|
+
info: "bg-accent text-accent-foreground"
|
|
1041
|
+
};
|
|
1042
|
+
function StatusBadge({ className, tone = "neutral", variant = "ghost", ...props }) {
|
|
1043
|
+
return /* @__PURE__ */ jsx19(Badge, { "data-slot": "status-badge", variant, className: cn(toneClasses[tone], className), ...props });
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
// src/notice.tsx
|
|
1047
|
+
import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1048
|
+
var noticeToneClasses = {
|
|
1049
|
+
info: "border-border bg-muted/20 text-foreground [&_[data-slot=notice-icon]]:text-muted-foreground",
|
|
1050
|
+
success: "border-success/35 bg-[color:var(--success-soft)] text-success [&_[data-slot=notice-description]]:text-foreground",
|
|
1051
|
+
warning: "border-warning/35 bg-[color:var(--warning-soft,var(--accent-soft))] text-foreground [&_[data-slot=notice-icon]]:text-[color:var(--warning,var(--accent))]",
|
|
1052
|
+
error: "border-destructive/40 bg-destructive/10 text-destructive [&_[data-slot=notice-description]]:text-foreground",
|
|
1053
|
+
accent: "border-accent/40 bg-[color:var(--accent-soft)] text-foreground [&_[data-slot=notice-icon]]:text-[color:var(--accent)]",
|
|
1054
|
+
destructive: "border-destructive/50 bg-destructive/10 text-destructive [&_[data-slot=notice-description]]:text-foreground"
|
|
1055
|
+
};
|
|
1056
|
+
function Notice({
|
|
1057
|
+
className,
|
|
1058
|
+
tone = "info",
|
|
1059
|
+
title,
|
|
1060
|
+
description,
|
|
1061
|
+
icon,
|
|
1062
|
+
actions,
|
|
1063
|
+
children,
|
|
1064
|
+
...props
|
|
1065
|
+
}) {
|
|
1066
|
+
return /* @__PURE__ */ jsxs8(
|
|
1067
|
+
"div",
|
|
1068
|
+
{
|
|
1069
|
+
"data-slot": "notice",
|
|
1070
|
+
"data-tone": tone,
|
|
1071
|
+
className: cn(
|
|
1072
|
+
"flex items-start gap-3 rounded-md border px-3 py-2 text-sm",
|
|
1073
|
+
noticeToneClasses[tone],
|
|
1074
|
+
className
|
|
1075
|
+
),
|
|
1076
|
+
...props,
|
|
1077
|
+
children: [
|
|
1078
|
+
icon && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-icon", className: "mt-0.5 shrink-0", children: icon }),
|
|
1079
|
+
/* @__PURE__ */ jsxs8("div", { className: "min-w-0 flex-1", children: [
|
|
1080
|
+
title && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-title", className: "font-medium leading-snug", children: title }),
|
|
1081
|
+
description && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-description", className: cn("text-muted-foreground", title && "mt-0.5"), children: description }),
|
|
1082
|
+
children
|
|
1083
|
+
] }),
|
|
1084
|
+
actions && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-actions", className: "flex shrink-0 items-center gap-2", children: actions })
|
|
1085
|
+
]
|
|
1086
|
+
}
|
|
1087
|
+
);
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
// src/skeleton.tsx
|
|
1091
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1092
|
+
function Skeleton({ className, ...props }) {
|
|
1093
|
+
return /* @__PURE__ */ jsx21(
|
|
1094
|
+
"div",
|
|
1095
|
+
{
|
|
1096
|
+
"data-slot": "skeleton",
|
|
1097
|
+
"aria-hidden": "true",
|
|
1098
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
1099
|
+
...props
|
|
1100
|
+
}
|
|
1101
|
+
);
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
// src/inline-code.tsx
|
|
1105
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1106
|
+
function InlineCode({ className, ...props }) {
|
|
1107
|
+
return /* @__PURE__ */ jsx22(
|
|
1108
|
+
"code",
|
|
1109
|
+
{
|
|
1110
|
+
"data-slot": "inline-code",
|
|
1111
|
+
className: cn("rounded bg-muted px-1.5 py-0.5 font-mono text-[0.85em] text-foreground", className),
|
|
1112
|
+
...props
|
|
1113
|
+
}
|
|
1114
|
+
);
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
// src/toolbar.tsx
|
|
1118
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
1119
|
+
function Toolbar({ className, ...props }) {
|
|
1120
|
+
return /* @__PURE__ */ jsx23(
|
|
1121
|
+
"div",
|
|
1122
|
+
{
|
|
1123
|
+
"data-slot": "toolbar",
|
|
1124
|
+
role: "toolbar",
|
|
1125
|
+
className: cn("flex items-center gap-1 overflow-x-auto whitespace-nowrap [&::-webkit-scrollbar]:hidden", className),
|
|
1126
|
+
...props
|
|
1127
|
+
}
|
|
1128
|
+
);
|
|
1129
|
+
}
|
|
1130
|
+
function ToolbarGroup({ className, ...props }) {
|
|
1131
|
+
return /* @__PURE__ */ jsx23("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-0.5", className), ...props });
|
|
1132
|
+
}
|
|
1133
|
+
function ToolbarButton({ className, variant = "ghost", size = "icon-sm", ...props }) {
|
|
1134
|
+
return /* @__PURE__ */ jsx23(Button, { "data-slot": "toolbar-button", variant, size, className: cn("shrink-0", className), ...props });
|
|
1135
|
+
}
|
|
1136
|
+
function ToolbarSeparator({ className, ...props }) {
|
|
1137
|
+
return /* @__PURE__ */ jsx23("div", { "data-slot": "toolbar-separator", "aria-hidden": "true", className: cn("mx-1 h-4 w-px shrink-0 bg-border/60", className), ...props });
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
// src/chip.tsx
|
|
1141
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
1142
|
+
function Chip({ className, selected, ...props }) {
|
|
1143
|
+
return /* @__PURE__ */ jsx24(
|
|
1144
|
+
"span",
|
|
1145
|
+
{
|
|
1146
|
+
"data-slot": "chip",
|
|
1147
|
+
"data-selected": selected ? "true" : void 0,
|
|
1148
|
+
className: cn(
|
|
1149
|
+
"inline-flex min-h-6 items-center gap-1.5 rounded-full border border-border bg-muted/50 px-2 py-0.5 text-xs text-foreground",
|
|
1150
|
+
selected && "border-foreground/20 bg-foreground/10",
|
|
1151
|
+
className
|
|
1152
|
+
),
|
|
1153
|
+
...props
|
|
1154
|
+
}
|
|
1155
|
+
);
|
|
1156
|
+
}
|
|
1157
|
+
function ChipButton({ className, selected, variant = "outline", size = "xs", ...props }) {
|
|
1158
|
+
return /* @__PURE__ */ jsx24(
|
|
1159
|
+
Button,
|
|
1160
|
+
{
|
|
1161
|
+
"data-slot": "chip-button",
|
|
1162
|
+
"data-selected": selected ? "true" : void 0,
|
|
1163
|
+
variant,
|
|
1164
|
+
size,
|
|
1165
|
+
className: cn(
|
|
1166
|
+
"h-auto rounded-full px-2 py-0.5 text-xs",
|
|
1167
|
+
selected && "border-foreground/20 bg-foreground/10",
|
|
1168
|
+
className
|
|
1169
|
+
),
|
|
1170
|
+
...props
|
|
1171
|
+
}
|
|
1172
|
+
);
|
|
1173
|
+
}
|
|
1174
|
+
function ChipRemove({ className, children, variant = "ghost", size = "icon-xs", ...props }) {
|
|
1175
|
+
return /* @__PURE__ */ jsx24(
|
|
1176
|
+
Button,
|
|
1177
|
+
{
|
|
1178
|
+
"data-slot": "chip-remove",
|
|
1179
|
+
variant,
|
|
1180
|
+
size,
|
|
1181
|
+
className: cn("size-4 rounded-full text-muted-foreground hover:text-foreground", className),
|
|
1182
|
+
...props,
|
|
1183
|
+
children: children ?? /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" })
|
|
1184
|
+
}
|
|
1185
|
+
);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
// src/segmented-control.tsx
|
|
1189
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
1190
|
+
function SegmentedControl({ className, ...props }) {
|
|
1191
|
+
return /* @__PURE__ */ jsx25(
|
|
1192
|
+
"div",
|
|
1193
|
+
{
|
|
1194
|
+
"data-slot": "segmented-control",
|
|
1195
|
+
role: "tablist",
|
|
1196
|
+
className: cn("inline-flex items-center gap-0.5 rounded-md border border-border bg-muted/50 p-0.5", className),
|
|
1197
|
+
...props
|
|
1198
|
+
}
|
|
1199
|
+
);
|
|
1200
|
+
}
|
|
1201
|
+
function SegmentedControlItem({ className, selected, variant = "ghost", size = "xs", ...props }) {
|
|
1202
|
+
return /* @__PURE__ */ jsx25(
|
|
1203
|
+
Button,
|
|
1204
|
+
{
|
|
1205
|
+
"data-slot": "segmented-control-item",
|
|
1206
|
+
role: "tab",
|
|
1207
|
+
"aria-selected": selected,
|
|
1208
|
+
"data-selected": selected ? "true" : void 0,
|
|
1209
|
+
variant,
|
|
1210
|
+
size,
|
|
1211
|
+
className: cn(
|
|
1212
|
+
"rounded-sm border border-transparent px-2 font-normal shadow-none",
|
|
1213
|
+
selected ? "bg-background font-medium text-foreground shadow-sm hover:bg-background" : "text-muted-foreground hover:text-foreground",
|
|
1214
|
+
className
|
|
1215
|
+
),
|
|
1216
|
+
...props
|
|
1217
|
+
}
|
|
1218
|
+
);
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
// src/settings.tsx
|
|
1222
|
+
import { jsx as jsx26, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1223
|
+
function SettingsPanel({ className, icon, title, description, footer, danger, testId, children, ...props }) {
|
|
1224
|
+
return /* @__PURE__ */ jsxs9(
|
|
1225
|
+
"section",
|
|
1226
|
+
{
|
|
1227
|
+
"data-slot": "settings-panel",
|
|
1228
|
+
"data-testid": testId,
|
|
1229
|
+
className: cn("scroll-mt-6 overflow-hidden rounded-lg border border-border/60 bg-background shadow-none", className),
|
|
1230
|
+
...props,
|
|
1231
|
+
children: [
|
|
1232
|
+
/* @__PURE__ */ jsxs9("div", { "data-slot": "settings-panel-header", className: "flex min-h-11 items-center gap-2 border-b border-border/50 px-4 py-2.5", children: [
|
|
1233
|
+
icon && /* @__PURE__ */ jsx26("span", { "data-slot": "settings-panel-icon", className: danger ? "text-destructive" : "text-muted-foreground", children: icon }),
|
|
1234
|
+
/* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
|
|
1235
|
+
/* @__PURE__ */ jsx26("h2", { "data-slot": "settings-panel-title", className: cn("text-[13px] font-medium leading-5", danger ? "text-destructive" : "text-foreground"), children: title }),
|
|
1236
|
+
description ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-panel-description", className: "text-[12px] leading-5 text-muted-foreground", children: description }) : null
|
|
1237
|
+
] })
|
|
1238
|
+
] }),
|
|
1239
|
+
/* @__PURE__ */ jsx26("div", { "data-slot": "settings-panel-body", className: "p-4", children }),
|
|
1240
|
+
footer ? /* @__PURE__ */ jsx26("div", { "data-slot": "settings-panel-footer", className: "flex items-center justify-end gap-2 border-t border-border/50 bg-muted/10 px-4 py-3", children: footer }) : null
|
|
1241
|
+
]
|
|
1242
|
+
}
|
|
1243
|
+
);
|
|
1244
|
+
}
|
|
1245
|
+
function SettingsNav({ className, label, items, ...props }) {
|
|
1246
|
+
return /* @__PURE__ */ jsxs9("nav", { "data-slot": "settings-nav", "aria-label": `${label} sections`, className: cn("boring-settings-nav", className), ...props, children: [
|
|
1247
|
+
/* @__PURE__ */ jsx26("p", { "data-slot": "settings-nav-label", className: "boring-settings-nav-label", children: label }),
|
|
1248
|
+
items.map((item) => /* @__PURE__ */ jsx26("a", { "data-slot": "settings-nav-item", href: item.href, className: "boring-settings-nav-item", children: /* @__PURE__ */ jsxs9("span", { className: "min-w-0", children: [
|
|
1249
|
+
/* @__PURE__ */ jsx26("span", { className: "block truncate text-[12.5px] font-medium text-foreground", children: item.label }),
|
|
1250
|
+
item.description ? /* @__PURE__ */ jsx26("span", { className: "block truncate text-[11.5px] leading-4 text-muted-foreground", children: item.description }) : null
|
|
1251
|
+
] }) }, item.href))
|
|
1252
|
+
] });
|
|
1253
|
+
}
|
|
1254
|
+
function SettingsPageHeader({ className, eyebrow, title, description, context, children, ...props }) {
|
|
1255
|
+
return /* @__PURE__ */ jsxs9("header", { "data-slot": "settings-page-header", className: cn("boring-settings-page-header", className), ...props, children: [
|
|
1256
|
+
context,
|
|
1257
|
+
/* @__PURE__ */ jsxs9("div", { className: "max-w-2xl", children: [
|
|
1258
|
+
eyebrow ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-page-eyebrow", className: "text-[11px] font-medium uppercase leading-4 text-muted-foreground", children: eyebrow }) : null,
|
|
1259
|
+
/* @__PURE__ */ jsx26("h1", { "data-slot": "settings-page-title", className: "mt-1 text-[20px] font-semibold leading-7 tracking-tight text-foreground", children: title }),
|
|
1260
|
+
description ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-page-description", className: "mt-2 text-[13px] leading-5 text-muted-foreground", children: description }) : null
|
|
1261
|
+
] }),
|
|
1262
|
+
children
|
|
1263
|
+
] });
|
|
1264
|
+
}
|
|
1265
|
+
function SettingsActionRow({ className, title, description, action, ...props }) {
|
|
1266
|
+
return /* @__PURE__ */ jsxs9("div", { "data-slot": "settings-action-row", className: cn("boring-settings-action-row", className), ...props, children: [
|
|
1267
|
+
/* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
|
|
1268
|
+
/* @__PURE__ */ jsx26("p", { "data-slot": "settings-action-title", className: "text-[13px] font-medium leading-5 text-foreground", children: title }),
|
|
1269
|
+
description ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-action-description", className: "mt-1 max-w-xl text-[12px] leading-5 text-muted-foreground", children: description }) : null
|
|
1270
|
+
] }),
|
|
1271
|
+
/* @__PURE__ */ jsx26("div", { "data-slot": "settings-action", className: "shrink-0", children: action })
|
|
1272
|
+
] });
|
|
1273
|
+
}
|
|
1274
|
+
function DetailLine({ className, icon, label, children, ...props }) {
|
|
1275
|
+
return /* @__PURE__ */ jsxs9("div", { "data-slot": "detail-line", className: cn("flex min-h-12 items-center gap-3 px-3 py-2 text-[13px]", className), ...props, children: [
|
|
1276
|
+
icon ? /* @__PURE__ */ jsx26("span", { "data-slot": "detail-line-icon", className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground", children: icon }) : null,
|
|
1277
|
+
/* @__PURE__ */ jsx26("dt", { "data-slot": "detail-line-label", className: "w-32 shrink-0 text-[12px] text-muted-foreground", children: label }),
|
|
1278
|
+
/* @__PURE__ */ jsx26("dd", { "data-slot": "detail-line-value", className: "min-w-0 flex-1 text-foreground", children })
|
|
1279
|
+
] });
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
// src/disclosure.tsx
|
|
1283
|
+
import * as React6 from "react";
|
|
1284
|
+
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
1285
|
+
import { jsx as jsx27, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1286
|
+
var Disclosure = CollapsiblePrimitive.Root;
|
|
1287
|
+
var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
|
|
1288
|
+
CollapsiblePrimitive.Content,
|
|
1289
|
+
{
|
|
1290
|
+
ref,
|
|
1291
|
+
"data-slot": "disclosure-content",
|
|
1292
|
+
className: cn("overflow-hidden data-[state=closed]:animate-out data-[state=open]:animate-in", className),
|
|
1293
|
+
...props
|
|
1294
|
+
}
|
|
1295
|
+
));
|
|
1296
|
+
DisclosureContent.displayName = "DisclosureContent";
|
|
1297
|
+
var DisclosureTrigger = React6.forwardRef(
|
|
1298
|
+
({ className, children, chevron, variant = "ghost", size = "sm", ...props }, ref) => /* @__PURE__ */ jsx27(CollapsiblePrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
|
|
1299
|
+
Button,
|
|
1300
|
+
{
|
|
1301
|
+
ref,
|
|
1302
|
+
"data-slot": "disclosure-trigger",
|
|
1303
|
+
variant,
|
|
1304
|
+
size,
|
|
1305
|
+
className: cn("group/disclosure justify-start gap-2", className),
|
|
1306
|
+
...props,
|
|
1307
|
+
children: [
|
|
1308
|
+
chevron ?? /* @__PURE__ */ jsx27(DisclosureChevron, {}),
|
|
1309
|
+
children
|
|
1310
|
+
]
|
|
1311
|
+
}
|
|
1312
|
+
) })
|
|
1313
|
+
);
|
|
1314
|
+
DisclosureTrigger.displayName = "DisclosureTrigger";
|
|
1315
|
+
function DisclosureChevron({ className, ...props }) {
|
|
1316
|
+
return /* @__PURE__ */ jsx27(
|
|
1317
|
+
"span",
|
|
1318
|
+
{
|
|
1319
|
+
"data-slot": "disclosure-chevron",
|
|
1320
|
+
"aria-hidden": "true",
|
|
1321
|
+
className: cn("inline-block text-[11px] text-muted-foreground transition-transform group-data-[state=open]/disclosure:rotate-90", className),
|
|
1322
|
+
...props,
|
|
1323
|
+
children: "\u25B6"
|
|
1324
|
+
}
|
|
1325
|
+
);
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
// src/resize-handle.tsx
|
|
1329
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
1330
|
+
function ResizeHandle({
|
|
1331
|
+
className,
|
|
1332
|
+
orientation = "vertical",
|
|
1333
|
+
onResizeStart,
|
|
1334
|
+
role = "separator",
|
|
1335
|
+
tabIndex = 0,
|
|
1336
|
+
...props
|
|
1337
|
+
}) {
|
|
1338
|
+
return /* @__PURE__ */ jsx28(
|
|
1339
|
+
"div",
|
|
1340
|
+
{
|
|
1341
|
+
"data-slot": "resize-handle",
|
|
1342
|
+
"data-orientation": orientation,
|
|
1343
|
+
role,
|
|
1344
|
+
"aria-orientation": orientation,
|
|
1345
|
+
tabIndex,
|
|
1346
|
+
onPointerDown: onResizeStart,
|
|
1347
|
+
className: cn(
|
|
1348
|
+
"shrink-0 touch-none select-none bg-transparent transition-colors hover:bg-border/70 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
|
|
1349
|
+
orientation === "vertical" ? "w-1 cursor-col-resize" : "h-1 cursor-row-resize",
|
|
1350
|
+
className
|
|
1351
|
+
),
|
|
1352
|
+
...props
|
|
1353
|
+
}
|
|
1354
|
+
);
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
// src/avatar.tsx
|
|
1358
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
1359
|
+
function Avatar({ className, ...props }) {
|
|
1360
|
+
return /* @__PURE__ */ jsx29(
|
|
1361
|
+
"div",
|
|
1362
|
+
{
|
|
1363
|
+
"data-slot": "avatar",
|
|
1364
|
+
className: cn("relative flex size-8 shrink-0 overflow-hidden rounded-full bg-muted text-foreground", className),
|
|
1365
|
+
...props
|
|
1366
|
+
}
|
|
1367
|
+
);
|
|
1368
|
+
}
|
|
1369
|
+
function AvatarFallback({ className, ...props }) {
|
|
1370
|
+
return /* @__PURE__ */ jsx29(
|
|
1371
|
+
"span",
|
|
1372
|
+
{
|
|
1373
|
+
"data-slot": "avatar-fallback",
|
|
1374
|
+
className: cn("flex size-full items-center justify-center text-xs font-medium uppercase", className),
|
|
1375
|
+
...props
|
|
1376
|
+
}
|
|
1377
|
+
);
|
|
1378
|
+
}
|
|
1379
|
+
function InitialsAvatar({ initials, className, ...props }) {
|
|
1380
|
+
return /* @__PURE__ */ jsx29(Avatar, { className, ...props, children: /* @__PURE__ */ jsx29(AvatarFallback, { children: initials }) });
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
// src/toast.tsx
|
|
1384
|
+
import * as React7 from "react";
|
|
1385
|
+
import { createPortal } from "react-dom";
|
|
1386
|
+
import { jsx as jsx30, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1387
|
+
var toasts = [];
|
|
1388
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
1389
|
+
var nextId = 0;
|
|
1390
|
+
function emit() {
|
|
1391
|
+
for (const listener of listeners) listener(toasts);
|
|
1392
|
+
}
|
|
1393
|
+
function addToast(input) {
|
|
1394
|
+
const id = `t${++nextId}`;
|
|
1395
|
+
const record = { ...input, id, createdAt: Date.now(), durationMs: input.durationMs ?? 3e3 };
|
|
1396
|
+
toasts = [...toasts, record];
|
|
1397
|
+
emit();
|
|
1398
|
+
if (record.durationMs && record.durationMs > 0) setTimeout(() => dismissToast(id), record.durationMs);
|
|
1399
|
+
return id;
|
|
1400
|
+
}
|
|
1401
|
+
function dismissToast(id) {
|
|
1402
|
+
const before = toasts.length;
|
|
1403
|
+
toasts = toasts.filter((toast2) => toast2.id !== id);
|
|
1404
|
+
if (toasts.length !== before) emit();
|
|
1405
|
+
}
|
|
1406
|
+
function subscribeToasts(listener) {
|
|
1407
|
+
listeners.add(listener);
|
|
1408
|
+
listener(toasts);
|
|
1409
|
+
return () => listeners.delete(listener);
|
|
1410
|
+
}
|
|
1411
|
+
function getActiveToasts() {
|
|
1412
|
+
return toasts;
|
|
1413
|
+
}
|
|
1414
|
+
function clearToasts() {
|
|
1415
|
+
if (!toasts.length) return;
|
|
1416
|
+
toasts = [];
|
|
1417
|
+
emit();
|
|
1418
|
+
}
|
|
1419
|
+
function normalize(input, variant) {
|
|
1420
|
+
return typeof input === "string" ? { title: input, variant } : { variant, ...input };
|
|
1421
|
+
}
|
|
1422
|
+
var toast = Object.assign(
|
|
1423
|
+
(input) => addToast(normalize(input, "info")),
|
|
1424
|
+
{
|
|
1425
|
+
success: (input) => addToast(normalize(input, "success")),
|
|
1426
|
+
error: (input) => addToast(normalize(input, "error")),
|
|
1427
|
+
info: (input) => addToast(normalize(input, "info")),
|
|
1428
|
+
dismiss: dismissToast
|
|
1429
|
+
}
|
|
1430
|
+
);
|
|
1431
|
+
var VARIANT_CLASS = {
|
|
1432
|
+
success: "border-accent/40 bg-background text-foreground [&_[data-toast-icon]]:text-accent",
|
|
1433
|
+
error: "border-destructive/50 bg-background text-foreground [&_[data-toast-icon]]:text-destructive",
|
|
1434
|
+
info: "border-border bg-background text-foreground [&_[data-toast-icon]]:text-foreground/70"
|
|
1435
|
+
};
|
|
1436
|
+
var VARIANT_ICON = {
|
|
1437
|
+
success: "\u2713",
|
|
1438
|
+
error: "!",
|
|
1439
|
+
info: "i"
|
|
1440
|
+
};
|
|
1441
|
+
function Toaster({ position = "bottom-right", className }) {
|
|
1442
|
+
const [items, setItems] = React7.useState(() => toasts);
|
|
1443
|
+
React7.useEffect(() => subscribeToasts(setItems), []);
|
|
1444
|
+
if (typeof document === "undefined") return null;
|
|
1445
|
+
const node = /* @__PURE__ */ jsx30(
|
|
1446
|
+
"div",
|
|
1447
|
+
{
|
|
1448
|
+
role: "region",
|
|
1449
|
+
"aria-label": "Notifications",
|
|
1450
|
+
"data-testid": "toaster",
|
|
1451
|
+
className: cn(
|
|
1452
|
+
"pointer-events-none fixed z-[1000] flex w-[340px] max-w-[calc(100vw-2rem)] flex-col gap-2",
|
|
1453
|
+
position === "bottom-right" && "bottom-4 right-4 items-end",
|
|
1454
|
+
position === "bottom-left" && "bottom-4 left-4 items-start",
|
|
1455
|
+
position === "top-right" && "top-4 right-4 items-end",
|
|
1456
|
+
position === "top-left" && "top-4 left-4 items-start",
|
|
1457
|
+
className
|
|
1458
|
+
),
|
|
1459
|
+
children: items.map((item) => {
|
|
1460
|
+
const variant = item.variant ?? "info";
|
|
1461
|
+
return /* @__PURE__ */ jsxs11(
|
|
1462
|
+
"div",
|
|
1463
|
+
{
|
|
1464
|
+
role: "status",
|
|
1465
|
+
"data-testid": "toast",
|
|
1466
|
+
"data-variant": variant,
|
|
1467
|
+
className: cn(
|
|
1468
|
+
"pointer-events-auto flex w-full items-start gap-2.5 rounded-md border px-3 py-2 shadow-md",
|
|
1469
|
+
"animate-in fade-in slide-in-from-bottom-2 duration-150",
|
|
1470
|
+
VARIANT_CLASS[variant]
|
|
1471
|
+
),
|
|
1472
|
+
children: [
|
|
1473
|
+
/* @__PURE__ */ jsx30("span", { "data-toast-icon": true, className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center text-[11px] font-semibold leading-none", children: VARIANT_ICON[variant] }),
|
|
1474
|
+
/* @__PURE__ */ jsxs11("div", { className: "min-w-0 flex-1", children: [
|
|
1475
|
+
item.title && /* @__PURE__ */ jsx30("div", { className: "text-sm font-medium leading-snug", children: item.title }),
|
|
1476
|
+
item.description && /* @__PURE__ */ jsx30("div", { className: cn("text-xs text-muted-foreground", item.title ? "mt-0.5" : "leading-snug"), children: item.description })
|
|
1477
|
+
] }),
|
|
1478
|
+
/* @__PURE__ */ jsx30(IconButton, { type: "button", variant: "ghost", size: "icon-xs", onClick: () => dismissToast(item.id), "aria-label": "Dismiss", className: "shrink-0 text-muted-foreground/70", children: /* @__PURE__ */ jsx30("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" }) })
|
|
1479
|
+
]
|
|
1480
|
+
},
|
|
1481
|
+
item.id
|
|
1482
|
+
);
|
|
1483
|
+
})
|
|
1484
|
+
}
|
|
1485
|
+
);
|
|
1486
|
+
return createPortal(node, document.body);
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
// src/loading-state.tsx
|
|
1490
|
+
import { jsx as jsx31, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1491
|
+
function LoadingState({ className, label = "Loading\u2026", centered = false, children, ...props }) {
|
|
1492
|
+
return /* @__PURE__ */ jsxs12(
|
|
1493
|
+
"div",
|
|
1494
|
+
{
|
|
1495
|
+
"data-slot": "loading-state",
|
|
1496
|
+
role: "status",
|
|
1497
|
+
className: cn(
|
|
1498
|
+
"flex items-center gap-2 text-sm text-muted-foreground",
|
|
1499
|
+
centered && "h-full w-full justify-center",
|
|
1500
|
+
className
|
|
1501
|
+
),
|
|
1502
|
+
...props,
|
|
1503
|
+
children: [
|
|
1504
|
+
/* @__PURE__ */ jsx31(Spinner, { className: "size-3.5" }),
|
|
1505
|
+
/* @__PURE__ */ jsx31("span", { children: children ?? label })
|
|
1506
|
+
]
|
|
1507
|
+
}
|
|
1508
|
+
);
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
// src/list.tsx
|
|
1512
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
1513
|
+
function List2({ className, ...props }) {
|
|
1514
|
+
return /* @__PURE__ */ jsx32("div", { "data-slot": "list", className: cn("divide-y divide-border/60", className), ...props });
|
|
1515
|
+
}
|
|
1516
|
+
function ListRow({ className, interactive, ...props }) {
|
|
1517
|
+
return /* @__PURE__ */ jsx32(
|
|
1518
|
+
"div",
|
|
1519
|
+
{
|
|
1520
|
+
"data-slot": "list-row",
|
|
1521
|
+
"data-interactive": interactive ? "true" : void 0,
|
|
1522
|
+
className: cn(
|
|
1523
|
+
"flex items-center justify-between gap-3 py-3",
|
|
1524
|
+
interactive && "cursor-pointer rounded-md px-2 transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
|
|
1525
|
+
className
|
|
1526
|
+
),
|
|
1527
|
+
...props
|
|
1528
|
+
}
|
|
1529
|
+
);
|
|
1530
|
+
}
|
|
1531
|
+
function ListRowMain({ className, ...props }) {
|
|
1532
|
+
return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-main", className: cn("min-w-0 flex-1", className), ...props });
|
|
1533
|
+
}
|
|
1534
|
+
function ListRowTitle({ className, ...props }) {
|
|
1535
|
+
return /* @__PURE__ */ jsx32("p", { "data-slot": "list-row-title", className: cn("truncate text-sm font-medium text-foreground", className), ...props });
|
|
1536
|
+
}
|
|
1537
|
+
function ListRowDescription({ className, ...props }) {
|
|
1538
|
+
return /* @__PURE__ */ jsx32("p", { "data-slot": "list-row-description", className: cn("truncate text-xs text-muted-foreground", className), ...props });
|
|
1539
|
+
}
|
|
1540
|
+
function ListRowMeta({ className, ...props }) {
|
|
1541
|
+
return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-meta", className: cn("flex shrink-0 items-center gap-2 text-xs text-muted-foreground", className), ...props });
|
|
1542
|
+
}
|
|
1543
|
+
function ListRowActions({ className, ...props }) {
|
|
1544
|
+
return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
// src/detail-list.tsx
|
|
1548
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
1549
|
+
function DetailList({ className, ...props }) {
|
|
1550
|
+
return /* @__PURE__ */ jsx33(
|
|
1551
|
+
"dl",
|
|
1552
|
+
{
|
|
1553
|
+
"data-slot": "detail-list",
|
|
1554
|
+
className: cn("divide-y divide-border/50 rounded-md border border-border/50 bg-muted/10", className),
|
|
1555
|
+
...props
|
|
1556
|
+
}
|
|
1557
|
+
);
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
// src/floating-panel.tsx
|
|
1561
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
1562
|
+
function FloatingPanel({ className, ...props }) {
|
|
1563
|
+
return /* @__PURE__ */ jsx34(
|
|
1564
|
+
"div",
|
|
1565
|
+
{
|
|
1566
|
+
"data-slot": "floating-panel",
|
|
1567
|
+
className: cn("rounded-lg border border-border/70 bg-[color:var(--surface-workbench-left,var(--background))] p-2 text-foreground shadow-2xl", className),
|
|
1568
|
+
...props
|
|
1569
|
+
}
|
|
1570
|
+
);
|
|
1571
|
+
}
|
|
1572
|
+
function FloatingPanelHeader({ className, ...props }) {
|
|
1573
|
+
return /* @__PURE__ */ jsx34("div", { "data-slot": "floating-panel-header", className: cn("flex items-center justify-between gap-2 border-b border-border px-1 pb-2", className), ...props });
|
|
1574
|
+
}
|
|
1575
|
+
function FloatingPanelBody({ className, ...props }) {
|
|
1576
|
+
return /* @__PURE__ */ jsx34("div", { "data-slot": "floating-panel-body", className: cn("py-1", className), ...props });
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
// src/card.tsx
|
|
1580
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
1581
|
+
function Card({ className, ...props }) {
|
|
1582
|
+
return /* @__PURE__ */ jsx35(
|
|
1583
|
+
"div",
|
|
1584
|
+
{
|
|
1585
|
+
"data-slot": "card",
|
|
1586
|
+
className: cn(
|
|
1587
|
+
"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm",
|
|
1588
|
+
className
|
|
1589
|
+
),
|
|
1590
|
+
...props
|
|
1591
|
+
}
|
|
1592
|
+
);
|
|
1593
|
+
}
|
|
1594
|
+
function CardHeader({ className, ...props }) {
|
|
1595
|
+
return /* @__PURE__ */ jsx35(
|
|
1596
|
+
"div",
|
|
1597
|
+
{
|
|
1598
|
+
"data-slot": "card-header",
|
|
1599
|
+
className: cn(
|
|
1600
|
+
"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
|
|
1601
|
+
className
|
|
1602
|
+
),
|
|
1603
|
+
...props
|
|
1604
|
+
}
|
|
1605
|
+
);
|
|
1606
|
+
}
|
|
1607
|
+
function CardTitle({ className, ...props }) {
|
|
1608
|
+
return /* @__PURE__ */ jsx35(
|
|
1609
|
+
"div",
|
|
1610
|
+
{
|
|
1611
|
+
"data-slot": "card-title",
|
|
1612
|
+
className: cn("leading-none font-semibold", className),
|
|
1613
|
+
...props
|
|
1614
|
+
}
|
|
1615
|
+
);
|
|
1616
|
+
}
|
|
1617
|
+
function CardDescription({ className, ...props }) {
|
|
1618
|
+
return /* @__PURE__ */ jsx35(
|
|
1619
|
+
"div",
|
|
1620
|
+
{
|
|
1621
|
+
"data-slot": "card-description",
|
|
1622
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1623
|
+
...props
|
|
1624
|
+
}
|
|
1625
|
+
);
|
|
1626
|
+
}
|
|
1627
|
+
function CardAction({ className, ...props }) {
|
|
1628
|
+
return /* @__PURE__ */ jsx35(
|
|
1629
|
+
"div",
|
|
1630
|
+
{
|
|
1631
|
+
"data-slot": "card-action",
|
|
1632
|
+
className: cn(
|
|
1633
|
+
"col-start-2 row-span-2 row-start-1 self-start justify-self-end",
|
|
1634
|
+
className
|
|
1635
|
+
),
|
|
1636
|
+
...props
|
|
1637
|
+
}
|
|
1638
|
+
);
|
|
1639
|
+
}
|
|
1640
|
+
function CardContent({ className, ...props }) {
|
|
1641
|
+
return /* @__PURE__ */ jsx35(
|
|
1642
|
+
"div",
|
|
1643
|
+
{
|
|
1644
|
+
"data-slot": "card-content",
|
|
1645
|
+
className: cn("px-6", className),
|
|
1646
|
+
...props
|
|
1647
|
+
}
|
|
1648
|
+
);
|
|
1649
|
+
}
|
|
1650
|
+
function CardFooter({ className, ...props }) {
|
|
1651
|
+
return /* @__PURE__ */ jsx35(
|
|
1652
|
+
"div",
|
|
1653
|
+
{
|
|
1654
|
+
"data-slot": "card-footer",
|
|
1655
|
+
className: cn("flex items-center px-6 [.border-t]:pt-6", className),
|
|
1656
|
+
...props
|
|
1657
|
+
}
|
|
1658
|
+
);
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
// src/label.tsx
|
|
1662
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
1663
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
1664
|
+
function Label3({
|
|
1665
|
+
className,
|
|
1666
|
+
...props
|
|
1667
|
+
}) {
|
|
1668
|
+
return /* @__PURE__ */ jsx36(
|
|
1669
|
+
LabelPrimitive.Root,
|
|
1670
|
+
{
|
|
1671
|
+
"data-slot": "label",
|
|
1672
|
+
className: cn(
|
|
1673
|
+
"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",
|
|
1674
|
+
className
|
|
1675
|
+
),
|
|
1676
|
+
...props
|
|
1677
|
+
}
|
|
1678
|
+
);
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
// src/checkbox.tsx
|
|
1682
|
+
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
1683
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
1684
|
+
function Checkbox({
|
|
1685
|
+
className,
|
|
1686
|
+
...props
|
|
1687
|
+
}) {
|
|
1688
|
+
return /* @__PURE__ */ jsx37(
|
|
1689
|
+
CheckboxPrimitive.Root,
|
|
1690
|
+
{
|
|
1691
|
+
"data-slot": "checkbox",
|
|
1692
|
+
className: cn(
|
|
1693
|
+
"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary",
|
|
1694
|
+
className
|
|
1695
|
+
),
|
|
1696
|
+
...props,
|
|
1697
|
+
children: /* @__PURE__ */ jsx37(
|
|
1698
|
+
CheckboxPrimitive.Indicator,
|
|
1699
|
+
{
|
|
1700
|
+
"data-slot": "checkbox-indicator",
|
|
1701
|
+
className: "grid place-content-center text-current transition-none",
|
|
1702
|
+
children: /* @__PURE__ */ jsx37("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" })
|
|
1703
|
+
}
|
|
1704
|
+
)
|
|
1705
|
+
}
|
|
1706
|
+
);
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
// src/alert-dialog.tsx
|
|
1710
|
+
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
1711
|
+
import { jsx as jsx38, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1712
|
+
function AlertDialog({
|
|
1713
|
+
...props
|
|
1714
|
+
}) {
|
|
1715
|
+
return /* @__PURE__ */ jsx38(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
1716
|
+
}
|
|
1717
|
+
function AlertDialogTrigger({
|
|
1718
|
+
...props
|
|
1719
|
+
}) {
|
|
1720
|
+
return /* @__PURE__ */ jsx38(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
|
|
1721
|
+
}
|
|
1722
|
+
function AlertDialogPortal({
|
|
1723
|
+
...props
|
|
1724
|
+
}) {
|
|
1725
|
+
return /* @__PURE__ */ jsx38(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
1726
|
+
}
|
|
1727
|
+
function AlertDialogOverlay({
|
|
1728
|
+
className,
|
|
1729
|
+
...props
|
|
1730
|
+
}) {
|
|
1731
|
+
return /* @__PURE__ */ jsx38(
|
|
1732
|
+
AlertDialogPrimitive.Overlay,
|
|
1733
|
+
{
|
|
1734
|
+
"data-slot": "alert-dialog-overlay",
|
|
1735
|
+
className: cn(
|
|
1736
|
+
"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
|
|
1737
|
+
className
|
|
1738
|
+
),
|
|
1739
|
+
...props
|
|
1740
|
+
}
|
|
1741
|
+
);
|
|
1742
|
+
}
|
|
1743
|
+
function AlertDialogContent({
|
|
1744
|
+
className,
|
|
1745
|
+
size = "default",
|
|
1746
|
+
...props
|
|
1747
|
+
}) {
|
|
1748
|
+
return /* @__PURE__ */ jsxs13(AlertDialogPortal, { children: [
|
|
1749
|
+
/* @__PURE__ */ jsx38(AlertDialogOverlay, {}),
|
|
1750
|
+
/* @__PURE__ */ jsx38(
|
|
1751
|
+
AlertDialogPrimitive.Content,
|
|
1752
|
+
{
|
|
1753
|
+
"data-slot": "alert-dialog-content",
|
|
1754
|
+
"data-size": size,
|
|
1755
|
+
className: cn(
|
|
1756
|
+
"group/alert-dialog-content 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 bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg",
|
|
1757
|
+
className
|
|
1758
|
+
),
|
|
1759
|
+
...props
|
|
1760
|
+
}
|
|
1761
|
+
)
|
|
1762
|
+
] });
|
|
1763
|
+
}
|
|
1764
|
+
function AlertDialogHeader({
|
|
1765
|
+
className,
|
|
1766
|
+
...props
|
|
1767
|
+
}) {
|
|
1768
|
+
return /* @__PURE__ */ jsx38(
|
|
1769
|
+
"div",
|
|
1770
|
+
{
|
|
1771
|
+
"data-slot": "alert-dialog-header",
|
|
1772
|
+
className: cn(
|
|
1773
|
+
"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
|
|
1774
|
+
className
|
|
1775
|
+
),
|
|
1776
|
+
...props
|
|
1777
|
+
}
|
|
1778
|
+
);
|
|
1779
|
+
}
|
|
1780
|
+
function AlertDialogFooter({
|
|
1781
|
+
className,
|
|
1782
|
+
...props
|
|
1783
|
+
}) {
|
|
1784
|
+
return /* @__PURE__ */ jsx38(
|
|
1785
|
+
"div",
|
|
1786
|
+
{
|
|
1787
|
+
"data-slot": "alert-dialog-footer",
|
|
1788
|
+
className: cn(
|
|
1789
|
+
"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
|
|
1790
|
+
className
|
|
1791
|
+
),
|
|
1792
|
+
...props
|
|
1793
|
+
}
|
|
1794
|
+
);
|
|
1795
|
+
}
|
|
1796
|
+
function AlertDialogTitle({
|
|
1797
|
+
className,
|
|
1798
|
+
...props
|
|
1799
|
+
}) {
|
|
1800
|
+
return /* @__PURE__ */ jsx38(
|
|
1801
|
+
AlertDialogPrimitive.Title,
|
|
1802
|
+
{
|
|
1803
|
+
"data-slot": "alert-dialog-title",
|
|
1804
|
+
className: cn(
|
|
1805
|
+
"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
|
|
1806
|
+
className
|
|
1807
|
+
),
|
|
1808
|
+
...props
|
|
1809
|
+
}
|
|
1810
|
+
);
|
|
1811
|
+
}
|
|
1812
|
+
function AlertDialogDescription({
|
|
1813
|
+
className,
|
|
1814
|
+
...props
|
|
1815
|
+
}) {
|
|
1816
|
+
return /* @__PURE__ */ jsx38(
|
|
1817
|
+
AlertDialogPrimitive.Description,
|
|
1818
|
+
{
|
|
1819
|
+
"data-slot": "alert-dialog-description",
|
|
1820
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1821
|
+
...props
|
|
1822
|
+
}
|
|
1823
|
+
);
|
|
1824
|
+
}
|
|
1825
|
+
function AlertDialogMedia({
|
|
1826
|
+
className,
|
|
1827
|
+
...props
|
|
1828
|
+
}) {
|
|
1829
|
+
return /* @__PURE__ */ jsx38(
|
|
1830
|
+
"div",
|
|
1831
|
+
{
|
|
1832
|
+
"data-slot": "alert-dialog-media",
|
|
1833
|
+
className: cn(
|
|
1834
|
+
"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8",
|
|
1835
|
+
className
|
|
1836
|
+
),
|
|
1837
|
+
...props
|
|
1838
|
+
}
|
|
1839
|
+
);
|
|
1840
|
+
}
|
|
1841
|
+
function AlertDialogAction({
|
|
1842
|
+
className,
|
|
1843
|
+
variant = "default",
|
|
1844
|
+
size = "default",
|
|
1845
|
+
...props
|
|
1846
|
+
}) {
|
|
1847
|
+
return /* @__PURE__ */ jsx38(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx38(
|
|
1848
|
+
AlertDialogPrimitive.Action,
|
|
1849
|
+
{
|
|
1850
|
+
"data-slot": "alert-dialog-action",
|
|
1851
|
+
className: cn(className),
|
|
1852
|
+
...props
|
|
1853
|
+
}
|
|
1854
|
+
) });
|
|
1855
|
+
}
|
|
1856
|
+
function AlertDialogCancel({
|
|
1857
|
+
className,
|
|
1858
|
+
variant = "outline",
|
|
1859
|
+
size = "default",
|
|
1860
|
+
...props
|
|
1861
|
+
}) {
|
|
1862
|
+
return /* @__PURE__ */ jsx38(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx38(
|
|
1863
|
+
AlertDialogPrimitive.Cancel,
|
|
1864
|
+
{
|
|
1865
|
+
"data-slot": "alert-dialog-cancel",
|
|
1866
|
+
className: cn(className),
|
|
1867
|
+
...props
|
|
1868
|
+
}
|
|
1869
|
+
) });
|
|
1870
|
+
}
|
|
1871
|
+
|
|
1872
|
+
// src/popover.tsx
|
|
1873
|
+
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
1874
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
1875
|
+
function Popover({
|
|
1876
|
+
...props
|
|
1877
|
+
}) {
|
|
1878
|
+
return /* @__PURE__ */ jsx39(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
1879
|
+
}
|
|
1880
|
+
function PopoverTrigger({
|
|
1881
|
+
...props
|
|
1882
|
+
}) {
|
|
1883
|
+
return /* @__PURE__ */ jsx39(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
1884
|
+
}
|
|
1885
|
+
function PopoverContent({
|
|
1886
|
+
className,
|
|
1887
|
+
align = "center",
|
|
1888
|
+
sideOffset = 4,
|
|
1889
|
+
...props
|
|
1890
|
+
}) {
|
|
1891
|
+
return /* @__PURE__ */ jsx39(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx39(
|
|
1892
|
+
PopoverPrimitive.Content,
|
|
1893
|
+
{
|
|
1894
|
+
"data-slot": "popover-content",
|
|
1895
|
+
align,
|
|
1896
|
+
sideOffset,
|
|
1897
|
+
className: cn(
|
|
1898
|
+
"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
1899
|
+
className
|
|
1900
|
+
),
|
|
1901
|
+
...props
|
|
1902
|
+
}
|
|
1903
|
+
) });
|
|
1904
|
+
}
|
|
1905
|
+
function PopoverAnchor({
|
|
1906
|
+
...props
|
|
1907
|
+
}) {
|
|
1908
|
+
return /* @__PURE__ */ jsx39(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
|
|
1909
|
+
}
|
|
1910
|
+
function PopoverHeader({ className, ...props }) {
|
|
1911
|
+
return /* @__PURE__ */ jsx39(
|
|
1912
|
+
"div",
|
|
1913
|
+
{
|
|
1914
|
+
"data-slot": "popover-header",
|
|
1915
|
+
className: cn("flex flex-col gap-1 text-sm", className),
|
|
1916
|
+
...props
|
|
1917
|
+
}
|
|
1918
|
+
);
|
|
1919
|
+
}
|
|
1920
|
+
function PopoverTitle({ className, ...props }) {
|
|
1921
|
+
return /* @__PURE__ */ jsx39(
|
|
1922
|
+
"div",
|
|
1923
|
+
{
|
|
1924
|
+
"data-slot": "popover-title",
|
|
1925
|
+
className: cn("font-medium", className),
|
|
1926
|
+
...props
|
|
1927
|
+
}
|
|
1928
|
+
);
|
|
1929
|
+
}
|
|
1930
|
+
function PopoverDescription({
|
|
1931
|
+
className,
|
|
1932
|
+
...props
|
|
1933
|
+
}) {
|
|
1934
|
+
return /* @__PURE__ */ jsx39(
|
|
1935
|
+
"p",
|
|
1936
|
+
{
|
|
1937
|
+
"data-slot": "popover-description",
|
|
1938
|
+
className: cn("text-muted-foreground", className),
|
|
1939
|
+
...props
|
|
1940
|
+
}
|
|
1941
|
+
);
|
|
1942
|
+
}
|
|
1943
|
+
|
|
1944
|
+
// src/scroll-area.tsx
|
|
1945
|
+
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
1946
|
+
import { jsx as jsx40, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1947
|
+
function ScrollArea({
|
|
1948
|
+
className,
|
|
1949
|
+
children,
|
|
1950
|
+
...props
|
|
1951
|
+
}) {
|
|
1952
|
+
return /* @__PURE__ */ jsxs14(
|
|
1953
|
+
ScrollAreaPrimitive.Root,
|
|
1954
|
+
{
|
|
1955
|
+
"data-slot": "scroll-area",
|
|
1956
|
+
className: cn("relative", className),
|
|
1957
|
+
...props,
|
|
1958
|
+
children: [
|
|
1959
|
+
/* @__PURE__ */ jsx40(
|
|
1960
|
+
ScrollAreaPrimitive.Viewport,
|
|
1961
|
+
{
|
|
1962
|
+
"data-slot": "scroll-area-viewport",
|
|
1963
|
+
className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
|
|
1964
|
+
children
|
|
1965
|
+
}
|
|
1966
|
+
),
|
|
1967
|
+
/* @__PURE__ */ jsx40(ScrollBar, {}),
|
|
1968
|
+
/* @__PURE__ */ jsx40(ScrollAreaPrimitive.Corner, {})
|
|
1969
|
+
]
|
|
1970
|
+
}
|
|
1971
|
+
);
|
|
1972
|
+
}
|
|
1973
|
+
function ScrollBar({
|
|
1974
|
+
className,
|
|
1975
|
+
orientation = "vertical",
|
|
1976
|
+
...props
|
|
1977
|
+
}) {
|
|
1978
|
+
return /* @__PURE__ */ jsx40(
|
|
1979
|
+
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
1980
|
+
{
|
|
1981
|
+
"data-slot": "scroll-area-scrollbar",
|
|
1982
|
+
orientation,
|
|
1983
|
+
className: cn(
|
|
1984
|
+
"flex touch-none p-px transition-colors select-none",
|
|
1985
|
+
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
|
|
1986
|
+
orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
|
|
1987
|
+
className
|
|
1988
|
+
),
|
|
1989
|
+
...props,
|
|
1990
|
+
children: /* @__PURE__ */ jsx40(
|
|
1991
|
+
ScrollAreaPrimitive.ScrollAreaThumb,
|
|
1992
|
+
{
|
|
1993
|
+
"data-slot": "scroll-area-thumb",
|
|
1994
|
+
className: "relative flex-1 rounded-full bg-border"
|
|
1995
|
+
}
|
|
1996
|
+
)
|
|
1997
|
+
}
|
|
1998
|
+
);
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
// src/sheet.tsx
|
|
2002
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
2003
|
+
import { jsx as jsx41, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2004
|
+
function Sheet({ ...props }) {
|
|
2005
|
+
return /* @__PURE__ */ jsx41(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
2006
|
+
}
|
|
2007
|
+
function SheetTrigger({
|
|
2008
|
+
...props
|
|
2009
|
+
}) {
|
|
2010
|
+
return /* @__PURE__ */ jsx41(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
2011
|
+
}
|
|
2012
|
+
function SheetClose({
|
|
2013
|
+
...props
|
|
2014
|
+
}) {
|
|
2015
|
+
return /* @__PURE__ */ jsx41(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
2016
|
+
}
|
|
2017
|
+
function SheetPortal({
|
|
2018
|
+
...props
|
|
2019
|
+
}) {
|
|
2020
|
+
return /* @__PURE__ */ jsx41(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
2021
|
+
}
|
|
2022
|
+
function SheetOverlay({
|
|
2023
|
+
className,
|
|
2024
|
+
...props
|
|
2025
|
+
}) {
|
|
2026
|
+
return /* @__PURE__ */ jsx41(
|
|
2027
|
+
SheetPrimitive.Overlay,
|
|
2028
|
+
{
|
|
2029
|
+
"data-slot": "sheet-overlay",
|
|
2030
|
+
className: cn(
|
|
2031
|
+
"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
|
|
2032
|
+
className
|
|
2033
|
+
),
|
|
2034
|
+
...props
|
|
2035
|
+
}
|
|
2036
|
+
);
|
|
2037
|
+
}
|
|
2038
|
+
function SheetContent({
|
|
2039
|
+
className,
|
|
2040
|
+
children,
|
|
2041
|
+
side = "right",
|
|
2042
|
+
showCloseButton = true,
|
|
2043
|
+
...props
|
|
2044
|
+
}) {
|
|
2045
|
+
return /* @__PURE__ */ jsxs15(SheetPortal, { children: [
|
|
2046
|
+
/* @__PURE__ */ jsx41(SheetOverlay, {}),
|
|
2047
|
+
/* @__PURE__ */ jsxs15(
|
|
2048
|
+
SheetPrimitive.Content,
|
|
2049
|
+
{
|
|
2050
|
+
"data-slot": "sheet-content",
|
|
2051
|
+
className: cn(
|
|
2052
|
+
"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500",
|
|
2053
|
+
side === "right" && "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
|
|
2054
|
+
side === "left" && "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
|
|
2055
|
+
side === "top" && "inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
2056
|
+
side === "bottom" && "inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
2057
|
+
className
|
|
2058
|
+
),
|
|
2059
|
+
...props,
|
|
2060
|
+
children: [
|
|
2061
|
+
children,
|
|
2062
|
+
showCloseButton && /* @__PURE__ */ jsxs15(SheetPrimitive.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
|
|
2063
|
+
/* @__PURE__ */ jsx41("span", { "aria-hidden": "true", className: "text-base leading-none", children: "\xD7" }),
|
|
2064
|
+
/* @__PURE__ */ jsx41("span", { className: "sr-only", children: "Close" })
|
|
2065
|
+
] })
|
|
2066
|
+
]
|
|
2067
|
+
}
|
|
2068
|
+
)
|
|
2069
|
+
] });
|
|
2070
|
+
}
|
|
2071
|
+
function SheetHeader({ className, ...props }) {
|
|
2072
|
+
return /* @__PURE__ */ jsx41(
|
|
2073
|
+
"div",
|
|
2074
|
+
{
|
|
2075
|
+
"data-slot": "sheet-header",
|
|
2076
|
+
className: cn("flex flex-col gap-1.5 p-4", className),
|
|
2077
|
+
...props
|
|
2078
|
+
}
|
|
2079
|
+
);
|
|
2080
|
+
}
|
|
2081
|
+
function SheetFooter({ className, ...props }) {
|
|
2082
|
+
return /* @__PURE__ */ jsx41(
|
|
2083
|
+
"div",
|
|
2084
|
+
{
|
|
2085
|
+
"data-slot": "sheet-footer",
|
|
2086
|
+
className: cn("mt-auto flex flex-col gap-2 p-4", className),
|
|
2087
|
+
...props
|
|
2088
|
+
}
|
|
2089
|
+
);
|
|
2090
|
+
}
|
|
2091
|
+
function SheetTitle({
|
|
2092
|
+
className,
|
|
2093
|
+
...props
|
|
2094
|
+
}) {
|
|
2095
|
+
return /* @__PURE__ */ jsx41(
|
|
2096
|
+
SheetPrimitive.Title,
|
|
2097
|
+
{
|
|
2098
|
+
"data-slot": "sheet-title",
|
|
2099
|
+
className: cn("font-semibold text-foreground", className),
|
|
2100
|
+
...props
|
|
2101
|
+
}
|
|
2102
|
+
);
|
|
2103
|
+
}
|
|
2104
|
+
function SheetDescription({
|
|
2105
|
+
className,
|
|
2106
|
+
...props
|
|
2107
|
+
}) {
|
|
2108
|
+
return /* @__PURE__ */ jsx41(
|
|
2109
|
+
SheetPrimitive.Description,
|
|
2110
|
+
{
|
|
2111
|
+
"data-slot": "sheet-description",
|
|
2112
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
2113
|
+
...props
|
|
2114
|
+
}
|
|
2115
|
+
);
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
// src/use-toast.ts
|
|
2119
|
+
function useToast() {
|
|
2120
|
+
return {
|
|
2121
|
+
toast(input) {
|
|
2122
|
+
if (typeof window === "undefined") return;
|
|
2123
|
+
window.dispatchEvent(new CustomEvent("boring-ui:toast", { detail: input }));
|
|
2124
|
+
}
|
|
2125
|
+
};
|
|
2126
|
+
}
|
|
2127
|
+
|
|
2128
|
+
// src/hover-card.tsx
|
|
2129
|
+
import * as React8 from "react";
|
|
2130
|
+
import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
|
|
2131
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
2132
|
+
var HoverCard = HoverCardPrimitive.Root;
|
|
2133
|
+
var HoverCardTrigger = HoverCardPrimitive.Trigger;
|
|
2134
|
+
var HoverCardContent = React8.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
2135
|
+
HoverCardPrimitive.Content,
|
|
2136
|
+
{
|
|
2137
|
+
ref,
|
|
2138
|
+
align,
|
|
2139
|
+
sideOffset,
|
|
2140
|
+
className: cn(
|
|
2141
|
+
"z-50 w-64 origin-[--radix-hover-card-content-transform-origin] rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
2142
|
+
className
|
|
2143
|
+
),
|
|
2144
|
+
...props
|
|
2145
|
+
}
|
|
2146
|
+
));
|
|
2147
|
+
HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
|
|
2148
|
+
|
|
2149
|
+
// src/collapsible.tsx
|
|
2150
|
+
import * as CollapsiblePrimitive2 from "@radix-ui/react-collapsible";
|
|
2151
|
+
var Collapsible = CollapsiblePrimitive2.Root;
|
|
2152
|
+
var CollapsibleTrigger2 = CollapsiblePrimitive2.CollapsibleTrigger;
|
|
2153
|
+
var CollapsibleContent2 = CollapsiblePrimitive2.CollapsibleContent;
|
|
2154
|
+
|
|
2155
|
+
// src/button-group.tsx
|
|
2156
|
+
import { Slot as Slot3 } from "@radix-ui/react-slot";
|
|
2157
|
+
import { cva as cva4 } from "class-variance-authority";
|
|
2158
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
2159
|
+
var buttonGroupVariants = cva4(
|
|
2160
|
+
"flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
|
|
2161
|
+
{
|
|
2162
|
+
variants: {
|
|
2163
|
+
orientation: {
|
|
2164
|
+
horizontal: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
|
|
2165
|
+
vertical: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"
|
|
2166
|
+
}
|
|
2167
|
+
},
|
|
2168
|
+
defaultVariants: { orientation: "horizontal" }
|
|
2169
|
+
}
|
|
2170
|
+
);
|
|
2171
|
+
function ButtonGroup({
|
|
2172
|
+
className,
|
|
2173
|
+
orientation,
|
|
2174
|
+
...props
|
|
2175
|
+
}) {
|
|
2176
|
+
return /* @__PURE__ */ jsx43(
|
|
2177
|
+
"div",
|
|
2178
|
+
{
|
|
2179
|
+
role: "group",
|
|
2180
|
+
"data-slot": "button-group",
|
|
2181
|
+
"data-orientation": orientation,
|
|
2182
|
+
className: cn(buttonGroupVariants({ orientation }), className),
|
|
2183
|
+
...props
|
|
2184
|
+
}
|
|
2185
|
+
);
|
|
2186
|
+
}
|
|
2187
|
+
function ButtonGroupText({
|
|
2188
|
+
className,
|
|
2189
|
+
asChild = false,
|
|
2190
|
+
...props
|
|
2191
|
+
}) {
|
|
2192
|
+
const Comp = asChild ? Slot3 : "div";
|
|
2193
|
+
return /* @__PURE__ */ jsx43(
|
|
2194
|
+
Comp,
|
|
2195
|
+
{
|
|
2196
|
+
className: cn(
|
|
2197
|
+
"flex items-center gap-2 rounded-md border bg-muted px-4 text-sm font-medium shadow-xs [&_svg:not([class*=size-])]:size-4 [&_svg]:pointer-events-none",
|
|
2198
|
+
className
|
|
2199
|
+
),
|
|
2200
|
+
...props
|
|
2201
|
+
}
|
|
2202
|
+
);
|
|
2203
|
+
}
|
|
2204
|
+
function ButtonGroupSeparator({
|
|
2205
|
+
className,
|
|
2206
|
+
orientation = "vertical",
|
|
2207
|
+
...props
|
|
2208
|
+
}) {
|
|
2209
|
+
return /* @__PURE__ */ jsx43(
|
|
2210
|
+
Separator,
|
|
2211
|
+
{
|
|
2212
|
+
"data-slot": "button-group-separator",
|
|
2213
|
+
orientation,
|
|
2214
|
+
className: cn("relative !m-0 self-stretch bg-input data-[orientation=vertical]:h-auto", className),
|
|
2215
|
+
...props
|
|
2216
|
+
}
|
|
2217
|
+
);
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2220
|
+
// src/input-group.tsx
|
|
2221
|
+
import { cva as cva5 } from "class-variance-authority";
|
|
2222
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
2223
|
+
function InputGroup({ className, ...props }) {
|
|
2224
|
+
return /* @__PURE__ */ jsx44(
|
|
2225
|
+
"div",
|
|
2226
|
+
{
|
|
2227
|
+
"data-slot": "input-group",
|
|
2228
|
+
role: "group",
|
|
2229
|
+
className: cn(
|
|
2230
|
+
"group/input-group relative flex h-9 w-full items-center rounded-md border border-[color:oklch(from_var(--border)_l_c_h/0.65)] shadow-xs outline-none transition-[color,box-shadow] dark:bg-input/30",
|
|
2231
|
+
"has-[>textarea]:h-auto",
|
|
2232
|
+
"has-[>[data-align=inline-start]]:[&>input]:pl-2 has-[>[data-align=inline-end]]:[&>input]:pr-2",
|
|
2233
|
+
"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
|
|
2234
|
+
"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
|
|
2235
|
+
"has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot=input-group-control]:focus-visible]:ring-ring",
|
|
2236
|
+
"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
|
|
2237
|
+
className
|
|
2238
|
+
),
|
|
2239
|
+
...props
|
|
2240
|
+
}
|
|
2241
|
+
);
|
|
2242
|
+
}
|
|
2243
|
+
var inputGroupAddonVariants = cva5(
|
|
2244
|
+
"flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*=size-])]:size-4",
|
|
2245
|
+
{
|
|
2246
|
+
variants: {
|
|
2247
|
+
align: {
|
|
2248
|
+
"inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
|
|
2249
|
+
"inline-end": "order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]",
|
|
2250
|
+
"block-start": "[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5",
|
|
2251
|
+
"block-end": "[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5"
|
|
2252
|
+
}
|
|
2253
|
+
},
|
|
2254
|
+
defaultVariants: { align: "inline-start" }
|
|
2255
|
+
}
|
|
2256
|
+
);
|
|
2257
|
+
function InputGroupAddon({
|
|
2258
|
+
className,
|
|
2259
|
+
align = "inline-start",
|
|
2260
|
+
...props
|
|
2261
|
+
}) {
|
|
2262
|
+
return /* @__PURE__ */ jsx44(
|
|
2263
|
+
"div",
|
|
2264
|
+
{
|
|
2265
|
+
role: "group",
|
|
2266
|
+
"data-slot": "input-group-addon",
|
|
2267
|
+
"data-align": align,
|
|
2268
|
+
className: cn(inputGroupAddonVariants({ align }), className),
|
|
2269
|
+
onClick: (e) => {
|
|
2270
|
+
if (e.target.closest("button")) return;
|
|
2271
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
2272
|
+
},
|
|
2273
|
+
...props
|
|
2274
|
+
}
|
|
2275
|
+
);
|
|
2276
|
+
}
|
|
2277
|
+
var inputGroupButtonVariants = cva5("flex items-center gap-2 text-sm shadow-none", {
|
|
2278
|
+
variants: {
|
|
2279
|
+
size: {
|
|
2280
|
+
xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*=size-])]:size-3.5",
|
|
2281
|
+
sm: "h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5",
|
|
2282
|
+
"icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
|
|
2283
|
+
"icon-sm": "size-8 p-0 has-[>svg]:p-0"
|
|
2284
|
+
}
|
|
2285
|
+
},
|
|
2286
|
+
defaultVariants: { size: "xs" }
|
|
2287
|
+
});
|
|
2288
|
+
function InputGroupButton({
|
|
2289
|
+
className,
|
|
2290
|
+
type = "button",
|
|
2291
|
+
variant = "ghost",
|
|
2292
|
+
size = "xs",
|
|
2293
|
+
...props
|
|
2294
|
+
}) {
|
|
2295
|
+
return /* @__PURE__ */ jsx44(Button, { type, "data-size": size, variant, className: cn(inputGroupButtonVariants({ size }), className), ...props });
|
|
2296
|
+
}
|
|
2297
|
+
function InputGroupText({ className, ...props }) {
|
|
2298
|
+
return /* @__PURE__ */ jsx44(
|
|
2299
|
+
"span",
|
|
2300
|
+
{
|
|
2301
|
+
className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg:not([class*=size-])]:size-4 [&_svg]:pointer-events-none", className),
|
|
2302
|
+
...props
|
|
2303
|
+
}
|
|
2304
|
+
);
|
|
2305
|
+
}
|
|
2306
|
+
function InputGroupInput({ className, ...props }) {
|
|
2307
|
+
return /* @__PURE__ */ jsx44(
|
|
2308
|
+
Input,
|
|
2309
|
+
{
|
|
2310
|
+
"data-slot": "input-group-control",
|
|
2311
|
+
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent", className),
|
|
2312
|
+
...props
|
|
2313
|
+
}
|
|
2314
|
+
);
|
|
2315
|
+
}
|
|
2316
|
+
function InputGroupTextarea({ className, ...props }) {
|
|
2317
|
+
return /* @__PURE__ */ jsx44(
|
|
2318
|
+
Textarea,
|
|
2319
|
+
{
|
|
2320
|
+
"data-slot": "input-group-control",
|
|
2321
|
+
className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent", className),
|
|
2322
|
+
...props
|
|
2323
|
+
}
|
|
2324
|
+
);
|
|
2325
|
+
}
|
|
2326
|
+
export {
|
|
2327
|
+
AlertDialog,
|
|
2328
|
+
AlertDialogAction,
|
|
2329
|
+
AlertDialogCancel,
|
|
2330
|
+
AlertDialogContent,
|
|
2331
|
+
AlertDialogDescription,
|
|
2332
|
+
AlertDialogFooter,
|
|
2333
|
+
AlertDialogHeader,
|
|
2334
|
+
AlertDialogMedia,
|
|
2335
|
+
AlertDialogOverlay,
|
|
2336
|
+
AlertDialogPortal,
|
|
2337
|
+
AlertDialogTitle,
|
|
2338
|
+
AlertDialogTrigger,
|
|
2339
|
+
Avatar,
|
|
2340
|
+
AvatarFallback,
|
|
2341
|
+
Badge,
|
|
2342
|
+
Button,
|
|
2343
|
+
ButtonGroup,
|
|
2344
|
+
ButtonGroupSeparator,
|
|
2345
|
+
ButtonGroupText,
|
|
2346
|
+
Card,
|
|
2347
|
+
CardAction,
|
|
2348
|
+
CardContent,
|
|
2349
|
+
CardDescription,
|
|
2350
|
+
CardFooter,
|
|
2351
|
+
CardHeader,
|
|
2352
|
+
CardTitle,
|
|
2353
|
+
Checkbox,
|
|
2354
|
+
Chip,
|
|
2355
|
+
ChipButton,
|
|
2356
|
+
ChipRemove,
|
|
2357
|
+
Collapsible,
|
|
2358
|
+
CollapsibleContent2 as CollapsibleContent,
|
|
2359
|
+
CollapsibleTrigger2 as CollapsibleTrigger,
|
|
2360
|
+
Command,
|
|
2361
|
+
CommandDialog,
|
|
2362
|
+
CommandEmpty,
|
|
2363
|
+
CommandGroup,
|
|
2364
|
+
CommandInput,
|
|
2365
|
+
CommandItem,
|
|
2366
|
+
CommandList,
|
|
2367
|
+
CommandSeparator,
|
|
2368
|
+
CommandShortcut,
|
|
2369
|
+
DetailLine,
|
|
2370
|
+
DetailList,
|
|
2371
|
+
Dialog,
|
|
2372
|
+
DialogClose,
|
|
2373
|
+
DialogContent,
|
|
2374
|
+
DialogDescription,
|
|
2375
|
+
DialogFooter,
|
|
2376
|
+
DialogHeader,
|
|
2377
|
+
DialogOverlay,
|
|
2378
|
+
DialogPortal,
|
|
2379
|
+
DialogTitle,
|
|
2380
|
+
DialogTrigger,
|
|
2381
|
+
Disclosure,
|
|
2382
|
+
DisclosureChevron,
|
|
2383
|
+
DisclosureContent,
|
|
2384
|
+
DisclosureTrigger,
|
|
2385
|
+
DropdownMenu,
|
|
2386
|
+
DropdownMenuCheckboxItem,
|
|
2387
|
+
DropdownMenuContent,
|
|
2388
|
+
DropdownMenuGroup,
|
|
2389
|
+
DropdownMenuItem,
|
|
2390
|
+
DropdownMenuLabel,
|
|
2391
|
+
DropdownMenuPortal,
|
|
2392
|
+
DropdownMenuRadioGroup,
|
|
2393
|
+
DropdownMenuRadioItem,
|
|
2394
|
+
DropdownMenuSeparator,
|
|
2395
|
+
DropdownMenuShortcut,
|
|
2396
|
+
DropdownMenuSub,
|
|
2397
|
+
DropdownMenuSubContent,
|
|
2398
|
+
DropdownMenuSubTrigger,
|
|
2399
|
+
DropdownMenuTrigger,
|
|
2400
|
+
EmptyState,
|
|
2401
|
+
ErrorState,
|
|
2402
|
+
Field,
|
|
2403
|
+
FieldDescription,
|
|
2404
|
+
FieldError,
|
|
2405
|
+
FieldLabel,
|
|
2406
|
+
FloatingPanel,
|
|
2407
|
+
FloatingPanelBody,
|
|
2408
|
+
FloatingPanelHeader,
|
|
2409
|
+
HoverCard,
|
|
2410
|
+
HoverCardContent,
|
|
2411
|
+
HoverCardTrigger,
|
|
2412
|
+
IconButton,
|
|
2413
|
+
InitialsAvatar,
|
|
2414
|
+
InlineCode,
|
|
2415
|
+
Input,
|
|
2416
|
+
InputGroup,
|
|
2417
|
+
InputGroupAddon,
|
|
2418
|
+
InputGroupButton,
|
|
2419
|
+
InputGroupInput,
|
|
2420
|
+
InputGroupText,
|
|
2421
|
+
InputGroupTextarea,
|
|
2422
|
+
Kbd,
|
|
2423
|
+
Label3 as Label,
|
|
2424
|
+
List2 as List,
|
|
2425
|
+
ListRow,
|
|
2426
|
+
ListRowActions,
|
|
2427
|
+
ListRowDescription,
|
|
2428
|
+
ListRowMain,
|
|
2429
|
+
ListRowMeta,
|
|
2430
|
+
ListRowTitle,
|
|
2431
|
+
LoadingState,
|
|
2432
|
+
Notice,
|
|
2433
|
+
Pane,
|
|
2434
|
+
PaneBody,
|
|
2435
|
+
PaneDescription,
|
|
2436
|
+
PaneFooter,
|
|
2437
|
+
PaneHeader,
|
|
2438
|
+
PaneTitle,
|
|
2439
|
+
PaneToolbar,
|
|
2440
|
+
Popover,
|
|
2441
|
+
PopoverAnchor,
|
|
2442
|
+
PopoverContent,
|
|
2443
|
+
PopoverDescription,
|
|
2444
|
+
PopoverHeader,
|
|
2445
|
+
PopoverTitle,
|
|
2446
|
+
PopoverTrigger,
|
|
2447
|
+
ResizeHandle,
|
|
2448
|
+
ScrollArea,
|
|
2449
|
+
ScrollBar,
|
|
2450
|
+
SegmentedControl,
|
|
2451
|
+
SegmentedControlItem,
|
|
2452
|
+
Select,
|
|
2453
|
+
SelectContent,
|
|
2454
|
+
SelectGroup,
|
|
2455
|
+
SelectItem,
|
|
2456
|
+
SelectLabel,
|
|
2457
|
+
SelectScrollDownButton,
|
|
2458
|
+
SelectScrollUpButton,
|
|
2459
|
+
SelectSeparator,
|
|
2460
|
+
SelectTrigger,
|
|
2461
|
+
SelectValue,
|
|
2462
|
+
Separator,
|
|
2463
|
+
SettingsActionRow,
|
|
2464
|
+
SettingsNav,
|
|
2465
|
+
SettingsPageHeader,
|
|
2466
|
+
SettingsPanel,
|
|
2467
|
+
Sheet,
|
|
2468
|
+
SheetClose,
|
|
2469
|
+
SheetContent,
|
|
2470
|
+
SheetDescription,
|
|
2471
|
+
SheetFooter,
|
|
2472
|
+
SheetHeader,
|
|
2473
|
+
SheetTitle,
|
|
2474
|
+
SheetTrigger,
|
|
2475
|
+
Skeleton,
|
|
2476
|
+
Spinner,
|
|
2477
|
+
StatusBadge,
|
|
2478
|
+
Tabs,
|
|
2479
|
+
TabsContent,
|
|
2480
|
+
TabsList,
|
|
2481
|
+
TabsTrigger,
|
|
2482
|
+
Textarea,
|
|
2483
|
+
Toaster,
|
|
2484
|
+
Toolbar,
|
|
2485
|
+
ToolbarButton,
|
|
2486
|
+
ToolbarGroup,
|
|
2487
|
+
ToolbarSeparator,
|
|
2488
|
+
Tooltip,
|
|
2489
|
+
TooltipContent,
|
|
2490
|
+
TooltipProvider,
|
|
2491
|
+
TooltipTrigger,
|
|
2492
|
+
badgeVariants,
|
|
2493
|
+
buttonGroupVariants,
|
|
2494
|
+
buttonVariants,
|
|
2495
|
+
clearToasts,
|
|
2496
|
+
cn,
|
|
2497
|
+
dismissToast,
|
|
2498
|
+
getActiveToasts,
|
|
2499
|
+
subscribeToasts,
|
|
2500
|
+
tabsListVariants,
|
|
2501
|
+
toast,
|
|
2502
|
+
useToast
|
|
2503
|
+
};
|