@fluid-app/ui-primitives 0.1.1 → 0.1.2

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,26 +1,27 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import { zodResolver } from '@hookform/resolvers/zod';
4
- import { useForm } from 'react-hook-form';
5
- import * as React8 from 'react';
4
+ import { FormProvider, useForm, Controller, useFormContext, useFormState } from 'react-hook-form';
5
+ import * as React15 from 'react';
6
6
  import { createContext, useContext } from 'react';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
9
- import { X, ChevronDown, ChevronRight, ChevronLeft, Check, Circle, CircleIcon, ChevronUp } from 'lucide-react';
9
+ import { X, ChevronDown, ChevronRight, ChevronLeft, CalendarIcon, Check, Circle, ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon, CircleIcon, ChevronUp, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon } from 'lucide-react';
10
10
  import { cva } from 'class-variance-authority';
11
- import { Avatar as Avatar$1, Slot, RadioGroup } from 'radix-ui';
12
- import { Slot as Slot$1 } from '@radix-ui/react-slot';
11
+ import { AlertDialog as AlertDialog$1, Avatar as Avatar$1, Slot as Slot$1, RadioGroup } from 'radix-ui';
12
+ import { Slot } from '@radix-ui/react-slot';
13
13
  import { DayPicker } from 'react-day-picker';
14
14
  import * as RechartsPrimitive from 'recharts';
15
15
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
16
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
16
17
  import * as SheetPrimitive from '@radix-ui/react-dialog';
17
18
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
18
- import * as TogglePrimitive from '@radix-ui/react-toggle';
19
19
  import * as LabelPrimitive from '@radix-ui/react-label';
20
- import * as PopoverPrimitive from '@radix-ui/react-popover';
20
+ import * as TogglePrimitive from '@radix-ui/react-toggle';
21
21
  import * as SelectPrimitive from '@radix-ui/react-select';
22
22
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
23
23
  import * as SliderPrimitive from '@radix-ui/react-slider';
24
+ import { Toaster as Toaster$1 } from 'sonner';
24
25
  import * as SwitchPrimitive from '@radix-ui/react-switch';
25
26
  import * as TabsPrimitive from '@radix-ui/react-tabs';
26
27
  import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
@@ -177,6 +178,219 @@ function AlertDescription({
177
178
  }
178
179
  );
179
180
  }
