@aircall/ds 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/globals.css +1 -1
- package/dist/index.d.ts +1536 -1192
- package/dist/index.js +1572 -658
- package/package.json +3 -1
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
1
3
|
import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
|
|
2
4
|
import { clsx } from "clsx";
|
|
3
5
|
import { extendTailwindMerge } from "tailwind-merge";
|
|
4
6
|
import { ArrowDownToLine, ArrowLeft, ArrowRight, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleAlert, CircleAlertIcon, CircleCheck, FLAGS, FlagUs, Info, Loader2Icon, MinusIcon, MoreHorizontalIcon, PanelLeftIcon, Search, Smile, TriangleAlertIcon, XIcon } from "@aircall/react-icons";
|
|
5
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import * as React$1 from "react";
|
|
7
|
-
import React, { createContext, useContext, useMemo } from "react";
|
|
8
8
|
import { Button as Button$1 } from "@base-ui/react/button";
|
|
9
9
|
import { cva } from "class-variance-authority";
|
|
10
10
|
import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
|
|
@@ -21,6 +21,9 @@ import { Combobox as Combobox$1 } from "@base-ui/react";
|
|
|
21
21
|
import { Command as Command$1 } from "cmdk";
|
|
22
22
|
import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
|
|
23
23
|
import { flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table";
|
|
24
|
+
import { checkboxesFeature, hotkeysCoreFeature, selectionFeature, syncDataLoaderFeature } from "@headless-tree/core";
|
|
25
|
+
import { useTree } from "@headless-tree/react";
|
|
26
|
+
import { useControllableState } from "@aircall/hooks";
|
|
24
27
|
import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer";
|
|
25
28
|
import { Radio } from "@base-ui/react/radio";
|
|
26
29
|
import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
|
|
@@ -34,7 +37,6 @@ import { Select as Select$1 } from "@base-ui/react/select";
|
|
|
34
37
|
import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
|
|
35
38
|
import { Slider as Slider$1 } from "@base-ui/react/slider";
|
|
36
39
|
import { Toaster as Toaster$1, toast } from "sonner";
|
|
37
|
-
import { useControllableState } from "@aircall/hooks";
|
|
38
40
|
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
39
41
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
40
42
|
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
@@ -103,24 +105,32 @@ function cn(...inputs) {
|
|
|
103
105
|
|
|
104
106
|
//#endregion
|
|
105
107
|
//#region src/components/accordion.tsx
|
|
106
|
-
|
|
108
|
+
const Accordion = React.forwardRef((componentProps, forwardRef) => {
|
|
109
|
+
const { className, ...props } = componentProps;
|
|
107
110
|
return /* @__PURE__ */ jsx(Accordion$1.Root, {
|
|
111
|
+
ref: forwardRef,
|
|
108
112
|
"data-slot": "accordion",
|
|
109
113
|
className: cn("flex w-full flex-col", className),
|
|
110
114
|
...props
|
|
111
115
|
});
|
|
112
|
-
}
|
|
113
|
-
|
|
116
|
+
});
|
|
117
|
+
Accordion.displayName = "Accordion";
|
|
118
|
+
const AccordionItem = React.forwardRef((componentProps, forwardRef) => {
|
|
119
|
+
const { className, ...props } = componentProps;
|
|
114
120
|
return /* @__PURE__ */ jsx(Accordion$1.Item, {
|
|
121
|
+
ref: forwardRef,
|
|
115
122
|
"data-slot": "accordion-item",
|
|
116
123
|
className: cn("not-last:border-b", className),
|
|
117
124
|
...props
|
|
118
125
|
});
|
|
119
|
-
}
|
|
120
|
-
|
|
126
|
+
});
|
|
127
|
+
AccordionItem.displayName = "AccordionItem";
|
|
128
|
+
const AccordionTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
129
|
+
const { className, children, ...props } = componentProps;
|
|
121
130
|
return /* @__PURE__ */ jsx(Accordion$1.Header, {
|
|
122
131
|
className: "flex",
|
|
123
132
|
children: /* @__PURE__ */ jsxs(Accordion$1.Trigger, {
|
|
133
|
+
ref: forwardRef,
|
|
124
134
|
"data-slot": "accordion-trigger",
|
|
125
135
|
className: cn("group/accordion-trigger relative flex flex-1 items-start justify-between rounded-md border border-transparent py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className),
|
|
126
136
|
...props,
|
|
@@ -137,9 +147,12 @@ function AccordionTrigger({ className, children, ...props }) {
|
|
|
137
147
|
]
|
|
138
148
|
})
|
|
139
149
|
});
|
|
140
|
-
}
|
|
141
|
-
|
|
150
|
+
});
|
|
151
|
+
AccordionTrigger.displayName = "AccordionTrigger";
|
|
152
|
+
const AccordionContent = React.forwardRef((componentProps, forwardRef) => {
|
|
153
|
+
const { className, children, ...props } = componentProps;
|
|
142
154
|
return /* @__PURE__ */ jsx(Accordion$1.Panel, {
|
|
155
|
+
ref: forwardRef,
|
|
143
156
|
"data-slot": "accordion-content",
|
|
144
157
|
className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
|
|
145
158
|
...props,
|
|
@@ -148,7 +161,8 @@ function AccordionContent({ className, children, ...props }) {
|
|
|
148
161
|
children
|
|
149
162
|
})
|
|
150
163
|
});
|
|
151
|
-
}
|
|
164
|
+
});
|
|
165
|
+
AccordionContent.displayName = "AccordionContent";
|
|
152
166
|
|
|
153
167
|
//#endregion
|
|
154
168
|
//#region src/components/button.tsx
|
|
@@ -178,7 +192,7 @@ const buttonVariants = cva("group/button inline-flex shrink-0 cursor-pointer ite
|
|
|
178
192
|
block: false
|
|
179
193
|
}
|
|
180
194
|
});
|
|
181
|
-
const Button = React
|
|
195
|
+
const Button = React.forwardRef((componentProps, forwardRef) => {
|
|
182
196
|
const { className, variant = "default", size = "default", block = false, ...props } = componentProps;
|
|
183
197
|
return /* @__PURE__ */ jsx(Button$1, {
|
|
184
198
|
ref: forwardRef,
|
|
@@ -206,20 +220,24 @@ const ActionBarHeight = 48;
|
|
|
206
220
|
* Explicit `count`/`onClear` props on `ActionBar` always take precedence, so the
|
|
207
221
|
* component still works standalone. Mirrors React Spectrum's `ActionBarContext`.
|
|
208
222
|
*/
|
|
209
|
-
const ActionBarContext = React
|
|
210
|
-
const ActionBarButton = React
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
223
|
+
const ActionBarContext = React.createContext(null);
|
|
224
|
+
const ActionBarButton = React.forwardRef((componentProps, forwardRef) => {
|
|
225
|
+
const { size = "default", ...props } = componentProps;
|
|
226
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
227
|
+
ref: forwardRef,
|
|
228
|
+
variant: "ghost",
|
|
229
|
+
size,
|
|
230
|
+
...props
|
|
231
|
+
});
|
|
232
|
+
});
|
|
216
233
|
ActionBarButton.displayName = "ActionBarButton";
|
|
217
|
-
const ActionBar = React
|
|
218
|
-
const
|
|
234
|
+
const ActionBar = React.forwardRef((componentProps, forwardRef) => {
|
|
235
|
+
const { className, count, onClear, children, label, clearLabel = "Clear selection", style, ...props } = componentProps;
|
|
236
|
+
const ctx = React.useContext(ActionBarContext);
|
|
219
237
|
const resolvedCount = count ?? ctx?.count ?? 0;
|
|
220
238
|
const resolvedOnClear = onClear ?? ctx?.onClear;
|
|
221
239
|
return /* @__PURE__ */ jsxs("div", {
|
|
222
|
-
ref,
|
|
240
|
+
ref: forwardRef,
|
|
223
241
|
role: "toolbar",
|
|
224
242
|
"aria-label": "Selection actions",
|
|
225
243
|
"data-slot": "action-bar",
|
|
@@ -251,83 +269,112 @@ ActionBar.displayName = "ActionBar";
|
|
|
251
269
|
|
|
252
270
|
//#endregion
|
|
253
271
|
//#region src/components/alert-dialog.tsx
|
|
254
|
-
function AlertDialog(
|
|
272
|
+
function AlertDialog(componentProps) {
|
|
255
273
|
return /* @__PURE__ */ jsx(AlertDialog$1.Root, {
|
|
256
274
|
"data-slot": "alert-dialog",
|
|
257
|
-
...
|
|
275
|
+
...componentProps
|
|
258
276
|
});
|
|
259
277
|
}
|
|
260
|
-
|
|
278
|
+
const AlertDialogTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
279
|
+
const { ...props } = componentProps;
|
|
261
280
|
return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, {
|
|
281
|
+
ref: forwardRef,
|
|
262
282
|
"data-slot": "alert-dialog-trigger",
|
|
263
283
|
...props
|
|
264
284
|
});
|
|
265
|
-
}
|
|
266
|
-
|
|
285
|
+
});
|
|
286
|
+
AlertDialogTrigger.displayName = "AlertDialogTrigger";
|
|
287
|
+
function AlertDialogPortal(componentProps) {
|
|
267
288
|
return /* @__PURE__ */ jsx(AlertDialog$1.Portal, {
|
|
268
289
|
"data-slot": "alert-dialog-portal",
|
|
269
|
-
...
|
|
290
|
+
...componentProps
|
|
270
291
|
});
|
|
271
292
|
}
|
|
272
|
-
|
|
293
|
+
const AlertDialogOverlay = React.forwardRef((componentProps, forwardRef) => {
|
|
294
|
+
const { className, ...props } = componentProps;
|
|
273
295
|
return /* @__PURE__ */ jsx(AlertDialog$1.Backdrop, {
|
|
296
|
+
ref: forwardRef,
|
|
274
297
|
"data-slot": "alert-dialog-overlay",
|
|
275
298
|
className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
|
|
276
299
|
...props
|
|
277
300
|
});
|
|
278
|
-
}
|
|
279
|
-
|
|
301
|
+
});
|
|
302
|
+
AlertDialogOverlay.displayName = "AlertDialogOverlay";
|
|
303
|
+
const AlertDialogContent = React.forwardRef((componentProps, forwardRef) => {
|
|
304
|
+
const { className, size = "default", ...props } = componentProps;
|
|
280
305
|
return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog$1.Popup, {
|
|
306
|
+
ref: forwardRef,
|
|
281
307
|
"data-slot": "alert-dialog-content",
|
|
282
308
|
"data-size": size,
|
|
283
309
|
className: cn("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
284
310
|
...props
|
|
285
311
|
})] });
|
|
286
|
-
}
|
|
287
|
-
|
|
312
|
+
});
|
|
313
|
+
AlertDialogContent.displayName = "AlertDialogContent";
|
|
314
|
+
const AlertDialogHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
315
|
+
const { className, ...props } = componentProps;
|
|
288
316
|
return /* @__PURE__ */ jsx("div", {
|
|
317
|
+
ref: forwardRef,
|
|
289
318
|
"data-slot": "alert-dialog-header",
|
|
290
319
|
className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className),
|
|
291
320
|
...props
|
|
292
321
|
});
|
|
293
|
-
}
|
|
294
|
-
|
|
322
|
+
});
|
|
323
|
+
AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
324
|
+
const AlertDialogFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
325
|
+
const { className, ...props } = componentProps;
|
|
295
326
|
return /* @__PURE__ */ jsx("div", {
|
|
327
|
+
ref: forwardRef,
|
|
296
328
|
"data-slot": "alert-dialog-footer",
|
|
297
329
|
className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", className),
|
|
298
330
|
...props
|
|
299
331
|
});
|
|
300
|
-
}
|
|
301
|
-
|
|
332
|
+
});
|
|
333
|
+
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
334
|
+
const AlertDialogMedia = React.forwardRef((componentProps, forwardRef) => {
|
|
335
|
+
const { className, ...props } = componentProps;
|
|
302
336
|
return /* @__PURE__ */ jsx("div", {
|
|
337
|
+
ref: forwardRef,
|
|
303
338
|
"data-slot": "alert-dialog-media",
|
|
304
339
|
className: cn("mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6", className),
|
|
305
340
|
...props
|
|
306
341
|
});
|
|
307
|
-
}
|
|
308
|
-
|
|
342
|
+
});
|
|
343
|
+
AlertDialogMedia.displayName = "AlertDialogMedia";
|
|
344
|
+
const AlertDialogTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
345
|
+
const { className, ...props } = componentProps;
|
|
309
346
|
return /* @__PURE__ */ jsx(AlertDialog$1.Title, {
|
|
347
|
+
ref: forwardRef,
|
|
310
348
|
"data-slot": "alert-dialog-title",
|
|
311
349
|
className: cn("text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
|
|
312
350
|
...props
|
|
313
351
|
});
|
|
314
|
-
}
|
|
315
|
-
|
|
352
|
+
});
|
|
353
|
+
AlertDialogTitle.displayName = "AlertDialogTitle";
|
|
354
|
+
const AlertDialogDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
355
|
+
const { className, ...props } = componentProps;
|
|
316
356
|
return /* @__PURE__ */ jsx(AlertDialog$1.Description, {
|
|
357
|
+
ref: forwardRef,
|
|
317
358
|
"data-slot": "alert-dialog-description",
|
|
318
359
|
className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
319
360
|
...props
|
|
320
361
|
});
|
|
321
|
-
}
|
|
322
|
-
|
|
362
|
+
});
|
|
363
|
+
AlertDialogDescription.displayName = "AlertDialogDescription";
|
|
364
|
+
const AlertDialogAction = React.forwardRef((componentProps, forwardRef) => {
|
|
365
|
+
const { className, ...props } = componentProps;
|
|
323
366
|
return /* @__PURE__ */ jsx(Button, {
|
|
367
|
+
ref: forwardRef,
|
|
324
368
|
"data-slot": "alert-dialog-action",
|
|
325
369
|
className: cn(className),
|
|
326
370
|
...props
|
|
327
371
|
});
|
|
328
|
-
}
|
|
329
|
-
|
|
372
|
+
});
|
|
373
|
+
AlertDialogAction.displayName = "AlertDialogAction";
|
|
374
|
+
const AlertDialogCancel = React.forwardRef((componentProps, forwardRef) => {
|
|
375
|
+
const { className, variant = "outline", size = "default", ...props } = componentProps;
|
|
330
376
|
return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
|
|
377
|
+
ref: forwardRef,
|
|
331
378
|
"data-slot": "alert-dialog-cancel",
|
|
332
379
|
className: cn(className),
|
|
333
380
|
render: /* @__PURE__ */ jsx(Button, {
|
|
@@ -336,7 +383,8 @@ function AlertDialogCancel({ className, variant = "outline", size = "default", .
|
|
|
336
383
|
}),
|
|
337
384
|
...props
|
|
338
385
|
});
|
|
339
|
-
}
|
|
386
|
+
});
|
|
387
|
+
AlertDialogCancel.displayName = "AlertDialogCancel";
|
|
340
388
|
|
|
341
389
|
//#endregion
|
|
342
390
|
//#region src/components/alert.tsx
|
|
@@ -350,41 +398,54 @@ const alertVariants = cva("relative grid w-full items-start gap-x-2 gap-y-0.5 ro
|
|
|
350
398
|
warning: "bg-warning-background border-warning/35 [&>svg]:text-warning"
|
|
351
399
|
} }
|
|
352
400
|
});
|
|
353
|
-
|
|
401
|
+
const Alert = React.forwardRef((componentProps, forwardRef) => {
|
|
402
|
+
const { className, variant, ...props } = componentProps;
|
|
354
403
|
return /* @__PURE__ */ jsx("div", {
|
|
404
|
+
ref: forwardRef,
|
|
355
405
|
className: cn(alertVariants({ variant }), className),
|
|
356
406
|
"data-slot": "alert",
|
|
357
407
|
role: "alert",
|
|
358
408
|
...props
|
|
359
409
|
});
|
|
360
|
-
}
|
|
361
|
-
|
|
410
|
+
});
|
|
411
|
+
Alert.displayName = "Alert";
|
|
412
|
+
const AlertTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
413
|
+
const { className, ...props } = componentProps;
|
|
362
414
|
return /* @__PURE__ */ jsx("div", {
|
|
415
|
+
ref: forwardRef,
|
|
363
416
|
className: cn("font-medium leading-6 [svg~&]:col-start-2", className),
|
|
364
417
|
"data-slot": "alert-title",
|
|
365
418
|
...props
|
|
366
419
|
});
|
|
367
|
-
}
|
|
368
|
-
|
|
420
|
+
});
|
|
421
|
+
AlertTitle.displayName = "AlertTitle";
|
|
422
|
+
const AlertDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
423
|
+
const { className, ...props } = componentProps;
|
|
369
424
|
return /* @__PURE__ */ jsx("div", {
|
|
425
|
+
ref: forwardRef,
|
|
370
426
|
className: cn("flex flex-col gap-2.5 text-muted-foreground [svg~&]:col-start-2", className),
|
|
371
427
|
"data-slot": "alert-description",
|
|
372
428
|
...props
|
|
373
429
|
});
|
|
374
|
-
}
|
|
375
|
-
|
|
430
|
+
});
|
|
431
|
+
AlertDescription.displayName = "AlertDescription";
|
|
432
|
+
const AlertAction = React.forwardRef((componentProps, forwardRef) => {
|
|
433
|
+
const { className, ...props } = componentProps;
|
|
376
434
|
return /* @__PURE__ */ jsx("div", {
|
|
435
|
+
ref: forwardRef,
|
|
377
436
|
className: cn("flex gap-1 max-sm:col-start-2 max-sm:mt-2 sm:row-start-1 sm:row-end-3 sm:self-center sm:[[data-slot=alert-description]~&]:col-start-2 sm:[[data-slot=alert-title]~&]:col-start-2 sm:[svg~&]:col-start-2 sm:[svg~[data-slot=alert-description]~&]:col-start-3 sm:[svg~[data-slot=alert-title]~&]:col-start-3", className),
|
|
378
437
|
"data-slot": "alert-action",
|
|
379
438
|
...props
|
|
380
439
|
});
|
|
381
|
-
}
|
|
440
|
+
});
|
|
441
|
+
AlertAction.displayName = "AlertAction";
|
|
382
442
|
|
|
383
443
|
//#endregion
|
|
384
444
|
//#region src/components/avatar.tsx
|
|
385
|
-
const Avatar = React
|
|
445
|
+
const Avatar = React.forwardRef((componentProps, forwardRef) => {
|
|
446
|
+
const { className, size = "default", ...props } = componentProps;
|
|
386
447
|
return /* @__PURE__ */ jsx(Avatar$1.Root, {
|
|
387
|
-
ref,
|
|
448
|
+
ref: forwardRef,
|
|
388
449
|
"data-slot": "avatar",
|
|
389
450
|
"data-size": size,
|
|
390
451
|
className: cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=xs]:size-5 data-[size=sm]:size-6 data-[size=lg]:size-10 data-[size=xl]:size-12 dark:after:mix-blend-lighten", className),
|
|
@@ -392,41 +453,56 @@ const Avatar = React$1.forwardRef(({ className, size = "default", ...props }, re
|
|
|
392
453
|
});
|
|
393
454
|
});
|
|
394
455
|
Avatar.displayName = "Avatar";
|
|
395
|
-
|
|
456
|
+
const AvatarImage = React.forwardRef((componentProps, forwardRef) => {
|
|
457
|
+
const { className, ...props } = componentProps;
|
|
396
458
|
return /* @__PURE__ */ jsx(Avatar$1.Image, {
|
|
459
|
+
ref: forwardRef,
|
|
397
460
|
"data-slot": "avatar-image",
|
|
398
461
|
className: cn("aspect-square size-full rounded-full object-cover", className),
|
|
399
462
|
...props
|
|
400
463
|
});
|
|
401
|
-
}
|
|
402
|
-
|
|
464
|
+
});
|
|
465
|
+
AvatarImage.displayName = "AvatarImage";
|
|
466
|
+
const AvatarFallback = React.forwardRef((componentProps, forwardRef) => {
|
|
467
|
+
const { className, ...props } = componentProps;
|
|
403
468
|
return /* @__PURE__ */ jsx(Avatar$1.Fallback, {
|
|
469
|
+
ref: forwardRef,
|
|
404
470
|
"data-slot": "avatar-fallback",
|
|
405
471
|
className: cn("flex size-full items-center justify-center rounded-full bg-background text-sm text-foreground group-data-[size=xs]/avatar:text-xs group-data-[size=sm]/avatar:text-xs group-data-[size=xl]/avatar:text-base", className),
|
|
406
472
|
...props
|
|
407
473
|
});
|
|
408
|
-
}
|
|
409
|
-
|
|
474
|
+
});
|
|
475
|
+
AvatarFallback.displayName = "AvatarFallback";
|
|
476
|
+
const AvatarBadge = React.forwardRef((componentProps, forwardRef) => {
|
|
477
|
+
const { className, ...props } = componentProps;
|
|
410
478
|
return /* @__PURE__ */ jsx("span", {
|
|
479
|
+
ref: forwardRef,
|
|
411
480
|
"data-slot": "avatar-badge",
|
|
412
481
|
className: cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-blend-color ring-2 ring-background select-none", "group-data-[size=xs]/avatar:size-2 group-data-[size=xs]/avatar:[&>svg]:hidden", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", "group-data-[size=xl]/avatar:size-3 group-data-[size=xl]/avatar:[&>svg]:size-2", className),
|
|
413
482
|
...props
|
|
414
483
|
});
|
|
415
|
-
}
|
|
416
|
-
|
|
484
|
+
});
|
|
485
|
+
AvatarBadge.displayName = "AvatarBadge";
|
|
486
|
+
const AvatarGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
487
|
+
const { className, ...props } = componentProps;
|
|
417
488
|
return /* @__PURE__ */ jsx("div", {
|
|
489
|
+
ref: forwardRef,
|
|
418
490
|
"data-slot": "avatar-group",
|
|
419
491
|
className: cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className),
|
|
420
492
|
...props
|
|
421
493
|
});
|
|
422
|
-
}
|
|
423
|
-
|
|
494
|
+
});
|
|
495
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
496
|
+
const AvatarGroupCount = React.forwardRef((componentProps, forwardRef) => {
|
|
497
|
+
const { className, ...props } = componentProps;
|
|
424
498
|
return /* @__PURE__ */ jsx("div", {
|
|
499
|
+
ref: forwardRef,
|
|
425
500
|
"data-slot": "avatar-group-count",
|
|
426
501
|
className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=xs]/avatar-group:size-5 group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=xl]/avatar-group:size-12 [&>svg]:size-4 group-has-data-[size=xs]/avatar-group:[&>svg]:size-3 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=xl]/avatar-group:[&>svg]:size-6", className),
|
|
427
502
|
...props
|
|
428
503
|
});
|
|
429
|
-
}
|
|
504
|
+
});
|
|
505
|
+
AvatarGroupCount.displayName = "AvatarGroupCount";
|
|
430
506
|
|
|
431
507
|
//#endregion
|
|
432
508
|
//#region src/components/counter-badge.tsx
|
|
@@ -438,12 +514,13 @@ const counterBadgeVariants = cva("group/counter-badge inline-flex h-5 min-w-5 sh
|
|
|
438
514
|
} },
|
|
439
515
|
defaultVariants: { variant: "default" }
|
|
440
516
|
});
|
|
441
|
-
const CounterBadge = React
|
|
517
|
+
const CounterBadge = React.forwardRef((componentProps, forwardRef) => {
|
|
518
|
+
const { className, variant = "default", render, ...props } = componentProps;
|
|
442
519
|
return useRender({
|
|
443
520
|
defaultTagName: "span",
|
|
444
521
|
props: mergeProps({
|
|
445
522
|
className: cn(counterBadgeVariants({ variant }), className),
|
|
446
|
-
ref
|
|
523
|
+
ref: forwardRef
|
|
447
524
|
}, props),
|
|
448
525
|
render,
|
|
449
526
|
state: {
|
|
@@ -636,13 +713,13 @@ const badgeVariants = cva("group/badge inline-flex w-fit max-w-36 shrink-0 items
|
|
|
636
713
|
* `charcoal` / `light` — or pass a stored hex via `legacyColor`. Icons are
|
|
637
714
|
* composed as children (auto-sized per `size`).
|
|
638
715
|
*/
|
|
639
|
-
const Badge = React
|
|
716
|
+
const Badge = React.forwardRef((componentProps, forwardRef) => {
|
|
640
717
|
const { className, size = "default", color, tone, legacyColor, render, children, ...props } = componentProps;
|
|
641
718
|
const resolved = legacyColor ? resolveTagColor(legacyColor) : {
|
|
642
719
|
color,
|
|
643
720
|
tone
|
|
644
721
|
};
|
|
645
|
-
const content = React
|
|
722
|
+
const content = React.Children.map(children, (child) => typeof child === "string" || typeof child === "number" ? /* @__PURE__ */ jsx("span", {
|
|
646
723
|
className: "min-w-0 truncate",
|
|
647
724
|
children: child
|
|
648
725
|
}) : child);
|
|
@@ -665,7 +742,7 @@ const Badge = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
665
742
|
});
|
|
666
743
|
});
|
|
667
744
|
Badge.displayName = "Badge";
|
|
668
|
-
const BadgeGroup = React
|
|
745
|
+
const BadgeGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
669
746
|
const { className, ...props } = componentProps;
|
|
670
747
|
return /* @__PURE__ */ jsx("div", {
|
|
671
748
|
ref: forwardRef,
|
|
@@ -682,7 +759,7 @@ const badgeGroupCountVariants = cva("rounded-md", {
|
|
|
682
759
|
} },
|
|
683
760
|
defaultVariants: { size: "default" }
|
|
684
761
|
});
|
|
685
|
-
const BadgeGroupCount = React
|
|
762
|
+
const BadgeGroupCount = React.forwardRef((componentProps, forwardRef) => {
|
|
686
763
|
const { className, size = "default", ...props } = componentProps;
|
|
687
764
|
return /* @__PURE__ */ jsx(CounterBadge, {
|
|
688
765
|
ref: forwardRef,
|
|
@@ -775,8 +852,10 @@ const bannerVariants = cva("relative grid w-full items-start gap-x-2 gap-y-0.5 p
|
|
|
775
852
|
}
|
|
776
853
|
}
|
|
777
854
|
});
|
|
778
|
-
|
|
855
|
+
const Banner = React.forwardRef((componentProps, forwardRef) => {
|
|
856
|
+
const { className, variant, borderDirection, ...props } = componentProps;
|
|
779
857
|
return /* @__PURE__ */ jsx("div", {
|
|
858
|
+
ref: forwardRef,
|
|
780
859
|
className: cn(bannerVariants({
|
|
781
860
|
variant,
|
|
782
861
|
borderDirection
|
|
@@ -785,7 +864,8 @@ function Banner({ className, variant, borderDirection, ...props }) {
|
|
|
785
864
|
role: "alert",
|
|
786
865
|
...props
|
|
787
866
|
});
|
|
788
|
-
}
|
|
867
|
+
});
|
|
868
|
+
Banner.displayName = "Banner";
|
|
789
869
|
|
|
790
870
|
//#endregion
|
|
791
871
|
//#region src/components/notification-queue.tsx
|
|
@@ -796,9 +876,9 @@ const PRIORITY_WEIGHT = {
|
|
|
796
876
|
info: 10,
|
|
797
877
|
promotional: 1
|
|
798
878
|
};
|
|
799
|
-
const NotificationQueueContext = React
|
|
879
|
+
const NotificationQueueContext = React.createContext(null);
|
|
800
880
|
function useNotificationQueueContext() {
|
|
801
|
-
const ctx = React
|
|
881
|
+
const ctx = React.useContext(NotificationQueueContext);
|
|
802
882
|
if (!ctx) throw new Error("useNotification* hooks must be used inside <NotificationQueueProvider>");
|
|
803
883
|
return ctx;
|
|
804
884
|
}
|
|
@@ -851,12 +931,13 @@ function getSlotQueue(state, slot) {
|
|
|
851
931
|
return diff !== 0 ? diff : b.registeredAt - a.registeredAt;
|
|
852
932
|
});
|
|
853
933
|
}
|
|
854
|
-
function NotificationQueueProvider(
|
|
855
|
-
const
|
|
934
|
+
function NotificationQueueProvider(componentProps) {
|
|
935
|
+
const { children } = componentProps;
|
|
936
|
+
const [state, dispatch] = React.useReducer(reducer, {
|
|
856
937
|
entries: [],
|
|
857
938
|
dismissed: /* @__PURE__ */ new Set()
|
|
858
939
|
});
|
|
859
|
-
const value = React
|
|
940
|
+
const value = React.useMemo(() => ({
|
|
860
941
|
state,
|
|
861
942
|
dispatch
|
|
862
943
|
}), [state]);
|
|
@@ -868,7 +949,7 @@ function NotificationQueueProvider({ children }) {
|
|
|
868
949
|
function useNotificationQueue() {
|
|
869
950
|
const { dispatch } = useNotificationQueueContext();
|
|
870
951
|
return {
|
|
871
|
-
push: React
|
|
952
|
+
push: React.useCallback(({ id, slot, priority, render }) => {
|
|
872
953
|
const dismiss = () => dispatch({
|
|
873
954
|
type: "DISMISS",
|
|
874
955
|
id,
|
|
@@ -886,7 +967,7 @@ function useNotificationQueue() {
|
|
|
886
967
|
});
|
|
887
968
|
return { dismiss };
|
|
888
969
|
}, [dispatch]),
|
|
889
|
-
dismiss: React
|
|
970
|
+
dismiss: React.useCallback((id, slot) => dispatch({
|
|
890
971
|
type: "DISMISS",
|
|
891
972
|
id,
|
|
892
973
|
slot
|
|
@@ -895,7 +976,7 @@ function useNotificationQueue() {
|
|
|
895
976
|
}
|
|
896
977
|
function useNotification({ id, slot, priority, render }) {
|
|
897
978
|
const { dispatch } = useNotificationQueueContext();
|
|
898
|
-
const dismiss = React
|
|
979
|
+
const dismiss = React.useCallback(() => dispatch({
|
|
899
980
|
type: "DISMISS",
|
|
900
981
|
id,
|
|
901
982
|
slot
|
|
@@ -904,11 +985,11 @@ function useNotification({ id, slot, priority, render }) {
|
|
|
904
985
|
slot,
|
|
905
986
|
dispatch
|
|
906
987
|
]);
|
|
907
|
-
const renderRef = React
|
|
988
|
+
const renderRef = React.useRef(render);
|
|
908
989
|
renderRef.current = render;
|
|
909
|
-
const contentRef = React
|
|
990
|
+
const contentRef = React.useRef(null);
|
|
910
991
|
contentRef.current = renderRef.current({ dismiss });
|
|
911
|
-
React
|
|
992
|
+
React.useEffect(() => {
|
|
912
993
|
dispatch({
|
|
913
994
|
type: "REGISTER",
|
|
914
995
|
entry: {
|
|
@@ -932,28 +1013,34 @@ function useNotification({ id, slot, priority, render }) {
|
|
|
932
1013
|
]);
|
|
933
1014
|
return { dismiss };
|
|
934
1015
|
}
|
|
935
|
-
|
|
1016
|
+
const NotificationSlot = React.forwardRef((componentProps, forwardRef) => {
|
|
1017
|
+
const { slot, className } = componentProps;
|
|
936
1018
|
const { state } = useNotificationQueueContext();
|
|
937
1019
|
const active = getSlotQueue(state, slot)[0];
|
|
938
1020
|
if (!active) return null;
|
|
939
1021
|
return /* @__PURE__ */ jsx("div", {
|
|
1022
|
+
ref: forwardRef,
|
|
940
1023
|
"data-slot": "notification-slot",
|
|
941
1024
|
className: cn(className),
|
|
942
1025
|
children: active.contentRef.current
|
|
943
1026
|
});
|
|
944
|
-
}
|
|
1027
|
+
});
|
|
1028
|
+
NotificationSlot.displayName = "NotificationSlot";
|
|
945
1029
|
|
|
946
1030
|
//#endregion
|
|
947
1031
|
//#region src/components/separator.tsx
|
|
948
|
-
|
|
1032
|
+
const Separator = React.forwardRef((componentProps, forwardRef) => {
|
|
1033
|
+
const { className, orientation = "horizontal", ...props } = componentProps;
|
|
949
1034
|
return /* @__PURE__ */ jsx(Separator$1, {
|
|
1035
|
+
ref: forwardRef,
|
|
950
1036
|
"data-slot": "separator",
|
|
951
1037
|
"data-orientation": orientation,
|
|
952
1038
|
orientation,
|
|
953
1039
|
className: cn("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch", className),
|
|
954
1040
|
...props
|
|
955
1041
|
});
|
|
956
|
-
}
|
|
1042
|
+
});
|
|
1043
|
+
Separator.displayName = "Separator";
|
|
957
1044
|
|
|
958
1045
|
//#endregion
|
|
959
1046
|
//#region src/components/button-group.tsx
|
|
@@ -964,31 +1051,42 @@ const buttonGroupVariants = cva("flex w-fit items-stretch *:focus-visible:relati
|
|
|
964
1051
|
} },
|
|
965
1052
|
defaultVariants: { orientation: "horizontal" }
|
|
966
1053
|
});
|
|
967
|
-
|
|
1054
|
+
const ButtonGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
1055
|
+
const { className, orientation, ...props } = componentProps;
|
|
968
1056
|
return /* @__PURE__ */ jsx("div", {
|
|
1057
|
+
ref: forwardRef,
|
|
969
1058
|
role: "group",
|
|
970
1059
|
"data-slot": "button-group",
|
|
971
1060
|
"data-orientation": orientation,
|
|
972
1061
|
className: cn(buttonGroupVariants({ orientation }), className),
|
|
973
1062
|
...props
|
|
974
1063
|
});
|
|
975
|
-
}
|
|
976
|
-
|
|
1064
|
+
});
|
|
1065
|
+
ButtonGroup.displayName = "ButtonGroup";
|
|
1066
|
+
const ButtonGroupText = React.forwardRef((componentProps, forwardRef) => {
|
|
1067
|
+
const { className, render, ...props } = componentProps;
|
|
977
1068
|
return useRender({
|
|
978
1069
|
defaultTagName: "div",
|
|
979
|
-
props: mergeProps({
|
|
1070
|
+
props: mergeProps({
|
|
1071
|
+
className: cn("flex items-center gap-2 rounded-md border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
|
|
1072
|
+
ref: forwardRef
|
|
1073
|
+
}, props),
|
|
980
1074
|
render,
|
|
981
1075
|
state: { slot: "button-group-text" }
|
|
982
1076
|
});
|
|
983
|
-
}
|
|
984
|
-
|
|
1077
|
+
});
|
|
1078
|
+
ButtonGroupText.displayName = "ButtonGroupText";
|
|
1079
|
+
const ButtonGroupSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
1080
|
+
const { className, orientation = "vertical", ...props } = componentProps;
|
|
985
1081
|
return /* @__PURE__ */ jsx(Separator, {
|
|
1082
|
+
ref: forwardRef,
|
|
986
1083
|
"data-slot": "button-group-separator",
|
|
987
1084
|
orientation,
|
|
988
1085
|
className: cn("relative self-stretch bg-input data-[orientation=horizontal]:mx-px data-[orientation=horizontal]:w-auto data-[orientation=vertical]:my-px data-[orientation=vertical]:h-auto", className),
|
|
989
1086
|
...props
|
|
990
1087
|
});
|
|
991
|
-
}
|
|
1088
|
+
});
|
|
1089
|
+
ButtonGroupSeparator.displayName = "ButtonGroupSeparator";
|
|
992
1090
|
|
|
993
1091
|
//#endregion
|
|
994
1092
|
//#region src/components/calendar.tsx
|
|
@@ -1074,8 +1172,8 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
|
|
|
1074
1172
|
}
|
|
1075
1173
|
function CalendarDayButton({ className: dayClassName, day, modifiers, locale, ...props }) {
|
|
1076
1174
|
const defaultClassNames = getDefaultClassNames();
|
|
1077
|
-
const ref = React
|
|
1078
|
-
React
|
|
1175
|
+
const ref = React.useRef(null);
|
|
1176
|
+
React.useEffect(() => {
|
|
1079
1177
|
if (modifiers.focused) ref.current?.focus();
|
|
1080
1178
|
}, [modifiers.focused]);
|
|
1081
1179
|
return /* @__PURE__ */ jsx(Button, {
|
|
@@ -1094,84 +1192,106 @@ function CalendarDayButton({ className: dayClassName, day, modifiers, locale, ..
|
|
|
1094
1192
|
|
|
1095
1193
|
//#endregion
|
|
1096
1194
|
//#region src/components/card.tsx
|
|
1097
|
-
|
|
1195
|
+
const Card = React.forwardRef((componentProps, forwardRef) => {
|
|
1196
|
+
const { className, size = "default", ...props } = componentProps;
|
|
1098
1197
|
return /* @__PURE__ */ jsx("div", {
|
|
1198
|
+
ref: forwardRef,
|
|
1099
1199
|
"data-slot": "card",
|
|
1100
1200
|
"data-size": size,
|
|
1101
1201
|
className: cn("group/card flex flex-col gap-4 overflow-hidden rounded-xl border bg-card py-4 text-sm text-card-foreground has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", className),
|
|
1102
1202
|
...props
|
|
1103
1203
|
});
|
|
1104
|
-
}
|
|
1105
|
-
|
|
1204
|
+
});
|
|
1205
|
+
Card.displayName = "Card";
|
|
1206
|
+
const CardHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
1207
|
+
const { className, ...props } = componentProps;
|
|
1106
1208
|
return /* @__PURE__ */ jsx("div", {
|
|
1209
|
+
ref: forwardRef,
|
|
1107
1210
|
"data-slot": "card-header",
|
|
1108
1211
|
className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3", className),
|
|
1109
1212
|
...props
|
|
1110
1213
|
});
|
|
1111
|
-
}
|
|
1112
|
-
|
|
1214
|
+
});
|
|
1215
|
+
CardHeader.displayName = "CardHeader";
|
|
1216
|
+
const CardTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
1217
|
+
const { className, ...props } = componentProps;
|
|
1113
1218
|
return /* @__PURE__ */ jsx("div", {
|
|
1219
|
+
ref: forwardRef,
|
|
1114
1220
|
"data-slot": "card-title",
|
|
1115
1221
|
className: cn("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", className),
|
|
1116
1222
|
...props
|
|
1117
1223
|
});
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1224
|
+
});
|
|
1225
|
+
CardTitle.displayName = "CardTitle";
|
|
1226
|
+
const CardDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
1227
|
+
const { className, ...props } = componentProps;
|
|
1120
1228
|
return /* @__PURE__ */ jsx("div", {
|
|
1229
|
+
ref: forwardRef,
|
|
1121
1230
|
"data-slot": "card-description",
|
|
1122
1231
|
className: cn("text-sm text-muted-foreground", className),
|
|
1123
1232
|
...props
|
|
1124
1233
|
});
|
|
1125
|
-
}
|
|
1126
|
-
|
|
1234
|
+
});
|
|
1235
|
+
CardDescription.displayName = "CardDescription";
|
|
1236
|
+
const CardAction = React.forwardRef((componentProps, forwardRef) => {
|
|
1237
|
+
const { className, ...props } = componentProps;
|
|
1127
1238
|
return /* @__PURE__ */ jsx("div", {
|
|
1239
|
+
ref: forwardRef,
|
|
1128
1240
|
"data-slot": "card-action",
|
|
1129
1241
|
className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
|
|
1130
1242
|
...props
|
|
1131
1243
|
});
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1244
|
+
});
|
|
1245
|
+
CardAction.displayName = "CardAction";
|
|
1246
|
+
const CardContent = React.forwardRef((componentProps, forwardRef) => {
|
|
1247
|
+
const { className, ...props } = componentProps;
|
|
1134
1248
|
return /* @__PURE__ */ jsx("div", {
|
|
1249
|
+
ref: forwardRef,
|
|
1135
1250
|
"data-slot": "card-content",
|
|
1136
1251
|
className: cn("px-4 group-data-[size=sm]/card:px-3", className),
|
|
1137
1252
|
...props
|
|
1138
1253
|
});
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1254
|
+
});
|
|
1255
|
+
CardContent.displayName = "CardContent";
|
|
1256
|
+
const CardFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
1257
|
+
const { className, ...props } = componentProps;
|
|
1141
1258
|
return /* @__PURE__ */ jsx("div", {
|
|
1259
|
+
ref: forwardRef,
|
|
1142
1260
|
"data-slot": "card-footer",
|
|
1143
1261
|
className: cn("flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3", className),
|
|
1144
1262
|
...props
|
|
1145
1263
|
});
|
|
1146
|
-
}
|
|
1264
|
+
});
|
|
1265
|
+
CardFooter.displayName = "CardFooter";
|
|
1147
1266
|
|
|
1148
1267
|
//#endregion
|
|
1149
1268
|
//#region src/components/carousel.tsx
|
|
1150
|
-
const CarouselContext = React
|
|
1269
|
+
const CarouselContext = React.createContext(null);
|
|
1151
1270
|
function useCarousel() {
|
|
1152
|
-
const context = React
|
|
1271
|
+
const context = React.useContext(CarouselContext);
|
|
1153
1272
|
if (!context) throw new Error("useCarousel must be used within a <Carousel />");
|
|
1154
1273
|
return context;
|
|
1155
1274
|
}
|
|
1156
|
-
|
|
1275
|
+
const Carousel = React.forwardRef((componentProps, forwardRef) => {
|
|
1276
|
+
const { orientation = "horizontal", opts, setApi, plugins, className, children, ...props } = componentProps;
|
|
1157
1277
|
const [carouselRef, api] = useEmblaCarousel({
|
|
1158
1278
|
...opts,
|
|
1159
1279
|
axis: orientation === "horizontal" ? "x" : "y"
|
|
1160
1280
|
}, plugins);
|
|
1161
|
-
const [canScrollPrev, setCanScrollPrev] = React
|
|
1162
|
-
const [canScrollNext, setCanScrollNext] = React
|
|
1163
|
-
const onSelect = React
|
|
1281
|
+
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
1282
|
+
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
1283
|
+
const onSelect = React.useCallback((api$1) => {
|
|
1164
1284
|
if (!api$1) return;
|
|
1165
1285
|
setCanScrollPrev(api$1.canScrollPrev());
|
|
1166
1286
|
setCanScrollNext(api$1.canScrollNext());
|
|
1167
1287
|
}, []);
|
|
1168
|
-
const scrollPrev = React
|
|
1288
|
+
const scrollPrev = React.useCallback(() => {
|
|
1169
1289
|
api?.scrollPrev();
|
|
1170
1290
|
}, [api]);
|
|
1171
|
-
const scrollNext = React
|
|
1291
|
+
const scrollNext = React.useCallback(() => {
|
|
1172
1292
|
api?.scrollNext();
|
|
1173
1293
|
}, [api]);
|
|
1174
|
-
const handleKeyDown = React
|
|
1294
|
+
const handleKeyDown = React.useCallback((event) => {
|
|
1175
1295
|
if (event.key === "ArrowLeft") {
|
|
1176
1296
|
event.preventDefault();
|
|
1177
1297
|
scrollPrev();
|
|
@@ -1180,11 +1300,11 @@ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className
|
|
|
1180
1300
|
scrollNext();
|
|
1181
1301
|
}
|
|
1182
1302
|
}, [scrollPrev, scrollNext]);
|
|
1183
|
-
React
|
|
1303
|
+
React.useEffect(() => {
|
|
1184
1304
|
if (!api || !setApi) return;
|
|
1185
1305
|
setApi(api);
|
|
1186
1306
|
}, [api, setApi]);
|
|
1187
|
-
React
|
|
1307
|
+
React.useEffect(() => {
|
|
1188
1308
|
if (!api) return;
|
|
1189
1309
|
onSelect(api);
|
|
1190
1310
|
api.on("reInit", onSelect);
|
|
@@ -1205,6 +1325,7 @@ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className
|
|
|
1205
1325
|
canScrollNext
|
|
1206
1326
|
},
|
|
1207
1327
|
children: /* @__PURE__ */ jsx("div", {
|
|
1328
|
+
ref: forwardRef,
|
|
1208
1329
|
onKeyDownCapture: handleKeyDown,
|
|
1209
1330
|
className: cn("relative", className),
|
|
1210
1331
|
role: "region",
|
|
@@ -1214,32 +1335,41 @@ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className
|
|
|
1214
1335
|
children
|
|
1215
1336
|
})
|
|
1216
1337
|
});
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1338
|
+
});
|
|
1339
|
+
Carousel.displayName = "Carousel";
|
|
1340
|
+
const CarouselContent = React.forwardRef((componentProps, forwardRef) => {
|
|
1341
|
+
const { className, ...props } = componentProps;
|
|
1219
1342
|
const { carouselRef, orientation } = useCarousel();
|
|
1220
1343
|
return /* @__PURE__ */ jsx("div", {
|
|
1221
1344
|
ref: carouselRef,
|
|
1222
1345
|
className: "overflow-hidden",
|
|
1223
1346
|
"data-slot": "carousel-content",
|
|
1224
1347
|
children: /* @__PURE__ */ jsx("div", {
|
|
1348
|
+
ref: forwardRef,
|
|
1225
1349
|
className: cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className),
|
|
1226
1350
|
...props
|
|
1227
1351
|
})
|
|
1228
1352
|
});
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1353
|
+
});
|
|
1354
|
+
CarouselContent.displayName = "CarouselContent";
|
|
1355
|
+
const CarouselItem = React.forwardRef((componentProps, forwardRef) => {
|
|
1356
|
+
const { className, ...props } = componentProps;
|
|
1231
1357
|
const { orientation } = useCarousel();
|
|
1232
1358
|
return /* @__PURE__ */ jsx("div", {
|
|
1359
|
+
ref: forwardRef,
|
|
1233
1360
|
role: "group",
|
|
1234
1361
|
"aria-roledescription": "slide",
|
|
1235
1362
|
"data-slot": "carousel-item",
|
|
1236
1363
|
className: cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "pl-4" : "pt-4", className),
|
|
1237
1364
|
...props
|
|
1238
1365
|
});
|
|
1239
|
-
}
|
|
1240
|
-
|
|
1366
|
+
});
|
|
1367
|
+
CarouselItem.displayName = "CarouselItem";
|
|
1368
|
+
const CarouselPrevious = React.forwardRef((componentProps, forwardRef) => {
|
|
1369
|
+
const { className, variant = "outline", size = "sm", ...props } = componentProps;
|
|
1241
1370
|
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
1242
1371
|
return /* @__PURE__ */ jsxs(Button, {
|
|
1372
|
+
ref: forwardRef,
|
|
1243
1373
|
"data-slot": "carousel-previous",
|
|
1244
1374
|
variant,
|
|
1245
1375
|
size,
|
|
@@ -1252,10 +1382,13 @@ function CarouselPrevious({ className, variant = "outline", size = "sm", ...prop
|
|
|
1252
1382
|
children: "Previous slide"
|
|
1253
1383
|
})]
|
|
1254
1384
|
});
|
|
1255
|
-
}
|
|
1256
|
-
|
|
1385
|
+
});
|
|
1386
|
+
CarouselPrevious.displayName = "CarouselPrevious";
|
|
1387
|
+
const CarouselNext = React.forwardRef((componentProps, forwardRef) => {
|
|
1388
|
+
const { className, variant = "outline", size = "sm", ...props } = componentProps;
|
|
1257
1389
|
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
1258
1390
|
return /* @__PURE__ */ jsxs(Button, {
|
|
1391
|
+
ref: forwardRef,
|
|
1259
1392
|
"data-slot": "carousel-next",
|
|
1260
1393
|
variant,
|
|
1261
1394
|
size,
|
|
@@ -1268,13 +1401,15 @@ function CarouselNext({ className, variant = "outline", size = "sm", ...props })
|
|
|
1268
1401
|
children: "Next slide"
|
|
1269
1402
|
})]
|
|
1270
1403
|
});
|
|
1271
|
-
}
|
|
1404
|
+
});
|
|
1405
|
+
CarouselNext.displayName = "CarouselNext";
|
|
1272
1406
|
|
|
1273
1407
|
//#endregion
|
|
1274
1408
|
//#region src/components/checkbox.tsx
|
|
1275
|
-
const Checkbox = React
|
|
1409
|
+
const Checkbox = React.forwardRef((componentProps, forwardRef) => {
|
|
1410
|
+
const { className, ...props } = componentProps;
|
|
1276
1411
|
return /* @__PURE__ */ jsx(Checkbox$1.Root, {
|
|
1277
|
-
ref,
|
|
1412
|
+
ref: forwardRef,
|
|
1278
1413
|
"data-slot": "checkbox",
|
|
1279
1414
|
className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-[color,box-shadow,opacity] outline-none active:opacity-60 group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 dark:disabled:bg-input/80 aria-invalid:border-destructive focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 hover:aria-invalid:data-unchecked:bg-destructive-background focus-visible:aria-invalid:data-unchecked:bg-destructive-background dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-indeterminate:border-destructive aria-invalid:data-indeterminate:bg-destructive dark:data-checked:bg-primary dark:data-indeterminate:bg-primary", className),
|
|
1280
1415
|
...props,
|
|
@@ -1353,7 +1488,7 @@ const chipGlowVariants = cva("", {
|
|
|
1353
1488
|
* inherits the chip's text color and brightens on hover. Exported so the
|
|
1354
1489
|
* combobox can reuse the exact treatment for its Base-UI-bound chips.
|
|
1355
1490
|
*/
|
|
1356
|
-
const ChipRemove = React
|
|
1491
|
+
const ChipRemove = React.forwardRef((componentProps, forwardRef) => {
|
|
1357
1492
|
const { className, children, ...props } = componentProps;
|
|
1358
1493
|
return /* @__PURE__ */ jsx(Button, {
|
|
1359
1494
|
ref: forwardRef,
|
|
@@ -1373,7 +1508,7 @@ ChipRemove.displayName = "ChipRemove";
|
|
|
1373
1508
|
* non-interactive — only the X reacts to hover. For combobox-bound chips that
|
|
1374
1509
|
* must drive Base UI's selection state, see `ComboboxChip`.
|
|
1375
1510
|
*/
|
|
1376
|
-
const Chip = React
|
|
1511
|
+
const Chip = React.forwardRef((componentProps, forwardRef) => {
|
|
1377
1512
|
const { className, children, color, tone, legacyColor, glow, ...props } = componentProps;
|
|
1378
1513
|
const glowColor = legacyColor ? resolveTagColor(legacyColor).color : color;
|
|
1379
1514
|
return /* @__PURE__ */ jsx(Badge, {
|
|
@@ -1395,8 +1530,10 @@ Chip.displayName = "Chip";
|
|
|
1395
1530
|
|
|
1396
1531
|
//#endregion
|
|
1397
1532
|
//#region src/components/scroll-area.tsx
|
|
1398
|
-
|
|
1533
|
+
const ScrollArea = React.forwardRef((componentProps, forwardRef) => {
|
|
1534
|
+
const { className, children, scrollFade = false, scrollbarGutter = false, ...props } = componentProps;
|
|
1399
1535
|
return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, {
|
|
1536
|
+
ref: forwardRef,
|
|
1400
1537
|
className: cn("size-full min-h-0", className),
|
|
1401
1538
|
...props,
|
|
1402
1539
|
children: [
|
|
@@ -1410,9 +1547,12 @@ function ScrollArea({ className, children, scrollFade = false, scrollbarGutter =
|
|
|
1410
1547
|
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, { "data-slot": "scroll-area-corner" })
|
|
1411
1548
|
]
|
|
1412
1549
|
});
|
|
1413
|
-
}
|
|
1414
|
-
|
|
1550
|
+
});
|
|
1551
|
+
ScrollArea.displayName = "ScrollArea";
|
|
1552
|
+
const ScrollBar = React.forwardRef((componentProps, forwardRef) => {
|
|
1553
|
+
const { className, orientation = "vertical", ...props } = componentProps;
|
|
1415
1554
|
return /* @__PURE__ */ jsx(ScrollAreaPrimitive.Scrollbar, {
|
|
1555
|
+
ref: forwardRef,
|
|
1416
1556
|
className: cn("m-1 flex opacity-0 transition-opacity delay-300 data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5 data-[orientation=horizontal]:flex-col data-hovering:opacity-100 data-scrolling:opacity-100 data-hovering:delay-0 data-scrolling:delay-0 data-hovering:duration-100 data-scrolling:duration-100", className),
|
|
1417
1557
|
"data-slot": "scroll-area-scrollbar",
|
|
1418
1558
|
orientation,
|
|
@@ -1422,7 +1562,8 @@ function ScrollBar({ className, orientation = "vertical", ...props }) {
|
|
|
1422
1562
|
"data-slot": "scroll-area-thumb"
|
|
1423
1563
|
})
|
|
1424
1564
|
});
|
|
1425
|
-
}
|
|
1565
|
+
});
|
|
1566
|
+
ScrollBar.displayName = "ScrollBar";
|
|
1426
1567
|
|
|
1427
1568
|
//#endregion
|
|
1428
1569
|
//#region src/components/filter.tsx
|
|
@@ -1434,7 +1575,7 @@ function ScrollBar({ className, orientation = "vertical", ...props }) {
|
|
|
1434
1575
|
* `max-w-36` (144px). Compose inside a `FilterGroup` with a trailing
|
|
1435
1576
|
* `FilterClearAllButton` (see the FilterBar story).
|
|
1436
1577
|
*/
|
|
1437
|
-
const Filter = React
|
|
1578
|
+
const Filter = React.forwardRef((componentProps, forwardRef) => {
|
|
1438
1579
|
const { className, children, onRemove, removeLabel = "Remove filter" } = componentProps;
|
|
1439
1580
|
return /* @__PURE__ */ jsxs(Chip, {
|
|
1440
1581
|
ref: forwardRef,
|
|
@@ -1454,7 +1595,7 @@ Filter.displayName = "Filter";
|
|
|
1454
1595
|
* horizontal `ScrollArea` (inset scroll + edge fade) — it does not wrap onto
|
|
1455
1596
|
* multiple lines.
|
|
1456
1597
|
*/
|
|
1457
|
-
const FilterGroup = React
|
|
1598
|
+
const FilterGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
1458
1599
|
const { className, children, ...props } = componentProps;
|
|
1459
1600
|
return /* @__PURE__ */ jsx("div", {
|
|
1460
1601
|
"data-slot": "filter-group",
|
|
@@ -1478,7 +1619,7 @@ FilterGroup.displayName = "FilterGroup";
|
|
|
1478
1619
|
* small `Button` with the styling pinned. Provide `onClick`; the label
|
|
1479
1620
|
* defaults to "Clear all filters" (pass translated `children` to override).
|
|
1480
1621
|
*/
|
|
1481
|
-
const FilterClearAllButton = React
|
|
1622
|
+
const FilterClearAllButton = React.forwardRef((componentProps, forwardRef) => {
|
|
1482
1623
|
const { className, children = "Clear all filters", ...props } = componentProps;
|
|
1483
1624
|
return /* @__PURE__ */ jsx(Button, {
|
|
1484
1625
|
ref: forwardRef,
|
|
@@ -1495,29 +1636,36 @@ FilterClearAllButton.displayName = "FilterClearAllButton";
|
|
|
1495
1636
|
|
|
1496
1637
|
//#endregion
|
|
1497
1638
|
//#region src/components/collapsible.tsx
|
|
1498
|
-
|
|
1639
|
+
const Collapsible = React.forwardRef((componentProps, forwardRef) => {
|
|
1499
1640
|
return /* @__PURE__ */ jsx(Collapsible$1.Root, {
|
|
1641
|
+
ref: forwardRef,
|
|
1500
1642
|
"data-slot": "collapsible",
|
|
1501
|
-
...
|
|
1643
|
+
...componentProps
|
|
1502
1644
|
});
|
|
1503
|
-
}
|
|
1504
|
-
|
|
1645
|
+
});
|
|
1646
|
+
Collapsible.displayName = "Collapsible";
|
|
1647
|
+
const CollapsibleTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
1505
1648
|
return /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
|
|
1649
|
+
ref: forwardRef,
|
|
1506
1650
|
"data-slot": "collapsible-trigger",
|
|
1507
|
-
...
|
|
1651
|
+
...componentProps
|
|
1508
1652
|
});
|
|
1509
|
-
}
|
|
1510
|
-
|
|
1653
|
+
});
|
|
1654
|
+
CollapsibleTrigger.displayName = "CollapsibleTrigger";
|
|
1655
|
+
const CollapsibleContent = React.forwardRef((componentProps, forwardRef) => {
|
|
1511
1656
|
return /* @__PURE__ */ jsx(Collapsible$1.Panel, {
|
|
1657
|
+
ref: forwardRef,
|
|
1512
1658
|
"data-slot": "collapsible-content",
|
|
1513
|
-
...
|
|
1659
|
+
...componentProps
|
|
1514
1660
|
});
|
|
1515
|
-
}
|
|
1661
|
+
});
|
|
1662
|
+
CollapsibleContent.displayName = "CollapsibleContent";
|
|
1516
1663
|
|
|
1517
1664
|
//#endregion
|
|
1518
1665
|
//#region src/components/input.tsx
|
|
1519
1666
|
const inputVariants = cva("text-foreground file:text-foreground placeholder:text-muted-foreground dark:bg-input/30 border-input flex h-10 w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium hover:border-ring hover:aria-invalid:border-destructive disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 dark:disabled:bg-input/80 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 aria-invalid:border-destructive focus-visible:aria-invalid:ring-destructive/20 focus-visible:aria-invalid:ring-3 dark:focus-visible:aria-invalid:ring-destructive/40", { variants: { block: { true: "w-full" } } });
|
|
1520
|
-
const Input = React
|
|
1667
|
+
const Input = React.forwardRef((componentProps, forwardRef) => {
|
|
1668
|
+
const { className, type, block, ...props } = componentProps;
|
|
1521
1669
|
return /* @__PURE__ */ jsx("input", {
|
|
1522
1670
|
type,
|
|
1523
1671
|
"data-slot": "input",
|
|
@@ -1526,29 +1674,36 @@ const Input = React$1.forwardRef(({ className, type, block, ...props }, forwarde
|
|
|
1526
1674
|
className
|
|
1527
1675
|
})),
|
|
1528
1676
|
...props,
|
|
1529
|
-
ref:
|
|
1677
|
+
ref: forwardRef
|
|
1530
1678
|
});
|
|
1531
1679
|
});
|
|
1680
|
+
Input.displayName = "Input";
|
|
1532
1681
|
|
|
1533
1682
|
//#endregion
|
|
1534
1683
|
//#region src/components/textarea.tsx
|
|
1535
|
-
|
|
1684
|
+
const Textarea = React.forwardRef((componentProps, forwardRef) => {
|
|
1685
|
+
const { className, ...props } = componentProps;
|
|
1536
1686
|
return /* @__PURE__ */ jsx("textarea", {
|
|
1687
|
+
ref: forwardRef,
|
|
1537
1688
|
"data-slot": "textarea",
|
|
1538
1689
|
className: cn("border-input placeholder:text-muted-foreground hover:border-ring hover:aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 aria-invalid:border-destructive focus-visible:aria-invalid:ring-destructive/20 focus-visible:aria-invalid:ring-3 dark:focus-visible:aria-invalid:ring-destructive/40 dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 dark:disabled:bg-input/80 md:text-sm", className),
|
|
1539
1690
|
...props
|
|
1540
1691
|
});
|
|
1541
|
-
}
|
|
1692
|
+
});
|
|
1693
|
+
Textarea.displayName = "Textarea";
|
|
1542
1694
|
|
|
1543
1695
|
//#endregion
|
|
1544
1696
|
//#region src/components/input-group.tsx
|
|
1545
|
-
const InputGroup = React
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1697
|
+
const InputGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
1698
|
+
const { className, ...props } = componentProps;
|
|
1699
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1700
|
+
ref: forwardRef,
|
|
1701
|
+
"data-slot": "input-group",
|
|
1702
|
+
role: "group",
|
|
1703
|
+
className: cn("group/input-group border-input dark:bg-input/30 relative flex h-10 w-full items-center rounded-md border transition-[color,box-shadow] outline-none has-[>textarea]:h-auto", "not-has-[input:disabled]:not-has-[textarea:disabled]:not-has-[[data-slot][aria-invalid=true]]:hover:border-ring", "has-[input:disabled]:bg-input/50 has-[textarea:disabled]:bg-input/50 has-[input:disabled]:opacity-50 has-[textarea:disabled]:opacity-50 dark:has-[input:disabled]:bg-input/80 dark:has-[textarea:disabled]:bg-input/80", "has-[>[data-align=inline-start]]:[&>input]:pl-2", "has-[>[data-align=inline-end]]:[&>input]:pr-2", "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3", "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3", "has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-3", "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]:focus-visible]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]:focus-visible]:ring-destructive/40", className),
|
|
1704
|
+
...props
|
|
1705
|
+
});
|
|
1706
|
+
});
|
|
1552
1707
|
InputGroup.displayName = "InputGroup";
|
|
1553
1708
|
const inputGroupAddonVariants = cva("text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50", {
|
|
1554
1709
|
variants: { align: {
|
|
@@ -1559,8 +1714,10 @@ const inputGroupAddonVariants = cva("text-muted-foreground flex h-auto cursor-te
|
|
|
1559
1714
|
} },
|
|
1560
1715
|
defaultVariants: { align: "inline-start" }
|
|
1561
1716
|
});
|
|
1562
|
-
|
|
1717
|
+
const InputGroupAddon = React.forwardRef((componentProps, forwardRef) => {
|
|
1718
|
+
const { className, align = "inline-start", ...props } = componentProps;
|
|
1563
1719
|
return /* @__PURE__ */ jsx("div", {
|
|
1720
|
+
ref: forwardRef,
|
|
1564
1721
|
role: "group",
|
|
1565
1722
|
"data-slot": "input-group-addon",
|
|
1566
1723
|
"data-align": align,
|
|
@@ -1571,10 +1728,12 @@ function InputGroupAddon({ className, align = "inline-start", ...props }) {
|
|
|
1571
1728
|
},
|
|
1572
1729
|
...props
|
|
1573
1730
|
});
|
|
1574
|
-
}
|
|
1575
|
-
|
|
1731
|
+
});
|
|
1732
|
+
InputGroupAddon.displayName = "InputGroupAddon";
|
|
1733
|
+
const InputGroupButton = React.forwardRef((componentProps, forwardRef) => {
|
|
1734
|
+
const { className, type = "button", variant = "ghost", size = "sm", ...props } = componentProps;
|
|
1576
1735
|
return /* @__PURE__ */ jsx(Button, {
|
|
1577
|
-
ref,
|
|
1736
|
+
ref: forwardRef,
|
|
1578
1737
|
type,
|
|
1579
1738
|
variant,
|
|
1580
1739
|
size,
|
|
@@ -1583,27 +1742,35 @@ const InputGroupButton = React$1.forwardRef(({ className, type = "button", varia
|
|
|
1583
1742
|
});
|
|
1584
1743
|
});
|
|
1585
1744
|
InputGroupButton.displayName = "InputGroupButton";
|
|
1586
|
-
|
|
1745
|
+
const InputGroupText = React.forwardRef((componentProps, forwardRef) => {
|
|
1746
|
+
const { className, ...props } = componentProps;
|
|
1587
1747
|
return /* @__PURE__ */ jsx("span", {
|
|
1748
|
+
ref: forwardRef,
|
|
1588
1749
|
className: cn("text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
|
|
1589
1750
|
...props
|
|
1590
1751
|
});
|
|
1591
|
-
}
|
|
1592
|
-
|
|
1752
|
+
});
|
|
1753
|
+
InputGroupText.displayName = "InputGroupText";
|
|
1754
|
+
const InputGroupInput = React.forwardRef((componentProps, forwardRef) => {
|
|
1755
|
+
const { className, ...props } = componentProps;
|
|
1593
1756
|
return /* @__PURE__ */ jsx(Input, {
|
|
1594
1757
|
"data-slot": "input-group-control",
|
|
1595
1758
|
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 aria-invalid:ring-0 focus-visible:aria-invalid:!ring-0 disabled:bg-transparent disabled:opacity-100 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
1596
1759
|
...props,
|
|
1597
|
-
ref:
|
|
1760
|
+
ref: forwardRef
|
|
1598
1761
|
});
|
|
1599
1762
|
});
|
|
1600
|
-
|
|
1763
|
+
InputGroupInput.displayName = "InputGroupInput";
|
|
1764
|
+
const InputGroupTextarea = React.forwardRef((componentProps, forwardRef) => {
|
|
1765
|
+
const { className, ...props } = componentProps;
|
|
1601
1766
|
return /* @__PURE__ */ jsx(Textarea, {
|
|
1767
|
+
ref: forwardRef,
|
|
1602
1768
|
"data-slot": "input-group-control",
|
|
1603
1769
|
className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent", className),
|
|
1604
1770
|
...props
|
|
1605
1771
|
});
|
|
1606
|
-
}
|
|
1772
|
+
});
|
|
1773
|
+
InputGroupTextarea.displayName = "InputGroupTextarea";
|
|
1607
1774
|
|
|
1608
1775
|
//#endregion
|
|
1609
1776
|
//#region src/components/combobox.tsx
|
|
@@ -1614,7 +1781,7 @@ function ComboboxValue(componentProps) {
|
|
|
1614
1781
|
...componentProps
|
|
1615
1782
|
});
|
|
1616
1783
|
}
|
|
1617
|
-
const ComboboxTrigger = React
|
|
1784
|
+
const ComboboxTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
1618
1785
|
const { className, children, ...props } = componentProps;
|
|
1619
1786
|
return /* @__PURE__ */ jsxs(Combobox$1.Trigger, {
|
|
1620
1787
|
ref: forwardRef,
|
|
@@ -1625,7 +1792,7 @@ const ComboboxTrigger = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1625
1792
|
});
|
|
1626
1793
|
});
|
|
1627
1794
|
ComboboxTrigger.displayName = "ComboboxTrigger";
|
|
1628
|
-
const ComboboxClear = React
|
|
1795
|
+
const ComboboxClear = React.forwardRef((componentProps, forwardRef) => {
|
|
1629
1796
|
const { className, ...props } = componentProps;
|
|
1630
1797
|
return /* @__PURE__ */ jsx(Combobox$1.Clear, {
|
|
1631
1798
|
ref: forwardRef,
|
|
@@ -1640,7 +1807,7 @@ const ComboboxClear = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1640
1807
|
});
|
|
1641
1808
|
});
|
|
1642
1809
|
ComboboxClear.displayName = "ComboboxClear";
|
|
1643
|
-
const ComboboxInput = React
|
|
1810
|
+
const ComboboxInput = React.forwardRef((componentProps, forwardRef) => {
|
|
1644
1811
|
const { className, children, disabled = false, showTrigger = true, showClear = false, ...props } = componentProps;
|
|
1645
1812
|
return /* @__PURE__ */ jsxs(InputGroup, {
|
|
1646
1813
|
ref: forwardRef,
|
|
@@ -1666,7 +1833,7 @@ const ComboboxInput = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1666
1833
|
});
|
|
1667
1834
|
});
|
|
1668
1835
|
ComboboxInput.displayName = "ComboboxInput";
|
|
1669
|
-
const ComboboxContent = React
|
|
1836
|
+
const ComboboxContent = React.forwardRef((componentProps, forwardRef) => {
|
|
1670
1837
|
const { className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props } = componentProps;
|
|
1671
1838
|
return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(Combobox$1.Positioner, {
|
|
1672
1839
|
side,
|
|
@@ -1685,7 +1852,7 @@ const ComboboxContent = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1685
1852
|
}) });
|
|
1686
1853
|
});
|
|
1687
1854
|
ComboboxContent.displayName = "ComboboxContent";
|
|
1688
|
-
const ComboboxList = React
|
|
1855
|
+
const ComboboxList = React.forwardRef((componentProps, forwardRef) => {
|
|
1689
1856
|
const { className, ...props } = componentProps;
|
|
1690
1857
|
return /* @__PURE__ */ jsx(Combobox$1.List, {
|
|
1691
1858
|
ref: forwardRef,
|
|
@@ -1695,7 +1862,7 @@ const ComboboxList = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1695
1862
|
});
|
|
1696
1863
|
});
|
|
1697
1864
|
ComboboxList.displayName = "ComboboxList";
|
|
1698
|
-
const ComboboxItem = React
|
|
1865
|
+
const ComboboxItem = React.forwardRef((componentProps, forwardRef) => {
|
|
1699
1866
|
const { className, children, ...props } = componentProps;
|
|
1700
1867
|
return /* @__PURE__ */ jsxs(Combobox$1.Item, {
|
|
1701
1868
|
ref: forwardRef,
|
|
@@ -1710,7 +1877,7 @@ const ComboboxItem = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1710
1877
|
});
|
|
1711
1878
|
});
|
|
1712
1879
|
ComboboxItem.displayName = "ComboboxItem";
|
|
1713
|
-
const ComboboxGroup = React
|
|
1880
|
+
const ComboboxGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
1714
1881
|
const { className, ...props } = componentProps;
|
|
1715
1882
|
return /* @__PURE__ */ jsx(Combobox$1.Group, {
|
|
1716
1883
|
ref: forwardRef,
|
|
@@ -1720,7 +1887,7 @@ const ComboboxGroup = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1720
1887
|
});
|
|
1721
1888
|
});
|
|
1722
1889
|
ComboboxGroup.displayName = "ComboboxGroup";
|
|
1723
|
-
const ComboboxLabel = React
|
|
1890
|
+
const ComboboxLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
1724
1891
|
const { className, ...props } = componentProps;
|
|
1725
1892
|
return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, {
|
|
1726
1893
|
ref: forwardRef,
|
|
@@ -1736,7 +1903,7 @@ function ComboboxCollection(componentProps) {
|
|
|
1736
1903
|
...componentProps
|
|
1737
1904
|
});
|
|
1738
1905
|
}
|
|
1739
|
-
const ComboboxEmpty = React
|
|
1906
|
+
const ComboboxEmpty = React.forwardRef((componentProps, forwardRef) => {
|
|
1740
1907
|
const { className, ...props } = componentProps;
|
|
1741
1908
|
return /* @__PURE__ */ jsx(Combobox$1.Empty, {
|
|
1742
1909
|
ref: forwardRef,
|
|
@@ -1746,7 +1913,7 @@ const ComboboxEmpty = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1746
1913
|
});
|
|
1747
1914
|
});
|
|
1748
1915
|
ComboboxEmpty.displayName = "ComboboxEmpty";
|
|
1749
|
-
const ComboboxSeparator = React
|
|
1916
|
+
const ComboboxSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
1750
1917
|
const { className, ...props } = componentProps;
|
|
1751
1918
|
return /* @__PURE__ */ jsx(Combobox$1.Separator, {
|
|
1752
1919
|
ref: forwardRef,
|
|
@@ -1756,7 +1923,7 @@ const ComboboxSeparator = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1756
1923
|
});
|
|
1757
1924
|
});
|
|
1758
1925
|
ComboboxSeparator.displayName = "ComboboxSeparator";
|
|
1759
|
-
const ComboboxChips = React
|
|
1926
|
+
const ComboboxChips = React.forwardRef((componentProps, forwardRef) => {
|
|
1760
1927
|
const { className, ...props } = componentProps;
|
|
1761
1928
|
return /* @__PURE__ */ jsx(Combobox$1.Chips, {
|
|
1762
1929
|
ref: forwardRef,
|
|
@@ -1766,7 +1933,7 @@ const ComboboxChips = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
1766
1933
|
});
|
|
1767
1934
|
});
|
|
1768
1935
|
ComboboxChips.displayName = "ComboboxChips";
|
|
1769
|
-
const ComboboxChip = React
|
|
1936
|
+
const ComboboxChip = React.forwardRef(function ComboboxChip(componentProps, forwardRef) {
|
|
1770
1937
|
const { className, children, showRemove = true, color, tone, legacyColor, ...props } = componentProps;
|
|
1771
1938
|
return /* @__PURE__ */ jsxs(Combobox$1.Chip, {
|
|
1772
1939
|
ref: forwardRef,
|
|
@@ -1780,7 +1947,7 @@ const ComboboxChip = React$1.forwardRef(function ComboboxChip(componentProps, fo
|
|
|
1780
1947
|
children: [children, showRemove && /* @__PURE__ */ jsx(Combobox$1.ChipRemove, { render: /* @__PURE__ */ jsx(ChipRemove, {}) })]
|
|
1781
1948
|
});
|
|
1782
1949
|
});
|
|
1783
|
-
const ComboboxChipsInput = React
|
|
1950
|
+
const ComboboxChipsInput = React.forwardRef(function ComboboxChipsInput(componentProps, forwardRef) {
|
|
1784
1951
|
const { className, ...props } = componentProps;
|
|
1785
1952
|
return /* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
1786
1953
|
ref: forwardRef,
|
|
@@ -1791,44 +1958,55 @@ const ComboboxChipsInput = React$1.forwardRef(function ComboboxChipsInput(compon
|
|
|
1791
1958
|
});
|
|
1792
1959
|
ComboboxChipsInput.displayName = "ComboboxChipsInput";
|
|
1793
1960
|
function useComboboxAnchor() {
|
|
1794
|
-
return React
|
|
1961
|
+
return React.useRef(null);
|
|
1795
1962
|
}
|
|
1796
1963
|
|
|
1797
1964
|
//#endregion
|
|
1798
1965
|
//#region src/components/dialog.tsx
|
|
1799
|
-
function Dialog(
|
|
1966
|
+
function Dialog(componentProps) {
|
|
1800
1967
|
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
1801
1968
|
"data-slot": "dialog",
|
|
1802
|
-
...
|
|
1969
|
+
...componentProps
|
|
1803
1970
|
});
|
|
1804
1971
|
}
|
|
1805
|
-
|
|
1972
|
+
const DialogTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
1973
|
+
const { ...props } = componentProps;
|
|
1806
1974
|
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
1975
|
+
ref: forwardRef,
|
|
1807
1976
|
"data-slot": "dialog-trigger",
|
|
1808
1977
|
...props
|
|
1809
1978
|
});
|
|
1810
|
-
}
|
|
1811
|
-
|
|
1979
|
+
});
|
|
1980
|
+
DialogTrigger.displayName = "DialogTrigger";
|
|
1981
|
+
function DialogPortal(componentProps) {
|
|
1812
1982
|
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
1813
1983
|
"data-slot": "dialog-portal",
|
|
1814
|
-
...
|
|
1984
|
+
...componentProps
|
|
1815
1985
|
});
|
|
1816
1986
|
}
|
|
1817
|
-
|
|
1987
|
+
const DialogClose = React.forwardRef((componentProps, forwardRef) => {
|
|
1988
|
+
const { ...props } = componentProps;
|
|
1818
1989
|
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
1990
|
+
ref: forwardRef,
|
|
1819
1991
|
"data-slot": "dialog-close",
|
|
1820
1992
|
...props
|
|
1821
1993
|
});
|
|
1822
|
-
}
|
|
1823
|
-
|
|
1994
|
+
});
|
|
1995
|
+
DialogClose.displayName = "DialogClose";
|
|
1996
|
+
const DialogOverlay = React.forwardRef((componentProps, forwardRef) => {
|
|
1997
|
+
const { className, ...props } = componentProps;
|
|
1824
1998
|
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
1999
|
+
ref: forwardRef,
|
|
1825
2000
|
"data-slot": "dialog-overlay",
|
|
1826
2001
|
className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
|
|
1827
2002
|
...props
|
|
1828
2003
|
});
|
|
1829
|
-
}
|
|
1830
|
-
|
|
2004
|
+
});
|
|
2005
|
+
DialogOverlay.displayName = "DialogOverlay";
|
|
2006
|
+
const DialogContent = React.forwardRef((componentProps, forwardRef) => {
|
|
2007
|
+
const { className, children, showCloseButton = true, ...props } = componentProps;
|
|
1831
2008
|
return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
|
|
2009
|
+
ref: forwardRef,
|
|
1832
2010
|
"data-slot": "dialog-content",
|
|
1833
2011
|
className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl ring-1 ring-foreground/10 bg-background px-6 py-4 text-sm duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
1834
2012
|
...props,
|
|
@@ -1845,16 +2023,22 @@ function DialogContent({ className, children, showCloseButton = true, ...props }
|
|
|
1845
2023
|
})]
|
|
1846
2024
|
})]
|
|
1847
2025
|
})] });
|
|
1848
|
-
}
|
|
1849
|
-
|
|
2026
|
+
});
|
|
2027
|
+
DialogContent.displayName = "DialogContent";
|
|
2028
|
+
const DialogHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
2029
|
+
const { className, ...props } = componentProps;
|
|
1850
2030
|
return /* @__PURE__ */ jsx("div", {
|
|
2031
|
+
ref: forwardRef,
|
|
1851
2032
|
"data-slot": "dialog-header",
|
|
1852
2033
|
className: cn("flex flex-col gap-2", className),
|
|
1853
2034
|
...props
|
|
1854
2035
|
});
|
|
1855
|
-
}
|
|
1856
|
-
|
|
2036
|
+
});
|
|
2037
|
+
DialogHeader.displayName = "DialogHeader";
|
|
2038
|
+
const DialogFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
2039
|
+
const { className, showCloseButton = false, children, ...props } = componentProps;
|
|
1857
2040
|
return /* @__PURE__ */ jsxs("div", {
|
|
2041
|
+
ref: forwardRef,
|
|
1858
2042
|
"data-slot": "dialog-footer",
|
|
1859
2043
|
className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
|
|
1860
2044
|
...props,
|
|
@@ -1863,32 +2047,43 @@ function DialogFooter({ className, showCloseButton = false, children, ...props }
|
|
|
1863
2047
|
children: "Close"
|
|
1864
2048
|
})]
|
|
1865
2049
|
});
|
|
1866
|
-
}
|
|
1867
|
-
|
|
2050
|
+
});
|
|
2051
|
+
DialogFooter.displayName = "DialogFooter";
|
|
2052
|
+
const DialogTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
2053
|
+
const { className, ...props } = componentProps;
|
|
1868
2054
|
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
2055
|
+
ref: forwardRef,
|
|
1869
2056
|
"data-slot": "dialog-title",
|
|
1870
2057
|
className: cn("text-lg font-bold leading-normal", className),
|
|
1871
2058
|
...props
|
|
1872
2059
|
});
|
|
1873
|
-
}
|
|
1874
|
-
|
|
2060
|
+
});
|
|
2061
|
+
DialogTitle.displayName = "DialogTitle";
|
|
2062
|
+
const DialogDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
2063
|
+
const { className, ...props } = componentProps;
|
|
1875
2064
|
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
2065
|
+
ref: forwardRef,
|
|
1876
2066
|
"data-slot": "dialog-description",
|
|
1877
2067
|
className: cn("text-sm leading-normal text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
1878
2068
|
...props
|
|
1879
2069
|
});
|
|
1880
|
-
}
|
|
2070
|
+
});
|
|
2071
|
+
DialogDescription.displayName = "DialogDescription";
|
|
1881
2072
|
|
|
1882
2073
|
//#endregion
|
|
1883
2074
|
//#region src/components/command.tsx
|
|
1884
|
-
|
|
2075
|
+
const Command = React.forwardRef((componentProps, forwardRef) => {
|
|
2076
|
+
const { className, ...props } = componentProps;
|
|
1885
2077
|
return /* @__PURE__ */ jsx(Command$1, {
|
|
2078
|
+
ref: forwardRef,
|
|
1886
2079
|
"data-slot": "command",
|
|
1887
2080
|
className: cn("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md", className),
|
|
1888
2081
|
...props
|
|
1889
2082
|
});
|
|
1890
|
-
}
|
|
1891
|
-
|
|
2083
|
+
});
|
|
2084
|
+
Command.displayName = "Command";
|
|
2085
|
+
function CommandDialog(componentProps) {
|
|
2086
|
+
const { title = "Command Palette", description = "Search for a command to run...", children, ...props } = componentProps;
|
|
1892
2087
|
return /* @__PURE__ */ jsxs(Dialog, {
|
|
1893
2088
|
...props,
|
|
1894
2089
|
children: [/* @__PURE__ */ jsxs(DialogHeader, {
|
|
@@ -1903,59 +2098,80 @@ function CommandDialog({ title = "Command Palette", description = "Search for a
|
|
|
1903
2098
|
})]
|
|
1904
2099
|
});
|
|
1905
2100
|
}
|
|
1906
|
-
|
|
2101
|
+
const CommandInput = React.forwardRef((componentProps, forwardRef) => {
|
|
2102
|
+
const { className, ...props } = componentProps;
|
|
1907
2103
|
return /* @__PURE__ */ jsxs("div", {
|
|
1908
2104
|
"data-slot": "command-input-wrapper",
|
|
1909
2105
|
className: "flex h-9 items-center gap-2 border-b px-3",
|
|
1910
2106
|
children: [/* @__PURE__ */ jsx(Search, { className: "size-4 shrink-0 opacity-50" }), /* @__PURE__ */ jsx(Command$1.Input, {
|
|
2107
|
+
ref: forwardRef,
|
|
1911
2108
|
"data-slot": "command-input",
|
|
1912
2109
|
className: cn("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
1913
2110
|
...props
|
|
1914
2111
|
})]
|
|
1915
2112
|
});
|
|
1916
|
-
}
|
|
1917
|
-
|
|
2113
|
+
});
|
|
2114
|
+
CommandInput.displayName = "CommandInput";
|
|
2115
|
+
const CommandList = React.forwardRef((componentProps, forwardRef) => {
|
|
2116
|
+
const { className, ...props } = componentProps;
|
|
1918
2117
|
return /* @__PURE__ */ jsx(Command$1.List, {
|
|
2118
|
+
ref: forwardRef,
|
|
1919
2119
|
"data-slot": "command-list",
|
|
1920
2120
|
className: cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className),
|
|
1921
2121
|
...props
|
|
1922
2122
|
});
|
|
1923
|
-
}
|
|
1924
|
-
|
|
2123
|
+
});
|
|
2124
|
+
CommandList.displayName = "CommandList";
|
|
2125
|
+
const CommandEmpty = React.forwardRef((componentProps, forwardRef) => {
|
|
2126
|
+
const { ...props } = componentProps;
|
|
1925
2127
|
return /* @__PURE__ */ jsx(Command$1.Empty, {
|
|
2128
|
+
ref: forwardRef,
|
|
1926
2129
|
"data-slot": "command-empty",
|
|
1927
2130
|
className: "py-6 text-center text-sm",
|
|
1928
2131
|
...props
|
|
1929
2132
|
});
|
|
1930
|
-
}
|
|
1931
|
-
|
|
2133
|
+
});
|
|
2134
|
+
CommandEmpty.displayName = "CommandEmpty";
|
|
2135
|
+
const CommandGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
2136
|
+
const { className, ...props } = componentProps;
|
|
1932
2137
|
return /* @__PURE__ */ jsx(Command$1.Group, {
|
|
2138
|
+
ref: forwardRef,
|
|
1933
2139
|
"data-slot": "command-group",
|
|
1934
2140
|
className: cn("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium", className),
|
|
1935
2141
|
...props
|
|
1936
2142
|
});
|
|
1937
|
-
}
|
|
1938
|
-
|
|
2143
|
+
});
|
|
2144
|
+
CommandGroup.displayName = "CommandGroup";
|
|
2145
|
+
const CommandSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
2146
|
+
const { className, ...props } = componentProps;
|
|
1939
2147
|
return /* @__PURE__ */ jsx(Command$1.Separator, {
|
|
2148
|
+
ref: forwardRef,
|
|
1940
2149
|
"data-slot": "command-separator",
|
|
1941
2150
|
className: cn("bg-border -mx-1 h-px", className),
|
|
1942
2151
|
...props
|
|
1943
2152
|
});
|
|
1944
|
-
}
|
|
1945
|
-
|
|
2153
|
+
});
|
|
2154
|
+
CommandSeparator.displayName = "CommandSeparator";
|
|
2155
|
+
const CommandItem = React.forwardRef((componentProps, forwardRef) => {
|
|
2156
|
+
const { className, ...props } = componentProps;
|
|
1946
2157
|
return /* @__PURE__ */ jsx(Command$1.Item, {
|
|
2158
|
+
ref: forwardRef,
|
|
1947
2159
|
"data-slot": "command-item",
|
|
1948
2160
|
className: cn("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1949
2161
|
...props
|
|
1950
2162
|
});
|
|
1951
|
-
}
|
|
1952
|
-
|
|
2163
|
+
});
|
|
2164
|
+
CommandItem.displayName = "CommandItem";
|
|
2165
|
+
const CommandShortcut = React.forwardRef((componentProps, forwardRef) => {
|
|
2166
|
+
const { className, ...props } = componentProps;
|
|
1953
2167
|
return /* @__PURE__ */ jsx("span", {
|
|
2168
|
+
ref: forwardRef,
|
|
1954
2169
|
"data-slot": "command-shortcut",
|
|
1955
2170
|
className: cn("text-muted-foreground ml-auto text-xs tracking-widest", className),
|
|
1956
2171
|
...props
|
|
1957
2172
|
});
|
|
1958
|
-
}
|
|
2173
|
+
});
|
|
2174
|
+
CommandShortcut.displayName = "CommandShortcut";
|
|
1959
2175
|
|
|
1960
2176
|
//#endregion
|
|
1961
2177
|
//#region src/components/country-flag.tsx
|
|
@@ -1965,22 +2181,28 @@ const sizeMap = {
|
|
|
1965
2181
|
lg: "size-5",
|
|
1966
2182
|
xl: "size-6"
|
|
1967
2183
|
};
|
|
1968
|
-
const CountryFlag = (
|
|
2184
|
+
const CountryFlag = React.forwardRef((componentProps, forwardRef) => {
|
|
2185
|
+
const { countryIsoCode, size = "xl", className, ...otherProps } = componentProps;
|
|
1969
2186
|
return /* @__PURE__ */ jsx(FLAGS[countryIsoCode.toLowerCase()] ?? FlagUs, {
|
|
2187
|
+
ref: forwardRef,
|
|
1970
2188
|
className: cn("flex-none", sizeMap[size], className),
|
|
1971
2189
|
...otherProps
|
|
1972
2190
|
});
|
|
1973
|
-
};
|
|
2191
|
+
});
|
|
2192
|
+
CountryFlag.displayName = "CountryFlag";
|
|
1974
2193
|
|
|
1975
2194
|
//#endregion
|
|
1976
2195
|
//#region src/components/skeleton.tsx
|
|
1977
|
-
|
|
2196
|
+
const Skeleton = React.forwardRef((componentProps, forwardRef) => {
|
|
2197
|
+
const { className, ...props } = componentProps;
|
|
1978
2198
|
return /* @__PURE__ */ jsx("div", {
|
|
2199
|
+
ref: forwardRef,
|
|
1979
2200
|
"data-slot": "skeleton",
|
|
1980
2201
|
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
1981
2202
|
...props
|
|
1982
2203
|
});
|
|
1983
|
-
}
|
|
2204
|
+
});
|
|
2205
|
+
Skeleton.displayName = "Skeleton";
|
|
1984
2206
|
|
|
1985
2207
|
//#endregion
|
|
1986
2208
|
//#region src/components/spinner.tsx
|
|
@@ -1993,81 +2215,106 @@ const spinnerVariants = cva("animate-spin text-current", {
|
|
|
1993
2215
|
} },
|
|
1994
2216
|
defaultVariants: { size: "default" }
|
|
1995
2217
|
});
|
|
1996
|
-
|
|
2218
|
+
const Spinner = React.forwardRef((componentProps, forwardRef) => {
|
|
2219
|
+
const { className, size, ...props } = componentProps;
|
|
1997
2220
|
return /* @__PURE__ */ jsx(Loader2Icon, {
|
|
2221
|
+
ref: forwardRef,
|
|
1998
2222
|
"data-slot": "spinner",
|
|
1999
2223
|
role: "status",
|
|
2000
2224
|
"aria-label": "Loading",
|
|
2001
2225
|
className: cn(spinnerVariants({ size }), className),
|
|
2002
2226
|
...props
|
|
2003
2227
|
});
|
|
2004
|
-
}
|
|
2228
|
+
});
|
|
2229
|
+
Spinner.displayName = "Spinner";
|
|
2005
2230
|
|
|
2006
2231
|
//#endregion
|
|
2007
2232
|
//#region src/components/table.tsx
|
|
2008
|
-
const Table = React
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2233
|
+
const Table = React.forwardRef((componentProps, forwardRef) => {
|
|
2234
|
+
const { className, containerClassName, containerStyle, ...props } = componentProps;
|
|
2235
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2236
|
+
"data-slot": "table-container",
|
|
2237
|
+
style: containerStyle,
|
|
2238
|
+
className: cn("relative w-full overflow-x-auto rounded-lg border border-border", containerClassName),
|
|
2239
|
+
children: /* @__PURE__ */ jsx("table", {
|
|
2240
|
+
ref: forwardRef,
|
|
2241
|
+
"data-slot": "table",
|
|
2242
|
+
className: cn("w-full caption-bottom text-sm [&_tbody_tr:last-child]:border-b-0", className),
|
|
2243
|
+
...props
|
|
2244
|
+
})
|
|
2245
|
+
});
|
|
2246
|
+
});
|
|
2019
2247
|
Table.displayName = "Table";
|
|
2020
|
-
const TableHeader = React
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2248
|
+
const TableHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
2249
|
+
const { className, ...props } = componentProps;
|
|
2250
|
+
return /* @__PURE__ */ jsx("thead", {
|
|
2251
|
+
ref: forwardRef,
|
|
2252
|
+
"data-slot": "table-header",
|
|
2253
|
+
className: cn("[&_tr]:border-b [&_tr]:hover:bg-transparent", className),
|
|
2254
|
+
...props
|
|
2255
|
+
});
|
|
2256
|
+
});
|
|
2026
2257
|
TableHeader.displayName = "TableHeader";
|
|
2027
|
-
const TableBody = React
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2258
|
+
const TableBody = React.forwardRef((componentProps, forwardRef) => {
|
|
2259
|
+
const { className, ...props } = componentProps;
|
|
2260
|
+
return /* @__PURE__ */ jsx("tbody", {
|
|
2261
|
+
ref: forwardRef,
|
|
2262
|
+
"data-slot": "table-body",
|
|
2263
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
2264
|
+
...props
|
|
2265
|
+
});
|
|
2266
|
+
});
|
|
2033
2267
|
TableBody.displayName = "TableBody";
|
|
2034
|
-
const TableFooter = React
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2268
|
+
const TableFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
2269
|
+
const { className, ...props } = componentProps;
|
|
2270
|
+
return /* @__PURE__ */ jsx("tfoot", {
|
|
2271
|
+
ref: forwardRef,
|
|
2272
|
+
"data-slot": "table-footer",
|
|
2273
|
+
className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0 [&>tr]:hover:bg-transparent", className),
|
|
2274
|
+
...props
|
|
2275
|
+
});
|
|
2276
|
+
});
|
|
2040
2277
|
TableFooter.displayName = "TableFooter";
|
|
2041
|
-
const TableRow = React
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2278
|
+
const TableRow = React.forwardRef((componentProps, forwardRef) => {
|
|
2279
|
+
const { className, ...props } = componentProps;
|
|
2280
|
+
return /* @__PURE__ */ jsx("tr", {
|
|
2281
|
+
ref: forwardRef,
|
|
2282
|
+
"data-slot": "table-row",
|
|
2283
|
+
className: cn("border-b transition-colors hover:bg-accent/30 data-[state=selected]:bg-accent/50", className),
|
|
2284
|
+
...props
|
|
2285
|
+
});
|
|
2286
|
+
});
|
|
2047
2287
|
TableRow.displayName = "TableRow";
|
|
2048
|
-
const TableHead = React
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2288
|
+
const TableHead = React.forwardRef((componentProps, forwardRef) => {
|
|
2289
|
+
const { className, ...props } = componentProps;
|
|
2290
|
+
return /* @__PURE__ */ jsx("th", {
|
|
2291
|
+
ref: forwardRef,
|
|
2292
|
+
"data-slot": "table-head",
|
|
2293
|
+
className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className),
|
|
2294
|
+
...props
|
|
2295
|
+
});
|
|
2296
|
+
});
|
|
2054
2297
|
TableHead.displayName = "TableHead";
|
|
2055
|
-
const TableCell = React
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2298
|
+
const TableCell = React.forwardRef((componentProps, forwardRef) => {
|
|
2299
|
+
const { className, ...props } = componentProps;
|
|
2300
|
+
return /* @__PURE__ */ jsx("td", {
|
|
2301
|
+
ref: forwardRef,
|
|
2302
|
+
"data-slot": "table-cell",
|
|
2303
|
+
className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
|
|
2304
|
+
...props
|
|
2305
|
+
});
|
|
2306
|
+
});
|
|
2061
2307
|
TableCell.displayName = "TableCell";
|
|
2062
2308
|
|
|
2063
2309
|
//#endregion
|
|
2064
2310
|
//#region src/components/data-table.tsx
|
|
2065
2311
|
const SELECT_COLUMN_ID = "__select";
|
|
2066
2312
|
const DEFAULT_SKELETON_COUNT = 5;
|
|
2067
|
-
function DataTable(
|
|
2313
|
+
function DataTable(componentProps) {
|
|
2314
|
+
const { columns, data, getRowId, loadingState = "idle", skeletonCount = DEFAULT_SKELETON_COUNT, emptyState, sorting, onSortingChange, enableRowSelection, rowSelection, onRowSelectionChange, actionBar, onFetchMore, hasMore = false, enableColumnResizing = false, fillHeight = false, onRowClick, className } = componentProps;
|
|
2068
2315
|
const sortingEnabled = !!onSortingChange;
|
|
2069
2316
|
const selectionEnabled = !!enableRowSelection;
|
|
2070
|
-
const finalColumns = React
|
|
2317
|
+
const finalColumns = React.useMemo(() => {
|
|
2071
2318
|
if (!selectionEnabled) return columns;
|
|
2072
2319
|
return [makeSelectColumn(), ...columns];
|
|
2073
2320
|
}, [columns, selectionEnabled]);
|
|
@@ -2268,12 +2515,12 @@ function SkeletonRows({ columns, count }) {
|
|
|
2268
2515
|
* page never triggers duplicate fetches; the sentinel remounts for the next page.
|
|
2269
2516
|
*/
|
|
2270
2517
|
function useFetchMoreSentinel(onFetchMore, fillHeight, resetKey) {
|
|
2271
|
-
const onFetchMoreRef = React
|
|
2518
|
+
const onFetchMoreRef = React.useRef(onFetchMore);
|
|
2272
2519
|
onFetchMoreRef.current = onFetchMore;
|
|
2273
|
-
const observerRef = React
|
|
2274
|
-
const nodeRef = React
|
|
2275
|
-
const armedRef = React
|
|
2276
|
-
const observe = React
|
|
2520
|
+
const observerRef = React.useRef(null);
|
|
2521
|
+
const nodeRef = React.useRef(null);
|
|
2522
|
+
const armedRef = React.useRef(true);
|
|
2523
|
+
const observe = React.useCallback(() => {
|
|
2277
2524
|
observerRef.current?.disconnect();
|
|
2278
2525
|
observerRef.current = null;
|
|
2279
2526
|
const node = nodeRef.current;
|
|
@@ -2293,16 +2540,269 @@ function useFetchMoreSentinel(onFetchMore, fillHeight, resetKey) {
|
|
|
2293
2540
|
observer.observe(node);
|
|
2294
2541
|
observerRef.current = observer;
|
|
2295
2542
|
}, [fillHeight]);
|
|
2296
|
-
React
|
|
2543
|
+
React.useEffect(() => {
|
|
2297
2544
|
armedRef.current = true;
|
|
2298
2545
|
observe();
|
|
2299
2546
|
}, [resetKey, observe]);
|
|
2300
|
-
return React
|
|
2547
|
+
return React.useCallback((node) => {
|
|
2301
2548
|
nodeRef.current = node;
|
|
2302
2549
|
observe();
|
|
2303
2550
|
}, [observe]);
|
|
2304
2551
|
}
|
|
2305
2552
|
|
|
2553
|
+
//#endregion
|
|
2554
|
+
//#region src/components/tree.tsx
|
|
2555
|
+
const TreeContext = React.createContext({
|
|
2556
|
+
currentItem: void 0,
|
|
2557
|
+
indent: 20,
|
|
2558
|
+
tree: void 0
|
|
2559
|
+
});
|
|
2560
|
+
function useTreeContext() {
|
|
2561
|
+
return React.useContext(TreeContext);
|
|
2562
|
+
}
|
|
2563
|
+
function Tree({ indent = 20, tree, className, ...props }) {
|
|
2564
|
+
const containerProps = tree && typeof tree.getContainerProps === "function" ? tree.getContainerProps() : {};
|
|
2565
|
+
const { style: propStyle, ...otherProps } = {
|
|
2566
|
+
...props,
|
|
2567
|
+
...containerProps
|
|
2568
|
+
};
|
|
2569
|
+
const mergedStyle = {
|
|
2570
|
+
...propStyle,
|
|
2571
|
+
"--tree-indent": `${indent}px`
|
|
2572
|
+
};
|
|
2573
|
+
return /* @__PURE__ */ jsx(TreeContext.Provider, {
|
|
2574
|
+
value: {
|
|
2575
|
+
indent,
|
|
2576
|
+
tree
|
|
2577
|
+
},
|
|
2578
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
2579
|
+
className: cn("flex flex-col", className),
|
|
2580
|
+
"data-slot": "tree",
|
|
2581
|
+
style: mergedStyle,
|
|
2582
|
+
...otherProps
|
|
2583
|
+
})
|
|
2584
|
+
});
|
|
2585
|
+
}
|
|
2586
|
+
const ACTIVATION_KEYS = new Set([
|
|
2587
|
+
"Enter",
|
|
2588
|
+
" ",
|
|
2589
|
+
"Spacebar"
|
|
2590
|
+
]);
|
|
2591
|
+
function TreeItem({ item, className, children, onActivate, onClick: userOnClick, onKeyDown: userOnKeyDown, style: userStyle, ...props }) {
|
|
2592
|
+
const { indent } = useTreeContext();
|
|
2593
|
+
const { style: itemStyle, onClick: _headlessOnClick, ...restItemProps } = typeof item.getProps === "function" ? item.getProps() : {};
|
|
2594
|
+
const activate = () => {
|
|
2595
|
+
if (typeof item.setFocused === "function") item.setFocused();
|
|
2596
|
+
if (onActivate) onActivate(item);
|
|
2597
|
+
else {
|
|
2598
|
+
if (typeof item.primaryAction === "function") item.primaryAction();
|
|
2599
|
+
if (typeof item.isFolder === "function" && item.isFolder()) item.isExpanded() ? item.collapse() : item.expand();
|
|
2600
|
+
}
|
|
2601
|
+
};
|
|
2602
|
+
const handleClick = (event) => {
|
|
2603
|
+
userOnClick?.(event);
|
|
2604
|
+
if (event.defaultPrevented) return;
|
|
2605
|
+
if (event.target.closest("button, [role=\"checkbox\"], input, a")) return;
|
|
2606
|
+
activate();
|
|
2607
|
+
};
|
|
2608
|
+
const handleKeyDown = (event) => {
|
|
2609
|
+
userOnKeyDown?.(event);
|
|
2610
|
+
if (event.defaultPrevented) return;
|
|
2611
|
+
if (event.target !== event.currentTarget) return;
|
|
2612
|
+
if (ACTIVATION_KEYS.has(event.key)) {
|
|
2613
|
+
event.preventDefault();
|
|
2614
|
+
activate();
|
|
2615
|
+
}
|
|
2616
|
+
};
|
|
2617
|
+
const mergedStyle = {
|
|
2618
|
+
...userStyle,
|
|
2619
|
+
...itemStyle,
|
|
2620
|
+
"--tree-padding": `${item.getItemMeta().level * indent}px`
|
|
2621
|
+
};
|
|
2622
|
+
return /* @__PURE__ */ jsx(TreeContext.Provider, {
|
|
2623
|
+
value: {
|
|
2624
|
+
currentItem: item,
|
|
2625
|
+
indent
|
|
2626
|
+
},
|
|
2627
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
2628
|
+
role: "treeitem",
|
|
2629
|
+
className: cn("relative z-10 flex w-full cursor-pointer items-center gap-1.5 rounded-sm px-2 py-1.5 text-start text-sm transition-colors not-last:mb-0.5 outline-hidden select-none hover:bg-accent/50 focus:z-20 focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[drag-target=true]:bg-accent data-[search-match=true]:bg-blue-400/20! data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
|
|
2630
|
+
"data-drag-target": typeof item.isDragTarget === "function" ? item.isDragTarget() || false : void 0,
|
|
2631
|
+
"data-focus": typeof item.isFocused === "function" ? item.isFocused() || false : void 0,
|
|
2632
|
+
"data-folder": typeof item.isFolder === "function" ? item.isFolder() || false : void 0,
|
|
2633
|
+
"data-search-match": typeof item.isMatchingSearch === "function" ? item.isMatchingSearch() || false : void 0,
|
|
2634
|
+
"data-selected": typeof item.isSelected === "function" ? item.isSelected() || false : void 0,
|
|
2635
|
+
"data-slot": "tree-item",
|
|
2636
|
+
style: mergedStyle,
|
|
2637
|
+
...restItemProps,
|
|
2638
|
+
onClick: handleClick,
|
|
2639
|
+
onKeyDown: handleKeyDown,
|
|
2640
|
+
...props,
|
|
2641
|
+
children
|
|
2642
|
+
})
|
|
2643
|
+
});
|
|
2644
|
+
}
|
|
2645
|
+
function TreeItemLabel({ item: propItem, children, className, ...props }) {
|
|
2646
|
+
const { currentItem } = useTreeContext();
|
|
2647
|
+
const item = propItem || currentItem;
|
|
2648
|
+
if (!item) {
|
|
2649
|
+
console.warn("TreeItemLabel: No item provided via props or context");
|
|
2650
|
+
return null;
|
|
2651
|
+
}
|
|
2652
|
+
const isFolder = typeof item.isFolder === "function" && item.isFolder();
|
|
2653
|
+
const isExpanded = typeof item.isExpanded === "function" && item.isExpanded();
|
|
2654
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
2655
|
+
className: cn("flex flex-1 items-center gap-1 ps-(--tree-padding) text-start", className),
|
|
2656
|
+
"data-slot": "tree-item-label",
|
|
2657
|
+
...props,
|
|
2658
|
+
children: [isFolder ? /* @__PURE__ */ jsx(Button, {
|
|
2659
|
+
"aria-label": isExpanded ? "Collapse" : "Expand",
|
|
2660
|
+
className: "shrink-0 text-muted-foreground",
|
|
2661
|
+
onClick: (event) => {
|
|
2662
|
+
event.stopPropagation();
|
|
2663
|
+
if (isExpanded) item.collapse();
|
|
2664
|
+
else item.expand();
|
|
2665
|
+
},
|
|
2666
|
+
size: "icon-sm",
|
|
2667
|
+
tabIndex: -1,
|
|
2668
|
+
variant: "ghost",
|
|
2669
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", !isExpanded && "-rotate-90") })
|
|
2670
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
2671
|
+
"aria-hidden": "true",
|
|
2672
|
+
className: "size-6 shrink-0"
|
|
2673
|
+
}), children || (typeof item.getItemName === "function" ? item.getItemName() : null)]
|
|
2674
|
+
});
|
|
2675
|
+
}
|
|
2676
|
+
function TreeDragLine({ className, ...props }) {
|
|
2677
|
+
const { tree } = useTreeContext();
|
|
2678
|
+
if (!tree || typeof tree.getDragLineStyle !== "function") {
|
|
2679
|
+
console.warn("TreeDragLine: No tree provided via context or tree does not have getDragLineStyle method");
|
|
2680
|
+
return null;
|
|
2681
|
+
}
|
|
2682
|
+
const dragLine = tree.getDragLineStyle();
|
|
2683
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2684
|
+
className: cn("-mt-px absolute z-30 h-0.5 w-[unset] bg-primary before:absolute before:-top-[3px] before:left-0 before:size-2 before:rounded-full before:border-2 before:border-primary before:bg-background", className),
|
|
2685
|
+
style: dragLine,
|
|
2686
|
+
...props
|
|
2687
|
+
});
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2690
|
+
//#endregion
|
|
2691
|
+
//#region src/components/data-tree.tsx
|
|
2692
|
+
const ROOT_ID = "__data_tree_root__";
|
|
2693
|
+
/** Bridges headless-tree's `SetStateFn` (value-or-updater) onto a plain setter. */
|
|
2694
|
+
function applyUpdater(updaterOrValue, prev) {
|
|
2695
|
+
return typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
|
|
2696
|
+
}
|
|
2697
|
+
function buildIndex(items, getKey, getChildren) {
|
|
2698
|
+
const data = /* @__PURE__ */ new Map();
|
|
2699
|
+
const children = /* @__PURE__ */ new Map();
|
|
2700
|
+
const walk = (nodes) => {
|
|
2701
|
+
const ids = [];
|
|
2702
|
+
for (const node of nodes) {
|
|
2703
|
+
const key = getKey(node);
|
|
2704
|
+
data.set(key, node);
|
|
2705
|
+
ids.push(key);
|
|
2706
|
+
const kids = getChildren?.(node);
|
|
2707
|
+
if (kids && kids.length > 0) children.set(key, walk(kids));
|
|
2708
|
+
}
|
|
2709
|
+
return ids;
|
|
2710
|
+
};
|
|
2711
|
+
return {
|
|
2712
|
+
data,
|
|
2713
|
+
children,
|
|
2714
|
+
roots: walk(items)
|
|
2715
|
+
};
|
|
2716
|
+
}
|
|
2717
|
+
function DataTree(componentProps) {
|
|
2718
|
+
const { items, getKey, getLabel, getChildren, getIcon, getTextValue, selectionMode = "none", selectedKeys, defaultSelectedKeys = [], onSelectionChange, expandedKeys, defaultExpandedKeys = [], onExpandedChange, indent = 20, className, "aria-label": ariaLabel } = componentProps;
|
|
2719
|
+
const selectable = selectionMode !== "none";
|
|
2720
|
+
const multiple = selectionMode === "multiple";
|
|
2721
|
+
const index = React.useMemo(() => buildIndex(items, getKey, getChildren), [
|
|
2722
|
+
items,
|
|
2723
|
+
getKey,
|
|
2724
|
+
getChildren
|
|
2725
|
+
]);
|
|
2726
|
+
const [expandedItems = [], setExpandedState] = useControllableState({
|
|
2727
|
+
prop: expandedKeys,
|
|
2728
|
+
defaultProp: defaultExpandedKeys,
|
|
2729
|
+
onChange: onExpandedChange
|
|
2730
|
+
});
|
|
2731
|
+
const [selectedItems = [], setSelectedState] = useControllableState({
|
|
2732
|
+
prop: selectedKeys,
|
|
2733
|
+
defaultProp: defaultSelectedKeys,
|
|
2734
|
+
onChange: onSelectionChange
|
|
2735
|
+
});
|
|
2736
|
+
const setExpandedItems = (next) => setExpandedState((prev) => applyUpdater(next, prev ?? []));
|
|
2737
|
+
const setSelectedItems = (next) => setSelectedState((prev) => applyUpdater(next, prev ?? []));
|
|
2738
|
+
const tree = useTree({
|
|
2739
|
+
rootItemId: ROOT_ID,
|
|
2740
|
+
getItemName: (item) => {
|
|
2741
|
+
const id = item.getId();
|
|
2742
|
+
if (id === ROOT_ID) return "";
|
|
2743
|
+
const node = index.data.get(id);
|
|
2744
|
+
if (!node) return id;
|
|
2745
|
+
if (getTextValue) return getTextValue(node);
|
|
2746
|
+
const label = getLabel(node);
|
|
2747
|
+
return typeof label === "string" ? label : id;
|
|
2748
|
+
},
|
|
2749
|
+
isItemFolder: (item) => (index.children.get(item.getId())?.length ?? 0) > 0,
|
|
2750
|
+
dataLoader: {
|
|
2751
|
+
getItem: (id) => id === ROOT_ID ? void 0 : index.data.get(id),
|
|
2752
|
+
getChildren: (id) => id === ROOT_ID ? index.roots : index.children.get(id) ?? []
|
|
2753
|
+
},
|
|
2754
|
+
indent,
|
|
2755
|
+
state: {
|
|
2756
|
+
expandedItems,
|
|
2757
|
+
...multiple ? { checkedItems: selectedItems } : selectable ? { selectedItems } : {}
|
|
2758
|
+
},
|
|
2759
|
+
setExpandedItems,
|
|
2760
|
+
...multiple ? { setCheckedItems: setSelectedItems } : selectable ? { setSelectedItems } : {},
|
|
2761
|
+
features: [
|
|
2762
|
+
syncDataLoaderFeature,
|
|
2763
|
+
...selectable ? [selectionFeature] : [],
|
|
2764
|
+
...multiple ? [checkboxesFeature] : [],
|
|
2765
|
+
hotkeysCoreFeature
|
|
2766
|
+
]
|
|
2767
|
+
});
|
|
2768
|
+
const renderLabel = (item) => {
|
|
2769
|
+
const node = index.data.get(item.getId());
|
|
2770
|
+
if (!node) return /* @__PURE__ */ jsx(TreeItemLabel, {});
|
|
2771
|
+
const label = getLabel(node);
|
|
2772
|
+
if (!getIcon) return /* @__PURE__ */ jsx(TreeItemLabel, { children: label });
|
|
2773
|
+
return /* @__PURE__ */ jsx(TreeItemLabel, { children: /* @__PURE__ */ jsxs("span", {
|
|
2774
|
+
className: "flex items-center gap-2",
|
|
2775
|
+
children: [getIcon(node, {
|
|
2776
|
+
isFolder: item.isFolder(),
|
|
2777
|
+
isExpanded: item.isExpanded()
|
|
2778
|
+
}) ?? /* @__PURE__ */ jsx("span", {
|
|
2779
|
+
"aria-hidden": "true",
|
|
2780
|
+
className: "size-4 shrink-0"
|
|
2781
|
+
}), label]
|
|
2782
|
+
}) });
|
|
2783
|
+
};
|
|
2784
|
+
return /* @__PURE__ */ jsx(Tree, {
|
|
2785
|
+
"aria-label": ariaLabel,
|
|
2786
|
+
className,
|
|
2787
|
+
indent,
|
|
2788
|
+
tree,
|
|
2789
|
+
children: tree.getItems().map((item) => {
|
|
2790
|
+
const checkedState = multiple ? item.getCheckedState() : void 0;
|
|
2791
|
+
return /* @__PURE__ */ jsxs(TreeItem, {
|
|
2792
|
+
item,
|
|
2793
|
+
onActivate: multiple ? () => item.toggleCheckedState() : selectable ? () => item.select() : void 0,
|
|
2794
|
+
children: [multiple ? /* @__PURE__ */ jsx(Checkbox, {
|
|
2795
|
+
"aria-label": item.getItemName(),
|
|
2796
|
+
checked: checkedState === "checked",
|
|
2797
|
+
indeterminate: checkedState === "indeterminate",
|
|
2798
|
+
onClick: (event) => event.stopPropagation(),
|
|
2799
|
+
onCheckedChange: (checked) => item.getCheckboxProps().onChange?.({ target: { checked } })
|
|
2800
|
+
}) : null, renderLabel(item)]
|
|
2801
|
+
}, item.getId());
|
|
2802
|
+
})
|
|
2803
|
+
});
|
|
2804
|
+
}
|
|
2805
|
+
|
|
2306
2806
|
//#endregion
|
|
2307
2807
|
//#region src/components/drawer.tsx
|
|
2308
2808
|
const DrawerContext = createContext({ position: "bottom" });
|
|
@@ -2323,42 +2823,56 @@ function Drawer({ swipeDirection, position = "bottom", ...props }) {
|
|
|
2323
2823
|
});
|
|
2324
2824
|
}
|
|
2325
2825
|
const DrawerPortal = DrawerPrimitive.Portal;
|
|
2326
|
-
|
|
2826
|
+
const DrawerTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
2327
2827
|
return /* @__PURE__ */ jsx(DrawerPrimitive.Trigger, {
|
|
2828
|
+
ref: forwardRef,
|
|
2328
2829
|
"data-slot": "drawer-trigger",
|
|
2329
|
-
...
|
|
2830
|
+
...componentProps
|
|
2330
2831
|
});
|
|
2331
|
-
}
|
|
2332
|
-
|
|
2832
|
+
});
|
|
2833
|
+
DrawerTrigger.displayName = "DrawerTrigger";
|
|
2834
|
+
const DrawerClose = React.forwardRef((componentProps, forwardRef) => {
|
|
2333
2835
|
return /* @__PURE__ */ jsx(DrawerPrimitive.Close, {
|
|
2836
|
+
ref: forwardRef,
|
|
2334
2837
|
"data-slot": "drawer-close",
|
|
2335
|
-
...
|
|
2838
|
+
...componentProps
|
|
2336
2839
|
});
|
|
2337
|
-
}
|
|
2338
|
-
|
|
2840
|
+
});
|
|
2841
|
+
DrawerClose.displayName = "DrawerClose";
|
|
2842
|
+
const DrawerSwipeArea = React.forwardRef((componentProps, forwardRef) => {
|
|
2843
|
+
const { className, position: positionProp, ...props } = componentProps;
|
|
2339
2844
|
const { position: contextPosition } = useContext(DrawerContext);
|
|
2340
2845
|
const position = positionProp ?? contextPosition;
|
|
2341
2846
|
return /* @__PURE__ */ jsx(DrawerPrimitive.SwipeArea, {
|
|
2847
|
+
ref: forwardRef,
|
|
2342
2848
|
className: cn("fixed z-50 touch-none", position === "bottom" && "inset-x-0 bottom-0 h-8", position === "top" && "inset-x-0 top-0 h-8", position === "left" && "inset-y-0 left-0 w-8", position === "right" && "inset-y-0 right-0 w-8", className),
|
|
2343
2849
|
"data-slot": "drawer-swipe-area",
|
|
2344
2850
|
...props
|
|
2345
2851
|
});
|
|
2346
|
-
}
|
|
2347
|
-
|
|
2852
|
+
});
|
|
2853
|
+
DrawerSwipeArea.displayName = "DrawerSwipeArea";
|
|
2854
|
+
const DrawerBackdrop = React.forwardRef((componentProps, forwardRef) => {
|
|
2855
|
+
const { className, inContainer, ...props } = componentProps;
|
|
2348
2856
|
return /* @__PURE__ */ jsx(DrawerPrimitive.Backdrop, {
|
|
2857
|
+
ref: forwardRef,
|
|
2349
2858
|
className: cn("inset-0 z-50 bg-black/10 opacity-[calc(1-var(--drawer-swipe-progress))] backdrop-blur-sm transition-opacity duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-swiping:duration-0 supports-[-webkit-touch-callout:none]:absolute", inContainer ? "absolute" : "fixed", className),
|
|
2350
2859
|
"data-slot": "drawer-backdrop",
|
|
2351
2860
|
...props
|
|
2352
2861
|
});
|
|
2353
|
-
}
|
|
2354
|
-
|
|
2862
|
+
});
|
|
2863
|
+
DrawerBackdrop.displayName = "DrawerBackdrop";
|
|
2864
|
+
const DrawerViewport = React.forwardRef((componentProps, forwardRef) => {
|
|
2865
|
+
const { className, position, variant = "default", inContainer, ...props } = componentProps;
|
|
2355
2866
|
return /* @__PURE__ */ jsx(DrawerPrimitive.Viewport, {
|
|
2867
|
+
ref: forwardRef,
|
|
2356
2868
|
className: cn("inset-0 z-50 [--bleed:--spacing(12)] [--inset:--spacing(0)]", inContainer ? "absolute" : "fixed", "touch-none", position === "bottom" && "grid grid-rows-[1fr_auto] pt-12", position === "top" && "grid grid-rows-[auto_1fr] pb-12", position === "left" && "flex justify-start", position === "right" && "flex justify-end", variant === "inset" && "px-(--inset) sm:[--inset:--spacing(4)]", variant === "inset" && position !== "bottom" && "pt-(--inset)", variant === "inset" && position !== "top" && "pb-(--inset)", className),
|
|
2357
2869
|
"data-slot": "drawer-viewport",
|
|
2358
2870
|
...props
|
|
2359
2871
|
});
|
|
2360
|
-
}
|
|
2361
|
-
|
|
2872
|
+
});
|
|
2873
|
+
DrawerViewport.displayName = "DrawerViewport";
|
|
2874
|
+
const DrawerPopup = React.forwardRef((componentProps, forwardRef) => {
|
|
2875
|
+
const { className, children, showCloseButton = false, position: positionProp, variant = "default", showBar = false, container, ...props } = componentProps;
|
|
2362
2876
|
const { position: contextPosition } = useContext(DrawerContext);
|
|
2363
2877
|
const position = positionProp ?? contextPosition;
|
|
2364
2878
|
const inContainer = !!container;
|
|
@@ -2369,6 +2883,7 @@ function DrawerPopup({ className, children, showCloseButton = false, position: p
|
|
|
2369
2883
|
variant,
|
|
2370
2884
|
inContainer,
|
|
2371
2885
|
children: /* @__PURE__ */ jsxs(DrawerPrimitive.Popup, {
|
|
2886
|
+
ref: forwardRef,
|
|
2372
2887
|
className: cn("relative flex max-h-full min-h-0 w-full min-w-0 flex-col bg-popover not-dark:bg-clip-padding text-popover-foreground shadow-lg/5 outline-none transition-[transform,box-shadow,height,background-color] duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] will-change-transform [--peek:calc(--spacing(6)-1px)] [--scale-base:calc(max(0,1-(var(--nested-drawers)*var(--stack-step))))] [--scale:clamp(0,calc(var(--scale-base)+(var(--stack-step)*var(--stack-progress))),1)] [--shrink:calc(1-var(--scale))] [--stack-peek-offset:max(0px,calc((var(--nested-drawers)-var(--stack-progress))*var(--peek)))] [--stack-progress:clamp(0,var(--drawer-swipe-progress),1)] [--stack-step:0.05] before:pointer-events-none before:absolute before:inset-0 before:shadow-[0_1px_--theme(--color-black/4%)] after:pointer-events-none after:absolute after:bg-popover data-swiping:select-none data-nested-drawer-open:overflow-hidden data-nested-drawer-open:bg-[color-mix(in_srgb,var(--popover),var(--color-black)_calc(2%*(var(--nested-drawers)-var(--stack-progress))))] data-ending-style:shadow-transparent data-starting-style:shadow-transparent data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] dark:data-nested-drawer-open:bg-[color-mix(in_srgb,var(--popover),var(--color-black)_calc(6%*(var(--nested-drawers)-var(--stack-progress))))] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]", "touch-none", position === "bottom" && "transform-[translateY(calc(var(--drawer-snap-point-offset)+var(--drawer-swipe-movement-y)))] data-ending-style:transform-[translateY(calc(100%+env(safe-area-inset-bottom,0px)+var(--inset)))] data-starting-style:transform-[translateY(calc(100%+env(safe-area-inset-bottom,0px)+var(--inset)))] row-start-2 -mb-[max(0px,calc(var(--drawer-snap-point-offset,0px)+clamp(0,1,var(--drawer-snap-point-offset,0px)/1px)*var(--drawer-swipe-movement-y,0px)))] border-t pb-[max(0px,calc(env(safe-area-inset-bottom,0px)+var(--drawer-snap-point-offset,0px)+clamp(0,1,var(--drawer-snap-point-offset,0px)/1px)*var(--drawer-swipe-movement-y,0px)))] not-data-starting-style:not-data-ending-style:transition-[transform,box-shadow,height,background-color,margin,padding] after:inset-x-0 after:top-full after:h-(--bleed) has-data-[slot=drawer-bar]:pt-2 data-ending-style:mb-0 data-starting-style:mb-0 data-ending-style:pb-0 data-starting-style:pb-0", position === "top" && "data-starting-style:transform-[translateY(calc(-100%-var(--inset)))] data-ending-style:transform-[translateY(calc(-100%-var(--inset)))] transform-[translateY(var(--drawer-swipe-movement-y))] border-b after:inset-x-0 after:bottom-full after:h-(--bleed) has-data-[slot=drawer-bar]:pb-2", position === "left" && "data-starting-style:transform-[translateX(calc(-100%-var(--inset)))] data-ending-style:transform-[translateX(calc(-100%-var(--inset)))] transform-[translateX(var(--drawer-swipe-movement-x))] w-[calc(100%-(--spacing(12)))] max-w-md border-e after:inset-y-0 after:end-full after:w-(--bleed) has-data-[slot=drawer-bar]:pe-2", position === "right" && "transform-[translateX(var(--drawer-swipe-movement-x))] data-ending-style:transform-[translateX(calc(100%+var(--inset)))] data-starting-style:transform-[translateX(calc(100%+var(--inset)))] col-start-2 w-[calc(100%-(--spacing(12)))] max-w-md border-s after:inset-y-0 after:start-full after:w-(--bleed) has-data-[slot=drawer-bar]:ps-2", variant !== "straight" && cn(position === "bottom" && "rounded-t-2xl", position === "top" && "rounded-b-2xl **:data-[slot=drawer-footer]:rounded-b-[calc(var(--radius-2xl)-1px)]", position === "left" && "rounded-e-2xl **:data-[slot=drawer-footer]:rounded-ee-[calc(var(--radius-2xl)-1px)]", position === "right" && "rounded-s-2xl **:data-[slot=drawer-footer]:rounded-es-[calc(var(--radius-2xl)-1px)]"), variant === "default" && cn(position === "bottom" && "before:rounded-t-[calc(var(--radius-2xl)-1px)]", position === "top" && "before:rounded-b-[calc(var(--radius-2xl)-1px)]", position === "left" && "before:rounded-e-[calc(var(--radius-2xl)-1px)]", position === "right" && "before:rounded-s-[calc(var(--radius-2xl)-1px)]"), variant === "inset" && "before:hidden sm:rounded-2xl sm:border sm:after:bg-transparent sm:before:rounded-[calc(var(--radius-2xl)-1px)] sm:**:data-[slot=drawer-footer]:rounded-b-[calc(var(--radius-2xl)-1px)]", variant === "straight" && "[--stack-step:0]", (position === "bottom" || position === "top") && "h-(--drawer-height,auto) [--height:max(0px,calc(var(--drawer-frontmost-height,var(--drawer-height))))] data-nested-drawer-open:h-(--height)", position === "bottom" && "data-nested-drawer-open:transform-[translateY(calc(var(--drawer-swipe-movement-y)-var(--stack-peek-offset)-(var(--shrink)*var(--height))))_scale(var(--scale))] origin-[50%_calc(100%-var(--inset))]", position === "top" && "data-nested-drawer-open:transform-[translateY(calc(var(--drawer-swipe-movement-y)+var(--stack-peek-offset)+(var(--shrink)*var(--height))))_scale(var(--scale))] origin-[50%_var(--inset)]", position === "left" && "data-nested-drawer-open:transform-[translateX(calc(var(--drawer-swipe-movement-x)+var(--stack-peek-offset)))_scale(var(--scale))] origin-right", position === "right" && "data-nested-drawer-open:transform-[translateX(calc(var(--drawer-swipe-movement-x)-var(--stack-peek-offset)))_scale(var(--scale))] origin-left", className),
|
|
2373
2888
|
"data-slot": "drawer-popup",
|
|
2374
2889
|
...props,
|
|
@@ -2388,46 +2903,61 @@ function DrawerPopup({ className, children, showCloseButton = false, position: p
|
|
|
2388
2903
|
})
|
|
2389
2904
|
})]
|
|
2390
2905
|
});
|
|
2391
|
-
}
|
|
2392
|
-
|
|
2906
|
+
});
|
|
2907
|
+
DrawerPopup.displayName = "DrawerPopup";
|
|
2908
|
+
const DrawerHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
2909
|
+
const { className, allowSelection = false, render, ...props } = componentProps;
|
|
2393
2910
|
return useRender({
|
|
2394
2911
|
defaultTagName: "div",
|
|
2395
2912
|
props: mergeProps({
|
|
2396
2913
|
className: cn("flex flex-col gap-2 p-6 in-[[data-slot=drawer-popup]:has([data-slot=drawer-panel])]:pb-3 max-sm:pb-4", !allowSelection && "cursor-default", className),
|
|
2914
|
+
ref: forwardRef,
|
|
2397
2915
|
"data-slot": "drawer-header"
|
|
2398
2916
|
}, props),
|
|
2399
2917
|
render: allowSelection ? /* @__PURE__ */ jsx(DrawerContent, { render }) : render
|
|
2400
2918
|
});
|
|
2401
|
-
}
|
|
2402
|
-
|
|
2919
|
+
});
|
|
2920
|
+
DrawerHeader.displayName = "DrawerHeader";
|
|
2921
|
+
const DrawerFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
2922
|
+
const { className, variant = "default", allowSelection = true, render, ...props } = componentProps;
|
|
2403
2923
|
return useRender({
|
|
2404
2924
|
defaultTagName: "div",
|
|
2405
2925
|
props: mergeProps({
|
|
2406
2926
|
className: cn("flex flex-col-reverse gap-2 px-6 pb-(--safe-area-inset-bottom,0px) sm:flex-row sm:justify-end", !allowSelection && "cursor-default", variant === "default" && "border-t bg-muted/72 pt-4 pb-[calc(env(safe-area-inset-bottom,0px)+--spacing(4))]", variant === "bare" && "in-[[data-slot=drawer-popup]:has([data-slot=drawer-panel])]:pt-3 pt-4 pb-[calc(env(safe-area-inset-bottom,0px)+--spacing(6))]", className),
|
|
2927
|
+
ref: forwardRef,
|
|
2407
2928
|
"data-slot": "drawer-footer"
|
|
2408
2929
|
}, props),
|
|
2409
2930
|
render: allowSelection ? /* @__PURE__ */ jsx(DrawerContent, { render }) : render
|
|
2410
2931
|
});
|
|
2411
|
-
}
|
|
2412
|
-
|
|
2932
|
+
});
|
|
2933
|
+
DrawerFooter.displayName = "DrawerFooter";
|
|
2934
|
+
const DrawerTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
2935
|
+
const { className, ...props } = componentProps;
|
|
2413
2936
|
return /* @__PURE__ */ jsx(DrawerPrimitive.Title, {
|
|
2937
|
+
ref: forwardRef,
|
|
2414
2938
|
className: cn("font-heading font-semibold text-xl leading-none", className),
|
|
2415
2939
|
"data-slot": "drawer-title",
|
|
2416
2940
|
...props
|
|
2417
2941
|
});
|
|
2418
|
-
}
|
|
2419
|
-
|
|
2942
|
+
});
|
|
2943
|
+
DrawerTitle.displayName = "DrawerTitle";
|
|
2944
|
+
const DrawerDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
2945
|
+
const { className, ...props } = componentProps;
|
|
2420
2946
|
return /* @__PURE__ */ jsx(DrawerPrimitive.Description, {
|
|
2947
|
+
ref: forwardRef,
|
|
2421
2948
|
className: cn("text-muted-foreground text-sm", className),
|
|
2422
2949
|
"data-slot": "drawer-description",
|
|
2423
2950
|
...props
|
|
2424
2951
|
});
|
|
2425
|
-
}
|
|
2426
|
-
|
|
2952
|
+
});
|
|
2953
|
+
DrawerDescription.displayName = "DrawerDescription";
|
|
2954
|
+
const DrawerPanel = React.forwardRef((componentProps, forwardRef) => {
|
|
2955
|
+
const { className, scrollFade = true, scrollable = true, allowSelection = true, render, ...props } = componentProps;
|
|
2427
2956
|
const content = useRender({
|
|
2428
2957
|
defaultTagName: "div",
|
|
2429
2958
|
props: mergeProps({
|
|
2430
2959
|
className: cn("p-6 in-[[data-slot=drawer-popup]:has([data-slot=drawer-header])]:pt-1 in-[[data-slot=drawer-popup]:has([data-slot=drawer-footer]:not(.border-t))]:pb-1", !allowSelection && "cursor-default", className),
|
|
2960
|
+
ref: forwardRef,
|
|
2431
2961
|
"data-slot": "drawer-panel"
|
|
2432
2962
|
}, props),
|
|
2433
2963
|
render: allowSelection ? /* @__PURE__ */ jsx(DrawerContent, { render }) : render
|
|
@@ -2438,8 +2968,10 @@ function DrawerPanel({ className, scrollFade = true, scrollable = true, allowSel
|
|
|
2438
2968
|
children: content
|
|
2439
2969
|
});
|
|
2440
2970
|
return content;
|
|
2441
|
-
}
|
|
2442
|
-
|
|
2971
|
+
});
|
|
2972
|
+
DrawerPanel.displayName = "DrawerPanel";
|
|
2973
|
+
const DrawerBar = React.forwardRef((componentProps, forwardRef) => {
|
|
2974
|
+
const { className, position: positionProp, render, ...props } = componentProps;
|
|
2443
2975
|
const { position: contextPosition } = useContext(DrawerContext);
|
|
2444
2976
|
const position = positionProp ?? contextPosition;
|
|
2445
2977
|
const horizontal = position === "left" || position === "right";
|
|
@@ -2448,27 +2980,34 @@ function DrawerBar({ className, position: positionProp, render, ...props }) {
|
|
|
2448
2980
|
props: mergeProps({
|
|
2449
2981
|
"aria-hidden": true,
|
|
2450
2982
|
className: cn("absolute flex touch-none items-center justify-center p-3 before:rounded-full before:bg-input", horizontal ? "inset-y-0 before:h-12 before:w-1" : "inset-x-0 before:h-1 before:w-12", position === "top" && "bottom-0", position === "bottom" && "top-0", position === "left" && "right-0", position === "right" && "left-0", className),
|
|
2983
|
+
ref: forwardRef,
|
|
2451
2984
|
"data-slot": "drawer-bar"
|
|
2452
2985
|
}, props),
|
|
2453
2986
|
render
|
|
2454
2987
|
});
|
|
2455
|
-
}
|
|
2988
|
+
});
|
|
2989
|
+
DrawerBar.displayName = "DrawerBar";
|
|
2456
2990
|
const DrawerContent = DrawerPrimitive.Content;
|
|
2457
|
-
|
|
2991
|
+
const DrawerMenu = React.forwardRef((componentProps, forwardRef) => {
|
|
2992
|
+
const { className, render, ...props } = componentProps;
|
|
2458
2993
|
return useRender({
|
|
2459
2994
|
defaultTagName: "nav",
|
|
2460
2995
|
props: mergeProps({
|
|
2461
2996
|
className: cn("-m-2 flex flex-col", className),
|
|
2997
|
+
ref: forwardRef,
|
|
2462
2998
|
"data-slot": "drawer-menu"
|
|
2463
2999
|
}, props),
|
|
2464
3000
|
render
|
|
2465
3001
|
});
|
|
2466
|
-
}
|
|
2467
|
-
|
|
3002
|
+
});
|
|
3003
|
+
DrawerMenu.displayName = "DrawerMenu";
|
|
3004
|
+
const DrawerMenuItem = React.forwardRef((componentProps, forwardRef) => {
|
|
3005
|
+
const { className, variant = "default", render, disabled, ...props } = componentProps;
|
|
2468
3006
|
return useRender({
|
|
2469
3007
|
defaultTagName: "button",
|
|
2470
3008
|
props: mergeProps({
|
|
2471
3009
|
className: cn("flex min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-64 data-[variant=destructive]:text-destructive-foreground sm:min-h-8 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0", className),
|
|
3010
|
+
ref: forwardRef,
|
|
2472
3011
|
"data-slot": "drawer-menu-item",
|
|
2473
3012
|
"data-variant": variant,
|
|
2474
3013
|
disabled,
|
|
@@ -2476,47 +3015,62 @@ function DrawerMenuItem({ className, variant = "default", render, disabled, ...p
|
|
|
2476
3015
|
}, props),
|
|
2477
3016
|
render
|
|
2478
3017
|
});
|
|
2479
|
-
}
|
|
2480
|
-
|
|
3018
|
+
});
|
|
3019
|
+
DrawerMenuItem.displayName = "DrawerMenuItem";
|
|
3020
|
+
const DrawerMenuSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
3021
|
+
const { className, render, ...props } = componentProps;
|
|
2481
3022
|
return useRender({
|
|
2482
3023
|
defaultTagName: "div",
|
|
2483
3024
|
props: mergeProps({
|
|
2484
3025
|
className: cn("mx-2 my-1 h-px bg-border", className),
|
|
3026
|
+
ref: forwardRef,
|
|
2485
3027
|
"data-slot": "drawer-menu-separator"
|
|
2486
3028
|
}, props),
|
|
2487
3029
|
render
|
|
2488
3030
|
});
|
|
2489
|
-
}
|
|
2490
|
-
|
|
3031
|
+
});
|
|
3032
|
+
DrawerMenuSeparator.displayName = "DrawerMenuSeparator";
|
|
3033
|
+
const DrawerMenuGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
3034
|
+
const { className, render, ...props } = componentProps;
|
|
2491
3035
|
return useRender({
|
|
2492
3036
|
defaultTagName: "div",
|
|
2493
3037
|
props: mergeProps({
|
|
2494
3038
|
className: cn("flex flex-col", className),
|
|
3039
|
+
ref: forwardRef,
|
|
2495
3040
|
"data-slot": "drawer-menu-group"
|
|
2496
3041
|
}, props),
|
|
2497
3042
|
render
|
|
2498
3043
|
});
|
|
2499
|
-
}
|
|
2500
|
-
|
|
3044
|
+
});
|
|
3045
|
+
DrawerMenuGroup.displayName = "DrawerMenuGroup";
|
|
3046
|
+
const DrawerMenuGroupLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
3047
|
+
const { className, render, ...props } = componentProps;
|
|
2501
3048
|
return useRender({
|
|
2502
3049
|
defaultTagName: "div",
|
|
2503
3050
|
props: mergeProps({
|
|
2504
3051
|
className: cn("px-2 py-1.5 font-medium text-muted-foreground text-xs", className),
|
|
3052
|
+
ref: forwardRef,
|
|
2505
3053
|
"data-slot": "drawer-menu-group-label"
|
|
2506
3054
|
}, props),
|
|
2507
3055
|
render
|
|
2508
3056
|
});
|
|
2509
|
-
}
|
|
2510
|
-
|
|
3057
|
+
});
|
|
3058
|
+
DrawerMenuGroupLabel.displayName = "DrawerMenuGroupLabel";
|
|
3059
|
+
const DrawerMenuTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
3060
|
+
const { className, children, ...props } = componentProps;
|
|
2511
3061
|
return /* @__PURE__ */ jsxs(DrawerTrigger, {
|
|
3062
|
+
ref: forwardRef,
|
|
2512
3063
|
className: cn("flex min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground sm:min-h-8 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
|
|
2513
3064
|
"data-slot": "drawer-menu-trigger",
|
|
2514
3065
|
...props,
|
|
2515
3066
|
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ms-auto -me-0.5 opacity-80" })]
|
|
2516
3067
|
});
|
|
2517
|
-
}
|
|
2518
|
-
|
|
3068
|
+
});
|
|
3069
|
+
DrawerMenuTrigger.displayName = "DrawerMenuTrigger";
|
|
3070
|
+
const DrawerMenuCheckboxItem = React.forwardRef((componentProps, forwardRef) => {
|
|
3071
|
+
const { className, children, checked, defaultChecked, onCheckedChange, variant = "default", disabled, render, ...props } = componentProps;
|
|
2519
3072
|
return /* @__PURE__ */ jsx(Checkbox$1.Root, {
|
|
3073
|
+
ref: forwardRef,
|
|
2520
3074
|
checked,
|
|
2521
3075
|
className: cn("grid min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-64 sm:min-h-8 sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0", variant === "switch" ? "grid-cols-[1fr_auto] gap-4 pe-1.5" : "grid-cols-[1rem_1fr] pe-4", className),
|
|
2522
3076
|
"data-slot": "drawer-menu-checkbox-item",
|
|
@@ -2551,16 +3105,22 @@ function DrawerMenuCheckboxItem({ className, children, checked, defaultChecked,
|
|
|
2551
3105
|
children
|
|
2552
3106
|
})] })
|
|
2553
3107
|
});
|
|
2554
|
-
}
|
|
2555
|
-
|
|
3108
|
+
});
|
|
3109
|
+
DrawerMenuCheckboxItem.displayName = "DrawerMenuCheckboxItem";
|
|
3110
|
+
const DrawerMenuRadioGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
3111
|
+
const { className, ...props } = componentProps;
|
|
2556
3112
|
return /* @__PURE__ */ jsx(RadioGroup$1, {
|
|
3113
|
+
ref: forwardRef,
|
|
2557
3114
|
className: cn("flex flex-col", className),
|
|
2558
3115
|
"data-slot": "drawer-menu-radio-group",
|
|
2559
3116
|
...props
|
|
2560
3117
|
});
|
|
2561
|
-
}
|
|
2562
|
-
|
|
3118
|
+
});
|
|
3119
|
+
DrawerMenuRadioGroup.displayName = "DrawerMenuRadioGroup";
|
|
3120
|
+
const DrawerMenuRadioItem = React.forwardRef((componentProps, forwardRef) => {
|
|
3121
|
+
const { className, children, value, disabled, render, ...props } = componentProps;
|
|
2563
3122
|
return /* @__PURE__ */ jsxs(Radio.Root, {
|
|
3123
|
+
ref: forwardRef,
|
|
2564
3124
|
className: cn("grid min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-64 sm:min-h-8 sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0", "grid-cols-[1rem_1fr] items-center pe-4", className),
|
|
2565
3125
|
"data-slot": "drawer-menu-radio-item",
|
|
2566
3126
|
disabled,
|
|
@@ -2586,29 +3146,34 @@ function DrawerMenuRadioItem({ className, children, value, disabled, render, ...
|
|
|
2586
3146
|
children
|
|
2587
3147
|
})]
|
|
2588
3148
|
});
|
|
2589
|
-
}
|
|
3149
|
+
});
|
|
3150
|
+
DrawerMenuRadioItem.displayName = "DrawerMenuRadioItem";
|
|
2590
3151
|
|
|
2591
3152
|
//#endregion
|
|
2592
3153
|
//#region src/components/dropdown-menu.tsx
|
|
2593
|
-
function DropdownMenu(
|
|
3154
|
+
function DropdownMenu(componentProps) {
|
|
2594
3155
|
return /* @__PURE__ */ jsx(Menu.Root, {
|
|
2595
3156
|
"data-slot": "dropdown-menu",
|
|
2596
|
-
...
|
|
3157
|
+
...componentProps
|
|
2597
3158
|
});
|
|
2598
3159
|
}
|
|
2599
|
-
function DropdownMenuPortal(
|
|
3160
|
+
function DropdownMenuPortal(componentProps) {
|
|
2600
3161
|
return /* @__PURE__ */ jsx(Menu.Portal, {
|
|
2601
3162
|
"data-slot": "dropdown-menu-portal",
|
|
2602
|
-
...
|
|
3163
|
+
...componentProps
|
|
2603
3164
|
});
|
|
2604
3165
|
}
|
|
2605
|
-
|
|
3166
|
+
const DropdownMenuTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
3167
|
+
const { ...props } = componentProps;
|
|
2606
3168
|
return /* @__PURE__ */ jsx(Menu.Trigger, {
|
|
3169
|
+
ref: forwardRef,
|
|
2607
3170
|
"data-slot": "dropdown-menu-trigger",
|
|
2608
3171
|
...props
|
|
2609
3172
|
});
|
|
2610
|
-
}
|
|
2611
|
-
|
|
3173
|
+
});
|
|
3174
|
+
DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
|
|
3175
|
+
const DropdownMenuContent = React.forwardRef((componentProps, forwardRef) => {
|
|
3176
|
+
const { align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, container, ...props } = componentProps;
|
|
2612
3177
|
return /* @__PURE__ */ jsx(Menu.Portal, {
|
|
2613
3178
|
container,
|
|
2614
3179
|
children: /* @__PURE__ */ jsx(Menu.Positioner, {
|
|
@@ -2618,53 +3183,69 @@ function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom"
|
|
|
2618
3183
|
side,
|
|
2619
3184
|
sideOffset,
|
|
2620
3185
|
children: /* @__PURE__ */ jsx(Menu.Popup, {
|
|
3186
|
+
ref: forwardRef,
|
|
2621
3187
|
"data-slot": "dropdown-menu-content",
|
|
2622
3188
|
className: cn("z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
2623
3189
|
...props
|
|
2624
3190
|
})
|
|
2625
3191
|
})
|
|
2626
3192
|
});
|
|
2627
|
-
}
|
|
2628
|
-
|
|
3193
|
+
});
|
|
3194
|
+
DropdownMenuContent.displayName = "DropdownMenuContent";
|
|
3195
|
+
const DropdownMenuGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
3196
|
+
const { ...props } = componentProps;
|
|
2629
3197
|
return /* @__PURE__ */ jsx(Menu.Group, {
|
|
3198
|
+
ref: forwardRef,
|
|
2630
3199
|
"data-slot": "dropdown-menu-group",
|
|
2631
3200
|
...props
|
|
2632
3201
|
});
|
|
2633
|
-
}
|
|
2634
|
-
|
|
3202
|
+
});
|
|
3203
|
+
DropdownMenuGroup.displayName = "DropdownMenuGroup";
|
|
3204
|
+
const DropdownMenuLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
3205
|
+
const { className, inset, ...props } = componentProps;
|
|
2635
3206
|
return /* @__PURE__ */ jsx(Menu.GroupLabel, {
|
|
3207
|
+
ref: forwardRef,
|
|
2636
3208
|
"data-slot": "dropdown-menu-label",
|
|
2637
3209
|
"data-inset": inset,
|
|
2638
3210
|
className: cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8", className),
|
|
2639
3211
|
...props
|
|
2640
3212
|
});
|
|
2641
|
-
}
|
|
2642
|
-
|
|
3213
|
+
});
|
|
3214
|
+
DropdownMenuLabel.displayName = "DropdownMenuLabel";
|
|
3215
|
+
const DropdownMenuItem = React.forwardRef((componentProps, forwardRef) => {
|
|
3216
|
+
const { className, inset, variant = "default", ...props } = componentProps;
|
|
2643
3217
|
return /* @__PURE__ */ jsx(Menu.Item, {
|
|
3218
|
+
ref: forwardRef,
|
|
2644
3219
|
"data-slot": "dropdown-menu-item",
|
|
2645
3220
|
"data-inset": inset,
|
|
2646
3221
|
"data-variant": variant,
|
|
2647
3222
|
className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className),
|
|
2648
3223
|
...props
|
|
2649
3224
|
});
|
|
2650
|
-
}
|
|
2651
|
-
|
|
3225
|
+
});
|
|
3226
|
+
DropdownMenuItem.displayName = "DropdownMenuItem";
|
|
3227
|
+
function DropdownMenuSub(componentProps) {
|
|
2652
3228
|
return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
|
|
2653
3229
|
"data-slot": "dropdown-menu-sub",
|
|
2654
|
-
...
|
|
3230
|
+
...componentProps
|
|
2655
3231
|
});
|
|
2656
3232
|
}
|
|
2657
|
-
|
|
3233
|
+
const DropdownMenuSubTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
3234
|
+
const { className, inset, children, ...props } = componentProps;
|
|
2658
3235
|
return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
|
|
3236
|
+
ref: forwardRef,
|
|
2659
3237
|
"data-slot": "dropdown-menu-sub-trigger",
|
|
2660
3238
|
"data-inset": inset,
|
|
2661
3239
|
className: cn("flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
2662
3240
|
...props,
|
|
2663
3241
|
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
|
|
2664
3242
|
});
|
|
2665
|
-
}
|
|
2666
|
-
|
|
3243
|
+
});
|
|
3244
|
+
DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
|
|
3245
|
+
const DropdownMenuSubContent = React.forwardRef((componentProps, forwardRef) => {
|
|
3246
|
+
const { align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props } = componentProps;
|
|
2667
3247
|
return /* @__PURE__ */ jsx(DropdownMenuContent, {
|
|
3248
|
+
ref: forwardRef,
|
|
2668
3249
|
"data-slot": "dropdown-menu-sub-content",
|
|
2669
3250
|
className: cn("w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
2670
3251
|
align,
|
|
@@ -2673,9 +3254,12 @@ function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "rig
|
|
|
2673
3254
|
sideOffset,
|
|
2674
3255
|
...props
|
|
2675
3256
|
});
|
|
2676
|
-
}
|
|
2677
|
-
|
|
3257
|
+
});
|
|
3258
|
+
DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
|
|
3259
|
+
const DropdownMenuCheckboxItem = React.forwardRef((componentProps, forwardRef) => {
|
|
3260
|
+
const { className, children, checked, inset, ...props } = componentProps;
|
|
2678
3261
|
return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
|
|
3262
|
+
ref: forwardRef,
|
|
2679
3263
|
"data-slot": "dropdown-menu-checkbox-item",
|
|
2680
3264
|
"data-inset": inset,
|
|
2681
3265
|
className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
@@ -2687,15 +3271,21 @@ function DropdownMenuCheckboxItem({ className, children, checked, inset, ...prop
|
|
|
2687
3271
|
children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
2688
3272
|
}), children]
|
|
2689
3273
|
});
|
|
2690
|
-
}
|
|
2691
|
-
|
|
3274
|
+
});
|
|
3275
|
+
DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
|
|
3276
|
+
const DropdownMenuRadioGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
3277
|
+
const { ...props } = componentProps;
|
|
2692
3278
|
return /* @__PURE__ */ jsx(Menu.RadioGroup, {
|
|
3279
|
+
ref: forwardRef,
|
|
2693
3280
|
"data-slot": "dropdown-menu-radio-group",
|
|
2694
3281
|
...props
|
|
2695
3282
|
});
|
|
2696
|
-
}
|
|
2697
|
-
|
|
3283
|
+
});
|
|
3284
|
+
DropdownMenuRadioGroup.displayName = "DropdownMenuRadioGroup";
|
|
3285
|
+
const DropdownMenuRadioItem = React.forwardRef((componentProps, forwardRef) => {
|
|
3286
|
+
const { className, children, inset, ...props } = componentProps;
|
|
2698
3287
|
return /* @__PURE__ */ jsxs(Menu.RadioItem, {
|
|
3288
|
+
ref: forwardRef,
|
|
2699
3289
|
"data-slot": "dropdown-menu-radio-item",
|
|
2700
3290
|
"data-inset": inset,
|
|
2701
3291
|
className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
@@ -2706,45 +3296,61 @@ function DropdownMenuRadioItem({ className, children, inset, ...props }) {
|
|
|
2706
3296
|
children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
2707
3297
|
}), children]
|
|
2708
3298
|
});
|
|
2709
|
-
}
|
|
2710
|
-
|
|
3299
|
+
});
|
|
3300
|
+
DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
|
|
3301
|
+
const DropdownMenuSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
3302
|
+
const { className, ...props } = componentProps;
|
|
2711
3303
|
return /* @__PURE__ */ jsx(Menu.Separator, {
|
|
3304
|
+
ref: forwardRef,
|
|
2712
3305
|
"data-slot": "dropdown-menu-separator",
|
|
2713
3306
|
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
2714
3307
|
...props
|
|
2715
3308
|
});
|
|
2716
|
-
}
|
|
2717
|
-
|
|
3309
|
+
});
|
|
3310
|
+
DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
|
|
3311
|
+
const DropdownMenuShortcut = React.forwardRef((componentProps, forwardRef) => {
|
|
3312
|
+
const { className, ...props } = componentProps;
|
|
2718
3313
|
return /* @__PURE__ */ jsx("span", {
|
|
3314
|
+
ref: forwardRef,
|
|
2719
3315
|
"data-slot": "dropdown-menu-shortcut",
|
|
2720
3316
|
className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
|
|
2721
3317
|
...props
|
|
2722
3318
|
});
|
|
2723
|
-
}
|
|
2724
|
-
|
|
3319
|
+
});
|
|
3320
|
+
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
3321
|
+
const DropdownMenuAddon = React.forwardRef((componentProps, forwardRef) => {
|
|
3322
|
+
const { className, ...props } = componentProps;
|
|
2725
3323
|
return /* @__PURE__ */ jsx("span", {
|
|
3324
|
+
ref: forwardRef,
|
|
2726
3325
|
"data-slot": "dropdown-menu-addon",
|
|
2727
3326
|
className: cn("ml-auto shrink-0 inline-flex items-center", className),
|
|
2728
3327
|
...props
|
|
2729
3328
|
});
|
|
2730
|
-
}
|
|
3329
|
+
});
|
|
3330
|
+
DropdownMenuAddon.displayName = "DropdownMenuAddon";
|
|
2731
3331
|
|
|
2732
3332
|
//#endregion
|
|
2733
3333
|
//#region src/components/empty.tsx
|
|
2734
|
-
|
|
3334
|
+
const Empty = React.forwardRef((componentProps, forwardRef) => {
|
|
3335
|
+
const { className, ...props } = componentProps;
|
|
2735
3336
|
return /* @__PURE__ */ jsx("div", {
|
|
3337
|
+
ref: forwardRef,
|
|
2736
3338
|
"data-slot": "empty",
|
|
2737
3339
|
className: cn("flex min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg p-6 text-center text-balance md:p-12", className),
|
|
2738
3340
|
...props
|
|
2739
3341
|
});
|
|
2740
|
-
}
|
|
2741
|
-
|
|
3342
|
+
});
|
|
3343
|
+
Empty.displayName = "Empty";
|
|
3344
|
+
const EmptyHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
3345
|
+
const { className, ...props } = componentProps;
|
|
2742
3346
|
return /* @__PURE__ */ jsx("div", {
|
|
3347
|
+
ref: forwardRef,
|
|
2743
3348
|
"data-slot": "empty-header",
|
|
2744
3349
|
className: cn("flex max-w-sm flex-col items-center gap-2 text-center", className),
|
|
2745
3350
|
...props
|
|
2746
3351
|
});
|
|
2747
|
-
}
|
|
3352
|
+
});
|
|
3353
|
+
EmptyHeader.displayName = "EmptyHeader";
|
|
2748
3354
|
const emptyMediaVariants = cva("flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
2749
3355
|
variants: { variant: {
|
|
2750
3356
|
default: "bg-transparent",
|
|
@@ -2752,8 +3358,10 @@ const emptyMediaVariants = cva("flex shrink-0 items-center justify-center mb-2 [
|
|
|
2752
3358
|
} },
|
|
2753
3359
|
defaultVariants: { variant: "default" }
|
|
2754
3360
|
});
|
|
2755
|
-
|
|
3361
|
+
const EmptyMedia = React.forwardRef((componentProps, forwardRef) => {
|
|
3362
|
+
const { className, variant = "default", ...props } = componentProps;
|
|
2756
3363
|
return /* @__PURE__ */ jsx("div", {
|
|
3364
|
+
ref: forwardRef,
|
|
2757
3365
|
"data-slot": "empty-icon",
|
|
2758
3366
|
"data-variant": variant,
|
|
2759
3367
|
className: cn(emptyMediaVariants({
|
|
@@ -2762,34 +3370,44 @@ function EmptyMedia({ className, variant = "default", ...props }) {
|
|
|
2762
3370
|
})),
|
|
2763
3371
|
...props
|
|
2764
3372
|
});
|
|
2765
|
-
}
|
|
2766
|
-
|
|
3373
|
+
});
|
|
3374
|
+
EmptyMedia.displayName = "EmptyMedia";
|
|
3375
|
+
const EmptyTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
3376
|
+
const { className, ...props } = componentProps;
|
|
2767
3377
|
return /* @__PURE__ */ jsx("div", {
|
|
3378
|
+
ref: forwardRef,
|
|
2768
3379
|
"data-slot": "empty-title",
|
|
2769
3380
|
className: cn("text-sm font-medium tracking-tight", className),
|
|
2770
3381
|
...props
|
|
2771
3382
|
});
|
|
2772
|
-
}
|
|
2773
|
-
|
|
3383
|
+
});
|
|
3384
|
+
EmptyTitle.displayName = "EmptyTitle";
|
|
3385
|
+
const EmptyDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
3386
|
+
const { className, ...props } = componentProps;
|
|
2774
3387
|
return /* @__PURE__ */ jsx("div", {
|
|
3388
|
+
ref: forwardRef,
|
|
2775
3389
|
"data-slot": "empty-description",
|
|
2776
3390
|
className: cn("text-muted-foreground [&>a:hover]:text-primary text-sm [&>a]:underline [&>a]:underline-offset-4", className),
|
|
2777
3391
|
...props
|
|
2778
3392
|
});
|
|
2779
|
-
}
|
|
2780
|
-
|
|
3393
|
+
});
|
|
3394
|
+
EmptyDescription.displayName = "EmptyDescription";
|
|
3395
|
+
const EmptyContent = React.forwardRef((componentProps, forwardRef) => {
|
|
3396
|
+
const { className, ...props } = componentProps;
|
|
2781
3397
|
return /* @__PURE__ */ jsx("div", {
|
|
3398
|
+
ref: forwardRef,
|
|
2782
3399
|
"data-slot": "empty-content",
|
|
2783
3400
|
className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance", className),
|
|
2784
3401
|
...props
|
|
2785
3402
|
});
|
|
2786
|
-
}
|
|
3403
|
+
});
|
|
3404
|
+
EmptyContent.displayName = "EmptyContent";
|
|
2787
3405
|
|
|
2788
3406
|
//#endregion
|
|
2789
3407
|
//#region src/components/dropzone.tsx
|
|
2790
|
-
const DropzoneContext = React
|
|
3408
|
+
const DropzoneContext = React.createContext(null);
|
|
2791
3409
|
function useDropzoneContext() {
|
|
2792
|
-
const ctx = React
|
|
3410
|
+
const ctx = React.useContext(DropzoneContext);
|
|
2793
3411
|
if (!ctx) throw new Error("Dropzone subcomponents must be rendered inside <Dropzone>.");
|
|
2794
3412
|
return ctx;
|
|
2795
3413
|
}
|
|
@@ -2867,17 +3485,18 @@ function validateFiles(files, options) {
|
|
|
2867
3485
|
* standard dashed-border look, or compose around any other control (textarea,
|
|
2868
3486
|
* etc.) for file-drop on an arbitrary surface.
|
|
2869
3487
|
*/
|
|
2870
|
-
const Dropzone = React
|
|
2871
|
-
const
|
|
2872
|
-
const
|
|
2873
|
-
const [
|
|
2874
|
-
const
|
|
2875
|
-
const
|
|
2876
|
-
const
|
|
3488
|
+
const Dropzone = React.forwardRef((componentProps, forwardRef) => {
|
|
3489
|
+
const { className, children, onFiles, onError, accept, multiple = false, maxFiles, maxSize, minSize, disabled = false, hoverMessage = "Drop your file here to upload", dragRejectMessage, onDragEnter, onDragLeave, onDragOver, ...props } = componentProps;
|
|
3490
|
+
const inputRef = React.useRef(null);
|
|
3491
|
+
const [isDragging, setIsDragging] = React.useState(false);
|
|
3492
|
+
const [isDragReject, setIsDragReject] = React.useState(false);
|
|
3493
|
+
const dragCounterRef = React.useRef(0);
|
|
3494
|
+
const acceptPatterns = React.useMemo(() => parseAccept(accept), [accept]);
|
|
3495
|
+
const open = React.useCallback(() => {
|
|
2877
3496
|
if (disabled) return;
|
|
2878
3497
|
inputRef.current?.click();
|
|
2879
3498
|
}, [disabled]);
|
|
2880
|
-
const ctx = React
|
|
3499
|
+
const ctx = React.useMemo(() => ({
|
|
2881
3500
|
inputRef,
|
|
2882
3501
|
disabled,
|
|
2883
3502
|
open
|
|
@@ -2938,7 +3557,7 @@ const Dropzone = React$1.forwardRef(({ className, children, onFiles, onError, ac
|
|
|
2938
3557
|
return /* @__PURE__ */ jsx(DropzoneContext.Provider, {
|
|
2939
3558
|
value: ctx,
|
|
2940
3559
|
children: /* @__PURE__ */ jsxs("div", {
|
|
2941
|
-
ref,
|
|
3560
|
+
ref: forwardRef,
|
|
2942
3561
|
"data-slot": "dropzone",
|
|
2943
3562
|
"data-state": overlayState,
|
|
2944
3563
|
"data-disabled": disabled || void 0,
|
|
@@ -2983,10 +3602,11 @@ Dropzone.displayName = "Dropzone";
|
|
|
2983
3602
|
* Space / Enter open the picker. Omit it (and use `<DropzoneTrigger>`)
|
|
2984
3603
|
* when you want file-drop on an existing surface instead.
|
|
2985
3604
|
*/
|
|
2986
|
-
const DropzoneContent = React
|
|
3605
|
+
const DropzoneContent = React.forwardRef((componentProps, forwardRef) => {
|
|
3606
|
+
const { className, error = false, onClick, onKeyDown, ...props } = componentProps;
|
|
2987
3607
|
const { open, disabled } = useDropzoneContext();
|
|
2988
3608
|
return /* @__PURE__ */ jsx("div", {
|
|
2989
|
-
ref,
|
|
3609
|
+
ref: forwardRef,
|
|
2990
3610
|
role: "button",
|
|
2991
3611
|
tabIndex: disabled ? -1 : 0,
|
|
2992
3612
|
"aria-disabled": disabled || void 0,
|
|
@@ -3011,45 +3631,57 @@ const DropzoneContent = React$1.forwardRef(({ className, error = false, onClick,
|
|
|
3011
3631
|
});
|
|
3012
3632
|
DropzoneContent.displayName = "DropzoneContent";
|
|
3013
3633
|
/** `<EmptyMedia>` with `variant="icon"` baked in. */
|
|
3014
|
-
|
|
3634
|
+
const DropzoneIcon = React.forwardRef((componentProps, forwardRef) => {
|
|
3635
|
+
const { variant = "icon", ...props } = componentProps;
|
|
3015
3636
|
return /* @__PURE__ */ jsx(EmptyMedia, {
|
|
3637
|
+
ref: forwardRef,
|
|
3016
3638
|
"data-slot": "dropzone-icon",
|
|
3017
3639
|
variant,
|
|
3018
3640
|
...props
|
|
3019
3641
|
});
|
|
3020
|
-
}
|
|
3021
|
-
|
|
3642
|
+
});
|
|
3643
|
+
DropzoneIcon.displayName = "DropzoneIcon";
|
|
3644
|
+
const DropzoneTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
3645
|
+
const { className, ...props } = componentProps;
|
|
3022
3646
|
return /* @__PURE__ */ jsx(EmptyTitle, {
|
|
3647
|
+
ref: forwardRef,
|
|
3023
3648
|
"data-slot": "dropzone-title",
|
|
3024
3649
|
className: cn("text-foreground", className),
|
|
3025
3650
|
...props
|
|
3026
3651
|
});
|
|
3027
|
-
}
|
|
3028
|
-
|
|
3652
|
+
});
|
|
3653
|
+
DropzoneTitle.displayName = "DropzoneTitle";
|
|
3654
|
+
const DropzoneDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
3029
3655
|
return /* @__PURE__ */ jsx(EmptyDescription, {
|
|
3656
|
+
ref: forwardRef,
|
|
3030
3657
|
"data-slot": "dropzone-description",
|
|
3031
|
-
...
|
|
3658
|
+
...componentProps
|
|
3032
3659
|
});
|
|
3033
|
-
}
|
|
3034
|
-
|
|
3660
|
+
});
|
|
3661
|
+
DropzoneDescription.displayName = "DropzoneDescription";
|
|
3662
|
+
const DropzoneActions = React.forwardRef((componentProps, forwardRef) => {
|
|
3663
|
+
const { className, ...props } = componentProps;
|
|
3035
3664
|
return /* @__PURE__ */ jsx("div", {
|
|
3665
|
+
ref: forwardRef,
|
|
3036
3666
|
"data-slot": "dropzone-actions",
|
|
3037
3667
|
className: cn("mt-2 flex items-center gap-2", className),
|
|
3038
3668
|
onClick: (event) => event.stopPropagation(),
|
|
3039
3669
|
onKeyDown: (event) => event.stopPropagation(),
|
|
3040
3670
|
...props
|
|
3041
3671
|
});
|
|
3042
|
-
}
|
|
3672
|
+
});
|
|
3673
|
+
DropzoneActions.displayName = "DropzoneActions";
|
|
3043
3674
|
/**
|
|
3044
3675
|
* Opens the file picker on click. Default-renders a DS `<Button>`; pass
|
|
3045
3676
|
* `render` (Base UI convention) to substitute another element.
|
|
3046
3677
|
*/
|
|
3047
|
-
const DropzoneTrigger = React
|
|
3678
|
+
const DropzoneTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
3679
|
+
const { render, onClick, ...props } = componentProps;
|
|
3048
3680
|
const { open, disabled } = useDropzoneContext();
|
|
3049
3681
|
return useRender({
|
|
3050
3682
|
defaultTagName: "button",
|
|
3051
3683
|
props: mergeProps({
|
|
3052
|
-
ref,
|
|
3684
|
+
ref: forwardRef,
|
|
3053
3685
|
type: "button",
|
|
3054
3686
|
"data-slot": "dropzone-trigger",
|
|
3055
3687
|
disabled,
|
|
@@ -3066,21 +3698,23 @@ DropzoneTrigger.displayName = "DropzoneTrigger";
|
|
|
3066
3698
|
|
|
3067
3699
|
//#endregion
|
|
3068
3700
|
//#region src/components/popover.tsx
|
|
3069
|
-
function Popover(
|
|
3701
|
+
function Popover(componentProps) {
|
|
3702
|
+
const { ...props } = componentProps;
|
|
3070
3703
|
return /* @__PURE__ */ jsx(Popover$1.Root, {
|
|
3071
3704
|
"data-slot": "popover",
|
|
3072
3705
|
...props
|
|
3073
3706
|
});
|
|
3074
3707
|
}
|
|
3075
|
-
const PopoverTrigger = React
|
|
3708
|
+
const PopoverTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
3076
3709
|
return /* @__PURE__ */ jsx(Popover$1.Trigger, {
|
|
3077
3710
|
"data-slot": "popover-trigger",
|
|
3078
|
-
ref,
|
|
3079
|
-
...
|
|
3711
|
+
ref: forwardRef,
|
|
3712
|
+
...componentProps
|
|
3080
3713
|
});
|
|
3081
3714
|
});
|
|
3082
3715
|
PopoverTrigger.displayName = "PopoverTrigger";
|
|
3083
|
-
|
|
3716
|
+
const PopoverContent = React.forwardRef((componentProps, forwardRef) => {
|
|
3717
|
+
const { className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props } = componentProps;
|
|
3084
3718
|
return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(Popover$1.Positioner, {
|
|
3085
3719
|
align,
|
|
3086
3720
|
alignOffset,
|
|
@@ -3088,37 +3722,49 @@ function PopoverContent({ className, align = "center", alignOffset = 0, side = "
|
|
|
3088
3722
|
sideOffset,
|
|
3089
3723
|
className: "isolate z-50",
|
|
3090
3724
|
children: /* @__PURE__ */ jsx(Popover$1.Popup, {
|
|
3725
|
+
ref: forwardRef,
|
|
3091
3726
|
"data-slot": "popover-content",
|
|
3092
3727
|
className: cn("z-50 flex w-72 origin-(--transform-origin) flex-col gap-4 rounded-md bg-popover p-4 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
3093
3728
|
...props
|
|
3094
3729
|
})
|
|
3095
3730
|
}) });
|
|
3096
|
-
}
|
|
3097
|
-
|
|
3731
|
+
});
|
|
3732
|
+
PopoverContent.displayName = "PopoverContent";
|
|
3733
|
+
const PopoverHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
3734
|
+
const { className, ...props } = componentProps;
|
|
3098
3735
|
return /* @__PURE__ */ jsx("div", {
|
|
3736
|
+
ref: forwardRef,
|
|
3099
3737
|
"data-slot": "popover-header",
|
|
3100
3738
|
className: cn("flex flex-col gap-0.5 text-sm", className),
|
|
3101
3739
|
...props
|
|
3102
3740
|
});
|
|
3103
|
-
}
|
|
3104
|
-
|
|
3741
|
+
});
|
|
3742
|
+
PopoverHeader.displayName = "PopoverHeader";
|
|
3743
|
+
const PopoverTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
3744
|
+
const { className, ...props } = componentProps;
|
|
3105
3745
|
return /* @__PURE__ */ jsx(Popover$1.Title, {
|
|
3746
|
+
ref: forwardRef,
|
|
3106
3747
|
"data-slot": "popover-title",
|
|
3107
3748
|
className: cn("font-bold", className),
|
|
3108
3749
|
...props
|
|
3109
3750
|
});
|
|
3110
|
-
}
|
|
3111
|
-
|
|
3751
|
+
});
|
|
3752
|
+
PopoverTitle.displayName = "PopoverTitle";
|
|
3753
|
+
const PopoverDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
3754
|
+
const { className, ...props } = componentProps;
|
|
3112
3755
|
return /* @__PURE__ */ jsx(Popover$1.Description, {
|
|
3756
|
+
ref: forwardRef,
|
|
3113
3757
|
"data-slot": "popover-description",
|
|
3114
3758
|
className: cn("text-muted-foreground", className),
|
|
3115
3759
|
...props
|
|
3116
3760
|
});
|
|
3117
|
-
}
|
|
3761
|
+
});
|
|
3762
|
+
PopoverDescription.displayName = "PopoverDescription";
|
|
3118
3763
|
|
|
3119
3764
|
//#endregion
|
|
3120
3765
|
//#region src/components/theme-provider.tsx
|
|
3121
|
-
function ThemeProvider(
|
|
3766
|
+
function ThemeProvider(componentProps) {
|
|
3767
|
+
const { children, ...props } = componentProps;
|
|
3122
3768
|
return /* @__PURE__ */ jsx(ThemeProvider$1, {
|
|
3123
3769
|
attribute: "data-theme",
|
|
3124
3770
|
defaultTheme: "system",
|
|
@@ -3142,19 +3788,19 @@ const EmojiPickerCategories = {
|
|
|
3142
3788
|
SYMBOLS: Categories.SYMBOLS,
|
|
3143
3789
|
FLAGS: Categories.FLAGS
|
|
3144
3790
|
};
|
|
3145
|
-
const EmojiPickerContext = React
|
|
3791
|
+
const EmojiPickerContext = React.createContext(null);
|
|
3146
3792
|
function useEmojiPickerContext() {
|
|
3147
|
-
const context = React
|
|
3793
|
+
const context = React.useContext(EmojiPickerContext);
|
|
3148
3794
|
if (!context) throw new Error("EmojiPicker compound components must be used inside <EmojiPicker>");
|
|
3149
3795
|
return context;
|
|
3150
3796
|
}
|
|
3151
3797
|
function EmojiPicker({ onEmojiSelect, children }) {
|
|
3152
|
-
const [open, setOpen] = React
|
|
3153
|
-
const onSelect = React
|
|
3798
|
+
const [open, setOpen] = React.useState(false);
|
|
3799
|
+
const onSelect = React.useCallback((emoji) => {
|
|
3154
3800
|
onEmojiSelect?.(emoji);
|
|
3155
3801
|
setOpen(false);
|
|
3156
3802
|
}, [onEmojiSelect]);
|
|
3157
|
-
const contextValue = React
|
|
3803
|
+
const contextValue = React.useMemo(() => ({ onSelect }), [onSelect]);
|
|
3158
3804
|
return /* @__PURE__ */ jsx(EmojiPickerContext.Provider, {
|
|
3159
3805
|
value: contextValue,
|
|
3160
3806
|
children: /* @__PURE__ */ jsx(Popover, {
|
|
@@ -3164,22 +3810,25 @@ function EmojiPicker({ onEmojiSelect, children }) {
|
|
|
3164
3810
|
})
|
|
3165
3811
|
});
|
|
3166
3812
|
}
|
|
3167
|
-
const EmojiPickerTrigger = React
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3813
|
+
const EmojiPickerTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
3814
|
+
const { render, children, ...props } = componentProps;
|
|
3815
|
+
return /* @__PURE__ */ jsx(PopoverTrigger, {
|
|
3816
|
+
ref: forwardRef,
|
|
3817
|
+
"aria-label": "Emoji",
|
|
3818
|
+
render: render ?? /* @__PURE__ */ jsx(Button, {
|
|
3819
|
+
variant: "outline",
|
|
3820
|
+
size: "icon"
|
|
3821
|
+
}),
|
|
3822
|
+
...props,
|
|
3823
|
+
children: children ?? /* @__PURE__ */ jsx(Smile, { "aria-hidden": "true" })
|
|
3824
|
+
});
|
|
3825
|
+
});
|
|
3177
3826
|
EmojiPickerTrigger.displayName = "EmojiPickerTrigger";
|
|
3178
3827
|
function EmojiPickerContent({ className, align = "start", searchPlaceholder, categories, width = 300, suggestedEmojisMode = SuggestionMode.RECENT, ...props }) {
|
|
3179
3828
|
const { onSelect } = useEmojiPickerContext();
|
|
3180
3829
|
const { resolvedTheme } = useTheme();
|
|
3181
3830
|
const pickerTheme = resolvedTheme === "dark" ? Theme.DARK : Theme.LIGHT;
|
|
3182
|
-
const handleClick = React
|
|
3831
|
+
const handleClick = React.useCallback((emojiData) => onSelect(emojiData.emoji), [onSelect]);
|
|
3183
3832
|
return /* @__PURE__ */ jsx(PopoverContent, {
|
|
3184
3833
|
"aria-label": "Choose an emoji",
|
|
3185
3834
|
className: cn("p-0 w-auto overflow-hidden ring-foreground/5", className),
|
|
@@ -3220,9 +3869,10 @@ const fabVariants = cva("group/fab inline-flex shrink-0 items-center justify-cen
|
|
|
3220
3869
|
size: "icon-lg"
|
|
3221
3870
|
}
|
|
3222
3871
|
});
|
|
3223
|
-
const FAB = React
|
|
3872
|
+
const FAB = React.forwardRef((componentProps, forwardRef) => {
|
|
3873
|
+
const { className, variant, size, ...props } = componentProps;
|
|
3224
3874
|
return /* @__PURE__ */ jsx(Button$1, {
|
|
3225
|
-
ref,
|
|
3875
|
+
ref: forwardRef,
|
|
3226
3876
|
"data-slot": "fab",
|
|
3227
3877
|
className: cn(fabVariants({
|
|
3228
3878
|
variant,
|
|
@@ -3236,38 +3886,50 @@ FAB.displayName = "FAB";
|
|
|
3236
3886
|
|
|
3237
3887
|
//#endregion
|
|
3238
3888
|
//#region src/components/label.tsx
|
|
3239
|
-
|
|
3889
|
+
const Label = React.forwardRef((componentProps, forwardRef) => {
|
|
3890
|
+
const { className, ...props } = componentProps;
|
|
3240
3891
|
return /* @__PURE__ */ jsx("label", {
|
|
3892
|
+
ref: forwardRef,
|
|
3241
3893
|
"data-slot": "label",
|
|
3242
3894
|
className: cn("flex items-center gap-2 text-sm leading-normal 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 peer-data-disabled:opacity-50", className),
|
|
3243
3895
|
...props
|
|
3244
3896
|
});
|
|
3245
|
-
}
|
|
3897
|
+
});
|
|
3898
|
+
Label.displayName = "Label";
|
|
3246
3899
|
|
|
3247
3900
|
//#endregion
|
|
3248
3901
|
//#region src/components/field.tsx
|
|
3249
|
-
|
|
3902
|
+
const FieldSet = React.forwardRef((componentProps, forwardRef) => {
|
|
3903
|
+
const { className, ...props } = componentProps;
|
|
3250
3904
|
return /* @__PURE__ */ jsx("fieldset", {
|
|
3905
|
+
ref: forwardRef,
|
|
3251
3906
|
"data-slot": "field-set",
|
|
3252
3907
|
className: cn("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className),
|
|
3253
3908
|
...props
|
|
3254
3909
|
});
|
|
3255
|
-
}
|
|
3256
|
-
|
|
3910
|
+
});
|
|
3911
|
+
FieldSet.displayName = "FieldSet";
|
|
3912
|
+
const FieldLegend = React.forwardRef((componentProps, forwardRef) => {
|
|
3913
|
+
const { className, variant = "legend", ...props } = componentProps;
|
|
3257
3914
|
return /* @__PURE__ */ jsx("legend", {
|
|
3915
|
+
ref: forwardRef,
|
|
3258
3916
|
"data-slot": "field-legend",
|
|
3259
3917
|
"data-variant": variant,
|
|
3260
3918
|
className: cn("mb-1.5 font-medium leading-normal data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
|
|
3261
3919
|
...props
|
|
3262
3920
|
});
|
|
3263
|
-
}
|
|
3264
|
-
|
|
3921
|
+
});
|
|
3922
|
+
FieldLegend.displayName = "FieldLegend";
|
|
3923
|
+
const FieldGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
3924
|
+
const { className, ...props } = componentProps;
|
|
3265
3925
|
return /* @__PURE__ */ jsx("div", {
|
|
3926
|
+
ref: forwardRef,
|
|
3266
3927
|
"data-slot": "field-group",
|
|
3267
3928
|
className: cn("group/field-group @container/field-group flex w-full flex-col gap-6 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", className),
|
|
3268
3929
|
...props
|
|
3269
3930
|
});
|
|
3270
|
-
}
|
|
3931
|
+
});
|
|
3932
|
+
FieldGroup.displayName = "FieldGroup";
|
|
3271
3933
|
const fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
|
|
3272
3934
|
variants: { orientation: {
|
|
3273
3935
|
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
@@ -3276,45 +3938,62 @@ const fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:tex
|
|
|
3276
3938
|
} },
|
|
3277
3939
|
defaultVariants: { orientation: "vertical" }
|
|
3278
3940
|
});
|
|
3279
|
-
|
|
3941
|
+
const Field = React.forwardRef((componentProps, forwardRef) => {
|
|
3942
|
+
const { className, orientation = "vertical", ...props } = componentProps;
|
|
3280
3943
|
return /* @__PURE__ */ jsx("div", {
|
|
3944
|
+
ref: forwardRef,
|
|
3281
3945
|
role: "group",
|
|
3282
3946
|
"data-slot": "field",
|
|
3283
3947
|
"data-orientation": orientation,
|
|
3284
3948
|
className: cn(fieldVariants({ orientation }), className),
|
|
3285
3949
|
...props
|
|
3286
3950
|
});
|
|
3287
|
-
}
|
|
3288
|
-
|
|
3951
|
+
});
|
|
3952
|
+
Field.displayName = "Field";
|
|
3953
|
+
const FieldContent = React.forwardRef((componentProps, forwardRef) => {
|
|
3954
|
+
const { className, ...props } = componentProps;
|
|
3289
3955
|
return /* @__PURE__ */ jsx("div", {
|
|
3956
|
+
ref: forwardRef,
|
|
3290
3957
|
"data-slot": "field-content",
|
|
3291
3958
|
className: cn("group/field-content flex flex-1 flex-col gap-2 leading-normal", className),
|
|
3292
3959
|
...props
|
|
3293
3960
|
});
|
|
3294
|
-
}
|
|
3295
|
-
|
|
3961
|
+
});
|
|
3962
|
+
FieldContent.displayName = "FieldContent";
|
|
3963
|
+
const FieldLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
3964
|
+
const { className, ...props } = componentProps;
|
|
3296
3965
|
return /* @__PURE__ */ jsx(Label, {
|
|
3966
|
+
ref: forwardRef,
|
|
3297
3967
|
"data-slot": "field-label",
|
|
3298
3968
|
className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-normal group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-4 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", className),
|
|
3299
3969
|
...props
|
|
3300
3970
|
});
|
|
3301
|
-
}
|
|
3302
|
-
|
|
3971
|
+
});
|
|
3972
|
+
FieldLabel.displayName = "FieldLabel";
|
|
3973
|
+
const FieldTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
3974
|
+
const { className, ...props } = componentProps;
|
|
3303
3975
|
return /* @__PURE__ */ jsx("div", {
|
|
3976
|
+
ref: forwardRef,
|
|
3304
3977
|
"data-slot": "field-label",
|
|
3305
3978
|
className: cn("flex w-fit items-center gap-2 text-sm leading-normal font-medium group-data-[disabled=true]/field:opacity-50", className),
|
|
3306
3979
|
...props
|
|
3307
3980
|
});
|
|
3308
|
-
}
|
|
3309
|
-
|
|
3981
|
+
});
|
|
3982
|
+
FieldTitle.displayName = "FieldTitle";
|
|
3983
|
+
const FieldDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
3984
|
+
const { className, ...props } = componentProps;
|
|
3310
3985
|
return /* @__PURE__ */ jsx("p", {
|
|
3986
|
+
ref: forwardRef,
|
|
3311
3987
|
"data-slot": "field-description",
|
|
3312
3988
|
className: cn("text-left text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
|
|
3313
3989
|
...props
|
|
3314
3990
|
});
|
|
3315
|
-
}
|
|
3316
|
-
|
|
3991
|
+
});
|
|
3992
|
+
FieldDescription.displayName = "FieldDescription";
|
|
3993
|
+
const FieldSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
3994
|
+
const { children, className, ...props } = componentProps;
|
|
3317
3995
|
return /* @__PURE__ */ jsxs("div", {
|
|
3996
|
+
ref: forwardRef,
|
|
3318
3997
|
"data-slot": "field-separator",
|
|
3319
3998
|
"data-content": !!children,
|
|
3320
3999
|
className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
|
|
@@ -3325,9 +4004,11 @@ function FieldSeparator({ children, className, ...props }) {
|
|
|
3325
4004
|
children
|
|
3326
4005
|
})]
|
|
3327
4006
|
});
|
|
3328
|
-
}
|
|
3329
|
-
|
|
3330
|
-
|
|
4007
|
+
});
|
|
4008
|
+
FieldSeparator.displayName = "FieldSeparator";
|
|
4009
|
+
const FieldError = React.forwardRef((componentProps, forwardRef) => {
|
|
4010
|
+
const { className, children, errors, ...props } = componentProps;
|
|
4011
|
+
const content = React.useMemo(() => {
|
|
3331
4012
|
if (children) return children;
|
|
3332
4013
|
if (!errors?.length) return null;
|
|
3333
4014
|
const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
|
|
@@ -3339,13 +4020,15 @@ function FieldError({ className, children, errors, ...props }) {
|
|
|
3339
4020
|
}, [children, errors]);
|
|
3340
4021
|
if (!content) return null;
|
|
3341
4022
|
return /* @__PURE__ */ jsx("div", {
|
|
4023
|
+
ref: forwardRef,
|
|
3342
4024
|
role: "alert",
|
|
3343
4025
|
"data-slot": "field-error",
|
|
3344
4026
|
className: cn("text-sm leading-normal font-normal text-destructive", className),
|
|
3345
4027
|
...props,
|
|
3346
4028
|
children: content
|
|
3347
4029
|
});
|
|
3348
|
-
}
|
|
4030
|
+
});
|
|
4031
|
+
FieldError.displayName = "FieldError";
|
|
3349
4032
|
|
|
3350
4033
|
//#endregion
|
|
3351
4034
|
//#region src/components/gauge.tsx
|
|
@@ -3358,9 +4041,11 @@ function getSegmentState(index, value) {
|
|
|
3358
4041
|
if (distanceFromHead === 1) return "trailing";
|
|
3359
4042
|
return "filled";
|
|
3360
4043
|
}
|
|
3361
|
-
|
|
4044
|
+
const Gauge = React.forwardRef((componentProps, forwardRef) => {
|
|
4045
|
+
const { className, value, ...props } = componentProps;
|
|
3362
4046
|
const clampedValue = Math.max(0, Math.min(value, GAUGES));
|
|
3363
4047
|
return /* @__PURE__ */ jsx("div", {
|
|
4048
|
+
ref: forwardRef,
|
|
3364
4049
|
role: "meter",
|
|
3365
4050
|
"aria-valuenow": clampedValue,
|
|
3366
4051
|
"aria-valuemin": 0,
|
|
@@ -3382,28 +4067,37 @@ function Gauge({ className, value, ...props }) {
|
|
|
3382
4067
|
}, index);
|
|
3383
4068
|
})
|
|
3384
4069
|
});
|
|
3385
|
-
}
|
|
4070
|
+
});
|
|
4071
|
+
Gauge.displayName = "Gauge";
|
|
3386
4072
|
|
|
3387
4073
|
//#endregion
|
|
3388
4074
|
//#region src/components/input-otp.tsx
|
|
3389
|
-
|
|
4075
|
+
const InputOTP = React.forwardRef((componentProps, forwardRef) => {
|
|
4076
|
+
const { className, containerClassName, ...props } = componentProps;
|
|
3390
4077
|
return /* @__PURE__ */ jsx(OTPInput, {
|
|
4078
|
+
ref: forwardRef,
|
|
3391
4079
|
"data-slot": "input-otp",
|
|
3392
4080
|
containerClassName: cn("flex items-center gap-2 has-disabled:opacity-50 **:data-[slot=input-otp-slot]:h-12 **:data-[slot=input-otp-slot]:w-12 has-[input[aria-invalid=true]]:**:data-[slot=input-otp-slot]:border-destructive has-[input[aria-invalid=true]]:**:data-[slot=input-otp-slot]:data-[active=true]:ring-destructive/20 dark:has-[input[aria-invalid=true]]:**:data-[slot=input-otp-slot]:data-[active=true]:ring-destructive/40", containerClassName),
|
|
3393
4081
|
className: cn("disabled:cursor-not-allowed", className),
|
|
3394
4082
|
...props
|
|
3395
4083
|
});
|
|
3396
|
-
}
|
|
3397
|
-
|
|
4084
|
+
});
|
|
4085
|
+
InputOTP.displayName = "InputOTP";
|
|
4086
|
+
const InputOTPGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
4087
|
+
const { className, ...props } = componentProps;
|
|
3398
4088
|
return /* @__PURE__ */ jsx("div", {
|
|
4089
|
+
ref: forwardRef,
|
|
3399
4090
|
"data-slot": "input-otp-group",
|
|
3400
4091
|
className: cn("flex items-center", className),
|
|
3401
4092
|
...props
|
|
3402
4093
|
});
|
|
3403
|
-
}
|
|
3404
|
-
|
|
3405
|
-
|
|
4094
|
+
});
|
|
4095
|
+
InputOTPGroup.displayName = "InputOTPGroup";
|
|
4096
|
+
const InputOTPSlot = React.forwardRef((componentProps, forwardRef) => {
|
|
4097
|
+
const { index, className, ...props } = componentProps;
|
|
4098
|
+
const { char, hasFakeCaret, isActive } = React.useContext(OTPInputContext)?.slots[index] ?? {};
|
|
3406
4099
|
return /* @__PURE__ */ jsxs("div", {
|
|
4100
|
+
ref: forwardRef,
|
|
3407
4101
|
"data-slot": "input-otp-slot",
|
|
3408
4102
|
"data-active": isActive,
|
|
3409
4103
|
className: cn("data-[active=true]:border-ring data-[active=true]:ring-ring/50 dark:bg-input/30 border-input relative flex items-center justify-center border-y border-r text-sm transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-3", className),
|
|
@@ -3413,21 +4107,26 @@ function InputOTPSlot({ index, className, ...props }) {
|
|
|
3413
4107
|
children: /* @__PURE__ */ jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" })
|
|
3414
4108
|
})]
|
|
3415
4109
|
});
|
|
3416
|
-
}
|
|
3417
|
-
|
|
4110
|
+
});
|
|
4111
|
+
InputOTPSlot.displayName = "InputOTPSlot";
|
|
4112
|
+
const InputOTPSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
4113
|
+
const { ...props } = componentProps;
|
|
3418
4114
|
return /* @__PURE__ */ jsx("div", {
|
|
4115
|
+
ref: forwardRef,
|
|
3419
4116
|
"data-slot": "input-otp-separator",
|
|
3420
4117
|
role: "separator",
|
|
3421
4118
|
...props,
|
|
3422
4119
|
children: /* @__PURE__ */ jsx(MinusIcon, {})
|
|
3423
4120
|
});
|
|
3424
|
-
}
|
|
4121
|
+
});
|
|
4122
|
+
InputOTPSeparator.displayName = "InputOTPSeparator";
|
|
3425
4123
|
|
|
3426
4124
|
//#endregion
|
|
3427
4125
|
//#region src/components/item.tsx
|
|
3428
|
-
const ItemGroup = React
|
|
4126
|
+
const ItemGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
4127
|
+
const { className, stackedItems = false, ...props } = componentProps;
|
|
3429
4128
|
return /* @__PURE__ */ jsx("div", {
|
|
3430
|
-
ref,
|
|
4129
|
+
ref: forwardRef,
|
|
3431
4130
|
role: "list",
|
|
3432
4131
|
"data-slot": "item-group",
|
|
3433
4132
|
"data-stacked": stackedItems ? "" : void 0,
|
|
@@ -3436,14 +4135,17 @@ const ItemGroup = React$1.forwardRef(({ className, stackedItems = false, ...prop
|
|
|
3436
4135
|
});
|
|
3437
4136
|
});
|
|
3438
4137
|
ItemGroup.displayName = "ItemGroup";
|
|
3439
|
-
|
|
4138
|
+
const ItemSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
4139
|
+
const { className, ...props } = componentProps;
|
|
3440
4140
|
return /* @__PURE__ */ jsx(Separator, {
|
|
4141
|
+
ref: forwardRef,
|
|
3441
4142
|
"data-slot": "item-separator",
|
|
3442
4143
|
orientation: "horizontal",
|
|
3443
4144
|
className: cn("my-2", className),
|
|
3444
4145
|
...props
|
|
3445
4146
|
});
|
|
3446
|
-
}
|
|
4147
|
+
});
|
|
4148
|
+
ItemSeparator.displayName = "ItemSeparator";
|
|
3447
4149
|
const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-md border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted", {
|
|
3448
4150
|
variants: {
|
|
3449
4151
|
variant: {
|
|
@@ -3462,7 +4164,8 @@ const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-
|
|
|
3462
4164
|
size: "default"
|
|
3463
4165
|
}
|
|
3464
4166
|
});
|
|
3465
|
-
const Item = React
|
|
4167
|
+
const Item = React.forwardRef((componentProps, forwardRef) => {
|
|
4168
|
+
const { className, variant = "default", size = "default", render, ...props } = componentProps;
|
|
3466
4169
|
return useRender({
|
|
3467
4170
|
defaultTagName: "div",
|
|
3468
4171
|
props: mergeProps({
|
|
@@ -3471,7 +4174,7 @@ const Item = React$1.forwardRef(({ className, variant = "default", size = "defau
|
|
|
3471
4174
|
size,
|
|
3472
4175
|
className
|
|
3473
4176
|
})),
|
|
3474
|
-
ref
|
|
4177
|
+
ref: forwardRef
|
|
3475
4178
|
}, props),
|
|
3476
4179
|
render,
|
|
3477
4180
|
state: {
|
|
@@ -3490,9 +4193,10 @@ const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 g
|
|
|
3490
4193
|
} },
|
|
3491
4194
|
defaultVariants: { variant: "default" }
|
|
3492
4195
|
});
|
|
3493
|
-
const ItemMedia = React
|
|
4196
|
+
const ItemMedia = React.forwardRef((componentProps, forwardRef) => {
|
|
4197
|
+
const { className, variant = "default", ...props } = componentProps;
|
|
3494
4198
|
return /* @__PURE__ */ jsx("div", {
|
|
3495
|
-
ref,
|
|
4199
|
+
ref: forwardRef,
|
|
3496
4200
|
"data-slot": "item-media",
|
|
3497
4201
|
"data-variant": variant,
|
|
3498
4202
|
className: cn(itemMediaVariants({
|
|
@@ -3503,54 +4207,60 @@ const ItemMedia = React$1.forwardRef(({ className, variant = "default", ...props
|
|
|
3503
4207
|
});
|
|
3504
4208
|
});
|
|
3505
4209
|
ItemMedia.displayName = "ItemMedia";
|
|
3506
|
-
const ItemContent = React
|
|
4210
|
+
const ItemContent = React.forwardRef((componentProps, forwardRef) => {
|
|
4211
|
+
const { className, ...props } = componentProps;
|
|
3507
4212
|
return /* @__PURE__ */ jsx("div", {
|
|
3508
|
-
ref,
|
|
4213
|
+
ref: forwardRef,
|
|
3509
4214
|
"data-slot": "item-content",
|
|
3510
4215
|
className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
|
|
3511
4216
|
...props
|
|
3512
4217
|
});
|
|
3513
4218
|
});
|
|
3514
4219
|
ItemContent.displayName = "ItemContent";
|
|
3515
|
-
const ItemTitle = React
|
|
4220
|
+
const ItemTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
4221
|
+
const { className, ...props } = componentProps;
|
|
3516
4222
|
return /* @__PURE__ */ jsx("div", {
|
|
3517
|
-
ref,
|
|
4223
|
+
ref: forwardRef,
|
|
3518
4224
|
"data-slot": "item-title",
|
|
3519
4225
|
className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className),
|
|
3520
4226
|
...props
|
|
3521
4227
|
});
|
|
3522
4228
|
});
|
|
3523
4229
|
ItemTitle.displayName = "ItemTitle";
|
|
3524
|
-
const ItemDescription = React
|
|
4230
|
+
const ItemDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
4231
|
+
const { className, ...props } = componentProps;
|
|
3525
4232
|
return /* @__PURE__ */ jsx("p", {
|
|
3526
|
-
ref,
|
|
4233
|
+
ref: forwardRef,
|
|
3527
4234
|
"data-slot": "item-description",
|
|
3528
4235
|
className: cn("line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
|
|
3529
4236
|
...props
|
|
3530
4237
|
});
|
|
3531
4238
|
});
|
|
3532
4239
|
ItemDescription.displayName = "ItemDescription";
|
|
3533
|
-
const ItemActions = React
|
|
4240
|
+
const ItemActions = React.forwardRef((componentProps, forwardRef) => {
|
|
4241
|
+
const { className, ...props } = componentProps;
|
|
3534
4242
|
return /* @__PURE__ */ jsx("div", {
|
|
3535
|
-
ref,
|
|
4243
|
+
ref: forwardRef,
|
|
3536
4244
|
"data-slot": "item-actions",
|
|
3537
4245
|
className: cn("flex items-center gap-2", className),
|
|
3538
4246
|
...props
|
|
3539
4247
|
});
|
|
3540
4248
|
});
|
|
3541
4249
|
ItemActions.displayName = "ItemActions";
|
|
3542
|
-
const ItemHeader = React
|
|
4250
|
+
const ItemHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
4251
|
+
const { className, ...props } = componentProps;
|
|
3543
4252
|
return /* @__PURE__ */ jsx("div", {
|
|
3544
|
-
ref,
|
|
4253
|
+
ref: forwardRef,
|
|
3545
4254
|
"data-slot": "item-header",
|
|
3546
4255
|
className: cn("flex basis-full items-center justify-between gap-2", className),
|
|
3547
4256
|
...props
|
|
3548
4257
|
});
|
|
3549
4258
|
});
|
|
3550
4259
|
ItemHeader.displayName = "ItemHeader";
|
|
3551
|
-
const ItemFooter = React
|
|
4260
|
+
const ItemFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
4261
|
+
const { className, ...props } = componentProps;
|
|
3552
4262
|
return /* @__PURE__ */ jsx("div", {
|
|
3553
|
-
ref,
|
|
4263
|
+
ref: forwardRef,
|
|
3554
4264
|
"data-slot": "item-footer",
|
|
3555
4265
|
className: cn("flex basis-full items-center justify-between gap-2", className),
|
|
3556
4266
|
...props
|
|
@@ -3560,55 +4270,74 @@ ItemFooter.displayName = "ItemFooter";
|
|
|
3560
4270
|
|
|
3561
4271
|
//#endregion
|
|
3562
4272
|
//#region src/components/list.tsx
|
|
3563
|
-
const List = (
|
|
4273
|
+
const List = React.forwardRef((componentProps, forwardRef) => {
|
|
4274
|
+
const { children, className, ...props } = componentProps;
|
|
3564
4275
|
return /* @__PURE__ */ jsx("div", {
|
|
4276
|
+
ref: forwardRef,
|
|
3565
4277
|
className: cn("flex flex-col", className),
|
|
3566
4278
|
...props,
|
|
3567
4279
|
children
|
|
3568
4280
|
});
|
|
3569
|
-
};
|
|
3570
|
-
|
|
4281
|
+
});
|
|
4282
|
+
List.displayName = "List";
|
|
4283
|
+
const ListRow = React.forwardRef((componentProps, forwardRef) => {
|
|
4284
|
+
const { children, className, ...props } = componentProps;
|
|
3571
4285
|
return /* @__PURE__ */ jsx("div", {
|
|
3572
|
-
ref,
|
|
4286
|
+
ref: forwardRef,
|
|
3573
4287
|
className: cn("grid grid-flow-col gap-x-2.5 gap-y-2 p-3 relative rounded-lg", "grid-cols-[minmax(0,auto)_1fr]", className),
|
|
3574
4288
|
...props,
|
|
3575
4289
|
children
|
|
3576
4290
|
});
|
|
3577
4291
|
});
|
|
3578
|
-
|
|
4292
|
+
ListRow.displayName = "ListRow";
|
|
4293
|
+
const ListCol = React.forwardRef((componentProps, forwardRef) => {
|
|
4294
|
+
const { grow, wrap, children, className, ...props } = componentProps;
|
|
3579
4295
|
return /* @__PURE__ */ jsx("div", {
|
|
4296
|
+
ref: forwardRef,
|
|
3580
4297
|
className: cn(!wrap && "row-start-1", className),
|
|
3581
4298
|
...props,
|
|
3582
4299
|
children
|
|
3583
4300
|
});
|
|
3584
|
-
};
|
|
4301
|
+
});
|
|
4302
|
+
ListCol.displayName = "ListCol";
|
|
3585
4303
|
|
|
3586
4304
|
//#endregion
|
|
3587
4305
|
//#region src/components/pagination.tsx
|
|
3588
|
-
|
|
4306
|
+
const Pagination = React.forwardRef((componentProps, forwardRef) => {
|
|
4307
|
+
const { className, ...props } = componentProps;
|
|
3589
4308
|
return /* @__PURE__ */ jsx("nav", {
|
|
4309
|
+
ref: forwardRef,
|
|
3590
4310
|
role: "navigation",
|
|
3591
4311
|
"aria-label": "pagination",
|
|
3592
4312
|
"data-slot": "pagination",
|
|
3593
4313
|
className: cn("mx-auto flex w-full justify-center", className),
|
|
3594
4314
|
...props
|
|
3595
4315
|
});
|
|
3596
|
-
}
|
|
3597
|
-
|
|
4316
|
+
});
|
|
4317
|
+
Pagination.displayName = "Pagination";
|
|
4318
|
+
const PaginationContent = React.forwardRef((componentProps, forwardRef) => {
|
|
4319
|
+
const { className, ...props } = componentProps;
|
|
3598
4320
|
return /* @__PURE__ */ jsx("ul", {
|
|
4321
|
+
ref: forwardRef,
|
|
3599
4322
|
"data-slot": "pagination-content",
|
|
3600
4323
|
className: cn("flex items-center gap-1", className),
|
|
3601
4324
|
...props
|
|
3602
4325
|
});
|
|
3603
|
-
}
|
|
3604
|
-
|
|
4326
|
+
});
|
|
4327
|
+
PaginationContent.displayName = "PaginationContent";
|
|
4328
|
+
const PaginationItem = React.forwardRef((componentProps, forwardRef) => {
|
|
4329
|
+
const { ...props } = componentProps;
|
|
3605
4330
|
return /* @__PURE__ */ jsx("li", {
|
|
4331
|
+
ref: forwardRef,
|
|
3606
4332
|
"data-slot": "pagination-item",
|
|
3607
4333
|
...props
|
|
3608
4334
|
});
|
|
3609
|
-
}
|
|
3610
|
-
|
|
4335
|
+
});
|
|
4336
|
+
PaginationItem.displayName = "PaginationItem";
|
|
4337
|
+
const PaginationLink = React.forwardRef((componentProps, forwardRef) => {
|
|
4338
|
+
const { className, isActive, size = "icon", ...props } = componentProps;
|
|
3611
4339
|
return /* @__PURE__ */ jsx(Button, {
|
|
4340
|
+
ref: forwardRef,
|
|
3612
4341
|
variant: isActive ? "outline" : "ghost",
|
|
3613
4342
|
size,
|
|
3614
4343
|
className: cn(className),
|
|
@@ -3620,9 +4349,12 @@ function PaginationLink({ className, isActive, size = "icon", ...props }) {
|
|
|
3620
4349
|
...props
|
|
3621
4350
|
})
|
|
3622
4351
|
});
|
|
3623
|
-
}
|
|
3624
|
-
|
|
4352
|
+
});
|
|
4353
|
+
PaginationLink.displayName = "PaginationLink";
|
|
4354
|
+
const PaginationPrevious = React.forwardRef((componentProps, forwardRef) => {
|
|
4355
|
+
const { className, text = "Previous", ...props } = componentProps;
|
|
3625
4356
|
return /* @__PURE__ */ jsxs(PaginationLink, {
|
|
4357
|
+
ref: forwardRef,
|
|
3626
4358
|
"aria-label": "Go to previous page",
|
|
3627
4359
|
size: "default",
|
|
3628
4360
|
className: cn("pl-2!", className),
|
|
@@ -3632,9 +4364,12 @@ function PaginationPrevious({ className, text = "Previous", ...props }) {
|
|
|
3632
4364
|
children: text
|
|
3633
4365
|
})]
|
|
3634
4366
|
});
|
|
3635
|
-
}
|
|
3636
|
-
|
|
4367
|
+
});
|
|
4368
|
+
PaginationPrevious.displayName = "PaginationPrevious";
|
|
4369
|
+
const PaginationNext = React.forwardRef((componentProps, forwardRef) => {
|
|
4370
|
+
const { className, text = "Next", ...props } = componentProps;
|
|
3637
4371
|
return /* @__PURE__ */ jsxs(PaginationLink, {
|
|
4372
|
+
ref: forwardRef,
|
|
3638
4373
|
"aria-label": "Go to next page",
|
|
3639
4374
|
size: "default",
|
|
3640
4375
|
className: cn("pr-2!", className),
|
|
@@ -3644,9 +4379,12 @@ function PaginationNext({ className, text = "Next", ...props }) {
|
|
|
3644
4379
|
children: text
|
|
3645
4380
|
}), /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })]
|
|
3646
4381
|
});
|
|
3647
|
-
}
|
|
3648
|
-
|
|
4382
|
+
});
|
|
4383
|
+
PaginationNext.displayName = "PaginationNext";
|
|
4384
|
+
const PaginationEllipsis = React.forwardRef((componentProps, forwardRef) => {
|
|
4385
|
+
const { className, ...props } = componentProps;
|
|
3649
4386
|
return /* @__PURE__ */ jsxs("span", {
|
|
4387
|
+
ref: forwardRef,
|
|
3650
4388
|
"aria-hidden": true,
|
|
3651
4389
|
"data-slot": "pagination-ellipsis",
|
|
3652
4390
|
className: cn("flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className),
|
|
@@ -3656,59 +4394,80 @@ function PaginationEllipsis({ className, ...props }) {
|
|
|
3656
4394
|
children: "More pages"
|
|
3657
4395
|
})]
|
|
3658
4396
|
});
|
|
3659
|
-
}
|
|
4397
|
+
});
|
|
4398
|
+
PaginationEllipsis.displayName = "PaginationEllipsis";
|
|
3660
4399
|
|
|
3661
4400
|
//#endregion
|
|
3662
4401
|
//#region src/components/progress.tsx
|
|
3663
|
-
|
|
4402
|
+
const Progress = React.forwardRef((componentProps, forwardRef) => {
|
|
4403
|
+
const { className, children, value, ...props } = componentProps;
|
|
3664
4404
|
return /* @__PURE__ */ jsxs(Progress$1.Root, {
|
|
4405
|
+
ref: forwardRef,
|
|
3665
4406
|
value,
|
|
3666
4407
|
"data-slot": "progress",
|
|
3667
4408
|
className: cn("flex flex-wrap gap-3", className),
|
|
3668
4409
|
...props,
|
|
3669
4410
|
children: [children, /* @__PURE__ */ jsx(ProgressTrack, { children: /* @__PURE__ */ jsx(ProgressIndicator, {}) })]
|
|
3670
4411
|
});
|
|
3671
|
-
}
|
|
3672
|
-
|
|
4412
|
+
});
|
|
4413
|
+
Progress.displayName = "Progress";
|
|
4414
|
+
const ProgressTrack = React.forwardRef((componentProps, forwardRef) => {
|
|
4415
|
+
const { className, ...props } = componentProps;
|
|
3673
4416
|
return /* @__PURE__ */ jsx(Progress$1.Track, {
|
|
4417
|
+
ref: forwardRef,
|
|
3674
4418
|
className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted", className),
|
|
3675
4419
|
"data-slot": "progress-track",
|
|
3676
4420
|
...props
|
|
3677
4421
|
});
|
|
3678
|
-
}
|
|
3679
|
-
|
|
4422
|
+
});
|
|
4423
|
+
ProgressTrack.displayName = "ProgressTrack";
|
|
4424
|
+
const ProgressIndicator = React.forwardRef((componentProps, forwardRef) => {
|
|
4425
|
+
const { className, ...props } = componentProps;
|
|
3680
4426
|
return /* @__PURE__ */ jsx(Progress$1.Indicator, {
|
|
4427
|
+
ref: forwardRef,
|
|
3681
4428
|
"data-slot": "progress-indicator",
|
|
3682
4429
|
className: cn("h-full bg-primary transition-all", className),
|
|
3683
4430
|
...props
|
|
3684
4431
|
});
|
|
3685
|
-
}
|
|
3686
|
-
|
|
4432
|
+
});
|
|
4433
|
+
ProgressIndicator.displayName = "ProgressIndicator";
|
|
4434
|
+
const ProgressLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
4435
|
+
const { className, ...props } = componentProps;
|
|
3687
4436
|
return /* @__PURE__ */ jsx(Progress$1.Label, {
|
|
4437
|
+
ref: forwardRef,
|
|
3688
4438
|
className: cn("text-sm font-medium", className),
|
|
3689
4439
|
"data-slot": "progress-label",
|
|
3690
4440
|
...props
|
|
3691
4441
|
});
|
|
3692
|
-
}
|
|
3693
|
-
|
|
4442
|
+
});
|
|
4443
|
+
ProgressLabel.displayName = "ProgressLabel";
|
|
4444
|
+
const ProgressValue = React.forwardRef((componentProps, forwardRef) => {
|
|
4445
|
+
const { className, ...props } = componentProps;
|
|
3694
4446
|
return /* @__PURE__ */ jsx(Progress$1.Value, {
|
|
4447
|
+
ref: forwardRef,
|
|
3695
4448
|
className: cn("ml-auto text-sm text-muted-foreground tabular-nums", className),
|
|
3696
4449
|
"data-slot": "progress-value",
|
|
3697
4450
|
...props
|
|
3698
4451
|
});
|
|
3699
|
-
}
|
|
4452
|
+
});
|
|
4453
|
+
ProgressValue.displayName = "ProgressValue";
|
|
3700
4454
|
|
|
3701
4455
|
//#endregion
|
|
3702
4456
|
//#region src/components/radio-group.tsx
|
|
3703
|
-
|
|
4457
|
+
const RadioGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
4458
|
+
const { className, ...props } = componentProps;
|
|
3704
4459
|
return /* @__PURE__ */ jsx(RadioGroup$1, {
|
|
4460
|
+
ref: forwardRef,
|
|
3705
4461
|
"data-slot": "radio-group",
|
|
3706
4462
|
className: cn("grid w-full gap-3", className),
|
|
3707
4463
|
...props
|
|
3708
4464
|
});
|
|
3709
|
-
}
|
|
3710
|
-
|
|
4465
|
+
});
|
|
4466
|
+
RadioGroup.displayName = "RadioGroup";
|
|
4467
|
+
const RadioGroupItem = React.forwardRef((componentProps, forwardRef) => {
|
|
4468
|
+
const { className, ...props } = componentProps;
|
|
3711
4469
|
return /* @__PURE__ */ jsx(Radio.Root, {
|
|
4470
|
+
ref: forwardRef,
|
|
3712
4471
|
"data-slot": "radio-group-item",
|
|
3713
4472
|
className: cn("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none transition-[color,box-shadow,opacity] active:opacity-60 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50 aria-invalid:border-destructive focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 data-checked:border-primary aria-invalid:data-checked:border-destructive", className),
|
|
3714
4473
|
...props,
|
|
@@ -3718,7 +4477,8 @@ function RadioGroupItem({ className, ...props }) {
|
|
|
3718
4477
|
children: /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-primary group-aria-invalid/radio-group-item:bg-destructive" })
|
|
3719
4478
|
})
|
|
3720
4479
|
});
|
|
3721
|
-
}
|
|
4480
|
+
});
|
|
4481
|
+
RadioGroupItem.displayName = "RadioGroupItem";
|
|
3722
4482
|
|
|
3723
4483
|
//#endregion
|
|
3724
4484
|
//#region src/components/select.tsx
|
|
@@ -3730,30 +4490,38 @@ const selectTriggerVariants = cva("flex w-fit items-center justify-between round
|
|
|
3730
4490
|
defaultVariants: { size: "default" }
|
|
3731
4491
|
});
|
|
3732
4492
|
const Select = Select$1.Root;
|
|
3733
|
-
|
|
4493
|
+
const SelectGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
4494
|
+
const { className, ...props } = componentProps;
|
|
3734
4495
|
return /* @__PURE__ */ jsx(Select$1.Group, {
|
|
4496
|
+
ref: forwardRef,
|
|
3735
4497
|
"data-slot": "select-group",
|
|
3736
4498
|
className: cn("scroll-my-1", className),
|
|
3737
4499
|
...props
|
|
3738
4500
|
});
|
|
3739
|
-
}
|
|
3740
|
-
|
|
4501
|
+
});
|
|
4502
|
+
SelectGroup.displayName = "SelectGroup";
|
|
4503
|
+
function SelectValue(componentProps) {
|
|
4504
|
+
const { className, ...props } = componentProps;
|
|
3741
4505
|
return /* @__PURE__ */ jsx(Select$1.Value, {
|
|
3742
4506
|
"data-slot": "select-value",
|
|
3743
4507
|
className: cn("flex flex-1 text-left", className),
|
|
3744
4508
|
...props
|
|
3745
4509
|
});
|
|
3746
4510
|
}
|
|
3747
|
-
|
|
4511
|
+
const SelectTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
4512
|
+
const { className, size = "default", children, ...props } = componentProps;
|
|
3748
4513
|
return /* @__PURE__ */ jsxs(Select$1.Trigger, {
|
|
4514
|
+
ref: forwardRef,
|
|
3749
4515
|
"data-slot": "select-trigger",
|
|
3750
4516
|
"data-size": size,
|
|
3751
4517
|
className: cn(selectTriggerVariants({ size }), className),
|
|
3752
4518
|
...props,
|
|
3753
4519
|
children: [children, /* @__PURE__ */ jsx(Select$1.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
|
|
3754
4520
|
});
|
|
3755
|
-
}
|
|
3756
|
-
|
|
4521
|
+
});
|
|
4522
|
+
SelectTrigger.displayName = "SelectTrigger";
|
|
4523
|
+
const SelectContent = React.forwardRef((componentProps, forwardRef) => {
|
|
4524
|
+
const { className, children, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, alignItemWithTrigger = false, ...props } = componentProps;
|
|
3757
4525
|
return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(Select$1.Positioner, {
|
|
3758
4526
|
side,
|
|
3759
4527
|
sideOffset,
|
|
@@ -3762,9 +4530,10 @@ function SelectContent({ className, children, side = "bottom", sideOffset = 4, a
|
|
|
3762
4530
|
alignItemWithTrigger,
|
|
3763
4531
|
className: "isolate z-50",
|
|
3764
4532
|
children: /* @__PURE__ */ jsxs(Select$1.Popup, {
|
|
4533
|
+
ref: forwardRef,
|
|
3765
4534
|
"data-slot": "select-content",
|
|
3766
4535
|
"data-align-trigger": alignItemWithTrigger,
|
|
3767
|
-
className: cn("relative isolate z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md p-1 bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
4536
|
+
className: cn("relative isolate z-50 max-h-(--available-height) min-w-36 min-w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md p-1 bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
3768
4537
|
...props,
|
|
3769
4538
|
children: [
|
|
3770
4539
|
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
@@ -3773,16 +4542,22 @@ function SelectContent({ className, children, side = "bottom", sideOffset = 4, a
|
|
|
3773
4542
|
]
|
|
3774
4543
|
})
|
|
3775
4544
|
}) });
|
|
3776
|
-
}
|
|
3777
|
-
|
|
4545
|
+
});
|
|
4546
|
+
SelectContent.displayName = "SelectContent";
|
|
4547
|
+
const SelectLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
4548
|
+
const { className, ...props } = componentProps;
|
|
3778
4549
|
return /* @__PURE__ */ jsx(Select$1.GroupLabel, {
|
|
4550
|
+
ref: forwardRef,
|
|
3779
4551
|
"data-slot": "select-label",
|
|
3780
4552
|
className: cn("p-2 text-xs text-muted-foreground", className),
|
|
3781
4553
|
...props
|
|
3782
4554
|
});
|
|
3783
|
-
}
|
|
3784
|
-
|
|
4555
|
+
});
|
|
4556
|
+
SelectLabel.displayName = "SelectLabel";
|
|
4557
|
+
const SelectItem = React.forwardRef((componentProps, forwardRef) => {
|
|
4558
|
+
const { className, children, ...props } = componentProps;
|
|
3785
4559
|
return /* @__PURE__ */ jsxs(Select$1.Item, {
|
|
4560
|
+
ref: forwardRef,
|
|
3786
4561
|
"data-slot": "select-item",
|
|
3787
4562
|
className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md p-2 pr-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
|
|
3788
4563
|
...props,
|
|
@@ -3795,70 +4570,89 @@ function SelectItem({ className, children, ...props }) {
|
|
|
3795
4570
|
children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
|
|
3796
4571
|
})]
|
|
3797
4572
|
});
|
|
3798
|
-
}
|
|
3799
|
-
|
|
4573
|
+
});
|
|
4574
|
+
SelectItem.displayName = "SelectItem";
|
|
4575
|
+
const SelectSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
4576
|
+
const { className, ...props } = componentProps;
|
|
3800
4577
|
return /* @__PURE__ */ jsx(Select$1.Separator, {
|
|
4578
|
+
ref: forwardRef,
|
|
3801
4579
|
"data-slot": "select-separator",
|
|
3802
4580
|
className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
|
|
3803
4581
|
...props
|
|
3804
4582
|
});
|
|
3805
|
-
}
|
|
3806
|
-
|
|
4583
|
+
});
|
|
4584
|
+
SelectSeparator.displayName = "SelectSeparator";
|
|
4585
|
+
const SelectScrollUpButton = React.forwardRef((componentProps, forwardRef) => {
|
|
4586
|
+
const { className, ...props } = componentProps;
|
|
3807
4587
|
return /* @__PURE__ */ jsx(Select$1.ScrollUpArrow, {
|
|
4588
|
+
ref: forwardRef,
|
|
3808
4589
|
"data-slot": "select-scroll-up-button",
|
|
3809
4590
|
className: cn("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
|
|
3810
4591
|
...props,
|
|
3811
4592
|
children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
|
|
3812
4593
|
});
|
|
3813
|
-
}
|
|
3814
|
-
|
|
4594
|
+
});
|
|
4595
|
+
SelectScrollUpButton.displayName = "SelectScrollUpButton";
|
|
4596
|
+
const SelectScrollDownButton = React.forwardRef((componentProps, forwardRef) => {
|
|
4597
|
+
const { className, ...props } = componentProps;
|
|
3815
4598
|
return /* @__PURE__ */ jsx(Select$1.ScrollDownArrow, {
|
|
4599
|
+
ref: forwardRef,
|
|
3816
4600
|
"data-slot": "select-scroll-down-button",
|
|
3817
4601
|
className: cn("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
|
|
3818
4602
|
...props,
|
|
3819
4603
|
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
3820
4604
|
});
|
|
3821
|
-
}
|
|
4605
|
+
});
|
|
4606
|
+
SelectScrollDownButton.displayName = "SelectScrollDownButton";
|
|
3822
4607
|
|
|
3823
4608
|
//#endregion
|
|
3824
4609
|
//#region src/components/sheet.tsx
|
|
3825
|
-
function Sheet(
|
|
4610
|
+
function Sheet(componentProps) {
|
|
3826
4611
|
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
3827
4612
|
"data-slot": "sheet",
|
|
3828
|
-
...
|
|
4613
|
+
...componentProps
|
|
3829
4614
|
});
|
|
3830
4615
|
}
|
|
3831
|
-
|
|
4616
|
+
const SheetTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
4617
|
+
const { ...props } = componentProps;
|
|
3832
4618
|
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
4619
|
+
ref: forwardRef,
|
|
3833
4620
|
"data-slot": "sheet-trigger",
|
|
3834
4621
|
...props
|
|
3835
4622
|
});
|
|
3836
|
-
}
|
|
3837
|
-
|
|
4623
|
+
});
|
|
4624
|
+
SheetTrigger.displayName = "SheetTrigger";
|
|
4625
|
+
const SheetClose = React.forwardRef((componentProps, forwardRef) => {
|
|
4626
|
+
const { ...props } = componentProps;
|
|
3838
4627
|
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
4628
|
+
ref: forwardRef,
|
|
3839
4629
|
"data-slot": "sheet-close",
|
|
3840
4630
|
...props
|
|
3841
4631
|
});
|
|
3842
|
-
}
|
|
3843
|
-
|
|
4632
|
+
});
|
|
4633
|
+
SheetClose.displayName = "SheetClose";
|
|
4634
|
+
function SheetPortal(componentProps) {
|
|
3844
4635
|
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
3845
4636
|
"data-slot": "sheet-portal",
|
|
3846
|
-
...
|
|
4637
|
+
...componentProps
|
|
3847
4638
|
});
|
|
3848
4639
|
}
|
|
3849
|
-
const SheetOverlay = React
|
|
4640
|
+
const SheetOverlay = React.forwardRef((componentProps, forwardRef) => {
|
|
4641
|
+
const { className, ...props } = componentProps;
|
|
3850
4642
|
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
3851
4643
|
"data-slot": "sheet-overlay",
|
|
3852
4644
|
className: cn("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs", className),
|
|
3853
4645
|
...props,
|
|
3854
|
-
ref
|
|
4646
|
+
ref: forwardRef
|
|
3855
4647
|
});
|
|
3856
4648
|
});
|
|
3857
4649
|
SheetOverlay.displayName = "SheetOverlay";
|
|
3858
|
-
|
|
4650
|
+
const SheetContent = React.forwardRef((componentProps, forwardRef) => {
|
|
4651
|
+
const { className, children, side = "right", showCloseButton = true, container, ...props } = componentProps;
|
|
3859
4652
|
return /* @__PURE__ */ jsxs(SheetPortal, {
|
|
3860
4653
|
container,
|
|
3861
4654
|
children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
|
|
4655
|
+
ref: forwardRef,
|
|
3862
4656
|
"data-slot": "sheet-content",
|
|
3863
4657
|
"data-side": side,
|
|
3864
4658
|
className: cn("fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className),
|
|
@@ -3877,58 +4671,77 @@ function SheetContent({ className, children, side = "right", showCloseButton = t
|
|
|
3877
4671
|
})]
|
|
3878
4672
|
})]
|
|
3879
4673
|
});
|
|
3880
|
-
}
|
|
3881
|
-
|
|
4674
|
+
});
|
|
4675
|
+
SheetContent.displayName = "SheetContent";
|
|
4676
|
+
const SheetHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
4677
|
+
const { className, ...props } = componentProps;
|
|
3882
4678
|
return /* @__PURE__ */ jsx("div", {
|
|
4679
|
+
ref: forwardRef,
|
|
3883
4680
|
"data-slot": "sheet-header",
|
|
3884
4681
|
className: cn("flex flex-col gap-1.5 p-4", className),
|
|
3885
4682
|
...props
|
|
3886
4683
|
});
|
|
3887
|
-
}
|
|
3888
|
-
|
|
4684
|
+
});
|
|
4685
|
+
SheetHeader.displayName = "SheetHeader";
|
|
4686
|
+
const SheetFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
4687
|
+
const { className, ...props } = componentProps;
|
|
3889
4688
|
return /* @__PURE__ */ jsx("div", {
|
|
4689
|
+
ref: forwardRef,
|
|
3890
4690
|
"data-slot": "sheet-footer",
|
|
3891
4691
|
className: cn("mt-auto flex flex-col gap-2 p-4", className),
|
|
3892
4692
|
...props
|
|
3893
4693
|
});
|
|
3894
|
-
}
|
|
3895
|
-
|
|
4694
|
+
});
|
|
4695
|
+
SheetFooter.displayName = "SheetFooter";
|
|
4696
|
+
const SheetTitle = React.forwardRef((componentProps, forwardRef) => {
|
|
4697
|
+
const { className, ...props } = componentProps;
|
|
3896
4698
|
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
4699
|
+
ref: forwardRef,
|
|
3897
4700
|
"data-slot": "sheet-title",
|
|
3898
4701
|
className: cn("font-medium text-foreground", className),
|
|
3899
4702
|
...props
|
|
3900
4703
|
});
|
|
3901
|
-
}
|
|
3902
|
-
|
|
4704
|
+
});
|
|
4705
|
+
SheetTitle.displayName = "SheetTitle";
|
|
4706
|
+
const SheetDescription = React.forwardRef((componentProps, forwardRef) => {
|
|
4707
|
+
const { className, ...props } = componentProps;
|
|
3903
4708
|
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
4709
|
+
ref: forwardRef,
|
|
3904
4710
|
"data-slot": "sheet-description",
|
|
3905
4711
|
className: cn("text-sm text-muted-foreground", className),
|
|
3906
4712
|
...props
|
|
3907
4713
|
});
|
|
3908
|
-
}
|
|
4714
|
+
});
|
|
4715
|
+
SheetDescription.displayName = "SheetDescription";
|
|
3909
4716
|
|
|
3910
4717
|
//#endregion
|
|
3911
4718
|
//#region src/components/tooltip.tsx
|
|
3912
|
-
function TooltipProvider(
|
|
4719
|
+
function TooltipProvider(componentProps) {
|
|
4720
|
+
const { delay = 0, ...props } = componentProps;
|
|
3913
4721
|
return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
|
|
3914
4722
|
"data-slot": "tooltip-provider",
|
|
3915
4723
|
delay,
|
|
3916
4724
|
...props
|
|
3917
4725
|
});
|
|
3918
4726
|
}
|
|
3919
|
-
function Tooltip(
|
|
4727
|
+
function Tooltip(componentProps) {
|
|
4728
|
+
const { ...props } = componentProps;
|
|
3920
4729
|
return /* @__PURE__ */ jsx(Tooltip$1.Root, {
|
|
3921
4730
|
"data-slot": "tooltip",
|
|
3922
4731
|
...props
|
|
3923
4732
|
});
|
|
3924
4733
|
}
|
|
3925
|
-
|
|
4734
|
+
const TooltipTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
4735
|
+
const { ...props } = componentProps;
|
|
3926
4736
|
return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
|
|
4737
|
+
ref: forwardRef,
|
|
3927
4738
|
"data-slot": "tooltip-trigger",
|
|
3928
4739
|
...props
|
|
3929
4740
|
});
|
|
3930
|
-
}
|
|
3931
|
-
|
|
4741
|
+
});
|
|
4742
|
+
TooltipTrigger.displayName = "TooltipTrigger";
|
|
4743
|
+
const TooltipContent = React.forwardRef((componentProps, forwardRef) => {
|
|
4744
|
+
const { className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props } = componentProps;
|
|
3932
4745
|
return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
|
|
3933
4746
|
align,
|
|
3934
4747
|
alignOffset,
|
|
@@ -3936,7 +4749,7 @@ const TooltipContent = React$1.forwardRef(({ className, side = "top", sideOffset
|
|
|
3936
4749
|
sideOffset,
|
|
3937
4750
|
className: "isolate z-50",
|
|
3938
4751
|
children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
|
|
3939
|
-
ref,
|
|
4752
|
+
ref: forwardRef,
|
|
3940
4753
|
"data-slot": "tooltip-content",
|
|
3941
4754
|
className: cn("z-50 inline-flex w-fit max-w-sm origin-(--transform-origin) items-center gap-2 rounded-md bg-accent-foreground p-2 text-sm font-medium text-primary-foreground has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
3942
4755
|
...props,
|
|
@@ -3950,8 +4763,8 @@ TooltipContent.displayName = "TooltipContent";
|
|
|
3950
4763
|
//#region src/hooks/use-mobile.ts
|
|
3951
4764
|
const MOBILE_BREAKPOINT = 768;
|
|
3952
4765
|
function useIsMobile() {
|
|
3953
|
-
const [isMobile, setIsMobile] = React
|
|
3954
|
-
React
|
|
4766
|
+
const [isMobile, setIsMobile] = React.useState(void 0);
|
|
4767
|
+
React.useEffect(() => {
|
|
3955
4768
|
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
3956
4769
|
const onChange = () => {
|
|
3957
4770
|
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
@@ -3971,31 +4784,32 @@ const SIDEBAR_WIDTH = "16rem";
|
|
|
3971
4784
|
const SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
3972
4785
|
const SIDEBAR_WIDTH_ICON = "3rem";
|
|
3973
4786
|
const SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
3974
|
-
const SidebarContext = React
|
|
4787
|
+
const SidebarContext = React.createContext(null);
|
|
3975
4788
|
function useSidebar() {
|
|
3976
|
-
const context = React
|
|
4789
|
+
const context = React.useContext(SidebarContext);
|
|
3977
4790
|
if (!context) throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
3978
4791
|
return context;
|
|
3979
4792
|
}
|
|
3980
|
-
|
|
4793
|
+
const SidebarProvider = React.forwardRef((componentProps, forwardRef) => {
|
|
4794
|
+
const { defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props } = componentProps;
|
|
3981
4795
|
const isMobile = useIsMobile();
|
|
3982
|
-
const [openMobile, setOpenMobile] = React
|
|
3983
|
-
const [_open, _setOpen] = React
|
|
4796
|
+
const [openMobile, setOpenMobile] = React.useState(false);
|
|
4797
|
+
const [_open, _setOpen] = React.useState(defaultOpen);
|
|
3984
4798
|
const open = openProp ?? _open;
|
|
3985
|
-
const setOpen = React
|
|
4799
|
+
const setOpen = React.useCallback((value) => {
|
|
3986
4800
|
const openState = typeof value === "function" ? value(open) : value;
|
|
3987
4801
|
if (setOpenProp) setOpenProp(openState);
|
|
3988
4802
|
else _setOpen(openState);
|
|
3989
4803
|
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
3990
4804
|
}, [setOpenProp, open]);
|
|
3991
|
-
const toggleSidebar = React
|
|
4805
|
+
const toggleSidebar = React.useCallback(() => {
|
|
3992
4806
|
return isMobile ? setOpenMobile((open$1) => !open$1) : setOpen((open$1) => !open$1);
|
|
3993
4807
|
}, [
|
|
3994
4808
|
isMobile,
|
|
3995
4809
|
setOpen,
|
|
3996
4810
|
setOpenMobile
|
|
3997
4811
|
]);
|
|
3998
|
-
React
|
|
4812
|
+
React.useEffect(() => {
|
|
3999
4813
|
const handleKeyDown = (event) => {
|
|
4000
4814
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
4001
4815
|
event.preventDefault();
|
|
@@ -4006,7 +4820,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
|
|
|
4006
4820
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
4007
4821
|
}, [toggleSidebar]);
|
|
4008
4822
|
const state = open ? "expanded" : "collapsed";
|
|
4009
|
-
const contextValue = React
|
|
4823
|
+
const contextValue = React.useMemo(() => ({
|
|
4010
4824
|
state,
|
|
4011
4825
|
open,
|
|
4012
4826
|
setOpen,
|
|
@@ -4026,6 +4840,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
|
|
|
4026
4840
|
return /* @__PURE__ */ jsx(SidebarContext.Provider, {
|
|
4027
4841
|
value: contextValue,
|
|
4028
4842
|
children: /* @__PURE__ */ jsx("div", {
|
|
4843
|
+
ref: forwardRef,
|
|
4029
4844
|
"data-slot": "sidebar-wrapper",
|
|
4030
4845
|
style: {
|
|
4031
4846
|
"--sidebar-width": SIDEBAR_WIDTH,
|
|
@@ -4037,10 +4852,13 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
|
|
|
4037
4852
|
children
|
|
4038
4853
|
})
|
|
4039
4854
|
});
|
|
4040
|
-
}
|
|
4041
|
-
|
|
4855
|
+
});
|
|
4856
|
+
SidebarProvider.displayName = "SidebarProvider";
|
|
4857
|
+
const Sidebar = React.forwardRef((componentProps, forwardRef) => {
|
|
4858
|
+
const { side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, dir, ...props } = componentProps;
|
|
4042
4859
|
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
4043
4860
|
if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
|
|
4861
|
+
ref: forwardRef,
|
|
4044
4862
|
"data-slot": "sidebar",
|
|
4045
4863
|
className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className),
|
|
4046
4864
|
...props,
|
|
@@ -4078,6 +4896,7 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
4078
4896
|
"data-slot": "sidebar-gap",
|
|
4079
4897
|
className: cn("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")
|
|
4080
4898
|
}), /* @__PURE__ */ jsx("div", {
|
|
4899
|
+
ref: forwardRef,
|
|
4081
4900
|
"data-slot": "sidebar-container",
|
|
4082
4901
|
"data-side": side,
|
|
4083
4902
|
className: cn("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex", variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", className),
|
|
@@ -4090,10 +4909,13 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
4090
4909
|
})
|
|
4091
4910
|
})]
|
|
4092
4911
|
});
|
|
4093
|
-
}
|
|
4094
|
-
|
|
4912
|
+
});
|
|
4913
|
+
Sidebar.displayName = "Sidebar";
|
|
4914
|
+
const SidebarTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
4915
|
+
const { className, onClick, ...props } = componentProps;
|
|
4095
4916
|
const { toggleSidebar } = useSidebar();
|
|
4096
4917
|
return /* @__PURE__ */ jsxs(Button, {
|
|
4918
|
+
ref: forwardRef,
|
|
4097
4919
|
"data-sidebar": "trigger",
|
|
4098
4920
|
"data-slot": "sidebar-trigger",
|
|
4099
4921
|
variant: "ghost",
|
|
@@ -4109,10 +4931,13 @@ function SidebarTrigger({ className, onClick, ...props }) {
|
|
|
4109
4931
|
children: "Toggle Sidebar"
|
|
4110
4932
|
})]
|
|
4111
4933
|
});
|
|
4112
|
-
}
|
|
4113
|
-
|
|
4934
|
+
});
|
|
4935
|
+
SidebarTrigger.displayName = "SidebarTrigger";
|
|
4936
|
+
const SidebarRail = React.forwardRef((componentProps, forwardRef) => {
|
|
4937
|
+
const { className, ...props } = componentProps;
|
|
4114
4938
|
const { toggleSidebar } = useSidebar();
|
|
4115
4939
|
return /* @__PURE__ */ jsx("button", {
|
|
4940
|
+
ref: forwardRef,
|
|
4116
4941
|
"data-sidebar": "rail",
|
|
4117
4942
|
"data-slot": "sidebar-rail",
|
|
4118
4943
|
"aria-label": "Toggle Sidebar",
|
|
@@ -4122,108 +4947,149 @@ function SidebarRail({ className, ...props }) {
|
|
|
4122
4947
|
className: cn("absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2", "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar", "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2", "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2", className),
|
|
4123
4948
|
...props
|
|
4124
4949
|
});
|
|
4125
|
-
}
|
|
4126
|
-
|
|
4950
|
+
});
|
|
4951
|
+
SidebarRail.displayName = "SidebarRail";
|
|
4952
|
+
const SidebarInset = React.forwardRef((componentProps, forwardRef) => {
|
|
4953
|
+
const { className, ...props } = componentProps;
|
|
4127
4954
|
return /* @__PURE__ */ jsx("main", {
|
|
4955
|
+
ref: forwardRef,
|
|
4128
4956
|
"data-slot": "sidebar-inset",
|
|
4129
4957
|
className: cn("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", className),
|
|
4130
4958
|
...props
|
|
4131
4959
|
});
|
|
4132
|
-
}
|
|
4133
|
-
|
|
4960
|
+
});
|
|
4961
|
+
SidebarInset.displayName = "SidebarInset";
|
|
4962
|
+
const SidebarInput = React.forwardRef((componentProps, forwardRef) => {
|
|
4963
|
+
const { className, ...props } = componentProps;
|
|
4134
4964
|
return /* @__PURE__ */ jsx(Input, {
|
|
4965
|
+
ref: forwardRef,
|
|
4135
4966
|
"data-slot": "sidebar-input",
|
|
4136
4967
|
"data-sidebar": "input",
|
|
4137
4968
|
className: cn("h-8 w-full bg-background shadow-none", className),
|
|
4138
4969
|
...props
|
|
4139
4970
|
});
|
|
4140
|
-
}
|
|
4141
|
-
|
|
4971
|
+
});
|
|
4972
|
+
SidebarInput.displayName = "SidebarInput";
|
|
4973
|
+
const SidebarHeader = React.forwardRef((componentProps, forwardRef) => {
|
|
4974
|
+
const { className, ...props } = componentProps;
|
|
4142
4975
|
return /* @__PURE__ */ jsx("div", {
|
|
4976
|
+
ref: forwardRef,
|
|
4143
4977
|
"data-slot": "sidebar-header",
|
|
4144
4978
|
"data-sidebar": "header",
|
|
4145
4979
|
className: cn("flex flex-col gap-2 p-2", className),
|
|
4146
4980
|
...props
|
|
4147
4981
|
});
|
|
4148
|
-
}
|
|
4149
|
-
|
|
4982
|
+
});
|
|
4983
|
+
SidebarHeader.displayName = "SidebarHeader";
|
|
4984
|
+
const SidebarFooter = React.forwardRef((componentProps, forwardRef) => {
|
|
4985
|
+
const { className, ...props } = componentProps;
|
|
4150
4986
|
return /* @__PURE__ */ jsx("div", {
|
|
4987
|
+
ref: forwardRef,
|
|
4151
4988
|
"data-slot": "sidebar-footer",
|
|
4152
4989
|
"data-sidebar": "footer",
|
|
4153
4990
|
className: cn("flex flex-col gap-2 p-2", className),
|
|
4154
4991
|
...props
|
|
4155
4992
|
});
|
|
4156
|
-
}
|
|
4157
|
-
|
|
4993
|
+
});
|
|
4994
|
+
SidebarFooter.displayName = "SidebarFooter";
|
|
4995
|
+
const SidebarSeparator = React.forwardRef((componentProps, forwardRef) => {
|
|
4996
|
+
const { className, ...props } = componentProps;
|
|
4158
4997
|
return /* @__PURE__ */ jsx(Separator, {
|
|
4998
|
+
ref: forwardRef,
|
|
4159
4999
|
"data-slot": "sidebar-separator",
|
|
4160
5000
|
"data-sidebar": "separator",
|
|
4161
5001
|
className: cn("mx-2 w-auto bg-sidebar-border", className),
|
|
4162
5002
|
...props
|
|
4163
5003
|
});
|
|
4164
|
-
}
|
|
4165
|
-
|
|
5004
|
+
});
|
|
5005
|
+
SidebarSeparator.displayName = "SidebarSeparator";
|
|
5006
|
+
const SidebarContent = React.forwardRef((componentProps, forwardRef) => {
|
|
5007
|
+
const { className, ...props } = componentProps;
|
|
4166
5008
|
return /* @__PURE__ */ jsx("div", {
|
|
5009
|
+
ref: forwardRef,
|
|
4167
5010
|
"data-slot": "sidebar-content",
|
|
4168
5011
|
"data-sidebar": "content",
|
|
4169
5012
|
className: cn("no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className),
|
|
4170
5013
|
...props
|
|
4171
5014
|
});
|
|
4172
|
-
}
|
|
4173
|
-
|
|
5015
|
+
});
|
|
5016
|
+
SidebarContent.displayName = "SidebarContent";
|
|
5017
|
+
const SidebarGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
5018
|
+
const { className, ...props } = componentProps;
|
|
4174
5019
|
return /* @__PURE__ */ jsx("div", {
|
|
5020
|
+
ref: forwardRef,
|
|
4175
5021
|
"data-slot": "sidebar-group",
|
|
4176
5022
|
"data-sidebar": "group",
|
|
4177
5023
|
className: cn("relative flex w-full min-w-0 flex-col p-2", className),
|
|
4178
5024
|
...props
|
|
4179
5025
|
});
|
|
4180
|
-
}
|
|
4181
|
-
|
|
5026
|
+
});
|
|
5027
|
+
SidebarGroup.displayName = "SidebarGroup";
|
|
5028
|
+
const SidebarGroupLabel = React.forwardRef((componentProps, forwardRef) => {
|
|
5029
|
+
const { className, render, ...props } = componentProps;
|
|
4182
5030
|
return useRender({
|
|
4183
5031
|
defaultTagName: "div",
|
|
4184
|
-
props: mergeProps({
|
|
5032
|
+
props: mergeProps({
|
|
5033
|
+
className: cn("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", className),
|
|
5034
|
+
ref: forwardRef
|
|
5035
|
+
}, props),
|
|
4185
5036
|
render,
|
|
4186
5037
|
state: {
|
|
4187
5038
|
slot: "sidebar-group-label",
|
|
4188
5039
|
sidebar: "group-label"
|
|
4189
5040
|
}
|
|
4190
5041
|
});
|
|
4191
|
-
}
|
|
4192
|
-
|
|
5042
|
+
});
|
|
5043
|
+
SidebarGroupLabel.displayName = "SidebarGroupLabel";
|
|
5044
|
+
const SidebarGroupAction = React.forwardRef((componentProps, forwardRef) => {
|
|
5045
|
+
const { className, render, ...props } = componentProps;
|
|
4193
5046
|
return useRender({
|
|
4194
5047
|
defaultTagName: "button",
|
|
4195
|
-
props: mergeProps({
|
|
5048
|
+
props: mergeProps({
|
|
5049
|
+
className: cn("absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", className),
|
|
5050
|
+
ref: forwardRef
|
|
5051
|
+
}, props),
|
|
4196
5052
|
render,
|
|
4197
5053
|
state: {
|
|
4198
5054
|
slot: "sidebar-group-action",
|
|
4199
5055
|
sidebar: "group-action"
|
|
4200
5056
|
}
|
|
4201
5057
|
});
|
|
4202
|
-
}
|
|
4203
|
-
|
|
5058
|
+
});
|
|
5059
|
+
SidebarGroupAction.displayName = "SidebarGroupAction";
|
|
5060
|
+
const SidebarGroupContent = React.forwardRef((componentProps, forwardRef) => {
|
|
5061
|
+
const { className, ...props } = componentProps;
|
|
4204
5062
|
return /* @__PURE__ */ jsx("div", {
|
|
5063
|
+
ref: forwardRef,
|
|
4205
5064
|
"data-slot": "sidebar-group-content",
|
|
4206
5065
|
"data-sidebar": "group-content",
|
|
4207
5066
|
className: cn("w-full text-sm", className),
|
|
4208
5067
|
...props
|
|
4209
5068
|
});
|
|
4210
|
-
}
|
|
4211
|
-
|
|
5069
|
+
});
|
|
5070
|
+
SidebarGroupContent.displayName = "SidebarGroupContent";
|
|
5071
|
+
const SidebarMenu = React.forwardRef((componentProps, forwardRef) => {
|
|
5072
|
+
const { className, ...props } = componentProps;
|
|
4212
5073
|
return /* @__PURE__ */ jsx("ul", {
|
|
5074
|
+
ref: forwardRef,
|
|
4213
5075
|
"data-slot": "sidebar-menu",
|
|
4214
5076
|
"data-sidebar": "menu",
|
|
4215
5077
|
className: cn("flex w-full min-w-0 flex-col gap-1", className),
|
|
4216
5078
|
...props
|
|
4217
5079
|
});
|
|
4218
|
-
}
|
|
4219
|
-
|
|
5080
|
+
});
|
|
5081
|
+
SidebarMenu.displayName = "SidebarMenu";
|
|
5082
|
+
const SidebarMenuItem = React.forwardRef((componentProps, forwardRef) => {
|
|
5083
|
+
const { className, ...props } = componentProps;
|
|
4220
5084
|
return /* @__PURE__ */ jsx("li", {
|
|
5085
|
+
ref: forwardRef,
|
|
4221
5086
|
"data-slot": "sidebar-menu-item",
|
|
4222
5087
|
"data-sidebar": "menu-item",
|
|
4223
5088
|
className: cn("group/menu-item relative", className),
|
|
4224
5089
|
...props
|
|
4225
5090
|
});
|
|
4226
|
-
}
|
|
5091
|
+
});
|
|
5092
|
+
SidebarMenuItem.displayName = "SidebarMenuItem";
|
|
4227
5093
|
const sidebarMenuButtonVariants = cva("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate", {
|
|
4228
5094
|
variants: {
|
|
4229
5095
|
variant: {
|
|
@@ -4241,7 +5107,9 @@ const sidebarMenuButtonVariants = cva("peer/menu-button group/menu-button flex w
|
|
|
4241
5107
|
size: "default"
|
|
4242
5108
|
}
|
|
4243
5109
|
});
|
|
4244
|
-
const SidebarMenuButton = React
|
|
5110
|
+
const SidebarMenuButton = React.forwardRef((componentProps, forwardRef) => {
|
|
5111
|
+
const { render, isActive = false, variant = "default", size = "default", tooltip: tooltipProp, className, ...props } = componentProps;
|
|
5112
|
+
let tooltip = tooltipProp;
|
|
4245
5113
|
const { isMobile, state } = useSidebar();
|
|
4246
5114
|
const comp = useRender({
|
|
4247
5115
|
defaultTagName: "button",
|
|
@@ -4250,7 +5118,7 @@ const SidebarMenuButton = React$1.forwardRef(({ render, isActive = false, varian
|
|
|
4250
5118
|
variant,
|
|
4251
5119
|
size
|
|
4252
5120
|
}), className),
|
|
4253
|
-
ref
|
|
5121
|
+
ref: forwardRef
|
|
4254
5122
|
}, props),
|
|
4255
5123
|
render: !tooltip ? render : /* @__PURE__ */ jsx(TooltipTrigger, { render }),
|
|
4256
5124
|
state: {
|
|
@@ -4270,12 +5138,13 @@ const SidebarMenuButton = React$1.forwardRef(({ render, isActive = false, varian
|
|
|
4270
5138
|
})] });
|
|
4271
5139
|
});
|
|
4272
5140
|
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
4273
|
-
const SidebarMenuAction = React
|
|
5141
|
+
const SidebarMenuAction = React.forwardRef((componentProps, forwardRef) => {
|
|
5142
|
+
const { className, render, showOnHover = false, ...props } = componentProps;
|
|
4274
5143
|
return useRender({
|
|
4275
5144
|
defaultTagName: "button",
|
|
4276
5145
|
props: mergeProps({
|
|
4277
5146
|
className: cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0", className),
|
|
4278
|
-
ref
|
|
5147
|
+
ref: forwardRef
|
|
4279
5148
|
}, props),
|
|
4280
5149
|
render,
|
|
4281
5150
|
state: {
|
|
@@ -4285,20 +5154,25 @@ const SidebarMenuAction = React$1.forwardRef(({ className, render, showOnHover =
|
|
|
4285
5154
|
});
|
|
4286
5155
|
});
|
|
4287
5156
|
SidebarMenuAction.displayName = "SidebarMenuAction";
|
|
4288
|
-
|
|
5157
|
+
const SidebarMenuBadge = React.forwardRef((componentProps, forwardRef) => {
|
|
5158
|
+
const { className, ...props } = componentProps;
|
|
4289
5159
|
return /* @__PURE__ */ jsx("div", {
|
|
5160
|
+
ref: forwardRef,
|
|
4290
5161
|
"data-slot": "sidebar-menu-badge",
|
|
4291
5162
|
"data-sidebar": "menu-badge",
|
|
4292
5163
|
className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground", className),
|
|
4293
5164
|
...props
|
|
4294
5165
|
});
|
|
4295
|
-
}
|
|
4296
|
-
|
|
4297
|
-
|
|
5166
|
+
});
|
|
5167
|
+
SidebarMenuBadge.displayName = "SidebarMenuBadge";
|
|
5168
|
+
const SidebarMenuSkeleton = React.forwardRef((componentProps, forwardRef) => {
|
|
5169
|
+
const { className, showIcon = false, width: widthProp, ...props } = componentProps;
|
|
5170
|
+
const [fallbackWidth] = React.useState(() => {
|
|
4298
5171
|
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
4299
5172
|
});
|
|
4300
5173
|
const width = widthProp ?? fallbackWidth;
|
|
4301
5174
|
return /* @__PURE__ */ jsxs("div", {
|
|
5175
|
+
ref: forwardRef,
|
|
4302
5176
|
"data-slot": "sidebar-menu-skeleton",
|
|
4303
5177
|
"data-sidebar": "menu-skeleton",
|
|
4304
5178
|
className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
|
|
@@ -4312,27 +5186,38 @@ function SidebarMenuSkeleton({ className, showIcon = false, width: widthProp, ..
|
|
|
4312
5186
|
style: { "--skeleton-width": width }
|
|
4313
5187
|
})]
|
|
4314
5188
|
});
|
|
4315
|
-
}
|
|
4316
|
-
|
|
5189
|
+
});
|
|
5190
|
+
SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
|
|
5191
|
+
const SidebarMenuSub = React.forwardRef((componentProps, forwardRef) => {
|
|
5192
|
+
const { className, ...props } = componentProps;
|
|
4317
5193
|
return /* @__PURE__ */ jsx("ul", {
|
|
5194
|
+
ref: forwardRef,
|
|
4318
5195
|
"data-slot": "sidebar-menu-sub",
|
|
4319
5196
|
"data-sidebar": "menu-sub",
|
|
4320
5197
|
className: cn("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", className),
|
|
4321
5198
|
...props
|
|
4322
5199
|
});
|
|
4323
|
-
}
|
|
4324
|
-
|
|
5200
|
+
});
|
|
5201
|
+
SidebarMenuSub.displayName = "SidebarMenuSub";
|
|
5202
|
+
const SidebarMenuSubItem = React.forwardRef((componentProps, forwardRef) => {
|
|
5203
|
+
const { className, ...props } = componentProps;
|
|
4325
5204
|
return /* @__PURE__ */ jsx("li", {
|
|
5205
|
+
ref: forwardRef,
|
|
4326
5206
|
"data-slot": "sidebar-menu-sub-item",
|
|
4327
5207
|
"data-sidebar": "menu-sub-item",
|
|
4328
5208
|
className: cn("group/menu-sub-item relative", className),
|
|
4329
5209
|
...props
|
|
4330
5210
|
});
|
|
4331
|
-
}
|
|
4332
|
-
|
|
5211
|
+
});
|
|
5212
|
+
SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
|
|
5213
|
+
const SidebarMenuSubButton = React.forwardRef((componentProps, forwardRef) => {
|
|
5214
|
+
const { render, size = "md", isActive = false, className, ...props } = componentProps;
|
|
4333
5215
|
return useRender({
|
|
4334
5216
|
defaultTagName: "a",
|
|
4335
|
-
props: mergeProps({
|
|
5217
|
+
props: mergeProps({
|
|
5218
|
+
className: cn("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground", className),
|
|
5219
|
+
ref: forwardRef
|
|
5220
|
+
}, props),
|
|
4336
5221
|
render,
|
|
4337
5222
|
state: {
|
|
4338
5223
|
slot: "sidebar-menu-sub-button",
|
|
@@ -4341,18 +5226,21 @@ function SidebarMenuSubButton({ render, size = "md", isActive = false, className
|
|
|
4341
5226
|
active: isActive
|
|
4342
5227
|
}
|
|
4343
5228
|
});
|
|
4344
|
-
}
|
|
5229
|
+
});
|
|
5230
|
+
SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
|
|
4345
5231
|
|
|
4346
5232
|
//#endregion
|
|
4347
5233
|
//#region src/components/slider.tsx
|
|
4348
|
-
|
|
4349
|
-
const
|
|
5234
|
+
const Slider = React.forwardRef((componentProps, forwardRef) => {
|
|
5235
|
+
const { className, defaultValue, value, min = 0, max = 100, orientation = "horizontal", ...props } = componentProps;
|
|
5236
|
+
const _values = React.useMemo(() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max], [
|
|
4350
5237
|
value,
|
|
4351
5238
|
defaultValue,
|
|
4352
5239
|
min,
|
|
4353
5240
|
max
|
|
4354
5241
|
]);
|
|
4355
5242
|
return /* @__PURE__ */ jsx(Slider$1.Root, {
|
|
5243
|
+
ref: forwardRef,
|
|
4356
5244
|
className: cn("data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full", className),
|
|
4357
5245
|
"data-slot": "slider",
|
|
4358
5246
|
"data-orientation": orientation,
|
|
@@ -4381,11 +5269,13 @@ function Slider({ className, defaultValue, value, min = 0, max = 100, orientatio
|
|
|
4381
5269
|
}, index))]
|
|
4382
5270
|
})
|
|
4383
5271
|
});
|
|
4384
|
-
}
|
|
5272
|
+
});
|
|
5273
|
+
Slider.displayName = "Slider";
|
|
4385
5274
|
|
|
4386
5275
|
//#endregion
|
|
4387
5276
|
//#region src/components/sonner.tsx
|
|
4388
|
-
const Toaster = (
|
|
5277
|
+
const Toaster = (componentProps) => {
|
|
5278
|
+
const { ...props } = componentProps;
|
|
4389
5279
|
const { theme = "system" } = useTheme$1();
|
|
4390
5280
|
return /* @__PURE__ */ jsx(Toaster$1, {
|
|
4391
5281
|
theme,
|
|
@@ -4418,22 +5308,22 @@ const Toaster = ({ ...props }) => {
|
|
|
4418
5308
|
|
|
4419
5309
|
//#endregion
|
|
4420
5310
|
//#region src/components/stepper.tsx
|
|
4421
|
-
const StepperContext = React
|
|
5311
|
+
const StepperContext = React.createContext(void 0);
|
|
4422
5312
|
function useStepper() {
|
|
4423
|
-
const ctx = React
|
|
5313
|
+
const ctx = React.useContext(StepperContext);
|
|
4424
5314
|
if (!ctx) throw new Error("useStepper must be used within a Stepper");
|
|
4425
5315
|
return ctx;
|
|
4426
5316
|
}
|
|
4427
|
-
const Stepper = React
|
|
5317
|
+
const Stepper = React.forwardRef((componentProps, forwardRef) => {
|
|
4428
5318
|
const { steps, defaultValue, className, children, value, onValueChange, ...props } = componentProps;
|
|
4429
5319
|
const [activeId = "", setActiveId] = useControllableState({
|
|
4430
5320
|
prop: value,
|
|
4431
5321
|
defaultProp: defaultValue ?? steps[0]?.id,
|
|
4432
5322
|
onChange: onValueChange
|
|
4433
5323
|
});
|
|
4434
|
-
const goTo = React
|
|
4435
|
-
const getIndex = React
|
|
4436
|
-
const contextValue = React
|
|
5324
|
+
const goTo = React.useCallback((id) => setActiveId(id), [setActiveId]);
|
|
5325
|
+
const getIndex = React.useCallback((id) => steps.findIndex((s) => s.id === id), [steps]);
|
|
5326
|
+
const contextValue = React.useMemo(() => ({
|
|
4437
5327
|
activeId,
|
|
4438
5328
|
goTo,
|
|
4439
5329
|
getIndex,
|
|
@@ -4456,7 +5346,7 @@ const Stepper = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
4456
5346
|
});
|
|
4457
5347
|
});
|
|
4458
5348
|
Stepper.displayName = "Stepper";
|
|
4459
|
-
const StepperProgress = React
|
|
5349
|
+
const StepperProgress = React.forwardRef((componentProps, forwardRef) => {
|
|
4460
5350
|
const { steps: stepIds, className, ...props } = componentProps;
|
|
4461
5351
|
const { activeId, getIndex, steps } = useStepper();
|
|
4462
5352
|
const ids = stepIds ?? steps.map((s) => s.id);
|
|
@@ -4479,7 +5369,7 @@ const StepperProgress = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
4479
5369
|
});
|
|
4480
5370
|
});
|
|
4481
5371
|
StepperProgress.displayName = "StepperProgress";
|
|
4482
|
-
const StepperCounter = React
|
|
5372
|
+
const StepperCounter = React.forwardRef((componentProps, forwardRef) => {
|
|
4483
5373
|
const { steps: stepIds, className, children, ...props } = componentProps;
|
|
4484
5374
|
const { activeId, steps } = useStepper();
|
|
4485
5375
|
const ids = stepIds ?? steps.map((s) => s.id);
|
|
@@ -4499,7 +5389,7 @@ const StepperCounter = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
4499
5389
|
});
|
|
4500
5390
|
});
|
|
4501
5391
|
StepperCounter.displayName = "StepperCounter";
|
|
4502
|
-
const StepperPanel = React
|
|
5392
|
+
const StepperPanel = React.forwardRef((componentProps, forwardRef) => {
|
|
4503
5393
|
const { className, ...props } = componentProps;
|
|
4504
5394
|
const { activeId } = useStepper();
|
|
4505
5395
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -4511,7 +5401,7 @@ const StepperPanel = React$1.forwardRef((componentProps, forwardRef) => {
|
|
|
4511
5401
|
});
|
|
4512
5402
|
});
|
|
4513
5403
|
StepperPanel.displayName = "StepperPanel";
|
|
4514
|
-
const StepperContent = React
|
|
5404
|
+
const StepperContent = React.forwardRef((componentProps, forwardRef) => {
|
|
4515
5405
|
const { value, forceMount, className, ...props } = componentProps;
|
|
4516
5406
|
const { activeId } = useStepper();
|
|
4517
5407
|
const isActive = value === activeId;
|
|
@@ -4529,8 +5419,10 @@ StepperContent.displayName = "StepperContent";
|
|
|
4529
5419
|
|
|
4530
5420
|
//#endregion
|
|
4531
5421
|
//#region src/components/switch.tsx
|
|
4532
|
-
|
|
5422
|
+
const Switch = React.forwardRef((componentProps, forwardRef) => {
|
|
5423
|
+
const { className, ...props } = componentProps;
|
|
4533
5424
|
return /* @__PURE__ */ jsx(Switch$1.Root, {
|
|
5425
|
+
ref: forwardRef,
|
|
4534
5426
|
"data-slot": "switch",
|
|
4535
5427
|
className: cn("peer relative inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-transparent p-1 transition-all outline-none active:opacity-60 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 data-checked:bg-primary aria-invalid:data-checked:bg-destructive data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
|
|
4536
5428
|
...props,
|
|
@@ -4539,39 +5431,52 @@ function Switch({ className, ...props }) {
|
|
|
4539
5431
|
className: "pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-unchecked:translate-x-0 data-checked:translate-x-4 dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground"
|
|
4540
5432
|
})
|
|
4541
5433
|
});
|
|
4542
|
-
}
|
|
5434
|
+
});
|
|
5435
|
+
Switch.displayName = "Switch";
|
|
4543
5436
|
|
|
4544
5437
|
//#endregion
|
|
4545
5438
|
//#region src/components/tabs.tsx
|
|
4546
|
-
|
|
5439
|
+
const Tabs = React.forwardRef((componentProps, forwardRef) => {
|
|
5440
|
+
const { className, orientation = "horizontal", ...props } = componentProps;
|
|
4547
5441
|
return /* @__PURE__ */ jsx(Tabs$1.Root, {
|
|
5442
|
+
ref: forwardRef,
|
|
4548
5443
|
"data-slot": "tabs",
|
|
4549
5444
|
"data-orientation": orientation,
|
|
4550
5445
|
className: cn("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col", className),
|
|
4551
5446
|
...props
|
|
4552
5447
|
});
|
|
4553
|
-
}
|
|
4554
|
-
|
|
5448
|
+
});
|
|
5449
|
+
Tabs.displayName = "Tabs";
|
|
5450
|
+
const TabsList = React.forwardRef((componentProps, forwardRef) => {
|
|
5451
|
+
const { className, ...props } = componentProps;
|
|
4555
5452
|
return /* @__PURE__ */ jsx(Tabs$1.List, {
|
|
5453
|
+
ref: forwardRef,
|
|
4556
5454
|
"data-slot": "tabs-list",
|
|
4557
5455
|
className: cn("group/tabs-list inline-flex w-fit items-center justify-center gap-4 text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col", className),
|
|
4558
5456
|
...props
|
|
4559
5457
|
});
|
|
4560
|
-
}
|
|
4561
|
-
|
|
5458
|
+
});
|
|
5459
|
+
TabsList.displayName = "TabsList";
|
|
5460
|
+
const TabsTrigger = React.forwardRef((componentProps, forwardRef) => {
|
|
5461
|
+
const { className, ...props } = componentProps;
|
|
4562
5462
|
return /* @__PURE__ */ jsx(Tabs$1.Tab, {
|
|
5463
|
+
ref: forwardRef,
|
|
4563
5464
|
"data-slot": "tabs-trigger",
|
|
4564
5465
|
className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground data-active:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "after:absolute after:rounded-full after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-1.5 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0.5 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 data-active:after:opacity-100", className),
|
|
4565
5466
|
...props
|
|
4566
5467
|
});
|
|
4567
|
-
}
|
|
4568
|
-
|
|
5468
|
+
});
|
|
5469
|
+
TabsTrigger.displayName = "TabsTrigger";
|
|
5470
|
+
const TabsContent = React.forwardRef((componentProps, forwardRef) => {
|
|
5471
|
+
const { className, ...props } = componentProps;
|
|
4569
5472
|
return /* @__PURE__ */ jsx(Tabs$1.Panel, {
|
|
5473
|
+
ref: forwardRef,
|
|
4570
5474
|
"data-slot": "tabs-content",
|
|
4571
5475
|
className: cn("flex-1 text-sm outline-none", className),
|
|
4572
5476
|
...props
|
|
4573
5477
|
});
|
|
4574
|
-
}
|
|
5478
|
+
});
|
|
5479
|
+
TabsContent.displayName = "TabsContent";
|
|
4575
5480
|
|
|
4576
5481
|
//#endregion
|
|
4577
5482
|
//#region src/components/toggle.tsx
|
|
@@ -4592,8 +5497,10 @@ const toggleVariants = cva("group/toggle inline-flex items-center justify-center
|
|
|
4592
5497
|
size: "default"
|
|
4593
5498
|
}
|
|
4594
5499
|
});
|
|
4595
|
-
|
|
5500
|
+
const Toggle = React.forwardRef((componentProps, forwardRef) => {
|
|
5501
|
+
const { className, variant = "default", size = "default", ...props } = componentProps;
|
|
4596
5502
|
return /* @__PURE__ */ jsx(Toggle$1, {
|
|
5503
|
+
ref: forwardRef,
|
|
4597
5504
|
"data-slot": "toggle",
|
|
4598
5505
|
className: cn(toggleVariants({
|
|
4599
5506
|
variant,
|
|
@@ -4602,19 +5509,22 @@ function Toggle({ className, variant = "default", size = "default", ...props })
|
|
|
4602
5509
|
})),
|
|
4603
5510
|
...props
|
|
4604
5511
|
});
|
|
4605
|
-
}
|
|
5512
|
+
});
|
|
5513
|
+
Toggle.displayName = "Toggle";
|
|
4606
5514
|
|
|
4607
5515
|
//#endregion
|
|
4608
5516
|
//#region src/components/toggle-group.tsx
|
|
4609
|
-
const ToggleGroupContext = React
|
|
5517
|
+
const ToggleGroupContext = React.createContext({
|
|
4610
5518
|
size: "default",
|
|
4611
5519
|
variant: "default",
|
|
4612
5520
|
spacing: 0,
|
|
4613
5521
|
orientation: "horizontal",
|
|
4614
5522
|
block: false
|
|
4615
5523
|
});
|
|
4616
|
-
|
|
5524
|
+
const ToggleGroup = React.forwardRef((componentProps, forwardRef) => {
|
|
5525
|
+
const { className, variant, size, spacing = 0, orientation = "horizontal", block = false, children, ...props } = componentProps;
|
|
4617
5526
|
return /* @__PURE__ */ jsx(ToggleGroup$1, {
|
|
5527
|
+
ref: forwardRef,
|
|
4618
5528
|
"data-slot": "toggle-group",
|
|
4619
5529
|
"data-variant": variant,
|
|
4620
5530
|
"data-size": size,
|
|
@@ -4635,10 +5545,13 @@ function ToggleGroup({ className, variant, size, spacing = 0, orientation = "hor
|
|
|
4635
5545
|
children
|
|
4636
5546
|
})
|
|
4637
5547
|
});
|
|
4638
|
-
}
|
|
4639
|
-
|
|
4640
|
-
|
|
5548
|
+
});
|
|
5549
|
+
ToggleGroup.displayName = "ToggleGroup";
|
|
5550
|
+
const ToggleGroupItem = React.forwardRef((componentProps, forwardRef) => {
|
|
5551
|
+
const { className, children, variant = "default", size = "default", ...props } = componentProps;
|
|
5552
|
+
const context = React.useContext(ToggleGroupContext);
|
|
4641
5553
|
return /* @__PURE__ */ jsx(Toggle$1, {
|
|
5554
|
+
ref: forwardRef,
|
|
4642
5555
|
"data-slot": "toggle-group-item",
|
|
4643
5556
|
"data-variant": context.variant || variant,
|
|
4644
5557
|
"data-size": context.size || size,
|
|
@@ -4650,7 +5563,8 @@ function ToggleGroupItem({ className, children, variant = "default", size = "def
|
|
|
4650
5563
|
...props,
|
|
4651
5564
|
children
|
|
4652
5565
|
});
|
|
4653
|
-
}
|
|
5566
|
+
});
|
|
5567
|
+
ToggleGroupItem.displayName = "ToggleGroupItem";
|
|
4654
5568
|
|
|
4655
5569
|
//#endregion
|
|
4656
5570
|
//#region src/hooks/use-audio-gauge.ts
|
|
@@ -4674,11 +5588,11 @@ function ToggleGroupItem({ className, children, variant = "default", size = "def
|
|
|
4674
5588
|
*/
|
|
4675
5589
|
function useAudioGauge(options = {}) {
|
|
4676
5590
|
const { intervalMs = 16, fftSize = 32, smoothing = .3, gain = 2 } = options;
|
|
4677
|
-
const [value, setValue] = React
|
|
4678
|
-
const [error, setError] = React
|
|
4679
|
-
const gainRef = React
|
|
5591
|
+
const [value, setValue] = React.useState(0);
|
|
5592
|
+
const [error, setError] = React.useState(null);
|
|
5593
|
+
const gainRef = React.useRef(gain);
|
|
4680
5594
|
gainRef.current = gain;
|
|
4681
|
-
React
|
|
5595
|
+
React.useEffect(() => {
|
|
4682
5596
|
let cancelled = false;
|
|
4683
5597
|
let stream;
|
|
4684
5598
|
let ctx;
|
|
@@ -4727,4 +5641,4 @@ function useAudioGauge(options = {}) {
|
|
|
4727
5641
|
}
|
|
4728
5642
|
|
|
4729
5643
|
//#endregion
|
|
4730
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionBar, ActionBarButton, ActionBarContext, ActionBarHeight, Alert, AlertAction, AlertAction as BannerAction, AlertDescription, AlertDescription as BannerDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTitle as BannerTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BadgeGroup, BadgeGroupCount, Banner, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Chip, ChipRemove, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CounterBadge, CountryFlag, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBackdrop, DrawerBar, DrawerClose, DrawerContent, DrawerCreateHandle, DrawerDescription, DrawerFooter, DrawerHeader, DrawerMenu, DrawerMenuCheckboxItem, DrawerMenuGroup, DrawerMenuGroupLabel, DrawerMenuItem, DrawerMenuRadioGroup, DrawerMenuRadioItem, DrawerMenuSeparator, DrawerMenuTrigger, DrawerPanel, DrawerPopup, DrawerPortal, DrawerPrimitive, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DropdownMenu, DropdownMenuAddon, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, DropzoneActions, DropzoneContent, DropzoneDescription, DropzoneIcon, DropzoneTitle, DropzoneTrigger, EmojiPicker, EmojiPickerCategories, EmojiPickerContent, EmojiPickerTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, FAB, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Filter, FilterClearAllButton, FilterGroup, Gauge, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, List, ListCol, ListRow, NotificationQueueProvider, NotificationSlot, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupItem, ScrollArea, ScrollAreaPrimitive, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Stepper, StepperContent, StepperCounter, StepperPanel, StepperProgress, Switch, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, bannerVariants, buttonGroupVariants, buttonVariants, cn, counterBadgeVariants, fabVariants, selectTriggerVariants, spinnerVariants, toast, toggleVariants, useAudioGauge, useComboboxAnchor, useNotification, useNotificationQueue, useSidebar, useStepper, useTheme };
|
|
5644
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionBar, ActionBarButton, ActionBarContext, ActionBarHeight, Alert, AlertAction, AlertAction as BannerAction, AlertDescription, AlertDescription as BannerDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTitle as BannerTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BadgeGroup, BadgeGroupCount, Banner, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Chip, ChipRemove, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CounterBadge, CountryFlag, DataTable, DataTree, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBackdrop, DrawerBar, DrawerClose, DrawerContent, DrawerCreateHandle, DrawerDescription, DrawerFooter, DrawerHeader, DrawerMenu, DrawerMenuCheckboxItem, DrawerMenuGroup, DrawerMenuGroupLabel, DrawerMenuItem, DrawerMenuRadioGroup, DrawerMenuRadioItem, DrawerMenuSeparator, DrawerMenuTrigger, DrawerPanel, DrawerPopup, DrawerPortal, DrawerPrimitive, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DropdownMenu, DropdownMenuAddon, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, DropzoneActions, DropzoneContent, DropzoneDescription, DropzoneIcon, DropzoneTitle, DropzoneTrigger, EmojiPicker, EmojiPickerCategories, EmojiPickerContent, EmojiPickerTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, FAB, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Filter, FilterClearAllButton, FilterGroup, Gauge, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, List, ListCol, ListRow, NotificationQueueProvider, NotificationSlot, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupItem, ScrollArea, ScrollAreaPrimitive, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Stepper, StepperContent, StepperCounter, StepperPanel, StepperProgress, Switch, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Tree, TreeDragLine, TreeItem, TreeItemLabel, alertVariants, bannerVariants, buttonGroupVariants, buttonVariants, cn, counterBadgeVariants, fabVariants, selectTriggerVariants, spinnerVariants, toast, toggleVariants, useAudioGauge, useComboboxAnchor, useNotification, useNotificationQueue, useSidebar, useStepper, useTheme };
|