@sovereignfs/ui 0.40.0 → 0.45.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 (186) hide show
  1. package/dist/Accordion.module.css +3 -0
  2. package/dist/Alert.module.css +62 -0
  3. package/dist/AspectRatio.module.css +15 -0
  4. package/dist/Badge.module.css +75 -9
  5. package/dist/BalanceChip.module.css +32 -0
  6. package/dist/Breadcrumb.module.css +49 -0
  7. package/dist/Button.module.css +12 -3
  8. package/dist/ButtonGroup.module.css +29 -0
  9. package/dist/Card.module.css +6 -0
  10. package/dist/Checkbox.module.css +3 -1
  11. package/dist/Collapsible.module.css +70 -0
  12. package/dist/Combobox.module.css +122 -0
  13. package/dist/Command.module.css +80 -0
  14. package/dist/ConfirmDialog.module.css +5 -1
  15. package/dist/DataTable.module.css +28 -0
  16. package/dist/DatePicker.module.css +6 -2
  17. package/dist/Dialog.module.css +3 -0
  18. package/dist/HoverCard.module.css +3 -0
  19. package/dist/Input.module.css +6 -1
  20. package/dist/Item.module.css +70 -0
  21. package/dist/Kbd.module.css +14 -0
  22. package/dist/Label.module.css +11 -0
  23. package/dist/Marker.module.css +33 -0
  24. package/dist/MemberMultiSelect.module.css +27 -0
  25. package/dist/Menu.module.css +8 -1
  26. package/dist/Message.module.css +99 -0
  27. package/dist/MessageScroller.module.css +54 -0
  28. package/dist/NavigationMenu.module.css +53 -0
  29. package/dist/Pagination.module.css +98 -0
  30. package/dist/Progress.module.css +20 -0
  31. package/dist/RadioGroup.module.css +88 -0
  32. package/dist/Resizable.module.css +70 -0
  33. package/dist/ScrollArea.module.css +20 -0
  34. package/dist/Select.module.css +7 -3
  35. package/dist/Slider.module.css +95 -0
  36. package/dist/Table.module.css +45 -0
  37. package/dist/Tabs.module.css +6 -1
  38. package/dist/Toggle.module.css +6 -1
  39. package/dist/Typography.module.css +47 -0
  40. package/dist/index.d.ts +698 -5
  41. package/dist/index.js +1938 -482
  42. package/dist/tokens/primitives.css +22 -8
  43. package/package.json +1 -1
  44. package/src/components/Accordion/Accordion.module.css +3 -0
  45. package/src/components/Accordion/Accordion.stories.tsx +110 -0
  46. package/src/components/Accordion/Accordion.tsx +53 -0
  47. package/src/components/Accordion/__tests__/Accordion.test.tsx +61 -0
  48. package/src/components/Alert/Alert.module.css +62 -0
  49. package/src/components/Alert/Alert.stories.tsx +96 -0
  50. package/src/components/Alert/Alert.tsx +58 -0
  51. package/src/components/Alert/__tests__/Alert.test.tsx +75 -0
  52. package/src/components/AspectRatio/AspectRatio.module.css +15 -0
  53. package/src/components/AspectRatio/AspectRatio.stories.tsx +78 -0
  54. package/src/components/AspectRatio/AspectRatio.tsx +21 -0
  55. package/src/components/AspectRatio/__tests__/AspectRatio.test.tsx +27 -0
  56. package/src/components/Badge/Badge.module.css +75 -9
  57. package/src/components/Badge/Badge.stories.tsx +109 -1
  58. package/src/components/Badge/Badge.tsx +30 -2
  59. package/src/components/Badge/__tests__/Badge.test.tsx +26 -2
  60. package/src/components/BalanceChip/BalanceChip.module.css +32 -0
  61. package/src/components/BalanceChip/BalanceChip.stories.tsx +45 -0
  62. package/src/components/BalanceChip/BalanceChip.tsx +33 -0
  63. package/src/components/Breadcrumb/Breadcrumb.module.css +49 -0
  64. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +47 -0
  65. package/src/components/Breadcrumb/Breadcrumb.tsx +57 -0
  66. package/src/components/Breadcrumb/__tests__/Breadcrumb.test.tsx +52 -0
  67. package/src/components/Button/Button.module.css +12 -3
  68. package/src/components/Button/Button.stories.tsx +3 -2
  69. package/src/components/Button/Button.tsx +1 -1
  70. package/src/components/Button/__tests__/Button.test.tsx +10 -0
  71. package/src/components/ButtonGroup/ButtonGroup.module.css +29 -0
  72. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +57 -0
  73. package/src/components/ButtonGroup/ButtonGroup.tsx +27 -0
  74. package/src/components/ButtonGroup/__tests__/ButtonGroup.test.tsx +29 -0
  75. package/src/components/Card/Card.module.css +6 -0
  76. package/src/components/Checkbox/Checkbox.module.css +3 -1
  77. package/src/components/Collapsible/Collapsible.module.css +70 -0
  78. package/src/components/Collapsible/Collapsible.stories.tsx +62 -0
  79. package/src/components/Collapsible/Collapsible.tsx +66 -0
  80. package/src/components/Collapsible/__tests__/Collapsible.test.tsx +71 -0
  81. package/src/components/Combobox/Combobox.module.css +122 -0
  82. package/src/components/Combobox/Combobox.stories.tsx +79 -0
  83. package/src/components/Combobox/Combobox.tsx +186 -0
  84. package/src/components/Combobox/__tests__/Combobox.test.tsx +158 -0
  85. package/src/components/Command/Command.module.css +80 -0
  86. package/src/components/Command/Command.stories.tsx +104 -0
  87. package/src/components/Command/Command.tsx +168 -0
  88. package/src/components/Command/__tests__/Command.test.tsx +162 -0
  89. package/src/components/ConfirmDialog/ConfirmDialog.module.css +5 -1
  90. package/src/components/ContextMenu/ContextMenu.stories.tsx +81 -0
  91. package/src/components/ContextMenu/ContextMenu.tsx +100 -0
  92. package/src/components/ContextMenu/__tests__/ContextMenu.test.tsx +87 -0
  93. package/src/components/CurrencyInput/CurrencyInput.stories.tsx +50 -0
  94. package/src/components/CurrencyInput/CurrencyInput.tsx +60 -0
  95. package/src/components/DataTable/DataTable.module.css +28 -0
  96. package/src/components/DataTable/DataTable.stories.tsx +74 -0
  97. package/src/components/DataTable/DataTable.tsx +154 -0
  98. package/src/components/DataTable/__tests__/DataTable.test.tsx +123 -0
  99. package/src/components/DatePicker/DatePicker.module.css +6 -2
  100. package/src/components/Dialog/Dialog.module.css +3 -0
  101. package/src/components/HoverCard/HoverCard.module.css +3 -0
  102. package/src/components/HoverCard/HoverCard.stories.tsx +66 -0
  103. package/src/components/HoverCard/HoverCard.tsx +111 -0
  104. package/src/components/HoverCard/__tests__/HoverCard.test.tsx +99 -0
  105. package/src/components/Icon/icons/circle-check.tsx +21 -0
  106. package/src/components/Icon/icons/circle-x.tsx +22 -0
  107. package/src/components/Icon/icons/index.ts +8 -0
  108. package/src/components/Input/Input.module.css +6 -1
  109. package/src/components/Item/Item.module.css +70 -0
  110. package/src/components/Item/Item.stories.tsx +62 -0
  111. package/src/components/Item/Item.tsx +54 -0
  112. package/src/components/Item/__tests__/Item.test.tsx +39 -0
  113. package/src/components/Kbd/Kbd.module.css +14 -0
  114. package/src/components/Kbd/Kbd.stories.tsx +32 -0
  115. package/src/components/Kbd/Kbd.tsx +12 -0
  116. package/src/components/Kbd/__tests__/Kbd.test.tsx +14 -0
  117. package/src/components/Label/Label.module.css +11 -0
  118. package/src/components/Label/Label.stories.tsx +40 -0
  119. package/src/components/Label/Label.tsx +24 -0
  120. package/src/components/Label/__tests__/Label.test.tsx +32 -0
  121. package/src/components/Marker/Marker.module.css +33 -0
  122. package/src/components/Marker/Marker.stories.tsx +39 -0
  123. package/src/components/Marker/Marker.tsx +34 -0
  124. package/src/components/Marker/__tests__/Marker.test.tsx +23 -0
  125. package/src/components/MemberMultiSelect/MemberMultiSelect.module.css +27 -0
  126. package/src/components/MemberMultiSelect/MemberMultiSelect.stories.tsx +74 -0
  127. package/src/components/MemberMultiSelect/MemberMultiSelect.tsx +67 -0
  128. package/src/components/Menu/Menu.module.css +8 -1
  129. package/src/components/Menu/Menu.tsx +30 -8
  130. package/src/components/Menubar/Menubar.stories.tsx +52 -0
  131. package/src/components/Menubar/Menubar.tsx +42 -0
  132. package/src/components/Menubar/__tests__/Menubar.test.tsx +45 -0
  133. package/src/components/Message/Message.module.css +99 -0
  134. package/src/components/Message/Message.stories.tsx +79 -0
  135. package/src/components/Message/Message.tsx +41 -0
  136. package/src/components/Message/__tests__/Message.test.tsx +46 -0
  137. package/src/components/MessageScroller/MessageScroller.module.css +54 -0
  138. package/src/components/MessageScroller/MessageScroller.stories.tsx +84 -0
  139. package/src/components/MessageScroller/MessageScroller.tsx +72 -0
  140. package/src/components/MessageScroller/__tests__/MessageScroller.test.tsx +105 -0
  141. package/src/components/NavigationMenu/NavigationMenu.module.css +53 -0
  142. package/src/components/NavigationMenu/NavigationMenu.stories.tsx +58 -0
  143. package/src/components/NavigationMenu/NavigationMenu.tsx +125 -0
  144. package/src/components/NavigationMenu/__tests__/NavigationMenu.test.tsx +93 -0
  145. package/src/components/Pagination/Pagination.module.css +98 -0
  146. package/src/components/Pagination/Pagination.stories.tsx +49 -0
  147. package/src/components/Pagination/Pagination.tsx +87 -0
  148. package/src/components/Pagination/__tests__/Pagination.test.tsx +56 -0
  149. package/src/components/Progress/Progress.module.css +20 -0
  150. package/src/components/Progress/Progress.stories.tsx +40 -0
  151. package/src/components/Progress/Progress.tsx +35 -0
  152. package/src/components/Progress/__tests__/Progress.test.tsx +31 -0
  153. package/src/components/RadioGroup/RadioGroup.module.css +88 -0
  154. package/src/components/RadioGroup/RadioGroup.stories.tsx +69 -0
  155. package/src/components/RadioGroup/RadioGroup.tsx +99 -0
  156. package/src/components/RadioGroup/__tests__/RadioGroup.test.tsx +59 -0
  157. package/src/components/Resizable/Resizable.module.css +70 -0
  158. package/src/components/Resizable/Resizable.stories.tsx +82 -0
  159. package/src/components/Resizable/Resizable.tsx +313 -0
  160. package/src/components/Resizable/__tests__/Resizable.test.tsx +128 -0
  161. package/src/components/ScrollArea/ScrollArea.module.css +20 -0
  162. package/src/components/ScrollArea/ScrollArea.stories.tsx +57 -0
  163. package/src/components/ScrollArea/ScrollArea.tsx +27 -0
  164. package/src/components/ScrollArea/__tests__/ScrollArea.test.tsx +39 -0
  165. package/src/components/Select/Select.module.css +7 -3
  166. package/src/components/Slider/Slider.module.css +95 -0
  167. package/src/components/Slider/Slider.stories.tsx +64 -0
  168. package/src/components/Slider/Slider.tsx +77 -0
  169. package/src/components/Slider/__tests__/Slider.test.tsx +45 -0
  170. package/src/components/SplitMethodSelector/SplitMethodSelector.stories.tsx +33 -0
  171. package/src/components/SplitMethodSelector/SplitMethodSelector.tsx +43 -0
  172. package/src/components/Table/Table.module.css +45 -0
  173. package/src/components/Table/Table.stories.tsx +125 -0
  174. package/src/components/Table/Table.tsx +51 -0
  175. package/src/components/Table/__tests__/Table.test.tsx +50 -0
  176. package/src/components/Tabs/Tabs.module.css +6 -1
  177. package/src/components/Toggle/Toggle.module.css +6 -1
  178. package/src/components/Typography/Typography.module.css +47 -0
  179. package/src/components/Typography/Typography.stories.tsx +62 -0
  180. package/src/components/Typography/Typography.tsx +30 -0
  181. package/src/components/Typography/__tests__/Typography.test.tsx +34 -0
  182. package/src/index.ts +92 -1
  183. package/src/stories/DesignSystemOverview.stories.tsx +706 -2
  184. package/src/stories/MobilePatterns.stories.tsx +8 -2
  185. package/src/stories/TokenGallery.stories.tsx +112 -16
  186. package/src/tokens/primitives.css +22 -8
package/dist/index.js CHANGED
@@ -19,14 +19,32 @@ var STATUS_CHIP_CLASS = {
19
19
  pending: styles.chipAmber,
20
20
  neutral: styles.chipNeutral
21
21
  };
22
- function Badge({ variant = "role", status = "neutral", children }) {
22
+ function Badge({
23
+ variant = "role",
24
+ size = "md",
25
+ status = "neutral",
26
+ uppercase = true,
27
+ children
28
+ }) {
23
29
  const isStatus = variant === "status";
24
30
  const dotClass = isStatus ? STATUS_DOT_CLASS[status] : void 0;
25
31
  const chipClass = isStatus ? STATUS_CHIP_CLASS[status] : void 0;
26
- return /* @__PURE__ */ jsxs("span", { className: [styles.badge, styles[variant], chipClass].filter(Boolean).join(" "), children: [
27
- isStatus && /* @__PURE__ */ jsx("span", { className: [styles.dot, dotClass].join(" "), "aria-hidden": true }),
28
- children
29
- ] });
32
+ return /* @__PURE__ */ jsxs(
33
+ "span",
34
+ {
35
+ className: [
36
+ styles.badge,
37
+ styles[variant],
38
+ styles[size],
39
+ chipClass,
40
+ uppercase && styles.uppercase
41
+ ].filter(Boolean).join(" "),
42
+ children: [
43
+ isStatus && /* @__PURE__ */ jsx("span", { className: [styles.dot, dotClass].join(" "), "aria-hidden": true }),
44
+ children
45
+ ]
46
+ }
47
+ );
30
48
  }
31
49
 
32
50
  // src/components/Icon/icons/house.tsx
@@ -591,9 +609,9 @@ function AlertTriangleIcon(props) {
591
609
  );
592
610
  }
593
611
 
594
- // src/components/Icon/icons/calendar.tsx
612
+ // src/components/Icon/icons/circle-check.tsx
595
613
  import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