181
+ var buttonVariants = cva(
182
+ "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
183
+ {
184
+ variants: {
185
+ variant: {
186
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
187
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
188
+ outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
189
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
190
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
191
+ link: "text-primary underline-offset-4 hover:underline"
192
+ },
193
+ size: {
194
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
195
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
196
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
197
+ xl: "h-11 rounded-md px-8 has-[>svg]:px-5",
198
+ icon: "size-9",
199
+ "icon-xs": "size-6",
200
+ "icon-sm": "size-8",
201
+ "icon-lg": "size-10"
202
+ }
203
+ },
204
+ defaultVariants: {
205
+ variant: "default",
206
+ size: "default"
207
+ }
208
+ }
209
+ );
210
+ function Button({
211
+ className,
212
+ variant,
213
+ size,
214
+ asChild = false,
215
+ ...props
216
+ }) {
217
+ const Comp = asChild ? Slot : "button";
218
+ return /* @__PURE__ */ jsx(
219
+ Comp,
220
+ {
221
+ "data-slot": "button",
222
+ className: cn(buttonVariants({ variant, size, className })),
223
+ ...props
224
+ }
225
+ );
226
+ }
227
+ function AlertDialog({
228
+ ...props
229
+ }) {
230
+ return /* @__PURE__ */ jsx(AlertDialog$1.Root, { "data-slot": "alert-dialog", ...props });
231
+ }
232
+ function AlertDialogTrigger({
233
+ ...props
234
+ }) {
235
+ return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
236
+ }
237
+ function AlertDialogPortal({
238
+ ...props
239
+ }) {
240
+ const portalContainer = usePortalContainer();
241
+ return /* @__PURE__ */ jsx(
242
+ AlertDialog$1.Portal,
243
+ {
244
+ "data-slot": "alert-dialog-portal",
245
+ container: portalContainer,
246
+ ...props
247
+ }
248
+ );
249
+ }
250
+ function AlertDialogOverlay({
251
+ className,
252
+ ...props
253
+ }) {
254
+ return /* @__PURE__ */ jsx(
255
+ AlertDialog$1.Overlay,
256
+ {
257
+ "data-slot": "alert-dialog-overlay",
258
+ className: cn(
259
+ "fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
260
+ className
261
+ ),
262
+ ...props
263
+ }
264
+ );
265
+ }
266
+ function AlertDialogContent({
267
+ className,
268
+ size = "default",
269
+ ...props
270
+ }) {
271
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
272
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
273
+ /* @__PURE__ */ jsx(
274
+ AlertDialog$1.Content,
275
+ {
276
+ "data-slot": "alert-dialog-content",
277
+ "data-size": size,
278
+ className: cn(
279
+ "group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg",
280
+ className
281
+ ),
282
+ ...props
283
+ }
284
+ )
285
+ ] });
286
+ }
287
+ function AlertDialogHeader({
288
+ className,
289
+ ...props
290
+ }) {
291
+ return /* @__PURE__ */ jsx(
292
+ "div",
293
+ {
294
+ "data-slot": "alert-dialog-header",
295
+ className: cn(
296
+ "grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
297
+ className
298
+ ),
299
+ ...props
300
+ }
301
+ );
302
+ }
303
+ function AlertDialogFooter({
304
+ className,
305
+ ...props
306
+ }) {
307
+ return /* @__PURE__ */ jsx(
308
+ "div",
309
+ {
310
+ "data-slot": "alert-dialog-footer",
311
+ className: cn(
312
+ "flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
313
+ className
314
+ ),
315
+ ...props
316
+ }
317
+ );
318
+ }
319
+ function AlertDialogTitle({
320
+ className,
321
+ ...props
322
+ }) {
323
+ return /* @__PURE__ */ jsx(
324
+ AlertDialog$1.Title,
325
+ {
326
+ "data-slot": "alert-dialog-title",
327
+ className: cn(
328
+ "text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
329
+ className
330
+ ),
331
+ ...props
332
+ }
333
+ );
334
+ }
335
+ function AlertDialogDescription({
336
+ className,
337
+ ...props
338
+ }) {
339
+ return /* @__PURE__ */ jsx(
340
+ AlertDialog$1.Description,
341
+ {
342
+ "data-slot": "alert-dialog-description",
343
+ className: cn("text-sm text-muted-foreground", className),
344
+ ...props
345
+ }
346
+ );
347
+ }
348
+ function AlertDialogMedia({
349
+ className,
350
+ ...props
351
+ }) {
352
+ return /* @__PURE__ */ jsx(
353
+ "div",
354
+ {
355
+ "data-slot": "alert-dialog-media",
356
+ className: cn(
357
+ "mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8",
358
+ className
359
+ ),
360
+ ...props
361
+ }
362
+ );
363
+ }
364
+ function AlertDialogAction({
365
+ className,
366
+ variant = "default",
367
+ size = "default",
368
+ ...props
369
+ }) {
370
+ return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
371
+ AlertDialog$1.Action,
372
+ {
373
+ "data-slot": "alert-dialog-action",
374
+ className: cn(className),
375
+ ...props
376
+ }
377
+ ) });
378
+ }
379
+ function AlertDialogCancel({
380
+ className,
381
+ variant = "outline",
382
+ size = "default",
383
+ ...props
384
+ }) {
385
+ return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
386
+ AlertDialog$1.Cancel,
387
+ {
388
+ "data-slot": "alert-dialog-cancel",
389
+ className: cn(className),
390
+ ...props
391
+ }
392
+ ) });
393
+ }
180
394
  function Avatar({
181
395
  className,
182
396
  size = "default",
@@ -293,7 +507,7 @@ function Badge({
293
507
  asChild = false,
294
508
  ...props
295
509
  }) {
296
- const Comp = asChild ? Slot.Root : "span";
510
+ const Comp = asChild ? Slot$1.Root : "span";
297
511
  return /* @__PURE__ */ jsx(
298
512
  Comp,
299
513
  {
@@ -304,52 +518,6 @@ function Badge({
304
518
  }
305
519
  );
306
520
  }
307
- var buttonVariants = cva(
308
- "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
309
- {
310
- variants: {
311
- variant: {
312
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
313
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
314
- outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
315
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
316
- ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
317
- link: "text-primary underline-offset-4 hover:underline"
318
- },
319
- size: {
320
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
321
- sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
322
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
323
- xl: "h-11 rounded-md px-8 has-[>svg]:px-5",
324
- icon: "size-9",
325
- "icon-xs": "size-6",
326
- "icon-sm": "size-8",
327
- "icon-lg": "size-10"
328
- }
329
- },
330
- defaultVariants: {
331
- variant: "default",
332
- size: "default"
333
- }
334
- }
335
- );
336
- function Button({
337
- className,
338
- variant,
339
- size,
340
- asChild = false,
341
- ...props
342
- }) {
343
- const Comp = asChild ? Slot$1 : "button";
344
- return /* @__PURE__ */ jsx(
345
- Comp,
346
- {
347
- "data-slot": "button",
348
- className: cn(buttonVariants({ variant, size, className })),
349
- ...props
350
- }
351
- );
352
- }
353
521
  function Calendar({
354
522
  className,
355
523
  classNames,
@@ -492,9 +660,9 @@ function CardFooter({ className, ...props }) {
492
660
  );
493
661
  }
494
662
  var THEMES = { light: "", dark: ".dark" };
495
- var ChartContext = React8.createContext(null);
663
+ var ChartContext = React15.createContext(null);
496
664
  function useChart() {
497
- const context = React8.useContext(ChartContext);
665
+ const context = React15.useContext(ChartContext);
498
666
  if (!context) {
499
667
  throw new Error("useChart must be used within a <ChartContainer />");
500
668
  }
@@ -507,7 +675,7 @@ function ChartContainer({
507
675
  config,
508
676
  ...props
509
677
  }) {
510
- const uniqueId = React8.useId();
678
+ const uniqueId = React15.useId();
511
679
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
512
680
  return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
513
681
  "div",
@@ -568,7 +736,7 @@ function ChartTooltipContent({
568
736
  labelKey
569
737
  }) {
570
738
  const { config } = useChart();
571
- const tooltipLabel = React8.useMemo(() => {
739
+ const tooltipLabel = React15.useMemo(() => {
572
740
  if (hideLabel || !payload?.length) {
573
741
  return null;
574
742
  }
@@ -746,6 +914,123 @@ function CollapsibleContent2({
746
914
  }
747
915
  );
748
916
  }
917
+ function Popover({
918
+ ...props
919
+ }) {
920
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
921
+ }
922
+ function PopoverTrigger({
923
+ ...props
924
+ }) {
925
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
926
+ }
927
+ function PopoverContent({
928
+ className,
929
+ align = "center",
930
+ sideOffset = 4,
931
+ ...props
932
+ }) {
933
+ const portalContainer = usePortalContainer();
934
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
935
+ PopoverPrimitive.Content,
936
+ {
937
+ "data-slot": "popover-content",
938
+ align,
939
+ sideOffset,
940
+ className: cn(
941
+ "cn-popover-content z-50 w-72 origin-(--radix-popover-content-transform-origin) outline-hidden",
942
+ className
943
+ ),
944
+ ...props
945
+ }
946
+ ) });
947
+ }
948
+ function PopoverAnchor({
949
+ ...props
950
+ }) {
951
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
952
+ }
953
+ function PopoverHeader({ className, ...props }) {
954
+ return /* @__PURE__ */ jsx(
955
+ "div",
956
+ {
957
+ "data-slot": "popover-header",
958
+ className: cn("cn-popover-header", className),
959
+ ...props
960
+ }
961
+ );
962
+ }
963
+ function PopoverTitle({ className, ...props }) {
964
+ return /* @__PURE__ */ jsx(
965
+ "div",
966
+ {
967
+ "data-slot": "popover-title",
968
+ className: cn("cn-popover-title", className),
969
+ ...props
970
+ }
971
+ );
972
+ }
973
+ function PopoverDescription({
974
+ className,
975
+ ...props
976
+ }) {
977
+ return /* @__PURE__ */ jsx(
978
+ "p",
979
+ {
980
+ "data-slot": "popover-description",
981
+ className: cn("cn-popover-description", className),
982
+ ...props
983
+ }
984
+ );
985
+ }
986
+ var defaultFormatDate = (date) => new Intl.DateTimeFormat(void 0, {
987
+ month: "long",
988
+ day: "numeric",
989
+ year: "numeric"
990
+ }).format(date);
991
+ function DatePicker({
992
+ value,
993
+ onChange,
994
+ placeholder = "Pick a date",
995
+ formatDate = defaultFormatDate,
996
+ disabled,
997
+ className,
998
+ calendarProps
999
+ }) {
1000
+ const [open, setOpen] = React15.useState(false);
1001
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
1002
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
1003
+ Button,
1004
+ {
1005
+ "data-slot": "date-picker",
1006
+ variant: "outline",
1007
+ disabled,
1008
+ className: cn(
1009
+ "w-full justify-start text-left font-normal",
1010
+ !value && "text-muted-foreground",
1011
+ className
1012
+ ),
1013
+ children: [
1014
+ /* @__PURE__ */ jsx(CalendarIcon, { className: "mr-2 size-4" }),
1015
+ value ? formatDate(value) : /* @__PURE__ */ jsx("span", { children: placeholder })
1016
+ ]
1017
+ }
1018
+ ) }),
1019
+ /* @__PURE__ */ jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsx(
1020
+ Calendar,
1021
+ {
1022
+ mode: "single",
1023
+ selected: value,
1024
+ onSelect: (date) => {
1025
+ onChange?.(date);
1026
+ setOpen(false);
1027
+ },
1028
+ initialFocus: true,
1029
+ ...calendarProps
1030
+ }
1031
+ ) })
1032
+ ] });
1033
+ }
749
1034
  function Dialog({
750
1035
  ...props
751
1036
  }) {
@@ -1084,6 +1369,125 @@ function DropdownMenuSubContent({
1084
1369
  }
1085
1370
  );
1086
1371
  }
