@sovereignfs/ui 0.37.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/BalanceChip.module.css +32 -0
  2. package/dist/FileDropzone.module.css +63 -0
  3. package/dist/MemberMultiSelect.module.css +27 -0
  4. package/dist/index.d.ts +151 -3
  5. package/dist/index.js +630 -370
  6. package/package.json +1 -1
  7. package/src/components/BalanceChip/BalanceChip.module.css +32 -0
  8. package/src/components/BalanceChip/BalanceChip.stories.tsx +45 -0
  9. package/src/components/BalanceChip/BalanceChip.tsx +33 -0
  10. package/src/components/CurrencyInput/CurrencyInput.stories.tsx +50 -0
  11. package/src/components/CurrencyInput/CurrencyInput.tsx +60 -0
  12. package/src/components/FileDropzone/FileDropzone.module.css +63 -0
  13. package/src/components/FileDropzone/FileDropzone.tsx +109 -0
  14. package/src/components/FileDropzone/__tests__/FileDropzone.test.tsx +67 -0
  15. package/src/components/Icon/icons/external-link.tsx +22 -0
  16. package/src/components/Icon/icons/file.tsx +21 -0
  17. package/src/components/Icon/icons/index.ts +12 -0
  18. package/src/components/Icon/icons/upload.tsx +22 -0
  19. package/src/components/MemberMultiSelect/MemberMultiSelect.module.css +27 -0
  20. package/src/components/MemberMultiSelect/MemberMultiSelect.stories.tsx +74 -0
  21. package/src/components/MemberMultiSelect/MemberMultiSelect.tsx +67 -0
  22. package/src/components/SplitMethodSelector/SplitMethodSelector.stories.tsx +33 -0
  23. package/src/components/SplitMethodSelector/SplitMethodSelector.tsx +43 -0
  24. package/src/hooks/index.ts +2 -0
  25. package/src/hooks/useCommitOnEnterOrBlur.ts +39 -0
  26. package/src/index.ts +24 -2
  27. package/src/stories/DesignSystemOverview.stories.tsx +119 -1
  28. package/src/stories/FileDropzone.stories.tsx +69 -0
  29. package/src/stories/InteractionHooks.stories.tsx +55 -1
package/dist/index.js CHANGED
@@ -667,9 +667,9 @@ function EllipsisVerticalIcon(props) {
667
667
  );
668
668
  }
669
669
 
670
- // src/components/Icon/icons/banana.tsx
670
+ // src/components/Icon/icons/file.tsx
671
671
  import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