596
- function CalendarIcon(props) {
614
+ function CircleCheckIcon(props) {
597
615
  return /* @__PURE__ */ jsxs21(
598
616
  "svg",
599
617
  {
@@ -606,18 +624,16 @@ function CalendarIcon(props) {
606
624
  strokeLinejoin: "round",
607
625
  ...props,
608
626
  children: [
609
- /* @__PURE__ */ jsx28("path", { d: "M8 2v4" }),
610
- /* @__PURE__ */ jsx28("path", { d: "M16 2v4" }),
611
- /* @__PURE__ */ jsx28("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
612
- /* @__PURE__ */ jsx28("path", { d: "M3 10h18" })
627
+ /* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "10" }),
628
+ /* @__PURE__ */ jsx28("path", { d: "m9 12 2 2 4-4" })
613
629
  ]
614
630
  }
615
631
  );
616
632
  }
617
633
 
618
- // src/components/Icon/icons/sliders-horizontal.tsx
634
+ // src/components/Icon/icons/circle-x.tsx
619
635
  import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
620
- function SlidersHorizontalIcon(props) {
636
+ function CircleXIcon(props) {
621
637
  return /* @__PURE__ */ jsxs22(
622
638
  "svg",
623
639
  {
@@ -630,23 +646,17 @@ function SlidersHorizontalIcon(props) {
630
646
  strokeLinejoin: "round",
631
647
  ...props,
632
648
  children: [
633
- /* @__PURE__ */ jsx29("path", { d: "M10 5H3" }),
634
- /* @__PURE__ */ jsx29("path", { d: "M12 19H3" }),
635
- /* @__PURE__ */ jsx29("path", { d: "M14 3v4" }),
636
- /* @__PURE__ */ jsx29("path", { d: "M16 17v4" }),
637
- /* @__PURE__ */ jsx29("path", { d: "M21 12h-9" }),
638
- /* @__PURE__ */ jsx29("path", { d: "M21 19h-5" }),
639
- /* @__PURE__ */ jsx29("path", { d: "M21 5h-7" }),
640
- /* @__PURE__ */ jsx29("path", { d: "M8 10v4" }),
641
- /* @__PURE__ */ jsx29("path", { d: "M8 12H3" })
649
+ /* @__PURE__ */ jsx29("circle", { cx: "12", cy: "12", r: "10" }),
650
+ /* @__PURE__ */ jsx29("path", { d: "m15 9-6 6" }),
651
+ /* @__PURE__ */ jsx29("path", { d: "m9 9 6 6" })
642
652
  ]
643
653
  }
644
654
  );
645
655
  }
646
656
 
647
- // src/components/Icon/icons/ellipsis-vertical.tsx
657
+ // src/components/Icon/icons/calendar.tsx
648
658
  import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
649
- function EllipsisVerticalIcon(props) {
659
+ function CalendarIcon(props) {
650
660
  return /* @__PURE__ */ jsxs23(
651
661
  "svg",
652
662
  {
@@ -659,17 +669,18 @@ function EllipsisVerticalIcon(props) {
659
669
  strokeLinejoin: "round",
660
670
  ...props,
661
671
  children: [
662
- /* @__PURE__ */ jsx30("circle", { cx: "12", cy: "12", r: "1" }),
663
- /* @__PURE__ */ jsx30("circle", { cx: "12", cy: "5", r: "1" }),
664
- /* @__PURE__ */ jsx30("circle", { cx: "12", cy: "19", r: "1" })
672
+ /* @__PURE__ */ jsx30("path", { d: "M8 2v4" }),
673
+ /* @__PURE__ */ jsx30("path", { d: "M16 2v4" }),
674
+ /* @__PURE__ */ jsx30("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
675
+ /* @__PURE__ */ jsx30("path", { d: "M3 10h18" })
665
676
  ]
666
677
  }
667
678
  );
668
679
  }
669
680
 
670
- // src/components/Icon/icons/file.tsx
681
+ // src/components/Icon/icons/sliders-horizontal.tsx
671
682
  import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
672
- function FileIcon(props) {
683
+ function SlidersHorizontalIcon(props) {
673
684
  return /* @__PURE__ */ jsxs24(
674
685
  "svg",
675
686
  {
@@ -682,16 +693,23 @@ function FileIcon(props) {
682
693
  strokeLinejoin: "round",
683
694
  ...props,
684
695
  children: [
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" })
696
+ /* @__PURE__ */ jsx31("path", { d: "M10 5H3" }),
697
+ /* @__PURE__ */ jsx31("path", { d: "M12 19H3" }),
698
+ /* @__PURE__ */ jsx31("path", { d: "M14 3v4" }),
699
+ /* @__PURE__ */ jsx31("path", { d: "M16 17v4" }),
700
+ /* @__PURE__ */ jsx31("path", { d: "M21 12h-9" }),
701
+ /* @__PURE__ */ jsx31("path", { d: "M21 19h-5" }),
702
+ /* @__PURE__ */ jsx31("path", { d: "M21 5h-7" }),
703
+ /* @__PURE__ */ jsx31("path", { d: "M8 10v4" }),
704
+ /* @__PURE__ */ jsx31("path", { d: "M8 12H3" })
687
705
  ]
688
706
  }
689
707
  );
690
708
  }
691
709
 
692
- // src/components/Icon/icons/upload.tsx
710
+ // src/components/Icon/icons/ellipsis-vertical.tsx
693
711
  import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
694
- function UploadIcon(props) {
712
+ function EllipsisVerticalIcon(props) {
695
713
  return /* @__PURE__ */ jsxs25(
696
714
  "svg",
697
715
  {
@@ -704,17 +722,17 @@ function UploadIcon(props) {
704
722
  strokeLinejoin: "round",
705
723
  ...props,
706
724
  children: [
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" })
725
+ /* @__PURE__ */ jsx32("circle", { cx: "12", cy: "12", r: "1" }),
726
+ /* @__PURE__ */ jsx32("circle", { cx: "12", cy: "5", r: "1" }),
727
+ /* @__PURE__ */ jsx32("circle", { cx: "12", cy: "19", r: "1" })
710
728
  ]
711
729
  }
712
730
  );
713
731
  }
714
732
 
715
- // src/components/Icon/icons/external-link.tsx
733
+ // src/components/Icon/icons/file.tsx
716
734
  import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
717
- function ExternalLinkIcon(props) {
735
+ function FileIcon(props) {
718
736
  return /* @__PURE__ */ jsxs26(
719
737
  "svg",
720
738
  {
@@ -727,17 +745,16 @@ function ExternalLinkIcon(props) {
727
745
  strokeLinejoin: "round",
728
746
  ...props,
729
747
  children: [
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" })
748
+ /* @__PURE__ */ jsx33("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" }),
749
+ /* @__PURE__ */ jsx33("path", { d: "M14 2v5a1 1 0 0 0 1 1h5" })
733
750
  ]
734
751
  }
735
752
  );
736
753
  }
737
754
 
738
- // src/components/Icon/icons/banana.tsx
755
+ // src/components/Icon/icons/upload.tsx
739
756
  import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
740
- function BananaIcon(props) {
757
+ function UploadIcon(props) {
741
758
  return /* @__PURE__ */ jsxs27(
742
759
  "svg",
743
760
  {
@@ -750,16 +767,17 @@ function BananaIcon(props) {
750
767
  strokeLinejoin: "round",
751
768
  ...props,
752
769
  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" })
770
+ /* @__PURE__ */ jsx34("path", { d: "M12 3v12" }),
771
+ /* @__PURE__ */ jsx34("path", { d: "m17 8-5-5-5 5" }),
772
+ /* @__PURE__ */ jsx34("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" })
755
773
  ]
756
774
  }
757
775
  );
758
776
  }
759
777
 
760
- // src/components/Icon/icons/apple.tsx
778
+ // src/components/Icon/icons/external-link.tsx
761
779
  import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
762
- function AppleIcon(props) {
780
+ function ExternalLinkIcon(props) {
763
781
  return /* @__PURE__ */ jsxs28(
764
782
  "svg",
765
783
  {
@@ -772,16 +790,17 @@ function AppleIcon(props) {
772
790
  strokeLinejoin: "round",
773
791
  ...props,
774
792
  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" })
793
+ /* @__PURE__ */ jsx35("path", { d: "M15 3h6v6" }),
794
+ /* @__PURE__ */ jsx35("path", { d: "M10 14 21 3" }),
795
+ /* @__PURE__ */ jsx35("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" })
777
796
  ]
778
797
  }
779
798
  );
780
799
  }
781
800
 
782
- // src/components/Icon/icons/carrot.tsx
801
+ // src/components/Icon/icons/banana.tsx
783
802
  import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
784
- function CarrotIcon(props) {
803
+ function BananaIcon(props) {
785
804
  return /* @__PURE__ */ jsxs29(
786
805
  "svg",
787
806
  {
@@ -794,18 +813,62 @@ function CarrotIcon(props) {
794
813
  strokeLinejoin: "round",
795
814
  ...props,
796
815
  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" })
816
+ /* @__PURE__ */ jsx36("path", { d: "M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5" }),
817
+ /* @__PURE__ */ jsx36("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" })
818
+ ]
819
+ }
820
+ );
821
+ }
822
+
823
+ // src/components/Icon/icons/apple.tsx
824
+ import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
825
+ function AppleIcon(props) {
826
+ return /* @__PURE__ */ jsxs30(
827
+ "svg",
828
+ {
829
+ xmlns: "http://www.w3.org/2000/svg",
830
+ viewBox: "0 0 24 24",
831
+ fill: "none",
832
+ stroke: "currentColor",
833
+ strokeWidth: "2",
834
+ strokeLinecap: "round",
835
+ strokeLinejoin: "round",
836
+ ...props,
837
+ children: [
838
+ /* @__PURE__ */ jsx37("path", { d: "M12 6.528V3a1 1 0 0 1 1-1h0" }),
839
+ /* @__PURE__ */ jsx37("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" })
840
+ ]
841
+ }
842
+ );
843
+ }
844
+
845
+ // src/components/Icon/icons/carrot.tsx
846
+ import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
847
+ function CarrotIcon(props) {
848
+ return /* @__PURE__ */ jsxs31(
849
+ "svg",
850
+ {
851
+ xmlns: "http://www.w3.org/2000/svg",
852
+ viewBox: "0 0 24 24",
853
+ fill: "none",
854
+ stroke: "currentColor",
855
+ strokeWidth: "2",
856
+ strokeLinecap: "round",
857
+ strokeLinejoin: "round",
858
+ ...props,
859
+ children: [
860
+ /* @__PURE__ */ jsx38("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" }),
861
+ /* @__PURE__ */ jsx38("path", { d: "M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z" }),
862
+ /* @__PURE__ */ jsx38("path", { d: "M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z" })
800
863
  ]
801
864
  }
802
865
  );
803
866
  }
804
867
 
805
868
  // src/components/Icon/icons/egg.tsx
806
- import { jsx as jsx37 } from "react/jsx-runtime";
869
+ import { jsx as jsx39 } from "react/jsx-runtime";
807
870
  function EggIcon(props) {
808
- return /* @__PURE__ */ jsx37(
871
+ return /* @__PURE__ */ jsx39(
809
872
  "svg",
810
873
  {
811
874
  xmlns: "http://www.w3.org/2000/svg",
@@ -816,15 +879,15 @@ function EggIcon(props) {
816
879
  strokeLinecap: "round",
817
880
  strokeLinejoin: "round",
818
881
  ...props,
819
- children: /* @__PURE__ */ jsx37("path", { d: "M12 2C8 2 4 8 4 14a8 8 0 0 0 16 0c0-6-4-12-8-12" })
882
+ children: /* @__PURE__ */ jsx39("path", { d: "M12 2C8 2 4 8 4 14a8 8 0 0 0 16 0c0-6-4-12-8-12" })
820
883
  }
821
884
  );
822
885
  }
823
886
 
824
887
  // src/components/Icon/icons/beef.tsx
825
- import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
888
+ import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
826
889
  function BeefIcon(props) {
827
- return /* @__PURE__ */ jsxs30(
890
+ return /* @__PURE__ */ jsxs32(
828
891
  "svg",
829
892
  {
830
893
  xmlns: "http://www.w3.org/2000/svg",
@@ -836,18 +899,18 @@ function BeefIcon(props) {
836
899
  strokeLinejoin: "round",
837
900
  ...props,
838
901
  children: [
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" })
902
+ /* @__PURE__ */ jsx40("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" }),
903
+ /* @__PURE__ */ jsx40("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" }),
904
+ /* @__PURE__ */ jsx40("circle", { cx: "12.5", cy: "8.5", r: "2.5" })
842
905
  ]
843
906
  }
844
907
  );
845
908
  }
846
909
 
847
910
  // src/components/Icon/icons/fish.tsx
848
- import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
911
+ import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
849
912
  function FishIcon(props) {
850
- return /* @__PURE__ */ jsxs31(
913
+ return /* @__PURE__ */ jsxs33(
851
914
  "svg",
852
915
  {
853
916
  xmlns: "http://www.w3.org/2000/svg",
@@ -859,21 +922,21 @@ function FishIcon(props) {
859
922
  strokeLinejoin: "round",
860
923
  ...props,
861
924
  children: [
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" })
925
+ /* @__PURE__ */ jsx41("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" }),
926
+ /* @__PURE__ */ jsx41("path", { d: "M18 12v.5" }),
927
+ /* @__PURE__ */ jsx41("path", { d: "M16 17.93a9.77 9.77 0 0 1 0-11.86" }),
928
+ /* @__PURE__ */ jsx41("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" }),
929
+ /* @__PURE__ */ jsx41("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" }),
930
+ /* @__PURE__ */ jsx41("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" })
868
931
  ]
869
932
  }
870
933
  );
871
934
  }
872
935
 
873
936
  // src/components/Icon/icons/coffee.tsx
874
- import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
937
+ import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
875
938
  function CoffeeIcon(props) {
876
- return /* @__PURE__ */ jsxs32(
939
+ return /* @__PURE__ */ jsxs34(
877
940
  "svg",
878
941
  {
879
942
  xmlns: "http://www.w3.org/2000/svg",
@@ -885,19 +948,19 @@ function CoffeeIcon(props) {
885
948
  strokeLinejoin: "round",
886
949
  ...props,
887
950
  children: [
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" })
951
+ /* @__PURE__ */ jsx42("path", { d: "M10 2v2" }),
952
+ /* @__PURE__ */ jsx42("path", { d: "M14 2v2" }),
953
+ /* @__PURE__ */ jsx42("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" }),
954
+ /* @__PURE__ */ jsx42("path", { d: "M6 2v2" })
892
955
  ]
893
956
  }
894
957
  );
895
958
  }
896
959
 
897
960
  // src/components/Icon/icons/wine.tsx
898
- import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
961
+ import { jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
899
962
  function WineIcon(props) {
900
- return /* @__PURE__ */ jsxs33(
963
+ return /* @__PURE__ */ jsxs35(
901
964
  "svg",
902
965
  {
903
966
  xmlns: "http://www.w3.org/2000/svg",
@@ -909,19 +972,19 @@ function WineIcon(props) {
909
972
  strokeLinejoin: "round",
910
973
  ...props,
911
974
  children: [
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" })
975
+ /* @__PURE__ */ jsx43("path", { d: "M8 22h8" }),
976
+ /* @__PURE__ */ jsx43("path", { d: "M7 10h10" }),
977
+ /* @__PURE__ */ jsx43("path", { d: "M12 15v7" }),
978
+ /* @__PURE__ */ jsx43("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" })
916
979
  ]
917
980
  }
918
981
  );
919
982
  }
920
983
 
921
984
  // src/components/Icon/icons/beer.tsx
922
- import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
985
+ import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
923
986
  function BeerIcon(props) {
924
- return /* @__PURE__ */ jsxs34(
987
+ return /* @__PURE__ */ jsxs36(
925
988
  "svg",
926
989
  {
927
990
  xmlns: "http://www.w3.org/2000/svg",
@@ -933,20 +996,20 @@ function BeerIcon(props) {
933
996
  strokeLinejoin: "round",
934
997
  ...props,
935
998
  children: [
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" })
999
+ /* @__PURE__ */ jsx44("path", { d: "M17 11h1a3 3 0 0 1 0 6h-1" }),
1000
+ /* @__PURE__ */ jsx44("path", { d: "M9 12v6" }),
1001
+ /* @__PURE__ */ jsx44("path", { d: "M13 12v6" }),
1002
+ /* @__PURE__ */ jsx44("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" }),
1003
+ /* @__PURE__ */ jsx44("path", { d: "M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8" })
941
1004
  ]
942
1005
  }
943
1006
  );
944
1007
  }
945
1008
 
946
1009
  // src/components/Icon/icons/cookie.tsx
947
- import { jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
1010
+ import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
948
1011
  function CookieIcon(props) {
949
- return /* @__PURE__ */ jsxs35(
1012
+ return /* @__PURE__ */ jsxs37(
950
1013
  "svg",
951
1014
  {
952
1015
  xmlns: "http://www.w3.org/2000/svg",
@@ -958,21 +1021,21 @@ function CookieIcon(props) {
958
1021
  strokeLinejoin: "round",
959
1022
  ...props,
960
1023
  children: [
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" })
1024
+ /* @__PURE__ */ jsx45("path", { d: "M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5" }),
1025
+ /* @__PURE__ */ jsx45("path", { d: "M8.5 8.5v.01" }),
1026
+ /* @__PURE__ */ jsx45("path", { d: "M16 15.5v.01" }),
1027
+ /* @__PURE__ */ jsx45("path", { d: "M12 12v.01" }),
1028
+ /* @__PURE__ */ jsx45("path", { d: "M11 17v.01" }),
1029
+ /* @__PURE__ */ jsx45("path", { d: "M7 14v.01" })
967
1030
  ]
968
1031
  }
969
1032
  );
970
1033
  }
971
1034
 
972
1035
  // src/components/Icon/icons/pizza.tsx
973
- import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
1036
+ import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
974
1037
  function PizzaIcon(props) {
975
- return /* @__PURE__ */ jsxs36(
1038
+ return /* @__PURE__ */ jsxs38(
976
1039
  "svg",
977
1040
  {
978
1041
  xmlns: "http://www.w3.org/2000/svg",
@@ -984,20 +1047,20 @@ function PizzaIcon(props) {
984
1047
  strokeLinejoin: "round",
985
1048
  ...props,
986
1049
  children: [
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" })
1050
+ /* @__PURE__ */ jsx46("path", { d: "m12 14-1 1" }),
1051
+ /* @__PURE__ */ jsx46("path", { d: "m13.75 18.25-1.25 1.42" }),
1052
+ /* @__PURE__ */ jsx46("path", { d: "M17.775 5.654a15.68 15.68 0 0 0-12.121 12.12" }),
1053
+ /* @__PURE__ */ jsx46("path", { d: "M18.8 9.3a1 1 0 0 0 2.1 7.7" }),
1054
+ /* @__PURE__ */ jsx46("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" })
992
1055
  ]
993
1056
  }
994
1057
  );
995
1058
  }
996
1059
 
997
1060
  // src/components/Icon/icons/candy.tsx
998
- import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
1061
+ import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
999
1062
  function CandyIcon(props) {
1000
- return /* @__PURE__ */ jsxs37(
1063
+ return /* @__PURE__ */ jsxs39(
1001
1064
  "svg",
1002
1065
  {
1003
1066
  xmlns: "http://www.w3.org/2000/svg",
@@ -1009,20 +1072,20 @@ function CandyIcon(props) {
1009
1072
  strokeLinejoin: "round",
1010
1073
  ...props,
1011
1074
  children: [
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" })
1075
+ /* @__PURE__ */ jsx47("path", { d: "M10 7v10.9" }),
1076
+ /* @__PURE__ */ jsx47("path", { d: "M14 6.1V17" }),
1077
+ /* @__PURE__ */ jsx47("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" }),
1078
+ /* @__PURE__ */ jsx47("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" }),
1079
+ /* @__PURE__ */ jsx47("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" })
1017
1080
  ]
1018
1081
  }
1019
1082
  );
1020
1083
  }
1021
1084
 
1022
1085
  // src/components/Icon/icons/salad.tsx
1023
- import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
1086
+ import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
1024
1087
  function SaladIcon(props) {
1025
- return /* @__PURE__ */ jsxs38(
1088
+ return /* @__PURE__ */ jsxs40(
1026
1089
  "svg",
1027
1090
  {
1028
1091
  xmlns: "http://www.w3.org/2000/svg",
@@ -1034,20 +1097,20 @@ function SaladIcon(props) {
1034
1097
  strokeLinejoin: "round",
1035
1098
  ...props,
1036
1099
  children: [
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" })
1100
+ /* @__PURE__ */ jsx48("path", { d: "M7 21h10" }),
1101
+ /* @__PURE__ */ jsx48("path", { d: "M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z" }),
1102
+ /* @__PURE__ */ jsx48("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" }),
1103
+ /* @__PURE__ */ jsx48("path", { d: "m13 12 4-4" }),
1104
+ /* @__PURE__ */ jsx48("path", { d: "M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2" })
1042
1105
  ]
1043
1106
  }
1044
1107
  );
1045
1108
  }
1046
1109
 
1047
1110
  // src/components/Icon/icons/milk.tsx
1048
- import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
1111
+ import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
1049
1112
  function MilkIcon(props) {
1050
- return /* @__PURE__ */ jsxs39(
1113
+ return /* @__PURE__ */ jsxs41(
1051
1114
  "svg",
1052
1115
  {
1053
1116
  xmlns: "http://www.w3.org/2000/svg",
@@ -1059,18 +1122,18 @@ function MilkIcon(props) {
1059
1122
  strokeLinejoin: "round",
1060
1123
  ...props,
1061
1124
  children: [
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" })
1125
+ /* @__PURE__ */ jsx49("path", { d: "M8 2h8" }),
1126
+ /* @__PURE__ */ jsx49("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" }),
1127
+ /* @__PURE__ */ jsx49("path", { d: "M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0" })
1065
1128
  ]
1066
1129
  }
1067
1130
  );
1068
1131
  }
1069
1132
 
1070
1133
  // src/components/Icon/icons/drumstick.tsx
1071
- import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
1134
+ import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
1072
1135
  function DrumstickIcon(props) {
1073
- return /* @__PURE__ */ jsxs40(
1136
+ return /* @__PURE__ */ jsxs42(
1074
1137
  "svg",
1075
1138
  {
1076
1139
  xmlns: "http://www.w3.org/2000/svg",
@@ -1082,17 +1145,17 @@ function DrumstickIcon(props) {
1082
1145
  strokeLinejoin: "round",
1083
1146
  ...props,
1084
1147
  children: [
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" })
1148
+ /* @__PURE__ */ jsx50("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" }),
1149
+ /* @__PURE__ */ jsx50("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" })
1087
1150
  ]
1088
1151
  }
1089
1152
  );
1090
1153
  }
1091
1154
 
1092
1155
  // src/components/Icon/icons/croissant.tsx
1093
- import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
1156
+ import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
1094
1157
  function CroissantIcon(props) {
1095
- return /* @__PURE__ */ jsxs41(
1158
+ return /* @__PURE__ */ jsxs43(
1096
1159
  "svg",
1097
1160
  {
1098
1161
  xmlns: "http://www.w3.org/2000/svg",
@@ -1104,20 +1167,20 @@ function CroissantIcon(props) {
1104
1167
  strokeLinejoin: "round",
1105
1168
  ...props,
1106
1169
  children: [
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" })
1170
+ /* @__PURE__ */ jsx51("path", { d: "M10.2 18H4.774a1.5 1.5 0 0 1-1.352-.97 11 11 0 0 1 .132-6.487" }),
1171
+ /* @__PURE__ */ jsx51("path", { d: "M18 10.2V4.774a1.5 1.5 0 0 0-.97-1.352 11 11 0 0 0-6.486.132" }),
1172
+ /* @__PURE__ */ jsx51("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" }),
1173
+ /* @__PURE__ */ jsx51("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" }),
1174
+ /* @__PURE__ */ jsx51("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" })
1112
1175
  ]
1113
1176
  }
1114
1177
  );
1115
1178
  }
1116
1179
 
1117
1180
  // src/components/Icon/icons/cup-soda.tsx
1118
- import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
1181
+ import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
1119
1182
  function CupSodaIcon(props) {
1120
- return /* @__PURE__ */ jsxs42(
1183
+ return /* @__PURE__ */ jsxs44(
1121
1184
  "svg",
1122
1185
  {
1123
1186
  xmlns: "http://www.w3.org/2000/svg",
@@ -1129,19 +1192,19 @@ function CupSodaIcon(props) {
1129
1192
  strokeLinejoin: "round",
1130
1193
  ...props,
1131
1194
  children: [
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" })
1195
+ /* @__PURE__ */ jsx52("path", { d: "m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8" }),
1196
+ /* @__PURE__ */ jsx52("path", { d: "M5 8h14" }),
1197
+ /* @__PURE__ */ jsx52("path", { d: "M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0" }),
1198
+ /* @__PURE__ */ jsx52("path", { d: "m12 8 1-6h2" })
1136
1199
  ]
1137
1200
  }
1138
1201
  );
1139
1202
  }
1140
1203
 
1141
1204
  // src/components/Icon/icons/spray-can.tsx
1142
- import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
1205
+ import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
1143
1206
  function SprayCanIcon(props) {
1144
- return /* @__PURE__ */ jsxs43(
1207
+ return /* @__PURE__ */ jsxs45(
1145
1208
  "svg",
1146
1209
  {
1147
1210
  xmlns: "http://www.w3.org/2000/svg",
@@ -1153,25 +1216,25 @@ function SprayCanIcon(props) {
1153
1216
  strokeLinejoin: "round",
1154
1217
  ...props,
1155
1218
  children: [
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" })
1219
+ /* @__PURE__ */ jsx53("path", { d: "M3 3h.01" }),
1220
+ /* @__PURE__ */ jsx53("path", { d: "M7 5h.01" }),
1221
+ /* @__PURE__ */ jsx53("path", { d: "M11 7h.01" }),
1222
+ /* @__PURE__ */ jsx53("path", { d: "M3 7h.01" }),
1223
+ /* @__PURE__ */ jsx53("path", { d: "M7 9h.01" }),
1224
+ /* @__PURE__ */ jsx53("path", { d: "M3 11h.01" }),
1225
+ /* @__PURE__ */ jsx53("rect", { width: "4", height: "4", x: "15", y: "5" }),
1226
+ /* @__PURE__ */ jsx53("path", { d: "m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2" }),
1227
+ /* @__PURE__ */ jsx53("path", { d: "m13 14 8-2" }),
1228
+ /* @__PURE__ */ jsx53("path", { d: "m13 19 8-2" })
1166
1229
  ]
1167
1230
  }
1168
1231
  );
1169
1232
  }
1170
1233
 
1171
1234
  // src/components/Icon/icons/snowflake.tsx
1172
- import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
1235
+ import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
1173
1236
  function SnowflakeIcon(props) {
1174
- return /* @__PURE__ */ jsxs44(
1237
+ return /* @__PURE__ */ jsxs46(
1175
1238
  "svg",
1176
1239
  {
1177
1240
  xmlns: "http://www.w3.org/2000/svg",
@@ -1183,27 +1246,27 @@ function SnowflakeIcon(props) {
1183
1246
  strokeLinejoin: "round",
1184
1247
  ...props,
1185
1248
  children: [
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" })
1249
+ /* @__PURE__ */ jsx54("path", { d: "m10 20-1.25-2.5L6 18" }),
1250
+ /* @__PURE__ */ jsx54("path", { d: "M10 4 8.75 6.5 6 6" }),
1251
+ /* @__PURE__ */ jsx54("path", { d: "m14 20 1.25-2.5L18 18" }),
1252
+ /* @__PURE__ */ jsx54("path", { d: "m14 4 1.25 2.5L18 6" }),
1253
+ /* @__PURE__ */ jsx54("path", { d: "m17 21-3-6h-4" }),
1254
+ /* @__PURE__ */ jsx54("path", { d: "m17 3-3 6 1.5 3" }),
1255
+ /* @__PURE__ */ jsx54("path", { d: "M2 12h6.5L10 9" }),
1256
+ /* @__PURE__ */ jsx54("path", { d: "m20 10-1.5 2 1.5 2" }),
1257
+ /* @__PURE__ */ jsx54("path", { d: "M22 12h-6.5L14 15" }),
1258
+ /* @__PURE__ */ jsx54("path", { d: "m4 10 1.5 2L4 14" }),
1259
+ /* @__PURE__ */ jsx54("path", { d: "m7 21 3-6-1.5-3" }),
1260
+ /* @__PURE__ */ jsx54("path", { d: "m7 3 3 6h4" })
1198
1261
  ]
1199
1262
  }
1200
1263
  );
1201
1264
  }
1202
1265
 
1203
1266
  // src/components/Icon/icons/shopping-basket.tsx
1204
- import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
1267
+ import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
1205
1268
  function ShoppingBasketIcon(props) {
1206
- return /* @__PURE__ */ jsxs45(
1269
+ return /* @__PURE__ */ jsxs47(
1207
1270
  "svg",
1208
1271
  {
1209
1272
  xmlns: "http://www.w3.org/2000/svg",
@@ -1215,13 +1278,13 @@ function ShoppingBasketIcon(props) {
1215
1278
  strokeLinejoin: "round",
1216
1279
  ...props,
1217
1280
  children: [
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" })
1281
+ /* @__PURE__ */ jsx55("path", { d: "m15 11-1 9" }),
1282
+ /* @__PURE__ */ jsx55("path", { d: "m19 11-4-7" }),
1283
+ /* @__PURE__ */ jsx55("path", { d: "M2 11h20" }),
1284
+ /* @__PURE__ */ jsx55("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" }),
1285
+ /* @__PURE__ */ jsx55("path", { d: "M4.5 15.5h15" }),
1286
+ /* @__PURE__ */ jsx55("path", { d: "m5 11 4-7" }),
1287
+ /* @__PURE__ */ jsx55("path", { d: "m9 11 1 9" })
1225
1288
  ]
1226
1289
  }
1227
1290
  );
@@ -1255,6 +1318,8 @@ var ICONS = {
1255
1318
  "grid-2x2": Grid2x2Icon,
1256
1319
  info: InfoIcon,
1257
1320
  "alert-triangle": AlertTriangleIcon,
1321
+ "circle-check": CircleCheckIcon,
1322
+ "circle-x": CircleXIcon,
1258
1323
  calendar: CalendarIcon,
1259
1324
  "sliders-horizontal": SlidersHorizontalIcon,
1260
1325
  "ellipsis-vertical": EllipsisVerticalIcon,
@@ -1285,7 +1350,7 @@ var ICONS = {
1285
1350
 
1286
1351
  // src/components/Icon/Icon.tsx
1287
1352
  import styles2 from "./Icon.module.css";
1288
- import { jsx as jsx54 } from "react/jsx-runtime";
1353
+ import { jsx as jsx56 } from "react/jsx-runtime";
1289
1354
  function Icon({
1290
1355
  name,
1291
1356
  size = "md",
@@ -1294,14 +1359,14 @@ function Icon({
1294
1359
  }) {
1295
1360
  const Svg = ICONS[name];
1296
1361
  const classes = [styles2.root, styles2[size], className].filter(Boolean).join(" ");
1297
- return /* @__PURE__ */ jsx54(Svg, { className: classes, role: aria["aria-label"] ? "img" : void 0, ...aria });
1362
+ return /* @__PURE__ */ jsx56(Svg, { className: classes, role: aria["aria-label"] ? "img" : void 0, ...aria });
1298
1363
  }
1299
1364
 
1300
1365
  // src/components/Toggle/Toggle.tsx
1301
1366
  import styles3 from "./Toggle.module.css";
1302
- import { jsx as jsx55 } from "react/jsx-runtime";
1367
+ import { jsx as jsx57 } from "react/jsx-runtime";
1303
1368
  function Toggle({ checked, onChange, disabled, className, ...rest }) {
1304
- return /* @__PURE__ */ jsx55(
1369
+ return /* @__PURE__ */ jsx57(
1305
1370
  "button",
1306
1371
  {
1307
1372
  type: "button",
@@ -1311,14 +1376,14 @@ function Toggle({ checked, onChange, disabled, className, ...rest }) {
1311
1376
  className: [styles3.track, checked ? styles3.on : styles3.off, className].filter(Boolean).join(" "),
1312
1377
  onClick: () => onChange(!checked),
1313
1378
  ...rest,
1314
- children: /* @__PURE__ */ jsx55("span", { className: styles3.thumb })
1379
+ children: /* @__PURE__ */ jsx57("span", { className: styles3.thumb })
1315
1380
  }
1316
1381
  );
1317
1382
  }
1318
1383
 
1319
1384
  // src/components/SegmentedControl/SegmentedControl.tsx
1320
1385
  import styles4 from "./SegmentedControl.module.css";
1321
- import { jsx as jsx56 } from "react/jsx-runtime";
1386
+ import { jsx as jsx58 } from "react/jsx-runtime";
1322
1387
  function SegmentedControl({
1323
1388
  value,
1324
1389
  onChange,
@@ -1326,7 +1391,7 @@ function SegmentedControl({
1326
1391
  size = "md",
1327
1392
  "aria-label": ariaLabel
1328
1393
  }) {
1329
- return /* @__PURE__ */ jsx56(
1394
+ return /* @__PURE__ */ jsx58(
1330
1395
  "div",
1331
1396
  {
1332
1397
  role: "radiogroup",
@@ -1334,7 +1399,7 @@ function SegmentedControl({
1334
1399
  className: [styles4.track, styles4[size]].join(" "),
1335
1400
  children: options.map((opt) => {
1336
1401
  const active = opt.value === value;
1337
- return /* @__PURE__ */ jsx56(
1402
+ return /* @__PURE__ */ jsx58(
1338
1403
  "button",
1339
1404
  {
1340
1405
  type: "button",
@@ -1353,11 +1418,11 @@ function SegmentedControl({
1353
1418
 
1354
1419
  // src/components/Tabs/Tabs.tsx
1355
1420
  import styles5 from "./Tabs.module.css";
1356
- import { jsx as jsx57 } from "react/jsx-runtime";
1421
+ import { jsx as jsx59 } from "react/jsx-runtime";
1357
1422
  function Tabs({ items, value, onChange, "aria-label": ariaLabel }) {
1358
- return /* @__PURE__ */ jsx57("div", { role: "tablist", "aria-label": ariaLabel, className: styles5.tablist, children: items.map((item) => {
1423
+ return /* @__PURE__ */ jsx59("div", { role: "tablist", "aria-label": ariaLabel, className: styles5.tablist, children: items.map((item) => {
1359
1424
  const active = item.value === value;
1360
- return /* @__PURE__ */ jsx57(
1425
+ return /* @__PURE__ */ jsx59(
1361
1426
  "button",
1362
1427
  {
1363
1428
  type: "button",
@@ -1374,15 +1439,15 @@ function Tabs({ items, value, onChange, "aria-label": ariaLabel }) {
1374
1439
 
1375
1440
  // src/components/Select/Select.tsx
1376
1441
  import styles6 from "./Select.module.css";
1377
- import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
1442
+ import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
1378
1443
  function Select({ className, size = "md", children, ...rest }) {
1379
- return /* @__PURE__ */ jsxs46(
1444
+ return /* @__PURE__ */ jsxs48(
1380
1445
  "div",
1381
1446
  {
1382
1447
  className: [styles6.wrapper, size === "sm" ? styles6.sm : void 0, className].filter(Boolean).join(" "),
1383
1448
  children: [
1384
- /* @__PURE__ */ jsx58("select", { className: styles6.select, ...rest, children }),
1385
- /* @__PURE__ */ jsx58(
1449
+ /* @__PURE__ */ jsx60("select", { className: styles6.select, ...rest, children }),
1450
+ /* @__PURE__ */ jsx60(
1386
1451
  "svg",
1387
1452
  {
1388
1453
  className: styles6.chevron,
@@ -1395,7 +1460,7 @@ function Select({ className, size = "md", children, ...rest }) {
1395
1460
  strokeWidth: "2",
1396
1461
  strokeLinecap: "round",
1397
1462
  strokeLinejoin: "round",
1398
- children: /* @__PURE__ */ jsx58("polyline", { points: "6 9 12 15 18 9" })
1463
+ children: /* @__PURE__ */ jsx60("polyline", { points: "6 9 12 15 18 9" })
1399
1464
  }
1400
1465
  )
1401
1466
  ]
@@ -1405,18 +1470,18 @@ function Select({ className, size = "md", children, ...rest }) {
1405
1470
 
1406
1471
  // src/components/SystemBanner/SystemBanner.tsx
1407
1472
  import styles7 from "./SystemBanner.module.css";
1408
- import { jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
1473
+ import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
1409
1474
  function SystemBanner({ variant = "info", onDismiss, children }) {
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(
1475
+ return /* @__PURE__ */ jsxs49("div", { role: "status", "aria-live": "polite", className: [styles7.banner, styles7[variant]].join(" "), children: [
1476
+ /* @__PURE__ */ jsx61("span", { className: styles7.content, children }),
1477
+ onDismiss && /* @__PURE__ */ jsx61(
1413
1478
  "button",
1414
1479
  {
1415
1480
  type: "button",
1416
1481
  className: styles7.dismiss,
1417
1482
  onClick: onDismiss,
1418
1483
  "aria-label": "Dismiss banner",
1419
- children: /* @__PURE__ */ jsx59(
1484
+ children: /* @__PURE__ */ jsx61(
1420
1485
  "svg",
1421
1486
  {
1422
1487
  width: "14",
@@ -1425,7 +1490,7 @@ function SystemBanner({ variant = "info", onDismiss, children }) {
1425
1490
  fill: "none",
1426
1491
  xmlns: "http://www.w3.org/2000/svg",
1427
1492
  "aria-hidden": true,
1428
- children: /* @__PURE__ */ jsx59(
1493
+ children: /* @__PURE__ */ jsx61(
1429
1494
  "path",
1430
1495
  {
1431
1496
  d: "M1 1L13 13M13 1L1 13",
@@ -1449,7 +1514,7 @@ import {
1449
1514
  useState
1450
1515
  } from "react";
1451
1516
  import styles8 from "./Popover.module.css";
1452
- import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
1517
+ import { jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
1453
1518
  var TRIGGER_GAP = 8;
1454
1519
  var VIEWPORT_MARGIN = 4;
1455
1520
  function Popover({
@@ -1525,9 +1590,9 @@ function Popover({
1525
1590
  document.addEventListener("keydown", handleKeyDown);
1526
1591
  return () => document.removeEventListener("keydown", handleKeyDown);
1527
1592
  }, [open, onClose]);
1528
- return /* @__PURE__ */ jsxs48("div", { ref: containerRef, className: styles8.container, children: [
1593
+ return /* @__PURE__ */ jsxs50("div", { ref: containerRef, className: styles8.container, children: [
1529
1594
  trigger,
1530
- open && /* @__PURE__ */ jsx60(
1595
+ open && /* @__PURE__ */ jsx62(
1531
1596
  "div",
1532
1597
  {
1533
1598
  ref: panelRef,
@@ -1548,7 +1613,7 @@ function Popover({
1548
1613
 
1549
1614
  // src/components/Button/Button.tsx
1550
1615
  import styles9 from "./Button.module.css";
1551
- import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
1616
+ import { jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
1552
1617
  function Button({
1553
1618
  variant = "primary",
1554
1619
  size = "md",
@@ -1560,7 +1625,7 @@ function Button({
1560
1625
  ...rest
1561
1626
  }) {
1562
1627
  const classes = [styles9.button, styles9[variant], styles9[size], className].filter(Boolean).join(" ");
1563
- return /* @__PURE__ */ jsxs49(
1628
+ return /* @__PURE__ */ jsxs51(
1564
1629
  "button",
1565
1630
  {
1566
1631
  type,
@@ -1572,7 +1637,7 @@ function Button({
1572
1637
  loading && // aria-hidden: the button's own accessible name (its visible children,
1573
1638
  // unchanged below) plus aria-busy already communicate the pending
1574
1639
  // state — an unhidden Spinner-style status region would double-narrate it.
1575
- /* @__PURE__ */ jsx61("span", { className: styles9.spinner, "aria-hidden": "true" }),
1640
+ /* @__PURE__ */ jsx63("span", { className: styles9.spinner, "aria-hidden": "true" }),
1576
1641
  children
1577
1642
  ]
1578
1643
  }
@@ -1581,23 +1646,23 @@ function Button({
1581
1646
 
1582
1647
  // src/components/Input/Input.tsx
1583
1648
  import styles10 from "./Input.module.css";
1584
- import { jsx as jsx62 } from "react/jsx-runtime";
1649
+ import { jsx as jsx64 } from "react/jsx-runtime";
1585
1650
  function Input({ type = "text", className, ...rest }) {
1586
1651
  const classes = [styles10.input, className].filter(Boolean).join(" ");
1587
- return /* @__PURE__ */ jsx62("input", { type, className: classes, ...rest });
1652
+ return /* @__PURE__ */ jsx64("input", { type, className: classes, ...rest });
1588
1653
  }
1589
1654
 
1590
1655
  // src/components/Textarea/Textarea.tsx
1591
1656
  import styles11 from "./Textarea.module.css";
1592
- import { jsx as jsx63 } from "react/jsx-runtime";
1657
+ import { jsx as jsx65 } from "react/jsx-runtime";
1593
1658
  function Textarea({ className, rows = 4, ...rest }) {
1594
1659
  const classes = [styles11.textarea, className].filter(Boolean).join(" ");
1595
- return /* @__PURE__ */ jsx63("textarea", { rows, className: classes, ...rest });
1660
+ return /* @__PURE__ */ jsx65("textarea", { rows, className: classes, ...rest });
1596
1661
  }
1597
1662
 
1598
1663
  // src/components/CodeTextarea/CodeTextarea.tsx
1599
1664
  import styles12 from "./CodeTextarea.module.css";
1600
- import { jsx as jsx64 } from "react/jsx-runtime";
1665
+ import { jsx as jsx66 } from "react/jsx-runtime";
1601
1666
  function CodeTextarea({
1602
1667
  className,
1603
1668
  rows = 12,
@@ -1608,7 +1673,7 @@ function CodeTextarea({
1608
1673
  ...rest
1609
1674
  }) {
1610
1675
  const classes = [styles12.textarea, invalid ? styles12.invalid : void 0, className].filter(Boolean).join(" ");
1611
- return /* @__PURE__ */ jsx64(
1676
+ return /* @__PURE__ */ jsx66(
1612
1677
  "textarea",
1613
1678
  {
1614
1679
  rows,
@@ -1623,7 +1688,7 @@ function CodeTextarea({
1623
1688
 
1624
1689
  // src/components/StatusBadge/StatusBadge.tsx
1625
1690
  import styles13 from "./StatusBadge.module.css";
1626
- import { jsx as jsx65, jsxs as jsxs50 } from "react/jsx-runtime";
1691
+ import { jsx as jsx67, jsxs as jsxs52 } from "react/jsx-runtime";
1627
1692
  var STATUS_CLASS = {
1628
1693
  unmodified: styles13.neutral,
1629
1694
  draft: styles13.info,
@@ -1651,14 +1716,14 @@ function StatusBadge({
1651
1716
  "aria-label": ariaLabel
1652
1717
  }) {
1653
1718
  const label = children ?? STATUS_LABEL[status];
1654
- return /* @__PURE__ */ jsxs50(
1719
+ return /* @__PURE__ */ jsxs52(
1655
1720
  "span",
1656
1721
  {
1657
1722
  className: [styles13.badge, STATUS_CLASS[status], className].filter(Boolean).join(" "),
1658
1723
  "aria-label": ariaLabel,
1659
1724
  children: [
1660
- /* @__PURE__ */ jsx65("span", { className: styles13.dot, "aria-hidden": "true" }),
1661
- /* @__PURE__ */ jsx65("span", { className: styles13.label, children: label })
1725
+ /* @__PURE__ */ jsx67("span", { className: styles13.dot, "aria-hidden": "true" }),
1726
+ /* @__PURE__ */ jsx67("span", { className: styles13.label, children: label })
1662
1727
  ]
1663
1728
  }
1664
1729
  );
@@ -1667,7 +1732,7 @@ function StatusBadge({
1667
1732
  // src/components/SplitPane/SplitPane.tsx
1668
1733
  import { useCallback, useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
1669
1734
  import styles14 from "./SplitPane.module.css";
1670
- import { jsx as jsx66, jsxs as jsxs51 } from "react/jsx-runtime";
1735
+ import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
1671
1736
  var clampSize = (value, min, max) => Math.min(Math.max(value, min), max);
1672
1737
  function SplitPane({
1673
1738
  primary,
@@ -1753,15 +1818,15 @@ function SplitPane({
1753
1818
  const style = {
1754
1819
  "--split-pane-primary-size": `${primarySize}%`
1755
1820
  };
1756
- return /* @__PURE__ */ jsxs51(
1821
+ return /* @__PURE__ */ jsxs53(
1757
1822
  "div",
1758
1823
  {
1759
1824
  ref: containerRef,
1760
1825
  className: [styles14.splitPane, className].filter(Boolean).join(" "),
1761
1826
  style,
1762
1827
  children: [
1763
- /* @__PURE__ */ jsx66("section", { className: styles14.pane, "aria-label": primaryLabel, children: primary }),
1764
- resizable && /* @__PURE__ */ jsx66(
1828
+ /* @__PURE__ */ jsx68("section", { className: styles14.pane, "aria-label": primaryLabel, children: primary }),
1829
+ resizable && /* @__PURE__ */ jsx68(
1765
1830
  "button",
1766
1831
  {
1767
1832
  type: "button",
@@ -1771,7 +1836,7 @@ function SplitPane({
1771
1836
  onKeyDown: resizeWithKeyboard
1772
1837
  }
1773
1838
  ),
1774
- /* @__PURE__ */ jsx66("section", { className: styles14.pane, "aria-label": secondaryLabel, children: secondary })
1839
+ /* @__PURE__ */ jsx68("section", { className: styles14.pane, "aria-label": secondaryLabel, children: secondary })
1775
1840
  ]
1776
1841
  }
1777
1842
  );
@@ -1780,7 +1845,7 @@ function SplitPane({
1780
1845
  // src/components/TagInput/TagInput.tsx
1781
1846
  import { useMemo, useState as useState3 } from "react";
1782
1847
  import styles15 from "./TagInput.module.css";
1783
- import { jsx as jsx67, jsxs as jsxs52 } from "react/jsx-runtime";
1848
+ import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
1784
1849
  var DEFAULT_SEPARATORS = /[\n,]+/;
1785
1850
  var splitTags = (value, separators) => value.split(separators).map((tag) => tag.trim()).filter(Boolean);
1786
1851
  function TagInput({
@@ -1854,8 +1919,8 @@ function TagInput({
1854
1919
  event.preventDefault();
1855
1920
  addTags(tags);
1856
1921
  };
1857
- return /* @__PURE__ */ jsxs52("div", { className: [styles15.wrapper, className].filter(Boolean).join(" "), children: [
1858
- /* @__PURE__ */ jsxs52(
1922
+ return /* @__PURE__ */ jsxs54("div", { className: [styles15.wrapper, className].filter(Boolean).join(" "), children: [
1923
+ /* @__PURE__ */ jsxs54(
1859
1924
  "div",
1860
1925
  {
1861
1926
  className: [
@@ -1864,9 +1929,9 @@ function TagInput({
1864
1929
  error || localError || ariaInvalid ? styles15.invalid : void 0
1865
1930
  ].filter(Boolean).join(" "),
1866
1931
  children: [
1867
- value.map((tag, index) => /* @__PURE__ */ jsxs52("span", { className: styles15.tag, children: [
1868
- /* @__PURE__ */ jsx67("span", { className: styles15.tagLabel, children: tag }),
1869
- /* @__PURE__ */ jsx67(
1932
+ value.map((tag, index) => /* @__PURE__ */ jsxs54("span", { className: styles15.tag, children: [
1933
+ /* @__PURE__ */ jsx69("span", { className: styles15.tagLabel, children: tag }),
1934
+ /* @__PURE__ */ jsx69(
1870
1935
  "button",
1871
1936
  {
1872
1937
  type: "button",
@@ -1878,7 +1943,7 @@ function TagInput({
1878
1943
  }
1879
1944
  )
1880
1945
  ] }, `${tag}-${index}`)),
1881
- /* @__PURE__ */ jsx67(
1946
+ /* @__PURE__ */ jsx69(
1882
1947
  "input",
1883
1948
  {
1884
1949
  id,
@@ -1900,7 +1965,7 @@ function TagInput({
1900
1965
  ]
1901
1966
  }
1902
1967
  ),
1903
- message && /* @__PURE__ */ jsx67(
1968
+ message && /* @__PURE__ */ jsx69(
1904
1969
  "p",
1905
1970
  {
1906
1971
  id: messageId,
@@ -1959,7 +2024,7 @@ function usePrefersReducedMotion() {
1959
2024
 
1960
2025
  // src/components/OverlayHeader/OverlayHeader.tsx
1961
2026
  import styles16 from "./OverlayHeader.module.css";
1962
- import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
2027
+ import { jsx as jsx70, jsxs as jsxs55 } from "react/jsx-runtime";
1963
2028
  function OverlayHeader({
1964
2029
  title,
1965
2030
  onClose,
@@ -1968,20 +2033,20 @@ function OverlayHeader({
1968
2033
  secondRow,
1969
2034
  className
1970
2035
  }) {
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 }) })
2036
+ return /* @__PURE__ */ jsxs55("div", { className: [styles16.header, className].filter(Boolean).join(" "), children: [
2037
+ /* @__PURE__ */ jsxs55("div", { className: styles16.row, children: [
2038
+ onBack && /* @__PURE__ */ jsx70("button", { type: "button", className: styles16.backButton, "aria-label": "Back", onClick: onBack, children: /* @__PURE__ */ jsx70(Icon, { name: "chevron-left", size: "md", "aria-hidden": true }) }),
2039
+ /* @__PURE__ */ jsx70("span", { className: styles16.title, children: title }),
2040
+ action && /* @__PURE__ */ jsx70("div", { className: styles16.action, children: action }),
2041
+ /* @__PURE__ */ jsx70("button", { type: "button", className: styles16.closeButton, "aria-label": "Close", onClick: onClose, children: /* @__PURE__ */ jsx70(Icon, { name: "x", size: "sm", "aria-hidden": true }) })
1977
2042
  ] }),
1978
- secondRow && /* @__PURE__ */ jsx68("div", { className: styles16.secondRow, children: secondRow })
2043
+ secondRow && /* @__PURE__ */ jsx70("div", { className: styles16.secondRow, children: secondRow })
1979
2044
  ] });
1980
2045
  }
1981
2046
 
1982
2047
  // src/components/Dialog/Dialog.tsx
1983
2048
  import styles17 from "./Dialog.module.css";
1984
- import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
2049
+ import { jsx as jsx71, jsxs as jsxs56 } from "react/jsx-runtime";
1985
2050
  var MOTION_DURATION_MS = 250;
1986
2051
  var OverlaySecondRowContext = createContext(
1987
2052
  void 0
@@ -2057,7 +2122,7 @@ function Dialog({
2057
2122
  return (
2058
2123
  // role="presentation" removes the scrim from the AT (it is purely visual).
2059
2124
  // e.target check lets clicks inside the panel bubble without triggering dismiss.
2060
- /* @__PURE__ */ jsx69(
2125
+ /* @__PURE__ */ jsx71(
2061
2126
  "div",
2062
2127
  {
2063
2128
  className: [styles17.scrim, isOpenPhase ? styles17.scrimOpen : ""].filter(Boolean).join(" "),
@@ -2068,7 +2133,7 @@ function Dialog({
2068
2133
  onKeyDown: (e) => {
2069
2134
  if (e.key === "Escape") onClose();
2070
2135
  },
2071
- children: /* @__PURE__ */ jsxs54(
2136
+ children: /* @__PURE__ */ jsxs56(
2072
2137
  "div",
2073
2138
  {
2074
2139
  ref: panelRef,
@@ -2078,7 +2143,7 @@ function Dialog({
2078
2143
  tabIndex: -1,
2079
2144
  className: [styles17.panel, styles17[size], isOpenPhase ? styles17.panelOpen : ""].filter(Boolean).join(" "),
2080
2145
  children: [
2081
- /* @__PURE__ */ jsx69(
2146
+ /* @__PURE__ */ jsx71(
2082
2147
  OverlayHeader,
2083
2148
  {
2084
2149
  title,
@@ -2087,8 +2152,8 @@ function Dialog({
2087
2152
  className: styles17.mobileHeader
2088
2153
  }
2089
2154
  ),
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 }) })
2155
+ /* @__PURE__ */ jsx71("button", { type: "button", className: styles17.close, "aria-label": "Close", onClick: onClose, children: "\xD7" }),
2156
+ /* @__PURE__ */ jsx71("div", { className: styles17.content, children: /* @__PURE__ */ jsx71(OverlaySecondRowContext.Provider, { value: setSecondRow, children }) })
2092
2157
  ]
2093
2158
  }
2094
2159
  )
@@ -2100,7 +2165,7 @@ function Dialog({
2100
2165
  // src/components/Drawer/Drawer.tsx
2101
2166
  import { useEffect as useEffect5, useRef as useRef4 } from "react";
2102
2167
  import styles18 from "./Drawer.module.css";
2103
- import { jsx as jsx70, jsxs as jsxs55 } from "react/jsx-runtime";
2168
+ import { jsx as jsx72, jsxs as jsxs57 } from "react/jsx-runtime";
2104
2169
  var MOTION_DURATION_MS2 = 250;
2105
2170
  var FOCUSABLE2 = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
2106
2171
  var SWIPE_DISMISS_THRESHOLD_PX = 100;
@@ -2189,7 +2254,7 @@ function Drawer({
2189
2254
  return (
2190
2255
  // role="presentation" removes the scrim from the AT (it is purely visual).
2191
2256
  // e.target check lets clicks inside the panel bubble without triggering dismiss.
2192
- /* @__PURE__ */ jsx70(
2257
+ /* @__PURE__ */ jsx72(
2193
2258
  "div",
2194
2259
  {
2195
2260
  className: [styles18.scrim, isOpenPhase ? styles18.scrimOpen : ""].filter(Boolean).join(" "),
@@ -2200,7 +2265,7 @@ function Drawer({
2200
2265
  onKeyDown: (e) => {
2201
2266
  if (e.key === "Escape") onClose();
2202
2267
  },
2203
- children: /* @__PURE__ */ jsxs55(
2268
+ children: /* @__PURE__ */ jsxs57(
2204
2269
  "div",
2205
2270
  {
2206
2271
  ref: panelRef,
@@ -2214,7 +2279,7 @@ function Drawer({
2214
2279
  isOpenPhase ? styles18.panelOpen : ""
2215
2280
  ].filter(Boolean).join(" "),
2216
2281
  children: [
2217
- /* @__PURE__ */ jsx70(
2282
+ /* @__PURE__ */ jsx72(
2218
2283
  "div",
2219
2284
  {
2220
2285
  className: styles18.handle,
@@ -2237,7 +2302,7 @@ function Drawer({
2237
2302
  // src/components/Sheet/Sheet.tsx
2238
2303
  import { useEffect as useEffect6, useRef as useRef5 } from "react";
2239
2304
  import styles19 from "./Sheet.module.css";
2240
- import { jsx as jsx71, jsxs as jsxs56 } from "react/jsx-runtime";
2305
+ import { jsx as jsx73, jsxs as jsxs58 } from "react/jsx-runtime";
2241
2306
  var FOCUSABLE3 = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
2242
2307
  var MOTION_DURATION_MS3 = 250;
2243
2308
  function Sheet({
@@ -2298,7 +2363,7 @@ function Sheet({
2298
2363
  return () => document.removeEventListener("keydown", handleKeyDown);
2299
2364
  }, [open, onClose]);
2300
2365
  if (!mounted) return null;
2301
- return /* @__PURE__ */ jsxs56(
2366
+ return /* @__PURE__ */ jsxs58(
2302
2367
  "div",
2303
2368
  {
2304
2369
  ref: panelRef,
@@ -2312,8 +2377,8 @@ function Sheet({
2312
2377
  phase === "open" ? styles19.panelOpen : ""
2313
2378
  ].filter(Boolean).join(" "),
2314
2379
  children: [
2315
- title && /* @__PURE__ */ jsx71(OverlayHeader, { title, onClose, onBack, action: headerAction }),
2316
- /* @__PURE__ */ jsx71("div", { className: styles19.content, children })
2380
+ title && /* @__PURE__ */ jsx73(OverlayHeader, { title, onClose, onBack, action: headerAction }),
2381
+ /* @__PURE__ */ jsx73("div", { className: styles19.content, children })
2317
2382
  ]
2318
2383
  }
2319
2384
  );
@@ -2322,7 +2387,7 @@ function Sheet({
2322
2387
  // src/components/ConfirmDialog/ConfirmDialog.tsx
2323
2388
  import { useEffect as useEffect7, useRef as useRef6 } from "react";
2324
2389
  import styles20 from "./ConfirmDialog.module.css";
2325
- import { jsx as jsx72, jsxs as jsxs57 } from "react/jsx-runtime";
2390
+ import { jsx as jsx74, jsxs as jsxs59 } from "react/jsx-runtime";
2326
2391
  function ConfirmDialog({
2327
2392
  open,
2328
2393
  onClose,
@@ -2351,7 +2416,7 @@ function ConfirmDialog({
2351
2416
  }, [onClose]);
2352
2417
  return (
2353
2418
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions
2354
- /* @__PURE__ */ jsx72(
2419
+ /* @__PURE__ */ jsx74(
2355
2420
  "dialog",
2356
2421
  {
2357
2422
  ref: dialogRef,
@@ -2360,12 +2425,12 @@ function ConfirmDialog({
2360
2425
  onClick: (e) => {
2361
2426
  if (e.target === e.currentTarget) onClose();
2362
2427
  },
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 }),
2428
+ children: /* @__PURE__ */ jsxs59("div", { className: styles20.body, children: [
2429
+ /* @__PURE__ */ jsx74("h2", { className: styles20.title, children: title }),
2430
+ /* @__PURE__ */ jsx74("div", { className: styles20.message, children: message }),
2431
+ error && /* @__PURE__ */ jsx74("p", { className: styles20.error, children: error }),
2432
+ /* @__PURE__ */ jsxs59("div", { className: styles20.actions, children: [
2433
+ /* @__PURE__ */ jsx74(Button, { type: "button", variant: "secondary", onClick: onClose, disabled: pending, children: cancelLabel }),
2369
2434
  destructive ? (
2370
2435
  // A solid red fill, not Button's own `destructive` variant (an
2371
2436
  // outlined/ghost style meant for lower-emphasis placements) — a
@@ -2374,7 +2439,7 @@ function ConfirmDialog({
2374
2439
  // -text-on-error tokens the codebase already introduced for this
2375
2440
  // exact "reads as a filled action button, not a tinted status
2376
2441
  // surface" case (see semantic.css).
2377
- /* @__PURE__ */ jsx72(
2442
+ /* @__PURE__ */ jsx74(
2378
2443
  "button",
2379
2444
  {
2380
2445
  type: "button",
@@ -2384,7 +2449,7 @@ function ConfirmDialog({
2384
2449
  children: confirmLabel
2385
2450
  }
2386
2451
  )
2387
- ) : /* @__PURE__ */ jsx72(Button, { type: "button", variant: "primary", onClick: onConfirm, disabled: pending, children: confirmLabel })
2452
+ ) : /* @__PURE__ */ jsx74(Button, { type: "button", variant: "primary", onClick: onConfirm, disabled: pending, children: confirmLabel })
2388
2453
  ] })
2389
2454
  ] })
2390
2455
  }
@@ -2558,18 +2623,20 @@ function useCommitOnEnterOrBlur(onCommit) {
2558
2623
 
2559
2624
  // src/components/Menu/Menu.tsx
2560
2625
  import styles21 from "./Menu.module.css";
2561
- import { Fragment, jsx as jsx73, jsxs as jsxs58 } from "react/jsx-runtime";
2562
- function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align }) {
2563
- const isMobile = useIsMobile();
2564
- const list = /* @__PURE__ */ jsx73("ul", { className: styles21.list, role: "menu", children: items.map((entry, index) => {
2626
+ import { Fragment, jsx as jsx75, jsxs as jsxs60 } from "react/jsx-runtime";
2627
+ function MenuEntries({
2628
+ items,
2629
+ onSelect
2630
+ }) {
2631
+ return /* @__PURE__ */ jsx75("ul", { className: styles21.list, role: "menu", children: items.map((entry, index) => {
2565
2632
  if (entry.type === "separator") {
2566
- return /* @__PURE__ */ jsx73("li", { role: "separator", className: styles21.separator }, index);
2633
+ return /* @__PURE__ */ jsx75("li", { role: "separator", className: styles21.separator }, index);
2567
2634
  }
2568
2635
  if (entry.type === "label") {
2569
- return /* @__PURE__ */ jsx73("li", { role: "presentation", className: styles21.label, children: entry.label }, index);
2636
+ return /* @__PURE__ */ jsx75("li", { role: "presentation", className: styles21.label, children: entry.label }, index);
2570
2637
  }
2571
2638
  const isCheckable = entry.checked !== void 0;
2572
- return /* @__PURE__ */ jsx73("li", { role: "none", children: /* @__PURE__ */ jsxs58(
2639
+ return /* @__PURE__ */ jsx75("li", { role: "none", children: /* @__PURE__ */ jsxs60(
2573
2640
  "button",
2574
2641
  {
2575
2642
  role: isCheckable ? "menuitemradio" : "menuitem",
@@ -2577,25 +2644,35 @@ function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align })
2577
2644
  type: "button",
2578
2645
  className: [styles21.item, entry.destructive ? styles21.itemDestructive : ""].filter(Boolean).join(" "),
2579
2646
  disabled: entry.disabled,
2580
- onClick: () => {
2581
- onClose();
2582
- entry.onSelect();
2583
- },
2647
+ onClick: () => onSelect(entry),
2584
2648
  children: [
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 }),
2649
+ isCheckable && /* @__PURE__ */ jsx75("span", { className: styles21.check, "aria-hidden": true, children: entry.checked && /* @__PURE__ */ jsx75(Icon, { name: "check", size: "sm", "aria-hidden": true }) }),
2650
+ entry.icon && /* @__PURE__ */ jsx75(Icon, { name: entry.icon, size: "sm", "aria-hidden": true }),
2587
2651
  entry.label
2588
2652
  ]
2589
2653
  }
2590
2654
  ) }, index);
2591
2655
  }) });
2656
+ }
2657
+ function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align }) {
2658
+ const isMobile = useIsMobile();
2659
+ const list = /* @__PURE__ */ jsx75(
2660
+ MenuEntries,
2661
+ {
2662
+ items,
2663
+ onSelect: (entry) => {
2664
+ onClose();
2665
+ entry.onSelect();
2666
+ }
2667
+ }
2668
+ );
2592
2669
  if (isMobile) {
2593
- return /* @__PURE__ */ jsxs58(Fragment, { children: [
2670
+ return /* @__PURE__ */ jsxs60(Fragment, { children: [
2594
2671
  trigger,
2595
- /* @__PURE__ */ jsx73(Drawer, { open, onClose, "aria-label": ariaLabel, children: list })
2672
+ /* @__PURE__ */ jsx75(Drawer, { open, onClose, "aria-label": ariaLabel, children: list })
2596
2673
  ] });
2597
2674
  }
2598
- return /* @__PURE__ */ jsx73(Popover, { trigger, open, onClose, "aria-label": ariaLabel, align, children: list });
2675
+ return /* @__PURE__ */ jsx75(Popover, { trigger, open, onClose, "aria-label": ariaLabel, align, children: list });
2599
2676
  }
2600
2677
 
2601
2678
  // src/components/Toast/Toast.tsx
@@ -2610,7 +2687,7 @@ import {
2610
2687
  useState as useState8
2611
2688
  } from "react";
2612
2689
  import styles22 from "./Toast.module.css";
2613
- import { jsx as jsx74, jsxs as jsxs59 } from "react/jsx-runtime";
2690
+ import { jsx as jsx76, jsxs as jsxs61 } from "react/jsx-runtime";
2614
2691
  var ToastContext = createContext2(null);
2615
2692
  function useToast() {
2616
2693
  const ctx = useContext2(ToastContext);
@@ -2648,16 +2725,16 @@ function ToastProvider({ children }) {
2648
2725
  };
2649
2726
  }, []);
2650
2727
  const value = useMemo2(() => ({ show, dismiss }), [show, dismiss]);
2651
- return /* @__PURE__ */ jsxs59(ToastContext.Provider, { value, children: [
2728
+ return /* @__PURE__ */ jsxs61(ToastContext.Provider, { value, children: [
2652
2729
  children,
2653
- /* @__PURE__ */ jsx74(
2730
+ /* @__PURE__ */ jsx76(
2654
2731
  "ol",
2655
2732
  {
2656
2733
  className: styles22.region,
2657
2734
  "aria-label": "Notifications",
2658
2735
  "aria-live": "polite",
2659
2736
  "aria-atomic": "false",
2660
- children: toasts.map((toast) => /* @__PURE__ */ jsx74(Toast, { ...toast, onDismiss: dismiss }, toast.id))
2737
+ children: toasts.map((toast) => /* @__PURE__ */ jsx76(Toast, { ...toast, onDismiss: dismiss }, toast.id))
2661
2738
  }
2662
2739
  )
2663
2740
  ] });
@@ -2680,18 +2757,18 @@ function Toast({
2680
2757
  }) {
2681
2758
  const categoryClass = styles22[category] ?? styles22.info;
2682
2759
  const iconName = CATEGORY_ICON[category] ?? "info";
2683
- return /* @__PURE__ */ jsxs59(
2760
+ return /* @__PURE__ */ jsxs61(
2684
2761
  "li",
2685
2762
  {
2686
2763
  role: "status",
2687
2764
  className: `${styles22.toast} ${String(categoryClass)} ${exiting ? styles22.exiting : ""}`,
2688
2765
  children: [
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 })
2766
+ /* @__PURE__ */ jsx76("span", { className: styles22.icon, "aria-hidden": "true", children: /* @__PURE__ */ jsx76(Icon, { name: iconName, size: "sm", "aria-hidden": true }) }),
2767
+ /* @__PURE__ */ jsxs61("div", { className: styles22.body, children: [
2768
+ /* @__PURE__ */ jsx76("div", { className: styles22.title, children: title }),
2769
+ message && /* @__PURE__ */ jsx76("div", { className: styles22.message, children: message })
2693
2770
  ] }),
2694
- /* @__PURE__ */ jsx74(
2771
+ /* @__PURE__ */ jsx76(
2695
2772
  "button",
2696
2773
  {
2697
2774
  type: "button",
@@ -2708,7 +2785,7 @@ function Toast({
2708
2785
 
2709
2786
  // src/components/Card/Card.tsx
2710
2787
  import styles23 from "./Card.module.css";
2711
- import { jsx as jsx75 } from "react/jsx-runtime";
2788
+ import { jsx as jsx77 } from "react/jsx-runtime";
2712
2789
  var paddingClass = {
2713
2790
  sm: styles23.paddingSm,
2714
2791
  md: styles23.paddingMd,
@@ -2723,13 +2800,13 @@ function Card({
2723
2800
  ...rest
2724
2801
  }) {
2725
2802
  const cls = [styles23.card, paddingClass[padding], interactive && styles23.interactive, className].filter(Boolean).join(" ");
2726
- return /* @__PURE__ */ jsx75(Tag, { className: cls, ...rest, children });
2803
+ return /* @__PURE__ */ jsx77(Tag, { className: cls, ...rest, children });
2727
2804
  }
2728
2805
 
2729
2806
  // src/components/FormField/FormField.tsx
2730
2807
  import { useId as useId2 } from "react";
2731
2808
  import styles24 from "./FormField.module.css";
2732
- import { jsx as jsx76, jsxs as jsxs60 } from "react/jsx-runtime";
2809
+ import { jsx as jsx78, jsxs as jsxs62 } from "react/jsx-runtime";
2733
2810
  function FormField({
2734
2811
  label,
2735
2812
  hint,
@@ -2750,52 +2827,52 @@ function FormField({
2750
2827
  "aria-invalid": error ? true : void 0,
2751
2828
  required: required || void 0
2752
2829
  };
2753
- return /* @__PURE__ */ jsxs60("div", { className: [styles24.field, className].filter(Boolean).join(" "), children: [
2754
- /* @__PURE__ */ jsxs60("label", { className: styles24.label, htmlFor: fieldId, children: [
2830
+ return /* @__PURE__ */ jsxs62("div", { className: [styles24.field, className].filter(Boolean).join(" "), children: [
2831
+ /* @__PURE__ */ jsxs62("label", { className: styles24.label, htmlFor: fieldId, children: [
2755
2832
  label,
2756
- required && /* @__PURE__ */ jsx76("span", { className: styles24.required, "aria-hidden": "true", children: "*" })
2833
+ required && /* @__PURE__ */ jsx78("span", { className: styles24.required, "aria-hidden": "true", children: "*" })
2757
2834
  ] }),
2758
2835
  children(field),
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 })
2836
+ hint && !error && /* @__PURE__ */ jsx78("p", { id: hintId, className: styles24.hint, children: hint }),
2837
+ error && /* @__PURE__ */ jsx78("p", { id: errorId, className: styles24.error, role: "alert", children: error })
2761
2838
  ] });
2762
2839
  }
2763
2840
 
2764
2841
  // src/components/PageHeader/PageHeader.tsx
2765
2842
  import styles25 from "./PageHeader.module.css";
2766
- import { jsx as jsx77, jsxs as jsxs61 } from "react/jsx-runtime";
2843
+ import { jsx as jsx79, jsxs as jsxs63 } from "react/jsx-runtime";
2767
2844
  function PageHeader({ title, description, action, className }) {
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 })
2845
+ return /* @__PURE__ */ jsxs63("header", { className: [styles25.header, className].filter(Boolean).join(" "), children: [
2846
+ /* @__PURE__ */ jsxs63("div", { className: styles25.text, children: [
2847
+ /* @__PURE__ */ jsx79("h1", { className: styles25.title, children: title }),
2848
+ description && /* @__PURE__ */ jsx79("p", { className: styles25.description, children: description })
2772
2849
  ] }),
2773
- action && /* @__PURE__ */ jsx77("div", { className: styles25.action, children: action })
2850
+ action && /* @__PURE__ */ jsx79("div", { className: styles25.action, children: action })
2774
2851
  ] });
2775
2852
  }
2776
2853
 
2777
2854
  // src/components/EmptyState/EmptyState.tsx
2778
2855
  import styles26 from "./EmptyState.module.css";
2779
- import { jsx as jsx78, jsxs as jsxs62 } from "react/jsx-runtime";
2856
+ import { jsx as jsx80, jsxs as jsxs64 } from "react/jsx-runtime";
2780
2857
  function EmptyState({ icon, heading, description, action, className }) {
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 }),
2858
+ return /* @__PURE__ */ jsxs64("div", { className: [styles26.root, className].filter(Boolean).join(" "), children: [
2859
+ icon && /* @__PURE__ */ jsx80("span", { className: styles26.icon, children: /* @__PURE__ */ jsx80(Icon, { name: icon, size: "lg", "aria-hidden": true }) }),
2860
+ /* @__PURE__ */ jsx80("h2", { className: styles26.heading, children: heading }),
2861
+ description && /* @__PURE__ */ jsx80("p", { className: styles26.description, children: description }),
2785
2862
  action
2786
2863
  ] });
2787
2864
  }
2788
2865
 
2789
2866
  // src/components/Spinner/Spinner.tsx
2790
2867
  import styles27 from "./Spinner.module.css";
2791
- import { jsx as jsx79 } from "react/jsx-runtime";
2868
+ import { jsx as jsx81 } from "react/jsx-runtime";
2792
2869
  var sizeClass = {
2793
2870
  sm: styles27.sm,
2794
2871
  md: styles27.md,
2795
2872
  lg: styles27.lg
2796
2873
  };
2797
2874
  function Spinner({ size = "md", label = "Loading\u2026", className }) {
2798
- return /* @__PURE__ */ jsx79(
2875
+ return /* @__PURE__ */ jsx81(
2799
2876
  "span",
2800
2877
  {
2801
2878
  role: "status",
@@ -2808,7 +2885,7 @@ function Spinner({ size = "md", label = "Loading\u2026", className }) {
2808
2885
  // src/components/Avatar/Avatar.tsx
2809
2886
  import { useState as useState9 } from "react";
2810
2887
  import styles28 from "./Avatar.module.css";
2811
- import { jsx as jsx80 } from "react/jsx-runtime";
2888
+ import { jsx as jsx82 } from "react/jsx-runtime";
2812
2889
  function initials(name) {
2813
2890
  const parts = name.trim().split(/\s+/);
2814
2891
  if (parts.length === 1) return (parts[0] ?? "").slice(0, 2).toUpperCase();
@@ -2823,21 +2900,21 @@ function Avatar({ name, src, size = "md", className }) {
2823
2900
  const [imgFailed, setImgFailed] = useState9(false);
2824
2901
  const cls = [styles28.avatar, sizeClass2[size], className].filter(Boolean).join(" ");
2825
2902
  if (src && !imgFailed) {
2826
- return /* @__PURE__ */ jsx80("span", { className: cls, "aria-label": name, children: /* @__PURE__ */ jsx80("img", { src, alt: name, className: styles28.img, onError: () => setImgFailed(true) }) });
2903
+ return /* @__PURE__ */ jsx82("span", { className: cls, "aria-label": name, children: /* @__PURE__ */ jsx82("img", { src, alt: name, className: styles28.img, onError: () => setImgFailed(true) }) });
2827
2904
  }
2828
- return /* @__PURE__ */ jsx80("span", { className: cls, "aria-label": name, children: initials(name) });
2905
+ return /* @__PURE__ */ jsx82("span", { className: cls, "aria-label": name, children: initials(name) });
2829
2906
  }
2830
2907
 
2831
2908
  // src/components/NavTabs/NavTabs.tsx
2832
2909
  import styles29 from "./NavTabs.module.css";
2833
- import { jsx as jsx81 } from "react/jsx-runtime";
2910
+ import { jsx as jsx83 } from "react/jsx-runtime";
2834
2911
  function NavTabs({ items, className, "aria-label": ariaLabel }) {
2835
- return /* @__PURE__ */ jsx81(
2912
+ return /* @__PURE__ */ jsx83(
2836
2913
  "nav",
2837
2914
  {
2838
2915
  className: [styles29.nav, className].filter(Boolean).join(" "),
2839
2916
  "aria-label": ariaLabel ?? "Page navigation",
2840
- children: items.map((item) => /* @__PURE__ */ jsx81(
2917
+ children: items.map((item) => /* @__PURE__ */ jsx83(
2841
2918
  "a",
2842
2919
  {
2843
2920
  href: item.href,
@@ -2854,7 +2931,7 @@ function NavTabs({ items, className, "aria-label": ariaLabel }) {
2854
2931
  // src/components/Tooltip/Tooltip.tsx
2855
2932
  import { useId as useId3 } from "react";
2856
2933
  import styles30 from "./Tooltip.module.css";
2857
- import { jsx as jsx82, jsxs as jsxs63 } from "react/jsx-runtime";
2934
+ import { jsx as jsx84, jsxs as jsxs65 } from "react/jsx-runtime";
2858
2935
  var sideClass = {
2859
2936
  top: styles30.top,
2860
2937
  bottom: styles30.bottom,
@@ -2863,15 +2940,15 @@ var sideClass = {
2863
2940
  };
2864
2941
  function Tooltip({ content, children, side = "top" }) {
2865
2942
  const tipId = useId3();
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 })
2943
+ return /* @__PURE__ */ jsxs65("span", { className: styles30.wrapper, children: [
2944
+ /* @__PURE__ */ jsx84("span", { "aria-describedby": tipId, children }),
2945
+ /* @__PURE__ */ jsx84("span", { id: tipId, role: "tooltip", className: [styles30.tip, sideClass[side]].join(" "), children: content })
2869
2946
  ] });
2870
2947
  }
2871
2948
 
2872
2949
  // src/components/Checkbox/Checkbox.tsx
2873
2950
  import styles31 from "./Checkbox.module.css";
2874
- import { jsx as jsx83, jsxs as jsxs64 } from "react/jsx-runtime";
2951
+ import { jsx as jsx85, jsxs as jsxs66 } from "react/jsx-runtime";
2875
2952
  function Checkbox({
2876
2953
  checked,
2877
2954
  onChange,
@@ -2883,9 +2960,9 @@ function Checkbox({
2883
2960
  ...rest
2884
2961
  }) {
2885
2962
  const inputId = id ?? `checkbox-${label.toLowerCase().replace(/\s+/g, "-")}`;
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(
2963
+ return /* @__PURE__ */ jsxs66("span", { className: [styles31.root, className].filter(Boolean).join(" "), children: [
2964
+ /* @__PURE__ */ jsxs66("span", { className: [styles31.box, checked ? styles31.checked : ""].filter(Boolean).join(" "), children: [
2965
+ /* @__PURE__ */ jsx85(
2889
2966
  "input",
2890
2967
  {
2891
2968
  ...rest,
@@ -2897,7 +2974,7 @@ function Checkbox({
2897
2974
  onChange: (e) => onChange(e.target.checked)
2898
2975
  }
2899
2976
  ),
2900
- checked && /* @__PURE__ */ jsx83("svg", { className: styles31.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx83(
2977
+ checked && /* @__PURE__ */ jsx85("svg", { className: styles31.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx85(
2901
2978
  "path",
2902
2979
  {
2903
2980
  d: "M1 4l3 3 5-6",
@@ -2908,7 +2985,7 @@ function Checkbox({
2908
2985
  }
2909
2986
  ) })
2910
2987
  ] }),
2911
- label && /* @__PURE__ */ jsx83(
2988
+ label && /* @__PURE__ */ jsx85(
2912
2989
  "label",
2913
2990
  {
2914
2991
  htmlFor: inputId,
@@ -2923,79 +3000,1315 @@ function Checkbox({
2923
3000
  ] });
2924
3001
  }
2925
3002
 
2926
- // src/components/DragHandleRow/DragHandleRow.tsx
2927
- import styles32 from "./DragHandleRow.module.css";
2928
- import { jsx as jsx84, jsxs as jsxs65 } from "react/jsx-runtime";
2929
- function DragHandleRow({
2930
- children,
2931
- handleProps,
2932
- isDragging,
3003
+ // src/components/RadioGroup/RadioGroup.tsx
3004
+ import { useId as useId4 } from "react";
3005
+ import styles32 from "./RadioGroup.module.css";
3006
+ import { jsx as jsx86, jsxs as jsxs67 } from "react/jsx-runtime";
3007
+ function RadioGroup({
3008
+ items,
3009
+ value,
3010
+ onChange,
3011
+ name,
3012
+ disabled,
3013
+ id,
2933
3014
  className,
2934
- ...rest
3015
+ "aria-label": ariaLabel,
3016
+ "aria-labelledby": ariaLabelledBy,
3017
+ "aria-describedby": ariaDescribedBy,
3018
+ "aria-invalid": ariaInvalid,
3019
+ required
2935
3020
  }) {
2936
- return /* @__PURE__ */ jsxs65(
3021
+ const generatedName = useId4();
3022
+ const groupName = name ?? generatedName;
3023
+ return /* @__PURE__ */ jsx86(
2937
3024
  "div",
2938
3025
  {
2939
- ...rest,
2940
- className: [styles32.row, isDragging ? styles32.dragging : "", className].filter(Boolean).join(" "),
2941
- children: [
2942
- /* @__PURE__ */ jsx84(
2943
- "button",
3026
+ id,
3027
+ role: "radiogroup",
3028
+ "aria-label": ariaLabel,
3029
+ "aria-labelledby": ariaLabelledBy,
3030
+ "aria-describedby": ariaDescribedBy,
3031
+ "aria-invalid": ariaInvalid,
3032
+ "aria-required": required,
3033
+ className: [styles32.root, className].filter(Boolean).join(" "),
3034
+ children: items.map((item) => {
3035
+ const checked = item.value === value;
3036
+ const itemDisabled = disabled || item.disabled;
3037
+ const inputId = `${groupName}-${item.value}`;
3038
+ return /* @__PURE__ */ jsxs67(
3039
+ "label",
2944
3040
  {
2945
- type: "button",
2946
- "aria-label": "Drag to reorder",
2947
- className: styles32.handle,
2948
- tabIndex: -1,
2949
- ...handleProps,
2950
- children: /* @__PURE__ */ jsx84(DragIcon, {})
2951
- }
2952
- ),
2953
- /* @__PURE__ */ jsx84("div", { className: styles32.content, children })
2954
- ]
2955
- }
2956
- );
2957
- }
2958
- function DragIcon() {
2959
- return /* @__PURE__ */ jsx84(
2960
- "svg",
2961
- {
2962
- width: "14",
2963
- height: "14",
2964
- viewBox: "0 0 14 14",
2965
- fill: "none",
2966
- "aria-hidden": "true",
2967
- className: styles32.icon,
2968
- children: [3, 7, 11].map(
2969
- (cy) => [4, 10].map((cx) => /* @__PURE__ */ jsx84("circle", { cx, cy, r: 1.2, fill: "currentColor" }, `${cx}-${cy}`))
2970
- )
3041
+ htmlFor: inputId,
3042
+ className: [styles32.option, itemDisabled ? styles32.disabled : ""].filter(Boolean).join(" "),
3043
+ children: [
3044
+ /* @__PURE__ */ jsxs67("span", { className: [styles32.circle, checked ? styles32.checked : ""].join(" "), children: [
3045
+ /* @__PURE__ */ jsx86(
3046
+ "input",
3047
+ {
3048
+ id: inputId,
3049
+ type: "radio",
3050
+ name: groupName,
3051
+ value: item.value,
3052
+ checked,
3053
+ disabled: itemDisabled,
3054
+ required,
3055
+ className: styles32.input,
3056
+ onChange: () => onChange(item.value)
3057
+ }
3058
+ ),
3059
+ checked && /* @__PURE__ */ jsx86("span", { className: styles32.dot })
3060
+ ] }),
3061
+ /* @__PURE__ */ jsx86("span", { className: styles32.optionLabel, children: item.label })
3062
+ ]
3063
+ },
3064
+ item.value
3065
+ );
3066
+ })
2971
3067
  }
2972
3068
  );
2973
3069
  }
2974
3070
 
2975
- // src/components/FileDropzone/FileDropzone.tsx
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,
3071
+ // src/components/Slider/Slider.tsx
3072
+ import { useId as useId5 } from "react";
3073
+ import styles33 from "./Slider.module.css";
3074
+ import { jsx as jsx87, jsxs as jsxs68 } from "react/jsx-runtime";
3075
+ function Slider({
3076
+ value,
3077
+ onChange,
3078
+ min,
3079
+ max,
3080
+ step,
2983
3081
  label,
2984
- hint,
2985
- onFileSelect,
2986
- ariaLabel,
2987
3082
  disabled,
2988
- className
2989
- }) {
2990
- const [dragging, setDragging] = useState10(false);
2991
- const inputRef = useRef10(null);
2992
- return /* @__PURE__ */ jsxs66(
3083
+ id,
3084
+ className,
3085
+ "aria-label": ariaLabel,
3086
+ "aria-describedby": ariaDescribedBy,
3087
+ "aria-invalid": ariaInvalid,
3088
+ required
3089
+ }) {
3090
+ const generatedId = useId5();
3091
+ const inputId = id ?? generatedId;
3092
+ const fillPercent = max > min ? (value - min) / (max - min) * 100 : 0;
3093
+ return /* @__PURE__ */ jsxs68("div", { className: [styles33.root, className].filter(Boolean).join(" "), children: [
3094
+ label && /* @__PURE__ */ jsx87("label", { htmlFor: inputId, className: styles33.label, children: label }),
3095
+ /* @__PURE__ */ jsx87(
3096
+ "input",
3097
+ {
3098
+ id: inputId,
3099
+ type: "range",
3100
+ min,
3101
+ max,
3102
+ step,
3103
+ value,
3104
+ disabled,
3105
+ required,
3106
+ "aria-label": label ? void 0 : ariaLabel,
3107
+ "aria-describedby": ariaDescribedBy,
3108
+ "aria-invalid": ariaInvalid,
3109
+ className: styles33.slider,
3110
+ style: { "--slider-fill": `${fillPercent}%` },
3111
+ onChange: (e) => onChange(Number(e.target.value))
3112
+ }
3113
+ )
3114
+ ] });
3115
+ }
3116
+
3117
+ // src/components/Progress/Progress.tsx
3118
+ import styles34 from "./Progress.module.css";
3119
+ import { jsx as jsx88 } from "react/jsx-runtime";
3120
+ function Progress({ value, label, id, className }) {
3121
+ const clamped = Math.min(100, Math.max(0, value));
3122
+ return /* @__PURE__ */ jsx88(
3123
+ "div",
3124
+ {
3125
+ id,
3126
+ role: "progressbar",
3127
+ "aria-valuenow": clamped,
3128
+ "aria-valuemin": 0,
3129
+ "aria-valuemax": 100,
3130
+ "aria-label": label,
3131
+ className: [styles34.track, className].filter(Boolean).join(" "),
3132
+ children: /* @__PURE__ */ jsx88("div", { className: styles34.fill, style: { width: `${clamped}%` } })
3133
+ }
3134
+ );
3135
+ }
3136
+
3137
+ // src/components/Table/Table.tsx
3138
+ import styles35 from "./Table.module.css";
3139
+ import { jsx as jsx89 } from "react/jsx-runtime";
3140
+ function Table({ children, className }) {
3141
+ return /* @__PURE__ */ jsx89("div", { className: styles35.scrollContainer, children: /* @__PURE__ */ jsx89("table", { className: [styles35.table, className].filter(Boolean).join(" "), children }) });
3142
+ }
3143
+ function TableHead({ children }) {
3144
+ return /* @__PURE__ */ jsx89("thead", { className: styles35.head, children });
3145
+ }
3146
+ function TableBody({ children }) {
3147
+ return /* @__PURE__ */ jsx89("tbody", { className: styles35.body, children });
3148
+ }
3149
+ function TableRow({ children }) {
3150
+ return /* @__PURE__ */ jsx89("tr", { className: styles35.row, children });
3151
+ }
3152
+ function TableHeaderCell({ children, ...rest }) {
3153
+ return /* @__PURE__ */ jsx89("th", { className: styles35.th, ...rest, children });
3154
+ }
3155
+ function TableCell({ children, ...rest }) {
3156
+ return /* @__PURE__ */ jsx89("td", { className: styles35.td, ...rest, children });
3157
+ }
3158
+
3159
+ // src/components/Alert/Alert.tsx
3160
+ import styles36 from "./Alert.module.css";
3161
+ import { jsx as jsx90, jsxs as jsxs69 } from "react/jsx-runtime";
3162
+ var DEFAULT_ICON = {
3163
+ info: "info",
3164
+ success: "circle-check",
3165
+ warning: "alert-triangle",
3166
+ error: "circle-x",
3167
+ neutral: void 0
3168
+ };
3169
+ function Alert({ variant, heading, icon, children, id, className }) {
3170
+ const resolvedIcon = icon === void 0 ? DEFAULT_ICON[variant] : icon || void 0;
3171
+ return /* @__PURE__ */ jsxs69(
3172
+ "div",
3173
+ {
3174
+ id,
3175
+ role: variant === "error" ? "alert" : "status",
3176
+ className: [styles36.alert, styles36[variant], className].filter(Boolean).join(" "),
3177
+ children: [
3178
+ resolvedIcon && /* @__PURE__ */ jsx90(Icon, { name: resolvedIcon, size: "sm", className: styles36.icon, "aria-hidden": true }),
3179
+ /* @__PURE__ */ jsxs69("div", { className: styles36.content, children: [
3180
+ heading && /* @__PURE__ */ jsx90("p", { className: styles36.heading, children: heading }),
3181
+ /* @__PURE__ */ jsx90("div", { className: styles36.body, children })
3182
+ ] })
3183
+ ]
3184
+ }
3185
+ );
3186
+ }
3187
+
3188
+ // src/components/Breadcrumb/Breadcrumb.tsx
3189
+ import styles37 from "./Breadcrumb.module.css";
3190
+ import { jsx as jsx91, jsxs as jsxs70 } from "react/jsx-runtime";
3191
+ function Breadcrumb({
3192
+ items,
3193
+ renderLink,
3194
+ className,
3195
+ "aria-label": ariaLabel = "Breadcrumb"
3196
+ }) {
3197
+ return /* @__PURE__ */ jsx91("nav", { "aria-label": ariaLabel, className: [styles37.nav, className].filter(Boolean).join(" "), children: /* @__PURE__ */ jsx91("ol", { className: styles37.list, children: items.map((item, index) => {
3198
+ const isLast = index === items.length - 1;
3199
+ return /* @__PURE__ */ jsxs70("li", { className: styles37.item, children: [
3200
+ item.href ? renderLink ? renderLink(item, item.label) : /* @__PURE__ */ jsx91("a", { href: item.href, className: styles37.link, children: item.label }) : /* @__PURE__ */ jsx91("span", { className: styles37.current, "aria-current": "page", children: item.label }),
3201
+ !isLast && /* @__PURE__ */ jsx91(Icon, { name: "chevron-right", size: "xs", "aria-hidden": true, className: styles37.separator })
3202
+ ] }, item.label + index);
3203
+ }) }) });
3204
+ }
3205
+
3206
+ // src/components/Pagination/Pagination.tsx
3207
+ import styles38 from "./Pagination.module.css";
3208
+ import { jsx as jsx92, jsxs as jsxs71 } from "react/jsx-runtime";
3209
+ function getPageList(page, totalPages) {
3210
+ if (totalPages <= 1) return [1];
3211
+ const siblingCount = 1;
3212
+ const startPage = Math.max(2, page - siblingCount);
3213
+ const endPage = Math.min(totalPages - 1, page + siblingCount);
3214
+ const pages = [1];
3215
+ if (startPage > 2) pages.push("ellipsis");
3216
+ for (let p = startPage; p <= endPage; p++) {
3217
+ pages.push(p);
3218
+ }
3219
+ if (endPage < totalPages - 1) pages.push("ellipsis");
3220
+ pages.push(totalPages);
3221
+ return pages;
3222
+ }
3223
+ function Pagination({
3224
+ page,
3225
+ totalPages,
3226
+ onChange,
3227
+ className,
3228
+ "aria-label": ariaLabel = "Pagination"
3229
+ }) {
3230
+ const pages = getPageList(page, totalPages);
3231
+ return /* @__PURE__ */ jsxs71("nav", { "aria-label": ariaLabel, className: [styles38.nav, className].filter(Boolean).join(" "), children: [
3232
+ /* @__PURE__ */ jsx92(
3233
+ "button",
3234
+ {
3235
+ type: "button",
3236
+ className: styles38.navButton,
3237
+ onClick: () => onChange(page - 1),
3238
+ disabled: page <= 1,
3239
+ "aria-label": "Previous page",
3240
+ children: /* @__PURE__ */ jsx92(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
3241
+ }
3242
+ ),
3243
+ /* @__PURE__ */ jsx92("ul", { className: styles38.list, children: pages.map(
3244
+ (p, index) => p === "ellipsis" ? /* @__PURE__ */ jsx92("li", { className: styles38.ellipsis, "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`) : /* @__PURE__ */ jsx92("li", { children: /* @__PURE__ */ jsx92(
3245
+ "button",
3246
+ {
3247
+ type: "button",
3248
+ className: [styles38.pageButton, p === page ? styles38.active : ""].filter(Boolean).join(" "),
3249
+ onClick: () => onChange(p),
3250
+ "aria-current": p === page ? "page" : void 0,
3251
+ "aria-label": `Page ${p}`,
3252
+ children: p
3253
+ }
3254
+ ) }, p)
3255
+ ) }),
3256
+ /* @__PURE__ */ jsx92(
3257
+ "button",
3258
+ {
3259
+ type: "button",
3260
+ className: styles38.navButton,
3261
+ onClick: () => onChange(page + 1),
3262
+ disabled: page >= totalPages,
3263
+ "aria-label": "Next page",
3264
+ children: /* @__PURE__ */ jsx92(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
3265
+ }
3266
+ )
3267
+ ] });
3268
+ }
3269
+
3270
+ // src/components/Kbd/Kbd.tsx
3271
+ import styles39 from "./Kbd.module.css";
3272
+ import { jsx as jsx93 } from "react/jsx-runtime";
3273
+ function Kbd({ children, className }) {
3274
+ return /* @__PURE__ */ jsx93("kbd", { className: [styles39.kbd, className].filter(Boolean).join(" "), children });
3275
+ }
3276
+
3277
+ // src/components/Collapsible/Collapsible.tsx
3278
+ import { useId as useId6 } from "react";
3279
+ import styles40 from "./Collapsible.module.css";
3280
+ import { jsx as jsx94, jsxs as jsxs72 } from "react/jsx-runtime";
3281
+ function Collapsible({
3282
+ open,
3283
+ onOpenChange,
3284
+ trigger,
3285
+ children,
3286
+ id,
3287
+ className
3288
+ }) {
3289
+ const generatedId = useId6();
3290
+ const contentId = `${id ?? generatedId}-content`;
3291
+ return /* @__PURE__ */ jsxs72("div", { className: [styles40.root, className].filter(Boolean).join(" "), children: [
3292
+ /* @__PURE__ */ jsxs72(
3293
+ "button",
3294
+ {
3295
+ type: "button",
3296
+ className: styles40.trigger,
3297
+ "aria-expanded": open,
3298
+ "aria-controls": contentId,
3299
+ onClick: () => onOpenChange(!open),
3300
+ children: [
3301
+ /* @__PURE__ */ jsx94("span", { className: styles40.triggerLabel, children: trigger }),
3302
+ /* @__PURE__ */ jsx94(
3303
+ Icon,
3304
+ {
3305
+ name: "chevron-down",
3306
+ size: "sm",
3307
+ "aria-hidden": true,
3308
+ className: [styles40.chevron, open ? styles40.chevronOpen : ""].filter(Boolean).join(" ")
3309
+ }
3310
+ )
3311
+ ]
3312
+ }
3313
+ ),
3314
+ /* @__PURE__ */ jsx94(
3315
+ "div",
3316
+ {
3317
+ id: contentId,
3318
+ className: styles40.contentWrapper,
3319
+ "data-open": open,
3320
+ inert: !open || void 0,
3321
+ children: /* @__PURE__ */ jsx94("div", { className: styles40.contentInner, children })
3322
+ }
3323
+ )
3324
+ ] });
3325
+ }
3326
+
3327
+ // src/components/Accordion/Accordion.tsx
3328
+ import styles41 from "./Accordion.module.css";
3329
+ import { jsx as jsx95 } from "react/jsx-runtime";
3330
+ function Accordion({ items, type, openIds, onOpenIdsChange, className }) {
3331
+ function handleOpenChange(id, open) {
3332
+ if (type === "single") {
3333
+ onOpenIdsChange(open ? [id] : []);
3334
+ return;
3335
+ }
3336
+ onOpenIdsChange(open ? [...openIds, id] : openIds.filter((openId) => openId !== id));
3337
+ }
3338
+ return /* @__PURE__ */ jsx95("div", { className: [styles41.root, className].filter(Boolean).join(" "), children: items.map((item) => /* @__PURE__ */ jsx95(
3339
+ Collapsible,
3340
+ {
3341
+ id: item.id,
3342
+ trigger: item.trigger,
3343
+ open: openIds.includes(item.id),
3344
+ onOpenChange: (open) => handleOpenChange(item.id, open),
3345
+ children: item.content
3346
+ },
3347
+ item.id
3348
+ )) });
3349
+ }
3350
+
3351
+ // src/components/AspectRatio/AspectRatio.tsx
3352
+ import styles42 from "./AspectRatio.module.css";
3353
+ import { jsx as jsx96 } from "react/jsx-runtime";
3354
+ function AspectRatio({ ratio, children, className }) {
3355
+ return /* @__PURE__ */ jsx96(
3356
+ "div",
3357
+ {
3358
+ className: [styles42.root, className].filter(Boolean).join(" "),
3359
+ style: { aspectRatio: ratio },
3360
+ children
3361
+ }
3362
+ );
3363
+ }
3364
+
3365
+ // src/components/ButtonGroup/ButtonGroup.tsx
3366
+ import styles43 from "./ButtonGroup.module.css";
3367
+ import { jsx as jsx97 } from "react/jsx-runtime";
3368
+ function ButtonGroup({ children, className, "aria-label": ariaLabel }) {
3369
+ return /* @__PURE__ */ jsx97(
3370
+ "div",
3371
+ {
3372
+ role: "group",
3373
+ "aria-label": ariaLabel,
3374
+ className: [styles43.root, className].filter(Boolean).join(" "),
3375
+ children
3376
+ }
3377
+ );
3378
+ }
3379
+
3380
+ // src/components/Item/Item.tsx
3381
+ import styles44 from "./Item.module.css";
3382
+ import { Fragment as Fragment2, jsx as jsx98, jsxs as jsxs73 } from "react/jsx-runtime";
3383
+ function Item({
3384
+ leading,
3385
+ title,
3386
+ description,
3387
+ trailing,
3388
+ onClick,
3389
+ disabled,
3390
+ className
3391
+ }) {
3392
+ const interactive = Boolean(onClick);
3393
+ const classes = [styles44.root, interactive ? styles44.interactive : "", className].filter(Boolean).join(" ");
3394
+ const content = /* @__PURE__ */ jsxs73(Fragment2, { children: [
3395
+ leading && /* @__PURE__ */ jsx98("span", { className: styles44.leading, children: leading }),
3396
+ /* @__PURE__ */ jsxs73("span", { className: styles44.content, children: [
3397
+ /* @__PURE__ */ jsx98("span", { className: styles44.title, children: title }),
3398
+ description && /* @__PURE__ */ jsx98("span", { className: styles44.description, children: description })
3399
+ ] }),
3400
+ trailing && /* @__PURE__ */ jsx98("span", { className: styles44.trailing, children: trailing })
3401
+ ] });
3402
+ if (interactive) {
3403
+ return /* @__PURE__ */ jsx98("button", { type: "button", onClick, disabled, className: classes, children: content });
3404
+ }
3405
+ return /* @__PURE__ */ jsx98("div", { className: classes, children: content });
3406
+ }
3407
+
3408
+ // src/components/Label/Label.tsx
3409
+ import styles45 from "./Label.module.css";
3410
+ import { jsx as jsx99 } from "react/jsx-runtime";
3411
+ function Label({ disabled, className, children, ...rest }) {
3412
+ return /* @__PURE__ */ jsx99(
3413
+ "label",
3414
+ {
3415
+ className: [styles45.label, disabled ? styles45.disabled : "", className].filter(Boolean).join(" "),
3416
+ ...rest,
3417
+ children
3418
+ }
3419
+ );
3420
+ }
3421
+
3422
+ // src/components/ScrollArea/ScrollArea.tsx
3423
+ import styles46 from "./ScrollArea.module.css";
3424
+ import { jsx as jsx100 } from "react/jsx-runtime";
3425
+ function ScrollArea({ children, maxHeight, maxWidth, className }) {
3426
+ const style = {};
3427
+ if (maxHeight !== void 0) style.maxHeight = maxHeight;
3428
+ if (maxWidth !== void 0) style.maxWidth = maxWidth;
3429
+ return /* @__PURE__ */ jsx100("div", { className: [styles46.root, className].filter(Boolean).join(" "), style, children });
3430
+ }
3431
+
3432
+ // src/components/Typography/Typography.tsx
3433
+ import styles47 from "./Typography.module.css";
3434
+ import { jsx as jsx101 } from "react/jsx-runtime";
3435
+ var DEFAULT_TAG = {
3436
+ h1: "h1",
3437
+ h2: "h2",
3438
+ h3: "h3",
3439
+ h4: "h4",
3440
+ body: "p",
3441
+ caption: "p",
3442
+ label: "span"
3443
+ };
3444
+ function Typography({ variant, children, as, className }) {
3445
+ const Tag = as ?? DEFAULT_TAG[variant];
3446
+ return /* @__PURE__ */ jsx101(Tag, { className: [styles47[variant], className].filter(Boolean).join(" "), children });
3447
+ }
3448
+
3449
+ // src/components/Marker/Marker.tsx
3450
+ import styles48 from "./Marker.module.css";
3451
+ import { jsx as jsx102 } from "react/jsx-runtime";
3452
+ function Marker({ index, label, onClick, className }) {
3453
+ const classes = [styles48.marker, className].filter(Boolean).join(" ");
3454
+ if (onClick) {
3455
+ return /* @__PURE__ */ jsx102("button", { type: "button", onClick, "aria-label": label, className: classes, children: index });
3456
+ }
3457
+ return /* @__PURE__ */ jsx102("span", { "aria-label": label, className: classes, children: index });
3458
+ }
3459
+
3460
+ // src/components/Message/Message.tsx
3461
+ import styles49 from "./Message.module.css";
3462
+ import { jsx as jsx103, jsxs as jsxs74 } from "react/jsx-runtime";
3463
+ function Message({ sender, children, pending, actions, className }) {
3464
+ return /* @__PURE__ */ jsxs74("div", { className: [styles49.row, styles49[sender], className].filter(Boolean).join(" "), children: [
3465
+ /* @__PURE__ */ jsx103("div", { className: styles49.bubble, children: pending ? /* @__PURE__ */ jsxs74("span", { className: styles49.typingDots, "aria-label": "Thinking", children: [
3466
+ /* @__PURE__ */ jsx103("span", { className: styles49.dot }),
3467
+ /* @__PURE__ */ jsx103("span", { className: styles49.dot }),
3468
+ /* @__PURE__ */ jsx103("span", { className: styles49.dot })
3469
+ ] }) : children }),
3470
+ actions && !pending && /* @__PURE__ */ jsx103("div", { className: styles49.actions, children: actions })
3471
+ ] });
3472
+ }
3473
+
3474
+ // src/components/MessageScroller/MessageScroller.tsx
3475
+ import { useEffect as useEffect11, useRef as useRef10, useState as useState10 } from "react";
3476
+ import styles50 from "./MessageScroller.module.css";
3477
+ import { jsx as jsx104, jsxs as jsxs75 } from "react/jsx-runtime";
3478
+ var NEAR_BOTTOM_THRESHOLD_PX = 80;
3479
+ function MessageScroller({ children, className }) {
3480
+ const containerRef = useRef10(null);
3481
+ const isNearBottomRef = useRef10(true);
3482
+ const [hasNewMessages, setHasNewMessages] = useState10(false);
3483
+ useEffect11(() => {
3484
+ const el = containerRef.current;
3485
+ if (!el) return;
3486
+ if (isNearBottomRef.current) {
3487
+ el.scrollTop = el.scrollHeight;
3488
+ setHasNewMessages(false);
3489
+ } else {
3490
+ setHasNewMessages(true);
3491
+ }
3492
+ }, [children]);
3493
+ function handleScroll(event) {
3494
+ const el = event.currentTarget;
3495
+ const distanceFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight;
3496
+ isNearBottomRef.current = distanceFromBottom < NEAR_BOTTOM_THRESHOLD_PX;
3497
+ if (isNearBottomRef.current) {
3498
+ setHasNewMessages(false);
3499
+ }
3500
+ }
3501
+ function scrollToBottom() {
3502
+ const el = containerRef.current;
3503
+ if (!el) return;
3504
+ el.scrollTo({ top: el.scrollHeight, behavior: "smooth" });
3505
+ isNearBottomRef.current = true;
3506
+ setHasNewMessages(false);
3507
+ }
3508
+ return /* @__PURE__ */ jsxs75("div", { className: [styles50.root, className].filter(Boolean).join(" "), children: [
3509
+ /* @__PURE__ */ jsx104("div", { className: styles50.scrollContainer, ref: containerRef, onScroll: handleScroll, children }),
3510
+ hasNewMessages && /* @__PURE__ */ jsx104("button", { type: "button", className: styles50.jumpButton, onClick: scrollToBottom, children: "New messages \u2193" })
3511
+ ] });
3512
+ }
3513
+
3514
+ // src/components/HoverCard/HoverCard.tsx
3515
+ import { cloneElement, useEffect as useEffect12, useRef as useRef11, useState as useState11 } from "react";
3516
+ import styles51 from "./HoverCard.module.css";
3517
+ import { jsx as jsx105 } from "react/jsx-runtime";
3518
+ var OPEN_DELAY_MS = 400;
3519
+ var CLOSE_DELAY_MS = 150;
3520
+ function useHoverCapable() {
3521
+ const [hoverCapable, setHoverCapable] = useState11(true);
3522
+ useEffect12(() => {
3523
+ const mql = window.matchMedia("(hover: hover)");
3524
+ setHoverCapable(mql.matches);
3525
+ function handleChange(e) {
3526
+ setHoverCapable(e.matches);
3527
+ }
3528
+ mql.addEventListener("change", handleChange);
3529
+ return () => mql.removeEventListener("change", handleChange);
3530
+ }, []);
3531
+ return hoverCapable;
3532
+ }
3533
+ function HoverCard({
3534
+ trigger,
3535
+ children,
3536
+ align,
3537
+ width,
3538
+ "aria-label": ariaLabel
3539
+ }) {
3540
+ const [open, setOpen] = useState11(false);
3541
+ const hoverCapable = useHoverCapable();
3542
+ const openTimer = useRef11(void 0);
3543
+ const closeTimer = useRef11(void 0);
3544
+ function scheduleOpen() {
3545
+ clearTimeout(closeTimer.current);
3546
+ openTimer.current = setTimeout(() => setOpen(true), OPEN_DELAY_MS);
3547
+ }
3548
+ function scheduleClose() {
3549
+ clearTimeout(openTimer.current);
3550
+ closeTimer.current = setTimeout(() => setOpen(false), CLOSE_DELAY_MS);
3551
+ }
3552
+ function cancelScheduledClose() {
3553
+ clearTimeout(closeTimer.current);
3554
+ }
3555
+ const triggerHandlers = hoverCapable ? {
3556
+ onMouseEnter: scheduleOpen,
3557
+ onMouseLeave: scheduleClose,
3558
+ onFocus: () => setOpen(true),
3559
+ onBlur: scheduleClose
3560
+ } : { onClick: () => setOpen((o) => !o) };
3561
+ const wrappedTrigger = cloneElement(trigger, triggerHandlers);
3562
+ return /* @__PURE__ */ jsx105(
3563
+ "div",
3564
+ {
3565
+ className: styles51.root,
3566
+ onMouseEnter: hoverCapable ? cancelScheduledClose : void 0,
3567
+ onMouseLeave: hoverCapable ? scheduleClose : void 0,
3568
+ children: /* @__PURE__ */ jsx105(
3569
+ Popover,
3570
+ {
3571
+ trigger: wrappedTrigger,
3572
+ open,
3573
+ onClose: () => setOpen(false),
3574
+ align,
3575
+ width,
3576
+ "aria-label": ariaLabel,
3577
+ children
3578
+ }
3579
+ )
3580
+ }
3581
+ );
3582
+ }
3583
+
3584
+ // src/components/ContextMenu/ContextMenu.tsx
3585
+ import { cloneElement as cloneElement2, useState as useState12 } from "react";
3586
+ import { Fragment as Fragment3, jsx as jsx106, jsxs as jsxs76 } from "react/jsx-runtime";
3587
+ function ContextMenu({ children, items, "aria-label": ariaLabel }) {
3588
+ const isMobile = useIsMobile();
3589
+ const [open, setOpen] = useState12(false);
3590
+ const [point, setPoint] = useState12({ x: 0, y: 0 });
3591
+ const longPressHandlers = useLongPress({
3592
+ onLongPress: () => setOpen(true),
3593
+ disabled: !isMobile
3594
+ });
3595
+ function handleContextMenu(e) {
3596
+ e.preventDefault();
3597
+ setPoint({ x: e.clientX, y: e.clientY });
3598
+ setOpen(true);
3599
+ }
3600
+ const wrappedChild = cloneElement2(
3601
+ children,
3602
+ isMobile ? longPressHandlers : { onContextMenu: handleContextMenu }
3603
+ );
3604
+ const list = /* @__PURE__ */ jsx106(
3605
+ MenuEntries,
3606
+ {
3607
+ items,
3608
+ onSelect: (entry) => {
3609
+ setOpen(false);
3610
+ entry.onSelect();
3611
+ }
3612
+ }
3613
+ );
3614
+ if (isMobile) {
3615
+ return /* @__PURE__ */ jsxs76(Fragment3, { children: [
3616
+ wrappedChild,
3617
+ /* @__PURE__ */ jsx106(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: list })
3618
+ ] });
3619
+ }
3620
+ return /* @__PURE__ */ jsxs76(Fragment3, { children: [
3621
+ wrappedChild,
3622
+ open && /* @__PURE__ */ jsx106("div", { style: { position: "fixed", left: point.x, top: point.y, width: 0, height: 0 }, children: /* @__PURE__ */ jsx106(
3623
+ Popover,
3624
+ {
3625
+ trigger: /* @__PURE__ */ jsx106("span", {}),
3626
+ open,
3627
+ onClose: () => setOpen(false),
3628
+ "aria-label": ariaLabel,
3629
+ children: list
3630
+ }
3631
+ ) })
3632
+ ] });
3633
+ }
3634
+
3635
+ // src/components/NavigationMenu/NavigationMenu.tsx
3636
+ import { useRef as useRef12, useState as useState13 } from "react";
3637
+ import styles52 from "./NavigationMenu.module.css";
3638
+ import { jsx as jsx107 } from "react/jsx-runtime";
3639
+ function NavigationMenu({
3640
+ items,
3641
+ renderLink,
3642
+ "aria-label": ariaLabel
3643
+ }) {
3644
+ const [openIndex, setOpenIndex] = useState13(null);
3645
+ const triggerRefs = useRef12([]);
3646
+ function handleKeyDown(e, index) {
3647
+ if (e.key === "Escape") {
3648
+ setOpenIndex(null);
3649
+ triggerRefs.current[index]?.focus();
3650
+ return;
3651
+ }
3652
+ if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
3653
+ e.preventDefault();
3654
+ const direction = e.key === "ArrowRight" ? 1 : -1;
3655
+ const nextIndex = (index + direction + items.length) % items.length;
3656
+ triggerRefs.current[nextIndex]?.focus();
3657
+ }
3658
+ }
3659
+ return /* @__PURE__ */ jsx107("nav", { "aria-label": ariaLabel, className: styles52.nav, children: /* @__PURE__ */ jsx107("ul", { className: styles52.list, children: items.map((item, index) => {
3660
+ if (!item.content) {
3661
+ const linkChildren = item.label;
3662
+ return /* @__PURE__ */ jsx107("li", { children: item.href && renderLink ? renderLink(item.href, linkChildren) : /* @__PURE__ */ jsx107("a", { href: item.href, className: styles52.link, children: linkChildren }) }, item.label);
3663
+ }
3664
+ const isOpen = openIndex === index;
3665
+ return /* @__PURE__ */ jsx107("li", { children: /* @__PURE__ */ jsx107(
3666
+ Popover,
3667
+ {
3668
+ "aria-label": item.label,
3669
+ open: isOpen,
3670
+ onClose: () => setOpenIndex((current) => current === index ? null : current),
3671
+ trigger: /* @__PURE__ */ jsx107(
3672
+ "button",
3673
+ {
3674
+ ref: (el) => {
3675
+ triggerRefs.current[index] = el;
3676
+ },
3677
+ type: "button",
3678
+ className: [styles52.trigger, isOpen ? styles52.triggerOpen : ""].filter(Boolean).join(" "),
3679
+ "aria-expanded": isOpen,
3680
+ onClick: () => setOpenIndex((current) => current === index ? null : index),
3681
+ onMouseEnter: () => {
3682
+ setOpenIndex((current) => current !== null ? index : current);
3683
+ },
3684
+ onKeyDown: (e) => handleKeyDown(e, index),
3685
+ children: item.label
3686
+ }
3687
+ ),
3688
+ children: typeof item.content === "function" ? item.content(() => setOpenIndex(null)) : item.content
3689
+ }
3690
+ ) }, item.label);
3691
+ }) }) });
3692
+ }
3693
+
3694
+ // src/components/Menubar/Menubar.tsx
3695
+ import { jsx as jsx108 } from "react/jsx-runtime";
3696
+ function Menubar({ menus, "aria-label": ariaLabel = "Menu bar" }) {
3697
+ return /* @__PURE__ */ jsx108(
3698
+ NavigationMenu,
3699
+ {
3700
+ "aria-label": ariaLabel,
3701
+ items: menus.map((menu) => ({
3702
+ label: menu.label,
3703
+ content: (close) => /* @__PURE__ */ jsx108(
3704
+ MenuEntries,
3705
+ {
3706
+ items: menu.items,
3707
+ onSelect: (entry) => {
3708
+ close();
3709
+ entry.onSelect();
3710
+ }
3711
+ }
3712
+ )
3713
+ }))
3714
+ }
3715
+ );
3716
+ }
3717
+
3718
+ // src/components/Command/Command.tsx
3719
+ import { useEffect as useEffect13, useId as useId7, useMemo as useMemo3, useRef as useRef13, useState as useState14 } from "react";
3720
+ import styles53 from "./Command.module.css";
3721
+ import { jsx as jsx109, jsxs as jsxs77 } from "react/jsx-runtime";
3722
+ function matches(item, query) {
3723
+ if (!query) return true;
3724
+ const haystack = `${item.label} ${item.keywords ?? ""}`.toLowerCase();
3725
+ return haystack.includes(query.toLowerCase());
3726
+ }
3727
+ function Command({
3728
+ open,
3729
+ onClose,
3730
+ items,
3731
+ placeholder = "Type a command\u2026",
3732
+ "aria-label": ariaLabel = "Command palette"
3733
+ }) {
3734
+ const [query, setQuery] = useState14("");
3735
+ const [highlightedIndex, setHighlightedIndex] = useState14(0);
3736
+ const inputRef = useRef13(null);
3737
+ const listId = useId7();
3738
+ const filtered = useMemo3(() => items.filter((item) => matches(item, query)), [items, query]);
3739
+ useEffect13(() => {
3740
+ setHighlightedIndex(0);
3741
+ }, [query, open]);
3742
+ useEffect13(() => {
3743
+ if (open) {
3744
+ setQuery("");
3745
+ requestAnimationFrame(() => inputRef.current?.focus());
3746
+ }
3747
+ }, [open]);
3748
+ function handleKeyDown(e) {
3749
+ if (e.key === "ArrowDown") {
3750
+ e.preventDefault();
3751
+ setHighlightedIndex((i) => Math.min(i + 1, filtered.length - 1));
3752
+ } else if (e.key === "ArrowUp") {
3753
+ e.preventDefault();
3754
+ setHighlightedIndex((i) => Math.max(i - 1, 0));
3755
+ } else if (e.key === "Enter") {
3756
+ e.preventDefault();
3757
+ const item = filtered[highlightedIndex];
3758
+ if (item) {
3759
+ onClose();
3760
+ item.onSelect();
3761
+ }
3762
+ }
3763
+ }
3764
+ const groups = useMemo3(() => {
3765
+ const order = [];
3766
+ const byGroup = /* @__PURE__ */ new Map();
3767
+ for (const item of filtered) {
3768
+ let bucket = byGroup.get(item.group);
3769
+ if (!bucket) {
3770
+ bucket = [];
3771
+ order.push(item.group);
3772
+ byGroup.set(item.group, bucket);
3773
+ }
3774
+ bucket.push(item);
3775
+ }
3776
+ return order.map((group) => ({ group, items: byGroup.get(group) ?? [] }));
3777
+ }, [filtered]);
3778
+ const highlightedId = filtered[highlightedIndex] ? `${listId}-${filtered[highlightedIndex].id}` : void 0;
3779
+ return /* @__PURE__ */ jsx109(Dialog, { open, onClose, "aria-label": ariaLabel, size: "sm", children: /* @__PURE__ */ jsxs77("div", { className: styles53.root, children: [
3780
+ /* @__PURE__ */ jsx109(
3781
+ "input",
3782
+ {
3783
+ ref: inputRef,
3784
+ type: "text",
3785
+ role: "combobox",
3786
+ "aria-expanded": filtered.length > 0,
3787
+ "aria-controls": listId,
3788
+ "aria-activedescendant": highlightedId,
3789
+ "aria-autocomplete": "list",
3790
+ className: styles53.input,
3791
+ placeholder,
3792
+ value: query,
3793
+ onChange: (e) => setQuery(e.target.value),
3794
+ onKeyDown: handleKeyDown
3795
+ }
3796
+ ),
3797
+ /* @__PURE__ */ jsxs77("ul", { id: listId, role: "listbox", className: styles53.list, children: [
3798
+ filtered.length === 0 && /* @__PURE__ */ jsx109("li", { className: styles53.empty, children: "No matching commands." }),
3799
+ groups.map(({ group, items: groupItems }) => /* @__PURE__ */ jsxs77("li", { children: [
3800
+ group && /* @__PURE__ */ jsx109("div", { className: styles53.groupLabel, children: group }),
3801
+ /* @__PURE__ */ jsx109("ul", { className: styles53.groupList, children: groupItems.map((item) => {
3802
+ const index = filtered.indexOf(item);
3803
+ const isHighlighted = index === highlightedIndex;
3804
+ return /* @__PURE__ */ jsx109("li", { children: /* @__PURE__ */ jsxs77(
3805
+ "button",
3806
+ {
3807
+ id: `${listId}-${item.id}`,
3808
+ type: "button",
3809
+ role: "option",
3810
+ "aria-selected": isHighlighted,
3811
+ className: [styles53.item, isHighlighted ? styles53.itemHighlighted : ""].filter(Boolean).join(" "),
3812
+ onMouseEnter: () => setHighlightedIndex(index),
3813
+ onClick: () => {
3814
+ onClose();
3815
+ item.onSelect();
3816
+ },
3817
+ children: [
3818
+ item.icon && /* @__PURE__ */ jsx109(Icon, { name: item.icon, size: "sm", "aria-hidden": true }),
3819
+ item.label
3820
+ ]
3821
+ }
3822
+ ) }, item.id);
3823
+ }) })
3824
+ ] }, group ?? "__ungrouped"))
3825
+ ] })
3826
+ ] }) });
3827
+ }
3828
+
3829
+ // src/components/Resizable/Resizable.tsx
3830
+ import { Children, isValidElement, useEffect as useEffect14, useRef as useRef14, useState as useState15 } from "react";
3831
+ import styles54 from "./Resizable.module.css";
3832
+ import { jsx as jsx110 } from "react/jsx-runtime";
3833
+ function ResizablePanel({ children, className, style }) {
3834
+ return /* @__PURE__ */ jsx110("div", { className: [styles54.panel, className].filter(Boolean).join(" "), style, children });
3835
+ }
3836
+ function ResizableHandle({
3837
+ "aria-label": ariaLabel = "Resize panels",
3838
+ direction = "horizontal",
3839
+ onPointerDown,
3840
+ onKeyDown,
3841
+ "aria-valuenow": valueNow,
3842
+ "aria-valuemin": valueMin,
3843
+ "aria-valuemax": valueMax
3844
+ }) {
3845
+ return (
3846
+ /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex -- WAI-ARIA "window splitter" pattern: a focusable, keyboard-operable separator is the documented exception to role="separator" being non-interactive (https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/). */
3847
+ /* @__PURE__ */ jsx110(
3848
+ "div",
3849
+ {
3850
+ className: [styles54.handle, direction === "vertical" ? styles54.handleVertical : ""].filter(Boolean).join(" "),
3851
+ role: "separator",
3852
+ tabIndex: 0,
3853
+ "aria-orientation": direction === "horizontal" ? "vertical" : "horizontal",
3854
+ "aria-label": ariaLabel,
3855
+ "aria-valuenow": valueNow !== void 0 ? Math.round(valueNow) : void 0,
3856
+ "aria-valuemin": valueMin,
3857
+ "aria-valuemax": valueMax,
3858
+ onPointerDown,
3859
+ onKeyDown
3860
+ }
3861
+ )
3862
+ );
3863
+ }
3864
+ var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
3865
+ function ResizablePanelGroup({ direction, children, className }) {
3866
+ const elements = Children.toArray(children).filter(isValidElement);
3867
+ const panelCount = elements.filter((el) => el.type === ResizablePanel).length;
3868
+ const constraints = elements.filter((el) => el.type === ResizablePanel).map((el) => {
3869
+ const props = el.props;
3870
+ return {
3871
+ defaultSize: props.defaultSize ?? 100 / panelCount,
3872
+ minSize: props.minSize ?? 10,
3873
+ maxSize: props.maxSize ?? 90
3874
+ };
3875
+ });
3876
+ const [sizes, setSizes] = useState15(() => constraints.map((c) => c.defaultSize));
3877
+ if (sizes.length !== constraints.length) {
3878
+ setSizes(constraints.map((c) => c.defaultSize));
3879
+ }
3880
+ const containerRef = useRef14(null);
3881
+ const constraintsRef = useRef14(constraints);
3882
+ constraintsRef.current = constraints;
3883
+ const directionRef = useRef14(direction);
3884
+ directionRef.current = direction;
3885
+ const dragState = useRef14(null);
3886
+ function applyResize(handleIndex2, nextA, combined) {
3887
+ const a = constraintsRef.current[handleIndex2];
3888
+ const b = constraintsRef.current[handleIndex2 + 1];
3889
+ if (!a || !b) return;
3890
+ const clampedA = clamp(
3891
+ nextA,
3892
+ Math.max(a.minSize, combined - b.maxSize),
3893
+ Math.min(a.maxSize, combined - b.minSize)
3894
+ );
3895
+ setSizes((prev) => {
3896
+ const next = [...prev];
3897
+ next[handleIndex2] = clampedA;
3898
+ next[handleIndex2 + 1] = combined - clampedA;
3899
+ return next;
3900
+ });
3901
+ }
3902
+ useEffect14(() => {
3903
+ function handlePointerMove(event) {
3904
+ const drag = dragState.current;
3905
+ const rect = containerRef.current?.getBoundingClientRect();
3906
+ if (!drag || !rect || event.pointerId !== drag.pointerId) return;
3907
+ const size = directionRef.current === "horizontal" ? rect.width : rect.height;
3908
+ if (size === 0) return;
3909
+ const pos = directionRef.current === "horizontal" ? event.clientX : event.clientY;
3910
+ const deltaPercent = (pos - drag.startPos) / size * 100;
3911
+ applyResize(drag.handleIndex, drag.startA + deltaPercent, drag.combined);
3912
+ }
3913
+ function stopDragging(event) {
3914
+ if (!dragState.current || event.pointerId !== dragState.current.pointerId) return;
3915
+ dragState.current = null;
3916
+ document.body.style.cursor = "";
3917
+ document.body.style.userSelect = "";
3918
+ }
3919
+ window.addEventListener("pointermove", handlePointerMove);
3920
+ window.addEventListener("pointerup", stopDragging);
3921
+ window.addEventListener("pointercancel", stopDragging);
3922
+ return () => {
3923
+ window.removeEventListener("pointermove", handlePointerMove);
3924
+ window.removeEventListener("pointerup", stopDragging);
3925
+ window.removeEventListener("pointercancel", stopDragging);
3926
+ document.body.style.cursor = "";
3927
+ document.body.style.userSelect = "";
3928
+ };
3929
+ }, []);
3930
+ function startDragging(handleIndex2, event) {
3931
+ const startA = sizes[handleIndex2] ?? 0;
3932
+ const startB = sizes[handleIndex2 + 1] ?? 0;
3933
+ dragState.current = {
3934
+ handleIndex: handleIndex2,
3935
+ pointerId: event.pointerId,
3936
+ startPos: direction === "horizontal" ? event.clientX : event.clientY,
3937
+ startA,
3938
+ combined: startA + startB
3939
+ };
3940
+ document.body.style.cursor = direction === "horizontal" ? "col-resize" : "row-resize";
3941
+ document.body.style.userSelect = "none";
3942
+ event.currentTarget.setPointerCapture(event.pointerId);
3943
+ }
3944
+ function resizeWithKeyboard(handleIndex2, event) {
3945
+ const step = event.shiftKey ? 10 : 5;
3946
+ const forwardKey = direction === "horizontal" ? "ArrowRight" : "ArrowDown";
3947
+ const backwardKey = direction === "horizontal" ? "ArrowLeft" : "ArrowUp";
3948
+ const sizeA = sizes[handleIndex2] ?? 0;
3949
+ const sizeB = sizes[handleIndex2 + 1] ?? 0;
3950
+ const combined = sizeA + sizeB;
3951
+ if (event.key === forwardKey) {
3952
+ event.preventDefault();
3953
+ applyResize(handleIndex2, sizeA + step, combined);
3954
+ } else if (event.key === backwardKey) {
3955
+ event.preventDefault();
3956
+ applyResize(handleIndex2, sizeA - step, combined);
3957
+ }
3958
+ }
3959
+ let panelIndex = -1;
3960
+ let handleIndex = -1;
3961
+ return /* @__PURE__ */ jsx110(
3962
+ "div",
3963
+ {
3964
+ ref: containerRef,
3965
+ className: [styles54.group, direction === "vertical" ? styles54.groupVertical : "", className].filter(Boolean).join(" "),
3966
+ children: elements.map((element, key) => {
3967
+ if (element.type === ResizablePanel) {
3968
+ panelIndex += 1;
3969
+ const size = sizes[panelIndex] ?? constraints[panelIndex]?.defaultSize ?? 0;
3970
+ return /* @__PURE__ */ jsx110(
3971
+ ResizablePanelClone,
3972
+ {
3973
+ element,
3974
+ flexBasis: size
3975
+ },
3976
+ key
3977
+ );
3978
+ }
3979
+ if (element.type === ResizableHandle) {
3980
+ handleIndex += 1;
3981
+ const index = handleIndex;
3982
+ const constraint = constraints[index];
3983
+ return /* @__PURE__ */ jsx110(
3984
+ ResizableHandleClone,
3985
+ {
3986
+ element,
3987
+ direction,
3988
+ "aria-valuenow": sizes[index],
3989
+ "aria-valuemin": constraint?.minSize,
3990
+ "aria-valuemax": constraint?.maxSize,
3991
+ onPointerDown: (e) => startDragging(index, e),
3992
+ onKeyDown: (e) => resizeWithKeyboard(index, e)
3993
+ },
3994
+ key
3995
+ );
3996
+ }
3997
+ return element;
3998
+ })
3999
+ }
4000
+ );
4001
+ }
4002
+ function ResizablePanelClone({
4003
+ element,
4004
+ flexBasis
4005
+ }) {
4006
+ const style = {
4007
+ ...element.props.style,
4008
+ flexBasis: `${flexBasis}%`,
4009
+ flexGrow: 0,
4010
+ flexShrink: 0
4011
+ };
4012
+ return /* @__PURE__ */ jsx110(ResizablePanel, { ...element.props, style });
4013
+ }
4014
+ function ResizableHandleClone({
4015
+ element,
4016
+ ...injected
4017
+ }) {
4018
+ return /* @__PURE__ */ jsx110(ResizableHandle, { ...element.props, ...injected });
4019
+ }
4020
+
4021
+ // src/components/DataTable/DataTable.tsx
4022
+ import { useMemo as useMemo4, useState as useState16 } from "react";
4023
+ import styles55 from "./DataTable.module.css";
4024
+ import { jsx as jsx111, jsxs as jsxs78 } from "react/jsx-runtime";
4025
+ function compareValues(a, b) {
4026
+ if (typeof a === "number" && typeof b === "number") return a - b;
4027
+ return String(a).localeCompare(String(b));
4028
+ }
4029
+ function DataTable({
4030
+ columns,
4031
+ data,
4032
+ getRowKey,
4033
+ defaultSortKey,
4034
+ defaultSortDirection = "asc",
4035
+ emptyMessage = "No results.",
4036
+ className
4037
+ }) {
4038
+ const [sortKey, setSortKey] = useState16(defaultSortKey);
4039
+ const [sortDirection, setSortDirection] = useState16(defaultSortDirection);
4040
+ const sortColumn = columns.find((c) => c.key === sortKey);
4041
+ const sortedData = useMemo4(() => {
4042
+ if (!sortColumn) return data;
4043
+ const getValue = sortColumn.sortValue ?? ((row) => row[sortColumn.key]);
4044
+ const sorted = [...data].sort((a, b) => compareValues(getValue(a), getValue(b)));
4045
+ return sortDirection === "asc" ? sorted : sorted.reverse();
4046
+ }, [data, sortColumn, sortDirection]);
4047
+ function handleSort(column) {
4048
+ if (!column.sortable) return;
4049
+ if (sortKey !== column.key) {
4050
+ setSortKey(column.key);
4051
+ setSortDirection("asc");
4052
+ } else if (sortDirection === "asc") {
4053
+ setSortDirection("desc");
4054
+ } else {
4055
+ setSortKey(void 0);
4056
+ setSortDirection("asc");
4057
+ }
4058
+ }
4059
+ if (data.length === 0) {
4060
+ return /* @__PURE__ */ jsx111(EmptyState, { heading: emptyMessage });
4061
+ }
4062
+ return /* @__PURE__ */ jsxs78(Table, { className, children: [
4063
+ /* @__PURE__ */ jsx111(TableHead, { children: /* @__PURE__ */ jsx111(TableRow, { children: columns.map((column) => {
4064
+ const isSorted = sortKey === column.key;
4065
+ const ariaSort = !column.sortable ? void 0 : isSorted ? sortDirection === "asc" ? "ascending" : "descending" : "none";
4066
+ return /* @__PURE__ */ jsx111(
4067
+ TableHeaderCell,
4068
+ {
4069
+ "aria-sort": ariaSort,
4070
+ style: column.align === "end" ? { textAlign: "end" } : void 0,
4071
+ children: column.sortable ? /* @__PURE__ */ jsxs78(
4072
+ "button",
4073
+ {
4074
+ type: "button",
4075
+ className: styles55.sortButton,
4076
+ onClick: () => handleSort(column),
4077
+ children: [
4078
+ column.header,
4079
+ /* @__PURE__ */ jsx111("span", { className: styles55.sortIcon, children: isSorted && /* @__PURE__ */ jsx111(
4080
+ Icon,
4081
+ {
4082
+ name: sortDirection === "asc" ? "chevron-up" : "chevron-down",
4083
+ size: "sm",
4084
+ "aria-hidden": true
4085
+ }
4086
+ ) })
4087
+ ]
4088
+ }
4089
+ ) : column.header
4090
+ },
4091
+ column.key
4092
+ );
4093
+ }) }) }),
4094
+ /* @__PURE__ */ jsx111(TableBody, { children: sortedData.map((row) => /* @__PURE__ */ jsx111(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx111(
4095
+ TableCell,
4096
+ {
4097
+ style: column.align === "end" ? { textAlign: "end" } : void 0,
4098
+ children: column.render ? column.render(row) : String(row[column.key] ?? "")
4099
+ },
4100
+ column.key
4101
+ )) }, getRowKey(row))) })
4102
+ ] });
4103
+ }
4104
+
4105
+ // src/components/Combobox/Combobox.tsx
4106
+ import { useEffect as useEffect15, useId as useId8, useMemo as useMemo5, useRef as useRef15, useState as useState17 } from "react";
4107
+ import styles56 from "./Combobox.module.css";
4108
+ import { Fragment as Fragment4, jsx as jsx112, jsxs as jsxs79 } from "react/jsx-runtime";
4109
+ function matches2(option, query) {
4110
+ if (!query) return true;
4111
+ return option.label.toLowerCase().includes(query.toLowerCase());
4112
+ }
4113
+ function Combobox({
4114
+ options,
4115
+ value,
4116
+ onChange,
4117
+ placeholder = "Select\u2026",
4118
+ searchPlaceholder = "Search\u2026",
4119
+ emptyMessage = "No matches.",
4120
+ "aria-label": ariaLabel,
4121
+ disabled = false,
4122
+ className
4123
+ }) {
4124
+ const [open, setOpen] = useState17(false);
4125
+ const [query, setQuery] = useState17("");
4126
+ const [highlightedIndex, setHighlightedIndex] = useState17(0);
4127
+ const isMobile = useIsMobile();
4128
+ const inputRef = useRef15(null);
4129
+ const listId = useId8();
4130
+ const selected = options.find((o) => o.value === value) ?? null;
4131
+ const filtered = useMemo5(
4132
+ () => options.filter((option) => matches2(option, query)),
4133
+ [options, query]
4134
+ );
4135
+ useEffect15(() => {
4136
+ setHighlightedIndex(0);
4137
+ }, [query, open]);
4138
+ useEffect15(() => {
4139
+ if (open) {
4140
+ setQuery("");
4141
+ requestAnimationFrame(() => inputRef.current?.focus());
4142
+ }
4143
+ }, [open]);
4144
+ function commit(option) {
4145
+ onChange(option.value);
4146
+ setOpen(false);
4147
+ }
4148
+ function handleKeyDown(e) {
4149
+ if (e.key === "ArrowDown") {
4150
+ e.preventDefault();
4151
+ setHighlightedIndex((i) => Math.min(i + 1, filtered.length - 1));
4152
+ } else if (e.key === "ArrowUp") {
4153
+ e.preventDefault();
4154
+ setHighlightedIndex((i) => Math.max(i - 1, 0));
4155
+ } else if (e.key === "Enter") {
4156
+ e.preventDefault();
4157
+ const option = filtered[highlightedIndex];
4158
+ if (option) commit(option);
4159
+ }
4160
+ }
4161
+ const highlightedId = filtered[highlightedIndex] ? `${listId}-${filtered[highlightedIndex].value}` : void 0;
4162
+ const trigger = /* @__PURE__ */ jsxs79(
4163
+ "button",
4164
+ {
4165
+ type: "button",
4166
+ className: [styles56.trigger, className].filter(Boolean).join(" "),
4167
+ disabled,
4168
+ "aria-label": ariaLabel,
4169
+ "aria-haspopup": "listbox",
4170
+ "aria-expanded": open,
4171
+ onClick: () => setOpen((o) => !o),
4172
+ children: [
4173
+ /* @__PURE__ */ jsx112("span", { className: selected ? styles56.triggerValue : styles56.triggerPlaceholder, children: selected ? selected.label : placeholder }),
4174
+ /* @__PURE__ */ jsx112(Icon, { name: "chevron-down", size: "sm", "aria-hidden": true })
4175
+ ]
4176
+ }
4177
+ );
4178
+ const body = /* @__PURE__ */ jsxs79("div", { className: styles56.body, children: [
4179
+ /* @__PURE__ */ jsx112(
4180
+ "input",
4181
+ {
4182
+ ref: inputRef,
4183
+ type: "text",
4184
+ role: "combobox",
4185
+ "aria-expanded": filtered.length > 0,
4186
+ "aria-controls": listId,
4187
+ "aria-activedescendant": highlightedId,
4188
+ "aria-autocomplete": "list",
4189
+ className: styles56.search,
4190
+ placeholder: searchPlaceholder,
4191
+ value: query,
4192
+ onChange: (e) => setQuery(e.target.value),
4193
+ onKeyDown: handleKeyDown
4194
+ }
4195
+ ),
4196
+ /* @__PURE__ */ jsxs79("ul", { id: listId, role: "listbox", className: styles56.list, children: [
4197
+ filtered.length === 0 && /* @__PURE__ */ jsx112("li", { className: styles56.empty, children: emptyMessage }),
4198
+ filtered.map((option, index) => {
4199
+ const isHighlighted = index === highlightedIndex;
4200
+ const isSelected = option.value === value;
4201
+ return /* @__PURE__ */ jsx112("li", { children: /* @__PURE__ */ jsxs79(
4202
+ "button",
4203
+ {
4204
+ id: `${listId}-${option.value}`,
4205
+ type: "button",
4206
+ role: "option",
4207
+ "aria-selected": isSelected,
4208
+ className: [styles56.option, isHighlighted ? styles56.optionHighlighted : ""].filter(Boolean).join(" "),
4209
+ onMouseEnter: () => setHighlightedIndex(index),
4210
+ onClick: () => commit(option),
4211
+ children: [
4212
+ /* @__PURE__ */ jsx112("span", { className: styles56.check, children: isSelected && /* @__PURE__ */ jsx112(Icon, { name: "check", size: "sm", "aria-hidden": true }) }),
4213
+ option.label
4214
+ ]
4215
+ }
4216
+ ) }, option.value);
4217
+ })
4218
+ ] })
4219
+ ] });
4220
+ if (isMobile) {
4221
+ return /* @__PURE__ */ jsxs79(Fragment4, { children: [
4222
+ trigger,
4223
+ /* @__PURE__ */ jsx112(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: body })
4224
+ ] });
4225
+ }
4226
+ return /* @__PURE__ */ jsx112(
4227
+ Popover,
4228
+ {
4229
+ trigger,
4230
+ open,
4231
+ onClose: () => setOpen(false),
4232
+ "aria-label": ariaLabel,
4233
+ width: "trigger",
4234
+ children: body
4235
+ }
4236
+ );
4237
+ }
4238
+
4239
+ // src/components/DragHandleRow/DragHandleRow.tsx
4240
+ import styles57 from "./DragHandleRow.module.css";
4241
+ import { jsx as jsx113, jsxs as jsxs80 } from "react/jsx-runtime";
4242
+ function DragHandleRow({
4243
+ children,
4244
+ handleProps,
4245
+ isDragging,
4246
+ className,
4247
+ ...rest
4248
+ }) {
4249
+ return /* @__PURE__ */ jsxs80(
4250
+ "div",
4251
+ {
4252
+ ...rest,
4253
+ className: [styles57.row, isDragging ? styles57.dragging : "", className].filter(Boolean).join(" "),
4254
+ children: [
4255
+ /* @__PURE__ */ jsx113(
4256
+ "button",
4257
+ {
4258
+ type: "button",
4259
+ "aria-label": "Drag to reorder",
4260
+ className: styles57.handle,
4261
+ tabIndex: -1,
4262
+ ...handleProps,
4263
+ children: /* @__PURE__ */ jsx113(DragIcon, {})
4264
+ }
4265
+ ),
4266
+ /* @__PURE__ */ jsx113("div", { className: styles57.content, children })
4267
+ ]
4268
+ }
4269
+ );
4270
+ }
4271
+ function DragIcon() {
4272
+ return /* @__PURE__ */ jsx113(
4273
+ "svg",
4274
+ {
4275
+ width: "14",
4276
+ height: "14",
4277
+ viewBox: "0 0 14 14",
4278
+ fill: "none",
4279
+ "aria-hidden": "true",
4280
+ className: styles57.icon,
4281
+ children: [3, 7, 11].map(
4282
+ (cy) => [4, 10].map((cx) => /* @__PURE__ */ jsx113("circle", { cx, cy, r: 1.2, fill: "currentColor" }, `${cx}-${cy}`))
4283
+ )
4284
+ }
4285
+ );
4286
+ }
4287
+
4288
+ // src/components/FileDropzone/FileDropzone.tsx
4289
+ import { useRef as useRef16, useState as useState18 } from "react";
4290
+ import styles58 from "./FileDropzone.module.css";
4291
+ import { jsx as jsx114, jsxs as jsxs81 } from "react/jsx-runtime";
4292
+ function FileDropzone({
4293
+ name,
4294
+ accept,
4295
+ icon,
4296
+ label,
4297
+ hint,
4298
+ onFileSelect,
4299
+ ariaLabel,
4300
+ disabled,
4301
+ className
4302
+ }) {
4303
+ const [dragging, setDragging] = useState18(false);
4304
+ const inputRef = useRef16(null);
4305
+ return /* @__PURE__ */ jsxs81(
2993
4306
  "label",
2994
4307
  {
2995
4308
  className: [
2996
- styles33.dropzone,
2997
- dragging ? styles33.dropzoneActive : "",
2998
- disabled ? styles33.dropzoneDisabled : "",
4309
+ styles58.dropzone,
4310
+ dragging ? styles58.dropzoneActive : "",
4311
+ disabled ? styles58.dropzoneDisabled : "",
2999
4312
  className
3000
4313
  ].filter(Boolean).join(" "),
3001
4314
  onDragOver: (event) => {
@@ -3018,12 +4331,12 @@ function FileDropzone({
3018
4331
  onFileSelect(dropped);
3019
4332
  },
3020
4333
  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 })
4334
+ /* @__PURE__ */ jsx114("span", { className: styles58.icon, "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx114(Icon, { name: "file", size: "lg", "aria-hidden": true }) }),
4335
+ /* @__PURE__ */ jsxs81("span", { className: styles58.text, children: [
4336
+ /* @__PURE__ */ jsx114("span", { className: styles58.title, children: label }),
4337
+ hint && /* @__PURE__ */ jsx114("span", { className: styles58.hint, children: hint })
3025
4338
  ] }),
3026
- /* @__PURE__ */ jsx85(
4339
+ /* @__PURE__ */ jsx114(
3027
4340
  "input",
3028
4341
  {
3029
4342
  ref: inputRef,
@@ -3033,7 +4346,7 @@ function FileDropzone({
3033
4346
  accept,
3034
4347
  disabled,
3035
4348
  onChange: (event) => onFileSelect(event.target.files?.[0] ?? null),
3036
- className: styles33.hiddenInput
4349
+ className: styles58.hiddenInput
3037
4350
  }
3038
4351
  )
3039
4352
  ]
@@ -3042,7 +4355,7 @@ function FileDropzone({
3042
4355
  }
3043
4356
 
3044
4357
  // src/components/Calendar/Calendar.tsx
3045
- import { useRef as useRef11, useState as useState11 } from "react";
4358
+ import { useRef as useRef17, useState as useState19 } from "react";
3046
4359
 
3047
4360
  // src/components/Calendar/dateUtils.ts
3048
4361
  function startOfMonth(date) {
@@ -3108,8 +4421,8 @@ function formatDateLabel(date) {
3108
4421
  }
3109
4422
 
3110
4423
  // src/components/Calendar/Calendar.tsx
3111
- import styles34 from "./Calendar.module.css";
3112
- import { jsx as jsx86, jsxs as jsxs67 } from "react/jsx-runtime";
4424
+ import styles59 from "./Calendar.module.css";
4425
+ import { jsx as jsx115, jsxs as jsxs82 } from "react/jsx-runtime";
3113
4426
  var WEEKDAY_LABEL_WEEK = getMonthGrid(new Date(2026, 0, 1))[0] ?? [];
3114
4427
  function Calendar({
3115
4428
  value,
@@ -3118,9 +4431,9 @@ function Calendar({
3118
4431
  maxDate,
3119
4432
  "aria-label": ariaLabel
3120
4433
  }) {
3121
- const [displayedMonth, setDisplayedMonth] = useState11(() => startOfMonth(value ?? /* @__PURE__ */ new Date()));
3122
- const [focusedDate, setFocusedDate] = useState11(() => value ?? /* @__PURE__ */ new Date());
3123
- const gridRef = useRef11(null);
4434
+ const [displayedMonth, setDisplayedMonth] = useState19(() => startOfMonth(value ?? /* @__PURE__ */ new Date()));
4435
+ const [focusedDate, setFocusedDate] = useState19(() => value ?? /* @__PURE__ */ new Date());
4436
+ const gridRef = useRef17(null);
3124
4437
  const weeks = getMonthGrid(displayedMonth);
3125
4438
  function goToMonth(next) {
3126
4439
  setDisplayedMonth(startOfMonth(next));
@@ -3179,51 +4492,51 @@ function Calendar({
3179
4492
  default:
3180
4493
  }
3181
4494
  }
3182
- return /* @__PURE__ */ jsxs67("div", { className: styles34.calendar, "aria-label": ariaLabel, children: [
3183
- /* @__PURE__ */ jsxs67("div", { className: styles34.header, children: [
3184
- /* @__PURE__ */ jsx86(
4495
+ return /* @__PURE__ */ jsxs82("div", { className: styles59.calendar, "aria-label": ariaLabel, children: [
4496
+ /* @__PURE__ */ jsxs82("div", { className: styles59.header, children: [
4497
+ /* @__PURE__ */ jsx115(
3185
4498
  "button",
3186
4499
  {
3187
4500
  type: "button",
3188
- className: styles34.navButton,
4501
+ className: styles59.navButton,
3189
4502
  "aria-label": "Previous month",
3190
4503
  onClick: () => goToMonth(addMonths(displayedMonth, -1)),
3191
- children: /* @__PURE__ */ jsx86(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
4504
+ children: /* @__PURE__ */ jsx115(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
3192
4505
  }
3193
4506
  ),
3194
- /* @__PURE__ */ jsx86("span", { className: styles34.monthLabel, children: formatMonthYear(displayedMonth) }),
3195
- /* @__PURE__ */ jsx86(
4507
+ /* @__PURE__ */ jsx115("span", { className: styles59.monthLabel, children: formatMonthYear(displayedMonth) }),
4508
+ /* @__PURE__ */ jsx115(
3196
4509
  "button",
3197
4510
  {
3198
4511
  type: "button",
3199
- className: styles34.navButton,
4512
+ className: styles59.navButton,
3200
4513
  "aria-label": "Next month",
3201
4514
  onClick: () => goToMonth(addMonths(displayedMonth, 1)),
3202
- children: /* @__PURE__ */ jsx86(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
4515
+ children: /* @__PURE__ */ jsx115(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
3203
4516
  }
3204
4517
  )
3205
4518
  ] }),
3206
- /* @__PURE__ */ jsxs67(
4519
+ /* @__PURE__ */ jsxs82(
3207
4520
  "div",
3208
4521
  {
3209
4522
  ref: gridRef,
3210
4523
  role: "grid",
3211
4524
  "aria-label": formatMonthYear(displayedMonth),
3212
- className: styles34.grid,
4525
+ className: styles59.grid,
3213
4526
  onKeyDown: handleKeyDown,
3214
4527
  tabIndex: -1,
3215
4528
  children: [
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())) }),
4529
+ /* @__PURE__ */ jsx115("div", { role: "row", className: styles59.weekdayRow, children: WEEKDAY_LABEL_WEEK.map((d) => /* @__PURE__ */ jsx115("span", { role: "columnheader", className: styles59.weekday, "aria-hidden": true, children: formatWeekdayShort(d) }, d.getDay())) }),
3217
4530
  weeks.map((week) => {
3218
4531
  const firstDayOfWeek = week[0];
3219
4532
  if (!firstDayOfWeek) return null;
3220
- return /* @__PURE__ */ jsx86("div", { role: "row", className: styles34.week, children: week.map((date) => {
4533
+ return /* @__PURE__ */ jsx115("div", { role: "row", className: styles59.week, children: week.map((date) => {
3221
4534
  const isCurrentMonth = isSameMonth(date, displayedMonth);
3222
4535
  const isSelected = value !== null && isSameDay(date, value);
3223
4536
  const isToday = isSameDay(date, /* @__PURE__ */ new Date());
3224
4537
  const isFocusTarget = isSameDay(date, focusedDate);
3225
4538
  const disabled = !isWithinRange(date, minDate, maxDate);
3226
- return /* @__PURE__ */ jsx86("div", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ jsx86(
4539
+ return /* @__PURE__ */ jsx115("div", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ jsx115(
3227
4540
  "button",
3228
4541
  {
3229
4542
  type: "button",
@@ -3232,10 +4545,10 @@ function Calendar({
3232
4545
  "aria-current": isToday ? "date" : void 0,
3233
4546
  "aria-label": formatDateLabel(date),
3234
4547
  className: [
3235
- styles34.day,
3236
- !isCurrentMonth ? styles34.dayOutside : "",
3237
- isSelected ? styles34.daySelected : "",
3238
- isToday && !isSelected ? styles34.dayToday : ""
4548
+ styles59.day,
4549
+ !isCurrentMonth ? styles59.dayOutside : "",
4550
+ isSelected ? styles59.daySelected : "",
4551
+ isToday && !isSelected ? styles59.dayToday : ""
3239
4552
  ].filter(Boolean).join(" "),
3240
4553
  onClick: () => selectDate(date),
3241
4554
  onFocus: () => setFocusedDate(date),
@@ -3251,9 +4564,9 @@ function Calendar({
3251
4564
  }
3252
4565
 
3253
4566
  // src/components/DatePicker/DatePicker.tsx
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";
4567
+ import { useState as useState20 } from "react";
4568
+ import styles60 from "./DatePicker.module.css";
4569
+ import { Fragment as Fragment5, jsx as jsx116, jsxs as jsxs83 } from "react/jsx-runtime";
3257
4570
  var POPOVER_WIDTH = 320;
3258
4571
  function DatePicker({
3259
4572
  value,
@@ -3264,29 +4577,29 @@ function DatePicker({
3264
4577
  "aria-label": ariaLabel,
3265
4578
  disabled = false
3266
4579
  }) {
3267
- const [open, setOpen] = useState12(false);
4580
+ const [open, setOpen] = useState20(false);
3268
4581
  const isMobile = useIsMobile();
3269
4582
  function handleSelect(date) {
3270
4583
  onChange(date);
3271
4584
  setOpen(false);
3272
4585
  }
3273
- const trigger = /* @__PURE__ */ jsxs68(
4586
+ const trigger = /* @__PURE__ */ jsxs83(
3274
4587
  "button",
3275
4588
  {
3276
4589
  type: "button",
3277
- className: styles35.trigger,
4590
+ className: styles60.trigger,
3278
4591
  disabled,
3279
4592
  "aria-label": ariaLabel,
3280
4593
  "aria-haspopup": "dialog",
3281
4594
  "aria-expanded": open,
3282
4595
  onClick: () => setOpen((o) => !o),
3283
4596
  children: [
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 })
4597
+ /* @__PURE__ */ jsx116("span", { className: value ? styles60.triggerValue : styles60.triggerPlaceholder, children: value ? formatDateShort(value) : placeholder }),
4598
+ /* @__PURE__ */ jsx116(Icon, { name: "calendar", size: "sm", "aria-hidden": true })
3286
4599
  ]
3287
4600
  }
3288
4601
  );
3289
- const calendar = /* @__PURE__ */ jsx87(
4602
+ const calendar = /* @__PURE__ */ jsx116(
3290
4603
  Calendar,
3291
4604
  {
3292
4605
  value,
@@ -3297,12 +4610,12 @@ function DatePicker({
3297
4610
  }
3298
4611
  );
3299
4612
  if (isMobile) {
3300
- return /* @__PURE__ */ jsxs68(Fragment2, { children: [
4613
+ return /* @__PURE__ */ jsxs83(Fragment5, { children: [
3301
4614
  trigger,
3302
- /* @__PURE__ */ jsx87(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx87("div", { className: styles35.drawerBody, children: calendar }) })
4615
+ /* @__PURE__ */ jsx116(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx116("div", { className: styles60.drawerBody, children: calendar }) })
3303
4616
  ] });
3304
4617
  }
3305
- return /* @__PURE__ */ jsx87(
4618
+ return /* @__PURE__ */ jsx116(
3306
4619
  Popover,
3307
4620
  {
3308
4621
  trigger,
@@ -3310,15 +4623,15 @@ function DatePicker({
3310
4623
  onClose: () => setOpen(false),
3311
4624
  "aria-label": ariaLabel,
3312
4625
  width: POPOVER_WIDTH,
3313
- children: /* @__PURE__ */ jsx87("div", { className: styles35.popoverBody, children: calendar })
4626
+ children: /* @__PURE__ */ jsx116("div", { className: styles60.popoverBody, children: calendar })
3314
4627
  }
3315
4628
  );
3316
4629
  }
3317
4630
 
3318
4631
  // src/components/SuggestionInput/SuggestionInput.tsx
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";
4632
+ import { useId as useId9, useRef as useRef18, useState as useState21 } from "react";
4633
+ import styles61 from "./SuggestionInput.module.css";
4634
+ import { Fragment as Fragment6, jsx as jsx117, jsxs as jsxs84 } from "react/jsx-runtime";
3322
4635
  function SuggestionInput({
3323
4636
  value,
3324
4637
  onChange,
@@ -3333,12 +4646,12 @@ function SuggestionInput({
3333
4646
  onCreate,
3334
4647
  className
3335
4648
  }) {
3336
- const generatedId = useId4();
4649
+ const generatedId = useId9();
3337
4650
  const inputId = id ?? generatedId;
3338
4651
  const listId = `${inputId}-suggestions`;
3339
- const inputRef = useRef12(null);
3340
- const [focused, setFocused] = useState13(false);
3341
- const [activeIndex, setActiveIndex] = useState13(-1);
4652
+ const inputRef = useRef18(null);
4653
+ const [focused, setFocused] = useState21(false);
4654
+ const [activeIndex, setActiveIndex] = useState21(-1);
3342
4655
  const showCreateRow = Boolean(onCreate && createLabel && value.trim());
3343
4656
  const rowCount = options.length + (showCreateRow ? 1 : 0);
3344
4657
  const open = focused && (rowCount > 0 || loading);
@@ -3375,7 +4688,7 @@ function SuggestionInput({
3375
4688
  close();
3376
4689
  }
3377
4690
  }
3378
- const trigger = /* @__PURE__ */ jsx88(
4691
+ const trigger = /* @__PURE__ */ jsx117(
3379
4692
  "input",
3380
4693
  {
3381
4694
  ref: inputRef,
@@ -3387,7 +4700,7 @@ function SuggestionInput({
3387
4700
  "aria-autocomplete": "list",
3388
4701
  "aria-activedescendant": activeIndex >= 0 ? `${listId}-option-${activeIndex}` : void 0,
3389
4702
  "aria-label": ariaLabel,
3390
- className: [styles36.input, className].filter(Boolean).join(" "),
4703
+ className: [styles61.input, className].filter(Boolean).join(" "),
3391
4704
  value,
3392
4705
  placeholder,
3393
4706
  disabled,
@@ -3400,7 +4713,7 @@ function SuggestionInput({
3400
4713
  onKeyDown: handleKeyDown
3401
4714
  }
3402
4715
  );
3403
- return /* @__PURE__ */ jsx88(
4716
+ return /* @__PURE__ */ jsx117(
3404
4717
  Popover,
3405
4718
  {
3406
4719
  trigger,
@@ -3408,29 +4721,29 @@ function SuggestionInput({
3408
4721
  onClose: close,
3409
4722
  width: "trigger",
3410
4723
  "aria-label": `${ariaLabel} suggestions`,
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(
4724
+ children: /* @__PURE__ */ jsx117("ul", { id: listId, role: "listbox", className: styles61.list, children: loading ? /* @__PURE__ */ jsx117("li", { className: styles61.status, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs84(Fragment6, { children: [
4725
+ options.map((option, index) => /* @__PURE__ */ jsx117("li", { role: "none", children: /* @__PURE__ */ jsxs84(
3413
4726
  "button",
3414
4727
  {
3415
4728
  id: `${listId}-option-${index}`,
3416
4729
  role: "option",
3417
4730
  "aria-selected": index === activeIndex,
3418
4731
  type: "button",
3419
- className: [styles36.option, index === activeIndex ? styles36.optionActive : ""].filter(Boolean).join(" "),
4732
+ className: [styles61.option, index === activeIndex ? styles61.optionActive : ""].filter(Boolean).join(" "),
3420
4733
  onMouseDown: (e) => {
3421
4734
  e.preventDefault();
3422
4735
  commitIndex(index);
3423
4736
  },
3424
4737
  children: [
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 })
4738
+ option.icon && /* @__PURE__ */ jsx117("span", { className: styles61.optionIcon, children: option.icon }),
4739
+ /* @__PURE__ */ jsx117("span", { className: styles61.optionLabel, children: option.label }),
4740
+ option.meta && /* @__PURE__ */ jsx117("span", { className: styles61.optionMeta, children: option.meta })
3428
4741
  ]
3429
4742
  }
3430
4743
  ) }, option.id)),
3431
- showCreateRow && createLabel && /* @__PURE__ */ jsxs69("li", { role: "none", children: [
3432
- options.length > 0 && /* @__PURE__ */ jsx88("div", { className: styles36.divider }),
3433
- /* @__PURE__ */ jsx88(
4744
+ showCreateRow && createLabel && /* @__PURE__ */ jsxs84("li", { role: "none", children: [
4745
+ options.length > 0 && /* @__PURE__ */ jsx117("div", { className: styles61.divider }),
4746
+ /* @__PURE__ */ jsx117(
3434
4747
  "button",
3435
4748
  {
3436
4749
  id: `${listId}-option-${options.length}`,
@@ -3438,9 +4751,9 @@ function SuggestionInput({
3438
4751
  "aria-selected": options.length === activeIndex,
3439
4752
  type: "button",
3440
4753
  className: [
3441
- styles36.option,
3442
- styles36.optionCreate,
3443
- options.length === activeIndex ? styles36.optionActive : ""
4754
+ styles61.option,
4755
+ styles61.optionCreate,
4756
+ options.length === activeIndex ? styles61.optionActive : ""
3444
4757
  ].filter(Boolean).join(" "),
3445
4758
  onMouseDown: (e) => {
3446
4759
  e.preventDefault();
@@ -3456,9 +4769,9 @@ function SuggestionInput({
3456
4769
  }
3457
4770
 
3458
4771
  // src/components/IconPicker/IconPicker.tsx
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";
4772
+ import { useState as useState22 } from "react";
4773
+ import styles62 from "./IconPicker.module.css";
4774
+ import { jsx as jsx118, jsxs as jsxs85 } from "react/jsx-runtime";
3462
4775
  function IconPicker({
3463
4776
  value,
3464
4777
  onChange,
@@ -3468,24 +4781,24 @@ function IconPicker({
3468
4781
  disabled = false,
3469
4782
  className
3470
4783
  }) {
3471
- const [open, setOpen] = useState14(false);
3472
- const trigger = /* @__PURE__ */ jsxs70(
4784
+ const [open, setOpen] = useState22(false);
4785
+ const trigger = /* @__PURE__ */ jsxs85(
3473
4786
  "button",
3474
4787
  {
3475
4788
  type: "button",
3476
- className: [styles37.trigger, className].filter(Boolean).join(" "),
4789
+ className: [styles62.trigger, className].filter(Boolean).join(" "),
3477
4790
  onClick: () => setOpen((o) => !o),
3478
4791
  disabled,
3479
4792
  "aria-label": ariaLabel,
3480
4793
  "aria-haspopup": "true",
3481
4794
  "aria-expanded": open,
3482
4795
  children: [
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 })
4796
+ value ? /* @__PURE__ */ jsx118(Icon, { name: value, size: "md", "aria-hidden": true }) : /* @__PURE__ */ jsx118("span", { className: styles62.placeholder, "aria-hidden": true, children: "?" }),
4797
+ triggerLabel && /* @__PURE__ */ jsx118("span", { className: styles62.triggerLabel, children: triggerLabel })
3485
4798
  ]
3486
4799
  }
3487
4800
  );
3488
- return /* @__PURE__ */ jsx89(
4801
+ return /* @__PURE__ */ jsx118(
3489
4802
  Popover,
3490
4803
  {
3491
4804
  trigger,
@@ -3493,18 +4806,18 @@ function IconPicker({
3493
4806
  onClose: () => setOpen(false),
3494
4807
  width: 240,
3495
4808
  "aria-label": `${ariaLabel} options`,
3496
- children: /* @__PURE__ */ jsx89("div", { className: styles37.grid, role: "listbox", "aria-label": ariaLabel, children: options.map((name) => /* @__PURE__ */ jsx89(
4809
+ children: /* @__PURE__ */ jsx118("div", { className: styles62.grid, role: "listbox", "aria-label": ariaLabel, children: options.map((name) => /* @__PURE__ */ jsx118(
3497
4810
  "button",
3498
4811
  {
3499
4812
  type: "button",
3500
4813
  role: "option",
3501
4814
  "aria-selected": name === value,
3502
- className: [styles37.option, name === value ? styles37.optionSelected : ""].filter(Boolean).join(" "),
4815
+ className: [styles62.option, name === value ? styles62.optionSelected : ""].filter(Boolean).join(" "),
3503
4816
  onClick: () => {
3504
4817
  onChange(name);
3505
4818
  setOpen(false);
3506
4819
  },
3507
- children: /* @__PURE__ */ jsx89(Icon, { name, size: "md", "aria-hidden": true })
4820
+ children: /* @__PURE__ */ jsx118(Icon, { name, size: "md", "aria-hidden": true })
3508
4821
  },
3509
4822
  name
3510
4823
  )) })
@@ -3513,9 +4826,9 @@ function IconPicker({
3513
4826
  }
3514
4827
 
3515
4828
  // src/components/QuantityStepper/QuantityStepper.tsx
3516
- import { useId as useId5 } from "react";
3517
- import styles38 from "./QuantityStepper.module.css";
3518
- import { jsx as jsx90, jsxs as jsxs71 } from "react/jsx-runtime";
4829
+ import { useId as useId10 } from "react";
4830
+ import styles63 from "./QuantityStepper.module.css";
4831
+ import { jsx as jsx119, jsxs as jsxs86 } from "react/jsx-runtime";
3519
4832
  function QuantityStepper({
3520
4833
  value,
3521
4834
  onChange,
@@ -3528,9 +4841,9 @@ function QuantityStepper({
3528
4841
  id,
3529
4842
  className
3530
4843
  }) {
3531
- const generatedId = useId5();
4844
+ const generatedId = useId10();
3532
4845
  const inputId = id ?? generatedId;
3533
- function clamp(next) {
4846
+ function clamp2(next) {
3534
4847
  let result = next;
3535
4848
  if (min !== void 0) result = Math.max(min, result);
3536
4849
  if (max !== void 0) result = Math.min(max, result);
@@ -3538,28 +4851,28 @@ function QuantityStepper({
3538
4851
  }
3539
4852
  function handleInputChange(e) {
3540
4853
  const parsed = Number.parseFloat(e.target.value);
3541
- if (!Number.isNaN(parsed)) onChange(clamp(parsed));
4854
+ if (!Number.isNaN(parsed)) onChange(clamp2(parsed));
3542
4855
  }
3543
4856
  const decrementDisabled = disabled || min !== void 0 && value <= min;
3544
4857
  const incrementDisabled = disabled || max !== void 0 && value >= max;
3545
- return /* @__PURE__ */ jsxs71("div", { className: [styles38.root, className].filter(Boolean).join(" "), children: [
3546
- /* @__PURE__ */ jsx90(
4858
+ return /* @__PURE__ */ jsxs86("div", { className: [styles63.root, className].filter(Boolean).join(" "), children: [
4859
+ /* @__PURE__ */ jsx119(
3547
4860
  "button",
3548
4861
  {
3549
4862
  type: "button",
3550
- className: styles38.button,
3551
- onClick: () => onChange(clamp(value - step)),
4863
+ className: styles63.button,
4864
+ onClick: () => onChange(clamp2(value - step)),
3552
4865
  disabled: decrementDisabled,
3553
4866
  "aria-label": `Decrease ${ariaLabel}`,
3554
4867
  children: "\u2212"
3555
4868
  }
3556
4869
  ),
3557
- /* @__PURE__ */ jsx90(
4870
+ /* @__PURE__ */ jsx119(
3558
4871
  "input",
3559
4872
  {
3560
4873
  id: inputId,
3561
4874
  type: "number",
3562
- className: styles38.input,
4875
+ className: styles63.input,
3563
4876
  value,
3564
4877
  onChange: handleInputChange,
3565
4878
  min,
@@ -3569,13 +4882,13 @@ function QuantityStepper({
3569
4882
  "aria-label": ariaLabel
3570
4883
  }
3571
4884
  ),
3572
- unit && /* @__PURE__ */ jsx90("span", { className: styles38.unit, "aria-hidden": true, children: unit }),
3573
- /* @__PURE__ */ jsx90(
4885
+ unit && /* @__PURE__ */ jsx119("span", { className: styles63.unit, "aria-hidden": true, children: unit }),
4886
+ /* @__PURE__ */ jsx119(
3574
4887
  "button",
3575
4888
  {
3576
4889
  type: "button",
3577
- className: styles38.button,
3578
- onClick: () => onChange(clamp(value + step)),
4890
+ className: styles63.button,
4891
+ onClick: () => onChange(clamp2(value + step)),
3579
4892
  disabled: incrementDisabled,
3580
4893
  "aria-label": `Increase ${ariaLabel}`,
3581
4894
  children: "+"
@@ -3585,8 +4898,8 @@ function QuantityStepper({
3585
4898
  }
3586
4899
 
3587
4900
  // src/components/CheckableListRow/CheckableListRow.tsx
3588
- import styles39 from "./CheckableListRow.module.css";
3589
- import { jsx as jsx91, jsxs as jsxs72 } from "react/jsx-runtime";
4901
+ import styles64 from "./CheckableListRow.module.css";
4902
+ import { jsx as jsx120, jsxs as jsxs87 } from "react/jsx-runtime";
3590
4903
  function CheckableListRow({
3591
4904
  checked,
3592
4905
  onCheckedChange,
@@ -3605,8 +4918,8 @@ function CheckableListRow({
3605
4918
  toggle();
3606
4919
  }
3607
4920
  }
3608
- return /* @__PURE__ */ jsxs72("div", { className: [styles39.row, className].filter(Boolean).join(" "), children: [
3609
- /* @__PURE__ */ jsxs72(
4921
+ return /* @__PURE__ */ jsxs87("div", { className: [styles64.row, className].filter(Boolean).join(" "), children: [
4922
+ /* @__PURE__ */ jsxs87(
3610
4923
  "div",
3611
4924
  {
3612
4925
  role: "checkbox",
@@ -3614,11 +4927,11 @@ function CheckableListRow({
3614
4927
  "aria-label": label,
3615
4928
  "aria-disabled": disabled || void 0,
3616
4929
  tabIndex: disabled ? -1 : 0,
3617
- className: styles39.tapTarget,
4930
+ className: styles64.tapTarget,
3618
4931
  onClick: toggle,
3619
4932
  onKeyDown: handleKeyDown,
3620
4933
  children: [
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(
4934
+ /* @__PURE__ */ jsx120("span", { className: [styles64.box, checked ? styles64.checked : ""].filter(Boolean).join(" "), children: checked && /* @__PURE__ */ jsx120("svg", { className: styles64.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx120(
3622
4935
  "path",
3623
4936
  {
3624
4937
  d: "M1 4l3 3 5-6",
@@ -3628,24 +4941,140 @@ function CheckableListRow({
3628
4941
  strokeLinejoin: "round"
3629
4942
  }
3630
4943
  ) }) }),
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 })
4944
+ icon && /* @__PURE__ */ jsx120("span", { className: styles64.icon, children: icon }),
4945
+ /* @__PURE__ */ jsx120("span", { className: [styles64.label, checked ? styles64.struck : ""].filter(Boolean).join(" "), children: label })
3633
4946
  ]
3634
4947
  }
3635
4948
  ),
3636
- trailing && /* @__PURE__ */ jsx91("span", { className: styles39.trailing, children: trailing })
4949
+ trailing && /* @__PURE__ */ jsx120("span", { className: styles64.trailing, children: trailing })
4950
+ ] });
4951
+ }
4952
+
4953
+ // src/components/CurrencyInput/CurrencyInput.tsx
4954
+ import { useState as useState23 } from "react";
4955
+ import { jsx as jsx121 } from "react/jsx-runtime";
4956
+ function centsToText(cents) {
4957
+ return (cents / 100).toFixed(2);
4958
+ }
4959
+ function textToCents(text) {
4960
+ const trimmed = text.trim();
4961
+ if (!trimmed) return null;
4962
+ const parsed = Number(trimmed);
4963
+ if (!Number.isFinite(parsed)) return null;
4964
+ return Math.round(parsed * 100);
4965
+ }
4966
+ function CurrencyInput({ valueCents, onValueChange, ...rest }) {
4967
+ const [text, setText] = useState23(() => valueCents != null ? centsToText(valueCents) : "");
4968
+ if (textToCents(text) !== valueCents) {
4969
+ setText(valueCents != null ? centsToText(valueCents) : "");
4970
+ }
4971
+ return /* @__PURE__ */ jsx121(
4972
+ Input,
4973
+ {
4974
+ ...rest,
4975
+ type: "text",
4976
+ inputMode: "decimal",
4977
+ value: text,
4978
+ onChange: (e) => {
4979
+ const next = e.currentTarget.value;
4980
+ setText(next);
4981
+ onValueChange(textToCents(next));
4982
+ }
4983
+ }
4984
+ );
4985
+ }
4986
+
4987
+ // src/components/BalanceChip/BalanceChip.tsx
4988
+ import styles65 from "./BalanceChip.module.css";
4989
+ import { jsx as jsx122 } from "react/jsx-runtime";
4990
+ function formatAbsCents(cents) {
4991
+ return (Math.abs(cents) / 100).toFixed(2);
4992
+ }
4993
+ function BalanceChip({ amountCents, currency, className }) {
4994
+ const direction = amountCents > 0 ? "owed" : amountCents < 0 ? "owes" : "settled";
4995
+ const text = direction === "settled" ? "Settled up" : `${direction === "owed" ? "Owed" : "Owes"} ${currency} ${formatAbsCents(amountCents)}`;
4996
+ return /* @__PURE__ */ jsx122("span", { className: [styles65.chip, styles65[direction], className].filter(Boolean).join(" "), children: text });
4997
+ }
4998
+
4999
+ // src/components/SplitMethodSelector/SplitMethodSelector.tsx
5000
+ import { jsx as jsx123 } from "react/jsx-runtime";
5001
+ var OPTIONS = [
5002
+ { label: "Equal", value: "equal" },
5003
+ { label: "Amount", value: "amount" },
5004
+ { label: "Percentage", value: "percentage" },
5005
+ { label: "Shares", value: "shares" }
5006
+ ];
5007
+ function SplitMethodSelector({
5008
+ value,
5009
+ onChange,
5010
+ size = "sm",
5011
+ "aria-label": ariaLabel = "Split method"
5012
+ }) {
5013
+ return /* @__PURE__ */ jsx123(
5014
+ SegmentedControl,
5015
+ {
5016
+ value,
5017
+ onChange,
5018
+ options: OPTIONS,
5019
+ size,
5020
+ "aria-label": ariaLabel
5021
+ }
5022
+ );
5023
+ }
5024
+
5025
+ // src/components/MemberMultiSelect/MemberMultiSelect.tsx
5026
+ import styles66 from "./MemberMultiSelect.module.css";
5027
+ import { jsx as jsx124, jsxs as jsxs88 } from "react/jsx-runtime";
5028
+ function MemberMultiSelect({
5029
+ options,
5030
+ selectedIds,
5031
+ onToggle,
5032
+ renderTrailing,
5033
+ label,
5034
+ hint,
5035
+ className
5036
+ }) {
5037
+ return /* @__PURE__ */ jsxs88("div", { className: [styles66.group, className].filter(Boolean).join(" "), children: [
5038
+ label && /* @__PURE__ */ jsx124("span", { className: styles66.label, children: label }),
5039
+ options.map((option) => {
5040
+ const checked = selectedIds.has(option.id);
5041
+ return /* @__PURE__ */ jsxs88("div", { className: styles66.row, children: [
5042
+ /* @__PURE__ */ jsx124(
5043
+ Checkbox,
5044
+ {
5045
+ checked,
5046
+ onChange: (next) => onToggle(option.id, next),
5047
+ label: option.label
5048
+ }
5049
+ ),
5050
+ checked && renderTrailing && /* @__PURE__ */ jsx124("span", { className: styles66.trailing, children: renderTrailing(option.id) })
5051
+ ] }, option.id);
5052
+ }),
5053
+ hint && /* @__PURE__ */ jsx124("span", { className: styles66.hint, children: hint })
3637
5054
  ] });
3638
5055
  }
3639
5056
  export {
5057
+ Accordion,
5058
+ Alert,
5059
+ AspectRatio,
3640
5060
  Avatar,
3641
5061
  Badge,
5062
+ BalanceChip,
5063
+ Breadcrumb,
3642
5064
  Button,
5065
+ ButtonGroup,
3643
5066
  Calendar,
3644
5067
  Card,
3645
5068
  CheckableListRow,
3646
5069
  Checkbox,
3647
5070
  CodeTextarea,
5071
+ Collapsible,
5072
+ Combobox,
5073
+ Command,
3648
5074
  ConfirmDialog,
5075
+ ContextMenu,
5076
+ CurrencyInput,
5077
+ DataTable,
3649
5078
  DatePicker,
3650
5079
  Dialog,
3651
5080
  DragHandleRow,
@@ -3653,30 +5082,57 @@ export {
3653
5082
  EmptyState,
3654
5083
  FileDropzone,
3655
5084
  FormField,
5085
+ HoverCard,
3656
5086
  Icon,
3657
5087
  IconPicker,
3658
5088
  Input,
5089
+ Item,
5090
+ Kbd,
5091
+ Label,
3659
5092
  MOBILE_BREAKPOINT_PX,
5093
+ Marker,
5094
+ MemberMultiSelect,
3660
5095
  Menu,
5096
+ MenuEntries,
5097
+ Menubar,
5098
+ Message,
5099
+ MessageScroller,
3661
5100
  NavTabs,
5101
+ NavigationMenu,
3662
5102
  OverlayHeader,
3663
5103
  PageHeader,
5104
+ Pagination,
3664
5105
  Popover,
5106
+ Progress,
3665
5107
  QuantityStepper,
5108
+ RadioGroup,
5109
+ ResizableHandle,
5110
+ ResizablePanel,
5111
+ ResizablePanelGroup,
5112
+ ScrollArea,
3666
5113
  SegmentedControl,
3667
5114
  Select,
3668
5115
  Sheet,
5116
+ Slider,
3669
5117
  Spinner,
5118
+ SplitMethodSelector,
3670
5119
  SplitPane,
3671
5120
  StatusBadge,
3672
5121
  SuggestionInput,
3673
5122
  SystemBanner,
5123
+ Table,
5124
+ TableBody,
5125
+ TableCell,
5126
+ TableHead,
5127
+ TableHeaderCell,
5128
+ TableRow,
3674
5129
  Tabs,
3675
5130
  TagInput,
3676
5131
  Textarea,
3677
5132
  ToastProvider,
3678
5133
  Toggle,
3679
5134
  Tooltip,
5135
+ Typography,
3680
5136
  useCommitOnEnterOrBlur,
3681
5137
  useDoubleTapHandler,
3682
5138
  useIsMobile,