1372
+ function Label2({
1373
+ className,
1374
+ ...props
1375
+ }) {
1376
+ return /* @__PURE__ */ jsx(
1377
+ LabelPrimitive.Root,
1378
+ {
1379
+ "data-slot": "label",
1380
+ className: cn(
1381
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
1382
+ className
1383
+ ),
1384
+ ...props
1385
+ }
1386
+ );
1387
+ }
1388
+ var Form = FormProvider;
1389
+ var FormFieldContext = React15.createContext(
1390
+ {}
1391
+ );
1392
+ var FormField = ({
1393
+ ...props
1394
+ }) => {
1395
+ return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
1396
+ };
1397
+ var useFormField = () => {
1398
+ const fieldContext = React15.useContext(FormFieldContext);
1399
+ const itemContext = React15.useContext(FormItemContext);
1400
+ const { getFieldState } = useFormContext();
1401
+ const formState = useFormState({ name: fieldContext.name });
1402
+ const fieldState = getFieldState(fieldContext.name, formState);
1403
+ if (!fieldContext.name) {
1404
+ throw new Error("useFormField should be used within <FormField>");
1405
+ }
1406
+ const { id } = itemContext;
1407
+ if (!id) {
1408
+ throw new Error("useFormField should be used within <FormItem>");
1409
+ }
1410
+ return {
1411
+ id,
1412
+ name: fieldContext.name,
1413
+ formItemId: `${id}-form-item`,
1414
+ formDescriptionId: `${id}-form-item-description`,
1415
+ formMessageId: `${id}-form-item-message`,
1416
+ ...fieldState
1417
+ };
1418
+ };
1419
+ var FormItemContext = React15.createContext(
1420
+ {}
1421
+ );
1422
+ function FormItem({ className, ...props }) {
1423
+ const id = React15.useId();
1424
+ return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
1425
+ "div",
1426
+ {
1427
+ "data-slot": "form-item",
1428
+ className: cn("grid gap-2", className),
1429
+ ...props
1430
+ }
1431
+ ) });
1432
+ }
1433
+ function FormLabel({
1434
+ className,
1435
+ ...props
1436
+ }) {
1437
+ const { error, formItemId } = useFormField();
1438
+ return /* @__PURE__ */ jsx(
1439
+ Label2,
1440
+ {
1441
+ "data-slot": "form-label",
1442
+ "data-error": !!error,
1443
+ className: cn("data-[error=true]:text-destructive", className),
1444
+ htmlFor: formItemId,
1445
+ ...props
1446
+ }
1447
+ );
1448
+ }
1449
+ function FormControl({ ...props }) {
1450
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
1451
+ return /* @__PURE__ */ jsx(
1452
+ Slot$1.Root,
1453
+ {
1454
+ "data-slot": "form-control",
1455
+ id: formItemId,
1456
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
1457
+ "aria-invalid": !!error,
1458
+ ...props
1459
+ }
1460
+ );
1461
+ }
1462
+ function FormDescription({ className, ...props }) {
1463
+ const { formDescriptionId } = useFormField();
1464
+ return /* @__PURE__ */ jsx(
1465
+ "p",
1466
+ {
1467
+ "data-slot": "form-description",
1468
+ id: formDescriptionId,
1469
+ className: cn("text-sm text-muted-foreground", className),
1470
+ ...props
1471
+ }
1472
+ );
1473
+ }
1474
+ function FormMessage({ className, ...props }) {
1475
+ const { error, formMessageId } = useFormField();
1476
+ const body = error ? String(error?.message ?? "") : props.children;
1477
+ if (!body) {
1478
+ return null;
1479
+ }
1480
+ return /* @__PURE__ */ jsx(
1481
+ "p",
1482
+ {
1483
+ "data-slot": "form-message",
1484
+ id: formMessageId,
1485
+ className: cn("text-sm text-destructive", className),
1486
+ ...props,
1487
+ children: body
1488
+ }
1489
+ );
1490
+ }
1087
1491
  function IconButton({
1088
1492
  icon: Icon2,
1089
1493
  className,
@@ -1171,88 +1575,107 @@ function Input({ className, type, ...props }) {
1171
1575
  }
1172
1576
  );
1173
1577
  }