672
- function BananaIcon(props) {
672
+ function FileIcon(props) {
673
673
  return /* @__PURE__ */ jsxs24(
674
674
  "svg",
675
675
  {
@@ -682,16 +682,16 @@ function BananaIcon(props) {
682
682
  strokeLinejoin: "round",
683
683
  ...props,
684
684
  children: [
685
- /* @__PURE__ */ jsx31("path", { d: "M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5" }),
686
- /* @__PURE__ */ jsx31("path", { d: "M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z" })
685
+ /* @__PURE__ */ jsx31("path", { d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }),
686
+ /* @__PURE__ */ jsx31("path", { d: "M14 2v5a1 1 0 0 0 1 1h5" })
687
687
  ]
688
688
  }
689
689
  );
690
690
  }
691
691
 
692
- // src/components/Icon/icons/apple.tsx
692
+ // src/components/Icon/icons/upload.tsx
693
693
  import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
694
- function AppleIcon(props) {
694
+ function UploadIcon(props) {
695
695
  return /* @__PURE__ */ jsxs25(
696
696
  "svg",
697
697
  {
@@ -704,16 +704,17 @@ function AppleIcon(props) {
704
704
  strokeLinejoin: "round",
705
705
  ...props,
706
706
  children: [
707
- /* @__PURE__ */ jsx32("path", { d: "M12 6.528V3a1 1 0 0 1 1-1h0" }),
708
- /* @__PURE__ */ jsx32("path", { d: "M18.237 21A15 15 0 0 0 22 11a6 6 0 0 0-10-4.472A6 6 0 0 0 2 11a15.1 15.1 0 0 0 3.763 10 3 3 0 0 0 3.648.648 5.5 5.5 0 0 1 5.178 0A3 3 0 0 0 18.237 21" })
707
+ /* @__PURE__ */ jsx32("path", { d: "M12 3v12" }),
708
+ /* @__PURE__ */ jsx32("path", { d: "m17 8-5-5-5 5" }),
709
+ /* @__PURE__ */ jsx32("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" })
709
710
  ]
710
711
  }
711
712
  );
712
713
  }
713
714
 
714
- // src/components/Icon/icons/carrot.tsx
715
+ // src/components/Icon/icons/external-link.tsx
715
716
  import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
716
- function CarrotIcon(props) {
717
+ function ExternalLinkIcon(props) {
717
718
  return /* @__PURE__ */ jsxs26(
718
719
  "svg",
719
720
  {
@@ -726,18 +727,85 @@ function CarrotIcon(props) {
726
727
  strokeLinejoin: "round",
727
728
  ...props,
728
729
  children: [
729
- /* @__PURE__ */ jsx33("path", { d: "M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46" }),
730
- /* @__PURE__ */ jsx33("path", { d: "M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z" }),
731
- /* @__PURE__ */ jsx33("path", { d: "M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z" })
730
+ /* @__PURE__ */ jsx33("path", { d: "M15 3h6v6" }),
731
+ /* @__PURE__ */ jsx33("path", { d: "M10 14 21 3" }),
732
+ /* @__PURE__ */ jsx33("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" })
733
+ ]
734
+ }
735
+ );
736
+ }
737
+
738
+ // src/components/Icon/icons/banana.tsx
739
+ import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
740
+ function BananaIcon(props) {
741
+ return /* @__PURE__ */ jsxs27(
742
+ "svg",
743
+ {
744
+ xmlns: "http://www.w3.org/2000/svg",
745
+ viewBox: "0 0 24 24",
746
+ fill: "none",
747
+ stroke: "currentColor",
748
+ strokeWidth: "2",
749
+ strokeLinecap: "round",
750
+ strokeLinejoin: "round",
751
+ ...props,
752
+ children: [
753
+ /* @__PURE__ */ jsx34("path", { d: "M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5" }),
754
+ /* @__PURE__ */ jsx34("path", { d: "M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z" })
755
+ ]
756
+ }
757
+ );
758
+ }
759
+
760
+ // src/components/Icon/icons/apple.tsx
761
+ import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
762
+ function AppleIcon(props) {
763
+ return /* @__PURE__ */ jsxs28(
764
+ "svg",
765
+ {
766
+ xmlns: "http://www.w3.org/2000/svg",
767
+ viewBox: "0 0 24 24",
768
+ fill: "none",
769
+ stroke: "currentColor",
770
+ strokeWidth: "2",
771
+ strokeLinecap: "round",
772
+ strokeLinejoin: "round",
773
+ ...props,
774
+ children: [
775
+ /* @__PURE__ */ jsx35("path", { d: "M12 6.528V3a1 1 0 0 1 1-1h0" }),
776
+ /* @__PURE__ */ jsx35("path", { d: "M18.237 21A15 15 0 0 0 22 11a6 6 0 0 0-10-4.472A6 6 0 0 0 2 11a15.1 15.1 0 0 0 3.763 10 3 3 0 0 0 3.648.648 5.5 5.5 0 0 1 5.178 0A3 3 0 0 0 18.237 21" })
777
+ ]
778
+ }
779
+ );
780
+ }
781
+
782
+ // src/components/Icon/icons/carrot.tsx
783
+ import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
784
+ function CarrotIcon(props) {
785
+ return /* @__PURE__ */ jsxs29(
786
+ "svg",
787
+ {
788
+ xmlns: "http://www.w3.org/2000/svg",
789
+ viewBox: "0 0 24 24",
790
+ fill: "none",
791
+ stroke: "currentColor",
792
+ strokeWidth: "2",
793
+ strokeLinecap: "round",
794
+ strokeLinejoin: "round",
795
+ ...props,
796
+ children: [
797
+ /* @__PURE__ */ jsx36("path", { d: "M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46" }),
798
+ /* @__PURE__ */ jsx36("path", { d: "M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z" }),
799
+ /* @__PURE__ */ jsx36("path", { d: "M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z" })
732
800
  ]
733
801
  }
734
802
  );
735
803
  }
736
804
 
737
805
  // src/components/Icon/icons/egg.tsx
738
- import { jsx as jsx34 } from "react/jsx-runtime";
806
+ import { jsx as jsx37 } from "react/jsx-runtime";
739
807
  function EggIcon(props) {
740
- return /* @__PURE__ */ jsx34(
808
+ return /* @__PURE__ */ jsx37(
741
809
  "svg",
742
810
  {
743
811
  xmlns: "http://www.w3.org/2000/svg",
@@ -748,15 +816,15 @@ function EggIcon(props) {
748
816
  strokeLinecap: "round",
749
817
  strokeLinejoin: "round",
750
818
  ...props,
751
- children: /* @__PURE__ */ jsx34("path", { d: "M12 2C8 2 4 8 4 14a8 8 0 0 0 16 0c0-6-4-12-8-12" })
819
+ children: /* @__PURE__ */ jsx37("path", { d: "M12 2C8 2 4 8 4 14a8 8 0 0 0 16 0c0-6-4-12-8-12" })
752
820
  }
753
821
  );
754
822
  }
755
823
 
756
824
  // src/components/Icon/icons/beef.tsx
757
- import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
825
+ import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
758
826
  function BeefIcon(props) {
759
- return /* @__PURE__ */ jsxs27(
827
+ return /* @__PURE__ */ jsxs30(
760
828
  "svg",
761
829
  {
762
830
  xmlns: "http://www.w3.org/2000/svg",
@@ -768,18 +836,18 @@ function BeefIcon(props) {
768
836
  strokeLinejoin: "round",
769
837
  ...props,
770
838
  children: [
771
- /* @__PURE__ */ jsx35("path", { d: "M16.4 13.7A6.5 6.5 0 1 0 6.28 6.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3" }),
772
- /* @__PURE__ */ jsx35("path", { d: "m18.5 6 2.19 4.5a6.48 6.48 0 0 1-2.29 7.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5" }),
773
- /* @__PURE__ */ jsx35("circle", { cx: "12.5", cy: "8.5", r: "2.5" })
839
+ /* @__PURE__ */ jsx38("path", { d: "M16.4 13.7A6.5 6.5 0 1 0 6.28 6.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3" }),
840
+ /* @__PURE__ */ jsx38("path", { d: "m18.5 6 2.19 4.5a6.48 6.48 0 0 1-2.29 7.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5" }),
841
+ /* @__PURE__ */ jsx38("circle", { cx: "12.5", cy: "8.5", r: "2.5" })
774
842
  ]
775
843
  }
776
844
  );
777
845
  }
778
846
 
779
847
  // src/components/Icon/icons/fish.tsx
780
- import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
848
+ import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
781
849
  function FishIcon(props) {
782
- return /* @__PURE__ */ jsxs28(
850
+ return /* @__PURE__ */ jsxs31(
783
851
  "svg",
784
852
  {
785
853
  xmlns: "http://www.w3.org/2000/svg",
@@ -791,21 +859,21 @@ function FishIcon(props) {
791
859
  strokeLinejoin: "round",
792
860
  ...props,
793
861
  children: [
794
- /* @__PURE__ */ jsx36("path", { d: "M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z" }),
795
- /* @__PURE__ */ jsx36("path", { d: "M18 12v.5" }),
796
- /* @__PURE__ */ jsx36("path", { d: "M16 17.93a9.77 9.77 0 0 1 0-11.86" }),
797
- /* @__PURE__ */ jsx36("path", { d: "M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33" }),
798
- /* @__PURE__ */ jsx36("path", { d: "M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4" }),
799
- /* @__PURE__ */ jsx36("path", { d: "m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98" })
862
+ /* @__PURE__ */ jsx39("path", { d: "M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z" }),
863
+ /* @__PURE__ */ jsx39("path", { d: "M18 12v.5" }),
864
+ /* @__PURE__ */ jsx39("path", { d: "M16 17.93a9.77 9.77 0 0 1 0-11.86" }),
865
+ /* @__PURE__ */ jsx39("path", { d: "M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33" }),
866
+ /* @__PURE__ */ jsx39("path", { d: "M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4" }),
867
+ /* @__PURE__ */ jsx39("path", { d: "m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98" })
800
868
  ]
801
869
  }
802
870
  );
803
871
  }
804
872
 
805
873
  // src/components/Icon/icons/coffee.tsx
806
- import { jsx as jsx37, jsxs as jsxs29 } from "react/jsx-runtime";
874
+ import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
807
875
  function CoffeeIcon(props) {
808
- return /* @__PURE__ */ jsxs29(
876
+ return /* @__PURE__ */ jsxs32(
809
877
  "svg",
810
878
  {
811
879
  xmlns: "http://www.w3.org/2000/svg",
@@ -817,19 +885,19 @@ function CoffeeIcon(props) {
817
885
  strokeLinejoin: "round",
818
886
  ...props,
819
887
  children: [
820
- /* @__PURE__ */ jsx37("path", { d: "M10 2v2" }),
821
- /* @__PURE__ */ jsx37("path", { d: "M14 2v2" }),
822
- /* @__PURE__ */ jsx37("path", { d: "M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1" }),
823
- /* @__PURE__ */ jsx37("path", { d: "M6 2v2" })
888
+ /* @__PURE__ */ jsx40("path", { d: "M10 2v2" }),
889
+ /* @__PURE__ */ jsx40("path", { d: "M14 2v2" }),
890
+ /* @__PURE__ */ jsx40("path", { d: "M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1" }),
891
+ /* @__PURE__ */ jsx40("path", { d: "M6 2v2" })
824
892
  ]
825
893
  }
826
894
  );
827
895
  }
828
896
 
829
897
  // src/components/Icon/icons/wine.tsx
830
- import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
898
+ import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
831
899
  function WineIcon(props) {
832
- return /* @__PURE__ */ jsxs30(
900
+ return /* @__PURE__ */ jsxs33(
833
901
  "svg",
834
902
  {
835
903
  xmlns: "http://www.w3.org/2000/svg",
@@ -841,19 +909,19 @@ function WineIcon(props) {
841
909
  strokeLinejoin: "round",
842
910
  ...props,
843
911
  children: [
844
- /* @__PURE__ */ jsx38("path", { d: "M8 22h8" }),
845
- /* @__PURE__ */ jsx38("path", { d: "M7 10h10" }),
846
- /* @__PURE__ */ jsx38("path", { d: "M12 15v7" }),
847
- /* @__PURE__ */ jsx38("path", { d: "M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z" })
912
+ /* @__PURE__ */ jsx41("path", { d: "M8 22h8" }),
913
+ /* @__PURE__ */ jsx41("path", { d: "M7 10h10" }),
914
+ /* @__PURE__ */ jsx41("path", { d: "M12 15v7" }),
915
+ /* @__PURE__ */ jsx41("path", { d: "M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z" })
848
916
  ]
849
917
  }
850
918
  );
851
919
  }
852
920
 
853
921
  // src/components/Icon/icons/beer.tsx
854
- import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
922
+ import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
855
923
  function BeerIcon(props) {
856
- return /* @__PURE__ */ jsxs31(
924
+ return /* @__PURE__ */ jsxs34(
857
925
  "svg",
858
926
  {
859
927
  xmlns: "http://www.w3.org/2000/svg",
@@ -865,20 +933,20 @@ function BeerIcon(props) {
865
933
  strokeLinejoin: "round",
866
934
  ...props,
867
935
  children: [
868
- /* @__PURE__ */ jsx39("path", { d: "M17 11h1a3 3 0 0 1 0 6h-1" }),
869
- /* @__PURE__ */ jsx39("path", { d: "M9 12v6" }),
870
- /* @__PURE__ */ jsx39("path", { d: "M13 12v6" }),
871
- /* @__PURE__ */ jsx39("path", { d: "M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z" }),
872
- /* @__PURE__ */ jsx39("path", { d: "M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8" })
936
+ /* @__PURE__ */ jsx42("path", { d: "M17 11h1a3 3 0 0 1 0 6h-1" }),
937
+ /* @__PURE__ */ jsx42("path", { d: "M9 12v6" }),
938
+ /* @__PURE__ */ jsx42("path", { d: "M13 12v6" }),
939
+ /* @__PURE__ */ jsx42("path", { d: "M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z" }),
940
+ /* @__PURE__ */ jsx42("path", { d: "M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8" })
873
941
  ]
874
942
  }
875
943
  );
876
944
  }
877
945
 
878
946
  // src/components/Icon/icons/cookie.tsx
879
- import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
947
+ import { jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
880
948
  function CookieIcon(props) {
881
- return /* @__PURE__ */ jsxs32(
949
+ return /* @__PURE__ */ jsxs35(
882
950
  "svg",
883
951
  {
884
952
  xmlns: "http://www.w3.org/2000/svg",
@@ -890,21 +958,21 @@ function CookieIcon(props) {
890
958
  strokeLinejoin: "round",
891
959
  ...props,
892
960
  children: [
893
- /* @__PURE__ */ jsx40("path", { d: "M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5" }),
894
- /* @__PURE__ */ jsx40("path", { d: "M8.5 8.5v.01" }),
895
- /* @__PURE__ */ jsx40("path", { d: "M16 15.5v.01" }),
896
- /* @__PURE__ */ jsx40("path", { d: "M12 12v.01" }),
897
- /* @__PURE__ */ jsx40("path", { d: "M11 17v.01" }),
898
- /* @__PURE__ */ jsx40("path", { d: "M7 14v.01" })
961
+ /* @__PURE__ */ jsx43("path", { d: "M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5" }),
962
+ /* @__PURE__ */ jsx43("path", { d: "M8.5 8.5v.01" }),
963
+ /* @__PURE__ */ jsx43("path", { d: "M16 15.5v.01" }),
964
+ /* @__PURE__ */ jsx43("path", { d: "M12 12v.01" }),
965
+ /* @__PURE__ */ jsx43("path", { d: "M11 17v.01" }),
966
+ /* @__PURE__ */ jsx43("path", { d: "M7 14v.01" })
899
967
  ]
900
968
  }
901
969
  );
902
970
  }
903
971
 
904
972
  // src/components/Icon/icons/pizza.tsx
905
- import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
973
+ import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
906
974
  function PizzaIcon(props) {
907
- return /* @__PURE__ */ jsxs33(
975
+ return /* @__PURE__ */ jsxs36(
908
976
  "svg",
909
977
  {
910
978
  xmlns: "http://www.w3.org/2000/svg",
@@ -916,20 +984,20 @@ function PizzaIcon(props) {
916
984
  strokeLinejoin: "round",
917
985
  ...props,
918
986
  children: [
919
- /* @__PURE__ */ jsx41("path", { d: "m12 14-1 1" }),
920
- /* @__PURE__ */ jsx41("path", { d: "m13.75 18.25-1.25 1.42" }),
921
- /* @__PURE__ */ jsx41("path", { d: "M17.775 5.654a15.68 15.68 0 0 0-12.121 12.12" }),
922
- /* @__PURE__ */ jsx41("path", { d: "M18.8 9.3a1 1 0 0 0 2.1 7.7" }),
923
- /* @__PURE__ */ jsx41("path", { d: "M21.964 20.732a1 1 0 0 1-1.232 1.232l-18-5a1 1 0 0 1-.695-1.232A19.68 19.68 0 0 1 15.732 2.037a1 1 0 0 1 1.232.695z" })
987
+ /* @__PURE__ */ jsx44("path", { d: "m12 14-1 1" }),
988
+ /* @__PURE__ */ jsx44("path", { d: "m13.75 18.25-1.25 1.42" }),
989
+ /* @__PURE__ */ jsx44("path", { d: "M17.775 5.654a15.68 15.68 0 0 0-12.121 12.12" }),
990
+ /* @__PURE__ */ jsx44("path", { d: "M18.8 9.3a1 1 0 0 0 2.1 7.7" }),
991
+ /* @__PURE__ */ jsx44("path", { d: "M21.964 20.732a1 1 0 0 1-1.232 1.232l-18-5a1 1 0 0 1-.695-1.232A19.68 19.68 0 0 1 15.732 2.037a1 1 0 0 1 1.232.695z" })
924
992
  ]
925
993
  }
926
994
  );
927
995
  }
928
996
 
929
997
  // src/components/Icon/icons/candy.tsx
930
- import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
998
+ import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
931
999
  function CandyIcon(props) {
932
- return /* @__PURE__ */ jsxs34(
1000
+ return /* @__PURE__ */ jsxs37(
933
1001
  "svg",
934
1002
  {
935
1003
  xmlns: "http://www.w3.org/2000/svg",
@@ -941,20 +1009,20 @@ function CandyIcon(props) {
941
1009
  strokeLinejoin: "round",
942
1010
  ...props,
943
1011
  children: [
944
- /* @__PURE__ */ jsx42("path", { d: "M10 7v10.9" }),
945
- /* @__PURE__ */ jsx42("path", { d: "M14 6.1V17" }),
946
- /* @__PURE__ */ jsx42("path", { d: "M16 7V3a1 1 0 0 1 1.707-.707 2.5 2.5 0 0 0 2.152.717 1 1 0 0 1 1.131 1.131 2.5 2.5 0 0 0 .717 2.152A1 1 0 0 1 21 8h-4" }),
947
- /* @__PURE__ */ jsx42("path", { d: "M16.536 7.465a5 5 0 0 0-7.072 0l-2 2a5 5 0 0 0 0 7.07 5 5 0 0 0 7.072 0l2-2a5 5 0 0 0 0-7.07" }),
948
- /* @__PURE__ */ jsx42("path", { d: "M8 17v4a1 1 0 0 1-1.707.707 2.5 2.5 0 0 0-2.152-.717 1 1 0 0 1-1.131-1.131 2.5 2.5 0 0 0-.717-2.152A1 1 0 0 1 3 16h4" })
1012
+ /* @__PURE__ */ jsx45("path", { d: "M10 7v10.9" }),
1013
+ /* @__PURE__ */ jsx45("path", { d: "M14 6.1V17" }),
1014
+ /* @__PURE__ */ jsx45("path", { d: "M16 7V3a1 1 0 0 1 1.707-.707 2.5 2.5 0 0 0 2.152.717 1 1 0 0 1 1.131 1.131 2.5 2.5 0 0 0 .717 2.152A1 1 0 0 1 21 8h-4" }),
1015
+ /* @__PURE__ */ jsx45("path", { d: "M16.536 7.465a5 5 0 0 0-7.072 0l-2 2a5 5 0 0 0 0 7.07 5 5 0 0 0 7.072 0l2-2a5 5 0 0 0 0-7.07" }),
1016
+ /* @__PURE__ */ jsx45("path", { d: "M8 17v4a1 1 0 0 1-1.707.707 2.5 2.5 0 0 0-2.152-.717 1 1 0 0 1-1.131-1.131 2.5 2.5 0 0 0-.717-2.152A1 1 0 0 1 3 16h4" })
949
1017
  ]
950
1018
  }
951
1019
  );
952
1020
  }
953
1021
 
954
1022
  // src/components/Icon/icons/salad.tsx
955
- import { jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
1023
+ import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
956
1024
  function SaladIcon(props) {
957
- return /* @__PURE__ */ jsxs35(
1025
+ return /* @__PURE__ */ jsxs38(
958
1026
  "svg",
959
1027
  {
960
1028
  xmlns: "http://www.w3.org/2000/svg",
@@ -966,20 +1034,20 @@ function SaladIcon(props) {
966
1034
  strokeLinejoin: "round",
967
1035
  ...props,
968
1036
  children: [
969
- /* @__PURE__ */ jsx43("path", { d: "M7 21h10" }),
970
- /* @__PURE__ */ jsx43("path", { d: "M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z" }),
971
- /* @__PURE__ */ jsx43("path", { d: "M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1" }),
972
- /* @__PURE__ */ jsx43("path", { d: "m13 12 4-4" }),
973
- /* @__PURE__ */ jsx43("path", { d: "M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2" })
1037
+ /* @__PURE__ */ jsx46("path", { d: "M7 21h10" }),
1038
+ /* @__PURE__ */ jsx46("path", { d: "M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z" }),
1039
+ /* @__PURE__ */ jsx46("path", { d: "M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1" }),
1040
+ /* @__PURE__ */ jsx46("path", { d: "m13 12 4-4" }),
1041
+ /* @__PURE__ */ jsx46("path", { d: "M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2" })
974
1042
  ]
975
1043
  }
976
1044
  );
977
1045
  }
978
1046
 
979
1047
  // src/components/Icon/icons/milk.tsx
980
- import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
1048
+ import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
981
1049
  function MilkIcon(props) {
982
- return /* @__PURE__ */ jsxs36(
1050
+ return /* @__PURE__ */ jsxs39(
983
1051
  "svg",
984
1052
  {
985
1053
  xmlns: "http://www.w3.org/2000/svg",
@@ -991,18 +1059,18 @@ function MilkIcon(props) {
991
1059
  strokeLinejoin: "round",
992
1060
  ...props,
993
1061
  children: [
994
- /* @__PURE__ */ jsx44("path", { d: "M8 2h8" }),
995
- /* @__PURE__ */ jsx44("path", { d: "M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2" }),
996
- /* @__PURE__ */ jsx44("path", { d: "M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0" })
1062
+ /* @__PURE__ */ jsx47("path", { d: "M8 2h8" }),
1063
+ /* @__PURE__ */ jsx47("path", { d: "M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2" }),
1064
+ /* @__PURE__ */ jsx47("path", { d: "M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0" })
997
1065
  ]
998
1066
  }
999
1067
  );
1000
1068
  }
1001
1069
 
1002
1070
  // src/components/Icon/icons/drumstick.tsx
1003
- import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
1071
+ import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
1004
1072
  function DrumstickIcon(props) {
1005
- return /* @__PURE__ */ jsxs37(
1073
+ return /* @__PURE__ */ jsxs40(
1006
1074
  "svg",
1007
1075
  {
1008
1076
  xmlns: "http://www.w3.org/2000/svg",
@@ -1014,17 +1082,17 @@ function DrumstickIcon(props) {
1014
1082
  strokeLinejoin: "round",
1015
1083
  ...props,
1016
1084
  children: [
1017
- /* @__PURE__ */ jsx45("path", { d: "M15.4 15.63a7.875 6 135 1 1 6.23-6.23 4.5 3.43 135 0 0-6.23 6.23" }),
1018
- /* @__PURE__ */ jsx45("path", { d: "m8.29 12.71-2.6 2.6a2.5 2.5 0 1 0-1.65 4.65A2.5 2.5 0 1 0 8.7 18.3l2.59-2.59" })
1085
+ /* @__PURE__ */ jsx48("path", { d: "M15.4 15.63a7.875 6 135 1 1 6.23-6.23 4.5 3.43 135 0 0-6.23 6.23" }),
1086
+ /* @__PURE__ */ jsx48("path", { d: "m8.29 12.71-2.6 2.6a2.5 2.5 0 1 0-1.65 4.65A2.5 2.5 0 1 0 8.7 18.3l2.59-2.59" })
1019
1087
  ]
1020
1088
  }
1021
1089
  );
1022
1090
  }
1023
1091
 
1024
1092
  // src/components/Icon/icons/croissant.tsx
1025
- import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
1093
+ import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
1026
1094
  function CroissantIcon(props) {
1027
- return /* @__PURE__ */ jsxs38(
1095
+ return /* @__PURE__ */ jsxs41(
1028
1096
  "svg",
1029
1097
  {
1030
1098
  xmlns: "http://www.w3.org/2000/svg",
@@ -1036,20 +1104,20 @@ function CroissantIcon(props) {
1036
1104
  strokeLinejoin: "round",
1037
1105
  ...props,
1038
1106
  children: [
1039
- /* @__PURE__ */ jsx46("path", { d: "M10.2 18H4.774a1.5 1.5 0 0 1-1.352-.97 11 11 0 0 1 .132-6.487" }),
1040
- /* @__PURE__ */ jsx46("path", { d: "M18 10.2V4.774a1.5 1.5 0 0 0-.97-1.352 11 11 0 0 0-6.486.132" }),
1041
- /* @__PURE__ */ jsx46("path", { d: "M18 5a4 3 0 0 1 4 3 2 2 0 0 1-2 2 10 10 0 0 0-5.139 1.42" }),
1042
- /* @__PURE__ */ jsx46("path", { d: "M5 18a3 4 0 0 0 3 4 2 2 0 0 0 2-2 10 10 0 0 1 1.42-5.14" }),
1043
- /* @__PURE__ */ jsx46("path", { d: "M8.709 2.554a10 10 0 0 0-6.155 6.155 1.5 1.5 0 0 0 .676 1.626l9.807 5.42a2 2 0 0 0 2.718-2.718l-5.42-9.807a1.5 1.5 0 0 0-1.626-.676" })
1107
+ /* @__PURE__ */ jsx49("path", { d: "M10.2 18H4.774a1.5 1.5 0 0 1-1.352-.97 11 11 0 0 1 .132-6.487" }),
1108
+ /* @__PURE__ */ jsx49("path", { d: "M18 10.2V4.774a1.5 1.5 0 0 0-.97-1.352 11 11 0 0 0-6.486.132" }),
1109
+ /* @__PURE__ */ jsx49("path", { d: "M18 5a4 3 0 0 1 4 3 2 2 0 0 1-2 2 10 10 0 0 0-5.139 1.42" }),
1110
+ /* @__PURE__ */ jsx49("path", { d: "M5 18a3 4 0 0 0 3 4 2 2 0 0 0 2-2 10 10 0 0 1 1.42-5.14" }),
1111
+ /* @__PURE__ */ jsx49("path", { d: "M8.709 2.554a10 10 0 0 0-6.155 6.155 1.5 1.5 0 0 0 .676 1.626l9.807 5.42a2 2 0 0 0 2.718-2.718l-5.42-9.807a1.5 1.5 0 0 0-1.626-.676" })
1044
1112
  ]
1045
1113
  }
1046
1114
  );
1047
1115
  }
1048
1116
 
1049
1117
  // src/components/Icon/icons/cup-soda.tsx
1050
- import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
1118
+ import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
1051
1119
  function CupSodaIcon(props) {
1052
- return /* @__PURE__ */ jsxs39(
1120
+ return /* @__PURE__ */ jsxs42(
1053
1121
  "svg",
1054
1122
  {
1055
1123
  xmlns: "http://www.w3.org/2000/svg",
@@ -1061,19 +1129,19 @@ function CupSodaIcon(props) {
1061
1129
  strokeLinejoin: "round",
1062
1130
  ...props,
1063
1131
  children: [
1064
- /* @__PURE__ */ jsx47("path", { d: "m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8" }),
1065
- /* @__PURE__ */ jsx47("path", { d: "M5 8h14" }),
1066
- /* @__PURE__ */ jsx47("path", { d: "M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0" }),
1067
- /* @__PURE__ */ jsx47("path", { d: "m12 8 1-6h2" })
1132
+ /* @__PURE__ */ jsx50("path", { d: "m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8" }),
1133
+ /* @__PURE__ */ jsx50("path", { d: "M5 8h14" }),
1134
+ /* @__PURE__ */ jsx50("path", { d: "M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0" }),
1135
+ /* @__PURE__ */ jsx50("path", { d: "m12 8 1-6h2" })
1068
1136
  ]
1069
1137
  }
1070
1138
  );
1071
1139
  }
1072
1140
 
1073
1141
  // src/components/Icon/icons/spray-can.tsx
1074
- import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
1142
+ import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
1075
1143
  function SprayCanIcon(props) {
1076
- return /* @__PURE__ */ jsxs40(
1144
+ return /* @__PURE__ */ jsxs43(
1077
1145
  "svg",
1078
1146
  {
1079
1147
  xmlns: "http://www.w3.org/2000/svg",
@@ -1085,25 +1153,25 @@ function SprayCanIcon(props) {
1085
1153
  strokeLinejoin: "round",
1086
1154
  ...props,
1087
1155
  children: [
1088
- /* @__PURE__ */ jsx48("path", { d: "M3 3h.01" }),
1089
- /* @__PURE__ */ jsx48("path", { d: "M7 5h.01" }),
1090
- /* @__PURE__ */ jsx48("path", { d: "M11 7h.01" }),
1091
- /* @__PURE__ */ jsx48("path", { d: "M3 7h.01" }),
1092
- /* @__PURE__ */ jsx48("path", { d: "M7 9h.01" }),
1093
- /* @__PURE__ */ jsx48("path", { d: "M3 11h.01" }),
1094
- /* @__PURE__ */ jsx48("rect", { width: "4", height: "4", x: "15", y: "5" }),
1095
- /* @__PURE__ */ jsx48("path", { d: "m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2" }),
1096
- /* @__PURE__ */ jsx48("path", { d: "m13 14 8-2" }),
1097
- /* @__PURE__ */ jsx48("path", { d: "m13 19 8-2" })
1156
+ /* @__PURE__ */ jsx51("path", { d: "M3 3h.01" }),
1157
+ /* @__PURE__ */ jsx51("path", { d: "M7 5h.01" }),
1158
+ /* @__PURE__ */ jsx51("path", { d: "M11 7h.01" }),
1159
+ /* @__PURE__ */ jsx51("path", { d: "M3 7h.01" }),
1160
+ /* @__PURE__ */ jsx51("path", { d: "M7 9h.01" }),
1161
+ /* @__PURE__ */ jsx51("path", { d: "M3 11h.01" }),
1162
+ /* @__PURE__ */ jsx51("rect", { width: "4", height: "4", x: "15", y: "5" }),
1163
+ /* @__PURE__ */ jsx51("path", { d: "m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2" }),
1164
+ /* @__PURE__ */ jsx51("path", { d: "m13 14 8-2" }),
1165
+ /* @__PURE__ */ jsx51("path", { d: "m13 19 8-2" })
1098
1166
  ]
1099
1167
  }
1100
1168
  );
1101
1169
  }
1102
1170
 
1103
1171
  // src/components/Icon/icons/snowflake.tsx
1104
- import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
1172
+ import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
1105
1173
  function SnowflakeIcon(props) {
1106
- return /* @__PURE__ */ jsxs41(
1174
+ return /* @__PURE__ */ jsxs44(
1107
1175
  "svg",
1108
1176
  {
1109
1177
  xmlns: "http://www.w3.org/2000/svg",
@@ -1115,27 +1183,27 @@ function SnowflakeIcon(props) {
1115
1183
  strokeLinejoin: "round",
1116
1184
  ...props,
1117
1185
  children: [
1118
- /* @__PURE__ */ jsx49("path", { d: "m10 20-1.25-2.5L6 18" }),
1119
- /* @__PURE__ */ jsx49("path", { d: "M10 4 8.75 6.5 6 6" }),
1120
- /* @__PURE__ */ jsx49("path", { d: "m14 20 1.25-2.5L18 18" }),
1121
- /* @__PURE__ */ jsx49("path", { d: "m14 4 1.25 2.5L18 6" }),
1122
- /* @__PURE__ */ jsx49("path", { d: "m17 21-3-6h-4" }),
1123
- /* @__PURE__ */ jsx49("path", { d: "m17 3-3 6 1.5 3" }),
1124
- /* @__PURE__ */ jsx49("path", { d: "M2 12h6.5L10 9" }),
1125
- /* @__PURE__ */ jsx49("path", { d: "m20 10-1.5 2 1.5 2" }),
1126
- /* @__PURE__ */ jsx49("path", { d: "M22 12h-6.5L14 15" }),
1127
- /* @__PURE__ */ jsx49("path", { d: "m4 10 1.5 2L4 14" }),
1128
- /* @__PURE__ */ jsx49("path", { d: "m7 21 3-6-1.5-3" }),
1129
- /* @__PURE__ */ jsx49("path", { d: "m7 3 3 6h4" })
1186
+ /* @__PURE__ */ jsx52("path", { d: "m10 20-1.25-2.5L6 18" }),
1187
+ /* @__PURE__ */ jsx52("path", { d: "M10 4 8.75 6.5 6 6" }),
1188
+ /* @__PURE__ */ jsx52("path", { d: "m14 20 1.25-2.5L18 18" }),
1189
+ /* @__PURE__ */ jsx52("path", { d: "m14 4 1.25 2.5L18 6" }),
1190
+ /* @__PURE__ */ jsx52("path", { d: "m17 21-3-6h-4" }),
1191
+ /* @__PURE__ */ jsx52("path", { d: "m17 3-3 6 1.5 3" }),
1192
+ /* @__PURE__ */ jsx52("path", { d: "M2 12h6.5L10 9" }),
1193
+ /* @__PURE__ */ jsx52("path", { d: "m20 10-1.5 2 1.5 2" }),
1194
+ /* @__PURE__ */ jsx52("path", { d: "M22 12h-6.5L14 15" }),
1195
+ /* @__PURE__ */ jsx52("path", { d: "m4 10 1.5 2L4 14" }),
1196
+ /* @__PURE__ */ jsx52("path", { d: "m7 21 3-6-1.5-3" }),
1197
+ /* @__PURE__ */ jsx52("path", { d: "m7 3 3 6h4" })
1130
1198
  ]
1131
1199
  }
1132
1200
  );
1133
1201
  }
1134
1202
 
1135
1203
  // src/components/Icon/icons/shopping-basket.tsx
1136
- import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
1204
+ import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
1137
1205
  function ShoppingBasketIcon(props) {
1138
- return /* @__PURE__ */ jsxs42(
1206
+ return /* @__PURE__ */ jsxs45(
1139
1207
  "svg",
1140
1208
  {
1141
1209
  xmlns: "http://www.w3.org/2000/svg",
@@ -1147,13 +1215,13 @@ function ShoppingBasketIcon(props) {
1147
1215
  strokeLinejoin: "round",
1148
1216
  ...props,
1149
1217
  children: [
1150
- /* @__PURE__ */ jsx50("path", { d: "m15 11-1 9" }),
1151
- /* @__PURE__ */ jsx50("path", { d: "m19 11-4-7" }),
1152
- /* @__PURE__ */ jsx50("path", { d: "M2 11h20" }),
1153
- /* @__PURE__ */ jsx50("path", { d: "m3.5 11 1.6 7.4a2 2 0 0 0 2 1.6h9.8a2 2 0 0 0 2-1.6l1.7-7.4" }),
1154
- /* @__PURE__ */ jsx50("path", { d: "M4.5 15.5h15" }),
1155
- /* @__PURE__ */ jsx50("path", { d: "m5 11 4-7" }),
1156
- /* @__PURE__ */ jsx50("path", { d: "m9 11 1 9" })
1218
+ /* @__PURE__ */ jsx53("path", { d: "m15 11-1 9" }),
1219
+ /* @__PURE__ */ jsx53("path", { d: "m19 11-4-7" }),
1220
+ /* @__PURE__ */ jsx53("path", { d: "M2 11h20" }),
1221
+ /* @__PURE__ */ jsx53("path", { d: "m3.5 11 1.6 7.4a2 2 0 0 0 2 1.6h9.8a2 2 0 0 0 2-1.6l1.7-7.4" }),
1222
+ /* @__PURE__ */ jsx53("path", { d: "M4.5 15.5h15" }),
1223
+ /* @__PURE__ */ jsx53("path", { d: "m5 11 4-7" }),
1224
+ /* @__PURE__ */ jsx53("path", { d: "m9 11 1 9" })
1157
1225
  ]
1158
1226
  }
1159
1227
  );
@@ -1190,6 +1258,9 @@ var ICONS = {
1190
1258
  calendar: CalendarIcon,
1191
1259
  "sliders-horizontal": SlidersHorizontalIcon,
1192
1260
  "ellipsis-vertical": EllipsisVerticalIcon,
1261
+ file: FileIcon,
1262
+ upload: UploadIcon,
1263
+ "external-link": ExternalLinkIcon,
1193
1264
  banana: BananaIcon,
1194
1265
  apple: AppleIcon,
1195
1266
  carrot: CarrotIcon,
@@ -1214,7 +1285,7 @@ var ICONS = {
1214
1285
 
1215
1286
  // src/components/Icon/Icon.tsx
1216
1287
  import styles2 from "./Icon.module.css";
1217
- import { jsx as jsx51 } from "react/jsx-runtime";
1288
+ import { jsx as jsx54 } from "react/jsx-runtime";
1218
1289
  function Icon({
1219
1290
  name,
1220
1291
  size = "md",
@@ -1223,14 +1294,14 @@ function Icon({
1223
1294
  }) {
1224
1295
  const Svg = ICONS[name];
1225
1296
  const classes = [styles2.root, styles2[size], className].filter(Boolean).join(" ");
1226
- return /* @__PURE__ */ jsx51(Svg, { className: classes, role: aria["aria-label"] ? "img" : void 0, ...aria });
1297
+ return /* @__PURE__ */ jsx54(Svg, { className: classes, role: aria["aria-label"] ? "img" : void 0, ...aria });
1227
1298
  }
1228
1299
 
1229
1300
  // src/components/Toggle/Toggle.tsx
1230
1301
  import styles3 from "./Toggle.module.css";
1231
- import { jsx as jsx52 } from "react/jsx-runtime";
1302
+ import { jsx as jsx55 } from "react/jsx-runtime";
1232
1303
  function Toggle({ checked, onChange, disabled, className, ...rest }) {
1233
- return /* @__PURE__ */ jsx52(
1304
+ return /* @__PURE__ */ jsx55(
1234
1305
  "button",
1235
1306
  {
1236
1307
  type: "button",
@@ -1240,14 +1311,14 @@ function Toggle({ checked, onChange, disabled, className, ...rest }) {
1240
1311
  className: [styles3.track, checked ? styles3.on : styles3.off, className].filter(Boolean).join(" "),
1241
1312
  onClick: () => onChange(!checked),
1242
1313
  ...rest,
1243
- children: /* @__PURE__ */ jsx52("span", { className: styles3.thumb })
1314
+ children: /* @__PURE__ */ jsx55("span", { className: styles3.thumb })
1244
1315
  }
1245
1316
  );
1246
1317
  }
1247
1318
 
1248
1319
  // src/components/SegmentedControl/SegmentedControl.tsx
1249
1320
  import styles4 from "./SegmentedControl.module.css";
1250
- import { jsx as jsx53 } from "react/jsx-runtime";
1321
+ import { jsx as jsx56 } from "react/jsx-runtime";
1251
1322
  function SegmentedControl({
1252
1323
  value,
1253
1324
  onChange,
@@ -1255,7 +1326,7 @@ function SegmentedControl({
1255
1326
  size = "md",
1256
1327
  "aria-label": ariaLabel
1257
1328
  }) {
1258
- return /* @__PURE__ */ jsx53(
1329
+ return /* @__PURE__ */ jsx56(
1259
1330
  "div",
1260
1331
  {
1261
1332
  role: "radiogroup",
@@ -1263,7 +1334,7 @@ function SegmentedControl({
1263
1334
  className: [styles4.track, styles4[size]].join(" "),
1264
1335
  children: options.map((opt) => {
1265
1336
  const active = opt.value === value;
1266
- return /* @__PURE__ */ jsx53(
1337
+ return /* @__PURE__ */ jsx56(
1267
1338
  "button",
1268
1339
  {
1269
1340
  type: "button",
@@ -1282,11 +1353,11 @@ function SegmentedControl({
1282
1353
 
1283
1354
  // src/components/Tabs/Tabs.tsx
1284
1355
  import styles5 from "./Tabs.module.css";
1285
- import { jsx as jsx54 } from "react/jsx-runtime";
1356
+ import { jsx as jsx57 } from "react/jsx-runtime";
1286
1357
  function Tabs({ items, value, onChange, "aria-label": ariaLabel }) {
1287
- return /* @__PURE__ */ jsx54("div", { role: "tablist", "aria-label": ariaLabel, className: styles5.tablist, children: items.map((item) => {
1358
+ return /* @__PURE__ */ jsx57("div", { role: "tablist", "aria-label": ariaLabel, className: styles5.tablist, children: items.map((item) => {
1288
1359
  const active = item.value === value;
1289
- return /* @__PURE__ */ jsx54(
1360
+ return /* @__PURE__ */ jsx57(
1290
1361
  "button",
1291
1362
  {
1292
1363
  type: "button",
@@ -1303,15 +1374,15 @@ function Tabs({ items, value, onChange, "aria-label": ariaLabel }) {
1303
1374
 
1304
1375
  // src/components/Select/Select.tsx
1305
1376
  import styles6 from "./Select.module.css";
1306
- import { jsx as jsx55, jsxs as jsxs43 } from "react/jsx-runtime";
1377
+ import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
1307
1378
  function Select({ className, size = "md", children, ...rest }) {
1308
- return /* @__PURE__ */ jsxs43(
1379
+ return /* @__PURE__ */ jsxs46(
1309
1380
  "div",
1310
1381
  {
1311
1382
  className: [styles6.wrapper, size === "sm" ? styles6.sm : void 0, className].filter(Boolean).join(" "),
1312
1383
  children: [
1313
- /* @__PURE__ */ jsx55("select", { className: styles6.select, ...rest, children }),
1314
- /* @__PURE__ */ jsx55(
1384
+ /* @__PURE__ */ jsx58("select", { className: styles6.select, ...rest, children }),
1385
+ /* @__PURE__ */ jsx58(
1315
1386
  "svg",
1316
1387
  {
1317
1388
  className: styles6.chevron,
@@ -1324,7 +1395,7 @@ function Select({ className, size = "md", children, ...rest }) {
1324
1395
  strokeWidth: "2",
1325
1396
  strokeLinecap: "round",
1326
1397
  strokeLinejoin: "round",
1327
- children: /* @__PURE__ */ jsx55("polyline", { points: "6 9 12 15 18 9" })
1398
+ children: /* @__PURE__ */ jsx58("polyline", { points: "6 9 12 15 18 9" })
1328
1399
  }
1329
1400
  )
1330
1401
  ]
@@ -1334,18 +1405,18 @@ function Select({ className, size = "md", children, ...rest }) {
1334
1405
 
1335
1406
  // src/components/SystemBanner/SystemBanner.tsx
1336
1407
  import styles7 from "./SystemBanner.module.css";
1337
- import { jsx as jsx56, jsxs as jsxs44 } from "react/jsx-runtime";
1408
+ import { jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
1338
1409
  function SystemBanner({ variant = "info", onDismiss, children }) {
1339
- return /* @__PURE__ */ jsxs44("div", { role: "status", "aria-live": "polite", className: [styles7.banner, styles7[variant]].join(" "), children: [
1340
- /* @__PURE__ */ jsx56("span", { className: styles7.content, children }),
1341
- onDismiss && /* @__PURE__ */ jsx56(
1410
+ return /* @__PURE__ */ jsxs47("div", { role: "status", "aria-live": "polite", className: [styles7.banner, styles7[variant]].join(" "), children: [
1411
+ /* @__PURE__ */ jsx59("span", { className: styles7.content, children }),
1412
+ onDismiss && /* @__PURE__ */ jsx59(
1342
1413
  "button",
1343
1414
  {
1344
1415
  type: "button",
1345
1416
  className: styles7.dismiss,
1346
1417
  onClick: onDismiss,
1347
1418
  "aria-label": "Dismiss banner",
1348
- children: /* @__PURE__ */ jsx56(
1419
+ children: /* @__PURE__ */ jsx59(
1349
1420
  "svg",
1350
1421
  {
1351
1422
  width: "14",
@@ -1354,7 +1425,7 @@ function SystemBanner({ variant = "info", onDismiss, children }) {
1354
1425
  fill: "none",
1355
1426
  xmlns: "http://www.w3.org/2000/svg",
1356
1427
  "aria-hidden": true,
1357
- children: /* @__PURE__ */ jsx56(
1428
+ children: /* @__PURE__ */ jsx59(
1358
1429
  "path",
1359
1430
  {
1360
1431
  d: "M1 1L13 13M13 1L1 13",
@@ -1378,7 +1449,7 @@ import {
1378
1449
  useState
1379
1450
  } from "react";
1380
1451
  import styles8 from "./Popover.module.css";
1381
- import { jsx as jsx57, jsxs as jsxs45 } from "react/jsx-runtime";
1452
+ import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
1382
1453
  var TRIGGER_GAP = 8;
1383
1454
  var VIEWPORT_MARGIN = 4;
1384
1455
  function Popover({
@@ -1454,9 +1525,9 @@ function Popover({
1454
1525
  document.addEventListener("keydown", handleKeyDown);
1455
1526
  return () => document.removeEventListener("keydown", handleKeyDown);
1456
1527
  }, [open, onClose]);
1457
- return /* @__PURE__ */ jsxs45("div", { ref: containerRef, className: styles8.container, children: [
1528
+ return /* @__PURE__ */ jsxs48("div", { ref: containerRef, className: styles8.container, children: [
1458
1529
  trigger,
1459
- open && /* @__PURE__ */ jsx57(
1530
+ open && /* @__PURE__ */ jsx60(
1460
1531
  "div",
1461
1532
  {
1462
1533
  ref: panelRef,
@@ -1477,7 +1548,7 @@ function Popover({
1477
1548
 
1478
1549
  // src/components/Button/Button.tsx
1479
1550
  import styles9 from "./Button.module.css";
1480
- import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
1551
+ import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
1481
1552
  function Button({
1482
1553
  variant = "primary",
1483
1554
  size = "md",
@@ -1489,7 +1560,7 @@ function Button({
1489
1560
  ...rest
1490
1561
  }) {
1491
1562
  const classes = [styles9.button, styles9[variant], styles9[size], className].filter(Boolean).join(" ");
1492
- return /* @__PURE__ */ jsxs46(
1563
+ return /* @__PURE__ */ jsxs49(
1493
1564
  "button",
1494
1565
  {
1495
1566
  type,
@@ -1501,7 +1572,7 @@ function Button({
1501
1572
  loading && // aria-hidden: the button's own accessible name (its visible children,
1502
1573
  // unchanged below) plus aria-busy already communicate the pending
1503
1574
  // state — an unhidden Spinner-style status region would double-narrate it.
1504
- /* @__PURE__ */ jsx58("span", { className: styles9.spinner, "aria-hidden": "true" }),
1575
+ /* @__PURE__ */ jsx61("span", { className: styles9.spinner, "aria-hidden": "true" }),
1505
1576
  children
1506
1577
  ]
1507
1578
  }
@@ -1510,23 +1581,23 @@ function Button({
1510
1581
 
1511
1582
  // src/components/Input/Input.tsx
1512
1583
  import styles10 from "./Input.module.css";
1513
- import { jsx as jsx59 } from "react/jsx-runtime";
1584
+ import { jsx as jsx62 } from "react/jsx-runtime";
1514
1585
  function Input({ type = "text", className, ...rest }) {
1515
1586
  const classes = [styles10.input, className].filter(Boolean).join(" ");
1516
- return /* @__PURE__ */ jsx59("input", { type, className: classes, ...rest });
1587
+ return /* @__PURE__ */ jsx62("input", { type, className: classes, ...rest });
1517
1588
  }
1518
1589
 
1519
1590
  // src/components/Textarea/Textarea.tsx
1520
1591
  import styles11 from "./Textarea.module.css";
1521
- import { jsx as jsx60 } from "react/jsx-runtime";
1592
+ import { jsx as jsx63 } from "react/jsx-runtime";
1522
1593
  function Textarea({ className, rows = 4, ...rest }) {
1523
1594
  const classes = [styles11.textarea, className].filter(Boolean).join(" ");
1524
- return /* @__PURE__ */ jsx60("textarea", { rows, className: classes, ...rest });
1595
+ return /* @__PURE__ */ jsx63("textarea", { rows, className: classes, ...rest });
1525
1596
  }
1526
1597
 
1527
1598
  // src/components/CodeTextarea/CodeTextarea.tsx
1528
1599
  import styles12 from "./CodeTextarea.module.css";
1529
- import { jsx as jsx61 } from "react/jsx-runtime";
1600
+ import { jsx as jsx64 } from "react/jsx-runtime";
1530
1601
  function CodeTextarea({
1531
1602
  className,
1532
1603
  rows = 12,
@@ -1537,7 +1608,7 @@ function CodeTextarea({
1537
1608
  ...rest
1538
1609
  }) {
1539
1610
  const classes = [styles12.textarea, invalid ? styles12.invalid : void 0, className].filter(Boolean).join(" ");
1540
- return /* @__PURE__ */ jsx61(
1611
+ return /* @__PURE__ */ jsx64(
1541
1612
  "textarea",
1542
1613
  {
1543
1614
  rows,
@@ -1552,7 +1623,7 @@ function CodeTextarea({
1552
1623
 
1553
1624
  // src/components/StatusBadge/StatusBadge.tsx
1554
1625
  import styles13 from "./StatusBadge.module.css";
1555
- import { jsx as jsx62, jsxs as jsxs47 } from "react/jsx-runtime";
1626
+ import { jsx as jsx65, jsxs as jsxs50 } from "react/jsx-runtime";
1556
1627
  var STATUS_CLASS = {
1557
1628
  unmodified: styles13.neutral,
1558
1629
  draft: styles13.info,
@@ -1580,14 +1651,14 @@ function StatusBadge({
1580
1651
  "aria-label": ariaLabel
1581
1652
  }) {
1582
1653
  const label = children ?? STATUS_LABEL[status];
1583
- return /* @__PURE__ */ jsxs47(
1654
+ return /* @__PURE__ */ jsxs50(
1584
1655
  "span",
1585
1656
  {
1586
1657
  className: [styles13.badge, STATUS_CLASS[status], className].filter(Boolean).join(" "),
1587
1658
  "aria-label": ariaLabel,
1588
1659
  children: [
1589
- /* @__PURE__ */ jsx62("span", { className: styles13.dot, "aria-hidden": "true" }),
1590
- /* @__PURE__ */ jsx62("span", { className: styles13.label, children: label })
1660
+ /* @__PURE__ */ jsx65("span", { className: styles13.dot, "aria-hidden": "true" }),
1661
+ /* @__PURE__ */ jsx65("span", { className: styles13.label, children: label })
1591
1662
  ]
1592
1663
  }
1593
1664
  );
@@ -1596,7 +1667,7 @@ function StatusBadge({
1596
1667
  // src/components/SplitPane/SplitPane.tsx
1597
1668
  import { useCallback, useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
1598
1669
  import styles14 from "./SplitPane.module.css";
1599
- import { jsx as jsx63, jsxs as jsxs48 } from "react/jsx-runtime";
1670
+ import { jsx as jsx66, jsxs as jsxs51 } from "react/jsx-runtime";
1600
1671
  var clampSize = (value, min, max) => Math.min(Math.max(value, min), max);
1601
1672
  function SplitPane({
1602
1673
  primary,
@@ -1682,15 +1753,15 @@ function SplitPane({
1682
1753
  const style = {
1683
1754
  "--split-pane-primary-size": `${primarySize}%`
1684
1755
  };
1685
- return /* @__PURE__ */ jsxs48(
1756
+ return /* @__PURE__ */ jsxs51(
1686
1757
  "div",
1687
1758
  {
1688
1759
  ref: containerRef,
1689
1760
  className: [styles14.splitPane, className].filter(Boolean).join(" "),
1690
1761
  style,
1691
1762
  children: [
1692
- /* @__PURE__ */ jsx63("section", { className: styles14.pane, "aria-label": primaryLabel, children: primary }),
1693
- resizable && /* @__PURE__ */ jsx63(
1763
+ /* @__PURE__ */ jsx66("section", { className: styles14.pane, "aria-label": primaryLabel, children: primary }),
1764
+ resizable && /* @__PURE__ */ jsx66(
1694
1765
  "button",
1695
1766
  {
1696
1767
  type: "button",
@@ -1700,7 +1771,7 @@ function SplitPane({
1700
1771
  onKeyDown: resizeWithKeyboard
1701
1772
  }
1702
1773
  ),
1703
- /* @__PURE__ */ jsx63("section", { className: styles14.pane, "aria-label": secondaryLabel, children: secondary })
1774
+ /* @__PURE__ */ jsx66("section", { className: styles14.pane, "aria-label": secondaryLabel, children: secondary })
1704
1775
  ]
1705
1776
  }
1706
1777
  );
@@ -1709,7 +1780,7 @@ function SplitPane({
1709
1780
  // src/components/TagInput/TagInput.tsx
1710
1781
  import { useMemo, useState as useState3 } from "react";
1711
1782
  import styles15 from "./TagInput.module.css";
1712
- import { jsx as jsx64, jsxs as jsxs49 } from "react/jsx-runtime";
1783
+ import { jsx as jsx67, jsxs as jsxs52 } from "react/jsx-runtime";
1713
1784
  var DEFAULT_SEPARATORS = /[\n,]+/;
1714
1785
  var splitTags = (value, separators) => value.split(separators).map((tag) => tag.trim()).filter(Boolean);
1715
1786
  function TagInput({
@@ -1783,8 +1854,8 @@ function TagInput({
1783
1854
  event.preventDefault();
1784
1855
  addTags(tags);
1785
1856
  };
1786
- return /* @__PURE__ */ jsxs49("div", { className: [styles15.wrapper, className].filter(Boolean).join(" "), children: [
1787
- /* @__PURE__ */ jsxs49(
1857
+ return /* @__PURE__ */ jsxs52("div", { className: [styles15.wrapper, className].filter(Boolean).join(" "), children: [
1858
+ /* @__PURE__ */ jsxs52(
1788
1859
  "div",
1789
1860
  {
1790
1861
  className: [
@@ -1793,9 +1864,9 @@ function TagInput({
1793
1864
  error || localError || ariaInvalid ? styles15.invalid : void 0
1794
1865
  ].filter(Boolean).join(" "),
1795
1866
  children: [
1796
- value.map((tag, index) => /* @__PURE__ */ jsxs49("span", { className: styles15.tag, children: [
1797
- /* @__PURE__ */ jsx64("span", { className: styles15.tagLabel, children: tag }),
1798
- /* @__PURE__ */ jsx64(
1867
+ value.map((tag, index) => /* @__PURE__ */ jsxs52("span", { className: styles15.tag, children: [
1868
+ /* @__PURE__ */ jsx67("span", { className: styles15.tagLabel, children: tag }),
1869
+ /* @__PURE__ */ jsx67(
1799
1870
  "button",
1800
1871
  {
1801
1872
  type: "button",
@@ -1807,7 +1878,7 @@ function TagInput({
1807
1878
  }
1808
1879
  )
1809
1880
  ] }, `${tag}-${index}`)),
1810
- /* @__PURE__ */ jsx64(
1881
+ /* @__PURE__ */ jsx67(
1811
1882
  "input",
1812
1883
  {
1813
1884
  id,
@@ -1829,7 +1900,7 @@ function TagInput({
1829
1900
  ]
1830
1901
  }
1831
1902
  ),
1832
- message && /* @__PURE__ */ jsx64(
1903
+ message && /* @__PURE__ */ jsx67(
1833
1904
  "p",
1834
1905
  {
1835
1906
  id: messageId,
@@ -1888,7 +1959,7 @@ function usePrefersReducedMotion() {
1888
1959
 
1889
1960
  // src/components/OverlayHeader/OverlayHeader.tsx
1890
1961
  import styles16 from "./OverlayHeader.module.css";
1891
- import { jsx as jsx65, jsxs as jsxs50 } from "react/jsx-runtime";
1962
+ import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
1892
1963
  function OverlayHeader({
1893
1964
  title,
1894
1965
  onClose,
@@ -1897,20 +1968,20 @@ function OverlayHeader({
1897
1968
  secondRow,
1898
1969
  className
1899
1970
  }) {
1900
- return /* @__PURE__ */ jsxs50("div", { className: [styles16.header, className].filter(Boolean).join(" "), children: [
1901
- /* @__PURE__ */ jsxs50("div", { className: styles16.row, children: [
1902
- onBack && /* @__PURE__ */ jsx65("button", { type: "button", className: styles16.backButton, "aria-label": "Back", onClick: onBack, children: /* @__PURE__ */ jsx65(Icon, { name: "chevron-left", size: "md", "aria-hidden": true }) }),
1903
- /* @__PURE__ */ jsx65("span", { className: styles16.title, children: title }),
1904
- action && /* @__PURE__ */ jsx65("div", { className: styles16.action, children: action }),
1905
- /* @__PURE__ */ jsx65("button", { type: "button", className: styles16.closeButton, "aria-label": "Close", onClick: onClose, children: /* @__PURE__ */ jsx65(Icon, { name: "x", size: "sm", "aria-hidden": true }) })
1971
+ return /* @__PURE__ */ jsxs53("div", { className: [styles16.header, className].filter(Boolean).join(" "), children: [
1972
+ /* @__PURE__ */ jsxs53("div", { className: styles16.row, children: [
1973
+ onBack && /* @__PURE__ */ jsx68("button", { type: "button", className: styles16.backButton, "aria-label": "Back", onClick: onBack, children: /* @__PURE__ */ jsx68(Icon, { name: "chevron-left", size: "md", "aria-hidden": true }) }),
1974
+ /* @__PURE__ */ jsx68("span", { className: styles16.title, children: title }),
1975
+ action && /* @__PURE__ */ jsx68("div", { className: styles16.action, children: action }),
1976
+ /* @__PURE__ */ jsx68("button", { type: "button", className: styles16.closeButton, "aria-label": "Close", onClick: onClose, children: /* @__PURE__ */ jsx68(Icon, { name: "x", size: "sm", "aria-hidden": true }) })
1906
1977
  ] }),
1907
- secondRow && /* @__PURE__ */ jsx65("div", { className: styles16.secondRow, children: secondRow })
1978
+ secondRow && /* @__PURE__ */ jsx68("div", { className: styles16.secondRow, children: secondRow })
1908
1979
  ] });
1909
1980
  }
1910
1981
 
1911
1982
  // src/components/Dialog/Dialog.tsx
1912
1983
  import styles17 from "./Dialog.module.css";
1913
- import { jsx as jsx66, jsxs as jsxs51 } from "react/jsx-runtime";
1984
+ import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
1914
1985
  var MOTION_DURATION_MS = 250;
1915
1986
  var OverlaySecondRowContext = createContext(
1916
1987
  void 0
@@ -1986,7 +2057,7 @@ function Dialog({
1986
2057
  return (
1987
2058
  // role="presentation" removes the scrim from the AT (it is purely visual).
1988
2059
  // e.target check lets clicks inside the panel bubble without triggering dismiss.
1989
- /* @__PURE__ */ jsx66(
2060
+ /* @__PURE__ */ jsx69(
1990
2061
  "div",
1991
2062
  {
1992
2063
  className: [styles17.scrim, isOpenPhase ? styles17.scrimOpen : ""].filter(Boolean).join(" "),
@@ -1997,7 +2068,7 @@ function Dialog({
1997
2068
  onKeyDown: (e) => {
1998
2069
  if (e.key === "Escape") onClose();
1999
2070
  },
2000
- children: /* @__PURE__ */ jsxs51(
2071
+ children: /* @__PURE__ */ jsxs54(
2001
2072
  "div",
2002
2073
  {
2003
2074
  ref: panelRef,
@@ -2007,7 +2078,7 @@ function Dialog({
2007
2078
  tabIndex: -1,
2008
2079
  className: [styles17.panel, styles17[size], isOpenPhase ? styles17.panelOpen : ""].filter(Boolean).join(" "),
2009
2080
  children: [
2010
- /* @__PURE__ */ jsx66(
2081
+ /* @__PURE__ */ jsx69(
2011
2082
  OverlayHeader,
2012
2083
  {
2013
2084
  title,
@@ -2016,8 +2087,8 @@ function Dialog({
2016
2087
  className: styles17.mobileHeader
2017
2088
  }
2018
2089
  ),
2019
- /* @__PURE__ */ jsx66("button", { type: "button", className: styles17.close, "aria-label": "Close", onClick: onClose, children: "\xD7" }),
2020
- /* @__PURE__ */ jsx66("div", { className: styles17.content, children: /* @__PURE__ */ jsx66(OverlaySecondRowContext.Provider, { value: setSecondRow, children }) })
2090
+ /* @__PURE__ */ jsx69("button", { type: "button", className: styles17.close, "aria-label": "Close", onClick: onClose, children: "\xD7" }),
2091
+ /* @__PURE__ */ jsx69("div", { className: styles17.content, children: /* @__PURE__ */ jsx69(OverlaySecondRowContext.Provider, { value: setSecondRow, children }) })
2021
2092
  ]
2022
2093
  }
2023
2094
  )
@@ -2029,7 +2100,7 @@ function Dialog({
2029
2100
  // src/components/Drawer/Drawer.tsx
2030
2101
  import { useEffect as useEffect5, useRef as useRef4 } from "react";
2031
2102
  import styles18 from "./Drawer.module.css";
2032
- import { jsx as jsx67, jsxs as jsxs52 } from "react/jsx-runtime";
2103
+ import { jsx as jsx70, jsxs as jsxs55 } from "react/jsx-runtime";
2033
2104
  var MOTION_DURATION_MS2 = 250;
2034
2105
  var FOCUSABLE2 = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
2035
2106
  var SWIPE_DISMISS_THRESHOLD_PX = 100;
@@ -2118,7 +2189,7 @@ function Drawer({
2118
2189
  return (
2119
2190
  // role="presentation" removes the scrim from the AT (it is purely visual).
2120
2191
  // e.target check lets clicks inside the panel bubble without triggering dismiss.
2121
- /* @__PURE__ */ jsx67(
2192
+ /* @__PURE__ */ jsx70(
2122
2193
  "div",
2123
2194
  {
2124
2195
  className: [styles18.scrim, isOpenPhase ? styles18.scrimOpen : ""].filter(Boolean).join(" "),
@@ -2129,7 +2200,7 @@ function Drawer({
2129
2200
  onKeyDown: (e) => {
2130
2201
  if (e.key === "Escape") onClose();
2131
2202
  },
2132
- children: /* @__PURE__ */ jsxs52(
2203
+ children: /* @__PURE__ */ jsxs55(
2133
2204
  "div",
2134
2205
  {
2135
2206
  ref: panelRef,
@@ -2143,7 +2214,7 @@ function Drawer({
2143
2214
  isOpenPhase ? styles18.panelOpen : ""
2144
2215
  ].filter(Boolean).join(" "),
2145
2216
  children: [
2146
- /* @__PURE__ */ jsx67(
2217
+ /* @__PURE__ */ jsx70(
2147
2218
  "div",
2148
2219
  {
2149
2220
  className: styles18.handle,
@@ -2166,7 +2237,7 @@ function Drawer({
2166
2237
  // src/components/Sheet/Sheet.tsx
2167
2238
  import { useEffect as useEffect6, useRef as useRef5 } from "react";
2168
2239
  import styles19 from "./Sheet.module.css";
2169
- import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
2240
+ import { jsx as jsx71, jsxs as jsxs56 } from "react/jsx-runtime";
2170
2241
  var FOCUSABLE3 = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
2171
2242
  var MOTION_DURATION_MS3 = 250;
2172
2243
  function Sheet({
@@ -2227,7 +2298,7 @@ function Sheet({
2227
2298
  return () => document.removeEventListener("keydown", handleKeyDown);
2228
2299
  }, [open, onClose]);
2229
2300
  if (!mounted) return null;
2230
- return /* @__PURE__ */ jsxs53(
2301
+ return /* @__PURE__ */ jsxs56(
2231
2302
  "div",
2232
2303
  {
2233
2304
  ref: panelRef,
@@ -2241,8 +2312,8 @@ function Sheet({
2241
2312
  phase === "open" ? styles19.panelOpen : ""
2242
2313
  ].filter(Boolean).join(" "),
2243
2314
  children: [
2244
- title && /* @__PURE__ */ jsx68(OverlayHeader, { title, onClose, onBack, action: headerAction }),
2245
- /* @__PURE__ */ jsx68("div", { className: styles19.content, children })
2315
+ title && /* @__PURE__ */ jsx71(OverlayHeader, { title, onClose, onBack, action: headerAction }),
2316
+ /* @__PURE__ */ jsx71("div", { className: styles19.content, children })
2246
2317
  ]
2247
2318
  }
2248
2319
  );
@@ -2251,7 +2322,7 @@ function Sheet({
2251
2322
  // src/components/ConfirmDialog/ConfirmDialog.tsx
2252
2323
  import { useEffect as useEffect7, useRef as useRef6 } from "react";
2253
2324
  import styles20 from "./ConfirmDialog.module.css";
2254
- import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
2325
+ import { jsx as jsx72, jsxs as jsxs57 } from "react/jsx-runtime";
2255
2326
  function ConfirmDialog({
2256
2327
  open,
2257
2328
  onClose,
@@ -2280,7 +2351,7 @@ function ConfirmDialog({
2280
2351
  }, [onClose]);
2281
2352
  return (
2282
2353
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions
2283
- /* @__PURE__ */ jsx69(
2354
+ /* @__PURE__ */ jsx72(
2284
2355
  "dialog",
2285
2356
  {
2286
2357
  ref: dialogRef,
@@ -2289,12 +2360,12 @@ function ConfirmDialog({
2289
2360
  onClick: (e) => {
2290
2361
  if (e.target === e.currentTarget) onClose();
2291
2362
  },
2292
- children: /* @__PURE__ */ jsxs54("div", { className: styles20.body, children: [
2293
- /* @__PURE__ */ jsx69("h2", { className: styles20.title, children: title }),
2294
- /* @__PURE__ */ jsx69("div", { className: styles20.message, children: message }),
2295
- error && /* @__PURE__ */ jsx69("p", { className: styles20.error, children: error }),
2296
- /* @__PURE__ */ jsxs54("div", { className: styles20.actions, children: [
2297
- /* @__PURE__ */ jsx69(Button, { type: "button", variant: "secondary", onClick: onClose, disabled: pending, children: cancelLabel }),
2363
+ children: /* @__PURE__ */ jsxs57("div", { className: styles20.body, children: [
2364
+ /* @__PURE__ */ jsx72("h2", { className: styles20.title, children: title }),
2365
+ /* @__PURE__ */ jsx72("div", { className: styles20.message, children: message }),
2366
+ error && /* @__PURE__ */ jsx72("p", { className: styles20.error, children: error }),
2367
+ /* @__PURE__ */ jsxs57("div", { className: styles20.actions, children: [
2368
+ /* @__PURE__ */ jsx72(Button, { type: "button", variant: "secondary", onClick: onClose, disabled: pending, children: cancelLabel }),
2298
2369
  destructive ? (
2299
2370
  // A solid red fill, not Button's own `destructive` variant (an
2300
2371
  // outlined/ghost style meant for lower-emphasis placements) — a
@@ -2303,7 +2374,7 @@ function ConfirmDialog({
2303
2374
  // -text-on-error tokens the codebase already introduced for this
2304
2375
  // exact "reads as a filled action button, not a tinted status
2305
2376
  // surface" case (see semantic.css).
2306
- /* @__PURE__ */ jsx69(
2377
+ /* @__PURE__ */ jsx72(
2307
2378
  "button",
2308
2379
  {
2309
2380
  type: "button",
@@ -2313,7 +2384,7 @@ function ConfirmDialog({
2313
2384
  children: confirmLabel
2314
2385
  }
2315
2386
  )
2316
- ) : /* @__PURE__ */ jsx69(Button, { type: "button", variant: "primary", onClick: onConfirm, disabled: pending, children: confirmLabel })
2387
+ ) : /* @__PURE__ */ jsx72(Button, { type: "button", variant: "primary", onClick: onConfirm, disabled: pending, children: confirmLabel })
2317
2388
  ] })
2318
2389
  ] })
2319
2390
  }
@@ -2475,20 +2546,30 @@ function useIsMobile(breakpointPx = MOBILE_BREAKPOINT_PX) {
2475
2546
  return isMobile;
2476
2547
  }
2477
2548
 
2549
+ // src/hooks/useCommitOnEnterOrBlur.ts
2550
+ function useCommitOnEnterOrBlur(onCommit) {
2551
+ return {
2552
+ onKeyDown: (e) => {
2553
+ if (e.key === "Enter") onCommit();
2554
+ },
2555
+ onBlur: onCommit
2556
+ };
2557
+ }
2558
+
2478
2559
  // src/components/Menu/Menu.tsx
2479
2560
  import styles21 from "./Menu.module.css";
2480
- import { Fragment, jsx as jsx70, jsxs as jsxs55 } from "react/jsx-runtime";
2561
+ import { Fragment, jsx as jsx73, jsxs as jsxs58 } from "react/jsx-runtime";
2481
2562
  function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align }) {
2482
2563
  const isMobile = useIsMobile();
2483
- const list = /* @__PURE__ */ jsx70("ul", { className: styles21.list, role: "menu", children: items.map((entry, index) => {
2564
+ const list = /* @__PURE__ */ jsx73("ul", { className: styles21.list, role: "menu", children: items.map((entry, index) => {
2484
2565
  if (entry.type === "separator") {
2485
- return /* @__PURE__ */ jsx70("li", { role: "separator", className: styles21.separator }, index);
2566
+ return /* @__PURE__ */ jsx73("li", { role: "separator", className: styles21.separator }, index);
2486
2567
  }
2487
2568
  if (entry.type === "label") {
2488
- return /* @__PURE__ */ jsx70("li", { role: "presentation", className: styles21.label, children: entry.label }, index);
2569
+ return /* @__PURE__ */ jsx73("li", { role: "presentation", className: styles21.label, children: entry.label }, index);
2489
2570
  }
2490
2571
  const isCheckable = entry.checked !== void 0;
2491
- return /* @__PURE__ */ jsx70("li", { role: "none", children: /* @__PURE__ */ jsxs55(
2572
+ return /* @__PURE__ */ jsx73("li", { role: "none", children: /* @__PURE__ */ jsxs58(
2492
2573
  "button",
2493
2574
  {
2494
2575
  role: isCheckable ? "menuitemradio" : "menuitem",
@@ -2501,20 +2582,20 @@ function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align })
2501
2582
  entry.onSelect();
2502
2583
  },
2503
2584
  children: [
2504
- isCheckable && /* @__PURE__ */ jsx70("span", { className: styles21.check, "aria-hidden": true, children: entry.checked && /* @__PURE__ */ jsx70(Icon, { name: "check", size: "sm", "aria-hidden": true }) }),
2505
- entry.icon && /* @__PURE__ */ jsx70(Icon, { name: entry.icon, size: "sm", "aria-hidden": true }),
2585
+ isCheckable && /* @__PURE__ */ jsx73("span", { className: styles21.check, "aria-hidden": true, children: entry.checked && /* @__PURE__ */ jsx73(Icon, { name: "check", size: "sm", "aria-hidden": true }) }),
2586
+ entry.icon && /* @__PURE__ */ jsx73(Icon, { name: entry.icon, size: "sm", "aria-hidden": true }),
2506
2587
  entry.label
2507
2588
  ]
2508
2589
  }
2509
2590
  ) }, index);
2510
2591
  }) });
2511
2592
  if (isMobile) {
2512
- return /* @__PURE__ */ jsxs55(Fragment, { children: [
2593
+ return /* @__PURE__ */ jsxs58(Fragment, { children: [
2513
2594
  trigger,
2514
- /* @__PURE__ */ jsx70(Drawer, { open, onClose, "aria-label": ariaLabel, children: list })
2595
+ /* @__PURE__ */ jsx73(Drawer, { open, onClose, "aria-label": ariaLabel, children: list })
2515
2596
  ] });
2516
2597
  }
2517
- return /* @__PURE__ */ jsx70(Popover, { trigger, open, onClose, "aria-label": ariaLabel, align, children: list });
2598
+ return /* @__PURE__ */ jsx73(Popover, { trigger, open, onClose, "aria-label": ariaLabel, align, children: list });
2518
2599
  }
2519
2600
 
2520
2601
  // src/components/Toast/Toast.tsx
@@ -2529,7 +2610,7 @@ import {
2529
2610
  useState as useState8
2530
2611
  } from "react";
2531
2612
  import styles22 from "./Toast.module.css";
2532
- import { jsx as jsx71, jsxs as jsxs56 } from "react/jsx-runtime";
2613
+ import { jsx as jsx74, jsxs as jsxs59 } from "react/jsx-runtime";
2533
2614
  var ToastContext = createContext2(null);
2534
2615
  function useToast() {
2535
2616
  const ctx = useContext2(ToastContext);
@@ -2567,16 +2648,16 @@ function ToastProvider({ children }) {
2567
2648
  };
2568
2649
  }, []);
2569
2650
  const value = useMemo2(() => ({ show, dismiss }), [show, dismiss]);
2570
- return /* @__PURE__ */ jsxs56(ToastContext.Provider, { value, children: [
2651
+ return /* @__PURE__ */ jsxs59(ToastContext.Provider, { value, children: [
2571
2652
  children,
2572
- /* @__PURE__ */ jsx71(
2653
+ /* @__PURE__ */ jsx74(
2573
2654
  "ol",
2574
2655
  {
2575
2656
  className: styles22.region,
2576
2657
  "aria-label": "Notifications",
2577
2658
  "aria-live": "polite",
2578
2659
  "aria-atomic": "false",
2579
- children: toasts.map((toast) => /* @__PURE__ */ jsx71(Toast, { ...toast, onDismiss: dismiss }, toast.id))
2660
+ children: toasts.map((toast) => /* @__PURE__ */ jsx74(Toast, { ...toast, onDismiss: dismiss }, toast.id))
2580
2661
  }
2581
2662
  )
2582
2663
  ] });
@@ -2599,18 +2680,18 @@ function Toast({
2599
2680
  }) {
2600
2681
  const categoryClass = styles22[category] ?? styles22.info;
2601
2682
  const iconName = CATEGORY_ICON[category] ?? "info";
2602
- return /* @__PURE__ */ jsxs56(
2683
+ return /* @__PURE__ */ jsxs59(
2603
2684
  "li",
2604
2685
  {
2605
2686
  role: "status",
2606
2687
  className: `${styles22.toast} ${String(categoryClass)} ${exiting ? styles22.exiting : ""}`,
2607
2688
  children: [
2608
- /* @__PURE__ */ jsx71("span", { className: styles22.icon, "aria-hidden": "true", children: /* @__PURE__ */ jsx71(Icon, { name: iconName, size: "sm", "aria-hidden": true }) }),
2609
- /* @__PURE__ */ jsxs56("div", { className: styles22.body, children: [
2610
- /* @__PURE__ */ jsx71("div", { className: styles22.title, children: title }),
2611
- message && /* @__PURE__ */ jsx71("div", { className: styles22.message, children: message })
2689
+ /* @__PURE__ */ jsx74("span", { className: styles22.icon, "aria-hidden": "true", children: /* @__PURE__ */ jsx74(Icon, { name: iconName, size: "sm", "aria-hidden": true }) }),
2690
+ /* @__PURE__ */ jsxs59("div", { className: styles22.body, children: [
2691
+ /* @__PURE__ */ jsx74("div", { className: styles22.title, children: title }),
2692
+ message && /* @__PURE__ */ jsx74("div", { className: styles22.message, children: message })
2612
2693
  ] }),
2613
- /* @__PURE__ */ jsx71(
2694
+ /* @__PURE__ */ jsx74(
2614
2695
  "button",
2615
2696
  {
2616
2697
  type: "button",
@@ -2627,7 +2708,7 @@ function Toast({
2627
2708
 
2628
2709
  // src/components/Card/Card.tsx
2629
2710
  import styles23 from "./Card.module.css";
2630
- import { jsx as jsx72 } from "react/jsx-runtime";
2711
+ import { jsx as jsx75 } from "react/jsx-runtime";
2631
2712
  var paddingClass = {
2632
2713
  sm: styles23.paddingSm,
2633
2714
  md: styles23.paddingMd,
@@ -2642,13 +2723,13 @@ function Card({
2642
2723
  ...rest
2643
2724
  }) {
2644
2725
  const cls = [styles23.card, paddingClass[padding], interactive && styles23.interactive, className].filter(Boolean).join(" ");
2645
- return /* @__PURE__ */ jsx72(Tag, { className: cls, ...rest, children });
2726
+ return /* @__PURE__ */ jsx75(Tag, { className: cls, ...rest, children });
2646
2727
  }
2647
2728
 
2648
2729
  // src/components/FormField/FormField.tsx
2649
2730
  import { useId as useId2 } from "react";
2650
2731
  import styles24 from "./FormField.module.css";
2651
- import { jsx as jsx73, jsxs as jsxs57 } from "react/jsx-runtime";
2732
+ import { jsx as jsx76, jsxs as jsxs60 } from "react/jsx-runtime";
2652
2733
  function FormField({
2653
2734
  label,
2654
2735
  hint,
@@ -2669,52 +2750,52 @@ function FormField({
2669
2750
  "aria-invalid": error ? true : void 0,
2670
2751
  required: required || void 0
2671
2752
  };
2672
- return /* @__PURE__ */ jsxs57("div", { className: [styles24.field, className].filter(Boolean).join(" "), children: [
2673
- /* @__PURE__ */ jsxs57("label", { className: styles24.label, htmlFor: fieldId, children: [
2753
+ return /* @__PURE__ */ jsxs60("div", { className: [styles24.field, className].filter(Boolean).join(" "), children: [
2754
+ /* @__PURE__ */ jsxs60("label", { className: styles24.label, htmlFor: fieldId, children: [
2674
2755
  label,
2675
- required && /* @__PURE__ */ jsx73("span", { className: styles24.required, "aria-hidden": "true", children: "*" })
2756
+ required && /* @__PURE__ */ jsx76("span", { className: styles24.required, "aria-hidden": "true", children: "*" })
2676
2757
  ] }),
2677
2758
  children(field),
2678
- hint && !error && /* @__PURE__ */ jsx73("p", { id: hintId, className: styles24.hint, children: hint }),
2679
- error && /* @__PURE__ */ jsx73("p", { id: errorId, className: styles24.error, role: "alert", children: error })
2759
+ hint && !error && /* @__PURE__ */ jsx76("p", { id: hintId, className: styles24.hint, children: hint }),
2760
+ error && /* @__PURE__ */ jsx76("p", { id: errorId, className: styles24.error, role: "alert", children: error })
2680
2761
  ] });
2681
2762
  }
2682
2763
 
2683
2764
  // src/components/PageHeader/PageHeader.tsx
2684
2765
  import styles25 from "./PageHeader.module.css";
2685
- import { jsx as jsx74, jsxs as jsxs58 } from "react/jsx-runtime";
2766
+ import { jsx as jsx77, jsxs as jsxs61 } from "react/jsx-runtime";
2686
2767
  function PageHeader({ title, description, action, className }) {
2687
- return /* @__PURE__ */ jsxs58("header", { className: [styles25.header, className].filter(Boolean).join(" "), children: [
2688
- /* @__PURE__ */ jsxs58("div", { className: styles25.text, children: [
2689
- /* @__PURE__ */ jsx74("h1", { className: styles25.title, children: title }),
2690
- description && /* @__PURE__ */ jsx74("p", { className: styles25.description, children: description })
2768
+ return /* @__PURE__ */ jsxs61("header", { className: [styles25.header, className].filter(Boolean).join(" "), children: [
2769
+ /* @__PURE__ */ jsxs61("div", { className: styles25.text, children: [
2770
+ /* @__PURE__ */ jsx77("h1", { className: styles25.title, children: title }),
2771
+ description && /* @__PURE__ */ jsx77("p", { className: styles25.description, children: description })
2691
2772
  ] }),
2692
- action && /* @__PURE__ */ jsx74("div", { className: styles25.action, children: action })
2773
+ action && /* @__PURE__ */ jsx77("div", { className: styles25.action, children: action })
2693
2774
  ] });
2694
2775
  }
2695
2776
 
2696
2777
  // src/components/EmptyState/EmptyState.tsx
2697
2778
  import styles26 from "./EmptyState.module.css";
2698
- import { jsx as jsx75, jsxs as jsxs59 } from "react/jsx-runtime";
2779
+ import { jsx as jsx78, jsxs as jsxs62 } from "react/jsx-runtime";
2699
2780
  function EmptyState({ icon, heading, description, action, className }) {
2700
- return /* @__PURE__ */ jsxs59("div", { className: [styles26.root, className].filter(Boolean).join(" "), children: [
2701
- icon && /* @__PURE__ */ jsx75("span", { className: styles26.icon, children: /* @__PURE__ */ jsx75(Icon, { name: icon, size: "lg", "aria-hidden": true }) }),
2702
- /* @__PURE__ */ jsx75("h2", { className: styles26.heading, children: heading }),
2703
- description && /* @__PURE__ */ jsx75("p", { className: styles26.description, children: description }),
2781
+ return /* @__PURE__ */ jsxs62("div", { className: [styles26.root, className].filter(Boolean).join(" "), children: [
2782
+ icon && /* @__PURE__ */ jsx78("span", { className: styles26.icon, children: /* @__PURE__ */ jsx78(Icon, { name: icon, size: "lg", "aria-hidden": true }) }),
2783
+ /* @__PURE__ */ jsx78("h2", { className: styles26.heading, children: heading }),
2784
+ description && /* @__PURE__ */ jsx78("p", { className: styles26.description, children: description }),
2704
2785
  action
2705
2786
  ] });
2706
2787
  }
2707
2788
 
2708
2789
  // src/components/Spinner/Spinner.tsx
2709
2790
  import styles27 from "./Spinner.module.css";
2710
- import { jsx as jsx76 } from "react/jsx-runtime";
2791
+ import { jsx as jsx79 } from "react/jsx-runtime";
2711
2792
  var sizeClass = {
2712
2793
  sm: styles27.sm,
2713
2794
  md: styles27.md,
2714
2795
  lg: styles27.lg
2715
2796
  };
2716
2797
  function Spinner({ size = "md", label = "Loading\u2026", className }) {
2717
- return /* @__PURE__ */ jsx76(
2798
+ return /* @__PURE__ */ jsx79(
2718
2799
  "span",
2719
2800
  {
2720
2801
  role: "status",
@@ -2727,7 +2808,7 @@ function Spinner({ size = "md", label = "Loading\u2026", className }) {
2727
2808
  // src/components/Avatar/Avatar.tsx
2728
2809
  import { useState as useState9 } from "react";
2729
2810
  import styles28 from "./Avatar.module.css";
2730
- import { jsx as jsx77 } from "react/jsx-runtime";
2811
+ import { jsx as jsx80 } from "react/jsx-runtime";
2731
2812
  function initials(name) {
2732
2813
  const parts = name.trim().split(/\s+/);
2733
2814
  if (parts.length === 1) return (parts[0] ?? "").slice(0, 2).toUpperCase();
@@ -2742,21 +2823,21 @@ function Avatar({ name, src, size = "md", className }) {
2742
2823
  const [imgFailed, setImgFailed] = useState9(false);
2743
2824
  const cls = [styles28.avatar, sizeClass2[size], className].filter(Boolean).join(" ");
2744
2825
  if (src && !imgFailed) {
2745
- return /* @__PURE__ */ jsx77("span", { className: cls, "aria-label": name, children: /* @__PURE__ */ jsx77("img", { src, alt: name, className: styles28.img, onError: () => setImgFailed(true) }) });
2826
+ return /* @__PURE__ */ jsx80("span", { className: cls, "aria-label": name, children: /* @__PURE__ */ jsx80("img", { src, alt: name, className: styles28.img, onError: () => setImgFailed(true) }) });
2746
2827
  }
2747
- return /* @__PURE__ */ jsx77("span", { className: cls, "aria-label": name, children: initials(name) });
2828
+ return /* @__PURE__ */ jsx80("span", { className: cls, "aria-label": name, children: initials(name) });
2748
2829
  }
2749
2830
 
2750
2831
  // src/components/NavTabs/NavTabs.tsx
2751
2832
  import styles29 from "./NavTabs.module.css";
2752
- import { jsx as jsx78 } from "react/jsx-runtime";
2833
+ import { jsx as jsx81 } from "react/jsx-runtime";
2753
2834
  function NavTabs({ items, className, "aria-label": ariaLabel }) {
2754
- return /* @__PURE__ */ jsx78(
2835
+ return /* @__PURE__ */ jsx81(
2755
2836
  "nav",
2756
2837
  {
2757
2838
  className: [styles29.nav, className].filter(Boolean).join(" "),
2758
2839
  "aria-label": ariaLabel ?? "Page navigation",
2759
- children: items.map((item) => /* @__PURE__ */ jsx78(
2840
+ children: items.map((item) => /* @__PURE__ */ jsx81(
2760
2841
  "a",
2761
2842
  {
2762
2843
  href: item.href,
@@ -2773,7 +2854,7 @@ function NavTabs({ items, className, "aria-label": ariaLabel }) {
2773
2854
  // src/components/Tooltip/Tooltip.tsx
2774
2855
  import { useId as useId3 } from "react";
2775
2856
  import styles30 from "./Tooltip.module.css";
2776
- import { jsx as jsx79, jsxs as jsxs60 } from "react/jsx-runtime";
2857
+ import { jsx as jsx82, jsxs as jsxs63 } from "react/jsx-runtime";
2777
2858
  var sideClass = {
2778
2859
  top: styles30.top,
2779
2860
  bottom: styles30.bottom,
@@ -2782,15 +2863,15 @@ var sideClass = {
2782
2863
  };
2783
2864
  function Tooltip({ content, children, side = "top" }) {
2784
2865
  const tipId = useId3();
2785
- return /* @__PURE__ */ jsxs60("span", { className: styles30.wrapper, children: [
2786
- /* @__PURE__ */ jsx79("span", { "aria-describedby": tipId, children }),
2787
- /* @__PURE__ */ jsx79("span", { id: tipId, role: "tooltip", className: [styles30.tip, sideClass[side]].join(" "), children: content })
2866
+ return /* @__PURE__ */ jsxs63("span", { className: styles30.wrapper, children: [
2867
+ /* @__PURE__ */ jsx82("span", { "aria-describedby": tipId, children }),
2868
+ /* @__PURE__ */ jsx82("span", { id: tipId, role: "tooltip", className: [styles30.tip, sideClass[side]].join(" "), children: content })
2788
2869
  ] });
2789
2870
  }
2790
2871
 
2791
2872
  // src/components/Checkbox/Checkbox.tsx
2792
2873
  import styles31 from "./Checkbox.module.css";
2793
- import { jsx as jsx80, jsxs as jsxs61 } from "react/jsx-runtime";
2874
+ import { jsx as jsx83, jsxs as jsxs64 } from "react/jsx-runtime";
2794
2875
  function Checkbox({
2795
2876
  checked,
2796
2877
  onChange,
@@ -2802,9 +2883,9 @@ function Checkbox({
2802
2883
  ...rest
2803
2884
  }) {
2804
2885
  const inputId = id ?? `checkbox-${label.toLowerCase().replace(/\s+/g, "-")}`;
2805
- return /* @__PURE__ */ jsxs61("span", { className: [styles31.root, className].filter(Boolean).join(" "), children: [
2806
- /* @__PURE__ */ jsxs61("span", { className: [styles31.box, checked ? styles31.checked : ""].filter(Boolean).join(" "), children: [
2807
- /* @__PURE__ */ jsx80(
2886
+ return /* @__PURE__ */ jsxs64("span", { className: [styles31.root, className].filter(Boolean).join(" "), children: [
2887
+ /* @__PURE__ */ jsxs64("span", { className: [styles31.box, checked ? styles31.checked : ""].filter(Boolean).join(" "), children: [
2888
+ /* @__PURE__ */ jsx83(
2808
2889
  "input",
2809
2890
  {
2810
2891
  ...rest,
@@ -2816,7 +2897,7 @@ function Checkbox({
2816
2897
  onChange: (e) => onChange(e.target.checked)
2817
2898
  }
2818
2899
  ),
2819
- checked && /* @__PURE__ */ jsx80("svg", { className: styles31.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx80(
2900
+ checked && /* @__PURE__ */ jsx83("svg", { className: styles31.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx83(
2820
2901
  "path",
2821
2902
  {
2822
2903
  d: "M1 4l3 3 5-6",
@@ -2827,7 +2908,7 @@ function Checkbox({
2827
2908
  }
2828
2909
  ) })
2829
2910
  ] }),
2830
- label && /* @__PURE__ */ jsx80(
2911
+ label && /* @__PURE__ */ jsx83(
2831
2912
  "label",
2832
2913
  {
2833
2914
  htmlFor: inputId,
@@ -2844,7 +2925,7 @@ function Checkbox({
2844
2925
 
2845
2926
  // src/components/DragHandleRow/DragHandleRow.tsx
2846
2927
  import styles32 from "./DragHandleRow.module.css";
2847
- import { jsx as jsx81, jsxs as jsxs62 } from "react/jsx-runtime";
2928
+ import { jsx as jsx84, jsxs as jsxs65 } from "react/jsx-runtime";
2848
2929
  function DragHandleRow({
2849
2930
  children,
2850
2931
  handleProps,
@@ -2852,13 +2933,13 @@ function DragHandleRow({
2852
2933
  className,
2853
2934
  ...rest
2854
2935
  }) {
2855
- return /* @__PURE__ */ jsxs62(
2936
+ return /* @__PURE__ */ jsxs65(
2856
2937
  "div",
2857
2938
  {
2858
2939
  ...rest,
2859
2940
  className: [styles32.row, isDragging ? styles32.dragging : "", className].filter(Boolean).join(" "),
2860
2941
  children: [
2861
- /* @__PURE__ */ jsx81(
2942
+ /* @__PURE__ */ jsx84(
2862
2943
  "button",
2863
2944
  {
2864
2945
  type: "button",
@@ -2866,16 +2947,16 @@ function DragHandleRow({
2866
2947
  className: styles32.handle,
2867
2948
  tabIndex: -1,
2868
2949
  ...handleProps,
2869
- children: /* @__PURE__ */ jsx81(DragIcon, {})
2950
+ children: /* @__PURE__ */ jsx84(DragIcon, {})
2870
2951
  }
2871
2952
  ),
2872
- /* @__PURE__ */ jsx81("div", { className: styles32.content, children })
2953
+ /* @__PURE__ */ jsx84("div", { className: styles32.content, children })
2873
2954
  ]
2874
2955
  }
2875
2956
  );
2876
2957
  }
2877
2958
  function DragIcon() {
2878
- return /* @__PURE__ */ jsx81(
2959
+ return /* @__PURE__ */ jsx84(
2879
2960
  "svg",
2880
2961
  {
2881
2962
  width: "14",
@@ -2885,14 +2966,83 @@ function DragIcon() {
2885
2966
  "aria-hidden": "true",
2886
2967
  className: styles32.icon,
2887
2968
  children: [3, 7, 11].map(
2888
- (cy) => [4, 10].map((cx) => /* @__PURE__ */ jsx81("circle", { cx, cy, r: 1.2, fill: "currentColor" }, `${cx}-${cy}`))
2969
+ (cy) => [4, 10].map((cx) => /* @__PURE__ */ jsx84("circle", { cx, cy, r: 1.2, fill: "currentColor" }, `${cx}-${cy}`))
2889
2970
  )
2890
2971
  }
2891
2972
  );
2892
2973
  }
2893
2974
 
2894
- // src/components/Calendar/Calendar.tsx
2975
+ // src/components/FileDropzone/FileDropzone.tsx
2895
2976
  import { useRef as useRef10, useState as useState10 } from "react";
2977
+ import styles33 from "./FileDropzone.module.css";
2978
+ import { jsx as jsx85, jsxs as jsxs66 } from "react/jsx-runtime";
2979
+ function FileDropzone({
2980
+ name,
2981
+ accept,
2982
+ icon,
2983
+ label,
2984
+ hint,
2985
+ onFileSelect,
2986
+ ariaLabel,
2987
+ disabled,
2988
+ className
2989
+ }) {
2990
+ const [dragging, setDragging] = useState10(false);
2991
+ const inputRef = useRef10(null);
2992
+ return /* @__PURE__ */ jsxs66(
2993
+ "label",
2994
+ {
2995
+ className: [
2996
+ styles33.dropzone,
2997
+ dragging ? styles33.dropzoneActive : "",
2998
+ disabled ? styles33.dropzoneDisabled : "",
2999
+ className
3000
+ ].filter(Boolean).join(" "),
3001
+ onDragOver: (event) => {
3002
+ if (disabled) return;
3003
+ event.preventDefault();
3004
+ setDragging(true);
3005
+ },
3006
+ onDragLeave: () => setDragging(false),
3007
+ onDrop: (event) => {
3008
+ if (disabled) return;
3009
+ event.preventDefault();
3010
+ setDragging(false);
3011
+ const dropped = event.dataTransfer.files[0];
3012
+ if (!dropped) return;
3013
+ if (inputRef.current && typeof DataTransfer !== "undefined") {
3014
+ const transfer = new DataTransfer();
3015
+ transfer.items.add(dropped);
3016
+ inputRef.current.files = transfer.files;
3017
+ }
3018
+ onFileSelect(dropped);
3019
+ },
3020
+ children: [
3021
+ /* @__PURE__ */ jsx85("span", { className: styles33.icon, "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx85(Icon, { name: "file", size: "lg", "aria-hidden": true }) }),
3022
+ /* @__PURE__ */ jsxs66("span", { className: styles33.text, children: [
3023
+ /* @__PURE__ */ jsx85("span", { className: styles33.title, children: label }),
3024
+ hint && /* @__PURE__ */ jsx85("span", { className: styles33.hint, children: hint })
3025
+ ] }),
3026
+ /* @__PURE__ */ jsx85(
3027
+ "input",
3028
+ {
3029
+ ref: inputRef,
3030
+ type: "file",
3031
+ name,
3032
+ "aria-label": ariaLabel,
3033
+ accept,
3034
+ disabled,
3035
+ onChange: (event) => onFileSelect(event.target.files?.[0] ?? null),
3036
+ className: styles33.hiddenInput
3037
+ }
3038
+ )
3039
+ ]
3040
+ }
3041
+ );
3042
+ }
3043
+
3044
+ // src/components/Calendar/Calendar.tsx
3045
+ import { useRef as useRef11, useState as useState11 } from "react";
2896
3046
 
2897
3047
  // src/components/Calendar/dateUtils.ts
2898
3048
  function startOfMonth(date) {
@@ -2958,8 +3108,8 @@ function formatDateLabel(date) {
2958
3108
  }
2959
3109
 
2960
3110
  // src/components/Calendar/Calendar.tsx
2961
- import styles33 from "./Calendar.module.css";
2962
- import { jsx as jsx82, jsxs as jsxs63 } from "react/jsx-runtime";
3111
+ import styles34 from "./Calendar.module.css";
3112
+ import { jsx as jsx86, jsxs as jsxs67 } from "react/jsx-runtime";
2963
3113
  var WEEKDAY_LABEL_WEEK = getMonthGrid(new Date(2026, 0, 1))[0] ?? [];
2964
3114
  function Calendar({
2965
3115
  value,
@@ -2968,9 +3118,9 @@ function Calendar({
2968
3118
  maxDate,
2969
3119
  "aria-label": ariaLabel
2970
3120
  }) {
2971
- const [displayedMonth, setDisplayedMonth] = useState10(() => startOfMonth(value ?? /* @__PURE__ */ new Date()));
2972
- const [focusedDate, setFocusedDate] = useState10(() => value ?? /* @__PURE__ */ new Date());
2973
- const gridRef = useRef10(null);
3121
+ const [displayedMonth, setDisplayedMonth] = useState11(() => startOfMonth(value ?? /* @__PURE__ */ new Date()));
3122
+ const [focusedDate, setFocusedDate] = useState11(() => value ?? /* @__PURE__ */ new Date());
3123
+ const gridRef = useRef11(null);
2974
3124
  const weeks = getMonthGrid(displayedMonth);
2975
3125
  function goToMonth(next) {
2976
3126
  setDisplayedMonth(startOfMonth(next));
@@ -3029,51 +3179,51 @@ function Calendar({
3029
3179
  default:
3030
3180
  }
3031
3181
  }
3032
- return /* @__PURE__ */ jsxs63("div", { className: styles33.calendar, "aria-label": ariaLabel, children: [
3033
- /* @__PURE__ */ jsxs63("div", { className: styles33.header, children: [
3034
- /* @__PURE__ */ jsx82(
3182
+ return /* @__PURE__ */ jsxs67("div", { className: styles34.calendar, "aria-label": ariaLabel, children: [
3183
+ /* @__PURE__ */ jsxs67("div", { className: styles34.header, children: [
3184
+ /* @__PURE__ */ jsx86(
3035
3185
  "button",
3036
3186
  {
3037
3187
  type: "button",
3038
- className: styles33.navButton,
3188
+ className: styles34.navButton,
3039
3189
  "aria-label": "Previous month",
3040
3190
  onClick: () => goToMonth(addMonths(displayedMonth, -1)),
3041
- children: /* @__PURE__ */ jsx82(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
3191
+ children: /* @__PURE__ */ jsx86(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
3042
3192
  }
3043
3193
  ),
3044
- /* @__PURE__ */ jsx82("span", { className: styles33.monthLabel, children: formatMonthYear(displayedMonth) }),
3045
- /* @__PURE__ */ jsx82(
3194
+ /* @__PURE__ */ jsx86("span", { className: styles34.monthLabel, children: formatMonthYear(displayedMonth) }),
3195
+ /* @__PURE__ */ jsx86(
3046
3196
  "button",
3047
3197
  {
3048
3198
  type: "button",
3049
- className: styles33.navButton,
3199
+ className: styles34.navButton,
3050
3200
  "aria-label": "Next month",
3051
3201
  onClick: () => goToMonth(addMonths(displayedMonth, 1)),
3052
- children: /* @__PURE__ */ jsx82(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
3202
+ children: /* @__PURE__ */ jsx86(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
3053
3203
  }
3054
3204
  )
3055
3205
  ] }),
3056
- /* @__PURE__ */ jsxs63(
3206
+ /* @__PURE__ */ jsxs67(
3057
3207
  "div",
3058
3208
  {
3059
3209
  ref: gridRef,
3060
3210
  role: "grid",
3061
3211
  "aria-label": formatMonthYear(displayedMonth),
3062
- className: styles33.grid,
3212
+ className: styles34.grid,
3063
3213
  onKeyDown: handleKeyDown,
3064
3214
  tabIndex: -1,
3065
3215
  children: [
3066
- /* @__PURE__ */ jsx82("div", { role: "row", className: styles33.weekdayRow, children: WEEKDAY_LABEL_WEEK.map((d) => /* @__PURE__ */ jsx82("span", { role: "columnheader", className: styles33.weekday, "aria-hidden": true, children: formatWeekdayShort(d) }, d.getDay())) }),
3216
+ /* @__PURE__ */ jsx86("div", { role: "row", className: styles34.weekdayRow, children: WEEKDAY_LABEL_WEEK.map((d) => /* @__PURE__ */ jsx86("span", { role: "columnheader", className: styles34.weekday, "aria-hidden": true, children: formatWeekdayShort(d) }, d.getDay())) }),
3067
3217
  weeks.map((week) => {
3068
3218
  const firstDayOfWeek = week[0];
3069
3219
  if (!firstDayOfWeek) return null;
3070
- return /* @__PURE__ */ jsx82("div", { role: "row", className: styles33.week, children: week.map((date) => {
3220
+ return /* @__PURE__ */ jsx86("div", { role: "row", className: styles34.week, children: week.map((date) => {
3071
3221
  const isCurrentMonth = isSameMonth(date, displayedMonth);
3072
3222
  const isSelected = value !== null && isSameDay(date, value);
3073
3223
  const isToday = isSameDay(date, /* @__PURE__ */ new Date());
3074
3224
  const isFocusTarget = isSameDay(date, focusedDate);
3075
3225
  const disabled = !isWithinRange(date, minDate, maxDate);
3076
- return /* @__PURE__ */ jsx82("div", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ jsx82(
3226
+ return /* @__PURE__ */ jsx86("div", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ jsx86(
3077
3227
  "button",
3078
3228
  {
3079
3229
  type: "button",
@@ -3082,10 +3232,10 @@ function Calendar({
3082
3232
  "aria-current": isToday ? "date" : void 0,
3083
3233
  "aria-label": formatDateLabel(date),
3084
3234
  className: [
3085
- styles33.day,
3086
- !isCurrentMonth ? styles33.dayOutside : "",
3087
- isSelected ? styles33.daySelected : "",
3088
- isToday && !isSelected ? styles33.dayToday : ""
3235
+ styles34.day,
3236
+ !isCurrentMonth ? styles34.dayOutside : "",
3237
+ isSelected ? styles34.daySelected : "",
3238
+ isToday && !isSelected ? styles34.dayToday : ""
3089
3239
  ].filter(Boolean).join(" "),
3090
3240
  onClick: () => selectDate(date),
3091
3241
  onFocus: () => setFocusedDate(date),
@@ -3101,9 +3251,9 @@ function Calendar({
3101
3251
  }
3102
3252
 
3103
3253
  // src/components/DatePicker/DatePicker.tsx
3104
- import { useState as useState11 } from "react";
3105
- import styles34 from "./DatePicker.module.css";
3106
- import { Fragment as Fragment2, jsx as jsx83, jsxs as jsxs64 } from "react/jsx-runtime";
3254
+ import { useState as useState12 } from "react";
3255
+ import styles35 from "./DatePicker.module.css";
3256
+ import { Fragment as Fragment2, jsx as jsx87, jsxs as jsxs68 } from "react/jsx-runtime";
3107
3257
  var POPOVER_WIDTH = 320;
3108
3258
  function DatePicker({
3109
3259
  value,
@@ -3114,29 +3264,29 @@ function DatePicker({
3114
3264
  "aria-label": ariaLabel,
3115
3265
  disabled = false
3116
3266
  }) {
3117
- const [open, setOpen] = useState11(false);
3267
+ const [open, setOpen] = useState12(false);
3118
3268
  const isMobile = useIsMobile();
3119
3269
  function handleSelect(date) {
3120
3270
  onChange(date);
3121
3271
  setOpen(false);
3122
3272
  }
3123
- const trigger = /* @__PURE__ */ jsxs64(
3273
+ const trigger = /* @__PURE__ */ jsxs68(
3124
3274
  "button",
3125
3275
  {
3126
3276
  type: "button",
3127
- className: styles34.trigger,
3277
+ className: styles35.trigger,
3128
3278
  disabled,
3129
3279
  "aria-label": ariaLabel,
3130
3280
  "aria-haspopup": "dialog",
3131
3281
  "aria-expanded": open,
3132
3282
  onClick: () => setOpen((o) => !o),
3133
3283
  children: [
3134
- /* @__PURE__ */ jsx83("span", { className: value ? styles34.triggerValue : styles34.triggerPlaceholder, children: value ? formatDateShort(value) : placeholder }),
3135
- /* @__PURE__ */ jsx83(Icon, { name: "calendar", size: "sm", "aria-hidden": true })
3284
+ /* @__PURE__ */ jsx87("span", { className: value ? styles35.triggerValue : styles35.triggerPlaceholder, children: value ? formatDateShort(value) : placeholder }),
3285
+ /* @__PURE__ */ jsx87(Icon, { name: "calendar", size: "sm", "aria-hidden": true })
3136
3286
  ]
3137
3287
  }
3138
3288
  );
3139
- const calendar = /* @__PURE__ */ jsx83(
3289
+ const calendar = /* @__PURE__ */ jsx87(
3140
3290
  Calendar,
3141
3291
  {
3142
3292
  value,
@@ -3147,12 +3297,12 @@ function DatePicker({
3147
3297
  }
3148
3298
  );
3149
3299
  if (isMobile) {
3150
- return /* @__PURE__ */ jsxs64(Fragment2, { children: [
3300
+ return /* @__PURE__ */ jsxs68(Fragment2, { children: [
3151
3301
  trigger,
3152
- /* @__PURE__ */ jsx83(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx83("div", { className: styles34.drawerBody, children: calendar }) })
3302
+ /* @__PURE__ */ jsx87(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx87("div", { className: styles35.drawerBody, children: calendar }) })
3153
3303
  ] });
3154
3304
  }
3155
- return /* @__PURE__ */ jsx83(
3305
+ return /* @__PURE__ */ jsx87(
3156
3306
  Popover,
3157
3307
  {
3158
3308
  trigger,
@@ -3160,15 +3310,15 @@ function DatePicker({
3160
3310
  onClose: () => setOpen(false),
3161
3311
  "aria-label": ariaLabel,
3162
3312
  width: POPOVER_WIDTH,
3163
- children: /* @__PURE__ */ jsx83("div", { className: styles34.popoverBody, children: calendar })
3313
+ children: /* @__PURE__ */ jsx87("div", { className: styles35.popoverBody, children: calendar })
3164
3314
  }
3165
3315
  );
3166
3316
  }
3167
3317
 
3168
3318
  // src/components/SuggestionInput/SuggestionInput.tsx
3169
- import { useId as useId4, useRef as useRef11, useState as useState12 } from "react";
3170
- import styles35 from "./SuggestionInput.module.css";
3171
- import { Fragment as Fragment3, jsx as jsx84, jsxs as jsxs65 } from "react/jsx-runtime";
3319
+ import { useId as useId4, useRef as useRef12, useState as useState13 } from "react";
3320
+ import styles36 from "./SuggestionInput.module.css";
3321
+ import { Fragment as Fragment3, jsx as jsx88, jsxs as jsxs69 } from "react/jsx-runtime";
3172
3322
  function SuggestionInput({
3173
3323
  value,
3174
3324
  onChange,
@@ -3186,9 +3336,9 @@ function SuggestionInput({
3186
3336
  const generatedId = useId4();
3187
3337
  const inputId = id ?? generatedId;
3188
3338
  const listId = `${inputId}-suggestions`;
3189
- const inputRef = useRef11(null);
3190
- const [focused, setFocused] = useState12(false);
3191
- const [activeIndex, setActiveIndex] = useState12(-1);
3339
+ const inputRef = useRef12(null);
3340
+ const [focused, setFocused] = useState13(false);
3341
+ const [activeIndex, setActiveIndex] = useState13(-1);
3192
3342
  const showCreateRow = Boolean(onCreate && createLabel && value.trim());
3193
3343
  const rowCount = options.length + (showCreateRow ? 1 : 0);
3194
3344
  const open = focused && (rowCount > 0 || loading);
@@ -3225,7 +3375,7 @@ function SuggestionInput({
3225
3375
  close();
3226
3376
  }
3227
3377
  }
3228
- const trigger = /* @__PURE__ */ jsx84(
3378
+ const trigger = /* @__PURE__ */ jsx88(
3229
3379
  "input",
3230
3380
  {
3231
3381
  ref: inputRef,
@@ -3237,7 +3387,7 @@ function SuggestionInput({
3237
3387
  "aria-autocomplete": "list",
3238
3388
  "aria-activedescendant": activeIndex >= 0 ? `${listId}-option-${activeIndex}` : void 0,
3239
3389
  "aria-label": ariaLabel,
3240
- className: [styles35.input, className].filter(Boolean).join(" "),
3390
+ className: [styles36.input, className].filter(Boolean).join(" "),
3241
3391
  value,
3242
3392
  placeholder,
3243
3393
  disabled,
@@ -3250,7 +3400,7 @@ function SuggestionInput({
3250
3400
  onKeyDown: handleKeyDown
3251
3401
  }
3252
3402
  );
3253
- return /* @__PURE__ */ jsx84(
3403
+ return /* @__PURE__ */ jsx88(
3254
3404
  Popover,
3255
3405
  {
3256
3406
  trigger,
@@ -3258,29 +3408,29 @@ function SuggestionInput({
3258
3408
  onClose: close,
3259
3409
  width: "trigger",
3260
3410
  "aria-label": `${ariaLabel} suggestions`,
3261
- children: /* @__PURE__ */ jsx84("ul", { id: listId, role: "listbox", className: styles35.list, children: loading ? /* @__PURE__ */ jsx84("li", { className: styles35.status, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs65(Fragment3, { children: [
3262
- options.map((option, index) => /* @__PURE__ */ jsx84("li", { role: "none", children: /* @__PURE__ */ jsxs65(
3411
+ children: /* @__PURE__ */ jsx88("ul", { id: listId, role: "listbox", className: styles36.list, children: loading ? /* @__PURE__ */ jsx88("li", { className: styles36.status, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs69(Fragment3, { children: [
3412
+ options.map((option, index) => /* @__PURE__ */ jsx88("li", { role: "none", children: /* @__PURE__ */ jsxs69(
3263
3413
  "button",
3264
3414
  {
3265
3415
  id: `${listId}-option-${index}`,
3266
3416
  role: "option",
3267
3417
  "aria-selected": index === activeIndex,
3268
3418
  type: "button",
3269
- className: [styles35.option, index === activeIndex ? styles35.optionActive : ""].filter(Boolean).join(" "),
3419
+ className: [styles36.option, index === activeIndex ? styles36.optionActive : ""].filter(Boolean).join(" "),
3270
3420
  onMouseDown: (e) => {
3271
3421
  e.preventDefault();
3272
3422
  commitIndex(index);
3273
3423
  },
3274
3424
  children: [
3275
- option.icon && /* @__PURE__ */ jsx84("span", { className: styles35.optionIcon, children: option.icon }),
3276
- /* @__PURE__ */ jsx84("span", { className: styles35.optionLabel, children: option.label }),
3277
- option.meta && /* @__PURE__ */ jsx84("span", { className: styles35.optionMeta, children: option.meta })
3425
+ option.icon && /* @__PURE__ */ jsx88("span", { className: styles36.optionIcon, children: option.icon }),
3426
+ /* @__PURE__ */ jsx88("span", { className: styles36.optionLabel, children: option.label }),
3427
+ option.meta && /* @__PURE__ */ jsx88("span", { className: styles36.optionMeta, children: option.meta })
3278
3428
  ]
3279
3429
  }
3280
3430
  ) }, option.id)),
3281
- showCreateRow && createLabel && /* @__PURE__ */ jsxs65("li", { role: "none", children: [
3282
- options.length > 0 && /* @__PURE__ */ jsx84("div", { className: styles35.divider }),
3283
- /* @__PURE__ */ jsx84(
3431
+ showCreateRow && createLabel && /* @__PURE__ */ jsxs69("li", { role: "none", children: [
3432
+ options.length > 0 && /* @__PURE__ */ jsx88("div", { className: styles36.divider }),
3433
+ /* @__PURE__ */ jsx88(
3284
3434
  "button",
3285
3435
  {
3286
3436
  id: `${listId}-option-${options.length}`,
@@ -3288,9 +3438,9 @@ function SuggestionInput({
3288
3438
  "aria-selected": options.length === activeIndex,
3289
3439
  type: "button",
3290
3440
  className: [
3291
- styles35.option,
3292
- styles35.optionCreate,
3293
- options.length === activeIndex ? styles35.optionActive : ""
3441
+ styles36.option,
3442
+ styles36.optionCreate,
3443
+ options.length === activeIndex ? styles36.optionActive : ""
3294
3444
  ].filter(Boolean).join(" "),
3295
3445
  onMouseDown: (e) => {
3296
3446
  e.preventDefault();
@@ -3306,9 +3456,9 @@ function SuggestionInput({
3306
3456
  }
3307
3457
 
3308
3458
  // src/components/IconPicker/IconPicker.tsx
3309
- import { useState as useState13 } from "react";
3310
- import styles36 from "./IconPicker.module.css";
3311
- import { jsx as jsx85, jsxs as jsxs66 } from "react/jsx-runtime";
3459
+ import { useState as useState14 } from "react";
3460
+ import styles37 from "./IconPicker.module.css";
3461
+ import { jsx as jsx89, jsxs as jsxs70 } from "react/jsx-runtime";
3312
3462
  function IconPicker({
3313
3463
  value,
3314
3464
  onChange,
@@ -3318,24 +3468,24 @@ function IconPicker({
3318
3468
  disabled = false,
3319
3469
  className
3320
3470
  }) {
3321
- const [open, setOpen] = useState13(false);
3322
- const trigger = /* @__PURE__ */ jsxs66(
3471
+ const [open, setOpen] = useState14(false);
3472
+ const trigger = /* @__PURE__ */ jsxs70(
3323
3473
  "button",
3324
3474
  {
3325
3475
  type: "button",
3326
- className: [styles36.trigger, className].filter(Boolean).join(" "),
3476
+ className: [styles37.trigger, className].filter(Boolean).join(" "),
3327
3477
  onClick: () => setOpen((o) => !o),
3328
3478
  disabled,
3329
3479
  "aria-label": ariaLabel,
3330
3480
  "aria-haspopup": "true",
3331
3481
  "aria-expanded": open,
3332
3482
  children: [
3333
- value ? /* @__PURE__ */ jsx85(Icon, { name: value, size: "md", "aria-hidden": true }) : /* @__PURE__ */ jsx85("span", { className: styles36.placeholder, "aria-hidden": true, children: "?" }),
3334
- triggerLabel && /* @__PURE__ */ jsx85("span", { className: styles36.triggerLabel, children: triggerLabel })
3483
+ value ? /* @__PURE__ */ jsx89(Icon, { name: value, size: "md", "aria-hidden": true }) : /* @__PURE__ */ jsx89("span", { className: styles37.placeholder, "aria-hidden": true, children: "?" }),
3484
+ triggerLabel && /* @__PURE__ */ jsx89("span", { className: styles37.triggerLabel, children: triggerLabel })
3335
3485
  ]
3336
3486
  }
3337
3487
  );
3338
- return /* @__PURE__ */ jsx85(
3488
+ return /* @__PURE__ */ jsx89(
3339
3489
  Popover,
3340
3490
  {
3341
3491
  trigger,
@@ -3343,18 +3493,18 @@ function IconPicker({
3343
3493
  onClose: () => setOpen(false),
3344
3494
  width: 240,
3345
3495
  "aria-label": `${ariaLabel} options`,
3346
- children: /* @__PURE__ */ jsx85("div", { className: styles36.grid, role: "listbox", "aria-label": ariaLabel, children: options.map((name) => /* @__PURE__ */ jsx85(
3496
+ children: /* @__PURE__ */ jsx89("div", { className: styles37.grid, role: "listbox", "aria-label": ariaLabel, children: options.map((name) => /* @__PURE__ */ jsx89(
3347
3497
  "button",
3348
3498
  {
3349
3499
  type: "button",
3350
3500
  role: "option",
3351
3501
  "aria-selected": name === value,
3352
- className: [styles36.option, name === value ? styles36.optionSelected : ""].filter(Boolean).join(" "),
3502
+ className: [styles37.option, name === value ? styles37.optionSelected : ""].filter(Boolean).join(" "),
3353
3503
  onClick: () => {
3354
3504
  onChange(name);
3355
3505
  setOpen(false);
3356
3506
  },
3357
- children: /* @__PURE__ */ jsx85(Icon, { name, size: "md", "aria-hidden": true })
3507
+ children: /* @__PURE__ */ jsx89(Icon, { name, size: "md", "aria-hidden": true })
3358
3508
  },
3359
3509
  name
3360
3510
  )) })
@@ -3364,8 +3514,8 @@ function IconPicker({
3364
3514
 
3365
3515
  // src/components/QuantityStepper/QuantityStepper.tsx
3366
3516
  import { useId as useId5 } from "react";
3367
- import styles37 from "./QuantityStepper.module.css";
3368
- import { jsx as jsx86, jsxs as jsxs67 } from "react/jsx-runtime";
3517
+ import styles38 from "./QuantityStepper.module.css";
3518
+ import { jsx as jsx90, jsxs as jsxs71 } from "react/jsx-runtime";
3369
3519
  function QuantityStepper({
3370
3520
  value,
3371
3521
  onChange,
@@ -3392,24 +3542,24 @@ function QuantityStepper({
3392
3542
  }
3393
3543
  const decrementDisabled = disabled || min !== void 0 && value <= min;
3394
3544
  const incrementDisabled = disabled || max !== void 0 && value >= max;
3395
- return /* @__PURE__ */ jsxs67("div", { className: [styles37.root, className].filter(Boolean).join(" "), children: [
3396
- /* @__PURE__ */ jsx86(
3545
+ return /* @__PURE__ */ jsxs71("div", { className: [styles38.root, className].filter(Boolean).join(" "), children: [
3546
+ /* @__PURE__ */ jsx90(
3397
3547
  "button",
3398
3548
  {
3399
3549
  type: "button",
3400
- className: styles37.button,
3550
+ className: styles38.button,
3401
3551
  onClick: () => onChange(clamp(value - step)),
3402
3552
  disabled: decrementDisabled,
3403
3553
  "aria-label": `Decrease ${ariaLabel}`,
3404
3554
  children: "\u2212"
3405
3555
  }
3406
3556
  ),
3407
- /* @__PURE__ */ jsx86(
3557
+ /* @__PURE__ */ jsx90(
3408
3558
  "input",
3409
3559
  {
3410
3560
  id: inputId,
3411
3561
  type: "number",
3412
- className: styles37.input,
3562
+ className: styles38.input,
3413
3563
  value,
3414
3564
  onChange: handleInputChange,
3415
3565
  min,
@@ -3419,12 +3569,12 @@ function QuantityStepper({
3419
3569
  "aria-label": ariaLabel
3420
3570
  }
3421
3571
  ),
3422
- unit && /* @__PURE__ */ jsx86("span", { className: styles37.unit, "aria-hidden": true, children: unit }),
3423
- /* @__PURE__ */ jsx86(
3572
+ unit && /* @__PURE__ */ jsx90("span", { className: styles38.unit, "aria-hidden": true, children: unit }),
3573
+ /* @__PURE__ */ jsx90(
3424
3574
  "button",
3425
3575
  {
3426
3576
  type: "button",
3427
- className: styles37.button,
3577
+ className: styles38.button,
3428
3578
  onClick: () => onChange(clamp(value + step)),
3429
3579
  disabled: incrementDisabled,
3430
3580
  "aria-label": `Increase ${ariaLabel}`,
@@ -3435,8 +3585,8 @@ function QuantityStepper({
3435
3585
  }
3436
3586
 
3437
3587
  // src/components/CheckableListRow/CheckableListRow.tsx
3438
- import styles38 from "./CheckableListRow.module.css";
3439
- import { jsx as jsx87, jsxs as jsxs68 } from "react/jsx-runtime";
3588
+ import styles39 from "./CheckableListRow.module.css";
3589
+ import { jsx as jsx91, jsxs as jsxs72 } from "react/jsx-runtime";
3440
3590
  function CheckableListRow({
3441
3591
  checked,
3442
3592
  onCheckedChange,
@@ -3455,8 +3605,8 @@ function CheckableListRow({
3455
3605
  toggle();
3456
3606
  }
3457
3607
  }
3458
- return /* @__PURE__ */ jsxs68("div", { className: [styles38.row, className].filter(Boolean).join(" "), children: [
3459
- /* @__PURE__ */ jsxs68(
3608
+ return /* @__PURE__ */ jsxs72("div", { className: [styles39.row, className].filter(Boolean).join(" "), children: [
3609
+ /* @__PURE__ */ jsxs72(
3460
3610
  "div",
3461
3611
  {
3462
3612
  role: "checkbox",
@@ -3464,11 +3614,11 @@ function CheckableListRow({
3464
3614
  "aria-label": label,
3465
3615
  "aria-disabled": disabled || void 0,
3466
3616
  tabIndex: disabled ? -1 : 0,
3467
- className: styles38.tapTarget,
3617
+ className: styles39.tapTarget,
3468
3618
  onClick: toggle,
3469
3619
  onKeyDown: handleKeyDown,
3470
3620
  children: [
3471
- /* @__PURE__ */ jsx87("span", { className: [styles38.box, checked ? styles38.checked : ""].filter(Boolean).join(" "), children: checked && /* @__PURE__ */ jsx87("svg", { className: styles38.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx87(
3621
+ /* @__PURE__ */ jsx91("span", { className: [styles39.box, checked ? styles39.checked : ""].filter(Boolean).join(" "), children: checked && /* @__PURE__ */ jsx91("svg", { className: styles39.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx91(
3472
3622
  "path",
3473
3623
  {
3474
3624
  d: "M1 4l3 3 5-6",
@@ -3478,17 +3628,122 @@ function CheckableListRow({
3478
3628
  strokeLinejoin: "round"
3479
3629
  }
3480
3630
  ) }) }),
3481
- icon && /* @__PURE__ */ jsx87("span", { className: styles38.icon, children: icon }),
3482
- /* @__PURE__ */ jsx87("span", { className: [styles38.label, checked ? styles38.struck : ""].filter(Boolean).join(" "), children: label })
3631
+ icon && /* @__PURE__ */ jsx91("span", { className: styles39.icon, children: icon }),
3632
+ /* @__PURE__ */ jsx91("span", { className: [styles39.label, checked ? styles39.struck : ""].filter(Boolean).join(" "), children: label })
3483
3633
  ]
3484
3634
  }
3485
3635
  ),
3486
- trailing && /* @__PURE__ */ jsx87("span", { className: styles38.trailing, children: trailing })
3636
+ trailing && /* @__PURE__ */ jsx91("span", { className: styles39.trailing, children: trailing })
3637
+ ] });
3638
+ }
3639
+
3640
+ // src/components/CurrencyInput/CurrencyInput.tsx
3641
+ import { useState as useState15 } from "react";
3642
+ import { jsx as jsx92 } from "react/jsx-runtime";
3643
+ function centsToText(cents) {
3644
+ return (cents / 100).toFixed(2);
3645
+ }
3646
+ function textToCents(text) {
3647
+ const trimmed = text.trim();
3648
+ if (!trimmed) return null;
3649
+ const parsed = Number(trimmed);
3650
+ if (!Number.isFinite(parsed)) return null;
3651
+ return Math.round(parsed * 100);
3652
+ }
3653
+ function CurrencyInput({ valueCents, onValueChange, ...rest }) {
3654
+ const [text, setText] = useState15(() => valueCents != null ? centsToText(valueCents) : "");
3655
+ if (textToCents(text) !== valueCents) {
3656
+ setText(valueCents != null ? centsToText(valueCents) : "");
3657
+ }
3658
+ return /* @__PURE__ */ jsx92(
3659
+ Input,
3660
+ {
3661
+ ...rest,
3662
+ type: "text",
3663
+ inputMode: "decimal",
3664
+ value: text,
3665
+ onChange: (e) => {
3666
+ const next = e.currentTarget.value;
3667
+ setText(next);
3668
+ onValueChange(textToCents(next));
3669
+ }
3670
+ }
3671
+ );
3672
+ }
3673
+
3674
+ // src/components/BalanceChip/BalanceChip.tsx
3675
+ import styles40 from "./BalanceChip.module.css";
3676
+ import { jsx as jsx93 } from "react/jsx-runtime";
3677
+ function formatAbsCents(cents) {
3678
+ return (Math.abs(cents) / 100).toFixed(2);
3679
+ }
3680
+ function BalanceChip({ amountCents, currency, className }) {
3681
+ const direction = amountCents > 0 ? "owed" : amountCents < 0 ? "owes" : "settled";
3682
+ const text = direction === "settled" ? "Settled up" : `${direction === "owed" ? "Owed" : "Owes"} ${currency} ${formatAbsCents(amountCents)}`;
3683
+ return /* @__PURE__ */ jsx93("span", { className: [styles40.chip, styles40[direction], className].filter(Boolean).join(" "), children: text });
3684
+ }
3685
+
3686
+ // src/components/SplitMethodSelector/SplitMethodSelector.tsx
3687
+ import { jsx as jsx94 } from "react/jsx-runtime";
3688
+ var OPTIONS = [
3689
+ { label: "Equal", value: "equal" },
3690
+ { label: "Amount", value: "amount" },
3691
+ { label: "Percentage", value: "percentage" },
3692
+ { label: "Shares", value: "shares" }
3693
+ ];
3694
+ function SplitMethodSelector({
3695
+ value,
3696
+ onChange,
3697
+ size = "sm",
3698
+ "aria-label": ariaLabel = "Split method"
3699
+ }) {
3700
+ return /* @__PURE__ */ jsx94(
3701
+ SegmentedControl,
3702
+ {
3703
+ value,
3704
+ onChange,
3705
+ options: OPTIONS,
3706
+ size,
3707
+ "aria-label": ariaLabel
3708
+ }
3709
+ );
3710
+ }
3711
+
3712
+ // src/components/MemberMultiSelect/MemberMultiSelect.tsx
3713
+ import styles41 from "./MemberMultiSelect.module.css";
3714
+ import { jsx as jsx95, jsxs as jsxs73 } from "react/jsx-runtime";
3715
+ function MemberMultiSelect({
3716
+ options,
3717
+ selectedIds,
3718
+ onToggle,
3719
+ renderTrailing,
3720
+ label,
3721
+ hint,
3722
+ className
3723
+ }) {
3724
+ return /* @__PURE__ */ jsxs73("div", { className: [styles41.group, className].filter(Boolean).join(" "), children: [
3725
+ label && /* @__PURE__ */ jsx95("span", { className: styles41.label, children: label }),
3726
+ options.map((option) => {
3727
+ const checked = selectedIds.has(option.id);
3728
+ return /* @__PURE__ */ jsxs73("div", { className: styles41.row, children: [
3729
+ /* @__PURE__ */ jsx95(
3730
+ Checkbox,
3731
+ {
3732
+ checked,
3733
+ onChange: (next) => onToggle(option.id, next),
3734
+ label: option.label
3735
+ }
3736
+ ),
3737
+ checked && renderTrailing && /* @__PURE__ */ jsx95("span", { className: styles41.trailing, children: renderTrailing(option.id) })
3738
+ ] }, option.id);
3739
+ }),
3740
+ hint && /* @__PURE__ */ jsx95("span", { className: styles41.hint, children: hint })
3487
3741
  ] });
3488
3742
  }
3489
3743
  export {
3490
3744
  Avatar,
3491
3745
  Badge,
3746
+ BalanceChip,
3492
3747
  Button,
3493
3748
  Calendar,
3494
3749
  Card,
@@ -3496,16 +3751,19 @@ export {
3496
3751
  Checkbox,
3497
3752
  CodeTextarea,
3498
3753
  ConfirmDialog,
3754
+ CurrencyInput,
3499
3755
  DatePicker,
3500
3756
  Dialog,
3501
3757
  DragHandleRow,
3502
3758
  Drawer,
3503
3759
  EmptyState,
3760
+ FileDropzone,
3504
3761
  FormField,
3505
3762
  Icon,
3506
3763
  IconPicker,
3507
3764
  Input,
3508
3765
  MOBILE_BREAKPOINT_PX,
3766
+ MemberMultiSelect,
3509
3767
  Menu,
3510
3768
  NavTabs,
3511
3769
  OverlayHeader,
@@ -3516,6 +3774,7 @@ export {
3516
3774
  Select,
3517
3775
  Sheet,
3518
3776
  Spinner,
3777
+ SplitMethodSelector,
3519
3778
  SplitPane,
3520
3779
  StatusBadge,
3521
3780
  SuggestionInput,
@@ -3526,6 +3785,7 @@ export {
3526
3785
  ToastProvider,
3527
3786
  Toggle,
3528
3787
  Tooltip,
3788
+ useCommitOnEnterOrBlur,
3529
3789
  useDoubleTapHandler,
3530
3790
  useIsMobile,
3531
3791
  useLongPress,