@page-speed/forms 0.7.3 → 0.7.5

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.
@@ -1,12 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkWQ4HD5UD_cjs = require('./chunk-WQ4HD5UD.cjs');
3
+ var chunkIGI4JJKE_cjs = require('./chunk-IGI4JJKE.cjs');
4
4
  var React19 = require('react');
5
5
  var radixUi = require('radix-ui');
6
6
  var cmdk = require('cmdk');
7
7
  var reactDirection = require('@radix-ui/react-direction');
8
8
  var reactSlot = require('@radix-ui/react-slot');
9
9
  var reactDayPicker = require('react-day-picker');
10
+ var icon = require('@page-speed/icon');
10
11
 
11
12
  function _interopNamespace(e) {
12
13
  if (e && e.__esModule) return e;
@@ -33,9 +34,9 @@ function Textarea({ className, ...props }) {
33
34
  "textarea",
34
35
  {
35
36
  "data-slot": "textarea",
36
- className: chunkWQ4HD5UD_cjs.cn(
37
+ className: chunkIGI4JJKE_cjs.cn(
37
38
  // Core structure - uses CSS variables only
38
- "flex field-sizing-content min-h-16 w-full rounded-md border border-input",
39
+ "flex field-sizing-content min-h-32 w-full rounded-md border border-input",
39
40
  "bg-transparent px-3 py-2 text-base shadow-xs",
40
41
  "transition-[color,box-shadow] outline-none md:text-sm",
41
42
  // Focus state - uses ring-ring CSS variable
@@ -86,9 +87,9 @@ function TextArea({
86
87
  placeholder,
87
88
  disabled,
88
89
  required,
89
- className: chunkWQ4HD5UD_cjs.cn(
90
+ className: chunkIGI4JJKE_cjs.cn(
90
91
  // Valid value indicator - ring-2 when has value and no error
91
- !error && hasValue && "ring-2 ring-ring",
92
+ !error && hasValue && "ring-2 ring-primary",
92
93
  // Error state - handled by Textarea component via aria-invalid
93
94
  className
94
95
  ),
@@ -113,7 +114,7 @@ function Checkbox({
113
114
  radixUi.Checkbox.Root,
114
115
  {
115
116
  "data-slot": "checkbox",
116
- className: chunkWQ4HD5UD_cjs.cn(
117
+ className: chunkIGI4JJKE_cjs.cn(
117
118
  // Core structure - uses CSS variables
118
119
  "peer size-4 shrink-0 rounded-[4px] border border-input bg-transparent shadow-xs",
119
120
  "transition-shadow outline-none",
@@ -126,6 +127,7 @@ function Checkbox({
126
127
  "aria-invalid:border-destructive aria-invalid:ring-destructive/20",
127
128
  // Disabled state
128
129
  "disabled:cursor-not-allowed disabled:opacity-50",
130
+ " mt-1",
129
131
  className
130
132
  ),
131
133
  ...props
@@ -218,14 +220,14 @@ function Checkbox2({
218
220
  return /* @__PURE__ */ React19__namespace.createElement("div", { className }, checkbox);
219
221
  }
220
222
  return /* @__PURE__ */ React19__namespace.createElement("div", { className: "space-y-0", "data-invalid": error || void 0 }, /* @__PURE__ */ React19__namespace.createElement(
221
- chunkWQ4HD5UD_cjs.FieldLabel,
223
+ chunkIGI4JJKE_cjs.FieldLabel,
222
224
  {
223
225
  htmlFor: checkboxId,
224
- className: chunkWQ4HD5UD_cjs.cn(
226
+ className: chunkIGI4JJKE_cjs.cn(
225
227
  "flex gap-3 p-3 duration-200 select-auto font-normal leading-normal",
226
- showChoiceCard && "border rounded-lg hover:ring-2 hover:ring-ring/50",
227
- showChoiceCard && value && "ring-2 ring-ring",
228
- showChoiceCard && error && "border-destructive",
228
+ showChoiceCard && "border rounded-lg hover:ring-2 hover:ring-primary",
229
+ showChoiceCard && value && "ring-2 ring-primary",
230
+ showChoiceCard && error && "ring-2 ring-destructive",
229
231
  disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
230
232
  className
231
233
  )
@@ -233,14 +235,14 @@ function Checkbox2({
233
235
  /* @__PURE__ */ React19__namespace.createElement(
234
236
  "div",
235
237
  {
236
- className: chunkWQ4HD5UD_cjs.cn(
238
+ className: chunkIGI4JJKE_cjs.cn(
237
239
  "flex w-full gap-3",
238
240
  showChoiceCard ? "items-start" : "items-center"
239
241
  )
240
242
  },
241
243
  checkbox,
242
244
  /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex-1 space-y-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(
243
- chunkWQ4HD5UD_cjs.FieldDescription,
245
+ chunkIGI4JJKE_cjs.FieldDescription,
244
246
  {
245
247
  id: `${checkboxId}-description`,
246
248
  className: "leading-snug"
@@ -309,14 +311,14 @@ function CheckboxGroup({
309
311
  };
310
312
  const maxReached = Boolean(maxSelections && countableValue >= maxSelections);
311
313
  const containerClass = React19__namespace.useMemo(() => {
312
- return chunkWQ4HD5UD_cjs.cn(
314
+ return chunkIGI4JJKE_cjs.cn(
313
315
  "w-full grid grid-cols-1 border-0 m-0 p-0 min-w-0",
314
- (layout === "grid" || layout === "inline") && "md:grid-cols-2",
315
- layout === "grid" && "gap-3",
316
- layout === "inline" && "gap-0",
316
+ layout === "grid" && "grid grid-cols-1 md:grid-cols-2 ",
317
+ layout === "inline" && "flex flex-wrap",
318
+ useChoiceCard ? "gap-x-6 space-y-4" : "gap-0",
317
319
  className
318
320
  );
319
- }, [layout, className]);
321
+ }, [layout, className, useChoiceCard]);
320
322
  const groupDescriptionId = description ? `${name}-description` : void 0;
321
323
  const groupAriaDescribedBy = [props["aria-describedby"], groupDescriptionId].filter(Boolean).join(" ") || void 0;
322
324
  return /* @__PURE__ */ React19__namespace.createElement(
@@ -330,7 +332,7 @@ function CheckboxGroup({
330
332
  "aria-label": typeof label === "string" ? label : props["aria-label"]
331
333
  },
332
334
  /* @__PURE__ */ React19__namespace.createElement(
333
- chunkWQ4HD5UD_cjs.LabelGroup,
335
+ chunkIGI4JJKE_cjs.LabelGroup,
334
336
  {
335
337
  labelHtmlFor: name,
336
338
  required,
@@ -377,9 +379,9 @@ function CheckboxGroup({
377
379
  );
378
380
  }),
379
381
  (minSelections || maxSelections) && /* @__PURE__ */ React19__namespace.createElement(
380
- chunkWQ4HD5UD_cjs.FieldDescription,
382
+ chunkIGI4JJKE_cjs.FieldDescription,
381
383
  {
382
- className: chunkWQ4HD5UD_cjs.cn(
384
+ className: chunkIGI4JJKE_cjs.cn(
383
385
  "p-2 rounded-lg border font-semibold mt-2 leading-snug",
384
386
  minSelections && countableValue < minSelections ? "border-destructive bg-destructive/80 text-destructive-foreground" : "border-border bg-card text-card-foreground"
385
387
  ),
@@ -399,7 +401,7 @@ function RadioGroup({
399
401
  radixUi.RadioGroup.Root,
400
402
  {
401
403
  "data-slot": "radio-group",
402
- className: chunkWQ4HD5UD_cjs.cn("grid gap-3", className),
404
+ className: chunkIGI4JJKE_cjs.cn("grid gap-3", className),
403
405
  ...props
404
406
  }
405
407
  );
@@ -412,7 +414,7 @@ function RadioGroupItem({
412
414
  radixUi.RadioGroup.Item,
413
415
  {
414
416
  "data-slot": "radio-group-item",
415
- className: chunkWQ4HD5UD_cjs.cn(
417
+ className: chunkIGI4JJKE_cjs.cn(
416
418
  // Core structure - uses CSS variables
417
419
  "aspect-square size-4 shrink-0 rounded-full border border-input bg-transparent shadow-xs",
418
420
  "text-primary transition-[color,box-shadow] outline-none",
@@ -470,7 +472,17 @@ function Radio({
470
472
  return options.some((option) => option.description);
471
473
  }, [options]);
472
474
  const groupDescriptionId = description ? `${name}-description` : void 0;
473
- return /* @__PURE__ */ React19__namespace.createElement("div", { className: chunkWQ4HD5UD_cjs.cn("w-full", className), "data-invalid": error || void 0 }, (label || description) && /* @__PURE__ */ React19__namespace.createElement("div", { className: "mb-3 space-y-1" }, label && /* @__PURE__ */ React19__namespace.createElement("div", { className: "text-base font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(chunkWQ4HD5UD_cjs.FieldDescription, { id: groupDescriptionId, className: "leading-snug" }, description)), /* @__PURE__ */ React19__namespace.createElement(
475
+ return /* @__PURE__ */ React19__namespace.createElement("div", { className: chunkIGI4JJKE_cjs.cn("w-full", className), "data-invalid": error || void 0 }, /* @__PURE__ */ React19__namespace.createElement(
476
+ chunkIGI4JJKE_cjs.LabelGroup,
477
+ {
478
+ labelHtmlFor: name,
479
+ required,
480
+ variant: "legend",
481
+ secondaryId: groupDescriptionId,
482
+ secondary: description,
483
+ primary: label
484
+ }
485
+ ), /* @__PURE__ */ React19__namespace.createElement(
474
486
  RadioGroup,
475
487
  {
476
488
  name,
@@ -479,9 +491,10 @@ function Radio({
479
491
  onBlur: handleBlur,
480
492
  disabled,
481
493
  required,
482
- className: chunkWQ4HD5UD_cjs.cn(
483
- layout === "grid" && "grid grid-cols-1 md:grid-cols-2 gap-3",
484
- layout === "inline" && "flex flex-wrap gap-0"
494
+ className: chunkIGI4JJKE_cjs.cn(
495
+ layout === "grid" && "grid grid-cols-1 md:grid-cols-2 ",
496
+ layout === "inline" && "flex flex-wrap",
497
+ useChoiceCard ? "gap-x-6 space-y-4" : "gap-0"
485
498
  ),
486
499
  "aria-invalid": error || props["aria-invalid"],
487
500
  "aria-describedby": groupDescriptionId || props["aria-describedby"],
@@ -493,14 +506,17 @@ function Radio({
493
506
  const radioId = `${name}-${option.value}`;
494
507
  const hasDescription = !!option.description;
495
508
  return /* @__PURE__ */ React19__namespace.createElement(
496
- chunkWQ4HD5UD_cjs.FieldLabel,
509
+ chunkIGI4JJKE_cjs.FieldLabel,
497
510
  {
498
511
  key: option.value,
499
512
  htmlFor: radioId,
500
- className: chunkWQ4HD5UD_cjs.cn(
501
- "flex gap-3 p-3 duration-200 select-auto font-normal leading-normal",
502
- useChoiceCard && "border rounded-lg hover:ring-2 hover:ring-ring/50",
503
- useChoiceCard && isSelected && "ring-2 ring-ring",
513
+ className: chunkIGI4JJKE_cjs.cn(
514
+ "flex gap-3 duration-200",
515
+ "select-auto font-normal leading-normal",
516
+ useChoiceCard && "hover:ring-2 hover:ring-primary",
517
+ useChoiceCard && "border rounded-lg p-3",
518
+ !useChoiceCard && "p-1",
519
+ useChoiceCard && isSelected && "ring-2 ring-primary",
504
520
  useChoiceCard && error && "border-destructive",
505
521
  isDisabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"
506
522
  )
@@ -508,7 +524,7 @@ function Radio({
508
524
  /* @__PURE__ */ React19__namespace.createElement(
509
525
  "div",
510
526
  {
511
- className: chunkWQ4HD5UD_cjs.cn(
527
+ className: chunkIGI4JJKE_cjs.cn(
512
528
  "flex w-full gap-3",
513
529
  useChoiceCard ? "items-start" : "items-center"
514
530
  )
@@ -524,7 +540,7 @@ function Radio({
524
540
  }
525
541
  ),
526
542
  /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex-1 space-y-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, option.label), option.description && /* @__PURE__ */ React19__namespace.createElement(
527
- chunkWQ4HD5UD_cjs.FieldDescription,
543
+ chunkIGI4JJKE_cjs.FieldDescription,
528
544
  {
529
545
  id: `${radioId}-description`,
530
546
  className: "leading-snug"
@@ -547,7 +563,7 @@ function Switch({
547
563
  {
548
564
  "data-slot": "switch",
549
565
  "data-size": size,
550
- className: chunkWQ4HD5UD_cjs.cn(
566
+ className: chunkIGI4JJKE_cjs.cn(
551
567
  // Core structure - uses CSS variables
552
568
  "peer group/switch inline-flex shrink-0 items-center rounded-full",
553
569
  "border border-transparent shadow-xs transition-all outline-none",
@@ -568,7 +584,7 @@ function Switch({
568
584
  radixUi.Switch.Thumb,
569
585
  {
570
586
  "data-slot": "switch-thumb",
571
- className: chunkWQ4HD5UD_cjs.cn(
587
+ className: chunkIGI4JJKE_cjs.cn(
572
588
  // Thumb appearance - inherits from parent theme
573
589
  "bg-background pointer-events-none block rounded-full ring-0 transition-transform",
574
590
  // Size variants
@@ -619,21 +635,21 @@ function Switch2({
619
635
  }
620
636
  );
621
637
  if (!label) {
622
- return /* @__PURE__ */ React19__namespace.createElement(chunkWQ4HD5UD_cjs.Field, { className }, switchElement);
638
+ return /* @__PURE__ */ React19__namespace.createElement(chunkIGI4JJKE_cjs.Field, { className }, switchElement);
623
639
  }
624
- return /* @__PURE__ */ React19__namespace.createElement(chunkWQ4HD5UD_cjs.Field, { className: "gap-0", invalid: Boolean(error) }, /* @__PURE__ */ React19__namespace.createElement(
625
- chunkWQ4HD5UD_cjs.FieldLabel,
640
+ return /* @__PURE__ */ React19__namespace.createElement(chunkIGI4JJKE_cjs.Field, { className: "gap-0", invalid: Boolean(error) }, /* @__PURE__ */ React19__namespace.createElement(
641
+ chunkIGI4JJKE_cjs.FieldLabel,
626
642
  {
627
643
  htmlFor: switchId,
628
- className: chunkWQ4HD5UD_cjs.cn(
644
+ className: chunkIGI4JJKE_cjs.cn(
629
645
  "flex items-center gap-3 cursor-pointer select-auto font-normal leading-normal",
630
646
  disabled && "opacity-50 cursor-not-allowed",
631
647
  className
632
648
  )
633
649
  },
634
650
  switchElement,
635
- /* @__PURE__ */ React19__namespace.createElement(chunkWQ4HD5UD_cjs.Field, { className: "gap-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(
636
- chunkWQ4HD5UD_cjs.FieldDescription,
651
+ /* @__PURE__ */ React19__namespace.createElement(chunkIGI4JJKE_cjs.Field, { className: "gap-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(
652
+ chunkIGI4JJKE_cjs.FieldDescription,
637
653
  {
638
654
  id: `${switchId}-description`,
639
655
  className: "leading-snug"
@@ -656,7 +672,14 @@ function SelectGroup({
656
672
  function SelectValue({
657
673
  ...props
658
674
  }) {
659
- return /* @__PURE__ */ React19__namespace.createElement(radixUi.Select.Value, { "data-slot": "select-value", ...props });
675
+ return /* @__PURE__ */ React19__namespace.createElement(
676
+ radixUi.Select.Value,
677
+ {
678
+ className: "font-normal",
679
+ "data-slot": "select-value",
680
+ ...props
681
+ }
682
+ );
660
683
  }
661
684
  function SelectTrigger({
662
685
  className,
@@ -669,7 +692,7 @@ function SelectTrigger({
669
692
  {
670
693
  "data-slot": "select-trigger",
671
694
  "data-size": size,
672
- className: chunkWQ4HD5UD_cjs.cn(
695
+ className: chunkIGI4JJKE_cjs.cn(
673
696
  // Core structure - uses CSS variables
674
697
  "flex w-full items-center justify-between gap-2 rounded-md border border-input",
675
698
  "bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs",
@@ -720,7 +743,7 @@ function SelectContent({
720
743
  radixUi.Select.Content,
721
744
  {
722
745
  "data-slot": "select-content",
723
- className: chunkWQ4HD5UD_cjs.cn(
746
+ className: chunkIGI4JJKE_cjs.cn(
724
747
  "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
725
748
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
726
749
  className
@@ -733,7 +756,7 @@ function SelectContent({
733
756
  /* @__PURE__ */ React19__namespace.createElement(
734
757
  radixUi.Select.Viewport,
735
758
  {
736
- className: chunkWQ4HD5UD_cjs.cn(
759
+ className: chunkIGI4JJKE_cjs.cn(
737
760
  "p-1",
738
761
  position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
739
762
  )
@@ -751,7 +774,7 @@ function SelectLabel({
751
774
  radixUi.Select.Label,
752
775
  {
753
776
  "data-slot": "select-label",
754
- className: chunkWQ4HD5UD_cjs.cn("px-2 py-1.5 text-xs opacity-70", className),
777
+ className: chunkIGI4JJKE_cjs.cn("px-2 py-1.5 text-xs opacity-70", className),
755
778
  ...props
756
779
  }
757
780
  );
@@ -765,7 +788,7 @@ function SelectItem({
765
788
  radixUi.Select.Item,
766
789
  {
767
790
  "data-slot": "select-item",
768
- className: chunkWQ4HD5UD_cjs.cn(
791
+ className: chunkIGI4JJKE_cjs.cn(
769
792
  // Core structure - inherits text color
770
793
  "relative flex w-full cursor-default items-center gap-2 rounded-sm",
771
794
  "py-1.5 pr-8 pl-2 text-sm outline-hidden select-none",
@@ -812,7 +835,7 @@ function SelectScrollUpButton({
812
835
  radixUi.Select.ScrollUpButton,
813
836
  {
814
837
  "data-slot": "select-scroll-up-button",
815
- className: chunkWQ4HD5UD_cjs.cn(
838
+ className: chunkIGI4JJKE_cjs.cn(
816
839
  "flex cursor-default items-center justify-center py-1",
817
840
  className
818
841
  ),
@@ -841,7 +864,7 @@ function SelectScrollDownButton({
841
864
  radixUi.Select.ScrollDownButton,
842
865
  {
843
866
  "data-slot": "select-scroll-down-button",
844
- className: chunkWQ4HD5UD_cjs.cn(
867
+ className: chunkIGI4JJKE_cjs.cn(
845
868
  "flex cursor-default items-center justify-center py-1",
846
869
  className
847
870
  ),
@@ -935,9 +958,9 @@ function Select2({
935
958
  /* @__PURE__ */ React19__namespace.createElement(
936
959
  SelectTrigger,
937
960
  {
938
- className: chunkWQ4HD5UD_cjs.cn(
961
+ className: chunkIGI4JJKE_cjs.cn(
939
962
  // Valid value indicator - ring-2 when has value and no error
940
- !error && hasValue && "ring-2 ring-ring",
963
+ !error && hasValue && "ring-2 ring-primary",
941
964
  // Error state - handled by SelectTrigger via aria-invalid
942
965
  className
943
966
  ),
@@ -994,7 +1017,7 @@ var DialogOverlay = React19__namespace.forwardRef(({ className, ...props }, ref)
994
1017
  {
995
1018
  ref,
996
1019
  "data-slot": "dialog-overlay",
997
- className: chunkWQ4HD5UD_cjs.cn(
1020
+ className: chunkIGI4JJKE_cjs.cn(
998
1021
  "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
999
1022
  className
1000
1023
  ),
@@ -1009,7 +1032,7 @@ var DialogContent = React19__namespace.forwardRef(({ className, children, showCl
1009
1032
  {
1010
1033
  ref,
1011
1034
  "data-slot": "dialog-content",
1012
- className: chunkWQ4HD5UD_cjs.cn(
1035
+ className: chunkIGI4JJKE_cjs.cn(
1013
1036
  "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 p-6 shadow-lg duration-200 outline-none sm:max-w-lg",
1014
1037
  className
1015
1038
  ),
@@ -1046,7 +1069,7 @@ function DialogHeader({ className, ...props }) {
1046
1069
  "div",
1047
1070
  {
1048
1071
  "data-slot": "dialog-header",
1049
- className: chunkWQ4HD5UD_cjs.cn("flex flex-col gap-2 text-center sm:text-left", className),
1072
+ className: chunkIGI4JJKE_cjs.cn("flex flex-col gap-2 text-center sm:text-left", className),
1050
1073
  ...props
1051
1074
  }
1052
1075
  );
@@ -1059,7 +1082,7 @@ function DialogTitle({
1059
1082
  radixUi.Dialog.Title,
1060
1083
  {
1061
1084
  "data-slot": "dialog-title",
1062
- className: chunkWQ4HD5UD_cjs.cn("text-lg leading-none font-semibold", className),
1085
+ className: chunkIGI4JJKE_cjs.cn("text-lg leading-none font-semibold", className),
1063
1086
  ...props
1064
1087
  }
1065
1088
  );
@@ -1074,7 +1097,7 @@ function Command({
1074
1097
  cmdk.Command,
1075
1098
  {
1076
1099
  "data-slot": "command",
1077
- className: chunkWQ4HD5UD_cjs.cn(
1100
+ className: chunkIGI4JJKE_cjs.cn(
1078
1101
  "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
1079
1102
  className
1080
1103
  ),
@@ -1110,7 +1133,7 @@ function CommandInput({
1110
1133
  cmdk.Command.Input,
1111
1134
  {
1112
1135
  "data-slot": "command-input",
1113
- className: chunkWQ4HD5UD_cjs.cn(
1136
+ className: chunkIGI4JJKE_cjs.cn(
1114
1137
  "flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
1115
1138
  className
1116
1139
  ),
@@ -1127,7 +1150,7 @@ function CommandList({
1127
1150
  cmdk.Command.List,
1128
1151
  {
1129
1152
  "data-slot": "command-list",
1130
- className: chunkWQ4HD5UD_cjs.cn(
1153
+ className: chunkIGI4JJKE_cjs.cn(
1131
1154
  "max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
1132
1155
  className
1133
1156
  ),
@@ -1155,7 +1178,7 @@ function CommandGroup({
1155
1178
  cmdk.Command.Group,
1156
1179
  {
1157
1180
  "data-slot": "command-group",
1158
- className: chunkWQ4HD5UD_cjs.cn(
1181
+ className: chunkIGI4JJKE_cjs.cn(
1159
1182
  "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 [&_[cmdk-group-heading]]:opacity-70",
1160
1183
  className
1161
1184
  ),
@@ -1185,7 +1208,7 @@ function PopoverContent({
1185
1208
  "data-slot": "popover-content",
1186
1209
  align,
1187
1210
  sideOffset,
1188
- className: chunkWQ4HD5UD_cjs.cn(
1211
+ className: chunkIGI4JJKE_cjs.cn(
1189
1212
  "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
1190
1213
  className
1191
1214
  ),
@@ -1371,7 +1394,9 @@ function MultiSelect({
1371
1394
  (option) => option === currentOption
1372
1395
  );
1373
1396
  const nextEnabledIndex = currentEnabledIndex === -1 ? 0 : (currentEnabledIndex + 1) % enabledOptions.length;
1374
- setFocusedIndex(filteredOptions.indexOf(enabledOptions[nextEnabledIndex]));
1397
+ setFocusedIndex(
1398
+ filteredOptions.indexOf(enabledOptions[nextEnabledIndex])
1399
+ );
1375
1400
  break;
1376
1401
  }
1377
1402
  case "ArrowUp": {
@@ -1445,7 +1470,7 @@ function MultiSelect({
1445
1470
  value
1446
1471
  ]
1447
1472
  );
1448
- const combinedClassName = chunkWQ4HD5UD_cjs.cn("relative w-full", className);
1473
+ const combinedClassName = chunkIGI4JJKE_cjs.cn("relative w-full", className);
1449
1474
  return /* @__PURE__ */ React19__namespace.createElement("div", { className: combinedClassName }, /* @__PURE__ */ React19__namespace.createElement(
1450
1475
  "select",
1451
1476
  {
@@ -1466,12 +1491,12 @@ function MultiSelect({
1466
1491
  "div",
1467
1492
  {
1468
1493
  ref: triggerRef,
1469
- className: chunkWQ4HD5UD_cjs.cn(
1494
+ className: chunkIGI4JJKE_cjs.cn(
1470
1495
  "flex min-h-9 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm",
1471
1496
  "cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
1472
- !error && hasValue && "ring-2 ring-ring",
1497
+ !error && hasValue && "ring-2 ring-primary",
1473
1498
  disabled && "cursor-not-allowed opacity-50 pointer-events-none",
1474
- error && "border-destructive ring-1 ring-destructive"
1499
+ error && "ring-2 ring-destructive"
1475
1500
  ),
1476
1501
  onKeyDown: handleKeyDown,
1477
1502
  onBlur: handleTriggerBlur,
@@ -1535,7 +1560,7 @@ function MultiSelect({
1535
1560
  CommandInput,
1536
1561
  {
1537
1562
  id: searchInputId,
1538
- className: chunkWQ4HD5UD_cjs.cn(chunkWQ4HD5UD_cjs.INPUT_AUTOFILL_RESET_CLASSES),
1563
+ className: chunkIGI4JJKE_cjs.cn(chunkIGI4JJKE_cjs.INPUT_AUTOFILL_RESET_CLASSES),
1539
1564
  placeholder: "Search...",
1540
1565
  value: searchQuery,
1541
1566
  onValueChange: (nextValue) => {
@@ -1564,7 +1589,7 @@ function MultiSelect({
1564
1589
  },
1565
1590
  "Clear All"
1566
1591
  )),
1567
- isMaxReached && /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-b border-destructive bg-destructive/80 px-2 py-1 text-xs font-medium text-destructive-foreground" }, "Maximum ", maxSelections, " selection", maxSelections !== 1 ? "s" : "", " ", "reached"),
1592
+ isMaxReached && /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-b border-destructive bg-destructive/80 px-2 py-1 text-xs font-medium text-destructive-foreground" }, "Maximum ", maxSelections, " selection", maxSelections !== 1 ? "s" : "", " reached"),
1568
1593
  /* @__PURE__ */ React19__namespace.createElement(CommandList, { role: "listbox", "aria-multiselectable": "true" }, /* @__PURE__ */ React19__namespace.createElement(CommandEmpty, null, "No options found"), optionGroups.length > 0 ? optionGroups.map((group, groupIndex) => {
1569
1594
  const groupOptions = group.options.filter(
1570
1595
  (option) => filteredOptions.includes(option)
@@ -1596,7 +1621,7 @@ function MultiSelect({
1596
1621
  handleToggleOption(option.value);
1597
1622
  }
1598
1623
  },
1599
- className: chunkWQ4HD5UD_cjs.cn(
1624
+ className: chunkIGI4JJKE_cjs.cn(
1600
1625
  "relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent",
1601
1626
  isFocused && "bg-accent",
1602
1627
  isSelected && "bg-accent font-medium",
@@ -1627,7 +1652,7 @@ function MultiSelect({
1627
1652
  handleToggleOption(option.value);
1628
1653
  }
1629
1654
  },
1630
- className: chunkWQ4HD5UD_cjs.cn(
1655
+ className: chunkIGI4JJKE_cjs.cn(
1631
1656
  "relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent",
1632
1657
  isFocused && "bg-accent",
1633
1658
  isSelected && "bg-accent font-medium",
@@ -1681,7 +1706,7 @@ function BaseFileIcon({
1681
1706
  strokeWidth: "2",
1682
1707
  strokeLinecap: "round",
1683
1708
  strokeLinejoin: "round",
1684
- className: chunkWQ4HD5UD_cjs.cn("size-5", className),
1709
+ className: chunkIGI4JJKE_cjs.cn("size-5", className),
1685
1710
  "aria-hidden": "true"
1686
1711
  },
1687
1712
  children
@@ -2165,7 +2190,7 @@ function FileUpload(props) {
2165
2190
  "data-slot": "file-upload",
2166
2191
  dir,
2167
2192
  ...rootProps,
2168
- className: chunkWQ4HD5UD_cjs.cn("relative flex flex-col gap-2", className)
2193
+ className: chunkIGI4JJKE_cjs.cn("relative flex flex-col gap-2", className)
2169
2194
  },
2170
2195
  children,
2171
2196
  /* @__PURE__ */ React19__namespace.createElement(
@@ -2337,8 +2362,14 @@ function FileUploadDropzone(props) {
2337
2362
  dir: context.dir,
2338
2363
  tabIndex: context.disabled ? -1 : 0,
2339
2364
  ...dropzoneProps,
2340
- className: chunkWQ4HD5UD_cjs.cn(
2341
- "relative flex select-none flex-col items-center justify-center gap-2 rounded-lg border border-dashed p-6 outline-none transition-colors hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/20 data-disabled:pointer-events-none data-disabled:opacity-50 data-dragging:border-ring data-dragging:bg-accent/50 data-invalid:border-destructive data-invalid:ring-destructive/20",
2365
+ className: chunkIGI4JJKE_cjs.cn(
2366
+ "relative flex select-none flex-col items-center",
2367
+ "justify-center gap-2 rounded-lg border border-dashed p-6",
2368
+ "outline-none transition-colors hover:ring-2 hover:ring-primary",
2369
+ "focus-visible:ring-2 focus-visible:ring-primary",
2370
+ "data-disabled:pointer-events-none data-disabled:opacity-50 ",
2371
+ "data-dragging:ring-2 data-dragging:ring-primary",
2372
+ "data-invalid:ring-2 data-invalid:ring-destructive",
2342
2373
  className
2343
2374
  ),
2344
2375
  onClick,
@@ -2375,7 +2406,7 @@ function FileUploadList(props) {
2375
2406
  "data-state": shouldRender ? "active" : "inactive",
2376
2407
  dir: context.dir,
2377
2408
  ...listProps,
2378
- className: chunkWQ4HD5UD_cjs.cn(
2409
+ className: chunkIGI4JJKE_cjs.cn(
2379
2410
  "data-[state=inactive]:fade-out-0 data-[state=active]:fade-in-0 data-[state=inactive]:slide-out-to-top-2 data-[state=active]:slide-in-from-top-2 flex flex-col gap-2 data-[state=active]:animate-in data-[state=inactive]:animate-out",
2380
2411
  orientation === "horizontal" && "flex-row overflow-x-auto p-1.5",
2381
2412
  className
@@ -2431,7 +2462,7 @@ function FileUploadItem(props) {
2431
2462
  "data-slot": "file-upload-item",
2432
2463
  dir: context.dir,
2433
2464
  ...itemProps,
2434
- className: chunkWQ4HD5UD_cjs.cn(
2465
+ className: chunkIGI4JJKE_cjs.cn(
2435
2466
  "relative flex items-center gap-2.5 rounded-md border p-3",
2436
2467
  className
2437
2468
  )
@@ -2478,7 +2509,7 @@ function FileUploadItemPreview(props) {
2478
2509
  "aria-labelledby": itemContext.nameId,
2479
2510
  "data-slot": "file-upload-preview",
2480
2511
  ...previewProps,
2481
- className: chunkWQ4HD5UD_cjs.cn(
2512
+ className: chunkIGI4JJKE_cjs.cn(
2482
2513
  "relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded border bg-accent/50 [&>svg]:size-10",
2483
2514
  className
2484
2515
  )
@@ -2505,13 +2536,13 @@ function FileUploadItemMetadata(props) {
2505
2536
  "data-slot": "file-upload-metadata",
2506
2537
  dir: context.dir,
2507
2538
  ...metadataProps,
2508
- className: chunkWQ4HD5UD_cjs.cn("flex min-w-0 flex-1 flex-col", className)
2539
+ className: chunkIGI4JJKE_cjs.cn("flex min-w-0 flex-1 flex-col", className)
2509
2540
  },
2510
2541
  children ?? /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement(
2511
2542
  "span",
2512
2543
  {
2513
2544
  id: itemContext.nameId,
2514
- className: chunkWQ4HD5UD_cjs.cn(
2545
+ className: chunkIGI4JJKE_cjs.cn(
2515
2546
  "truncate font-medium text-sm",
2516
2547
  size === "sm" && "font-normal text-[13px] leading-snug"
2517
2548
  )
@@ -2521,7 +2552,7 @@ function FileUploadItemMetadata(props) {
2521
2552
  "span",
2522
2553
  {
2523
2554
  id: itemContext.sizeId,
2524
- className: chunkWQ4HD5UD_cjs.cn(
2555
+ className: chunkIGI4JJKE_cjs.cn(
2525
2556
  "truncate text-xs opacity-70",
2526
2557
  size === "sm" && "text-[11px] leading-snug"
2527
2558
  )
@@ -2573,7 +2604,7 @@ function FileInput({
2573
2604
  value = [],
2574
2605
  onChange,
2575
2606
  onBlur,
2576
- placeholder = "Choose file...",
2607
+ placeholder,
2577
2608
  disabled = false,
2578
2609
  required = false,
2579
2610
  error = false,
@@ -2851,7 +2882,26 @@ function FileInput({
2851
2882
  }
2852
2883
  };
2853
2884
  }, [imageToCrop]);
2854
- const fileCountLabel = normalizedValue.length > 0 ? `${normalizedValue.length} file(s) selected` : placeholder;
2885
+ const dynamicPlaceholder = React19__namespace.useMemo(() => {
2886
+ if (placeholder) {
2887
+ return placeholder;
2888
+ }
2889
+ return `Drag & drop file${multiple ? "s" : ""} here`;
2890
+ }, [multiple, placeholder]);
2891
+ const metadataElement = React19__namespace.useMemo(() => {
2892
+ const metaList = [];
2893
+ if (accept) {
2894
+ metaList.push(`File type: ${accept}`);
2895
+ }
2896
+ if (maxSize) {
2897
+ metaList.push(`Max file size: ${formatFileSize(maxSize)}`);
2898
+ }
2899
+ if (metaList.length > 0) {
2900
+ return /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex text-center items-center justify-center gap-1 opacity-75 text-xs" }, metaList.map((str) => /* @__PURE__ */ React19__namespace.createElement("span", { key: str, className: "relative" }, str)));
2901
+ } else {
2902
+ return null;
2903
+ }
2904
+ }, [accept, maxSize]);
2855
2905
  return /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement(
2856
2906
  FileUpload,
2857
2907
  {
@@ -2868,7 +2918,7 @@ function FileInput({
2868
2918
  required: required && normalizedValue.length === 0,
2869
2919
  invalid: Boolean(error || props["aria-invalid"]),
2870
2920
  label: "File upload",
2871
- className: chunkWQ4HD5UD_cjs.cn(className),
2921
+ className: chunkIGI4JJKE_cjs.cn(className),
2872
2922
  inputProps: {
2873
2923
  ...props,
2874
2924
  onBlur: handleBlur,
@@ -2882,33 +2932,33 @@ function FileInput({
2882
2932
  FileUploadDropzone,
2883
2933
  {
2884
2934
  role: "button",
2885
- "aria-label": placeholder,
2886
- className: chunkWQ4HD5UD_cjs.cn(
2887
- "flex min-h-32 w-full cursor-pointer items-center justify-center border-input bg-transparent p-6 transition-colors",
2888
- "hover:bg-accent/50",
2889
- "data-[dragging]:bg-accent/50",
2935
+ "aria-label": dynamicPlaceholder,
2936
+ className: chunkIGI4JJKE_cjs.cn(
2937
+ "flex min-h-32 w-full cursor-pointer",
2938
+ "items-center justify-center border-input",
2939
+ "bg-transparent p-6 transition-colors",
2940
+ "data-[dragging]:ring-2 hover:ring-2",
2890
2941
  disabled && "cursor-not-allowed opacity-50",
2891
2942
  error && "border-destructive"
2892
2943
  )
2893
2944
  },
2894
- /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex flex-col items-center gap-1 text-center" }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex items-center justify-center rounded-full border p-2.5" }, /* @__PURE__ */ React19__namespace.createElement(
2945
+ /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex flex-col items-center gap-3 text-center" }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex items-center justify-center rounded-full border p-2.5" }, /* @__PURE__ */ React19__namespace.createElement(
2895
2946
  "svg",
2896
2947
  {
2897
- width: "24",
2898
- height: "24",
2948
+ width: "18",
2949
+ height: "18",
2899
2950
  viewBox: "0 0 24 24",
2900
2951
  fill: "none",
2901
2952
  stroke: "currentColor",
2902
2953
  strokeWidth: "2",
2903
2954
  strokeLinecap: "round",
2904
2955
  strokeLinejoin: "round",
2905
- className: "text-muted-foreground",
2906
2956
  "aria-hidden": "true"
2907
2957
  },
2908
2958
  /* @__PURE__ */ React19__namespace.createElement("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
2909
2959
  /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "17 8 12 3 7 8" }),
2910
2960
  /* @__PURE__ */ React19__namespace.createElement("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
2911
- )), /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-sm font-medium" }, fileCountLabel), accept && /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-muted-foreground text-xs" }, "Accepted: ", accept), /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-muted-foreground text-xs" }, "Max size: ", formatFileSize(maxSize)))
2961
+ )), /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex flex-col items-center justify-center gap-1 text-center" }, /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-sm font-medium" }, dynamicPlaceholder), metadataElement))
2912
2962
  ),
2913
2963
  /* @__PURE__ */ React19__namespace.createElement(FileUploadList, { className: "mt-4" }, normalizedValue.map((file, index) => {
2914
2964
  const progressValue = uploadProgress[file.name];
@@ -2918,9 +2968,12 @@ function FileInput({
2918
2968
  {
2919
2969
  key: `${file.name}-${index}`,
2920
2970
  value: file,
2921
- className: "flex items-center gap-3 border-border bg-card text-card-foreground hover:bg-accent/50 transition-colors"
2971
+ className: chunkIGI4JJKE_cjs.cn(
2972
+ "flex items-center gap-3",
2973
+ "border-border bg-card text-card-foreground"
2974
+ )
2922
2975
  },
2923
- showPreview ? /* @__PURE__ */ React19__namespace.createElement(FileUploadItemPreview, { className: "h-12 w-12 rounded [&>img]:h-full [&>img]:w-full [&>img]:object-cover [&>svg]:size-6" }) : null,
2976
+ showPreview ? /* @__PURE__ */ React19__namespace.createElement(FileUploadItemPreview, { className: "size-12 rounded [&>img]:h-full [&>img]:w-full [&>img]:object-cover [&>svg]:size-6" }) : null,
2924
2977
  /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex min-w-0 flex-1 flex-col" }, /* @__PURE__ */ React19__namespace.createElement(FileUploadItemMetadata, { className: "min-w-0" }), hasProgress && progressValue < 100 ? /* @__PURE__ */ React19__namespace.createElement("div", { className: "mt-1 flex items-center gap-2" }, /* @__PURE__ */ React19__namespace.createElement(
2925
2978
  "div",
2926
2979
  {
@@ -2938,9 +2991,9 @@ function FileInput({
2938
2991
  style: { width: `${progressValue}%` }
2939
2992
  }
2940
2993
  )
2941
- ), /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs" }, progressValue, "%")) : null),
2994
+ ), /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs" }, progressValue, "%")) : /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs" }, formatFileSize(file.size))),
2942
2995
  enableCropping && file.type.startsWith("image/") ? /* @__PURE__ */ React19__namespace.createElement(
2943
- chunkWQ4HD5UD_cjs.Button,
2996
+ chunkIGI4JJKE_cjs.Button,
2944
2997
  {
2945
2998
  type: "button",
2946
2999
  variant: "ghost",
@@ -2950,7 +3003,7 @@ function FileInput({
2950
3003
  handleCrop(file);
2951
3004
  },
2952
3005
  disabled,
2953
- className: "h-8 w-8 p-0",
3006
+ className: "size-8 p-0",
2954
3007
  "aria-label": `Crop ${file.name}`
2955
3008
  },
2956
3009
  /* @__PURE__ */ React19__namespace.createElement(
@@ -2971,13 +3024,13 @@ function FileInput({
2971
3024
  )
2972
3025
  ) : null,
2973
3026
  /* @__PURE__ */ React19__namespace.createElement(FileUploadItemDelete, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
2974
- chunkWQ4HD5UD_cjs.Button,
3027
+ chunkIGI4JJKE_cjs.Button,
2975
3028
  {
2976
3029
  type: "button",
2977
- variant: "ghost",
2978
- size: "icon",
3030
+ variant: "outline",
3031
+ size: "icon-sm",
2979
3032
  disabled,
2980
- className: "h-8 w-8 p-0",
3033
+ className: "size-8 p-0",
2981
3034
  "aria-label": `Remove ${file.name}`
2982
3035
  },
2983
3036
  /* @__PURE__ */ React19__namespace.createElement(
@@ -3017,7 +3070,7 @@ function FileInput({
3017
3070
  "aria-describedby": void 0
3018
3071
  },
3019
3072
  /* @__PURE__ */ React19__namespace.createElement(DialogHeader, { className: "flex-row items-center justify-between border-b border-border px-4 py-3" }, /* @__PURE__ */ React19__namespace.createElement(DialogTitle, null, "Crop Image"), /* @__PURE__ */ React19__namespace.createElement(DialogClose, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
3020
- chunkWQ4HD5UD_cjs.Button,
3073
+ chunkIGI4JJKE_cjs.Button,
3021
3074
  {
3022
3075
  type: "button",
3023
3076
  variant: "ghost",
@@ -3045,7 +3098,7 @@ function FileInput({
3045
3098
  /* @__PURE__ */ React19__namespace.createElement("div", { className: "p-4" }, /* @__PURE__ */ React19__namespace.createElement(
3046
3099
  "div",
3047
3100
  {
3048
- className: "relative h-96 w-full overflow-hidden rounded-md bg-accent/40",
3101
+ className: "relative h-96 w-full overflow-hidden rounded-md",
3049
3102
  onMouseDown: (event) => {
3050
3103
  event.preventDefault();
3051
3104
  const startX = event.clientX - crop.x;
@@ -3129,19 +3182,19 @@ function FileInput({
3129
3182
  step: "0.1",
3130
3183
  value: zoom,
3131
3184
  onChange: (event) => onZoomChange(parseFloat(event.target.value)),
3132
- className: "h-2 flex-1 cursor-pointer appearance-none rounded-lg bg-accent/60",
3185
+ className: "h-2 flex-1 cursor-pointer appearance-none rounded-lg bg-primary",
3133
3186
  "aria-label": "Zoom level"
3134
3187
  }
3135
3188
  ))),
3136
3189
  /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex items-center justify-end gap-2 border-t border-border p-4" }, /* @__PURE__ */ React19__namespace.createElement(
3137
- chunkWQ4HD5UD_cjs.Button,
3190
+ chunkIGI4JJKE_cjs.Button,
3138
3191
  {
3139
3192
  type: "button",
3140
3193
  variant: "outline",
3141
3194
  onClick: handleCropCancel
3142
3195
  },
3143
3196
  "Cancel"
3144
- ), /* @__PURE__ */ React19__namespace.createElement(chunkWQ4HD5UD_cjs.Button, { type: "button", onClick: handleCropSave }, "Save"))
3197
+ ), /* @__PURE__ */ React19__namespace.createElement(chunkIGI4JJKE_cjs.Button, { type: "button", onClick: handleCropSave }, "Save"))
3145
3198
  ) : null
3146
3199
  ));
3147
3200
  }
@@ -3161,7 +3214,7 @@ function Calendar({
3161
3214
  reactDayPicker.DayPicker,
3162
3215
  {
3163
3216
  showOutsideDays,
3164
- className: chunkWQ4HD5UD_cjs.cn(
3217
+ className: chunkIGI4JJKE_cjs.cn(
3165
3218
  "bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
3166
3219
  String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
3167
3220
  String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
@@ -3173,86 +3226,86 @@ function Calendar({
3173
3226
  ...formatters
3174
3227
  },
3175
3228
  classNames: {
3176
- root: chunkWQ4HD5UD_cjs.cn("w-fit", defaultClassNames.root),
3177
- months: chunkWQ4HD5UD_cjs.cn(
3229
+ root: chunkIGI4JJKE_cjs.cn("w-fit", defaultClassNames.root),
3230
+ months: chunkIGI4JJKE_cjs.cn(
3178
3231
  "flex gap-4 flex-col md:flex-row relative",
3179
3232
  defaultClassNames.months
3180
3233
  ),
3181
- month: chunkWQ4HD5UD_cjs.cn("flex flex-col w-full gap-4", defaultClassNames.month),
3182
- nav: chunkWQ4HD5UD_cjs.cn(
3234
+ month: chunkIGI4JJKE_cjs.cn("flex flex-col w-full gap-4", defaultClassNames.month),
3235
+ nav: chunkIGI4JJKE_cjs.cn(
3183
3236
  "flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
3184
3237
  defaultClassNames.nav
3185
3238
  ),
3186
- button_previous: chunkWQ4HD5UD_cjs.cn(
3187
- chunkWQ4HD5UD_cjs.buttonVariants({ variant: buttonVariant }),
3239
+ button_previous: chunkIGI4JJKE_cjs.cn(
3240
+ chunkIGI4JJKE_cjs.buttonVariants({ variant: buttonVariant }),
3188
3241
  "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
3189
3242
  defaultClassNames.button_previous
3190
3243
  ),
3191
- button_next: chunkWQ4HD5UD_cjs.cn(
3192
- chunkWQ4HD5UD_cjs.buttonVariants({ variant: buttonVariant }),
3244
+ button_next: chunkIGI4JJKE_cjs.cn(
3245
+ chunkIGI4JJKE_cjs.buttonVariants({ variant: buttonVariant }),
3193
3246
  "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
3194
3247
  defaultClassNames.button_next
3195
3248
  ),
3196
- month_caption: chunkWQ4HD5UD_cjs.cn(
3249
+ month_caption: chunkIGI4JJKE_cjs.cn(
3197
3250
  "flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",
3198
3251
  defaultClassNames.month_caption
3199
3252
  ),
3200
- dropdowns: chunkWQ4HD5UD_cjs.cn(
3253
+ dropdowns: chunkIGI4JJKE_cjs.cn(
3201
3254
  "w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",
3202
3255
  defaultClassNames.dropdowns
3203
3256
  ),
3204
- dropdown_root: chunkWQ4HD5UD_cjs.cn(
3257
+ dropdown_root: chunkIGI4JJKE_cjs.cn(
3205
3258
  "relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
3206
3259
  defaultClassNames.dropdown_root
3207
3260
  ),
3208
- dropdown: chunkWQ4HD5UD_cjs.cn(
3261
+ dropdown: chunkIGI4JJKE_cjs.cn(
3209
3262
  "absolute bg-popover inset-0 opacity-0",
3210
3263
  defaultClassNames.dropdown
3211
3264
  ),
3212
- caption_label: chunkWQ4HD5UD_cjs.cn(
3265
+ caption_label: chunkIGI4JJKE_cjs.cn(
3213
3266
  "select-none font-medium",
3214
3267
  captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:opacity-70 [&>svg]:size-3.5",
3215
3268
  defaultClassNames.caption_label
3216
3269
  ),
3217
3270
  table: "w-full border-collapse",
3218
- weekdays: chunkWQ4HD5UD_cjs.cn("flex", defaultClassNames.weekdays),
3219
- weekday: chunkWQ4HD5UD_cjs.cn(
3271
+ weekdays: chunkIGI4JJKE_cjs.cn("flex", defaultClassNames.weekdays),
3272
+ weekday: chunkIGI4JJKE_cjs.cn(
3220
3273
  "opacity-70 rounded-md flex-1 font-normal text-[0.8rem] select-none",
3221
3274
  defaultClassNames.weekday
3222
3275
  ),
3223
- week: chunkWQ4HD5UD_cjs.cn("flex w-full mt-2", defaultClassNames.week),
3224
- week_number_header: chunkWQ4HD5UD_cjs.cn(
3276
+ week: chunkIGI4JJKE_cjs.cn("flex w-full mt-2", defaultClassNames.week),
3277
+ week_number_header: chunkIGI4JJKE_cjs.cn(
3225
3278
  "select-none w-(--cell-size)",
3226
3279
  defaultClassNames.week_number_header
3227
3280
  ),
3228
- week_number: chunkWQ4HD5UD_cjs.cn(
3281
+ week_number: chunkIGI4JJKE_cjs.cn(
3229
3282
  "text-[0.8rem] select-none opacity-70",
3230
3283
  defaultClassNames.week_number
3231
3284
  ),
3232
- day: chunkWQ4HD5UD_cjs.cn(
3285
+ day: chunkIGI4JJKE_cjs.cn(
3233
3286
  "relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
3234
3287
  props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "[&:first-child[data-selected=true]_button]:rounded-l-md",
3235
3288
  defaultClassNames.day
3236
3289
  ),
3237
- range_start: chunkWQ4HD5UD_cjs.cn(
3290
+ range_start: chunkIGI4JJKE_cjs.cn(
3238
3291
  "rounded-l-md bg-accent",
3239
3292
  defaultClassNames.range_start
3240
3293
  ),
3241
- range_middle: chunkWQ4HD5UD_cjs.cn("rounded-none", defaultClassNames.range_middle),
3242
- range_end: chunkWQ4HD5UD_cjs.cn("rounded-r-md bg-accent", defaultClassNames.range_end),
3243
- today: chunkWQ4HD5UD_cjs.cn(
3294
+ range_middle: chunkIGI4JJKE_cjs.cn("rounded-none", defaultClassNames.range_middle),
3295
+ range_end: chunkIGI4JJKE_cjs.cn("rounded-r-md bg-accent", defaultClassNames.range_end),
3296
+ today: chunkIGI4JJKE_cjs.cn(
3244
3297
  "bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
3245
3298
  defaultClassNames.today
3246
3299
  ),
3247
- outside: chunkWQ4HD5UD_cjs.cn(
3300
+ outside: chunkIGI4JJKE_cjs.cn(
3248
3301
  "opacity-50",
3249
3302
  defaultClassNames.outside
3250
3303
  ),
3251
- disabled: chunkWQ4HD5UD_cjs.cn(
3304
+ disabled: chunkIGI4JJKE_cjs.cn(
3252
3305
  "opacity-50",
3253
3306
  defaultClassNames.disabled
3254
3307
  ),
3255
- hidden: chunkWQ4HD5UD_cjs.cn("invisible", defaultClassNames.hidden),
3308
+ hidden: chunkIGI4JJKE_cjs.cn("invisible", defaultClassNames.hidden),
3256
3309
  ...classNames
3257
3310
  },
3258
3311
  components: {
@@ -3262,7 +3315,7 @@ function Calendar({
3262
3315
  {
3263
3316
  "data-slot": "calendar",
3264
3317
  ref: rootRef,
3265
- className: chunkWQ4HD5UD_cjs.cn(className2),
3318
+ className: chunkIGI4JJKE_cjs.cn(className2),
3266
3319
  ...props2
3267
3320
  }
3268
3321
  );
@@ -3272,7 +3325,7 @@ function Calendar({
3272
3325
  return /* @__PURE__ */ React19__namespace.createElement(
3273
3326
  "svg",
3274
3327
  {
3275
- className: chunkWQ4HD5UD_cjs.cn("size-4", className2),
3328
+ className: chunkIGI4JJKE_cjs.cn("size-4", className2),
3276
3329
  viewBox: "0 0 24 24",
3277
3330
  fill: "none",
3278
3331
  stroke: "currentColor",
@@ -3288,7 +3341,7 @@ function Calendar({
3288
3341
  return /* @__PURE__ */ React19__namespace.createElement(
3289
3342
  "svg",
3290
3343
  {
3291
- className: chunkWQ4HD5UD_cjs.cn("size-4", className2),
3344
+ className: chunkIGI4JJKE_cjs.cn("size-4", className2),
3292
3345
  viewBox: "0 0 24 24",
3293
3346
  fill: "none",
3294
3347
  stroke: "currentColor",
@@ -3303,7 +3356,7 @@ function Calendar({
3303
3356
  return /* @__PURE__ */ React19__namespace.createElement(
3304
3357
  "svg",
3305
3358
  {
3306
- className: chunkWQ4HD5UD_cjs.cn("size-4", className2),
3359
+ className: chunkIGI4JJKE_cjs.cn("size-4", className2),
3307
3360
  viewBox: "0 0 24 24",
3308
3361
  fill: "none",
3309
3362
  stroke: "currentColor",
@@ -3337,7 +3390,7 @@ function CalendarDayButton({
3337
3390
  if (modifiers.focused) ref.current?.focus();
3338
3391
  }, [modifiers.focused]);
3339
3392
  return /* @__PURE__ */ React19__namespace.createElement(
3340
- chunkWQ4HD5UD_cjs.Button,
3393
+ chunkIGI4JJKE_cjs.Button,
3341
3394
  {
3342
3395
  ref,
3343
3396
  variant: "ghost",
@@ -3347,7 +3400,7 @@ function CalendarDayButton({
3347
3400
  "data-range-start": modifiers.range_start,
3348
3401
  "data-range-end": modifiers.range_end,
3349
3402
  "data-range-middle": modifiers.range_middle,
3350
- className: chunkWQ4HD5UD_cjs.cn(
3403
+ className: chunkIGI4JJKE_cjs.cn(
3351
3404
  // Core structure
3352
3405
  "flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal",
3353
3406
  // Selected states - uses CSS variables
@@ -3371,8 +3424,6 @@ function CalendarDayButton({
3371
3424
  }
3372
3425
  );
3373
3426
  }
3374
-
3375
- // src/inputs/DatePicker.tsx
3376
3427
  function formatDate(date, format) {
3377
3428
  if (!date) return "";
3378
3429
  const d = new Date(date);
@@ -3392,7 +3443,7 @@ function DatePickerDayButton({
3392
3443
  "button",
3393
3444
  {
3394
3445
  type: "button",
3395
- className: chunkWQ4HD5UD_cjs.cn(
3446
+ className: chunkIGI4JJKE_cjs.cn(
3396
3447
  "flex items-center justify-center h-8 w-8 rounded-md border-none bg-transparent cursor-pointer text-sm transition-colors",
3397
3448
  "hover:bg-accent",
3398
3449
  modifiers.selected && "bg-primary text-primary-foreground font-semibold",
@@ -3414,7 +3465,7 @@ function DatePicker({
3414
3465
  required = false,
3415
3466
  error = false,
3416
3467
  className = "",
3417
- placeholder = "Select date...",
3468
+ placeholder = "Select date",
3418
3469
  format = "MM/dd/yyyy",
3419
3470
  minDate,
3420
3471
  maxDate,
@@ -3502,7 +3553,7 @@ function DatePicker({
3502
3553
  }, [hasInteracted]);
3503
3554
  const hasValue = Boolean(value);
3504
3555
  const displayValue = formatDate(value, format);
3505
- const combinedClassName = chunkWQ4HD5UD_cjs.cn("relative", className);
3556
+ const combinedClassName = chunkIGI4JJKE_cjs.cn("relative", className);
3506
3557
  return /* @__PURE__ */ React19__namespace.createElement("div", { className: combinedClassName }, /* @__PURE__ */ React19__namespace.createElement(
3507
3558
  "input",
3508
3559
  {
@@ -3513,23 +3564,20 @@ function DatePicker({
3513
3564
  ), /* @__PURE__ */ React19__namespace.createElement(Popover, { open: isOpen, onOpenChange: handleOpenChange }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "relative" }, showIcon && /* @__PURE__ */ React19__namespace.createElement(
3514
3565
  "span",
3515
3566
  {
3516
- className: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",
3567
+ className: chunkIGI4JJKE_cjs.cn(
3568
+ "absolute left-3 top-1/2 -translate-y-1/2",
3569
+ "pointer-events-none flex items-center justify-center",
3570
+ "pointer-events-none"
3571
+ ),
3517
3572
  "aria-hidden": "true"
3518
3573
  },
3519
3574
  /* @__PURE__ */ React19__namespace.createElement(
3520
- "svg",
3575
+ icon.Icon,
3521
3576
  {
3522
- xmlns: "http://www.w3.org/2000/svg",
3523
- width: "18",
3524
- height: "18",
3525
- viewBox: "0 0 24 24",
3526
- fill: "none",
3527
- stroke: "currentColor",
3528
- strokeLinecap: "round",
3529
- strokeLinejoin: "round",
3530
- strokeWidth: "2"
3531
- },
3532
- /* @__PURE__ */ React19__namespace.createElement("path", { d: "M8 2v4m8-4v4m5 8V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8M3 10h18m-5 10l2 2l4-4" })
3577
+ name: "material-symbols/edit-calendar-outline",
3578
+ apiKey: icon.DEFAULT_ICON_API_BASE_URL,
3579
+ size: 18
3580
+ }
3533
3581
  )
3534
3582
  ), /* @__PURE__ */ React19__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
3535
3583
  "input",
@@ -3537,15 +3585,19 @@ function DatePicker({
3537
3585
  ref: inputRef,
3538
3586
  id: props.id,
3539
3587
  type: "text",
3540
- className: chunkWQ4HD5UD_cjs.cn(
3541
- "flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-base shadow-sm transition-colors",
3542
- "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
3543
- "disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
3544
- chunkWQ4HD5UD_cjs.INPUT_AUTOFILL_RESET_CLASSES,
3588
+ className: chunkIGI4JJKE_cjs.cn(
3589
+ "flex h-9 w-full rounded-md border",
3590
+ "border-input bg-transparent py-1 text-base",
3591
+ "shadow-sm transition-colors",
3592
+ "focus-visible:outline-none focus-visible:ring-1",
3593
+ "focus-visible:ring-ring",
3594
+ "disabled:cursor-not-allowed",
3595
+ "disabled:opacity-50 md:text-sm",
3596
+ chunkIGI4JJKE_cjs.INPUT_AUTOFILL_RESET_CLASSES,
3545
3597
  showIcon ? "pl-10" : "pl-3",
3546
3598
  clearable && value ? "pr-10" : "pr-3",
3547
- !error && hasValue && "ring-2 ring-ring",
3548
- error && "border-destructive ring-1 ring-destructive"
3599
+ !error && hasValue && "ring-2 ring-primary",
3600
+ error && "ring-2 ring-destructive"
3549
3601
  ),
3550
3602
  value: displayValue,
3551
3603
  onClick: handleInputClick,
@@ -3682,7 +3734,7 @@ function TimePicker({
3682
3734
  };
3683
3735
  const hasValue = Boolean(value);
3684
3736
  const stepInSeconds = Math.max(1, minuteStep * 60);
3685
- return /* @__PURE__ */ React19__namespace.createElement("div", { className: chunkWQ4HD5UD_cjs.cn("relative", className) }, /* @__PURE__ */ React19__namespace.createElement("input", { type: "hidden", name, value }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "relative" }, showIcon && /* @__PURE__ */ React19__namespace.createElement(
3737
+ return /* @__PURE__ */ React19__namespace.createElement("div", { className: chunkIGI4JJKE_cjs.cn("relative", className) }, /* @__PURE__ */ React19__namespace.createElement("input", { type: "hidden", name, value }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "relative" }, showIcon && /* @__PURE__ */ React19__namespace.createElement(
3686
3738
  "span",
3687
3739
  {
3688
3740
  className: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",
@@ -3705,17 +3757,17 @@ function TimePicker({
3705
3757
  /* @__PURE__ */ React19__namespace.createElement("path", { d: "M12 6v6l4 2" })
3706
3758
  )
3707
3759
  ), /* @__PURE__ */ React19__namespace.createElement(
3708
- chunkWQ4HD5UD_cjs.Input,
3760
+ chunkIGI4JJKE_cjs.Input,
3709
3761
  {
3710
3762
  ref: inputRef,
3711
3763
  type: "time",
3712
- className: chunkWQ4HD5UD_cjs.cn(
3764
+ className: chunkIGI4JJKE_cjs.cn(
3713
3765
  "appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none",
3714
- chunkWQ4HD5UD_cjs.INPUT_AUTOFILL_RESET_CLASSES,
3766
+ chunkIGI4JJKE_cjs.INPUT_AUTOFILL_RESET_CLASSES,
3715
3767
  showIcon ? "pl-10" : "pl-3",
3716
3768
  clearable && value ? "pr-10" : "pr-3",
3717
- !error && hasValue && "ring-2 ring-ring",
3718
- error && "border-destructive ring-1 ring-destructive"
3769
+ !error && hasValue && "ring-2 ring-primary",
3770
+ error && "ring-2 ring-destructive"
3719
3771
  ),
3720
3772
  value: nativeValue,
3721
3773
  onChange: handleChange,
@@ -3730,7 +3782,7 @@ function TimePicker({
3730
3782
  ...props
3731
3783
  }
3732
3784
  ), clearable && value && !disabled && /* @__PURE__ */ React19__namespace.createElement(
3733
- chunkWQ4HD5UD_cjs.Button,
3785
+ chunkIGI4JJKE_cjs.Button,
3734
3786
  {
3735
3787
  type: "button",
3736
3788
  variant: "ghost",
@@ -3768,7 +3820,11 @@ function formatDate2(date, format) {
3768
3820
  return format.replace("MM", month).replace("dd", day).replace("yyyy", String(year)).replace("yy", String(year).slice(2));
3769
3821
  }
3770
3822
  function toDayTimestamp(date) {
3771
- return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
3823
+ return new Date(
3824
+ date.getFullYear(),
3825
+ date.getMonth(),
3826
+ date.getDate()
3827
+ ).getTime();
3772
3828
  }
3773
3829
  function isSameDay(date, target) {
3774
3830
  if (!target) return false;
@@ -3930,7 +3986,7 @@ function DateRangePicker({
3930
3986
  {
3931
3987
  type: "button",
3932
3988
  ...rest,
3933
- className: chunkWQ4HD5UD_cjs.cn(
3989
+ className: chunkIGI4JJKE_cjs.cn(
3934
3990
  "flex items-center justify-center h-8 w-8 rounded-md border-none bg-transparent cursor-pointer text-sm transition-colors",
3935
3991
  "hover:bg-accent",
3936
3992
  isRangeEndpoint && "bg-primary text-primary-foreground font-semibold",
@@ -3968,7 +4024,7 @@ function DateRangePicker({
3968
4024
  to: rangeEnd ?? void 0
3969
4025
  } : void 0;
3970
4026
  const displayValue = rangeStart && rangeEnd ? `${formatDate2(rangeStart, format)}${separator}${formatDate2(rangeEnd, format)}` : rangeStart ? formatDate2(rangeStart, format) : "";
3971
- const combinedClassName = chunkWQ4HD5UD_cjs.cn("relative", className);
4027
+ const combinedClassName = chunkIGI4JJKE_cjs.cn("relative", className);
3972
4028
  return /* @__PURE__ */ React19__namespace.createElement("div", { className: combinedClassName }, /* @__PURE__ */ React19__namespace.createElement(
3973
4029
  "input",
3974
4030
  {
@@ -4010,15 +4066,15 @@ function DateRangePicker({
4010
4066
  ref: inputRef,
4011
4067
  id: props.id,
4012
4068
  type: "text",
4013
- className: chunkWQ4HD5UD_cjs.cn(
4069
+ className: chunkIGI4JJKE_cjs.cn(
4014
4070
  "flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-base shadow-sm transition-colors",
4015
4071
  "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
4016
4072
  "disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
4017
- chunkWQ4HD5UD_cjs.INPUT_AUTOFILL_RESET_CLASSES,
4073
+ chunkIGI4JJKE_cjs.INPUT_AUTOFILL_RESET_CLASSES,
4018
4074
  showIcon ? "pl-10" : "pl-3",
4019
4075
  clearable && (rangeStart || rangeEnd) ? "pr-10" : "pr-3",
4020
- !error && hasValue && "ring-2 ring-ring",
4021
- error && "border-destructive ring-1 ring-destructive"
4076
+ !error && hasValue && "ring-2 ring-primary",
4077
+ error && "ring-2 ring-destructive"
4022
4078
  ),
4023
4079
  value: displayValue,
4024
4080
  onClick: handleInputClick,
@@ -4090,5 +4146,5 @@ exports.Select = Select2;
4090
4146
  exports.Switch = Switch2;
4091
4147
  exports.TextArea = TextArea;
4092
4148
  exports.TimePicker = TimePicker;
4093
- //# sourceMappingURL=chunk-4K6J2DOK.cjs.map
4094
- //# sourceMappingURL=chunk-4K6J2DOK.cjs.map
4149
+ //# sourceMappingURL=chunk-K7ZHLPLX.cjs.map
4150
+ //# sourceMappingURL=chunk-K7ZHLPLX.cjs.map