@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/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
- function Accordion({ className, ...props }) {
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
- function AccordionItem({ className, ...props }) {
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
- function AccordionTrigger({ className, children, ...props }) {
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
- function AccordionContent({ className, children, ...props }) {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.createContext(null);
210
- const ActionBarButton = React$1.forwardRef(({ size = "default", ...props }, ref) => /* @__PURE__ */ jsx(Button, {
211
- ref,
212
- variant: "ghost",
213
- size,
214
- ...props
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$1.forwardRef(({ className, count, onClear, children, label, clearLabel = "Clear selection", style, ...props }, ref) => {
218
- const ctx = React$1.useContext(ActionBarContext);
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({ ...props }) {
272
+ function AlertDialog(componentProps) {
255
273
  return /* @__PURE__ */ jsx(AlertDialog$1.Root, {
256
274
  "data-slot": "alert-dialog",
257
- ...props
275
+ ...componentProps
258
276
  });
259
277
  }
260
- function AlertDialogTrigger({ ...props }) {
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
- function AlertDialogPortal({ ...props }) {
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
- ...props
290
+ ...componentProps
270
291
  });
271
292
  }
272
- function AlertDialogOverlay({ className, ...props }) {
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
- function AlertDialogContent({ className, size = "default", ...props }) {
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
- function AlertDialogHeader({ className, ...props }) {
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
- function AlertDialogFooter({ className, ...props }) {
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
- function AlertDialogMedia({ className, ...props }) {
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
- function AlertDialogTitle({ className, ...props }) {
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
- function AlertDialogDescription({ className, ...props }) {
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
- function AlertDialogAction({ className, ...props }) {
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
- function AlertDialogCancel({ className, variant = "outline", size = "default", ...props }) {
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
- function Alert({ className, variant, ...props }) {
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
- function AlertTitle({ className, ...props }) {
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
- function AlertDescription({ className, ...props }) {
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
- function AlertAction({ className, ...props }) {
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$1.forwardRef(({ className, size = "default", ...props }, ref) => {
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
- function AvatarImage({ className, ...props }) {
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
- function AvatarFallback({ className, ...props }) {
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
- function AvatarBadge({ className, ...props }) {
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
- function AvatarGroup({ className, ...props }) {
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
- function AvatarGroupCount({ className, ...props }) {
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$1.forwardRef(({ className, variant = "default", render, ...props }, ref) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.Children.map(children, (child) => typeof child === "string" || typeof child === "number" ? /* @__PURE__ */ jsx("span", {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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
- function Banner({ className, variant, borderDirection, ...props }) {
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$1.createContext(null);
879
+ const NotificationQueueContext = React.createContext(null);
800
880
  function useNotificationQueueContext() {
801
- const ctx = React$1.useContext(NotificationQueueContext);
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({ children }) {
855
- const [state, dispatch] = React$1.useReducer(reducer, {
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$1.useMemo(() => ({
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$1.useCallback(({ id, slot, priority, render }) => {
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$1.useCallback((id, slot) => dispatch({
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$1.useCallback(() => dispatch({
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$1.useRef(render);
988
+ const renderRef = React.useRef(render);
908
989
  renderRef.current = render;
909
- const contentRef = React$1.useRef(null);
990
+ const contentRef = React.useRef(null);
910
991
  contentRef.current = renderRef.current({ dismiss });
911
- React$1.useEffect(() => {
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
- function NotificationSlot({ slot, className }) {
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
- function Separator({ className, orientation = "horizontal", ...props }) {
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
- function ButtonGroup({ className, orientation, ...props }) {
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
- function ButtonGroupText({ className, render, ...props }) {
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({ 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) }, props),
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
- function ButtonGroupSeparator({ className, orientation = "vertical", ...props }) {
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$1.useRef(null);
1078
- React$1.useEffect(() => {
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
- function Card({ className, size = "default", ...props }) {
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
- function CardHeader({ className, ...props }) {
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
- function CardTitle({ className, ...props }) {
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
- function CardDescription({ className, ...props }) {
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
- function CardAction({ className, ...props }) {
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
- function CardContent({ className, ...props }) {
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
- function CardFooter({ className, ...props }) {
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$1.createContext(null);
1269
+ const CarouselContext = React.createContext(null);
1151
1270
  function useCarousel() {
1152
- const context = React$1.useContext(CarouselContext);
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
- function Carousel({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }) {
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$1.useState(false);
1162
- const [canScrollNext, setCanScrollNext] = React$1.useState(false);
1163
- const onSelect = React$1.useCallback((api$1) => {
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$1.useCallback(() => {
1288
+ const scrollPrev = React.useCallback(() => {
1169
1289
  api?.scrollPrev();
1170
1290
  }, [api]);
1171
- const scrollNext = React$1.useCallback(() => {
1291
+ const scrollNext = React.useCallback(() => {
1172
1292
  api?.scrollNext();
1173
1293
  }, [api]);
1174
- const handleKeyDown = React$1.useCallback((event) => {
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$1.useEffect(() => {
1303
+ React.useEffect(() => {
1184
1304
  if (!api || !setApi) return;
1185
1305
  setApi(api);
1186
1306
  }, [api, setApi]);
1187
- React$1.useEffect(() => {
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
- function CarouselContent({ className, ...props }) {
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
- function CarouselItem({ className, ...props }) {
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
- function CarouselPrevious({ className, variant = "outline", size = "sm", ...props }) {
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
- function CarouselNext({ className, variant = "outline", size = "sm", ...props }) {
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$1.forwardRef(({ className, ...props }, ref) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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
- function ScrollArea({ className, children, scrollFade = false, scrollbarGutter = false, ...props }) {
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
- function ScrollBar({ className, orientation = "vertical", ...props }) {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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
- function Collapsible({ ...props }) {
1639
+ const Collapsible = React.forwardRef((componentProps, forwardRef) => {
1499
1640
  return /* @__PURE__ */ jsx(Collapsible$1.Root, {
1641
+ ref: forwardRef,
1500
1642
  "data-slot": "collapsible",
1501
- ...props
1643
+ ...componentProps
1502
1644
  });
1503
- }
1504
- function CollapsibleTrigger({ ...props }) {
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
- ...props
1651
+ ...componentProps
1508
1652
  });
1509
- }
1510
- function CollapsibleContent({ ...props }) {
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
- ...props
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$1.forwardRef(({ className, type, block, ...props }, forwardedRef) => {
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: forwardedRef
1677
+ ref: forwardRef
1530
1678
  });
1531
1679
  });
1680
+ Input.displayName = "Input";
1532
1681
 
1533
1682
  //#endregion
1534
1683
  //#region src/components/textarea.tsx
1535
- function Textarea({ className, ...props }) {
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
1546
- ref,
1547
- "data-slot": "input-group",
1548
- role: "group",
1549
- 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),
1550
- ...props
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
- function InputGroupAddon({ className, align = "inline-start", ...props }) {
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
- const InputGroupButton = React$1.forwardRef(({ className, type = "button", variant = "ghost", size = "sm", ...props }, ref) => {
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
- function InputGroupText({ className, ...props }) {
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
- const InputGroupInput = React$1.forwardRef(({ className, ...props }, forwardedRef) => {
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: forwardedRef
1760
+ ref: forwardRef
1598
1761
  });
1599
1762
  });
1600
- function InputGroupTextarea({ className, ...props }) {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef(function ComboboxChip(componentProps, forwardRef) {
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$1.forwardRef(function ComboboxChipsInput(componentProps, forwardRef) {
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$1.useRef(null);
1961
+ return React.useRef(null);
1795
1962
  }
1796
1963
 
1797
1964
  //#endregion
1798
1965
  //#region src/components/dialog.tsx
1799
- function Dialog({ ...props }) {
1966
+ function Dialog(componentProps) {
1800
1967
  return /* @__PURE__ */ jsx(Dialog$1.Root, {
1801
1968
  "data-slot": "dialog",
1802
- ...props
1969
+ ...componentProps
1803
1970
  });
1804
1971
  }
1805
- function DialogTrigger({ ...props }) {
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
- function DialogPortal({ ...props }) {
1979
+ });
1980
+ DialogTrigger.displayName = "DialogTrigger";
1981
+ function DialogPortal(componentProps) {
1812
1982
  return /* @__PURE__ */ jsx(Dialog$1.Portal, {
1813
1983
  "data-slot": "dialog-portal",
1814
- ...props
1984
+ ...componentProps
1815
1985
  });
1816
1986
  }
1817
- function DialogClose({ ...props }) {
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
- function DialogOverlay({ className, ...props }) {
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
- function DialogContent({ className, children, showCloseButton = true, ...props }) {
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
- function DialogHeader({ className, ...props }) {
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
- function DialogFooter({ className, showCloseButton = false, children, ...props }) {
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
- function DialogTitle({ className, ...props }) {
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
- function DialogDescription({ className, ...props }) {
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
- function Command({ className, ...props }) {
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
- function CommandDialog({ title = "Command Palette", description = "Search for a command to run...", children, ...props }) {
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
- function CommandInput({ className, ...props }) {
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
- function CommandList({ className, ...props }) {
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
- function CommandEmpty({ ...props }) {
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
- function CommandGroup({ className, ...props }) {
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
- function CommandSeparator({ className, ...props }) {
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
- function CommandItem({ className, ...props }) {
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
- function CommandShortcut({ className, ...props }) {
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 = ({ countryIsoCode, size = "xl", className, ...otherProps }) => {
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
- function Skeleton({ className, ...props }) {
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
- function Spinner({ className, size, ...props }) {
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$1.forwardRef(({ className, containerClassName, containerStyle, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2009
- "data-slot": "table-container",
2010
- style: containerStyle,
2011
- className: cn("relative w-full overflow-x-auto rounded-lg border border-border", containerClassName),
2012
- children: /* @__PURE__ */ jsx("table", {
2013
- ref,
2014
- "data-slot": "table",
2015
- className: cn("w-full caption-bottom text-sm [&_tbody_tr:last-child]:border-b-0", className),
2016
- ...props
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", {
2021
- ref,
2022
- "data-slot": "table-header",
2023
- className: cn("[&_tr]:border-b [&_tr]:hover:bg-transparent", className),
2024
- ...props
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("tbody", {
2028
- ref,
2029
- "data-slot": "table-body",
2030
- className: cn("[&_tr:last-child]:border-0", className),
2031
- ...props
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("tfoot", {
2035
- ref,
2036
- "data-slot": "table-footer",
2037
- className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0 [&>tr]:hover:bg-transparent", className),
2038
- ...props
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("tr", {
2042
- ref,
2043
- "data-slot": "table-row",
2044
- className: cn("border-b transition-colors hover:bg-accent/30 data-[state=selected]:bg-accent/50", className),
2045
- ...props
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("th", {
2049
- ref,
2050
- "data-slot": "table-head",
2051
- className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className),
2052
- ...props
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$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("td", {
2056
- ref,
2057
- "data-slot": "table-cell",
2058
- className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
2059
- ...props
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({ 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 }) {
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$1.useMemo(() => {
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$1.useRef(onFetchMore);
2518
+ const onFetchMoreRef = React.useRef(onFetchMore);
2272
2519
  onFetchMoreRef.current = onFetchMore;
2273
- const observerRef = React$1.useRef(null);
2274
- const nodeRef = React$1.useRef(null);
2275
- const armedRef = React$1.useRef(true);
2276
- const observe = React$1.useCallback(() => {
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$1.useEffect(() => {
2543
+ React.useEffect(() => {
2297
2544
  armedRef.current = true;
2298
2545
  observe();
2299
2546
  }, [resetKey, observe]);
2300
- return React$1.useCallback((node) => {
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
- function DrawerTrigger(props) {
2826
+ const DrawerTrigger = React.forwardRef((componentProps, forwardRef) => {
2327
2827
  return /* @__PURE__ */ jsx(DrawerPrimitive.Trigger, {
2828
+ ref: forwardRef,
2328
2829
  "data-slot": "drawer-trigger",
2329
- ...props
2830
+ ...componentProps
2330
2831
  });
2331
- }
2332
- function DrawerClose(props) {
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
- ...props
2838
+ ...componentProps
2336
2839
  });
2337
- }
2338
- function DrawerSwipeArea({ className, position: positionProp, ...props }) {
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
- function DrawerBackdrop({ className, inContainer, ...props }) {
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
- function DrawerViewport({ className, position, variant = "default", inContainer, ...props }) {
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
- function DrawerPopup({ className, children, showCloseButton = false, position: positionProp, variant = "default", showBar = false, container, ...props }) {
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
- function DrawerHeader({ className, allowSelection = false, render, ...props }) {
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
- function DrawerFooter({ className, variant = "default", allowSelection = true, render, ...props }) {
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
- function DrawerTitle({ className, ...props }) {
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
- function DrawerDescription({ className, ...props }) {
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
- function DrawerPanel({ className, scrollFade = true, scrollable = true, allowSelection = true, render, ...props }) {
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
- function DrawerBar({ className, position: positionProp, render, ...props }) {
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
- function DrawerMenu({ className, render, ...props }) {
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
- function DrawerMenuItem({ className, variant = "default", render, disabled, ...props }) {
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
- function DrawerMenuSeparator({ className, render, ...props }) {
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
- function DrawerMenuGroup({ className, render, ...props }) {
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
- function DrawerMenuGroupLabel({ className, render, ...props }) {
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
- function DrawerMenuTrigger({ className, children, ...props }) {
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
- function DrawerMenuCheckboxItem({ className, children, checked, defaultChecked, onCheckedChange, variant = "default", disabled, render, ...props }) {
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
- function DrawerMenuRadioGroup({ className, ...props }) {
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
- function DrawerMenuRadioItem({ className, children, value, disabled, render, ...props }) {
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({ ...props }) {
3154
+ function DropdownMenu(componentProps) {
2594
3155
  return /* @__PURE__ */ jsx(Menu.Root, {
2595
3156
  "data-slot": "dropdown-menu",
2596
- ...props
3157
+ ...componentProps
2597
3158
  });
2598
3159
  }
2599
- function DropdownMenuPortal({ ...props }) {
3160
+ function DropdownMenuPortal(componentProps) {
2600
3161
  return /* @__PURE__ */ jsx(Menu.Portal, {
2601
3162
  "data-slot": "dropdown-menu-portal",
2602
- ...props
3163
+ ...componentProps
2603
3164
  });
2604
3165
  }
2605
- function DropdownMenuTrigger({ ...props }) {
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
- function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, container, ...props }) {
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
- function DropdownMenuGroup({ ...props }) {
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
- function DropdownMenuLabel({ className, inset, ...props }) {
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
- function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
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
- function DropdownMenuSub({ ...props }) {
3225
+ });
3226
+ DropdownMenuItem.displayName = "DropdownMenuItem";
3227
+ function DropdownMenuSub(componentProps) {
2652
3228
  return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
2653
3229
  "data-slot": "dropdown-menu-sub",
2654
- ...props
3230
+ ...componentProps
2655
3231
  });
2656
3232
  }
2657
- function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
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
- function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) {
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
- function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
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
- function DropdownMenuRadioGroup({ ...props }) {
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
- function DropdownMenuRadioItem({ className, children, inset, ...props }) {
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
- function DropdownMenuSeparator({ className, ...props }) {
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
- function DropdownMenuShortcut({ className, ...props }) {
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
- function DropdownMenuAddon({ className, ...props }) {
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
- function Empty({ className, ...props }) {
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
- function EmptyHeader({ className, ...props }) {
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
- function EmptyMedia({ className, variant = "default", ...props }) {
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
- function EmptyTitle({ className, ...props }) {
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
- function EmptyDescription({ className, ...props }) {
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
- function EmptyContent({ className, ...props }) {
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$1.createContext(null);
3408
+ const DropzoneContext = React.createContext(null);
2791
3409
  function useDropzoneContext() {
2792
- const ctx = React$1.useContext(DropzoneContext);
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$1.forwardRef(({ className, children, onFiles, onError, accept, multiple = false, maxFiles, maxSize, minSize, disabled = false, hoverMessage = "Drop your file here to upload", dragRejectMessage, onDragEnter, onDragLeave, onDragOver, ...props }, ref) => {
2871
- const inputRef = React$1.useRef(null);
2872
- const [isDragging, setIsDragging] = React$1.useState(false);
2873
- const [isDragReject, setIsDragReject] = React$1.useState(false);
2874
- const dragCounterRef = React$1.useRef(0);
2875
- const acceptPatterns = React$1.useMemo(() => parseAccept(accept), [accept]);
2876
- const open = React$1.useCallback(() => {
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$1.useMemo(() => ({
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$1.forwardRef(({ className, error = false, onClick, onKeyDown, ...props }, ref) => {
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
- function DropzoneIcon({ variant = "icon", ...props }) {
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
- function DropzoneTitle({ className, ...props }) {
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
- function DropzoneDescription(props) {
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
- ...props
3658
+ ...componentProps
3032
3659
  });
3033
- }
3034
- function DropzoneActions({ className, ...props }) {
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$1.forwardRef(({ render, onClick, ...props }, ref) => {
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({ ...props }) {
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$1.forwardRef((props, ref) => {
3708
+ const PopoverTrigger = React.forwardRef((componentProps, forwardRef) => {
3076
3709
  return /* @__PURE__ */ jsx(Popover$1.Trigger, {
3077
3710
  "data-slot": "popover-trigger",
3078
- ref,
3079
- ...props
3711
+ ref: forwardRef,
3712
+ ...componentProps
3080
3713
  });
3081
3714
  });
3082
3715
  PopoverTrigger.displayName = "PopoverTrigger";
3083
- function PopoverContent({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) {
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
- function PopoverHeader({ className, ...props }) {
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
- function PopoverTitle({ className, ...props }) {
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
- function PopoverDescription({ className, ...props }) {
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({ children, ...props }) {
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$1.createContext(null);
3791
+ const EmojiPickerContext = React.createContext(null);
3146
3792
  function useEmojiPickerContext() {
3147
- const context = React$1.useContext(EmojiPickerContext);
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$1.useState(false);
3153
- const onSelect = React$1.useCallback((emoji) => {
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$1.useMemo(() => ({ onSelect }), [onSelect]);
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$1.forwardRef(({ render, children, ...props }, ref) => /* @__PURE__ */ jsx(PopoverTrigger, {
3168
- ref,
3169
- "aria-label": "Emoji",
3170
- render: render ?? /* @__PURE__ */ jsx(Button, {
3171
- variant: "outline",
3172
- size: "icon"
3173
- }),
3174
- ...props,
3175
- children: children ?? /* @__PURE__ */ jsx(Smile, { "aria-hidden": "true" })
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$1.useCallback((emojiData) => onSelect(emojiData.emoji), [onSelect]);
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$1.forwardRef(({ className, variant, size, ...props }, ref) => {
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
- function Label({ className, ...props }) {
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
- function FieldSet({ className, ...props }) {
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
- function FieldLegend({ className, variant = "legend", ...props }) {
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
- function FieldGroup({ className, ...props }) {
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
- function Field({ className, orientation = "vertical", ...props }) {
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
- function FieldContent({ className, ...props }) {
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
- function FieldLabel({ className, ...props }) {
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
- function FieldTitle({ className, ...props }) {
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
- function FieldDescription({ className, ...props }) {
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
- function FieldSeparator({ children, className, ...props }) {
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
- function FieldError({ className, children, errors, ...props }) {
3330
- const content = useMemo(() => {
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
- function Gauge({ className, value, ...props }) {
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
- function InputOTP({ className, containerClassName, ...props }) {
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
- function InputOTPGroup({ className, ...props }) {
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
- function InputOTPSlot({ index, className, ...props }) {
3405
- const { char, hasFakeCaret, isActive } = React$1.useContext(OTPInputContext)?.slots[index] ?? {};
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
- function InputOTPSeparator({ ...props }) {
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$1.forwardRef(({ className, stackedItems = false, ...props }, ref) => {
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
- function ItemSeparator({ className, ...props }) {
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$1.forwardRef(({ className, variant = "default", size = "default", render, ...props }, ref) => {
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$1.forwardRef(({ className, variant = "default", ...props }, ref) => {
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$1.forwardRef(({ className, ...props }, ref) => {
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$1.forwardRef(({ className, ...props }, ref) => {
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$1.forwardRef(({ className, ...props }, ref) => {
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$1.forwardRef(({ className, ...props }, ref) => {
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$1.forwardRef(({ className, ...props }, ref) => {
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$1.forwardRef(({ className, ...props }, ref) => {
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 = ({ children, className, ...props }) => {
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
- const ListRow = React$1.forwardRef(({ children, className, ...props }, ref) => {
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
- const ListCol = ({ grow, wrap, children, className, ...props }) => {
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
- function Pagination({ className, ...props }) {
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
- function PaginationContent({ className, ...props }) {
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
- function PaginationItem({ ...props }) {
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
- function PaginationLink({ className, isActive, size = "icon", ...props }) {
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
- function PaginationPrevious({ className, text = "Previous", ...props }) {
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
- function PaginationNext({ className, text = "Next", ...props }) {
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
- function PaginationEllipsis({ className, ...props }) {
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
- function Progress({ className, children, value, ...props }) {
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
- function ProgressTrack({ className, ...props }) {
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
- function ProgressIndicator({ className, ...props }) {
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
- function ProgressLabel({ className, ...props }) {
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
- function ProgressValue({ className, ...props }) {
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
- function RadioGroup({ className, ...props }) {
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
- function RadioGroupItem({ className, ...props }) {
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
- function SelectGroup({ className, ...props }) {
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
- function SelectValue({ className, ...props }) {
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
- function SelectTrigger({ className, size = "default", children, ...props }) {
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
- function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, alignItemWithTrigger = false, ...props }) {
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
- function SelectLabel({ className, ...props }) {
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
- function SelectItem({ className, children, ...props }) {
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
- function SelectSeparator({ className, ...props }) {
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
- function SelectScrollUpButton({ className, ...props }) {
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
- function SelectScrollDownButton({ className, ...props }) {
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({ ...props }) {
4610
+ function Sheet(componentProps) {
3826
4611
  return /* @__PURE__ */ jsx(Dialog$1.Root, {
3827
4612
  "data-slot": "sheet",
3828
- ...props
4613
+ ...componentProps
3829
4614
  });
3830
4615
  }
3831
- function SheetTrigger({ ...props }) {
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
- function SheetClose({ ...props }) {
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
- function SheetPortal({ ...props }) {
4632
+ });
4633
+ SheetClose.displayName = "SheetClose";
4634
+ function SheetPortal(componentProps) {
3844
4635
  return /* @__PURE__ */ jsx(Dialog$1.Portal, {
3845
4636
  "data-slot": "sheet-portal",
3846
- ...props
4637
+ ...componentProps
3847
4638
  });
3848
4639
  }
3849
- const SheetOverlay = React$1.forwardRef(({ className, ...props }, ref) => {
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
- function SheetContent({ className, children, side = "right", showCloseButton = true, container, ...props }) {
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
- function SheetHeader({ className, ...props }) {
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
- function SheetFooter({ className, ...props }) {
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
- function SheetTitle({ className, ...props }) {
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
- function SheetDescription({ className, ...props }) {
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({ delay = 0, ...props }) {
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({ ...props }) {
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
- function TooltipTrigger({ ...props }) {
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
- const TooltipContent = React$1.forwardRef(({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }, ref) => {
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$1.useState(void 0);
3954
- React$1.useEffect(() => {
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$1.createContext(null);
4787
+ const SidebarContext = React.createContext(null);
3975
4788
  function useSidebar() {
3976
- const context = React$1.useContext(SidebarContext);
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
- function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) {
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$1.useState(false);
3983
- const [_open, _setOpen] = React$1.useState(defaultOpen);
4796
+ const [openMobile, setOpenMobile] = React.useState(false);
4797
+ const [_open, _setOpen] = React.useState(defaultOpen);
3984
4798
  const open = openProp ?? _open;
3985
- const setOpen = React$1.useCallback((value) => {
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$1.useCallback(() => {
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$1.useEffect(() => {
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$1.useMemo(() => ({
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
- function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, dir, ...props }) {
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
- function SidebarTrigger({ className, onClick, ...props }) {
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
- function SidebarRail({ className, ...props }) {
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
- function SidebarInset({ className, ...props }) {
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
- function SidebarInput({ className, ...props }) {
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
- function SidebarHeader({ className, ...props }) {
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
- function SidebarFooter({ className, ...props }) {
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
- function SidebarSeparator({ className, ...props }) {
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
- function SidebarContent({ className, ...props }) {
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
- function SidebarGroup({ className, ...props }) {
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
- function SidebarGroupLabel({ className, render, ...props }) {
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({ 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) }, props),
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
- function SidebarGroupAction({ className, render, ...props }) {
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({ 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) }, props),
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
- function SidebarGroupContent({ className, ...props }) {
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
- function SidebarMenu({ className, ...props }) {
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
- function SidebarMenuItem({ className, ...props }) {
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$1.forwardRef(({ render, isActive = false, variant = "default", size = "default", tooltip, className, ...props }, ref) => {
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$1.forwardRef(({ className, render, showOnHover = false, ...props }, ref) => {
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
- function SidebarMenuBadge({ className, ...props }) {
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
- function SidebarMenuSkeleton({ className, showIcon = false, width: widthProp, ...props }) {
4297
- const [fallbackWidth] = React$1.useState(() => {
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
- function SidebarMenuSub({ className, ...props }) {
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
- function SidebarMenuSubItem({ className, ...props }) {
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
- function SidebarMenuSubButton({ render, size = "md", isActive = false, className, ...props }) {
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({ 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) }, props),
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
- function Slider({ className, defaultValue, value, min = 0, max = 100, orientation = "horizontal", ...props }) {
4349
- const _values = React$1.useMemo(() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max], [
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 = ({ ...props }) => {
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$1.createContext(void 0);
5311
+ const StepperContext = React.createContext(void 0);
4422
5312
  function useStepper() {
4423
- const ctx = React$1.useContext(StepperContext);
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$1.forwardRef((componentProps, forwardRef) => {
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$1.useCallback((id) => setActiveId(id), [setActiveId]);
4435
- const getIndex = React$1.useCallback((id) => steps.findIndex((s) => s.id === id), [steps]);
4436
- const contextValue = React$1.useMemo(() => ({
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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$1.forwardRef((componentProps, forwardRef) => {
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
- function Switch({ className, ...props }) {
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
- function Tabs({ className, orientation = "horizontal", ...props }) {
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
- function TabsList({ className, ...props }) {
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
- function TabsTrigger({ className, ...props }) {
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
- function TabsContent({ className, ...props }) {
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
- function Toggle({ className, variant = "default", size = "default", ...props }) {
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$1.createContext({
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
- function ToggleGroup({ className, variant, size, spacing = 0, orientation = "horizontal", block = false, children, ...props }) {
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
- function ToggleGroupItem({ className, children, variant = "default", size = "default", ...props }) {
4640
- const context = React$1.useContext(ToggleGroupContext);
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$1.useState(0);
4678
- const [error, setError] = React$1.useState(null);
4679
- const gainRef = React$1.useRef(gain);
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$1.useEffect(() => {
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 };