1174
- function Label2({
1175
- className,
1176
- ...props
1177
- }) {
1578
+ function Pagination({ className, ...props }) {
1178
1579
  return /* @__PURE__ */ jsx(
1179
- LabelPrimitive.Root,
1580
+ "nav",
1180
1581
  {
1181
- "data-slot": "label",
1182
- className: cn(
1183
- "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
1184
- className
1185
- ),
1582
+ "aria-label": "pagination",
1583
+ "data-slot": "pagination",
1584
+ className: cn("mx-auto flex w-full justify-center", className),
1186
1585
  ...props
1187
1586
  }
1188
1587
  );
1189
1588
  }
1190
- function Popover({
1589
+ function PaginationContent({
1590
+ className,
1191
1591
  ...props
1192
1592
  }) {
1193
- return /* @__PURE__ */ jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1593
+ return /* @__PURE__ */ jsx(
1594
+ "ul",
1595
+ {
1596
+ "data-slot": "pagination-content",
1597
+ className: cn("flex flex-row items-center gap-1", className),
1598
+ ...props
1599
+ }
1600
+ );
1194
1601
  }
1195
- function PopoverTrigger({
1196
- ...props
1197
- }) {
1198
- return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
1602
+ function PaginationItem({ ...props }) {
1603
+ return /* @__PURE__ */ jsx("li", { "data-slot": "pagination-item", ...props });
1199
1604
  }
1200
- function PopoverContent({
1605
+ function PaginationLink({
1201
1606
  className,
1202
- align = "center",
1203
- sideOffset = 4,
1607
+ isActive,
1608
+ size = "icon",
1204
1609
  ...props
1205
1610
  }) {
1206
- const portalContainer = usePortalContainer();
1207
- return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
1208
- PopoverPrimitive.Content,
1611
+ return /* @__PURE__ */ jsx(
1612
+ "a",
1209
1613
  {
1210
- "data-slot": "popover-content",
1211
- align,
1212
- sideOffset,
1614
+ "aria-current": isActive ? "page" : void 0,
1615
+ "data-slot": "pagination-link",
1616
+ "data-active": isActive,
1213
1617
  className: cn(
1214
- "cn-popover-content z-50 w-72 origin-(--radix-popover-content-transform-origin) outline-hidden",
1618
+ buttonVariants({
1619
+ variant: isActive ? "outline" : "ghost",
1620
+ size
1621
+ }),
1215
1622
  className
1216
1623
  ),
1217
1624
  ...props
1218
1625
  }
1219
- ) });
1626
+ );
1220
1627
  }
1221
- function PopoverAnchor({
1628
+ function PaginationPrevious({
1629
+ className,
1222
1630
  ...props
1223
1631
  }) {
1224
- return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1225
- }
1226
- function PopoverHeader({ className, ...props }) {
1227
- return /* @__PURE__ */ jsx(
1228
- "div",
1632
+ return /* @__PURE__ */ jsxs(
1633
+ PaginationLink,
1229
1634
  {
1230
- "data-slot": "popover-header",
1231
- className: cn("cn-popover-header", className),
1232
- ...props
1635
+ "aria-label": "Go to previous page",
1636
+ size: "default",
1637
+ className: cn("gap-1 px-2.5 sm:pl-2.5", className),
1638
+ ...props,
1639
+ children: [
1640
+ /* @__PURE__ */ jsx(ChevronLeftIcon, {}),
1641
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: "Previous" })
1642
+ ]
1233
1643
  }
1234
1644
  );
1235
1645
  }
1236
- function PopoverTitle({ className, ...props }) {
1237
- return /* @__PURE__ */ jsx(
1238
- "div",
1646
+ function PaginationNext({
1647
+ className,
1648
+ ...props
1649
+ }) {
1650
+ return /* @__PURE__ */ jsxs(
1651
+ PaginationLink,
1239
1652
  {
1240
- "data-slot": "popover-title",
1241
- className: cn("cn-popover-title", className),
1242
- ...props
1653
+ "aria-label": "Go to next page",
1654
+ size: "default",
1655
+ className: cn("gap-1 px-2.5 sm:pr-2.5", className),
1656
+ ...props,
1657
+ children: [
1658
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: "Next" }),
1659
+ /* @__PURE__ */ jsx(ChevronRightIcon, {})
1660
+ ]
1243
1661
  }
1244
1662
  );
1245
1663
  }
1246
- function PopoverDescription({
1664
+ function PaginationEllipsis({
1247
1665
  className,
1248
1666
  ...props
1249
1667
  }) {
1250
- return /* @__PURE__ */ jsx(
1251
- "p",
1668
+ return /* @__PURE__ */ jsxs(
1669
+ "span",
1252
1670
  {
1253
- "data-slot": "popover-description",
1254
- className: cn("cn-popover-description", className),
1255
- ...props
1671
+ "aria-hidden": true,
1672
+ "data-slot": "pagination-ellipsis",
1673
+ className: cn("flex size-9 items-center justify-center", className),
1674
+ ...props,
1675
+ children: [
1676
+ /* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-4" }),
1677
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
1678
+ ]
1256
1679
  }
1257
1680
  );
1258
1681
  }
@@ -1449,7 +1872,7 @@ function SelectScrollDownButton({
1449
1872
  }
1450
1873
  );
1451
1874
  }
1452
- var Separator3 = React8.forwardRef(
1875
+ var Separator3 = React15.forwardRef(
1453
1876
  ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
1454
1877
  SeparatorPrimitive.Root,
1455
1878
  {
@@ -1466,34 +1889,6 @@ var Separator3 = React8.forwardRef(
1466
1889
  )
1467
1890
  );
1468
1891
  Separator3.displayName = SeparatorPrimitive.Root.displayName;
1469
- function Skeleton({
1470
- className,
1471
- ...props
1472
- }) {
1473
- return /* @__PURE__ */ jsx(
1474
- "div",
1475
- {
1476
- className: cn("animate-pulse rounded-md bg-muted", className),
1477
- ...props
1478
- }
1479
- );
1480
- }
1481
- var Slider = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
1482
- SliderPrimitive.Root,
1483
- {
1484
- ref,
1485
- className: cn(
1486
- "relative flex w-full touch-none items-center select-none",
1487
- className
1488
- ),
1489
- ...props,
1490
- children: [
1491
- /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1492
- /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50" })
1493
- ]
1494
- }
1495
- ));
1496
- Slider.displayName = SliderPrimitive.Root.displayName;
1497
1892
  var Sheet = SheetPrimitive.Root;
1498
1893
  var SheetTrigger = SheetPrimitive.Trigger;
1499
1894
  var SheetClose = SheetPrimitive.Close;
@@ -1501,7 +1896,7 @@ function SheetPortal(props) {
1501
1896
  const portalContainer = usePortalContainer();
1502
1897
  return /* @__PURE__ */ jsx(SheetPrimitive.Portal, { container: portalContainer, ...props });
1503
1898
  }
1504
- var SheetOverlay = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1899
+ var SheetOverlay = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1505
1900
  SheetPrimitive.Overlay,
1506
1901
  {
1507
1902
  className: cn(
@@ -1529,7 +1924,7 @@ var sheetVariants = cva(
1529
1924
  }
1530
1925
  }
1531
1926
  );
1532
- var SheetContent = React8.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
1927
+ var SheetContent = React15.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
1533
1928
  /* @__PURE__ */ jsx(SheetOverlay, {}),
1534
1929
  /* @__PURE__ */ jsxs(
1535
1930
  SheetPrimitive.Content,
@@ -1572,7 +1967,7 @@ function SheetFooter({ className, ...props }) {
1572
1967
  }
1573
1968
  );
1574
1969
  }
1575
- var SheetTitle = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1970
+ var SheetTitle = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1576
1971
  SheetPrimitive.Title,
1577
1972
  {
1578
1973
  ref,
@@ -1581,7 +1976,7 @@ var SheetTitle = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE_
1581
1976
  }
1582
1977
  ));
1583
1978
  SheetTitle.displayName = SheetPrimitive.Title.displayName;
1584
- var SheetDescription = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1979
+ var SheetDescription = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1585
1980
  SheetPrimitive.Description,
1586
1981
  {
1587
1982
  ref,
@@ -1590,6 +1985,69 @@ var SheetDescription = React8.forwardRef(({ className, ...props }, ref) => /* @_
1590
1985
  }
1591
1986
  ));
1592
1987
  SheetDescription.displayName = SheetPrimitive.Description.displayName;
1988
+ function Skeleton({
1989
+ className,
1990
+ ...props
1991
+ }) {
1992
+ return /* @__PURE__ */ jsx(
1993
+ "div",
1994
+ {
1995
+ className: cn("animate-pulse rounded-md bg-muted", className),
1996
+ ...props
1997
+ }
1998
+ );
1999
+ }
2000
+ var Slider = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
2001
+ SliderPrimitive.Root,
2002
+ {
2003
+ ref,
2004
+ className: cn(
2005
+ "relative flex w-full touch-none items-center select-none",
2006
+ className
2007
+ ),
2008
+ ...props,
2009
+ children: [
2010
+ /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
2011
+ /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50" })
2012
+ ]
2013
+ }
2014
+ ));
2015
+ Slider.displayName = SliderPrimitive.Root.displayName;
2016
+ function Toaster({ theme = "system", ...props }) {
2017
+ return /* @__PURE__ */ jsx(
2018
+ Toaster$1,
2019
+ {
2020
+ theme,
2021
+ className: "toaster group",
2022
+ icons: {
2023
+ success: /* @__PURE__ */ jsx(CircleCheckIcon, { className: "size-4" }),
2024
+ info: /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }),
2025
+ warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
2026
+ error: /* @__PURE__ */ jsx(OctagonXIcon, { className: "size-4" }),
2027
+ loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
2028
+ },
2029
+ style: {
2030
+ "--normal-bg": "var(--popover)",
2031
+ "--normal-text": "var(--popover-foreground)",
2032
+ "--normal-border": "var(--border)",
2033
+ "--success-bg": "var(--popover)",
2034
+ "--success-text": "var(--popover-foreground)",
2035
+ "--success-border": "var(--border)",
2036
+ "--error-bg": "var(--popover)",
2037
+ "--error-text": "var(--popover-foreground)",
2038
+ "--error-border": "var(--border)",
2039
+ "--warning-bg": "var(--popover)",
2040
+ "--warning-text": "var(--popover-foreground)",
2041
+ "--warning-border": "var(--border)",
2042
+ "--info-bg": "var(--popover)",
2043
+ "--info-text": "var(--popover-foreground)",
2044
+ "--info-border": "var(--border)",
2045
+ "--border-radius": "var(--radius)"
2046
+ },
2047
+ ...props
2048
+ }
2049
+ );
2050
+ }
1593
2051
  function SpinnerWithText({
1594
2052
  text = "Loading...",
1595
2053
  variant = "inline",
@@ -1642,7 +2100,7 @@ function SpinnerWithText({
1642
2100
  }
1643
2101
  );
1644
2102
  }
1645
- var Switch = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2103
+ var Switch = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1646
2104
  SwitchPrimitive.Root,
1647
2105
  {
1648
2106
  className: cn(
@@ -1835,7 +2293,7 @@ function Textarea({ className, ...props }) {
1835
2293
  }
1836
2294
  );
1837
2295
  }
1838
- var ToggleGroupContext = React8.createContext({
2296
+ var ToggleGroupContext = React15.createContext({
1839
2297
  size: "default",
1840
2298
  variant: "default",
1841
2299
  spacing: 0,
@@ -1881,7 +2339,7 @@ function ToggleGroupItem({
1881
2339
  size = "default",
1882
2340
  ...props
1883
2341
  }) {
1884
- const context = React8.useContext(ToggleGroupContext);
2342
+ const context = React15.useContext(ToggleGroupContext);
1885
2343
  return /* @__PURE__ */ jsx(
1886
2344
  ToggleGroupPrimitive.Item,
1887
2345
  {
@@ -1926,6 +2384,6 @@ function TooltipContent({
1926
2384
  ) });
1927
2385
  }
1928
2386
 
1929
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Button, Calendar, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, IconButton, IconToggle, Input, Label2 as Label, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, PortalContainerProvider, RadioGroup2 as RadioGroup, RadioGroupItem, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, SpinnerWithText, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, toggleVariants, useZodForm };
2387
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Button, Calendar, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, DatePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, IconButton, IconToggle, Input, Label2 as Label, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, PortalContainerProvider, RadioGroup2 as RadioGroup, RadioGroupItem, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, SpinnerWithText, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, toggleVariants, useFormField, useZodForm };
1930
2388
  //# sourceMappingURL=index.js.map
1931
2389
  //# sourceMappingURL=index.js.map