@nextlyhq/ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +93 -0
- package/dist/index.cjs +2404 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2319 -0
- package/dist/index.d.ts +2319 -0
- package/dist/index.mjs +2230 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +104 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2404 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var reactSlot = require('@radix-ui/react-slot');
|
|
4
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
5
|
+
var React5 = require('react');
|
|
6
|
+
var clsx = require('clsx');
|
|
7
|
+
var tailwindMerge = require('tailwind-merge');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
var reactLabel = require('@radix-ui/react-label');
|
|
10
|
+
var SeparatorPrimitive = require('@radix-ui/react-separator');
|
|
11
|
+
var CheckboxPrimitive = require('@radix-ui/react-checkbox');
|
|
12
|
+
var lucideReact = require('lucide-react');
|
|
13
|
+
var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
|
|
14
|
+
var reactSwitch = require('@radix-ui/react-switch');
|
|
15
|
+
var CollapsiblePrimitive = require('@radix-ui/react-collapsible');
|
|
16
|
+
var AccordionPrimitive = require('@radix-ui/react-accordion');
|
|
17
|
+
var reactAvatar = require('@radix-ui/react-avatar');
|
|
18
|
+
var reactTabs = require('@radix-ui/react-tabs');
|
|
19
|
+
var reactTooltip = require('@radix-ui/react-tooltip');
|
|
20
|
+
var PopoverPrimitive = require('@radix-ui/react-popover');
|
|
21
|
+
var DialogPrimitive = require('@radix-ui/react-dialog');
|
|
22
|
+
var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
|
|
23
|
+
var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
|
|
24
|
+
var SelectPrimitive = require('@radix-ui/react-select');
|
|
25
|
+
var cmdk = require('cmdk');
|
|
26
|
+
var sonner = require('sonner');
|
|
27
|
+
|
|
28
|
+
function _interopNamespace(e) {
|
|
29
|
+
if (e && e.__esModule) return e;
|
|
30
|
+
var n = Object.create(null);
|
|
31
|
+
if (e) {
|
|
32
|
+
Object.keys(e).forEach(function (k) {
|
|
33
|
+
if (k !== 'default') {
|
|
34
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
35
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return e[k]; }
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
n.default = e;
|
|
43
|
+
return Object.freeze(n);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
|
|
47
|
+
var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
|
|
48
|
+
var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
|
|
49
|
+
var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
|
|
50
|
+
var CollapsiblePrimitive__namespace = /*#__PURE__*/_interopNamespace(CollapsiblePrimitive);
|
|
51
|
+
var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
|
|
52
|
+
var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
|
|
53
|
+
var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
|
|
54
|
+
var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
|
|
55
|
+
var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
|
|
56
|
+
var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
|
|
57
|
+
|
|
58
|
+
// src/components/button.tsx
|
|
59
|
+
function cn(...inputs) {
|
|
60
|
+
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
61
|
+
}
|
|
62
|
+
var buttonVariants = classVarianceAuthority.cva(
|
|
63
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-none text-sm font-medium cursor-pointer transition-all duration-150 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-[0.98] [&_svg]:text-current",
|
|
64
|
+
{
|
|
65
|
+
variants: {
|
|
66
|
+
variant: {
|
|
67
|
+
default: "bg-primary text-primary-foreground border border-transparent hover:opacity-90",
|
|
68
|
+
primary: "bg-primary text-primary-foreground border border-transparent hover:opacity-90",
|
|
69
|
+
destructive: "bg-destructive text-destructive-foreground border border-transparent hover:opacity-90",
|
|
70
|
+
outline: "border border-primary/10 text-foreground hover-unified bg-background",
|
|
71
|
+
secondary: "bg-background border border-primary/10 text-foreground hover:bg-primary/5",
|
|
72
|
+
ghost: "text-foreground border border-transparent hover-unified",
|
|
73
|
+
link: "text-primary border border-transparent underline-offset-4 hover:underline"
|
|
74
|
+
},
|
|
75
|
+
size: {
|
|
76
|
+
default: "h-10 px-6 py-2",
|
|
77
|
+
sm: "h-9 px-4 text-[13px]",
|
|
78
|
+
md: "h-10 px-6 text-sm",
|
|
79
|
+
lg: "h-11 px-8 text-base",
|
|
80
|
+
icon: "h-10 w-10 p-0",
|
|
81
|
+
"icon-sm": "h-9 w-9 p-0",
|
|
82
|
+
"icon-lg": "h-11 w-11 p-0"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
defaultVariants: {
|
|
86
|
+
variant: "default",
|
|
87
|
+
size: "md"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
var Button = React5.forwardRef(
|
|
92
|
+
({
|
|
93
|
+
className,
|
|
94
|
+
variant = "default",
|
|
95
|
+
size = "md",
|
|
96
|
+
asChild = false,
|
|
97
|
+
children,
|
|
98
|
+
...props
|
|
99
|
+
}, ref) => {
|
|
100
|
+
const Comp = asChild ? reactSlot.Slot : "button";
|
|
101
|
+
const hasMultipleChildren = React5__namespace.Children.count(children) > 1;
|
|
102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
103
|
+
Comp,
|
|
104
|
+
{
|
|
105
|
+
"data-slot": `button.${variant}`,
|
|
106
|
+
className: cn(
|
|
107
|
+
buttonVariants({ variant, size, className }),
|
|
108
|
+
hasMultipleChildren && "gap-1.5"
|
|
109
|
+
),
|
|
110
|
+
ref,
|
|
111
|
+
...props,
|
|
112
|
+
children
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
Button.displayName = "Button";
|
|
118
|
+
var inputVariants = classVarianceAuthority.cva(
|
|
119
|
+
"file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-none border border-input bg-background text-sm transition-all duration-150 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus:ring-0 focus:ring-offset-0 focus:outline-none focus:!border-primary focus-visible:!border-primary aria-invalid:border-destructive aria-invalid:focus:!border-destructive data-[invalid=true]:border-destructive data-[invalid=true]:focus:!border-destructive",
|
|
120
|
+
{
|
|
121
|
+
variants: {
|
|
122
|
+
size: {
|
|
123
|
+
sm: "h-8 px-2.5 py-2 text-sm",
|
|
124
|
+
default: "h-10 px-3 py-2.5 text-sm",
|
|
125
|
+
lg: "h-11 px-4 py-3 text-base"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
defaultVariants: {
|
|
129
|
+
size: "default"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
var Input = React5.forwardRef(
|
|
134
|
+
({ className, type, size, ...props }, ref) => {
|
|
135
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
136
|
+
"input",
|
|
137
|
+
{
|
|
138
|
+
type,
|
|
139
|
+
"data-slot": "input",
|
|
140
|
+
className: cn(inputVariants({ size, className })),
|
|
141
|
+
ref,
|
|
142
|
+
...props
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
Input.displayName = "Input";
|
|
148
|
+
var Textarea = React5.forwardRef(({ className, ...props }, ref) => {
|
|
149
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
150
|
+
"textarea",
|
|
151
|
+
{
|
|
152
|
+
"data-slot": "textarea",
|
|
153
|
+
className: cn(
|
|
154
|
+
"flex min-h-[80px] w-full rounded-none border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground placeholder:opacity-50 transition-all duration-200 focus:!border-primary focus-visible:!border-primary focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 resize-y",
|
|
155
|
+
"aria-invalid:border-destructive aria-invalid:focus:!border-destructive",
|
|
156
|
+
className
|
|
157
|
+
),
|
|
158
|
+
ref,
|
|
159
|
+
...props
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
});
|
|
163
|
+
Textarea.displayName = "Textarea";
|
|
164
|
+
function Label({ className, ...props }) {
|
|
165
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
166
|
+
reactLabel.Root,
|
|
167
|
+
{
|
|
168
|
+
"data-slot": "label",
|
|
169
|
+
className: cn(
|
|
170
|
+
"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",
|
|
171
|
+
className
|
|
172
|
+
),
|
|
173
|
+
...props
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
var badgeVariants = classVarianceAuthority.cva(
|
|
178
|
+
"inline-flex items-center rounded-none px-2.5 py-0.5 h-[22px] text-xs font-medium transition-colors",
|
|
179
|
+
{
|
|
180
|
+
variants: {
|
|
181
|
+
variant: {
|
|
182
|
+
default: "bg-primary/5 text-slate-900 dark:bg-slate-800 dark:text-slate-100",
|
|
183
|
+
primary: "bg-primary/5 text-primary dark:bg-primary/20 dark:text-primary-foreground/90",
|
|
184
|
+
success: "bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-100",
|
|
185
|
+
warning: "bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-100",
|
|
186
|
+
destructive: "bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-100",
|
|
187
|
+
outline: "border !border-primary/5 bg-transparent text-slate-700 dark:text-slate-300 dark:!border-primary/5"
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
defaultVariants: {
|
|
191
|
+
variant: "default"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
function Badge({ className, variant = "default", ...props }) {
|
|
196
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
197
|
+
"div",
|
|
198
|
+
{
|
|
199
|
+
"data-slot": `badge.${variant}`,
|
|
200
|
+
className: cn(badgeVariants({ variant }), className),
|
|
201
|
+
...props
|
|
202
|
+
}
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
var cardVariants = classVarianceAuthority.cva(
|
|
206
|
+
"bg-card text-foreground rounded-none border border-primary/5 transition-all duration-200",
|
|
207
|
+
{
|
|
208
|
+
variants: {
|
|
209
|
+
variant: {
|
|
210
|
+
default: "",
|
|
211
|
+
interactive: "cursor-pointer hover:border-primary active:scale-[0.99]",
|
|
212
|
+
elevated: "shadow-md"
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
defaultVariants: {
|
|
216
|
+
variant: "default"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
var Card = React5.forwardRef(
|
|
221
|
+
({ className, variant, ...props }, ref) => {
|
|
222
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
ref,
|
|
226
|
+
"data-slot": `card.${variant || "default"}`,
|
|
227
|
+
className: cn(cardVariants({ variant }), className),
|
|
228
|
+
...props
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
Card.displayName = "Card";
|
|
234
|
+
var CardHeader = React5.forwardRef(
|
|
235
|
+
({ className, noBorder = false, ...props }, ref) => {
|
|
236
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
237
|
+
"div",
|
|
238
|
+
{
|
|
239
|
+
ref,
|
|
240
|
+
"data-slot": "card-header",
|
|
241
|
+
className: cn(
|
|
242
|
+
"flex flex-col p-4",
|
|
243
|
+
!noBorder && "border-b border-primary/5",
|
|
244
|
+
className
|
|
245
|
+
),
|
|
246
|
+
...props
|
|
247
|
+
}
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
);
|
|
251
|
+
CardHeader.displayName = "CardHeader";
|
|
252
|
+
var CardTitle = React5.forwardRef(
|
|
253
|
+
({ className, ...props }, ref) => {
|
|
254
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
+
"h3",
|
|
256
|
+
{
|
|
257
|
+
ref,
|
|
258
|
+
"data-slot": "card-title",
|
|
259
|
+
className: cn("text-xl font-semibold leading-none", className),
|
|
260
|
+
...props
|
|
261
|
+
}
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
);
|
|
265
|
+
CardTitle.displayName = "CardTitle";
|
|
266
|
+
var CardDescription = React5.forwardRef(
|
|
267
|
+
({ className, ...props }, ref) => {
|
|
268
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
269
|
+
"p",
|
|
270
|
+
{
|
|
271
|
+
ref,
|
|
272
|
+
"data-slot": "card-description",
|
|
273
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
274
|
+
...props
|
|
275
|
+
}
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
);
|
|
279
|
+
CardDescription.displayName = "CardDescription";
|
|
280
|
+
var CardAction = React5.forwardRef(
|
|
281
|
+
({ className, ...props }, ref) => {
|
|
282
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
283
|
+
"div",
|
|
284
|
+
{
|
|
285
|
+
ref,
|
|
286
|
+
"data-slot": "card-action",
|
|
287
|
+
className: cn("flex items-center justify-end", className),
|
|
288
|
+
...props
|
|
289
|
+
}
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
);
|
|
293
|
+
CardAction.displayName = "CardAction";
|
|
294
|
+
var CardContent = React5.forwardRef(
|
|
295
|
+
({ className, ...props }, ref) => {
|
|
296
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
297
|
+
"div",
|
|
298
|
+
{
|
|
299
|
+
ref,
|
|
300
|
+
"data-slot": "card-content",
|
|
301
|
+
className: cn("p-6", className),
|
|
302
|
+
...props
|
|
303
|
+
}
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
CardContent.displayName = "CardContent";
|
|
308
|
+
var CardFooter = React5.forwardRef(
|
|
309
|
+
({ className, ...props }, ref) => {
|
|
310
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
311
|
+
"div",
|
|
312
|
+
{
|
|
313
|
+
ref,
|
|
314
|
+
"data-slot": "card-footer",
|
|
315
|
+
className: cn(
|
|
316
|
+
"flex items-center px-6 py-4 border-t border-primary/5 bg-primary/5",
|
|
317
|
+
className
|
|
318
|
+
),
|
|
319
|
+
...props
|
|
320
|
+
}
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
);
|
|
324
|
+
CardFooter.displayName = "CardFooter";
|
|
325
|
+
var alertVariants = classVarianceAuthority.cva(
|
|
326
|
+
"relative flex items-start gap-3 rounded-none border border-primary/5 p-4 text-sm transition-colors duration-150",
|
|
327
|
+
{
|
|
328
|
+
variants: {
|
|
329
|
+
variant: {
|
|
330
|
+
info: "border-primary/5 bg-primary/5 text-primary dark:border-primary/30 dark:bg-primary/5 dark:text-primary-foreground/90",
|
|
331
|
+
success: "border-green-200 bg-green-50 text-green-900 dark:border-green-900 dark:bg-green-950 dark:text-green-100",
|
|
332
|
+
warning: "border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-100",
|
|
333
|
+
destructive: "border-red-200 bg-red-50 text-red-900 dark:border-red-900 dark:bg-red-950 dark:text-red-100"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
defaultVariants: {
|
|
337
|
+
variant: "info"
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
);
|
|
341
|
+
var Alert = React5.forwardRef(
|
|
342
|
+
({ className, variant = "info", role = "alert", ...props }, ref) => {
|
|
343
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
344
|
+
"div",
|
|
345
|
+
{
|
|
346
|
+
ref,
|
|
347
|
+
role,
|
|
348
|
+
"data-slot": `alert.${variant}`,
|
|
349
|
+
className: cn(alertVariants({ variant }), className),
|
|
350
|
+
...props
|
|
351
|
+
}
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
);
|
|
355
|
+
Alert.displayName = "Alert";
|
|
356
|
+
var AlertTitle = React5.forwardRef(
|
|
357
|
+
({ className, ...props }, ref) => {
|
|
358
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
359
|
+
"h5",
|
|
360
|
+
{
|
|
361
|
+
ref,
|
|
362
|
+
"data-slot": "alert-title",
|
|
363
|
+
className: cn(
|
|
364
|
+
"mb-1 text-sm font-semibold leading-tight tracking-tight",
|
|
365
|
+
className
|
|
366
|
+
),
|
|
367
|
+
...props
|
|
368
|
+
}
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
);
|
|
372
|
+
AlertTitle.displayName = "AlertTitle";
|
|
373
|
+
var AlertDescription = React5.forwardRef(
|
|
374
|
+
({ className, ...props }, ref) => {
|
|
375
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
376
|
+
"div",
|
|
377
|
+
{
|
|
378
|
+
ref,
|
|
379
|
+
"data-slot": "alert-description",
|
|
380
|
+
className: cn("text-sm leading-relaxed", className),
|
|
381
|
+
...props
|
|
382
|
+
}
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
);
|
|
386
|
+
AlertDescription.displayName = "AlertDescription";
|
|
387
|
+
function Separator({
|
|
388
|
+
className,
|
|
389
|
+
orientation = "horizontal",
|
|
390
|
+
decorative = true,
|
|
391
|
+
...props
|
|
392
|
+
}) {
|
|
393
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
394
|
+
SeparatorPrimitive__namespace.Root,
|
|
395
|
+
{
|
|
396
|
+
"data-slot": "separator",
|
|
397
|
+
decorative,
|
|
398
|
+
orientation,
|
|
399
|
+
className: cn(
|
|
400
|
+
"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
401
|
+
className
|
|
402
|
+
),
|
|
403
|
+
...props
|
|
404
|
+
}
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
var Skeleton = React5__namespace.forwardRef(
|
|
408
|
+
({ className, ...props }, ref) => {
|
|
409
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
410
|
+
"div",
|
|
411
|
+
{
|
|
412
|
+
ref,
|
|
413
|
+
"data-slot": "skeleton",
|
|
414
|
+
"aria-hidden": "true",
|
|
415
|
+
className: cn(
|
|
416
|
+
"bg-primary/5 animate-pulse rounded-none motion-reduce:animate-none",
|
|
417
|
+
className
|
|
418
|
+
),
|
|
419
|
+
...props
|
|
420
|
+
}
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
);
|
|
424
|
+
Skeleton.displayName = "Skeleton";
|
|
425
|
+
var progressVariants = classVarianceAuthority.cva("h-full rounded-none transition-all", {
|
|
426
|
+
variants: {
|
|
427
|
+
variant: {
|
|
428
|
+
default: "bg-primary-500",
|
|
429
|
+
success: "bg-green-500",
|
|
430
|
+
error: "bg-destructive"
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
defaultVariants: {
|
|
434
|
+
variant: "default"
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
var Progress = React5__namespace.forwardRef(
|
|
438
|
+
({
|
|
439
|
+
value,
|
|
440
|
+
max = 100,
|
|
441
|
+
variant = "default",
|
|
442
|
+
className,
|
|
443
|
+
"aria-label": ariaLabel,
|
|
444
|
+
...props
|
|
445
|
+
}, ref) => {
|
|
446
|
+
const clampedValue = Math.min(Math.max(0, value), max);
|
|
447
|
+
const percentage = clampedValue / max * 100;
|
|
448
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
449
|
+
"div",
|
|
450
|
+
{
|
|
451
|
+
ref,
|
|
452
|
+
role: "progressbar",
|
|
453
|
+
"aria-valuenow": clampedValue,
|
|
454
|
+
"aria-valuemin": 0,
|
|
455
|
+
"aria-valuemax": max,
|
|
456
|
+
"aria-label": ariaLabel || `Progress: ${Math.round(percentage)}%`,
|
|
457
|
+
className: cn(
|
|
458
|
+
"relative h-2 w-full overflow-hidden rounded-none bg-accent",
|
|
459
|
+
className
|
|
460
|
+
),
|
|
461
|
+
...props,
|
|
462
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
463
|
+
"div",
|
|
464
|
+
{
|
|
465
|
+
className: cn(progressVariants({ variant })),
|
|
466
|
+
style: {
|
|
467
|
+
width: `${percentage}%`,
|
|
468
|
+
transition: "width 300ms linear"
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
)
|
|
472
|
+
}
|
|
473
|
+
);
|
|
474
|
+
}
|
|
475
|
+
);
|
|
476
|
+
Progress.displayName = "Progress";
|
|
477
|
+
var Checkbox = React5.forwardRef(({ className, indeterminate, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
478
|
+
CheckboxPrimitive__namespace.Root,
|
|
479
|
+
{
|
|
480
|
+
ref,
|
|
481
|
+
"data-slot": "checkbox",
|
|
482
|
+
className: cn(
|
|
483
|
+
"peer h-4 w-4 shrink-0 rounded-none border border-primary/5 ring-offset-background focus:!border-primary focus-visible:!border-primary focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:!border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200",
|
|
484
|
+
className
|
|
485
|
+
),
|
|
486
|
+
...props,
|
|
487
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
488
|
+
CheckboxPrimitive__namespace.Indicator,
|
|
489
|
+
{
|
|
490
|
+
className: cn("flex items-center justify-center text-current"),
|
|
491
|
+
children: indeterminate ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "h-3 w-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3" })
|
|
492
|
+
}
|
|
493
|
+
)
|
|
494
|
+
}
|
|
495
|
+
));
|
|
496
|
+
Checkbox.displayName = "Checkbox";
|
|
497
|
+
var RadioGroup = React5.forwardRef(({ className, ...props }, ref) => {
|
|
498
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
499
|
+
RadioGroupPrimitive__namespace.Root,
|
|
500
|
+
{
|
|
501
|
+
className: cn("grid gap-2", className),
|
|
502
|
+
...props,
|
|
503
|
+
ref,
|
|
504
|
+
"data-slot": "radio-group"
|
|
505
|
+
}
|
|
506
|
+
);
|
|
507
|
+
});
|
|
508
|
+
RadioGroup.displayName = "RadioGroup";
|
|
509
|
+
var RadioGroupItem = React5.forwardRef(({ className, ...props }, ref) => {
|
|
510
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
511
|
+
RadioGroupPrimitive__namespace.Item,
|
|
512
|
+
{
|
|
513
|
+
ref,
|
|
514
|
+
"data-slot": "radio-group-item",
|
|
515
|
+
className: cn(
|
|
516
|
+
"peer h-4 w-4 shrink-0 rounded-none border border-primary/5 bg-background cursor-pointer transition-all duration-150 focus:!border-primary focus-visible:!border-primary focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:!border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50 hover:border-primary/30 data-[state=checked]:border-primary data-[state=checked]:border-[5px]",
|
|
517
|
+
className
|
|
518
|
+
),
|
|
519
|
+
...props,
|
|
520
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Indicator, {})
|
|
521
|
+
}
|
|
522
|
+
);
|
|
523
|
+
});
|
|
524
|
+
RadioGroupItem.displayName = "RadioGroupItem";
|
|
525
|
+
function Switch({ className, ...props }) {
|
|
526
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
527
|
+
reactSwitch.Root,
|
|
528
|
+
{
|
|
529
|
+
"data-slot": "switch",
|
|
530
|
+
className: cn(
|
|
531
|
+
"peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-none border border-primary/5 transition-all outline-none focus-visible:border-primary aria-invalid:border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50",
|
|
532
|
+
"data-[state=checked]:bg-primary data-[state=checked]:!border-primary",
|
|
533
|
+
"data-[state=unchecked]:bg-input data-[state=unchecked]:border-primary/5 dark:data-[state=unchecked]:bg-input/80",
|
|
534
|
+
className
|
|
535
|
+
),
|
|
536
|
+
...props,
|
|
537
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
538
|
+
reactSwitch.Thumb,
|
|
539
|
+
{
|
|
540
|
+
"data-slot": "switch-thumb",
|
|
541
|
+
className: cn(
|
|
542
|
+
"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-none ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
|
|
543
|
+
)
|
|
544
|
+
}
|
|
545
|
+
)
|
|
546
|
+
}
|
|
547
|
+
);
|
|
548
|
+
}
|
|
549
|
+
var Collapsible = CollapsiblePrimitive__namespace.Root;
|
|
550
|
+
var CollapsibleTrigger2 = CollapsiblePrimitive__namespace.CollapsibleTrigger;
|
|
551
|
+
var CollapsibleContent2 = CollapsiblePrimitive__namespace.CollapsibleContent;
|
|
552
|
+
var Accordion = AccordionPrimitive__namespace.Root;
|
|
553
|
+
var AccordionItem = React5.forwardRef(
|
|
554
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
555
|
+
AccordionPrimitive__namespace.Item,
|
|
556
|
+
{
|
|
557
|
+
ref,
|
|
558
|
+
"data-slot": "accordion-item",
|
|
559
|
+
className: cn("border-b", className),
|
|
560
|
+
...props
|
|
561
|
+
}
|
|
562
|
+
)
|
|
563
|
+
);
|
|
564
|
+
AccordionItem.displayName = "AccordionItem";
|
|
565
|
+
var AccordionTrigger = React5.forwardRef(
|
|
566
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", "data-slot": "accordion-header", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
567
|
+
AccordionPrimitive__namespace.Trigger,
|
|
568
|
+
{
|
|
569
|
+
ref,
|
|
570
|
+
"data-slot": "accordion-trigger",
|
|
571
|
+
className: cn(
|
|
572
|
+
"flex flex-1 items-center justify-between py-4 font-medium transition-all duration-150 hover:underline [&[data-state=open]>svg]:rotate-180",
|
|
573
|
+
className
|
|
574
|
+
),
|
|
575
|
+
...props,
|
|
576
|
+
children: [
|
|
577
|
+
children,
|
|
578
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-150" })
|
|
579
|
+
]
|
|
580
|
+
}
|
|
581
|
+
) })
|
|
582
|
+
);
|
|
583
|
+
AccordionTrigger.displayName = AccordionPrimitive__namespace.Trigger.displayName;
|
|
584
|
+
var AccordionContent = React5.forwardRef(
|
|
585
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
586
|
+
AccordionPrimitive__namespace.Content,
|
|
587
|
+
{
|
|
588
|
+
ref,
|
|
589
|
+
"data-slot": "accordion-content",
|
|
590
|
+
className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
|
|
591
|
+
...props,
|
|
592
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pb-4 pt-0", className), children })
|
|
593
|
+
}
|
|
594
|
+
)
|
|
595
|
+
);
|
|
596
|
+
AccordionContent.displayName = AccordionPrimitive__namespace.Content.displayName;
|
|
597
|
+
var avatarVariants = classVarianceAuthority.cva(
|
|
598
|
+
"relative inline-flex shrink-0 overflow-hidden rounded-none items-center justify-center bg-primary/5 text-muted-foreground",
|
|
599
|
+
{
|
|
600
|
+
variants: {
|
|
601
|
+
size: {
|
|
602
|
+
sm: "h-8 w-8",
|
|
603
|
+
md: "h-10 w-10",
|
|
604
|
+
lg: "h-12 w-12",
|
|
605
|
+
xl: "h-16 w-16",
|
|
606
|
+
"2xl": "h-20 w-20"
|
|
607
|
+
}
|
|
608
|
+
},
|
|
609
|
+
defaultVariants: {
|
|
610
|
+
size: "md"
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
);
|
|
614
|
+
var fallbackTextSizeMap = {
|
|
615
|
+
sm: "text-xs",
|
|
616
|
+
// 12px for 32px avatar
|
|
617
|
+
md: "text-sm",
|
|
618
|
+
// 14px for 40px avatar
|
|
619
|
+
lg: "text-base",
|
|
620
|
+
// 16px for 48px avatar
|
|
621
|
+
xl: "text-lg",
|
|
622
|
+
// 18px for 64px avatar
|
|
623
|
+
"2xl": "text-2xl"
|
|
624
|
+
// 24px for 80px avatar
|
|
625
|
+
};
|
|
626
|
+
var AvatarSizeContext = React5.createContext("md");
|
|
627
|
+
var Avatar = React5.forwardRef(
|
|
628
|
+
({ className, size = "md", ...props }, ref) => {
|
|
629
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AvatarSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
630
|
+
reactAvatar.Root,
|
|
631
|
+
{
|
|
632
|
+
ref,
|
|
633
|
+
"data-slot": "avatar",
|
|
634
|
+
className: cn(avatarVariants({ size }), className),
|
|
635
|
+
...props
|
|
636
|
+
}
|
|
637
|
+
) });
|
|
638
|
+
}
|
|
639
|
+
);
|
|
640
|
+
Avatar.displayName = "Avatar";
|
|
641
|
+
var AvatarImage = React5.forwardRef(
|
|
642
|
+
({ className, ...props }, ref) => {
|
|
643
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
644
|
+
reactAvatar.Image,
|
|
645
|
+
{
|
|
646
|
+
ref,
|
|
647
|
+
"data-slot": "avatar-image",
|
|
648
|
+
className: cn("aspect-square size-full", className),
|
|
649
|
+
...props
|
|
650
|
+
}
|
|
651
|
+
);
|
|
652
|
+
}
|
|
653
|
+
);
|
|
654
|
+
AvatarImage.displayName = "AvatarImage";
|
|
655
|
+
var AvatarFallback = React5.forwardRef(
|
|
656
|
+
({ className, children, ...props }, ref) => {
|
|
657
|
+
const size = React5.useContext(AvatarSizeContext) || "md";
|
|
658
|
+
const textSize = fallbackTextSizeMap[size];
|
|
659
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
660
|
+
reactAvatar.Fallback,
|
|
661
|
+
{
|
|
662
|
+
ref,
|
|
663
|
+
"data-slot": "avatar-fallback",
|
|
664
|
+
className: cn(
|
|
665
|
+
"bg-primary/5 text-muted-foreground flex size-full items-center justify-center rounded-none font-medium",
|
|
666
|
+
textSize,
|
|
667
|
+
className
|
|
668
|
+
),
|
|
669
|
+
...props,
|
|
670
|
+
children
|
|
671
|
+
}
|
|
672
|
+
);
|
|
673
|
+
}
|
|
674
|
+
);
|
|
675
|
+
AvatarFallback.displayName = "AvatarFallback";
|
|
676
|
+
var Tabs = reactTabs.Root;
|
|
677
|
+
var TabsList = React5.forwardRef(
|
|
678
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
679
|
+
reactTabs.List,
|
|
680
|
+
{
|
|
681
|
+
ref,
|
|
682
|
+
"data-slot": "tabs-list",
|
|
683
|
+
className: cn(
|
|
684
|
+
"inline-flex h-10 items-center justify-center gap-1 rounded-none p-0 text-muted-foreground",
|
|
685
|
+
className
|
|
686
|
+
),
|
|
687
|
+
...props
|
|
688
|
+
}
|
|
689
|
+
)
|
|
690
|
+
);
|
|
691
|
+
TabsList.displayName = reactTabs.List.displayName;
|
|
692
|
+
var TabsTrigger = React5.forwardRef(
|
|
693
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
694
|
+
reactTabs.Trigger,
|
|
695
|
+
{
|
|
696
|
+
ref,
|
|
697
|
+
"data-slot": "tabs-trigger",
|
|
698
|
+
className: cn(
|
|
699
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-none bg-transparent px-4 py-2 text-sm font-medium cursor-pointer transition-all duration-200 border-b-2 relative -mb-0.5 data-[state=active]:!border-b-primary data-[state=active]:text-primary data-[state=inactive]:border-transparent data-[state=inactive]:text-muted-foreground hover:text-primary hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
700
|
+
className
|
|
701
|
+
),
|
|
702
|
+
...props
|
|
703
|
+
}
|
|
704
|
+
)
|
|
705
|
+
);
|
|
706
|
+
TabsTrigger.displayName = reactTabs.Trigger.displayName;
|
|
707
|
+
var TabsContent = React5.forwardRef(
|
|
708
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
709
|
+
reactTabs.Content,
|
|
710
|
+
{
|
|
711
|
+
ref,
|
|
712
|
+
"data-slot": "tabs-content",
|
|
713
|
+
className: cn(
|
|
714
|
+
"mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2",
|
|
715
|
+
className
|
|
716
|
+
),
|
|
717
|
+
...props
|
|
718
|
+
}
|
|
719
|
+
)
|
|
720
|
+
);
|
|
721
|
+
TabsContent.displayName = reactTabs.Content.displayName;
|
|
722
|
+
var TooltipProvider = reactTooltip.Provider;
|
|
723
|
+
var Tooltip = reactTooltip.Root;
|
|
724
|
+
var TooltipTrigger = reactTooltip.Trigger;
|
|
725
|
+
var TooltipContent = React5.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
726
|
+
reactTooltip.Content,
|
|
727
|
+
{
|
|
728
|
+
ref,
|
|
729
|
+
sideOffset,
|
|
730
|
+
"data-slot": "tooltip-content",
|
|
731
|
+
className: cn(
|
|
732
|
+
"z-50 overflow-hidden rounded-none px-3 py-1.5 text-xs shadow-lg border border-primary/5 bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
733
|
+
className
|
|
734
|
+
),
|
|
735
|
+
...props
|
|
736
|
+
}
|
|
737
|
+
));
|
|
738
|
+
TooltipContent.displayName = reactTooltip.Content.displayName;
|
|
739
|
+
var PortalContext = React5.createContext({ container: null });
|
|
740
|
+
function PortalProvider({ container, children }) {
|
|
741
|
+
return /* @__PURE__ */ jsxRuntime.jsx(PortalContext.Provider, { value: { container }, children });
|
|
742
|
+
}
|
|
743
|
+
function usePortalContainer() {
|
|
744
|
+
const { container } = React5.useContext(PortalContext);
|
|
745
|
+
return container ?? void 0;
|
|
746
|
+
}
|
|
747
|
+
var Popover = PopoverPrimitive__namespace.Root;
|
|
748
|
+
var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
|
|
749
|
+
var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
|
|
750
|
+
var PopoverContent = React5__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => {
|
|
751
|
+
const portalContainer = usePortalContainer();
|
|
752
|
+
return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
753
|
+
PopoverPrimitive__namespace.Content,
|
|
754
|
+
{
|
|
755
|
+
ref,
|
|
756
|
+
align,
|
|
757
|
+
sideOffset,
|
|
758
|
+
"data-slot": "popover-content",
|
|
759
|
+
className: cn(
|
|
760
|
+
"z-[100] w-72 rounded-none border border-primary/5 bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
|
|
761
|
+
className
|
|
762
|
+
),
|
|
763
|
+
...props
|
|
764
|
+
}
|
|
765
|
+
) });
|
|
766
|
+
});
|
|
767
|
+
PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
|
|
768
|
+
var Dialog = DialogPrimitive__namespace.Root;
|
|
769
|
+
var DialogTrigger = DialogPrimitive__namespace.Trigger;
|
|
770
|
+
var DialogPortal = DialogPrimitive__namespace.Portal;
|
|
771
|
+
var DialogClose = DialogPrimitive__namespace.Close;
|
|
772
|
+
var DialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
773
|
+
DialogPrimitive__namespace.Overlay,
|
|
774
|
+
{
|
|
775
|
+
ref,
|
|
776
|
+
"data-slot": "dialog-overlay",
|
|
777
|
+
className: cn(
|
|
778
|
+
"fixed inset-0 z-50 bg-black/80 backdrop-blur-sm transition-opacity duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
779
|
+
className
|
|
780
|
+
),
|
|
781
|
+
...props
|
|
782
|
+
}
|
|
783
|
+
));
|
|
784
|
+
DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
|
|
785
|
+
var dialogContentVariants = classVarianceAuthority.cva("", {
|
|
786
|
+
variants: {
|
|
787
|
+
size: {
|
|
788
|
+
sm: "max-w-sm",
|
|
789
|
+
md: "max-w-lg",
|
|
790
|
+
lg: "max-w-2xl",
|
|
791
|
+
xl: "max-w-4xl",
|
|
792
|
+
full: "max-w-[calc(100vw-2rem)] sm:max-w-[calc(100vw-4rem)]"
|
|
793
|
+
}
|
|
794
|
+
},
|
|
795
|
+
defaultVariants: {
|
|
796
|
+
size: "md"
|
|
797
|
+
}
|
|
798
|
+
});
|
|
799
|
+
var DialogContent = React5.forwardRef(({ className, children, size, ...props }, ref) => {
|
|
800
|
+
const portalContainer = usePortalContainer();
|
|
801
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { container: portalContainer, children: [
|
|
802
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
|
|
803
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
804
|
+
DialogPrimitive__namespace.Content,
|
|
805
|
+
{
|
|
806
|
+
ref,
|
|
807
|
+
"data-slot": "dialog-content",
|
|
808
|
+
className: cn(
|
|
809
|
+
"fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-primary/5 bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
810
|
+
dialogContentVariants({ size }),
|
|
811
|
+
className
|
|
812
|
+
),
|
|
813
|
+
...props,
|
|
814
|
+
children: [
|
|
815
|
+
children,
|
|
816
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
817
|
+
DialogPrimitive__namespace.Close,
|
|
818
|
+
{
|
|
819
|
+
"data-slot": "dialog-close",
|
|
820
|
+
className: "absolute right-4 top-4 rounded-none p-1 text-muted-foreground cursor-pointer transition-colors duration-150 hover-unified focus:outline-none focus:ring-2 focus:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
821
|
+
children: [
|
|
822
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
|
|
823
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
|
|
824
|
+
]
|
|
825
|
+
}
|
|
826
|
+
)
|
|
827
|
+
]
|
|
828
|
+
}
|
|
829
|
+
)
|
|
830
|
+
] });
|
|
831
|
+
});
|
|
832
|
+
DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
|
|
833
|
+
var DialogHeader = React5.forwardRef(
|
|
834
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
835
|
+
"div",
|
|
836
|
+
{
|
|
837
|
+
ref,
|
|
838
|
+
className: cn(
|
|
839
|
+
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
840
|
+
className
|
|
841
|
+
),
|
|
842
|
+
...props
|
|
843
|
+
}
|
|
844
|
+
)
|
|
845
|
+
);
|
|
846
|
+
DialogHeader.displayName = "DialogHeader";
|
|
847
|
+
var DialogFooter = React5.forwardRef(
|
|
848
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
849
|
+
"div",
|
|
850
|
+
{
|
|
851
|
+
ref,
|
|
852
|
+
className: cn(
|
|
853
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
854
|
+
className
|
|
855
|
+
),
|
|
856
|
+
...props
|
|
857
|
+
}
|
|
858
|
+
)
|
|
859
|
+
);
|
|
860
|
+
DialogFooter.displayName = "DialogFooter";
|
|
861
|
+
var DialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
862
|
+
DialogPrimitive__namespace.Title,
|
|
863
|
+
{
|
|
864
|
+
ref,
|
|
865
|
+
className: cn(
|
|
866
|
+
"text-lg font-semibold leading-none tracking-tight text-foreground",
|
|
867
|
+
className
|
|
868
|
+
),
|
|
869
|
+
...props
|
|
870
|
+
}
|
|
871
|
+
));
|
|
872
|
+
DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
|
|
873
|
+
var DialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
874
|
+
DialogPrimitive__namespace.Description,
|
|
875
|
+
{
|
|
876
|
+
ref,
|
|
877
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
878
|
+
...props
|
|
879
|
+
}
|
|
880
|
+
));
|
|
881
|
+
DialogDescription.displayName = DialogPrimitive__namespace.Description.displayName;
|
|
882
|
+
var AlertDialog = AlertDialogPrimitive__namespace.Root;
|
|
883
|
+
var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
|
|
884
|
+
var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
|
|
885
|
+
var AlertDialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
886
|
+
AlertDialogPrimitive__namespace.Overlay,
|
|
887
|
+
{
|
|
888
|
+
ref,
|
|
889
|
+
className: cn(
|
|
890
|
+
"fixed inset-0 z-50 bg-black/80 backdrop-blur-sm transition-opacity duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
891
|
+
className
|
|
892
|
+
),
|
|
893
|
+
...props
|
|
894
|
+
}
|
|
895
|
+
));
|
|
896
|
+
AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
|
|
897
|
+
var AlertDialogContent = React5.forwardRef(({ className, ...props }, ref) => {
|
|
898
|
+
const portalContainer = usePortalContainer();
|
|
899
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogPortal, { container: portalContainer, children: [
|
|
900
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogOverlay, {}),
|
|
901
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
902
|
+
AlertDialogPrimitive__namespace.Content,
|
|
903
|
+
{
|
|
904
|
+
ref,
|
|
905
|
+
className: cn(
|
|
906
|
+
"fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-primary/5 bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
907
|
+
className
|
|
908
|
+
),
|
|
909
|
+
...props
|
|
910
|
+
}
|
|
911
|
+
)
|
|
912
|
+
] });
|
|
913
|
+
});
|
|
914
|
+
AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.displayName;
|
|
915
|
+
var AlertDialogHeader = React5.forwardRef(
|
|
916
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
917
|
+
"div",
|
|
918
|
+
{
|
|
919
|
+
ref,
|
|
920
|
+
className: cn(
|
|
921
|
+
"flex flex-col space-y-2 text-center sm:text-left",
|
|
922
|
+
className
|
|
923
|
+
),
|
|
924
|
+
...props
|
|
925
|
+
}
|
|
926
|
+
)
|
|
927
|
+
);
|
|
928
|
+
AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
929
|
+
var AlertDialogFooter = React5.forwardRef(
|
|
930
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
931
|
+
"div",
|
|
932
|
+
{
|
|
933
|
+
ref,
|
|
934
|
+
className: cn(
|
|
935
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
936
|
+
className
|
|
937
|
+
),
|
|
938
|
+
...props
|
|
939
|
+
}
|
|
940
|
+
)
|
|
941
|
+
);
|
|
942
|
+
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
943
|
+
var AlertDialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
944
|
+
AlertDialogPrimitive__namespace.Title,
|
|
945
|
+
{
|
|
946
|
+
ref,
|
|
947
|
+
className: cn(
|
|
948
|
+
"text-lg font-semibold leading-none tracking-tight text-foreground",
|
|
949
|
+
className
|
|
950
|
+
),
|
|
951
|
+
...props
|
|
952
|
+
}
|
|
953
|
+
));
|
|
954
|
+
AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
|
|
955
|
+
var AlertDialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
956
|
+
AlertDialogPrimitive__namespace.Description,
|
|
957
|
+
{
|
|
958
|
+
ref,
|
|
959
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
960
|
+
...props
|
|
961
|
+
}
|
|
962
|
+
));
|
|
963
|
+
AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
|
|
964
|
+
var AlertDialogAction = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
965
|
+
AlertDialogPrimitive__namespace.Action,
|
|
966
|
+
{
|
|
967
|
+
ref,
|
|
968
|
+
className: cn(buttonVariants({ variant: "destructive" }), className),
|
|
969
|
+
...props,
|
|
970
|
+
children
|
|
971
|
+
}
|
|
972
|
+
));
|
|
973
|
+
AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
|
|
974
|
+
var AlertDialogCancel = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
975
|
+
AlertDialogPrimitive__namespace.Cancel,
|
|
976
|
+
{
|
|
977
|
+
ref,
|
|
978
|
+
className: cn(
|
|
979
|
+
buttonVariants({ variant: "outline" }),
|
|
980
|
+
"mt-2 sm:mt-0",
|
|
981
|
+
className
|
|
982
|
+
),
|
|
983
|
+
...props,
|
|
984
|
+
children
|
|
985
|
+
}
|
|
986
|
+
));
|
|
987
|
+
AlertDialogCancel.displayName = AlertDialogPrimitive__namespace.Cancel.displayName;
|
|
988
|
+
var DropdownMenu = DropdownMenuPrimitive__namespace.Root;
|
|
989
|
+
var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
|
|
990
|
+
var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
|
|
991
|
+
var DropdownMenuPortal = DropdownMenuPrimitive__namespace.Portal;
|
|
992
|
+
var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
|
|
993
|
+
var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
|
|
994
|
+
var DropdownMenuSubTrigger = React5__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
995
|
+
DropdownMenuPrimitive__namespace.SubTrigger,
|
|
996
|
+
{
|
|
997
|
+
ref,
|
|
998
|
+
className: cn(
|
|
999
|
+
"flex cursor-default select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none hover-unified focus:bg-primary/5 focus:text-primary data-[state=open]:bg-primary/5 data-[state=open]:text-primary [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
1000
|
+
inset && "pl-8",
|
|
1001
|
+
className
|
|
1002
|
+
),
|
|
1003
|
+
...props,
|
|
1004
|
+
children: [
|
|
1005
|
+
children,
|
|
1006
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "ml-auto" })
|
|
1007
|
+
]
|
|
1008
|
+
}
|
|
1009
|
+
));
|
|
1010
|
+
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
|
|
1011
|
+
var DropdownMenuSubContent = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1012
|
+
DropdownMenuPrimitive__namespace.SubContent,
|
|
1013
|
+
{
|
|
1014
|
+
ref,
|
|
1015
|
+
className: cn(
|
|
1016
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-none border border-primary/5 bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
|
|
1017
|
+
className
|
|
1018
|
+
),
|
|
1019
|
+
...props
|
|
1020
|
+
}
|
|
1021
|
+
));
|
|
1022
|
+
DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
|
|
1023
|
+
var DropdownMenuContent = React5__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
|
|
1024
|
+
const portalContainer = usePortalContainer();
|
|
1025
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1026
|
+
DropdownMenuPrimitive__namespace.Content,
|
|
1027
|
+
{
|
|
1028
|
+
ref,
|
|
1029
|
+
sideOffset,
|
|
1030
|
+
className: cn(
|
|
1031
|
+
"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-none border border-primary/5 bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
|
|
1032
|
+
className
|
|
1033
|
+
),
|
|
1034
|
+
...props
|
|
1035
|
+
}
|
|
1036
|
+
) });
|
|
1037
|
+
});
|
|
1038
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
|
|
1039
|
+
var DropdownMenuItem = React5__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1040
|
+
DropdownMenuPrimitive__namespace.Item,
|
|
1041
|
+
{
|
|
1042
|
+
ref,
|
|
1043
|
+
className: cn(
|
|
1044
|
+
"relative flex cursor-pointer select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
1045
|
+
inset && "pl-8",
|
|
1046
|
+
className
|
|
1047
|
+
),
|
|
1048
|
+
...props
|
|
1049
|
+
}
|
|
1050
|
+
));
|
|
1051
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
|
|
1052
|
+
var DropdownMenuCheckboxItem = React5__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1053
|
+
DropdownMenuPrimitive__namespace.CheckboxItem,
|
|
1054
|
+
{
|
|
1055
|
+
ref,
|
|
1056
|
+
className: cn(
|
|
1057
|
+
"relative flex cursor-default select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover-primary-light focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1058
|
+
className
|
|
1059
|
+
),
|
|
1060
|
+
checked,
|
|
1061
|
+
...props,
|
|
1062
|
+
children: [
|
|
1063
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" }) }) }),
|
|
1064
|
+
children
|
|
1065
|
+
]
|
|
1066
|
+
}
|
|
1067
|
+
));
|
|
1068
|
+
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
|
|
1069
|
+
var DropdownMenuRadioItem = React5__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1070
|
+
DropdownMenuPrimitive__namespace.RadioItem,
|
|
1071
|
+
{
|
|
1072
|
+
ref,
|
|
1073
|
+
className: cn(
|
|
1074
|
+
"relative flex cursor-default select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover-primary-light focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1075
|
+
className
|
|
1076
|
+
),
|
|
1077
|
+
...props,
|
|
1078
|
+
children: [
|
|
1079
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-2 w-2 fill-current" }) }) }),
|
|
1080
|
+
children
|
|
1081
|
+
]
|
|
1082
|
+
}
|
|
1083
|
+
));
|
|
1084
|
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
|
|
1085
|
+
var DropdownMenuLabel = React5__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1086
|
+
DropdownMenuPrimitive__namespace.Label,
|
|
1087
|
+
{
|
|
1088
|
+
ref,
|
|
1089
|
+
className: cn(
|
|
1090
|
+
"px-2 py-1.5 text-sm font-semibold",
|
|
1091
|
+
inset && "pl-8",
|
|
1092
|
+
className
|
|
1093
|
+
),
|
|
1094
|
+
...props
|
|
1095
|
+
}
|
|
1096
|
+
));
|
|
1097
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
|
|
1098
|
+
var DropdownMenuSeparator = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1099
|
+
DropdownMenuPrimitive__namespace.Separator,
|
|
1100
|
+
{
|
|
1101
|
+
ref,
|
|
1102
|
+
className: cn("-mx-1 my-1 h-px bg-primary/5", className),
|
|
1103
|
+
...props
|
|
1104
|
+
}
|
|
1105
|
+
));
|
|
1106
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive__namespace.Separator.displayName;
|
|
1107
|
+
var DropdownMenuShortcut = React5__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
1108
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1109
|
+
"span",
|
|
1110
|
+
{
|
|
1111
|
+
ref,
|
|
1112
|
+
className: cn("ml-auto text-xs tracking-widest opacity-60", className),
|
|
1113
|
+
...props
|
|
1114
|
+
}
|
|
1115
|
+
);
|
|
1116
|
+
});
|
|
1117
|
+
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
1118
|
+
function Select({ ...props }) {
|
|
1119
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Root, { "data-slot": "select", ...props });
|
|
1120
|
+
}
|
|
1121
|
+
function SelectGroup({
|
|
1122
|
+
...props
|
|
1123
|
+
}) {
|
|
1124
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Group, { "data-slot": "select-group", ...props });
|
|
1125
|
+
}
|
|
1126
|
+
function SelectValue({
|
|
1127
|
+
...props
|
|
1128
|
+
}) {
|
|
1129
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Value, { "data-slot": "select-value", ...props });
|
|
1130
|
+
}
|
|
1131
|
+
var selectTriggerVariants = classVarianceAuthority.cva(
|
|
1132
|
+
"flex w-full items-center justify-between gap-2 rounded-none border border-input bg-background px-3 text-sm text-foreground cursor-pointer transition-all duration-150 focus:!border-primary focus-visible:!border-primary focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 data-[placeholder]:text-muted-foreground aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:!border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
|
|
1133
|
+
{
|
|
1134
|
+
variants: {
|
|
1135
|
+
size: {
|
|
1136
|
+
sm: "h-8 text-sm",
|
|
1137
|
+
default: "h-10 text-sm",
|
|
1138
|
+
lg: "h-11 text-base"
|
|
1139
|
+
}
|
|
1140
|
+
},
|
|
1141
|
+
defaultVariants: {
|
|
1142
|
+
size: "default"
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
);
|
|
1146
|
+
var SelectTrigger = React5.forwardRef(({ className, size, children, ...props }, ref) => {
|
|
1147
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1148
|
+
SelectPrimitive__namespace.Trigger,
|
|
1149
|
+
{
|
|
1150
|
+
ref,
|
|
1151
|
+
"data-slot": "select-trigger",
|
|
1152
|
+
className: cn(selectTriggerVariants({ size, className })),
|
|
1153
|
+
...props,
|
|
1154
|
+
children: [
|
|
1155
|
+
children,
|
|
1156
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4 opacity-50" }) })
|
|
1157
|
+
]
|
|
1158
|
+
}
|
|
1159
|
+
);
|
|
1160
|
+
});
|
|
1161
|
+
SelectTrigger.displayName = "SelectTrigger";
|
|
1162
|
+
function SelectContent({
|
|
1163
|
+
className,
|
|
1164
|
+
children,
|
|
1165
|
+
position = "popper",
|
|
1166
|
+
...props
|
|
1167
|
+
}) {
|
|
1168
|
+
const portalContainer = usePortalContainer();
|
|
1169
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1170
|
+
SelectPrimitive__namespace.Content,
|
|
1171
|
+
{
|
|
1172
|
+
"data-slot": "select-content",
|
|
1173
|
+
className: cn(
|
|
1174
|
+
"bg-popover text-popover-foreground border border-primary/5 shadow-none rounded-none z-9999 max-h-(--radix-select-content-available-height) min-w-32 overflow-hidden data-[state=open]:animate-zoom-in-95 data-[state=closed]:animate-zoom-out-95 data-[side=bottom]:animate-slide-in-from-top-2 data-[side=left]:animate-slide-in-from-right-2 data-[side=right]:animate-slide-in-from-left-2 data-[side=top]:animate-slide-in-from-bottom-2",
|
|
1175
|
+
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",
|
|
1176
|
+
className
|
|
1177
|
+
),
|
|
1178
|
+
position,
|
|
1179
|
+
...props,
|
|
1180
|
+
children: [
|
|
1181
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
|
|
1182
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1183
|
+
SelectPrimitive__namespace.Viewport,
|
|
1184
|
+
{
|
|
1185
|
+
className: cn(
|
|
1186
|
+
"p-1",
|
|
1187
|
+
position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"
|
|
1188
|
+
),
|
|
1189
|
+
children
|
|
1190
|
+
}
|
|
1191
|
+
),
|
|
1192
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
|
|
1193
|
+
]
|
|
1194
|
+
}
|
|
1195
|
+
) });
|
|
1196
|
+
}
|
|
1197
|
+
function SelectLabel({
|
|
1198
|
+
className,
|
|
1199
|
+
...props
|
|
1200
|
+
}) {
|
|
1201
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1202
|
+
SelectPrimitive__namespace.Label,
|
|
1203
|
+
{
|
|
1204
|
+
"data-slot": "select-label",
|
|
1205
|
+
className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
|
|
1206
|
+
...props
|
|
1207
|
+
}
|
|
1208
|
+
);
|
|
1209
|
+
}
|
|
1210
|
+
function SelectItem({
|
|
1211
|
+
className,
|
|
1212
|
+
children,
|
|
1213
|
+
...props
|
|
1214
|
+
}) {
|
|
1215
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1216
|
+
SelectPrimitive__namespace.Item,
|
|
1217
|
+
{
|
|
1218
|
+
"data-slot": "select-item",
|
|
1219
|
+
className: cn(
|
|
1220
|
+
"relative flex w-full cursor-pointer items-center gap-2 rounded-none py-2 pr-8 pl-2 text-sm text-foreground outline-none select-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
|
|
1221
|
+
className
|
|
1222
|
+
),
|
|
1223
|
+
...props,
|
|
1224
|
+
children: [
|
|
1225
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4" }) }) }),
|
|
1226
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children })
|
|
1227
|
+
]
|
|
1228
|
+
}
|
|
1229
|
+
);
|
|
1230
|
+
}
|
|
1231
|
+
function SelectSeparator({
|
|
1232
|
+
className,
|
|
1233
|
+
...props
|
|
1234
|
+
}) {
|
|
1235
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1236
|
+
SelectPrimitive__namespace.Separator,
|
|
1237
|
+
{
|
|
1238
|
+
"data-slot": "select-separator",
|
|
1239
|
+
className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
|
|
1240
|
+
...props
|
|
1241
|
+
}
|
|
1242
|
+
);
|
|
1243
|
+
}
|
|
1244
|
+
function SelectScrollUpButton({
|
|
1245
|
+
className,
|
|
1246
|
+
...props
|
|
1247
|
+
}) {
|
|
1248
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1249
|
+
SelectPrimitive__namespace.ScrollUpButton,
|
|
1250
|
+
{
|
|
1251
|
+
"data-slot": "select-scroll-up-button",
|
|
1252
|
+
className: cn(
|
|
1253
|
+
"flex cursor-default items-center justify-center py-1",
|
|
1254
|
+
className
|
|
1255
|
+
),
|
|
1256
|
+
...props,
|
|
1257
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "size-4" })
|
|
1258
|
+
}
|
|
1259
|
+
);
|
|
1260
|
+
}
|
|
1261
|
+
function SelectScrollDownButton({
|
|
1262
|
+
className,
|
|
1263
|
+
...props
|
|
1264
|
+
}) {
|
|
1265
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1266
|
+
SelectPrimitive__namespace.ScrollDownButton,
|
|
1267
|
+
{
|
|
1268
|
+
"data-slot": "select-scroll-down-button",
|
|
1269
|
+
className: cn(
|
|
1270
|
+
"flex cursor-default items-center justify-center py-1",
|
|
1271
|
+
className
|
|
1272
|
+
),
|
|
1273
|
+
...props,
|
|
1274
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4" })
|
|
1275
|
+
}
|
|
1276
|
+
);
|
|
1277
|
+
}
|
|
1278
|
+
var Sheet = DialogPrimitive__namespace.Root;
|
|
1279
|
+
var SheetTrigger = DialogPrimitive__namespace.Trigger;
|
|
1280
|
+
var SheetClose = DialogPrimitive__namespace.Close;
|
|
1281
|
+
var SheetPortal = DialogPrimitive__namespace.Portal;
|
|
1282
|
+
var SheetOverlay = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1283
|
+
DialogPrimitive__namespace.Overlay,
|
|
1284
|
+
{
|
|
1285
|
+
className: cn(
|
|
1286
|
+
"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",
|
|
1287
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
1288
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1289
|
+
className
|
|
1290
|
+
),
|
|
1291
|
+
...props,
|
|
1292
|
+
ref
|
|
1293
|
+
}
|
|
1294
|
+
));
|
|
1295
|
+
SheetOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
|
|
1296
|
+
var sheetVariants = classVarianceAuthority.cva(
|
|
1297
|
+
"fixed z-50 gap-4 bg-background p-6 shadow-lg will-change-transform transition ease-in-out data-[state=closed]:duration-150 data-[state=open]:duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
1298
|
+
{
|
|
1299
|
+
variants: {
|
|
1300
|
+
side: {
|
|
1301
|
+
top: "inset-x-0 top-0 border-b border-primary/5 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
1302
|
+
bottom: "inset-x-0 bottom-0 border-t border-primary/5 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
1303
|
+
left: "inset-y-0 left-0 h-full w-3/4 border-r border-primary/5 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
|
|
1304
|
+
right: "inset-y-0 right-0 h-full w-3/4 border-l border-primary/5 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
|
|
1305
|
+
}
|
|
1306
|
+
},
|
|
1307
|
+
defaultVariants: {
|
|
1308
|
+
side: "right"
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
);
|
|
1312
|
+
var SheetContent = React5__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => {
|
|
1313
|
+
const portalContainer = usePortalContainer();
|
|
1314
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(SheetPortal, { container: portalContainer, children: [
|
|
1315
|
+
/* @__PURE__ */ jsxRuntime.jsx(SheetOverlay, {}),
|
|
1316
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1317
|
+
DialogPrimitive__namespace.Content,
|
|
1318
|
+
{
|
|
1319
|
+
ref,
|
|
1320
|
+
"data-slot": "sheet-content",
|
|
1321
|
+
className: cn(sheetVariants({ side }), className),
|
|
1322
|
+
...props,
|
|
1323
|
+
children
|
|
1324
|
+
}
|
|
1325
|
+
)
|
|
1326
|
+
] });
|
|
1327
|
+
});
|
|
1328
|
+
SheetContent.displayName = DialogPrimitive__namespace.Content.displayName;
|
|
1329
|
+
var SheetHeader = ({
|
|
1330
|
+
className,
|
|
1331
|
+
...props
|
|
1332
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1333
|
+
"div",
|
|
1334
|
+
{
|
|
1335
|
+
className: cn(
|
|
1336
|
+
"flex flex-col space-y-2 text-center sm:text-left",
|
|
1337
|
+
className
|
|
1338
|
+
),
|
|
1339
|
+
...props
|
|
1340
|
+
}
|
|
1341
|
+
);
|
|
1342
|
+
SheetHeader.displayName = "SheetHeader";
|
|
1343
|
+
var SheetFooter = ({
|
|
1344
|
+
className,
|
|
1345
|
+
...props
|
|
1346
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1347
|
+
"div",
|
|
1348
|
+
{
|
|
1349
|
+
className: cn(
|
|
1350
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
1351
|
+
className
|
|
1352
|
+
),
|
|
1353
|
+
...props
|
|
1354
|
+
}
|
|
1355
|
+
);
|
|
1356
|
+
SheetFooter.displayName = "SheetFooter";
|
|
1357
|
+
var SheetTitle = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1358
|
+
DialogPrimitive__namespace.Title,
|
|
1359
|
+
{
|
|
1360
|
+
ref,
|
|
1361
|
+
className: cn("text-lg font-semibold text-foreground", className),
|
|
1362
|
+
...props
|
|
1363
|
+
}
|
|
1364
|
+
));
|
|
1365
|
+
SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
|
|
1366
|
+
var SheetDescription = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1367
|
+
DialogPrimitive__namespace.Description,
|
|
1368
|
+
{
|
|
1369
|
+
ref,
|
|
1370
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1371
|
+
...props
|
|
1372
|
+
}
|
|
1373
|
+
));
|
|
1374
|
+
SheetDescription.displayName = DialogPrimitive__namespace.Description.displayName;
|
|
1375
|
+
var Command = React5.forwardRef(
|
|
1376
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1377
|
+
cmdk.Command,
|
|
1378
|
+
{
|
|
1379
|
+
ref,
|
|
1380
|
+
className: cn(
|
|
1381
|
+
"flex h-full w-full flex-col overflow-hidden rounded-none bg-background text-foreground",
|
|
1382
|
+
className
|
|
1383
|
+
),
|
|
1384
|
+
...props
|
|
1385
|
+
}
|
|
1386
|
+
)
|
|
1387
|
+
);
|
|
1388
|
+
Command.displayName = "Command";
|
|
1389
|
+
var CommandDialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1390
|
+
DialogPrimitive__namespace.Overlay,
|
|
1391
|
+
{
|
|
1392
|
+
ref,
|
|
1393
|
+
className: cn(
|
|
1394
|
+
"fixed inset-0 z-[99] bg-black/80 backdrop-blur-sm",
|
|
1395
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
1396
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1397
|
+
"transition-opacity duration-200",
|
|
1398
|
+
className
|
|
1399
|
+
),
|
|
1400
|
+
...props
|
|
1401
|
+
}
|
|
1402
|
+
));
|
|
1403
|
+
CommandDialogOverlay.displayName = "CommandDialogOverlay";
|
|
1404
|
+
var CommandDialog = ({ children, ...props }) => {
|
|
1405
|
+
const portalContainer = usePortalContainer();
|
|
1406
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { ...props, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Portal, { container: portalContainer, children: [
|
|
1407
|
+
/* @__PURE__ */ jsxRuntime.jsx(CommandDialogOverlay, {}),
|
|
1408
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1409
|
+
DialogPrimitive__namespace.Content,
|
|
1410
|
+
{
|
|
1411
|
+
"data-slot": "command-content",
|
|
1412
|
+
className: cn(
|
|
1413
|
+
// Position
|
|
1414
|
+
"fixed left-[50%] top-[50%] z-[100] translate-x-[-50%] translate-y-[-50%]",
|
|
1415
|
+
// Size - responsive
|
|
1416
|
+
"w-full max-w-lg",
|
|
1417
|
+
"max-h-[85vh]",
|
|
1418
|
+
// Slightly shorter than design spec to ensure safe area
|
|
1419
|
+
// Mobile adjustments
|
|
1420
|
+
"sm:max-w-lg",
|
|
1421
|
+
// 512px on desktop
|
|
1422
|
+
"max-w-full",
|
|
1423
|
+
// Full width on mobile
|
|
1424
|
+
// Spacing
|
|
1425
|
+
"m-4 sm:m-0",
|
|
1426
|
+
// 16px margin on mobile, no margin on desktop
|
|
1427
|
+
// Visual
|
|
1428
|
+
"overflow-hidden rounded-none border border-primary/5 bg-background shadow-xl",
|
|
1429
|
+
// Animation
|
|
1430
|
+
"duration-200",
|
|
1431
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
1432
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1433
|
+
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
1434
|
+
"data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]"
|
|
1435
|
+
),
|
|
1436
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Command, { className: "[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wide [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:mb-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-3 [&_[cmdk-item]]:py-2 [&_[cmdk-item]_svg]:h-4 [&_[cmdk-item]_svg]:w-4", children })
|
|
1437
|
+
}
|
|
1438
|
+
)
|
|
1439
|
+
] }) });
|
|
1440
|
+
};
|
|
1441
|
+
var CommandInput = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1442
|
+
"div",
|
|
1443
|
+
{
|
|
1444
|
+
className: "flex items-center border-b border-primary/5 px-4",
|
|
1445
|
+
"cmdk-input-wrapper": "",
|
|
1446
|
+
children: [
|
|
1447
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "mr-3 h-5 w-5 shrink-0 text-muted-foreground" }),
|
|
1448
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1449
|
+
cmdk.Command.Input,
|
|
1450
|
+
{
|
|
1451
|
+
ref,
|
|
1452
|
+
className: cn(
|
|
1453
|
+
// Size
|
|
1454
|
+
"flex h-12 w-full",
|
|
1455
|
+
// Visual
|
|
1456
|
+
"bg-transparent text-base",
|
|
1457
|
+
"outline-none",
|
|
1458
|
+
// Typography
|
|
1459
|
+
"placeholder:text-muted-foreground",
|
|
1460
|
+
// States
|
|
1461
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
1462
|
+
// Prevent iOS zoom on focus
|
|
1463
|
+
"text-base md:text-sm",
|
|
1464
|
+
className
|
|
1465
|
+
),
|
|
1466
|
+
...props
|
|
1467
|
+
}
|
|
1468
|
+
)
|
|
1469
|
+
]
|
|
1470
|
+
}
|
|
1471
|
+
));
|
|
1472
|
+
CommandInput.displayName = "CommandInput";
|
|
1473
|
+
var CommandList = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1474
|
+
cmdk.Command.List,
|
|
1475
|
+
{
|
|
1476
|
+
ref,
|
|
1477
|
+
className: cn(
|
|
1478
|
+
// Scroll
|
|
1479
|
+
"max-h-[400px] overflow-y-auto overflow-x-hidden",
|
|
1480
|
+
// Spacing
|
|
1481
|
+
"p-2",
|
|
1482
|
+
className
|
|
1483
|
+
),
|
|
1484
|
+
...props
|
|
1485
|
+
}
|
|
1486
|
+
));
|
|
1487
|
+
CommandList.displayName = "CommandList";
|
|
1488
|
+
var CommandEmpty = React5.forwardRef((props, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1489
|
+
cmdk.Command.Empty,
|
|
1490
|
+
{
|
|
1491
|
+
ref,
|
|
1492
|
+
className: "py-8 px-4 text-center text-sm text-muted-foreground",
|
|
1493
|
+
...props
|
|
1494
|
+
}
|
|
1495
|
+
));
|
|
1496
|
+
CommandEmpty.displayName = "CommandEmpty";
|
|
1497
|
+
var CommandGroup = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1498
|
+
cmdk.Command.Group,
|
|
1499
|
+
{
|
|
1500
|
+
ref,
|
|
1501
|
+
className: cn(
|
|
1502
|
+
// Spacing
|
|
1503
|
+
"space-y-1 mb-2",
|
|
1504
|
+
// Heading styling applied via parent Command className
|
|
1505
|
+
"[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wide",
|
|
1506
|
+
className
|
|
1507
|
+
),
|
|
1508
|
+
...props
|
|
1509
|
+
}
|
|
1510
|
+
));
|
|
1511
|
+
CommandGroup.displayName = "CommandGroup";
|
|
1512
|
+
var CommandSeparator = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1513
|
+
cmdk.Command.Separator,
|
|
1514
|
+
{
|
|
1515
|
+
ref,
|
|
1516
|
+
className: cn("h-px bg-border my-2", className),
|
|
1517
|
+
...props
|
|
1518
|
+
}
|
|
1519
|
+
));
|
|
1520
|
+
CommandSeparator.displayName = "CommandSeparator";
|
|
1521
|
+
var CommandItem = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1522
|
+
cmdk.Command.Item,
|
|
1523
|
+
{
|
|
1524
|
+
ref,
|
|
1525
|
+
className: cn(
|
|
1526
|
+
// Layout
|
|
1527
|
+
"relative flex cursor-pointer select-none items-center gap-3",
|
|
1528
|
+
// Size
|
|
1529
|
+
"min-h-[44px] sm:min-h-[36px]",
|
|
1530
|
+
// Flexible height with minimal touch targets
|
|
1531
|
+
// Spacing
|
|
1532
|
+
"px-3 py-2.5",
|
|
1533
|
+
// Visual
|
|
1534
|
+
"rounded-none text-base sm:text-sm outline-none",
|
|
1535
|
+
// Transitions
|
|
1536
|
+
"transition-all duration-200 ease-(--ease-premium)",
|
|
1537
|
+
// Hover state - shared dashboard hover treatment
|
|
1538
|
+
"hover-unified",
|
|
1539
|
+
// Selected/focused state (keyboard navigation)
|
|
1540
|
+
"aria-selected:bg-primary/5 aria-selected:text-primary",
|
|
1541
|
+
"data-[selected=true]:bg-primary/5 data-[selected=true]:text-primary",
|
|
1542
|
+
// Disabled state
|
|
1543
|
+
"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
|
|
1544
|
+
className
|
|
1545
|
+
),
|
|
1546
|
+
...props
|
|
1547
|
+
}
|
|
1548
|
+
));
|
|
1549
|
+
CommandItem.displayName = "CommandItem";
|
|
1550
|
+
var CommandShortcut = React5.forwardRef(
|
|
1551
|
+
({ className, ...props }, ref) => {
|
|
1552
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1553
|
+
"span",
|
|
1554
|
+
{
|
|
1555
|
+
ref,
|
|
1556
|
+
className: cn(
|
|
1557
|
+
// Position
|
|
1558
|
+
"ml-auto",
|
|
1559
|
+
// Typography
|
|
1560
|
+
"text-xs font-mono",
|
|
1561
|
+
// Visual
|
|
1562
|
+
"text-muted-foreground bg-primary/5",
|
|
1563
|
+
"border border-primary/5 rounded-none",
|
|
1564
|
+
// Spacing
|
|
1565
|
+
"px-1.5 py-0.5",
|
|
1566
|
+
className
|
|
1567
|
+
),
|
|
1568
|
+
...props
|
|
1569
|
+
}
|
|
1570
|
+
);
|
|
1571
|
+
}
|
|
1572
|
+
);
|
|
1573
|
+
CommandShortcut.displayName = "CommandShortcut";
|
|
1574
|
+
var spinnerVariants = classVarianceAuthority.cva("animate-spin motion-reduce:animate-none", {
|
|
1575
|
+
variants: {
|
|
1576
|
+
size: {
|
|
1577
|
+
sm: "h-4 w-4",
|
|
1578
|
+
md: "h-5 w-5",
|
|
1579
|
+
lg: "h-6 w-6"
|
|
1580
|
+
}
|
|
1581
|
+
},
|
|
1582
|
+
defaultVariants: {
|
|
1583
|
+
size: "md"
|
|
1584
|
+
}
|
|
1585
|
+
});
|
|
1586
|
+
var Spinner = React5.forwardRef(
|
|
1587
|
+
({ size = "md", className, "aria-label": ariaLabel = "Loading", ...props }, ref) => {
|
|
1588
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1589
|
+
lucideReact.Loader2,
|
|
1590
|
+
{
|
|
1591
|
+
ref,
|
|
1592
|
+
role: "status",
|
|
1593
|
+
"aria-label": ariaLabel,
|
|
1594
|
+
className: cn(spinnerVariants({ size }), className),
|
|
1595
|
+
...props
|
|
1596
|
+
}
|
|
1597
|
+
);
|
|
1598
|
+
}
|
|
1599
|
+
);
|
|
1600
|
+
Spinner.displayName = "Spinner";
|
|
1601
|
+
function Toaster({ theme = "system", ...props }) {
|
|
1602
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1603
|
+
sonner.Toaster,
|
|
1604
|
+
{
|
|
1605
|
+
theme,
|
|
1606
|
+
className: "toaster group !bg-transparent !overflow-visible !z-[9999]",
|
|
1607
|
+
"data-slot": "toaster",
|
|
1608
|
+
toastOptions: {
|
|
1609
|
+
classNames: {
|
|
1610
|
+
description: "text-muted-foreground"
|
|
1611
|
+
}
|
|
1612
|
+
},
|
|
1613
|
+
icons: {
|
|
1614
|
+
success: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "h-4 w-4" }),
|
|
1615
|
+
info: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4" }),
|
|
1616
|
+
warning: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "h-4 w-4" }),
|
|
1617
|
+
error: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: "h-4 w-4" }),
|
|
1618
|
+
loading: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" })
|
|
1619
|
+
},
|
|
1620
|
+
style: {
|
|
1621
|
+
"--normal-bg": "hsl(var(--popover, 0 0% 100%))",
|
|
1622
|
+
"--normal-text": "hsl(var(--popover-foreground, 222.2 84% 4.9%))",
|
|
1623
|
+
"--normal-border": "hsl(var(--border, 214.3 31.8% 91.4%))",
|
|
1624
|
+
"--border-radius": "0px"
|
|
1625
|
+
},
|
|
1626
|
+
...props
|
|
1627
|
+
}
|
|
1628
|
+
);
|
|
1629
|
+
}
|
|
1630
|
+
var Table = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1631
|
+
"table",
|
|
1632
|
+
{
|
|
1633
|
+
ref,
|
|
1634
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
1635
|
+
...props
|
|
1636
|
+
}
|
|
1637
|
+
) }));
|
|
1638
|
+
Table.displayName = "Table";
|
|
1639
|
+
var TableHeader = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("thead", { ref, className: cn("[&_tr] :border-b border-primary/5", className), ...props }));
|
|
1640
|
+
TableHeader.displayName = "TableHeader";
|
|
1641
|
+
var TableBody = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1642
|
+
"tbody",
|
|
1643
|
+
{
|
|
1644
|
+
ref,
|
|
1645
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
1646
|
+
...props
|
|
1647
|
+
}
|
|
1648
|
+
));
|
|
1649
|
+
TableBody.displayName = "TableBody";
|
|
1650
|
+
var TableFooter = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1651
|
+
"tfoot",
|
|
1652
|
+
{
|
|
1653
|
+
ref,
|
|
1654
|
+
className: cn("border-t border-primary/5 font-medium [&>tr]:last:border-b-0", className),
|
|
1655
|
+
...props
|
|
1656
|
+
}
|
|
1657
|
+
));
|
|
1658
|
+
TableFooter.displayName = "TableFooter";
|
|
1659
|
+
var TableRow = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1660
|
+
"tr",
|
|
1661
|
+
{
|
|
1662
|
+
ref,
|
|
1663
|
+
className: cn(
|
|
1664
|
+
"border-b border-primary/5 transition-colors data-[state=selected]:bg-primary/5",
|
|
1665
|
+
className
|
|
1666
|
+
),
|
|
1667
|
+
...props
|
|
1668
|
+
}
|
|
1669
|
+
));
|
|
1670
|
+
TableRow.displayName = "TableRow";
|
|
1671
|
+
var TableHead = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1672
|
+
"th",
|
|
1673
|
+
{
|
|
1674
|
+
ref,
|
|
1675
|
+
className: cn(
|
|
1676
|
+
"h-11 px-4 text-left align-middle font-semibold text-xs text-foreground uppercase tracking-wider [&:has([role=checkbox])]:pr-0",
|
|
1677
|
+
className
|
|
1678
|
+
),
|
|
1679
|
+
...props
|
|
1680
|
+
}
|
|
1681
|
+
));
|
|
1682
|
+
TableHead.displayName = "TableHead";
|
|
1683
|
+
var TableCell = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1684
|
+
"td",
|
|
1685
|
+
{
|
|
1686
|
+
ref,
|
|
1687
|
+
className: cn(
|
|
1688
|
+
"px-4 py-3 align-middle [&:has([role=checkbox])]:pr-0",
|
|
1689
|
+
className
|
|
1690
|
+
),
|
|
1691
|
+
...props
|
|
1692
|
+
}
|
|
1693
|
+
));
|
|
1694
|
+
TableCell.displayName = "TableCell";
|
|
1695
|
+
var TableCaption = React5__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1696
|
+
"caption",
|
|
1697
|
+
{
|
|
1698
|
+
ref,
|
|
1699
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
1700
|
+
...props
|
|
1701
|
+
}
|
|
1702
|
+
));
|
|
1703
|
+
TableCaption.displayName = "TableCaption";
|
|
1704
|
+
function TableSearch({
|
|
1705
|
+
value,
|
|
1706
|
+
onChange,
|
|
1707
|
+
onClear,
|
|
1708
|
+
placeholder = "Filter records...",
|
|
1709
|
+
isLoading = false,
|
|
1710
|
+
inputRef
|
|
1711
|
+
}) {
|
|
1712
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full max-w-lg", children: [
|
|
1713
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
|
|
1714
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1715
|
+
"input",
|
|
1716
|
+
{
|
|
1717
|
+
ref: inputRef,
|
|
1718
|
+
type: "text",
|
|
1719
|
+
placeholder,
|
|
1720
|
+
value,
|
|
1721
|
+
onChange: (e) => onChange(e.target.value),
|
|
1722
|
+
"aria-busy": isLoading,
|
|
1723
|
+
className: "h-10 w-full rounded-none border border-primary/5 bg-background pl-10 pr-10 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 transition-all"
|
|
1724
|
+
}
|
|
1725
|
+
),
|
|
1726
|
+
(value || isLoading) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2", children: [
|
|
1727
|
+
isLoading && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-3.5 h-3.5 text-primary animate-spin" }),
|
|
1728
|
+
value && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1729
|
+
"button",
|
|
1730
|
+
{
|
|
1731
|
+
type: "button",
|
|
1732
|
+
onClick: onClear,
|
|
1733
|
+
className: "text-muted-foreground/60 hover:text-foreground transition-colors p-0.5 rounded-none hover:bg-primary/5",
|
|
1734
|
+
"aria-label": "Clear search",
|
|
1735
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3.5 h-3.5" })
|
|
1736
|
+
}
|
|
1737
|
+
)
|
|
1738
|
+
] })
|
|
1739
|
+
] });
|
|
1740
|
+
}
|
|
1741
|
+
function TableError({
|
|
1742
|
+
message = "An error occurred. Please try again."
|
|
1743
|
+
}) {
|
|
1744
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1745
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "w-4 h-4 shrink-0" }),
|
|
1746
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: message })
|
|
1747
|
+
] });
|
|
1748
|
+
}
|
|
1749
|
+
function TableLoading() {
|
|
1750
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-4 p-12 text-muted-foreground", children: [
|
|
1751
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-8 h-8 animate-spin text-primary/80" }),
|
|
1752
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Loading data..." })
|
|
1753
|
+
] });
|
|
1754
|
+
}
|
|
1755
|
+
function TableEmpty({ message = "No records found" }) {
|
|
1756
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-4 p-16 text-center text-muted-foreground", children: [
|
|
1757
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-none bg-primary/5", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileQuestion, { className: "h-6 w-6" }) }),
|
|
1758
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: message })
|
|
1759
|
+
] });
|
|
1760
|
+
}
|
|
1761
|
+
function renderPageNumbers(currentPage, totalPages, maxVisiblePages, onPageChange) {
|
|
1762
|
+
const getBtnClass = (active) => `flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 text-xs z-10 -ml-px transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring ${active ? "!bg-primary !text-primary-foreground !border-primary z-20" : "!bg-background !border-primary/5 hover-muted disabled:opacity-50"}`;
|
|
1763
|
+
if (totalPages <= maxVisiblePages) {
|
|
1764
|
+
return Array.from({ length: totalPages }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1765
|
+
"button",
|
|
1766
|
+
{
|
|
1767
|
+
onClick: () => onPageChange(i),
|
|
1768
|
+
"aria-label": `Go to page ${i + 1}`,
|
|
1769
|
+
"aria-current": currentPage === i ? "page" : void 0,
|
|
1770
|
+
className: getBtnClass(currentPage === i),
|
|
1771
|
+
children: i + 1
|
|
1772
|
+
},
|
|
1773
|
+
`page-${i}`
|
|
1774
|
+
));
|
|
1775
|
+
}
|
|
1776
|
+
const pages = [];
|
|
1777
|
+
const startPage = Math.max(0, currentPage - Math.floor(maxVisiblePages / 2));
|
|
1778
|
+
const endPage = Math.min(totalPages - 1, startPage + maxVisiblePages - 1);
|
|
1779
|
+
if (startPage > 0) {
|
|
1780
|
+
pages.push(
|
|
1781
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1782
|
+
"button",
|
|
1783
|
+
{
|
|
1784
|
+
onClick: () => onPageChange(0),
|
|
1785
|
+
"aria-label": "Go to page 1",
|
|
1786
|
+
className: getBtnClass(currentPage === 0),
|
|
1787
|
+
children: "1"
|
|
1788
|
+
},
|
|
1789
|
+
"page-0"
|
|
1790
|
+
)
|
|
1791
|
+
);
|
|
1792
|
+
if (startPage > 1) {
|
|
1793
|
+
pages.push(
|
|
1794
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1795
|
+
"span",
|
|
1796
|
+
{
|
|
1797
|
+
className: "flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 !border-primary/5 !bg-background text-muted-foreground text-xs -ml-px",
|
|
1798
|
+
"aria-hidden": "true",
|
|
1799
|
+
children: "..."
|
|
1800
|
+
},
|
|
1801
|
+
"ellipsis-start"
|
|
1802
|
+
)
|
|
1803
|
+
);
|
|
1804
|
+
}
|
|
1805
|
+
}
|
|
1806
|
+
for (let i = startPage; i <= endPage; i++) {
|
|
1807
|
+
pages.push(
|
|
1808
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1809
|
+
"button",
|
|
1810
|
+
{
|
|
1811
|
+
onClick: () => onPageChange(i),
|
|
1812
|
+
"aria-label": `Go to page ${i + 1}`,
|
|
1813
|
+
"aria-current": currentPage === i ? "page" : void 0,
|
|
1814
|
+
className: getBtnClass(currentPage === i),
|
|
1815
|
+
children: i + 1
|
|
1816
|
+
},
|
|
1817
|
+
i
|
|
1818
|
+
)
|
|
1819
|
+
);
|
|
1820
|
+
}
|
|
1821
|
+
if (endPage < totalPages - 1) {
|
|
1822
|
+
if (endPage < totalPages - 2) {
|
|
1823
|
+
pages.push(
|
|
1824
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1825
|
+
"span",
|
|
1826
|
+
{
|
|
1827
|
+
className: "flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 !border-primary/5 !bg-background text-muted-foreground text-xs -ml-px",
|
|
1828
|
+
"aria-hidden": "true",
|
|
1829
|
+
children: "..."
|
|
1830
|
+
},
|
|
1831
|
+
"ellipsis-end"
|
|
1832
|
+
)
|
|
1833
|
+
);
|
|
1834
|
+
}
|
|
1835
|
+
pages.push(
|
|
1836
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1837
|
+
"button",
|
|
1838
|
+
{
|
|
1839
|
+
onClick: () => onPageChange(totalPages - 1),
|
|
1840
|
+
"aria-label": `Go to page ${totalPages}`,
|
|
1841
|
+
className: getBtnClass(currentPage === totalPages - 1),
|
|
1842
|
+
children: totalPages
|
|
1843
|
+
},
|
|
1844
|
+
totalPages - 1
|
|
1845
|
+
)
|
|
1846
|
+
);
|
|
1847
|
+
}
|
|
1848
|
+
return pages;
|
|
1849
|
+
}
|
|
1850
|
+
function TablePagination({
|
|
1851
|
+
meta,
|
|
1852
|
+
onPageChange,
|
|
1853
|
+
onPageSizeChange,
|
|
1854
|
+
config,
|
|
1855
|
+
isLoading = false
|
|
1856
|
+
}) {
|
|
1857
|
+
const {
|
|
1858
|
+
showPageSizeSelector = true,
|
|
1859
|
+
pageSizeOptions = [10, 20, 30, 50],
|
|
1860
|
+
maxVisiblePages = 5
|
|
1861
|
+
} = config || {};
|
|
1862
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row w-full items-center justify-between gap-4 text-xs sm:text-sm text-muted-foreground p-4 border-t border-primary/5", children: [
|
|
1863
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "whitespace-nowrap order-2 sm:order-1", children: [
|
|
1864
|
+
"Showing ",
|
|
1865
|
+
(meta.page - 1) * meta.limit + 1,
|
|
1866
|
+
"-",
|
|
1867
|
+
Math.min(meta.page * meta.limit, meta.total),
|
|
1868
|
+
" of ",
|
|
1869
|
+
meta.total,
|
|
1870
|
+
" entries"
|
|
1871
|
+
] }),
|
|
1872
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-center gap-4 sm:gap-6 lg:gap-8 order-1 sm:order-2", children: [
|
|
1873
|
+
showPageSizeSelector && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-2", children: [
|
|
1874
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap hidden sm:inline-block", children: "Rows per page" }),
|
|
1875
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
1876
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1877
|
+
"select",
|
|
1878
|
+
{
|
|
1879
|
+
id: "pageSize",
|
|
1880
|
+
value: meta.limit,
|
|
1881
|
+
onChange: (e) => {
|
|
1882
|
+
const newPageSize = Number(e.target.value);
|
|
1883
|
+
onPageSizeChange(newPageSize);
|
|
1884
|
+
},
|
|
1885
|
+
className: "h-8 w-[70px] appearance-none rounded-none border border-primary/5 bg-background px-2 py-1 text-sm font-medium focus-visible:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50 hover-muted cursor-pointer",
|
|
1886
|
+
disabled: isLoading,
|
|
1887
|
+
children: pageSizeOptions.map((size) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: size, children: size }, size))
|
|
1888
|
+
}
|
|
1889
|
+
),
|
|
1890
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1891
|
+
"svg",
|
|
1892
|
+
{
|
|
1893
|
+
className: "h-3 w-3",
|
|
1894
|
+
fill: "none",
|
|
1895
|
+
viewBox: "0 0 24 24",
|
|
1896
|
+
stroke: "currentColor",
|
|
1897
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1898
|
+
"path",
|
|
1899
|
+
{
|
|
1900
|
+
strokeLinecap: "round",
|
|
1901
|
+
strokeLinejoin: "round",
|
|
1902
|
+
strokeWidth: 2,
|
|
1903
|
+
d: "M19 9l-7 7-7-7"
|
|
1904
|
+
}
|
|
1905
|
+
)
|
|
1906
|
+
}
|
|
1907
|
+
) })
|
|
1908
|
+
] })
|
|
1909
|
+
] }),
|
|
1910
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center -space-x-px", children: [
|
|
1911
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1912
|
+
"button",
|
|
1913
|
+
{
|
|
1914
|
+
onClick: () => onPageChange(0),
|
|
1915
|
+
disabled: meta.page === 0 || isLoading,
|
|
1916
|
+
className: "hidden sm:flex h-8 w-8 items-center justify-center rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
|
|
1917
|
+
"aria-label": "First page",
|
|
1918
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsLeft, { className: "h-4 w-4" })
|
|
1919
|
+
}
|
|
1920
|
+
),
|
|
1921
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1922
|
+
"button",
|
|
1923
|
+
{
|
|
1924
|
+
onClick: () => onPageChange(meta.page - 1),
|
|
1925
|
+
disabled: meta.page === 0 || isLoading,
|
|
1926
|
+
className: "flex h-8 w-8 items-center justify-center rounded-none sm:rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
|
|
1927
|
+
"aria-label": "Previous page",
|
|
1928
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
|
|
1929
|
+
}
|
|
1930
|
+
),
|
|
1931
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex", children: renderPageNumbers(
|
|
1932
|
+
meta.page,
|
|
1933
|
+
meta.totalPages,
|
|
1934
|
+
maxVisiblePages,
|
|
1935
|
+
onPageChange
|
|
1936
|
+
) }),
|
|
1937
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1938
|
+
"button",
|
|
1939
|
+
{
|
|
1940
|
+
onClick: () => onPageChange(meta.page + 1),
|
|
1941
|
+
disabled: meta.page >= meta.totalPages - 1 || isLoading,
|
|
1942
|
+
className: "flex h-8 w-8 items-center justify-center rounded-none sm:rounded-none border-y border-primary/5 border-x border-primary/5 sm :border-r border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
|
|
1943
|
+
"aria-label": "Next page",
|
|
1944
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
|
|
1945
|
+
}
|
|
1946
|
+
),
|
|
1947
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1948
|
+
"button",
|
|
1949
|
+
{
|
|
1950
|
+
onClick: () => onPageChange(meta.totalPages - 1),
|
|
1951
|
+
disabled: meta.page >= meta.totalPages - 1 || isLoading,
|
|
1952
|
+
className: "hidden sm:flex h-8 w-8 items-center justify-center rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
|
|
1953
|
+
"aria-label": "Last page",
|
|
1954
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsRight, { className: "h-4 w-4" })
|
|
1955
|
+
}
|
|
1956
|
+
)
|
|
1957
|
+
] }),
|
|
1958
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "whitespace-nowrap hidden sm:block", children: [
|
|
1959
|
+
"Page ",
|
|
1960
|
+
meta.page + 1,
|
|
1961
|
+
" of ",
|
|
1962
|
+
meta.totalPages
|
|
1963
|
+
] })
|
|
1964
|
+
] })
|
|
1965
|
+
] });
|
|
1966
|
+
}
|
|
1967
|
+
var GrayBar = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className });
|
|
1968
|
+
var TableSkeleton = ({
|
|
1969
|
+
columns = 5,
|
|
1970
|
+
rowCount = 8,
|
|
1971
|
+
hideWrapper = false,
|
|
1972
|
+
hideFooter = false
|
|
1973
|
+
}) => {
|
|
1974
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1975
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-0 rounded-none shadow-none", children: /* @__PURE__ */ jsxRuntime.jsxs(Table, { children: [
|
|
1976
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(TableRow, { children: Array.from({ length: columns }).map((_, colIdx) => /* @__PURE__ */ jsxRuntime.jsx(TableHead, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-4 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[70%] max-w-[180px]" }) : /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, `skeleton-header-${colIdx}`)) }) }),
|
|
1977
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ jsxRuntime.jsx(TableRow, { className: "border-b border-primary/5", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-8 w-8 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
1978
|
+
/* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "w-9 rounded-none shrink-0" }),
|
|
1979
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 flex-1", children: [
|
|
1980
|
+
/* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-[120px]" }),
|
|
1981
|
+
/* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-3 w-[80px]" })
|
|
1982
|
+
] })
|
|
1983
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, colIdx)) }, rowIdx)) })
|
|
1984
|
+
] }) }),
|
|
1985
|
+
!hideFooter && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-footer border-t border-primary/5", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-2 py-4 p-4", children: [
|
|
1986
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 text-sm", children: /* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[120px]" }) }),
|
|
1987
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-6", children: [
|
|
1988
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1989
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-20" }),
|
|
1990
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-[70px]" })
|
|
1991
|
+
] }),
|
|
1992
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
1993
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
|
|
1994
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
|
|
1995
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
|
|
1996
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" }),
|
|
1997
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-8 w-8" })
|
|
1998
|
+
] }),
|
|
1999
|
+
/* @__PURE__ */ jsxRuntime.jsx(GrayBar, { className: "h-4 w-[120px]" })
|
|
2000
|
+
] })
|
|
2001
|
+
] }) })
|
|
2002
|
+
] });
|
|
2003
|
+
if (hideWrapper) {
|
|
2004
|
+
return content;
|
|
2005
|
+
}
|
|
2006
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-wrapper rounded-none border border-primary/5 bg-card overflow-hidden", children: content });
|
|
2007
|
+
};
|
|
2008
|
+
TableSkeleton.displayName = "TableSkeleton";
|
|
2009
|
+
function ResponsiveTableInner({
|
|
2010
|
+
data,
|
|
2011
|
+
columns,
|
|
2012
|
+
onRowClick,
|
|
2013
|
+
renderMobileCard,
|
|
2014
|
+
className,
|
|
2015
|
+
emptyMessage = "No results found.",
|
|
2016
|
+
ariaLabel,
|
|
2017
|
+
tableWrapperClassName,
|
|
2018
|
+
footer
|
|
2019
|
+
}, ref) {
|
|
2020
|
+
const visibleMobileColumns = React5__namespace.useMemo(
|
|
2021
|
+
() => columns.filter((col) => !col.hideOnMobile),
|
|
2022
|
+
[columns]
|
|
2023
|
+
);
|
|
2024
|
+
const primaryColumn = React5__namespace.useMemo(() => {
|
|
2025
|
+
return visibleMobileColumns.find(
|
|
2026
|
+
(col) => col.key !== "select" && col.key !== "actions"
|
|
2027
|
+
) || visibleMobileColumns[0];
|
|
2028
|
+
}, [visibleMobileColumns]);
|
|
2029
|
+
const secondaryColumns = React5__namespace.useMemo(
|
|
2030
|
+
() => visibleMobileColumns.filter((col) => col.key !== primaryColumn?.key),
|
|
2031
|
+
[visibleMobileColumns, primaryColumn]
|
|
2032
|
+
);
|
|
2033
|
+
React5__namespace.useEffect(() => {
|
|
2034
|
+
const isDev = typeof globalThis !== "undefined" && globalThis.process && globalThis.process.env?.NODE_ENV === "development";
|
|
2035
|
+
if (isDev && visibleMobileColumns.length === 0) {
|
|
2036
|
+
console.warn(
|
|
2037
|
+
"ResponsiveTable: All columns are hidden on mobile (hideOnMobile: true). Consider showing at least one column for better mobile UX. Users will see empty card borders on mobile devices."
|
|
2038
|
+
);
|
|
2039
|
+
}
|
|
2040
|
+
}, [visibleMobileColumns.length]);
|
|
2041
|
+
const handleItemClick = React5__namespace.useCallback(
|
|
2042
|
+
(item, e) => {
|
|
2043
|
+
if (!onRowClick) return;
|
|
2044
|
+
if (e) {
|
|
2045
|
+
const target = e.target;
|
|
2046
|
+
if (target.closest('[role="checkbox"]') || target.closest("button") || target.closest("a") || target.closest('[role^="menuitem"]') || target.closest("[data-actions]")) {
|
|
2047
|
+
return;
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
2050
|
+
onRowClick(item);
|
|
2051
|
+
},
|
|
2052
|
+
[onRowClick]
|
|
2053
|
+
);
|
|
2054
|
+
const handleCardKeyDown = React5__namespace.useCallback(
|
|
2055
|
+
(item) => (e) => {
|
|
2056
|
+
if (onRowClick && (e.key === "Enter" || e.key === " ")) {
|
|
2057
|
+
e.preventDefault();
|
|
2058
|
+
handleItemClick(item, e);
|
|
2059
|
+
}
|
|
2060
|
+
},
|
|
2061
|
+
[handleItemClick, onRowClick]
|
|
2062
|
+
);
|
|
2063
|
+
if (data.length === 0) {
|
|
2064
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2065
|
+
"div",
|
|
2066
|
+
{
|
|
2067
|
+
ref,
|
|
2068
|
+
className: cn(
|
|
2069
|
+
"p-8 text-center",
|
|
2070
|
+
className
|
|
2071
|
+
),
|
|
2072
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage })
|
|
2073
|
+
}
|
|
2074
|
+
);
|
|
2075
|
+
}
|
|
2076
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("w-full", className), children: [
|
|
2077
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 md:hidden", children: data.map((item) => {
|
|
2078
|
+
const primaryValue = primaryColumn ? String(item[primaryColumn.key]) : String(item.id);
|
|
2079
|
+
if (renderMobileCard) {
|
|
2080
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2081
|
+
"div",
|
|
2082
|
+
{
|
|
2083
|
+
onClick: (e) => handleItemClick(item, e),
|
|
2084
|
+
role: onRowClick ? "button" : void 0,
|
|
2085
|
+
tabIndex: onRowClick ? 0 : void 0,
|
|
2086
|
+
onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
|
|
2087
|
+
className: onRowClick ? "cursor-pointer" : void 0,
|
|
2088
|
+
"aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
|
|
2089
|
+
children: renderMobileCard(item, visibleMobileColumns)
|
|
2090
|
+
},
|
|
2091
|
+
item.id
|
|
2092
|
+
);
|
|
2093
|
+
}
|
|
2094
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2095
|
+
Card,
|
|
2096
|
+
{
|
|
2097
|
+
variant: onRowClick ? "interactive" : "default",
|
|
2098
|
+
className: cn(
|
|
2099
|
+
onRowClick && "cursor-pointer",
|
|
2100
|
+
"transition-all duration-150"
|
|
2101
|
+
),
|
|
2102
|
+
onClick: (e) => handleItemClick(item, e),
|
|
2103
|
+
role: onRowClick ? "button" : void 0,
|
|
2104
|
+
tabIndex: onRowClick ? 0 : void 0,
|
|
2105
|
+
onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
|
|
2106
|
+
"aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
|
|
2107
|
+
children: [
|
|
2108
|
+
primaryColumn ? /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { className: "pb-3", children: /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: "text-base", children: primaryColumn.render ? primaryColumn.render(item[primaryColumn.key], item) : String(item[primaryColumn.key]) }) }) : null,
|
|
2109
|
+
secondaryColumns.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "pb-3", children: /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "flex flex-col gap-2", children: secondaryColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2110
|
+
"div",
|
|
2111
|
+
{
|
|
2112
|
+
className: "flex items-start justify-between gap-4 text-sm",
|
|
2113
|
+
children: [
|
|
2114
|
+
!column.hideLabelOnMobile && /* @__PURE__ */ jsxRuntime.jsxs("dt", { className: "text-muted-foreground min-w-[80px] shrink-0", children: [
|
|
2115
|
+
column.label,
|
|
2116
|
+
":"
|
|
2117
|
+
] }),
|
|
2118
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2119
|
+
"dd",
|
|
2120
|
+
{
|
|
2121
|
+
className: cn(
|
|
2122
|
+
"font-medium flex-1",
|
|
2123
|
+
!column.hideLabelOnMobile ? "text-right" : "text-left"
|
|
2124
|
+
),
|
|
2125
|
+
children: column.render ? column.render(item[column.key], item) : String(item[column.key])
|
|
2126
|
+
}
|
|
2127
|
+
)
|
|
2128
|
+
]
|
|
2129
|
+
},
|
|
2130
|
+
String(column.key)
|
|
2131
|
+
)) }) })
|
|
2132
|
+
]
|
|
2133
|
+
},
|
|
2134
|
+
item.id
|
|
2135
|
+
);
|
|
2136
|
+
}) }),
|
|
2137
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2138
|
+
"div",
|
|
2139
|
+
{
|
|
2140
|
+
className: cn(
|
|
2141
|
+
"table-wrapper hidden md:block overflow-hidden rounded-none border border-primary/5",
|
|
2142
|
+
tableWrapperClassName
|
|
2143
|
+
),
|
|
2144
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Table, { "aria-label": ariaLabel || "Data table", children: [
|
|
2145
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHeader, { className: "bg-[hsl(var(--table-header-bg))]", children: /* @__PURE__ */ jsxRuntime.jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2146
|
+
TableHead,
|
|
2147
|
+
{
|
|
2148
|
+
className: column.headerClassName,
|
|
2149
|
+
children: column.label
|
|
2150
|
+
},
|
|
2151
|
+
String(column.key)
|
|
2152
|
+
)) }) }),
|
|
2153
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: data.map((item) => {
|
|
2154
|
+
const primaryValue = primaryColumn ? String(item[primaryColumn.key]) : String(item.id);
|
|
2155
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2156
|
+
TableRow,
|
|
2157
|
+
{
|
|
2158
|
+
className: cn(
|
|
2159
|
+
"hover-unified-table-row",
|
|
2160
|
+
onRowClick && "cursor-pointer"
|
|
2161
|
+
),
|
|
2162
|
+
onClick: (e) => handleItemClick(item, e),
|
|
2163
|
+
role: onRowClick ? "button" : void 0,
|
|
2164
|
+
tabIndex: onRowClick ? 0 : void 0,
|
|
2165
|
+
onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
|
|
2166
|
+
"aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
|
|
2167
|
+
children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2168
|
+
TableCell,
|
|
2169
|
+
{
|
|
2170
|
+
className: column.cellClassName,
|
|
2171
|
+
children: column.render ? column.render(item[column.key], item) : String(item[column.key])
|
|
2172
|
+
},
|
|
2173
|
+
String(column.key)
|
|
2174
|
+
))
|
|
2175
|
+
},
|
|
2176
|
+
item.id
|
|
2177
|
+
);
|
|
2178
|
+
}) })
|
|
2179
|
+
] })
|
|
2180
|
+
}
|
|
2181
|
+
),
|
|
2182
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-footer border-t border-primary/5 bg-[hsl(var(--table-header-bg))]", children: footer })
|
|
2183
|
+
] });
|
|
2184
|
+
}
|
|
2185
|
+
var ResponsiveTable = React5__namespace.forwardRef(ResponsiveTableInner);
|
|
2186
|
+
|
|
2187
|
+
// src/tailwind-preset.ts
|
|
2188
|
+
var uiPreset = {
|
|
2189
|
+
theme: {
|
|
2190
|
+
extend: {
|
|
2191
|
+
colors: {
|
|
2192
|
+
border: "hsl(var(--border))",
|
|
2193
|
+
input: "hsl(var(--input))",
|
|
2194
|
+
ring: "hsl(var(--ring))",
|
|
2195
|
+
background: "hsl(var(--background))",
|
|
2196
|
+
foreground: "hsl(var(--foreground))",
|
|
2197
|
+
primary: {
|
|
2198
|
+
DEFAULT: "hsl(var(--primary))",
|
|
2199
|
+
foreground: "hsl(var(--primary-foreground))"
|
|
2200
|
+
},
|
|
2201
|
+
secondary: {
|
|
2202
|
+
DEFAULT: "hsl(var(--secondary))",
|
|
2203
|
+
foreground: "hsl(var(--secondary-foreground))"
|
|
2204
|
+
},
|
|
2205
|
+
destructive: {
|
|
2206
|
+
DEFAULT: "hsl(var(--destructive))",
|
|
2207
|
+
foreground: "hsl(var(--destructive-foreground))"
|
|
2208
|
+
},
|
|
2209
|
+
success: {
|
|
2210
|
+
DEFAULT: "hsl(var(--success))",
|
|
2211
|
+
foreground: "hsl(var(--success-foreground))"
|
|
2212
|
+
},
|
|
2213
|
+
warning: {
|
|
2214
|
+
DEFAULT: "hsl(var(--warning))",
|
|
2215
|
+
foreground: "hsl(var(--warning-foreground))"
|
|
2216
|
+
},
|
|
2217
|
+
muted: {
|
|
2218
|
+
DEFAULT: "hsl(var(--muted))",
|
|
2219
|
+
foreground: "hsl(var(--muted-foreground))"
|
|
2220
|
+
},
|
|
2221
|
+
accent: {
|
|
2222
|
+
DEFAULT: "hsl(var(--accent))",
|
|
2223
|
+
foreground: "hsl(var(--accent-foreground))"
|
|
2224
|
+
},
|
|
2225
|
+
popover: {
|
|
2226
|
+
DEFAULT: "hsl(var(--popover))",
|
|
2227
|
+
foreground: "hsl(var(--popover-foreground))"
|
|
2228
|
+
},
|
|
2229
|
+
card: {
|
|
2230
|
+
DEFAULT: "hsl(var(--card))",
|
|
2231
|
+
foreground: "hsl(var(--card-foreground))"
|
|
2232
|
+
}
|
|
2233
|
+
},
|
|
2234
|
+
borderRadius: {
|
|
2235
|
+
lg: "var(--radius)",
|
|
2236
|
+
md: "calc(var(--radius) - 2px)",
|
|
2237
|
+
sm: "calc(var(--radius) - 4px)"
|
|
2238
|
+
},
|
|
2239
|
+
keyframes: {
|
|
2240
|
+
"accordion-down": {
|
|
2241
|
+
from: { height: "0" },
|
|
2242
|
+
to: { height: "var(--radix-accordion-content-height)" }
|
|
2243
|
+
},
|
|
2244
|
+
"accordion-up": {
|
|
2245
|
+
from: { height: "var(--radix-accordion-content-height)" },
|
|
2246
|
+
to: { height: "0" }
|
|
2247
|
+
}
|
|
2248
|
+
},
|
|
2249
|
+
animation: {
|
|
2250
|
+
"accordion-down": "accordion-down 0.3s cubic-bezier(0.87, 0, 0.13, 1)",
|
|
2251
|
+
"accordion-up": "accordion-up 0.3s cubic-bezier(0.87, 0, 0.13, 1)"
|
|
2252
|
+
}
|
|
2253
|
+
}
|
|
2254
|
+
}
|
|
2255
|
+
};
|
|
2256
|
+
var tailwind_preset_default = uiPreset;
|
|
2257
|
+
|
|
2258
|
+
Object.defineProperty(exports, "toast", {
|
|
2259
|
+
enumerable: true,
|
|
2260
|
+
get: function () { return sonner.toast; }
|
|
2261
|
+
});
|
|
2262
|
+
exports.Accordion = Accordion;
|
|
2263
|
+
exports.AccordionContent = AccordionContent;
|
|
2264
|
+
exports.AccordionItem = AccordionItem;
|
|
2265
|
+
exports.AccordionTrigger = AccordionTrigger;
|
|
2266
|
+
exports.Alert = Alert;
|
|
2267
|
+
exports.AlertDescription = AlertDescription;
|
|
2268
|
+
exports.AlertDialog = AlertDialog;
|
|
2269
|
+
exports.AlertDialogAction = AlertDialogAction;
|
|
2270
|
+
exports.AlertDialogCancel = AlertDialogCancel;
|
|
2271
|
+
exports.AlertDialogContent = AlertDialogContent;
|
|
2272
|
+
exports.AlertDialogDescription = AlertDialogDescription;
|
|
2273
|
+
exports.AlertDialogFooter = AlertDialogFooter;
|
|
2274
|
+
exports.AlertDialogHeader = AlertDialogHeader;
|
|
2275
|
+
exports.AlertDialogOverlay = AlertDialogOverlay;
|
|
2276
|
+
exports.AlertDialogPortal = AlertDialogPortal;
|
|
2277
|
+
exports.AlertDialogTitle = AlertDialogTitle;
|
|
2278
|
+
exports.AlertDialogTrigger = AlertDialogTrigger;
|
|
2279
|
+
exports.AlertTitle = AlertTitle;
|
|
2280
|
+
exports.Avatar = Avatar;
|
|
2281
|
+
exports.AvatarFallback = AvatarFallback;
|
|
2282
|
+
exports.AvatarImage = AvatarImage;
|
|
2283
|
+
exports.Badge = Badge;
|
|
2284
|
+
exports.Button = Button;
|
|
2285
|
+
exports.Card = Card;
|
|
2286
|
+
exports.CardAction = CardAction;
|
|
2287
|
+
exports.CardContent = CardContent;
|
|
2288
|
+
exports.CardDescription = CardDescription;
|
|
2289
|
+
exports.CardFooter = CardFooter;
|
|
2290
|
+
exports.CardHeader = CardHeader;
|
|
2291
|
+
exports.CardTitle = CardTitle;
|
|
2292
|
+
exports.Checkbox = Checkbox;
|
|
2293
|
+
exports.Collapsible = Collapsible;
|
|
2294
|
+
exports.CollapsibleContent = CollapsibleContent2;
|
|
2295
|
+
exports.CollapsibleTrigger = CollapsibleTrigger2;
|
|
2296
|
+
exports.Command = Command;
|
|
2297
|
+
exports.CommandDialog = CommandDialog;
|
|
2298
|
+
exports.CommandEmpty = CommandEmpty;
|
|
2299
|
+
exports.CommandGroup = CommandGroup;
|
|
2300
|
+
exports.CommandInput = CommandInput;
|
|
2301
|
+
exports.CommandItem = CommandItem;
|
|
2302
|
+
exports.CommandList = CommandList;
|
|
2303
|
+
exports.CommandSeparator = CommandSeparator;
|
|
2304
|
+
exports.CommandShortcut = CommandShortcut;
|
|
2305
|
+
exports.Dialog = Dialog;
|
|
2306
|
+
exports.DialogClose = DialogClose;
|
|
2307
|
+
exports.DialogContent = DialogContent;
|
|
2308
|
+
exports.DialogDescription = DialogDescription;
|
|
2309
|
+
exports.DialogFooter = DialogFooter;
|
|
2310
|
+
exports.DialogHeader = DialogHeader;
|
|
2311
|
+
exports.DialogOverlay = DialogOverlay;
|
|
2312
|
+
exports.DialogPortal = DialogPortal;
|
|
2313
|
+
exports.DialogTitle = DialogTitle;
|
|
2314
|
+
exports.DialogTrigger = DialogTrigger;
|
|
2315
|
+
exports.DropdownMenu = DropdownMenu;
|
|
2316
|
+
exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
|
|
2317
|
+
exports.DropdownMenuContent = DropdownMenuContent;
|
|
2318
|
+
exports.DropdownMenuGroup = DropdownMenuGroup;
|
|
2319
|
+
exports.DropdownMenuItem = DropdownMenuItem;
|
|
2320
|
+
exports.DropdownMenuLabel = DropdownMenuLabel;
|
|
2321
|
+
exports.DropdownMenuPortal = DropdownMenuPortal;
|
|
2322
|
+
exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
|
|
2323
|
+
exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
|
|
2324
|
+
exports.DropdownMenuSeparator = DropdownMenuSeparator;
|
|
2325
|
+
exports.DropdownMenuShortcut = DropdownMenuShortcut;
|
|
2326
|
+
exports.DropdownMenuSub = DropdownMenuSub;
|
|
2327
|
+
exports.DropdownMenuSubContent = DropdownMenuSubContent;
|
|
2328
|
+
exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
|
|
2329
|
+
exports.DropdownMenuTrigger = DropdownMenuTrigger;
|
|
2330
|
+
exports.Input = Input;
|
|
2331
|
+
exports.Label = Label;
|
|
2332
|
+
exports.Popover = Popover;
|
|
2333
|
+
exports.PopoverAnchor = PopoverAnchor;
|
|
2334
|
+
exports.PopoverContent = PopoverContent;
|
|
2335
|
+
exports.PopoverTrigger = PopoverTrigger;
|
|
2336
|
+
exports.PortalProvider = PortalProvider;
|
|
2337
|
+
exports.Progress = Progress;
|
|
2338
|
+
exports.RadioGroup = RadioGroup;
|
|
2339
|
+
exports.RadioGroupItem = RadioGroupItem;
|
|
2340
|
+
exports.ResponsiveTable = ResponsiveTable;
|
|
2341
|
+
exports.Select = Select;
|
|
2342
|
+
exports.SelectContent = SelectContent;
|
|
2343
|
+
exports.SelectGroup = SelectGroup;
|
|
2344
|
+
exports.SelectItem = SelectItem;
|
|
2345
|
+
exports.SelectLabel = SelectLabel;
|
|
2346
|
+
exports.SelectScrollDownButton = SelectScrollDownButton;
|
|
2347
|
+
exports.SelectScrollUpButton = SelectScrollUpButton;
|
|
2348
|
+
exports.SelectSeparator = SelectSeparator;
|
|
2349
|
+
exports.SelectTrigger = SelectTrigger;
|
|
2350
|
+
exports.SelectValue = SelectValue;
|
|
2351
|
+
exports.Separator = Separator;
|
|
2352
|
+
exports.Sheet = Sheet;
|
|
2353
|
+
exports.SheetClose = SheetClose;
|
|
2354
|
+
exports.SheetContent = SheetContent;
|
|
2355
|
+
exports.SheetDescription = SheetDescription;
|
|
2356
|
+
exports.SheetFooter = SheetFooter;
|
|
2357
|
+
exports.SheetHeader = SheetHeader;
|
|
2358
|
+
exports.SheetOverlay = SheetOverlay;
|
|
2359
|
+
exports.SheetPortal = SheetPortal;
|
|
2360
|
+
exports.SheetTitle = SheetTitle;
|
|
2361
|
+
exports.SheetTrigger = SheetTrigger;
|
|
2362
|
+
exports.Skeleton = Skeleton;
|
|
2363
|
+
exports.Spinner = Spinner;
|
|
2364
|
+
exports.Switch = Switch;
|
|
2365
|
+
exports.Table = Table;
|
|
2366
|
+
exports.TableBody = TableBody;
|
|
2367
|
+
exports.TableCaption = TableCaption;
|
|
2368
|
+
exports.TableCell = TableCell;
|
|
2369
|
+
exports.TableEmpty = TableEmpty;
|
|
2370
|
+
exports.TableError = TableError;
|
|
2371
|
+
exports.TableFooter = TableFooter;
|
|
2372
|
+
exports.TableHead = TableHead;
|
|
2373
|
+
exports.TableHeader = TableHeader;
|
|
2374
|
+
exports.TableLoading = TableLoading;
|
|
2375
|
+
exports.TablePagination = TablePagination;
|
|
2376
|
+
exports.TableRow = TableRow;
|
|
2377
|
+
exports.TableSearch = TableSearch;
|
|
2378
|
+
exports.TableSkeleton = TableSkeleton;
|
|
2379
|
+
exports.Tabs = Tabs;
|
|
2380
|
+
exports.TabsContent = TabsContent;
|
|
2381
|
+
exports.TabsList = TabsList;
|
|
2382
|
+
exports.TabsTrigger = TabsTrigger;
|
|
2383
|
+
exports.Textarea = Textarea;
|
|
2384
|
+
exports.Toaster = Toaster;
|
|
2385
|
+
exports.Tooltip = Tooltip;
|
|
2386
|
+
exports.TooltipContent = TooltipContent;
|
|
2387
|
+
exports.TooltipProvider = TooltipProvider;
|
|
2388
|
+
exports.TooltipTrigger = TooltipTrigger;
|
|
2389
|
+
exports.alertVariants = alertVariants;
|
|
2390
|
+
exports.avatarVariants = avatarVariants;
|
|
2391
|
+
exports.badgeVariants = badgeVariants;
|
|
2392
|
+
exports.buttonVariants = buttonVariants;
|
|
2393
|
+
exports.cardVariants = cardVariants;
|
|
2394
|
+
exports.cn = cn;
|
|
2395
|
+
exports.dialogContentVariants = dialogContentVariants;
|
|
2396
|
+
exports.inputVariants = inputVariants;
|
|
2397
|
+
exports.progressVariants = progressVariants;
|
|
2398
|
+
exports.selectTriggerVariants = selectTriggerVariants;
|
|
2399
|
+
exports.sheetVariants = sheetVariants;
|
|
2400
|
+
exports.spinnerVariants = spinnerVariants;
|
|
2401
|
+
exports.uiPreset = tailwind_preset_default;
|
|
2402
|
+
exports.usePortalContainer = usePortalContainer;
|
|
2403
|
+
//# sourceMappingURL=index.cjs.map
|
|
2404
|
+
//# sourceMappingURL=index.cjs.map
|