@persona/design-system 0.1.5-pre.4

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 (897) hide show
  1. package/CHANGELOG.md +461 -0
  2. package/LICENSE +77 -0
  3. package/README.md +9 -0
  4. package/dist/Action-B10lxofb.d.mts +35 -0
  5. package/dist/Action-uduFOh2m.d.cts +35 -0
  6. package/dist/Action.d.cts +2 -0
  7. package/dist/Action.d.mts +2 -0
  8. package/dist/Attribute.d.cts +107 -0
  9. package/dist/Attribute.d.mts +107 -0
  10. package/dist/AttributeGrid.d.cts +40 -0
  11. package/dist/AttributeGrid.d.mts +41 -0
  12. package/dist/Badge-BqLnhb4n.mjs +34 -0
  13. package/dist/Badge-BqLnhb4n.mjs.map +1 -0
  14. package/dist/Badge-BwAZD9BH.cjs +41 -0
  15. package/dist/Badge-BwAZD9BH.cjs.map +1 -0
  16. package/dist/Badge.d.cts +25 -0
  17. package/dist/Badge.d.mts +25 -0
  18. package/dist/Banner.d.cts +48 -0
  19. package/dist/Banner.d.mts +48 -0
  20. package/dist/Button-C_3p5Xfi.d.cts +101 -0
  21. package/dist/Button-DqDLGURJ.d.mts +101 -0
  22. package/dist/Button.d.cts +2 -0
  23. package/dist/Button.d.mts +2 -0
  24. package/dist/ButtonGroup.d.cts +20 -0
  25. package/dist/ButtonGroup.d.mts +20 -0
  26. package/dist/Calendar.d.cts +11 -0
  27. package/dist/Calendar.d.mts +12 -0
  28. package/dist/CalendarBase.d.mts +12 -0
  29. package/dist/CalendarCell.d.mts +18 -0
  30. package/dist/CalendarGrid.d.mts +18 -0
  31. package/dist/Card-CcU9cKCd.d.mts +52 -0
  32. package/dist/Card-CrQL0hXm.d.cts +52 -0
  33. package/dist/Card-CyCKL-M5.cjs +248 -0
  34. package/dist/Card-CyCKL-M5.cjs.map +1 -0
  35. package/dist/Card-DeJSt5ys.mjs +205 -0
  36. package/dist/Card-DeJSt5ys.mjs.map +1 -0
  37. package/dist/Card.d.cts +2 -0
  38. package/dist/Card.d.mts +2 -0
  39. package/dist/Card2.d.cts +95 -0
  40. package/dist/Card2.d.mts +96 -0
  41. package/dist/Checkbox-BWJNAP27.d.mts +46 -0
  42. package/dist/Checkbox-BmjK0Wac.d.cts +46 -0
  43. package/dist/Checkbox-C5bGcb-r.mjs +176 -0
  44. package/dist/Checkbox-C5bGcb-r.mjs.map +1 -0
  45. package/dist/Checkbox-D4nv7eNs.cjs +183 -0
  46. package/dist/Checkbox-D4nv7eNs.cjs.map +1 -0
  47. package/dist/Checkbox.d.cts +2 -0
  48. package/dist/Checkbox.d.mts +2 -0
  49. package/dist/CheckboxGroupField.d.cts +24 -0
  50. package/dist/CheckboxGroupField.d.mts +25 -0
  51. package/dist/Combobox-B_-swcix.mjs +1672 -0
  52. package/dist/Combobox-B_-swcix.mjs.map +1 -0
  53. package/dist/Combobox-B_oe33Re.cjs +1692 -0
  54. package/dist/Combobox-B_oe33Re.cjs.map +1 -0
  55. package/dist/Combobox-DjbJYK_u.d.mts +11 -0
  56. package/dist/Combobox.d.cts +12 -0
  57. package/dist/Combobox.d.mts +3 -0
  58. package/dist/ComboboxBase-D2wypeXf.d.cts +320 -0
  59. package/dist/ComboboxBase-INya0Csa.d.mts +320 -0
  60. package/dist/ComboboxBase.d.cts +2 -0
  61. package/dist/ComboboxBase.d.mts +2 -0
  62. package/dist/ComboboxMultiSelect-Dn8cRZ6Z.d.cts +47 -0
  63. package/dist/ComboboxMultiSelect-Dq9DGH8S.d.mts +47 -0
  64. package/dist/ComboboxMultiSelect.d.cts +2 -0
  65. package/dist/ComboboxMultiSelect.d.mts +2 -0
  66. package/dist/ComboboxSingleSelect-D8YM7GKP.d.cts +35 -0
  67. package/dist/ComboboxSingleSelect-WwBJRb0e.d.mts +35 -0
  68. package/dist/ComboboxSingleSelect.d.cts +2 -0
  69. package/dist/ComboboxSingleSelect.d.mts +2 -0
  70. package/dist/ConfigFormGroup.d.cts +7 -0
  71. package/dist/ConfigFormGroup.d.mts +7 -0
  72. package/dist/DateField-Bwe_0qm9.d.cts +24 -0
  73. package/dist/DateField-Chko9oLb.d.mts +24 -0
  74. package/dist/DateField.d.cts +2 -0
  75. package/dist/DateField.d.mts +2 -0
  76. package/dist/DatePicker.d.cts +19 -0
  77. package/dist/DatePicker.d.mts +19 -0
  78. package/dist/DateRangePicker.d.cts +46 -0
  79. package/dist/DateRangePicker.d.mts +47 -0
  80. package/dist/DropdownButton-DO4NqvWR.cjs +33 -0
  81. package/dist/DropdownButton-DO4NqvWR.cjs.map +1 -0
  82. package/dist/DropdownButton-k9kEcexu.mjs +27 -0
  83. package/dist/DropdownButton-k9kEcexu.mjs.map +1 -0
  84. package/dist/DropdownButton.d.cts +26 -0
  85. package/dist/DropdownButton.d.mts +26 -0
  86. package/dist/DropdownMenu-BTk--LWo.mjs +60 -0
  87. package/dist/DropdownMenu-BTk--LWo.mjs.map +1 -0
  88. package/dist/DropdownMenu-Bm2QqLEq.d.cts +75 -0
  89. package/dist/DropdownMenu-D2fzpkX2.cjs +74 -0
  90. package/dist/DropdownMenu-D2fzpkX2.cjs.map +1 -0
  91. package/dist/DropdownMenu-rWgROxQe.d.mts +75 -0
  92. package/dist/DropdownMenu.d.cts +2 -0
  93. package/dist/DropdownMenu.d.mts +2 -0
  94. package/dist/ErrorProps-DLdVsYlk.d.cts +8 -0
  95. package/dist/ErrorProps-DYUKygmd.d.mts +8 -0
  96. package/dist/ErrorProps.d.cts +2 -0
  97. package/dist/ErrorProps.d.mts +2 -0
  98. package/dist/FormControl-BXHqI_2D.mjs +168 -0
  99. package/dist/FormControl-BXHqI_2D.mjs.map +1 -0
  100. package/dist/FormControl-CM7wTn1P.d.mts +60 -0
  101. package/dist/FormControl-DiR2e7Od.cjs +212 -0
  102. package/dist/FormControl-DiR2e7Od.cjs.map +1 -0
  103. package/dist/FormControl-KkeIYuBa.d.cts +60 -0
  104. package/dist/FormControl.d.cts +2 -0
  105. package/dist/FormControl.d.mts +2 -0
  106. package/dist/FormField-19ownwjH.d.cts +69 -0
  107. package/dist/FormField-CdMru4s5.d.mts +69 -0
  108. package/dist/FormField.d.cts +2 -0
  109. package/dist/FormField.d.mts +2 -0
  110. package/dist/Header-D8oDtnIL.d.cts +35 -0
  111. package/dist/Header-t1plnZc0.d.mts +35 -0
  112. package/dist/Header.d.cts +2 -0
  113. package/dist/Header.d.mts +2 -0
  114. package/dist/HelperTooltip-Cd7I0Ucq.d.mts +20 -0
  115. package/dist/HelperTooltip-oXdyk2At.d.cts +20 -0
  116. package/dist/HelperTooltip.d.cts +2 -0
  117. package/dist/HelperTooltip.d.mts +2 -0
  118. package/dist/IconButton-B1ZL8BqW.cjs +372 -0
  119. package/dist/IconButton-B1ZL8BqW.cjs.map +1 -0
  120. package/dist/IconButton-C28qxOdi.mjs +341 -0
  121. package/dist/IconButton-C28qxOdi.mjs.map +1 -0
  122. package/dist/IconButton-DsXbc3nQ.d.mts +24 -0
  123. package/dist/IconButton-ZcyTFjPn.d.cts +24 -0
  124. package/dist/IconButton.d.cts +2 -0
  125. package/dist/IconButton.d.mts +2 -0
  126. package/dist/ImageTile.d.cts +60 -0
  127. package/dist/ImageTile.d.mts +60 -0
  128. package/dist/Input-Cv5qieRg.d.mts +65 -0
  129. package/dist/Input-DHOsR4cl.cjs +210 -0
  130. package/dist/Input-DHOsR4cl.cjs.map +1 -0
  131. package/dist/Input-XppkvfUf.d.cts +65 -0
  132. package/dist/Input-eoFk39bE.mjs +191 -0
  133. package/dist/Input-eoFk39bE.mjs.map +1 -0
  134. package/dist/Input.d.cts +2 -0
  135. package/dist/Input.d.mts +2 -0
  136. package/dist/InputProps-BHu05fX0.d.mts +16 -0
  137. package/dist/InputProps-CitGo8QA.d.cts +16 -0
  138. package/dist/InputProps.d.cts +2 -0
  139. package/dist/InputProps.d.mts +2 -0
  140. package/dist/Link.d.cts +43 -0
  141. package/dist/Link.d.mts +43 -0
  142. package/dist/ListBox-AyjzT6ra.d.mts +138 -0
  143. package/dist/ListBox-CE3mfDSB.cjs +383 -0
  144. package/dist/ListBox-CE3mfDSB.cjs.map +1 -0
  145. package/dist/ListBox-DbyZFy2W.d.cts +138 -0
  146. package/dist/ListBox-Z1y0LG1H.mjs +369 -0
  147. package/dist/ListBox-Z1y0LG1H.mjs.map +1 -0
  148. package/dist/ListBox.d.cts +2 -0
  149. package/dist/ListBox.d.mts +2 -0
  150. package/dist/ListBoxField.d.cts +46 -0
  151. package/dist/ListBoxField.d.mts +47 -0
  152. package/dist/LoadingShimmer-CNE6JUVF.mjs +67 -0
  153. package/dist/LoadingShimmer-CNE6JUVF.mjs.map +1 -0
  154. package/dist/LoadingShimmer-DMK9RC4N.cjs +92 -0
  155. package/dist/LoadingShimmer-DMK9RC4N.cjs.map +1 -0
  156. package/dist/LoadingShimmer.d.cts +38 -0
  157. package/dist/LoadingShimmer.d.mts +38 -0
  158. package/dist/MaskedInput.d.cts +10 -0
  159. package/dist/MaskedInput.d.mts +10 -0
  160. package/dist/MatchHighlight.d.cts +11 -0
  161. package/dist/MatchHighlight.d.mts +11 -0
  162. package/dist/Menu-BpkjNO81.cjs +217 -0
  163. package/dist/Menu-BpkjNO81.cjs.map +1 -0
  164. package/dist/Menu-DIFkRQ6x.d.mts +70 -0
  165. package/dist/Menu-DNRHo2i_.mjs +167 -0
  166. package/dist/Menu-DNRHo2i_.mjs.map +1 -0
  167. package/dist/Menu-DPrNMatb.d.cts +70 -0
  168. package/dist/Menu.d.cts +2 -0
  169. package/dist/Menu.d.mts +2 -0
  170. package/dist/Modal.d.cts +141 -0
  171. package/dist/Modal.d.mts +141 -0
  172. package/dist/PageHeader.d.cts +26 -0
  173. package/dist/PageHeader.d.mts +26 -0
  174. package/dist/PageSelector.d.cts +30 -0
  175. package/dist/PageSelector.d.mts +30 -0
  176. package/dist/PageSizeSelector.d.mts +22 -0
  177. package/dist/Pagination.d.cts +33 -0
  178. package/dist/Pagination.d.mts +33 -0
  179. package/dist/Pii.d.cts +16 -0
  180. package/dist/Pii.d.mts +17 -0
  181. package/dist/Popover-BSdyxuja.mjs +124 -0
  182. package/dist/Popover-BSdyxuja.mjs.map +1 -0
  183. package/dist/Popover-C2dBSwiU.cjs +168 -0
  184. package/dist/Popover-C2dBSwiU.cjs.map +1 -0
  185. package/dist/Popover.d.cts +90 -0
  186. package/dist/Popover.d.mts +90 -0
  187. package/dist/ProgressBar.d.cts +83 -0
  188. package/dist/ProgressBar.d.mts +83 -0
  189. package/dist/ProgressIndicator.d.cts +64 -0
  190. package/dist/ProgressIndicator.d.mts +64 -0
  191. package/dist/PseudoClassProps-C5jpj6Rp.d.cts +12 -0
  192. package/dist/PseudoClassProps-mZgO_iZJ.d.mts +12 -0
  193. package/dist/PseudoClassProps.d.cts +2 -0
  194. package/dist/PseudoClassProps.d.mts +2 -0
  195. package/dist/Radio-mFfT6G3d.cjs +154 -0
  196. package/dist/Radio-mFfT6G3d.cjs.map +1 -0
  197. package/dist/Radio-w-L3Otuk.mjs +147 -0
  198. package/dist/Radio-w-L3Otuk.mjs.map +1 -0
  199. package/dist/Radio.d.cts +21 -0
  200. package/dist/Radio.d.mts +21 -0
  201. package/dist/RadioGroup-B8htTzsS.mjs +50 -0
  202. package/dist/RadioGroup-B8htTzsS.mjs.map +1 -0
  203. package/dist/RadioGroup-BjDmweRK.cjs +57 -0
  204. package/dist/RadioGroup-BjDmweRK.cjs.map +1 -0
  205. package/dist/RadioGroup-D5ueuC6a.d.cts +21 -0
  206. package/dist/RadioGroup-Ls0vPsP_.d.mts +21 -0
  207. package/dist/RadioGroup.d.cts +2 -0
  208. package/dist/RadioGroup.d.mts +2 -0
  209. package/dist/RangeCalendar.d.mts +33 -0
  210. package/dist/RangeCalendarPresets.d.mts +25 -0
  211. package/dist/RegisterComponent-BDb43KvI.d.mts +34 -0
  212. package/dist/RegisterComponent-CpXIR-51.d.cts +34 -0
  213. package/dist/Section.d.mts +67 -0
  214. package/dist/SectionHeading-DVSXofwK.d.cts +72 -0
  215. package/dist/SectionHeading-QvAmhVmD.d.mts +72 -0
  216. package/dist/SectionHeading.d.cts +2 -0
  217. package/dist/SectionHeading.d.mts +2 -0
  218. package/dist/SegmentedControl-CvznPXgC.cjs +124 -0
  219. package/dist/SegmentedControl-CvznPXgC.cjs.map +1 -0
  220. package/dist/SegmentedControl-DRtXdbLe.d.cts +59 -0
  221. package/dist/SegmentedControl-Dk5S4Dhz.d.mts +59 -0
  222. package/dist/SegmentedControl-DnwNjYre.mjs +111 -0
  223. package/dist/SegmentedControl-DnwNjYre.mjs.map +1 -0
  224. package/dist/SegmentedControl.d.cts +2 -0
  225. package/dist/SegmentedControl.d.mts +2 -0
  226. package/dist/Select-BdPdgtfU.d.cts +77 -0
  227. package/dist/Select-CVB-Q1g1.cjs +266 -0
  228. package/dist/Select-CVB-Q1g1.cjs.map +1 -0
  229. package/dist/Select-Cl3AOq0-.mjs +246 -0
  230. package/dist/Select-Cl3AOq0-.mjs.map +1 -0
  231. package/dist/Select-DRnRqMAL.d.mts +77 -0
  232. package/dist/Select.d.cts +2 -0
  233. package/dist/Select.d.mts +2 -0
  234. package/dist/Slider-D3gz7otf.d.mts +56 -0
  235. package/dist/Slider-uH5MOu2D.d.cts +56 -0
  236. package/dist/Slider.d.cts +2 -0
  237. package/dist/Slider.d.mts +2 -0
  238. package/dist/SliderRHF-Cc-9RuPe.d.cts +984 -0
  239. package/dist/SliderRHF-DIV-tCEv.d.mts +984 -0
  240. package/dist/SliderRHF.d.cts +2 -0
  241. package/dist/SliderRHF.d.mts +2 -0
  242. package/dist/SliderThumb.d.mts +139 -0
  243. package/dist/Spacer-DWGkX170.cjs +20 -0
  244. package/dist/Spacer-DWGkX170.cjs.map +1 -0
  245. package/dist/Spacer-DxH_sQrV.mjs +13 -0
  246. package/dist/Spacer-DxH_sQrV.mjs.map +1 -0
  247. package/dist/Spacer.d.cts +17 -0
  248. package/dist/Spacer.d.mts +18 -0
  249. package/dist/Spinner-C05An_fn.mjs +41 -0
  250. package/dist/Spinner-C05An_fn.mjs.map +1 -0
  251. package/dist/Spinner-z7DrPE1d.cjs +48 -0
  252. package/dist/Spinner-z7DrPE1d.cjs.map +1 -0
  253. package/dist/Spinner.d.cts +26 -0
  254. package/dist/Spinner.d.mts +26 -0
  255. package/dist/Stack-BHb3ZB2A.cjs +53 -0
  256. package/dist/Stack-BHb3ZB2A.cjs.map +1 -0
  257. package/dist/Stack-BntgUvsW.d.mts +47 -0
  258. package/dist/Stack-hwgS2FU1.mjs +40 -0
  259. package/dist/Stack-hwgS2FU1.mjs.map +1 -0
  260. package/dist/Stack-toDRLy--.d.cts +47 -0
  261. package/dist/Stack.d.cts +2 -0
  262. package/dist/Stack.d.mts +2 -0
  263. package/dist/StatusIndicator.d.cts +54 -0
  264. package/dist/StatusIndicator.d.mts +54 -0
  265. package/dist/Sticker-Bd7KkekO.d.mts +68 -0
  266. package/dist/Sticker-D6bwBTGr.mjs +215 -0
  267. package/dist/Sticker-D6bwBTGr.mjs.map +1 -0
  268. package/dist/Sticker-D_dutvp_.cjs +246 -0
  269. package/dist/Sticker-D_dutvp_.cjs.map +1 -0
  270. package/dist/Sticker-S6QWjlEJ.d.cts +68 -0
  271. package/dist/Sticker.d.cts +2 -0
  272. package/dist/Sticker.d.mts +2 -0
  273. package/dist/SwatchPicker.d.cts +18 -0
  274. package/dist/SwatchPicker.d.mts +18 -0
  275. package/dist/Tab.d.cts +26 -0
  276. package/dist/Tab.d.mts +26 -0
  277. package/dist/TabBar-BMv8dAS3.cjs +297 -0
  278. package/dist/TabBar-BMv8dAS3.cjs.map +1 -0
  279. package/dist/TabBar-Bf89XksH.mjs +266 -0
  280. package/dist/TabBar-Bf89XksH.mjs.map +1 -0
  281. package/dist/TabBar.d.cts +33 -0
  282. package/dist/TabBar.d.mts +33 -0
  283. package/dist/TabBarContext.d.mts +10 -0
  284. package/dist/TabBarIconButton.d.cts +10 -0
  285. package/dist/TabBarIconButton.d.mts +11 -0
  286. package/dist/Table-34f5m7w5.d.mts +13 -0
  287. package/dist/Table-DkAA1lt_.d.cts +13 -0
  288. package/dist/Table.d.cts +2 -0
  289. package/dist/Table.d.mts +2 -0
  290. package/dist/TableBody-5QcVMPP_.d.cts +9 -0
  291. package/dist/TableBody-Clf34yzJ.d.mts +9 -0
  292. package/dist/TableBody.d.cts +2 -0
  293. package/dist/TableBody.d.mts +2 -0
  294. package/dist/TableCell-DIs9h97h.d.cts +75 -0
  295. package/dist/TableCell-Dog4Blfq.d.mts +75 -0
  296. package/dist/TableCell.d.cts +2 -0
  297. package/dist/TableCell.d.mts +2 -0
  298. package/dist/TableHead-9LLM1B8I.d.cts +12 -0
  299. package/dist/TableHead-DJBGHoUD.d.mts +12 -0
  300. package/dist/TableHead.d.cts +2 -0
  301. package/dist/TableHead.d.mts +2 -0
  302. package/dist/TableHeaderCell-25lC9tNk.d.cts +17 -0
  303. package/dist/TableHeaderCell-DzYZq7SG.d.mts +17 -0
  304. package/dist/TableHeaderCell.d.cts +2 -0
  305. package/dist/TableHeaderCell.d.mts +2 -0
  306. package/dist/TableLayout-BA3jbdbi.d.mts +19 -0
  307. package/dist/TableLayout-CmDKOu10.d.cts +19 -0
  308. package/dist/TableLayout.d.cts +2 -0
  309. package/dist/TableLayout.d.mts +2 -0
  310. package/dist/TableRow-CBKpDeUV.d.mts +13 -0
  311. package/dist/TableRow-IPjQnK2q.d.cts +13 -0
  312. package/dist/TableRow.d.cts +2 -0
  313. package/dist/TableRow.d.mts +2 -0
  314. package/dist/TableTH.d.cts +2 -0
  315. package/dist/TableTH.d.mts +2 -0
  316. package/dist/Text-CnXedFut.d.mts +42 -0
  317. package/dist/Text-CrGiWG2E.d.cts +42 -0
  318. package/dist/Text-DOTYjIt0.mjs +58 -0
  319. package/dist/Text-DOTYjIt0.mjs.map +1 -0
  320. package/dist/Text-DVz8erdF.cjs +95 -0
  321. package/dist/Text-DVz8erdF.cjs.map +1 -0
  322. package/dist/Text.d.cts +2 -0
  323. package/dist/Text.d.mts +2 -0
  324. package/dist/TextArea-1bHvaq9p.d.mts +10 -0
  325. package/dist/TextArea-B1kitxCl.mjs +33 -0
  326. package/dist/TextArea-B1kitxCl.mjs.map +1 -0
  327. package/dist/TextArea-MVgGGM6r.cjs +40 -0
  328. package/dist/TextArea-MVgGGM6r.cjs.map +1 -0
  329. package/dist/TextArea-j43fhp2P.d.cts +10 -0
  330. package/dist/TextArea.d.cts +2 -0
  331. package/dist/TextArea.d.mts +2 -0
  332. package/dist/TextUnderlineTooltip-BDMs4iXn.d.cts +18 -0
  333. package/dist/TextUnderlineTooltip-z4sSGL91.d.mts +18 -0
  334. package/dist/TextUnderlineTooltip.d.cts +2 -0
  335. package/dist/TextUnderlineTooltip.d.mts +2 -0
  336. package/dist/Tile.d.cts +63 -0
  337. package/dist/Tile.d.mts +63 -0
  338. package/dist/Toast.d.cts +27 -0
  339. package/dist/Toast.d.mts +27 -0
  340. package/dist/Toggle-8GNRxyvE.mjs +167 -0
  341. package/dist/Toggle-8GNRxyvE.mjs.map +1 -0
  342. package/dist/Toggle-B3Cdyf7T.d.mts +54 -0
  343. package/dist/Toggle-BjkbL_uf.d.cts +54 -0
  344. package/dist/Toggle-CVdg5iQ0.cjs +174 -0
  345. package/dist/Toggle-CVdg5iQ0.cjs.map +1 -0
  346. package/dist/Toggle.d.cts +2 -0
  347. package/dist/Toggle.d.mts +2 -0
  348. package/dist/Tooltip-0i_15ysU.cjs +152 -0
  349. package/dist/Tooltip-0i_15ysU.cjs.map +1 -0
  350. package/dist/Tooltip-C0PS5InA.d.mts +100 -0
  351. package/dist/Tooltip-CE1oH6Iz.d.cts +100 -0
  352. package/dist/Tooltip-T7RQpy_a.mjs +120 -0
  353. package/dist/Tooltip-T7RQpy_a.mjs.map +1 -0
  354. package/dist/Tooltip.d.cts +2 -0
  355. package/dist/Tooltip.d.mts +2 -0
  356. package/dist/TruncatedText-0Tf8CwFX.d.mts +18 -0
  357. package/dist/TruncatedText-D8f3AiBL.d.cts +18 -0
  358. package/dist/chunk-Bpcn9VDT.mjs +39 -0
  359. package/dist/chunk-CoPdw6nB.cjs +64 -0
  360. package/dist/common.d.mts +7 -0
  361. package/dist/components/Attribute/index.cjs +210 -0
  362. package/dist/components/Attribute/index.cjs.map +1 -0
  363. package/dist/components/Attribute/index.d.cts +3 -0
  364. package/dist/components/Attribute/index.d.mts +3 -0
  365. package/dist/components/Attribute/index.mjs +198 -0
  366. package/dist/components/Attribute/index.mjs.map +1 -0
  367. package/dist/components/Badge/index.cjs +8 -0
  368. package/dist/components/Badge/index.d.cts +2 -0
  369. package/dist/components/Badge/index.d.mts +2 -0
  370. package/dist/components/Badge/index.mjs +2 -0
  371. package/dist/components/Banner/index.cjs +100 -0
  372. package/dist/components/Banner/index.cjs.map +1 -0
  373. package/dist/components/Banner/index.d.cts +2 -0
  374. package/dist/components/Banner/index.d.mts +2 -0
  375. package/dist/components/Banner/index.mjs +93 -0
  376. package/dist/components/Banner/index.mjs.map +1 -0
  377. package/dist/components/Button/index.cjs +12 -0
  378. package/dist/components/Button/index.d.cts +3 -0
  379. package/dist/components/Button/index.d.mts +3 -0
  380. package/dist/components/Button/index.mjs +2 -0
  381. package/dist/components/ButtonGroup/index.cjs +112 -0
  382. package/dist/components/ButtonGroup/index.cjs.map +1 -0
  383. package/dist/components/ButtonGroup/index.d.cts +2 -0
  384. package/dist/components/ButtonGroup/index.d.mts +2 -0
  385. package/dist/components/ButtonGroup/index.mjs +103 -0
  386. package/dist/components/ButtonGroup/index.mjs.map +1 -0
  387. package/dist/components/Card/index.cjs +13 -0
  388. package/dist/components/Card/index.d.cts +3 -0
  389. package/dist/components/Card/index.d.mts +3 -0
  390. package/dist/components/Card/index.mjs +2 -0
  391. package/dist/components/CardV2/index.cjs +512 -0
  392. package/dist/components/CardV2/index.cjs.map +1 -0
  393. package/dist/components/CardV2/index.d.cts +3 -0
  394. package/dist/components/CardV2/index.d.mts +3 -0
  395. package/dist/components/CardV2/index.mjs +511 -0
  396. package/dist/components/CardV2/index.mjs.map +1 -0
  397. package/dist/components/Checkbox/index.cjs +8 -0
  398. package/dist/components/Checkbox/index.d.cts +2 -0
  399. package/dist/components/Checkbox/index.d.mts +2 -0
  400. package/dist/components/Checkbox/index.mjs +2 -0
  401. package/dist/components/Combobox/index.cjs +10 -0
  402. package/dist/components/Combobox/index.d.cts +3 -0
  403. package/dist/components/Combobox/index.d.mts +3 -0
  404. package/dist/components/Combobox/index.mjs +2 -0
  405. package/dist/components/ConfigFormGroup/index.cjs +37 -0
  406. package/dist/components/ConfigFormGroup/index.cjs.map +1 -0
  407. package/dist/components/ConfigFormGroup/index.d.cts +3 -0
  408. package/dist/components/ConfigFormGroup/index.d.mts +3 -0
  409. package/dist/components/ConfigFormGroup/index.mjs +28 -0
  410. package/dist/components/ConfigFormGroup/index.mjs.map +1 -0
  411. package/dist/components/DatePicker/index.cjs +11503 -0
  412. package/dist/components/DatePicker/index.cjs.map +1 -0
  413. package/dist/components/DatePicker/index.d.cts +5 -0
  414. package/dist/components/DatePicker/index.d.mts +5 -0
  415. package/dist/components/DatePicker/index.mjs +11491 -0
  416. package/dist/components/DatePicker/index.mjs.map +1 -0
  417. package/dist/components/DropdownButton/index.cjs +8 -0
  418. package/dist/components/DropdownButton/index.d.cts +2 -0
  419. package/dist/components/DropdownButton/index.d.mts +2 -0
  420. package/dist/components/DropdownButton/index.mjs +2 -0
  421. package/dist/components/DropdownMenu/index.cjs +8 -0
  422. package/dist/components/DropdownMenu/index.d.cts +2 -0
  423. package/dist/components/DropdownMenu/index.d.mts +2 -0
  424. package/dist/components/DropdownMenu/index.mjs +2 -0
  425. package/dist/components/FormControl/index.cjs +16 -0
  426. package/dist/components/FormControl/index.d.cts +3 -0
  427. package/dist/components/FormControl/index.d.mts +3 -0
  428. package/dist/components/FormControl/index.mjs +3 -0
  429. package/dist/components/FormField/index.cjs +385 -0
  430. package/dist/components/FormField/index.cjs.map +1 -0
  431. package/dist/components/FormField/index.d.cts +5 -0
  432. package/dist/components/FormField/index.d.mts +5 -0
  433. package/dist/components/FormField/index.mjs +367 -0
  434. package/dist/components/FormField/index.mjs.map +1 -0
  435. package/dist/components/ImageTile/index.cjs +228 -0
  436. package/dist/components/ImageTile/index.cjs.map +1 -0
  437. package/dist/components/ImageTile/index.d.cts +2 -0
  438. package/dist/components/ImageTile/index.d.mts +2 -0
  439. package/dist/components/ImageTile/index.mjs +221 -0
  440. package/dist/components/ImageTile/index.mjs.map +1 -0
  441. package/dist/components/Input/index.cjs +15 -0
  442. package/dist/components/Input/index.cjs.map +1 -0
  443. package/dist/components/Input/index.d.cts +2 -0
  444. package/dist/components/Input/index.d.mts +2 -0
  445. package/dist/components/Input/index.mjs +7 -0
  446. package/dist/components/Input/index.mjs.map +1 -0
  447. package/dist/components/Link/index.cjs +87 -0
  448. package/dist/components/Link/index.cjs.map +1 -0
  449. package/dist/components/Link/index.d.cts +2 -0
  450. package/dist/components/Link/index.d.mts +2 -0
  451. package/dist/components/Link/index.mjs +80 -0
  452. package/dist/components/Link/index.mjs.map +1 -0
  453. package/dist/components/ListBox/index.cjs +9 -0
  454. package/dist/components/ListBox/index.d.cts +2 -0
  455. package/dist/components/ListBox/index.d.mts +2 -0
  456. package/dist/components/ListBox/index.mjs +2 -0
  457. package/dist/components/LoadingShimmer/index.cjs +7 -0
  458. package/dist/components/LoadingShimmer/index.d.cts +2 -0
  459. package/dist/components/LoadingShimmer/index.d.mts +2 -0
  460. package/dist/components/LoadingShimmer/index.mjs +2 -0
  461. package/dist/components/MaskedInput/index.cjs +29 -0
  462. package/dist/components/MaskedInput/index.cjs.map +1 -0
  463. package/dist/components/MaskedInput/index.d.cts +2 -0
  464. package/dist/components/MaskedInput/index.d.mts +2 -0
  465. package/dist/components/MaskedInput/index.mjs +24 -0
  466. package/dist/components/MaskedInput/index.mjs.map +1 -0
  467. package/dist/components/MatchHighlight/index.cjs +31 -0
  468. package/dist/components/MatchHighlight/index.cjs.map +1 -0
  469. package/dist/components/MatchHighlight/index.d.cts +2 -0
  470. package/dist/components/MatchHighlight/index.d.mts +2 -0
  471. package/dist/components/MatchHighlight/index.mjs +24 -0
  472. package/dist/components/MatchHighlight/index.mjs.map +1 -0
  473. package/dist/components/Menu/index.cjs +15 -0
  474. package/dist/components/Menu/index.d.cts +2 -0
  475. package/dist/components/Menu/index.d.mts +2 -0
  476. package/dist/components/Menu/index.mjs +2 -0
  477. package/dist/components/Modal/index.cjs +285 -0
  478. package/dist/components/Modal/index.cjs.map +1 -0
  479. package/dist/components/Modal/index.d.cts +2 -0
  480. package/dist/components/Modal/index.d.mts +2 -0
  481. package/dist/components/Modal/index.mjs +276 -0
  482. package/dist/components/Modal/index.mjs.map +1 -0
  483. package/dist/components/PageHeader/index.cjs +71 -0
  484. package/dist/components/PageHeader/index.cjs.map +1 -0
  485. package/dist/components/PageHeader/index.d.cts +2 -0
  486. package/dist/components/PageHeader/index.d.mts +2 -0
  487. package/dist/components/PageHeader/index.mjs +64 -0
  488. package/dist/components/PageHeader/index.mjs.map +1 -0
  489. package/dist/components/Pagination/index.cjs +211 -0
  490. package/dist/components/Pagination/index.cjs.map +1 -0
  491. package/dist/components/Pagination/index.d.cts +3 -0
  492. package/dist/components/Pagination/index.d.mts +3 -0
  493. package/dist/components/Pagination/index.mjs +203 -0
  494. package/dist/components/Pagination/index.mjs.map +1 -0
  495. package/dist/components/Pii/index.cjs +20 -0
  496. package/dist/components/Pii/index.cjs.map +1 -0
  497. package/dist/components/Pii/index.d.cts +2 -0
  498. package/dist/components/Pii/index.d.mts +2 -0
  499. package/dist/components/Pii/index.mjs +19 -0
  500. package/dist/components/Pii/index.mjs.map +1 -0
  501. package/dist/components/Popover/index.cjs +13 -0
  502. package/dist/components/Popover/index.d.cts +2 -0
  503. package/dist/components/Popover/index.d.mts +2 -0
  504. package/dist/components/Popover/index.mjs +2 -0
  505. package/dist/components/ProgressBar/index.cjs +177 -0
  506. package/dist/components/ProgressBar/index.cjs.map +1 -0
  507. package/dist/components/ProgressBar/index.d.cts +2 -0
  508. package/dist/components/ProgressBar/index.d.mts +2 -0
  509. package/dist/components/ProgressBar/index.mjs +168 -0
  510. package/dist/components/ProgressBar/index.mjs.map +1 -0
  511. package/dist/components/ProgressIndicator/index.cjs +185 -0
  512. package/dist/components/ProgressIndicator/index.cjs.map +1 -0
  513. package/dist/components/ProgressIndicator/index.d.cts +2 -0
  514. package/dist/components/ProgressIndicator/index.d.mts +2 -0
  515. package/dist/components/ProgressIndicator/index.mjs +178 -0
  516. package/dist/components/ProgressIndicator/index.mjs.map +1 -0
  517. package/dist/components/Radio/index.cjs +8 -0
  518. package/dist/components/Radio/index.d.cts +2 -0
  519. package/dist/components/Radio/index.d.mts +2 -0
  520. package/dist/components/Radio/index.mjs +2 -0
  521. package/dist/components/RadioGroup/index.cjs +8 -0
  522. package/dist/components/RadioGroup/index.d.cts +2 -0
  523. package/dist/components/RadioGroup/index.d.mts +2 -0
  524. package/dist/components/RadioGroup/index.mjs +2 -0
  525. package/dist/components/SegmentedControl/index.cjs +9 -0
  526. package/dist/components/SegmentedControl/index.d.cts +2 -0
  527. package/dist/components/SegmentedControl/index.d.mts +2 -0
  528. package/dist/components/SegmentedControl/index.mjs +2 -0
  529. package/dist/components/Select/index.cjs +10 -0
  530. package/dist/components/Select/index.d.cts +2 -0
  531. package/dist/components/Select/index.d.mts +2 -0
  532. package/dist/components/Select/index.mjs +2 -0
  533. package/dist/components/Slider/index.cjs +1507 -0
  534. package/dist/components/Slider/index.cjs.map +1 -0
  535. package/dist/components/Slider/index.d.cts +3 -0
  536. package/dist/components/Slider/index.d.mts +3 -0
  537. package/dist/components/Slider/index.mjs +1497 -0
  538. package/dist/components/Slider/index.mjs.map +1 -0
  539. package/dist/components/Spacer/index.cjs +3 -0
  540. package/dist/components/Spacer/index.d.cts +2 -0
  541. package/dist/components/Spacer/index.d.mts +2 -0
  542. package/dist/components/Spacer/index.mjs +2 -0
  543. package/dist/components/Spinner/index.cjs +8 -0
  544. package/dist/components/Spinner/index.d.cts +2 -0
  545. package/dist/components/Spinner/index.d.mts +2 -0
  546. package/dist/components/Spinner/index.mjs +2 -0
  547. package/dist/components/Stack/index.cjs +9 -0
  548. package/dist/components/Stack/index.d.cts +2 -0
  549. package/dist/components/Stack/index.d.mts +2 -0
  550. package/dist/components/Stack/index.mjs +2 -0
  551. package/dist/components/StatusIndicator/index.cjs +174 -0
  552. package/dist/components/StatusIndicator/index.cjs.map +1 -0
  553. package/dist/components/StatusIndicator/index.d.cts +2 -0
  554. package/dist/components/StatusIndicator/index.d.mts +2 -0
  555. package/dist/components/StatusIndicator/index.mjs +167 -0
  556. package/dist/components/StatusIndicator/index.mjs.map +1 -0
  557. package/dist/components/Sticker/index.cjs +12 -0
  558. package/dist/components/Sticker/index.d.cts +2 -0
  559. package/dist/components/Sticker/index.d.mts +2 -0
  560. package/dist/components/Sticker/index.mjs +2 -0
  561. package/dist/components/SwatchPicker/index.cjs +65 -0
  562. package/dist/components/SwatchPicker/index.cjs.map +1 -0
  563. package/dist/components/SwatchPicker/index.d.cts +2 -0
  564. package/dist/components/SwatchPicker/index.d.mts +2 -0
  565. package/dist/components/SwatchPicker/index.mjs +58 -0
  566. package/dist/components/SwatchPicker/index.mjs.map +1 -0
  567. package/dist/components/TabBar/index.cjs +12 -0
  568. package/dist/components/TabBar/index.d.cts +4 -0
  569. package/dist/components/TabBar/index.d.mts +4 -0
  570. package/dist/components/TabBar/index.mjs +2 -0
  571. package/dist/components/Table/index.cjs +400 -0
  572. package/dist/components/Table/index.cjs.map +1 -0
  573. package/dist/components/Table/index.d.cts +8 -0
  574. package/dist/components/Table/index.d.mts +8 -0
  575. package/dist/components/Table/index.mjs +379 -0
  576. package/dist/components/Table/index.mjs.map +1 -0
  577. package/dist/components/Text/index.cjs +9 -0
  578. package/dist/components/Text/index.d.cts +2 -0
  579. package/dist/components/Text/index.d.mts +2 -0
  580. package/dist/components/Text/index.mjs +2 -0
  581. package/dist/components/TextArea/index.cjs +8 -0
  582. package/dist/components/TextArea/index.d.cts +2 -0
  583. package/dist/components/TextArea/index.d.mts +2 -0
  584. package/dist/components/TextArea/index.mjs +2 -0
  585. package/dist/components/Tile/index.cjs +103 -0
  586. package/dist/components/Tile/index.cjs.map +1 -0
  587. package/dist/components/Tile/index.d.cts +2 -0
  588. package/dist/components/Tile/index.d.mts +2 -0
  589. package/dist/components/Tile/index.mjs +96 -0
  590. package/dist/components/Tile/index.mjs.map +1 -0
  591. package/dist/components/Toast/index.cjs +141 -0
  592. package/dist/components/Toast/index.cjs.map +1 -0
  593. package/dist/components/Toast/index.d.cts +2 -0
  594. package/dist/components/Toast/index.d.mts +2 -0
  595. package/dist/components/Toast/index.mjs +136 -0
  596. package/dist/components/Toast/index.mjs.map +1 -0
  597. package/dist/components/Toggle/index.cjs +8 -0
  598. package/dist/components/Toggle/index.d.cts +2 -0
  599. package/dist/components/Toggle/index.d.mts +2 -0
  600. package/dist/components/Toggle/index.mjs +2 -0
  601. package/dist/components/Tooltip/index.cjs +12 -0
  602. package/dist/components/Tooltip/index.d.cts +4 -0
  603. package/dist/components/Tooltip/index.d.mts +4 -0
  604. package/dist/components/Tooltip/index.mjs +2 -0
  605. package/dist/constants.d.mts +5 -0
  606. package/dist/ids-Cr-NW2RJ.d.mts +11 -0
  607. package/dist/ids-e4V5Y3Ub.d.cts +11 -0
  608. package/dist/index-1-AkepUA.d.mts +1 -0
  609. package/dist/index-7in8TPrM.d.mts +1 -0
  610. package/dist/index-8R9vlM2B.d.mts +83 -0
  611. package/dist/index-B2KLYYkM.d.cts +1 -0
  612. package/dist/index-BBDa5smF.d.cts +1 -0
  613. package/dist/index-BJ8-FA6N.d.cts +1 -0
  614. package/dist/index-BM1DqNZf.d.cts +628 -0
  615. package/dist/index-BPSCxsMC.d.cts +1 -0
  616. package/dist/index-BPiqSRRl.d.mts +1 -0
  617. package/dist/index-BUYyA1Xh.d.cts +1 -0
  618. package/dist/index-CCt0lwyI.d.mts +1 -0
  619. package/dist/index-CEDY7cmG.d.cts +1 -0
  620. package/dist/index-CEqOS-7M.d.mts +1 -0
  621. package/dist/index-CExuKKOI.d.cts +218 -0
  622. package/dist/index-CIABef8t.d.mts +1 -0
  623. package/dist/index-CIBxlpQo.d.mts +1 -0
  624. package/dist/index-CKu60b9I.d.mts +154 -0
  625. package/dist/index-CP2eJYlK.d.mts +1 -0
  626. package/dist/index-CRo77wc3.d.mts +1 -0
  627. package/dist/index-CiBIKhMu.d.cts +1 -0
  628. package/dist/index-Cii4Qb1X.d.mts +1 -0
  629. package/dist/index-CspKFJM1.d.cts +1 -0
  630. package/dist/index-CsuikFeJ.d.mts +1 -0
  631. package/dist/index-Cz6N-KeS.d.cts +1 -0
  632. package/dist/index-D-BciAtf.d.cts +1 -0
  633. package/dist/index-D26lpgQi.d.cts +1 -0
  634. package/dist/index-D2HUTZ-d.d.cts +1 -0
  635. package/dist/index-D4DUvwPf.d.mts +1 -0
  636. package/dist/index-D4ELpJXS.d.cts +1 -0
  637. package/dist/index-D6CnpA_r.d.cts +1 -0
  638. package/dist/index-DLoAMD9J.d.cts +1 -0
  639. package/dist/index-DQvVmqvS.d.mts +628 -0
  640. package/dist/index-DWfPppPU.d.mts +1 -0
  641. package/dist/index-DcU87nuJ2.d.cts +1 -0
  642. package/dist/index-DkrC-i1D.d.mts +1 -0
  643. package/dist/index-DvuJXuAN.d.mts +1 -0
  644. package/dist/index-OEBbnNdr.d.mts +1 -0
  645. package/dist/index-QbUkWSLh.d.mts +1 -0
  646. package/dist/index-VmEFGBxN.d.cts +1 -0
  647. package/dist/index.cjs +1 -0
  648. package/dist/index.d.cts +2 -0
  649. package/dist/index.d.mts +2 -0
  650. package/dist/index.mjs +0 -0
  651. package/dist/index2.d.cts +1 -0
  652. package/dist/index2.d.mts +1 -0
  653. package/dist/input-BCmP106-.d.mts +17 -0
  654. package/dist/input-Bm_anD8X.d.cts +17 -0
  655. package/dist/inputFields.d.cts +83 -0
  656. package/dist/inputFields.d.mts +83 -0
  657. package/dist/intersperse.d.mts +18 -0
  658. package/dist/lib/ConfigContext.cjs +15 -0
  659. package/dist/lib/ConfigContext.cjs.map +1 -0
  660. package/dist/lib/ConfigContext.d.cts +16 -0
  661. package/dist/lib/ConfigContext.d.mts +17 -0
  662. package/dist/lib/ConfigContext.mjs +15 -0
  663. package/dist/lib/ConfigContext.mjs.map +1 -0
  664. package/dist/lib/HeadlessAriaButton.cjs +33 -0
  665. package/dist/lib/HeadlessAriaButton.cjs.map +1 -0
  666. package/dist/lib/HeadlessAriaButton.d.cts +12 -0
  667. package/dist/lib/HeadlessAriaButton.d.mts +12 -0
  668. package/dist/lib/HeadlessAriaButton.mjs +30 -0
  669. package/dist/lib/HeadlessAriaButton.mjs.map +1 -0
  670. package/dist/lib/PDSProvider.cjs +20 -0
  671. package/dist/lib/PDSProvider.cjs.map +1 -0
  672. package/dist/lib/PDSProvider.d.cts +12 -0
  673. package/dist/lib/PDSProvider.d.mts +13 -0
  674. package/dist/lib/PDSProvider.mjs +19 -0
  675. package/dist/lib/PDSProvider.mjs.map +1 -0
  676. package/dist/lib/TruncatedText.cjs +39 -0
  677. package/dist/lib/TruncatedText.cjs.map +1 -0
  678. package/dist/lib/TruncatedText.d.cts +2 -0
  679. package/dist/lib/TruncatedText.d.mts +2 -0
  680. package/dist/lib/TruncatedText.mjs +31 -0
  681. package/dist/lib/TruncatedText.mjs.map +1 -0
  682. package/dist/lib/TruncatedTextWithTooltip.cjs +34 -0
  683. package/dist/lib/TruncatedTextWithTooltip.cjs.map +1 -0
  684. package/dist/lib/TruncatedTextWithTooltip.d.cts +15 -0
  685. package/dist/lib/TruncatedTextWithTooltip.d.mts +15 -0
  686. package/dist/lib/TruncatedTextWithTooltip.mjs +28 -0
  687. package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -0
  688. package/dist/lib/comboboxHelper.cjs +46 -0
  689. package/dist/lib/comboboxHelper.cjs.map +1 -0
  690. package/dist/lib/comboboxHelper.d.cts +24 -0
  691. package/dist/lib/comboboxHelper.d.mts +24 -0
  692. package/dist/lib/comboboxHelper.mjs +42 -0
  693. package/dist/lib/comboboxHelper.mjs.map +1 -0
  694. package/dist/lib/datePickerHelper.cjs +3568 -0
  695. package/dist/lib/datePickerHelper.cjs.map +1 -0
  696. package/dist/lib/datePickerHelper.d.cts +19 -0
  697. package/dist/lib/datePickerHelper.d.mts +19 -0
  698. package/dist/lib/datePickerHelper.mjs +3566 -0
  699. package/dist/lib/datePickerHelper.mjs.map +1 -0
  700. package/dist/lib/pseudoClass.cjs +32 -0
  701. package/dist/lib/pseudoClass.cjs.map +1 -0
  702. package/dist/lib/pseudoClass.d.cts +45 -0
  703. package/dist/lib/pseudoClass.d.mts +45 -0
  704. package/dist/lib/pseudoClass.mjs +18 -0
  705. package/dist/lib/pseudoClass.mjs.map +1 -0
  706. package/dist/lib/register/RegisterComponent.cjs +91 -0
  707. package/dist/lib/register/RegisterComponent.cjs.map +1 -0
  708. package/dist/lib/register/RegisterComponent.d.cts +2 -0
  709. package/dist/lib/register/RegisterComponent.d.mts +2 -0
  710. package/dist/lib/register/RegisterComponent.mjs +88 -0
  711. package/dist/lib/register/RegisterComponent.mjs.map +1 -0
  712. package/dist/lib/register/ids.cjs +31 -0
  713. package/dist/lib/register/ids.cjs.map +1 -0
  714. package/dist/lib/register/ids.d.cts +2 -0
  715. package/dist/lib/register/ids.d.mts +2 -0
  716. package/dist/lib/register/ids.mjs +28 -0
  717. package/dist/lib/register/ids.mjs.map +1 -0
  718. package/dist/lib/register/index.cjs +8 -0
  719. package/dist/lib/register/index.d.cts +4 -0
  720. package/dist/lib/register/index.d.mts +4 -0
  721. package/dist/lib/register/index.mjs +3 -0
  722. package/dist/lib/register/types.cjs +1 -0
  723. package/dist/lib/register/types.d.cts +2 -0
  724. package/dist/lib/register/types.d.mts +2 -0
  725. package/dist/lib/register/types.mjs +0 -0
  726. package/dist/lib/reorderItems.cjs +39 -0
  727. package/dist/lib/reorderItems.cjs.map +1 -0
  728. package/dist/lib/reorderItems.d.cts +26 -0
  729. package/dist/lib/reorderItems.d.mts +26 -0
  730. package/dist/lib/reorderItems.mjs +36 -0
  731. package/dist/lib/reorderItems.mjs.map +1 -0
  732. package/dist/lib/selectHelper.cjs +22 -0
  733. package/dist/lib/selectHelper.cjs.map +1 -0
  734. package/dist/lib/selectHelper.d.cts +14 -0
  735. package/dist/lib/selectHelper.d.mts +14 -0
  736. package/dist/lib/selectHelper.mjs +20 -0
  737. package/dist/lib/selectHelper.mjs.map +1 -0
  738. package/dist/lib/useControlled.cjs +20 -0
  739. package/dist/lib/useControlled.cjs.map +1 -0
  740. package/dist/lib/useControlled.d.cts +16 -0
  741. package/dist/lib/useControlled.d.mts +17 -0
  742. package/dist/lib/useControlled.mjs +19 -0
  743. package/dist/lib/useControlled.mjs.map +1 -0
  744. package/dist/lib/useIsOverflow.cjs +58 -0
  745. package/dist/lib/useIsOverflow.cjs.map +1 -0
  746. package/dist/lib/useIsOverflow.d.cts +11 -0
  747. package/dist/lib/useIsOverflow.d.mts +11 -0
  748. package/dist/lib/useIsOverflow.mjs +56 -0
  749. package/dist/lib/useIsOverflow.mjs.map +1 -0
  750. package/dist/lib/useOutsideClick.cjs +19 -0
  751. package/dist/lib/useOutsideClick.cjs.map +1 -0
  752. package/dist/lib/useOutsideClick.d.cts +13 -0
  753. package/dist/lib/useOutsideClick.d.mts +13 -0
  754. package/dist/lib/useOutsideClick.mjs +17 -0
  755. package/dist/lib/useOutsideClick.mjs.map +1 -0
  756. package/dist/lib/zindex.cjs +27 -0
  757. package/dist/lib/zindex.cjs.map +1 -0
  758. package/dist/lib/zindex.d.cts +25 -0
  759. package/dist/lib/zindex.d.mts +25 -0
  760. package/dist/lib/zindex.mjs +25 -0
  761. package/dist/lib/zindex.mjs.map +1 -0
  762. package/dist/mergeRefs-BZinWopc.cjs +31 -0
  763. package/dist/mergeRefs-BZinWopc.cjs.map +1 -0
  764. package/dist/mergeRefs-BgcbK0Qy.mjs +26 -0
  765. package/dist/mergeRefs-BgcbK0Qy.mjs.map +1 -0
  766. package/dist/mixins/focus.cjs +39 -0
  767. package/dist/mixins/focus.cjs.map +1 -0
  768. package/dist/mixins/focus.d.cts +11 -0
  769. package/dist/mixins/focus.d.mts +11 -0
  770. package/dist/mixins/focus.mjs +34 -0
  771. package/dist/mixins/focus.mjs.map +1 -0
  772. package/dist/mixins/hoverable.cjs +38 -0
  773. package/dist/mixins/hoverable.cjs.map +1 -0
  774. package/dist/mixins/hoverable.d.cts +16 -0
  775. package/dist/mixins/hoverable.d.mts +16 -0
  776. package/dist/mixins/hoverable.mjs +32 -0
  777. package/dist/mixins/hoverable.mjs.map +1 -0
  778. package/dist/mixins/input.cjs +95 -0
  779. package/dist/mixins/input.cjs.map +1 -0
  780. package/dist/mixins/input.d.cts +2 -0
  781. package/dist/mixins/input.d.mts +2 -0
  782. package/dist/mixins/input.mjs +94 -0
  783. package/dist/mixins/input.mjs.map +1 -0
  784. package/dist/mixins/menuItem.cjs +110 -0
  785. package/dist/mixins/menuItem.cjs.map +1 -0
  786. package/dist/mixins/menuItem.d.cts +30 -0
  787. package/dist/mixins/menuItem.d.mts +31 -0
  788. package/dist/mixins/menuItem.mjs +109 -0
  789. package/dist/mixins/menuItem.mjs.map +1 -0
  790. package/dist/mixins/print/index.cjs +25 -0
  791. package/dist/mixins/print/index.cjs.map +1 -0
  792. package/dist/mixins/print/index.d.cts +11 -0
  793. package/dist/mixins/print/index.d.mts +11 -0
  794. package/dist/mixins/print/index.mjs +23 -0
  795. package/dist/mixins/print/index.mjs.map +1 -0
  796. package/dist/mixins/text.cjs +93 -0
  797. package/dist/mixins/text.cjs.map +1 -0
  798. package/dist/mixins/text.d.cts +2 -0
  799. package/dist/mixins/text.d.mts +2 -0
  800. package/dist/mixins/text.mjs +88 -0
  801. package/dist/mixins/text.mjs.map +1 -0
  802. package/dist/motion-DoikasqZ.mjs +7483 -0
  803. package/dist/motion-DoikasqZ.mjs.map +1 -0
  804. package/dist/motion-QW6imSxE.cjs +7488 -0
  805. package/dist/motion-QW6imSxE.cjs.map +1 -0
  806. package/dist/react.esm-C-es35jP.cjs +11441 -0
  807. package/dist/react.esm-C-es35jP.cjs.map +1 -0
  808. package/dist/react.esm-Dv1lMDRs.mjs +11397 -0
  809. package/dist/react.esm-Dv1lMDRs.mjs.map +1 -0
  810. package/dist/text-BrSUs-88.d.mts +14 -0
  811. package/dist/text-PmH5oc61.d.cts +14 -0
  812. package/dist/theme-Cadb1xzQ.d.cts +154 -0
  813. package/dist/theme-DGAqgnUa.d.mts +154 -0
  814. package/dist/theme.cjs +353 -0
  815. package/dist/theme.cjs.map +1 -0
  816. package/dist/theme.d.cts +2 -0
  817. package/dist/theme.d.mts +2 -0
  818. package/dist/theme.mjs +346 -0
  819. package/dist/theme.mjs.map +1 -0
  820. package/dist/types-DzHQ5MGm.d.mts +69 -0
  821. package/dist/types-N-cXznfM.d.cts +69 -0
  822. package/dist/useFormField-Ba0CQ43u.d.cts +30 -0
  823. package/dist/useFormField-BmtItl8y.d.mts +30 -0
  824. package/dist/useFormField-DN3gpEEV.cjs +37 -0
  825. package/dist/useFormField-DN3gpEEV.cjs.map +1 -0
  826. package/dist/useFormField-eftOPiXj.mjs +25 -0
  827. package/dist/useFormField-eftOPiXj.mjs.map +1 -0
  828. package/dist/useFormField.d.cts +2 -0
  829. package/dist/useFormField.d.mts +2 -0
  830. package/dist/useFormGroup-BMukAMAd.mjs +14 -0
  831. package/dist/useFormGroup-BMukAMAd.mjs.map +1 -0
  832. package/dist/useFormGroup-B_mFNoN9.cjs +26 -0
  833. package/dist/useFormGroup-B_mFNoN9.cjs.map +1 -0
  834. package/dist/useFormGroup.d.cts +18 -0
  835. package/dist/useFormGroup.d.mts +18 -0
  836. package/dist/useLabel-BcbghpIU.cjs +1465 -0
  837. package/dist/useLabel-BcbghpIU.cjs.map +1 -0
  838. package/dist/useLabel-DHGzNIKw.mjs +1212 -0
  839. package/dist/useLabel-DHGzNIKw.mjs.map +1 -0
  840. package/dist/useModalInsetRight.d.mts +21 -0
  841. package/dist/useToggle-0zLL1E7s.mjs +21 -0
  842. package/dist/useToggle-0zLL1E7s.mjs.map +1 -0
  843. package/dist/useToggle-DNrEsTpr.cjs +27 -0
  844. package/dist/useToggle-DNrEsTpr.cjs.map +1 -0
  845. package/dist/useToggle.d.mts +17 -0
  846. package/dist/useTruncation.d.mts +12 -0
  847. package/dist/utilities-C8Jf-xpi.d.cts +9 -0
  848. package/dist/utilities-w1K54IAy.d.mts +9 -0
  849. package/dist/utilities.d.cts +2 -0
  850. package/dist/utilities.d.mts +2 -0
  851. package/dist/utils/storybook.cjs +13 -0
  852. package/dist/utils/storybook.cjs.map +1 -0
  853. package/dist/utils/storybook.mjs +11 -0
  854. package/dist/utils/storybook.mjs.map +1 -0
  855. package/dist/utils/testing.cjs +50 -0
  856. package/dist/utils/testing.cjs.map +1 -0
  857. package/dist/utils/testing.d.cts +370 -0
  858. package/dist/utils/testing.d.mts +370 -0
  859. package/dist/utils/testing.mjs +45 -0
  860. package/dist/utils/testing.mjs.map +1 -0
  861. package/dist/variables/color.cjs +23 -0
  862. package/dist/variables/color.cjs.map +1 -0
  863. package/dist/variables/color.d.cts +19 -0
  864. package/dist/variables/color.d.mts +19 -0
  865. package/dist/variables/color.mjs +21 -0
  866. package/dist/variables/color.mjs.map +1 -0
  867. package/dist/variables/effect.cjs +27 -0
  868. package/dist/variables/effect.cjs.map +1 -0
  869. package/dist/variables/effect.d.cts +21 -0
  870. package/dist/variables/effect.d.mts +21 -0
  871. package/dist/variables/effect.mjs +24 -0
  872. package/dist/variables/effect.mjs.map +1 -0
  873. package/dist/variables/keyframes.cjs +22 -0
  874. package/dist/variables/keyframes.cjs.map +1 -0
  875. package/dist/variables/keyframes.d.cts +8 -0
  876. package/dist/variables/keyframes.d.mts +8 -0
  877. package/dist/variables/keyframes.mjs +19 -0
  878. package/dist/variables/keyframes.mjs.map +1 -0
  879. package/dist/variables/spacing.cjs +11 -0
  880. package/dist/variables/spacing.cjs.map +1 -0
  881. package/dist/variables/spacing.d.cts +8 -0
  882. package/dist/variables/spacing.d.mts +8 -0
  883. package/dist/variables/spacing.mjs +9 -0
  884. package/dist/variables/spacing.mjs.map +1 -0
  885. package/dist/variables/text.cjs +14 -0
  886. package/dist/variables/text.cjs.map +1 -0
  887. package/dist/variables/text.d.cts +10 -0
  888. package/dist/variables/text.d.mts +10 -0
  889. package/dist/variables/text.mjs +12 -0
  890. package/dist/variables/text.mjs.map +1 -0
  891. package/dist/variables/transitions.cjs +25 -0
  892. package/dist/variables/transitions.cjs.map +1 -0
  893. package/dist/variables/transitions.d.cts +19 -0
  894. package/dist/variables/transitions.d.mts +19 -0
  895. package/dist/variables/transitions.mjs +22 -0
  896. package/dist/variables/transitions.mjs.map +1 -0
  897. package/package.json +781 -0
@@ -0,0 +1,1672 @@
1
+ import { focusStyle } from "./mixins/focus.mjs";
2
+ import { n as Stack } from "./Stack-hwgS2FU1.mjs";
3
+ import "./components/Stack/index.mjs";
4
+ import { i as Paragraph } from "./Text-DOTYjIt0.mjs";
5
+ import { useOutsideClick } from "./lib/useOutsideClick.mjs";
6
+ import { Z_INDICES } from "./lib/zindex.mjs";
7
+ import { n as Button } from "./IconButton-C28qxOdi.mjs";
8
+ import "./components/Button/index.mjs";
9
+ import { n as Sticker } from "./Sticker-D6bwBTGr.mjs";
10
+ import { n as useFormField } from "./useFormField-eftOPiXj.mjs";
11
+ import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-DNRHo2i_.mjs";
12
+ import { t as Checkbox } from "./Checkbox-C5bGcb-r.mjs";
13
+ import { r as InputGroup } from "./Input-eoFk39bE.mjs";
14
+ import Input_default from "./components/Input/index.mjs";
15
+ import "./components/Menu/index.mjs";
16
+ import { t as Spinner } from "./Spinner-C05An_fn.mjs";
17
+ import { Color, Spacing, Typography } from "@persona/design-tokens";
18
+ import styled, { css } from "styled-components";
19
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
20
+ import { Fragment as Fragment$1, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
21
+ import { createPortal } from "react-dom";
22
+ import { ArrowLeftIcon, CaretDownIcon, ChevronRightIcon, CircleXInverseIcon, SearchIcon } from "@persona/icons";
23
+ import Fuse from "fuse.js";
24
+ import { useVirtualizer } from "@tanstack/react-virtual";
25
+ import { useCombobox, useMultipleSelection } from "downshift";
26
+ //#region components/Combobox/ComboboxBase.tsx
27
+ function isOptionGroup(item) {
28
+ return "options" in item && Array.isArray(item.options);
29
+ }
30
+ /**
31
+ * Flatten the visible leaves at the current navigation level. Inline
32
+ * (non-nested) groups are walked through transparently — their leaves
33
+ * surface at this level. Nested groups are skipped along with their
34
+ * contents — those leaves live behind a navigation step in single-
35
+ * select. Multi-select doesn't reach this code with nested groups
36
+ * intact (it inlines them at the component boundary), so the skip
37
+ * here is the single-select-only contract.
38
+ */
39
+ function flattenOptions(items) {
40
+ const out = [];
41
+ for (const item of items) if (isOptionGroup(item)) {
42
+ if (!item.nested) out.push(...flattenOptions(item.options));
43
+ } else out.push(item);
44
+ return out;
45
+ }
46
+ /**
47
+ * Recurse through the entire option tree looking for any nested
48
+ * group. Used to gate nested-mode behavior so trees that don't opt
49
+ * in (the overwhelmingly common case) skip the extra book-keeping
50
+ * entirely. Single-select uses this to switch between its nested-nav
51
+ * render path and the legacy renderer; multi-select uses it to
52
+ * short-circuit its `nested → inline` transform when there's nothing
53
+ * to convert.
54
+ */
55
+ function containsNestedGroup(items) {
56
+ for (const item of items) if (isOptionGroup(item)) {
57
+ if (item.nested) return true;
58
+ if (containsNestedGroup(item.options)) return true;
59
+ }
60
+ return false;
61
+ }
62
+ /**
63
+ * Find a nested-group child of `items` whose `label` matches `label`.
64
+ * Walks transparently through inline (non-nested) groups at the same
65
+ * level — they don't add a navigation step, so a nested submenu
66
+ * declared inside an inline section header is still "at this level"
67
+ * for descent purposes. Returns `null` if no match.
68
+ */
69
+ function findNestedGroupByLabel(items, label) {
70
+ for (const item of items) {
71
+ if (!isOptionGroup(item)) continue;
72
+ if (item.nested) {
73
+ if (item.label === label) return item;
74
+ } else {
75
+ const found = findNestedGroupByLabel(item.options, label);
76
+ if (found) return found;
77
+ }
78
+ }
79
+ return null;
80
+ }
81
+ /**
82
+ * Walk the option tree by following `path` step-by-step. Each entry
83
+ * in `path` is the `label` of a nested group at that level; we
84
+ * descend into its `options` at each step. Returns the items visible
85
+ * at the resolved level (a mix of leaves, inline groups, and further
86
+ * nested groups).
87
+ *
88
+ * - Empty `path` returns the original top-level items unchanged.
89
+ * - If any step doesn't resolve to a known nested group (e.g. stale
90
+ * state after the registry changes), returns an empty list so the
91
+ * consumer can fall back to the root view.
92
+ */
93
+ function getOptionsAtPath(options, path) {
94
+ let scope = options;
95
+ for (const label of path) {
96
+ const found = findNestedGroupByLabel(scope, label);
97
+ if (!found) return [];
98
+ scope = found.options;
99
+ }
100
+ return scope;
101
+ }
102
+ /**
103
+ * Recursively walk the tree and return every leaf option, each paired
104
+ * with the labels of its nested-group ancestors. Used by single-select
105
+ * Combobox to populate the search-results view: the search query
106
+ * bypasses the active navigation path and matches against every leaf
107
+ * in the tree, with the breadcrumb surfacing parent context in each
108
+ * hit.
109
+ *
110
+ * Inline (non-nested) groups are walked through transparently — their
111
+ * `label` isn't a breadcrumb crumb because they don't correspond to a
112
+ * navigation step. Only nested groups contribute a crumb.
113
+ */
114
+ function flattenLeafOptions(options, breadcrumb = []) {
115
+ const result = [];
116
+ for (const item of options) if (isOptionGroup(item)) {
117
+ const nextBreadcrumb = item.nested ? [...breadcrumb, item.label] : breadcrumb;
118
+ result.push(...flattenLeafOptions(item.options, nextBreadcrumb));
119
+ } else result.push({
120
+ option: item,
121
+ breadcrumb
122
+ });
123
+ return result;
124
+ }
125
+ /**
126
+ * Build the flat list of navigable items at the current navigation
127
+ * level, in document order. Inline (non-nested) groups are walked
128
+ * through transparently; their leaves and any nested subgroups
129
+ * contribute at this level. Nested groups become a `kind: 'group'`
130
+ * entry that the renderer turns into a navigation row.
131
+ */
132
+ function getNavigableItemsAtLevel(items) {
133
+ const out = [];
134
+ for (const item of items) if (isOptionGroup(item)) if (item.nested) out.push({
135
+ kind: "group",
136
+ group: item
137
+ });
138
+ else out.push(...getNavigableItemsAtLevel(item.options));
139
+ else out.push({
140
+ kind: "leaf",
141
+ option: item
142
+ });
143
+ return out;
144
+ }
145
+ /**
146
+ * A hook which provides the caller with dynamically filtered options
147
+ *
148
+ * @param options - The options to filter (can be flat or grouped)
149
+ * @param inputValue - The input value to filter the options by
150
+ * @returns The subset of the options that match the input value according to the fuse.js library
151
+ */
152
+ function useFilteredOptions(options, inputValue) {
153
+ return useMemo(() => {
154
+ const flatOptions = flattenOptions(options);
155
+ const fuse = new Fuse(flatOptions, {
156
+ shouldSort: false,
157
+ threshold: 0,
158
+ ignoreLocation: true,
159
+ minMatchCharLength: 1,
160
+ keys: ["label", "description"]
161
+ });
162
+ return inputValue === "" ? flatOptions : Array.from(new Set(fuse.search(inputValue).map(({ item }) => item)).values());
163
+ }, [options, inputValue]);
164
+ }
165
+ function buildVirtualRows(options, filteredOptions, indexRealToIndexVirtual) {
166
+ const rows = [];
167
+ let idx = 0;
168
+ for (const item of options) if (isOptionGroup(item)) {
169
+ if (item.nested) continue;
170
+ const visibleLeaves = flattenOptions(item.options).filter((opt) => filteredOptions.some((f) => f.value === opt.value));
171
+ if (visibleLeaves.length > 0) {
172
+ rows.push({
173
+ kind: "group-header",
174
+ label: item.label
175
+ });
176
+ for (const opt of visibleLeaves) {
177
+ indexRealToIndexVirtual.set(idx, rows.length);
178
+ rows.push({
179
+ kind: "option",
180
+ option: opt,
181
+ index: idx++
182
+ });
183
+ }
184
+ }
185
+ } else if (filteredOptions.some((f) => f.value === item.value)) {
186
+ indexRealToIndexVirtual.set(idx, rows.length);
187
+ rows.push({
188
+ kind: "option",
189
+ option: item,
190
+ index: idx++
191
+ });
192
+ }
193
+ return rows;
194
+ }
195
+ /**
196
+ * Renders options with support for groups, handling filtering and proper indexing
197
+ *
198
+ * @param params - Object containing options, filteredOptions, and renderOption
199
+ * @param params.options - The original options array (can include groups)
200
+ * @param params.filteredOptions - The flat filtered options to display
201
+ * @param params.virtualizer - Optional virtualizer for large lists
202
+ * @param params.virtualRows - Pre-built flat rows list (required when virtualizer is provided)
203
+ * @param params.renderOption - Callback to render each individual option with its flat index
204
+ * @returns React nodes with properly grouped and filtered options
205
+ */
206
+ function renderOptionsWithGroups({ options, filteredOptions, renderOption, virtualizer, virtualRows }) {
207
+ if (virtualizer && virtualRows) {
208
+ const rows = virtualRows;
209
+ const vItems = virtualizer.getVirtualItems();
210
+ return /* @__PURE__ */ jsx("div", {
211
+ style: {
212
+ height: `${virtualizer.getTotalSize()}px`,
213
+ width: "100%",
214
+ position: "relative"
215
+ },
216
+ children: vItems.map((vItem) => {
217
+ const row = rows[vItem.index];
218
+ if (!row) return null;
219
+ return /* @__PURE__ */ jsx("div", {
220
+ "data-index": vItem.index,
221
+ ref: virtualizer.measureElement,
222
+ style: {
223
+ position: "absolute",
224
+ top: 0,
225
+ left: 0,
226
+ width: "100%",
227
+ transform: `translateY(${vItem.start}px)`
228
+ },
229
+ children: row.kind === "group-header" ? /* @__PURE__ */ jsx(MenuHeading, {
230
+ as: "div",
231
+ children: row.label
232
+ }) : renderOption(row.option, row.index)
233
+ }, String(vItem.key));
234
+ })
235
+ });
236
+ }
237
+ let flatIndex = -1;
238
+ return options.map((item, groupIndex) => {
239
+ if (isOptionGroup(item)) {
240
+ if (item.nested) return null;
241
+ const visibleLeaves = flattenOptions(item.options).filter((opt) => filteredOptions.some((filtered) => filtered.value === opt.value));
242
+ if (visibleLeaves.length === 0) return null;
243
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(MenuHeading, { children: item.label }), visibleLeaves.map((option) => {
244
+ flatIndex++;
245
+ return renderOption(option, flatIndex);
246
+ })] }, `group-${groupIndex}`);
247
+ } else {
248
+ if (!filteredOptions.some((filtered) => filtered.value === item.value)) return null;
249
+ flatIndex++;
250
+ return renderOption(item, flatIndex);
251
+ }
252
+ });
253
+ }
254
+ const MAX_DROPDOWN_HEIGHT = "300px";
255
+ const Container = styled.div`
256
+ display: flex;
257
+ position: relative;
258
+ width: 100%;
259
+ `;
260
+ const InputContainer = styled.div`
261
+ position: relative;
262
+ width: 100%;
263
+ `;
264
+ const ComboboxInput = styled(Input_default)`
265
+ padding-right: ${({ size }) => size === "sm" ? Spacing[5] : Spacing[6]}; /* Space for caret icon */
266
+
267
+ ${({ $isOpen }) => $isOpen && css`
268
+ ${focusStyle}
269
+ `}
270
+
271
+ /* Apply custom font family from selected item when dropdown is closed */
272
+ ${({ $selectedItemStyle, $isOpen }) => !$isOpen && $selectedItemStyle?.fontFamily && css`
273
+ && {
274
+ font-family: ${$selectedItemStyle.fontFamily};
275
+ }
276
+ `}
277
+ `;
278
+ const CaretButton = styled(Button).attrs({ width: "icon" })`
279
+ background-color: transparent;
280
+ border: none;
281
+ color: ${Color.BorderIconPrimary};
282
+
283
+ &:hover:not(:disabled),
284
+ &:active:not(:disabled) {
285
+ color: ${Color.BorderIconPrimary};
286
+ background-color: transparent;
287
+ border: none;
288
+ }
289
+
290
+ &:disabled {
291
+ color: ${Color.BorderIconDisabled};
292
+ background-color: transparent;
293
+ border: none;
294
+ }
295
+
296
+ position: absolute;
297
+ right: 0;
298
+ top: 0;
299
+ `;
300
+ const DropdownContainer = styled(FloatingCard)`
301
+ ${({ $portal, $embedded, $top, $left, $width }) => $embedded ? css`
302
+ position: static;
303
+ width: 100%;
304
+ min-width: 0;
305
+ border: 0;
306
+ border-radius: 0;
307
+ box-shadow: none;
308
+ background: transparent;
309
+ margin: 0;
310
+ ` : $portal ? css`
311
+ position: fixed;
312
+ top: ${$top != null ? `${$top}px` : "0"};
313
+ left: ${$left != null ? `${$left}px` : "0"};
314
+ width: ${$width != null ? `${$width}px` : "auto"};
315
+ ` : css`
316
+ position: absolute;
317
+ top: calc(100% + ${Spacing[2]});
318
+ left: 0;
319
+ right: 0;
320
+ width: 100%;
321
+ `}
322
+
323
+ ${({ $minWidth }) => $minWidth && css`
324
+ min-width: ${$minWidth};
325
+ `}
326
+
327
+ display: flex;
328
+ flex-direction: column;
329
+ ${({ $embedded }) => $embedded && css`
330
+ gap: ${Spacing[2]};
331
+ `}
332
+ overflow: ${({ $embedded }) => $embedded ? "visible" : "hidden"}; /* Prevent floating menu overflow while preserving embedded focus rings */
333
+ box-sizing: border-box;
334
+ z-index: ${Z_INDICES.modalDropdown}; /* Ensure portal dropdown appears above other content */
335
+
336
+ ${({ $isOpen }) => !$isOpen && css`
337
+ display: none;
338
+ `}
339
+ `;
340
+ const ScrollableMenuList = styled(MenuList)`
341
+ max-height: ${MAX_DROPDOWN_HEIGHT};
342
+ overflow-y: auto;
343
+ overflow-x: hidden; /* Prevent horizontal scrolling */
344
+ width: 100%; /* Ensure full width is used */
345
+ box-sizing: border-box;
346
+ `;
347
+ const SearchInputContainer = styled.div`
348
+ flex-shrink: 0;
349
+ ${({ $embedded }) => $embedded ? css`
350
+ padding: 0;
351
+ ` : css`
352
+ padding: ${Spacing[1]} ${Spacing[2]};
353
+ border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};
354
+ `}
355
+ `;
356
+ const SearchInput = styled(Input_default)`
357
+ ${({ $embedded }) => !$embedded && css`
358
+ /* Borderless strip inside floating menus */
359
+ border: none;
360
+ padding-top: ${Spacing[1]};
361
+ padding-bottom: ${Spacing[1]};
362
+
363
+ &:focus {
364
+ outline: none !important;
365
+ }
366
+ `}
367
+ `;
368
+ const EmptyState = styled(Paragraph).attrs(({ size }) => ({ size }))`
369
+ padding: 0 ${({ size }) => size === "sm" ? Spacing[1] : Spacing[2]};
370
+ color: ${({ theme }) => theme.color.text.tertiary};
371
+ ${({ theme }) => theme.text.paragraph.md};
372
+ `;
373
+ const LoadingContainer = styled.div`
374
+ display: flex;
375
+ align-items: center;
376
+ justify-content: center;
377
+ min-height: 136px;
378
+ padding: ${Spacing[3]};
379
+ `;
380
+ const OptionLabel = styled.div`
381
+ overflow: hidden;
382
+ text-overflow: ellipsis;
383
+ white-space: nowrap;
384
+ min-width: 0; /* Allow flex item to shrink below content size */
385
+
386
+ /* Apply custom font family if provided */
387
+ ${({ $labelStyle }) => $labelStyle?.fontFamily && css`
388
+ font-family: ${$labelStyle.fontFamily};
389
+ `}
390
+ `;
391
+ const Description = styled.p`
392
+ ${Typography.TextSmall};
393
+ color: ${Color.TextSecondary};
394
+ margin: 0;
395
+
396
+ /* Multi-line truncation with 3-line limit */
397
+ overflow: hidden;
398
+ display: -webkit-box;
399
+ -webkit-line-clamp: 3;
400
+ -webkit-box-orient: vertical;
401
+
402
+ /* Fallback for browsers that don't support -webkit-line-clamp */
403
+ max-height: calc(${Typography.TextSmall.lineHeight} * 3); /* line-height * 3 lines */
404
+ `;
405
+ function useDropdownPosition(portalContainerRef, isOpen, portal) {
406
+ const [position, setPosition] = useState({
407
+ top: 0,
408
+ left: 0,
409
+ width: 0
410
+ });
411
+ useEffect(() => {
412
+ if (!portal || !isOpen || !portalContainerRef.current) return;
413
+ const updatePosition = () => {
414
+ const rect = portalContainerRef.current.getBoundingClientRect();
415
+ const spacing = parseInt(Spacing[2]);
416
+ setPosition({
417
+ top: rect.bottom + spacing,
418
+ left: rect.left,
419
+ width: rect.width
420
+ });
421
+ };
422
+ updatePosition();
423
+ window.addEventListener("scroll", updatePosition, true);
424
+ window.addEventListener("resize", updatePosition);
425
+ return () => {
426
+ window.removeEventListener("scroll", updatePosition, true);
427
+ window.removeEventListener("resize", updatePosition);
428
+ };
429
+ }, [
430
+ portalContainerRef,
431
+ isOpen,
432
+ portal
433
+ ]);
434
+ return position;
435
+ }
436
+ function DropdownPortalWrapper({ children, portal }) {
437
+ const portalRoot = useRef(null);
438
+ useEffect(() => {
439
+ if (portal) portalRoot.current = document.body;
440
+ }, [portal]);
441
+ if (portal && portalRoot.current) return createPortal(/* @__PURE__ */ jsx("div", {
442
+ id: "combobox-dropdown-portal-wrapper",
443
+ children
444
+ }), portalRoot.current);
445
+ return /* @__PURE__ */ jsx(Fragment, { children });
446
+ }
447
+ //#endregion
448
+ //#region components/Combobox/useTruncation.ts
449
+ /**
450
+ * Custom hook for calculating truncation when multi-select items are restricted to a single line using actual DOM measurements
451
+ * Ensures at least one item is always visible
452
+ */
453
+ function useTruncation(selectedItems, stickerRefs, truncatorRef, containerRef, truncate) {
454
+ const [visibleCount, setVisibleCount] = useState(selectedItems.length);
455
+ useEffect(() => {
456
+ if (!truncate || selectedItems.length === 0 || !containerRef.current) {
457
+ setVisibleCount(selectedItems.length);
458
+ return;
459
+ }
460
+ const calculateVisibleCount = () => {
461
+ const container = containerRef.current;
462
+ if (!container) return;
463
+ if (!(selectedItems.every((_, i) => stickerRefs.current[i] != null) && truncatorRef.current != null)) return;
464
+ const computedStyle = window.getComputedStyle(container);
465
+ const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
466
+ const paddingRight = parseFloat(computedStyle.paddingRight) || 0;
467
+ const availableWidth = container.offsetWidth - paddingLeft - paddingRight;
468
+ const gap = 4;
469
+ const truncatorWidth = truncatorRef.current.offsetWidth;
470
+ let count = 1;
471
+ let totalWidth = stickerRefs.current[0].offsetWidth;
472
+ for (let i = 1; i < selectedItems.length; i++) {
473
+ const itemWidth = stickerRefs.current[i].offsetWidth;
474
+ const wouldBeLastItem = i === selectedItems.length - 1;
475
+ const widthWithItem = totalWidth + gap + itemWidth;
476
+ if (widthWithItem + (wouldBeLastItem ? 0 : gap + truncatorWidth) <= availableWidth) {
477
+ totalWidth = widthWithItem;
478
+ count++;
479
+ } else break;
480
+ }
481
+ setVisibleCount((prev) => prev === count ? prev : count);
482
+ };
483
+ const resizeObserver = new ResizeObserver(calculateVisibleCount);
484
+ resizeObserver.observe(containerRef.current);
485
+ return () => {
486
+ resizeObserver.disconnect();
487
+ };
488
+ }, [
489
+ selectedItems,
490
+ stickerRefs,
491
+ truncatorRef,
492
+ containerRef,
493
+ truncate
494
+ ]);
495
+ return visibleCount;
496
+ }
497
+ //#endregion
498
+ //#region components/Combobox/ComboboxMultiSelect.tsx
499
+ const SELECT_ALL_VALUE = "__SELECT_ALL__";
500
+ const EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH$1 = "240px";
501
+ /**
502
+ * Recursively drop the `nested: true` flag from every group in the
503
+ * tree, converting nested-navigation groups into inline section-
504
+ * header groups. Multi-select doesn't implement the nested-nav UX
505
+ * (chevron rows, Back row, descent), so this graceful-degradation
506
+ * transform keeps every leaf reachable as a checkable option under
507
+ * its parent's section header — instead of having `flattenOptions` /
508
+ * `renderOptionsWithGroups` silently drop them along with their
509
+ * descendants. Single-select Combobox is unaffected; it owns its own
510
+ * nested-nav render path.
511
+ *
512
+ * For a multi-level tree (`{nested, options: [{nested, options}]}`),
513
+ * the inner inline group is walked through by `flattenOptions` so
514
+ * its leaves surface under the outer header — the inner label is
515
+ * lost, but all leaves stay reachable. Acceptable for the
516
+ * graceful-degradation goal; nested-nav can be added later without
517
+ * changing this API.
518
+ */
519
+ function inlineNestedGroups(items) {
520
+ return items.map((item) => {
521
+ if (!isOptionGroup(item)) return item;
522
+ return {
523
+ label: item.label,
524
+ options: inlineNestedGroups(item.options)
525
+ };
526
+ });
527
+ }
528
+ const MultiSelectComboboxInput = styled(ComboboxInput)`
529
+ position: absolute;
530
+ inset: 0;
531
+ height: auto;
532
+ caret-color: transparent; /* Hide cursor in multi-select mode because we use stickers and focus into the search input */
533
+ `;
534
+ const MultiSelectScrollableMenuList = styled(ScrollableMenuList)`
535
+ max-height: calc(${MAX_DROPDOWN_HEIGHT} - 60px); /* Subtract approximate search bar height */
536
+ overflow-x: hidden; /* Prevent horizontal scrolling */
537
+ width: 100%; /* Ensure full width is used */
538
+ box-sizing: border-box;
539
+ ${({ $embedded }) => $embedded && css`
540
+ padding: 0;
541
+ `}
542
+ `;
543
+ const SelectedItemsContainer = styled.div`
544
+ position: relative; /* Establish positioning context */
545
+ box-sizing: border-box;
546
+ min-height: ${({ $size }) => $size === "sm" ? Spacing[5] : Spacing[6]};
547
+ max-height: ${({ $truncate, $size }) => $truncate ? $size === "sm" ? Spacing[5] : Spacing[6] : "none"};
548
+ padding-left: ${Spacing[2]};
549
+ padding-right: ${({ $size }) => $size === "sm" ? Spacing[5] : Spacing[6]}; /* Leave space for caret button. */
550
+ padding-top: ${({ $size }) => $size === "sm" ? Spacing[1] : Spacing[2]};
551
+ padding-bottom: ${({ $size }) => $size === "sm" ? Spacing[1] : Spacing[2]};
552
+ display: flex;
553
+ flex-wrap: ${({ $truncate }) => $truncate ? "nowrap" : "wrap"};
554
+ gap: ${Spacing[1]};
555
+ align-items: flex-start;
556
+ align-content: flex-start;
557
+ pointer-events: none; /* Allow clicks to pass through to underlying input */
558
+ overflow: hidden; /* Required for truncation when truncate mode is enabled */
559
+
560
+ /* Re-enable pointer events on stickers' dismiss buttons */
561
+ button {
562
+ pointer-events: auto;
563
+ }
564
+ `;
565
+ const TruncatedItemsWrapper = styled.div`
566
+ display: flex;
567
+ flex-wrap: nowrap;
568
+ gap: ${Spacing[1]};
569
+ overflow: hidden;
570
+ flex: 1;
571
+ min-width: 0; /* Allow shrinking below content size */
572
+ pointer-events: none;
573
+ `;
574
+ const TruncatedSticker = styled(Sticker)`
575
+ /* Allow first sticker to truncate its text only when it's the only item */
576
+ flex-shrink: ${({ $isOnlyItem }) => $isOnlyItem ? 1 : 0};
577
+ min-width: 0;
578
+ max-width: 100%;
579
+ /* If the sticker is an inline element it was causing the parent to gain an extra pixel of height */
580
+ vertical-align: top;
581
+ `;
582
+ const TruncatorSticker = styled(Sticker)`
583
+ /* Truncator should never shrink */
584
+ flex-shrink: 0;
585
+ /* If the sticker is an inline element it was causing the parent to gain an extra pixel of height */
586
+ vertical-align: top;
587
+ `;
588
+ const HiddenMeasurementContainer = styled.div`
589
+ position: absolute;
590
+ top: 0;
591
+ left: 0;
592
+ visibility: hidden;
593
+ display: flex;
594
+ flex-wrap: nowrap;
595
+ gap: ${Spacing[1]};
596
+ pointer-events: none;
597
+ overflow: hidden;
598
+ max-width: 100%;
599
+ `;
600
+ const StyledMenuItem$1 = styled(MenuItem)`
601
+ /* These heights should add up to 24 and 32 respectively and the content is 20 already */
602
+ padding: ${({ $size }) => $size === "sm" ? `2px ${Spacing[2]}` : `6px ${Spacing[2]}`};
603
+ display: flex;
604
+ flex-direction: column;
605
+ align-items: flex-start;
606
+ gap: ${Spacing[1]};
607
+ min-width: 0; /* Allow content to shrink below natural size */
608
+ width: 100%; /* Ensure full width of dropdown */
609
+ box-sizing: border-box;
610
+
611
+ /* Force all children to respect the container width */
612
+ > * {
613
+ width: 100%;
614
+ min-width: 0;
615
+ box-sizing: border-box;
616
+ }
617
+ `;
618
+ const CheckboxLabel = styled.span`
619
+ color: ${Color.TextPrimary};
620
+ ${({ $size }) => $size === "sm" ? Typography.TextSmall : Typography.TextMedium};
621
+ display: flex;
622
+ flex-direction: column;
623
+ gap: ${Spacing[1]};
624
+ min-width: 0; /* Allow content to shrink below natural size */
625
+
626
+ /** Nudge text for visual alignment */
627
+ position: relative;
628
+ bottom: -1px;
629
+ `;
630
+ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOptionsLoading, values = [], onValuesChange, searchPlaceholder = "Search...", onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, id, labelId, "aria-label": ariaLabel, onOpenChange, truncate = false, selectAll = false, stableOptionOrder = false, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, virtualize = false, ...props }, ref) {
631
+ const options = useMemo(() => containsNestedGroup(rawOptions) ? inlineNestedGroups(rawOptions) : rawOptions, [rawOptions]);
632
+ const field = useFormField({
633
+ hasWarning,
634
+ hasError,
635
+ disabled,
636
+ inputId: id
637
+ });
638
+ const [inputValue, setInputValue] = useState("");
639
+ const searchInputRef = useRef(null);
640
+ const comboboxInputRef = useRef(null);
641
+ const caretButtonRef = useRef(null);
642
+ const comboboxContainerRef = useRef(null);
643
+ const scrollableListRef = useRef(null);
644
+ const selectedItemsContainerRef = useRef(null);
645
+ const measurementStickerRefs = useRef([]);
646
+ const measurementTruncatorRef = useRef(null);
647
+ const portalContainerRef = externalPortalContainerRef || comboboxContainerRef;
648
+ const flatOptions = useMemo(() => flattenOptions(options), [options]);
649
+ const selectedItems = flatOptions.filter((option) => values.includes(option.value));
650
+ useEffect(() => {
651
+ measurementStickerRefs.current = measurementStickerRefs.current.slice(0, selectedItems.length);
652
+ }, [selectedItems.length]);
653
+ const visibleCount = useTruncation(selectedItems, measurementStickerRefs, measurementTruncatorRef, selectedItemsContainerRef, truncate);
654
+ useImperativeHandle(ref, () => ({
655
+ ...comboboxInputRef.current,
656
+ focusSearchInput: () => {
657
+ if (searchInputRef.current) searchInputRef.current.focus();
658
+ }
659
+ }), []);
660
+ const filteredOptions = useFilteredOptions(options, inputValue);
661
+ const isGrouped = useMemo(() => options.some(isOptionGroup), [options]);
662
+ const optionsWithSelectedFirstInGroups = useMemo(() => {
663
+ if (!isGrouped || values.length === 0 || stableOptionOrder) return options;
664
+ return options.map((item) => {
665
+ if (isOptionGroup(item)) {
666
+ const groupLeaves = flattenOptions(item.options);
667
+ return {
668
+ ...item,
669
+ options: groupLeaves.toSorted((a, b) => {
670
+ const aSelected = values.includes(a.value);
671
+ if (aSelected === values.includes(b.value)) return 0;
672
+ return aSelected ? -1 : 1;
673
+ })
674
+ };
675
+ }
676
+ return item;
677
+ });
678
+ }, [
679
+ options,
680
+ isGrouped,
681
+ values,
682
+ stableOptionOrder
683
+ ]);
684
+ const navigableItems = useMemo(() => {
685
+ const items = [];
686
+ if (isGrouped && values.length > 0) {
687
+ if (selectAll && filteredOptions.length > 0) items.push({
688
+ value: SELECT_ALL_VALUE,
689
+ label: "Select all"
690
+ });
691
+ for (const item of optionsWithSelectedFirstInGroups) if (isOptionGroup(item)) {
692
+ for (const opt of flattenOptions(item.options)) if (filteredOptions.some((f) => f.value === opt.value)) items.push(opt);
693
+ } else if (filteredOptions.some((f) => f.value === item.value)) items.push(item);
694
+ return items;
695
+ }
696
+ const orderedFiltered = !isGrouped && values.length > 0 && !stableOptionOrder ? filteredOptions.toSorted((a, b) => {
697
+ const aSelected = values.includes(a.value);
698
+ if (aSelected === values.includes(b.value)) return 0;
699
+ return aSelected ? -1 : 1;
700
+ }) : filteredOptions;
701
+ if (selectAll && orderedFiltered.length > 0) items.push({
702
+ value: SELECT_ALL_VALUE,
703
+ label: "Select all"
704
+ });
705
+ items.push(...orderedFiltered);
706
+ return items;
707
+ }, [
708
+ selectAll,
709
+ filteredOptions,
710
+ isGrouped,
711
+ values,
712
+ optionsWithSelectedFirstInGroups,
713
+ stableOptionOrder
714
+ ]);
715
+ const optionsToRender = useMemo(() => {
716
+ if (!isGrouped && values.length > 0) return navigableItems;
717
+ const hasSelectAll = selectAll && filteredOptions.length > 0 && navigableItems[0]?.value === SELECT_ALL_VALUE;
718
+ const baseOptions = isGrouped && values.length > 0 ? optionsWithSelectedFirstInGroups : options;
719
+ return hasSelectAll ? [navigableItems[0], ...baseOptions] : baseOptions;
720
+ }, [
721
+ isGrouped,
722
+ values,
723
+ navigableItems,
724
+ selectAll,
725
+ filteredOptions,
726
+ optionsWithSelectedFirstInGroups,
727
+ options
728
+ ]);
729
+ const navigableToVirtualRowRef = useRef(/* @__PURE__ */ new Map());
730
+ const virtualRows = useMemo(() => {
731
+ if (!virtualize) return [];
732
+ const map = /* @__PURE__ */ new Map();
733
+ const rows = buildVirtualRows(optionsToRender, navigableItems, map);
734
+ navigableToVirtualRowRef.current = map;
735
+ return rows;
736
+ }, [
737
+ optionsToRender,
738
+ navigableItems,
739
+ virtualize
740
+ ]);
741
+ const virtualizer = useVirtualizer({
742
+ count: virtualRows.length,
743
+ getScrollElement: () => scrollableListRef.current,
744
+ estimateSize: () => size === "sm" ? 24 : 32,
745
+ overscan: 5
746
+ });
747
+ const itemToString = useCallback((item) => {
748
+ return item ? item.label : "";
749
+ }, []);
750
+ const { addSelectedItem, getSelectedItemProps, getDropdownProps, removeSelectedItem, reset, setSelectedItems } = useMultipleSelection({
751
+ selectedItems,
752
+ onStateChange: ({ selectedItems: newSelectedItems, type }) => {
753
+ switch (type) {
754
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
755
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
756
+ case useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace:
757
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
758
+ case useMultipleSelection.stateChangeTypes.FunctionAddSelectedItem:
759
+ case useMultipleSelection.stateChangeTypes.FunctionSetSelectedItems:
760
+ if (onValuesChange && newSelectedItems) {
761
+ const newValues = newSelectedItems.map((item) => item.value);
762
+ onValuesChange?.(newValues);
763
+ }
764
+ break;
765
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
766
+ if (onValuesChange) onValuesChange([]);
767
+ break;
768
+ default: break;
769
+ }
770
+ }
771
+ });
772
+ const selectedState = useMemo(() => {
773
+ const counts = filteredOptions.reduce((acc, option) => {
774
+ if (values.includes(option.value)) acc.selected++;
775
+ else acc.notSelected++;
776
+ return acc;
777
+ }, {
778
+ selected: 0,
779
+ notSelected: 0
780
+ });
781
+ return {
782
+ allSelected: counts.selected === filteredOptions.length,
783
+ allNotSelected: counts.notSelected === filteredOptions.length,
784
+ indeterminate: counts.selected > 0 && counts.selected < filteredOptions.length
785
+ };
786
+ }, [values, filteredOptions]);
787
+ const handleSelectAllToggle = useCallback(() => {
788
+ if (selectedState.allSelected || selectedState.indeterminate) {
789
+ const visibleValues = filteredOptions.map((option) => option.value);
790
+ setSelectedItems(selectedItems.filter((item) => !visibleValues.includes(item.value)));
791
+ } else {
792
+ const newItems = filteredOptions.filter((option) => !values.includes(option.value));
793
+ setSelectedItems([...selectedItems, ...newItems]);
794
+ }
795
+ }, [
796
+ selectedState.allSelected,
797
+ selectedState.indeterminate,
798
+ filteredOptions,
799
+ selectedItems,
800
+ values,
801
+ setSelectedItems
802
+ ]);
803
+ const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, closeMenu, openMenu } = useCombobox({
804
+ items: navigableItems,
805
+ itemToString,
806
+ isOpen: embedded ? true : void 0,
807
+ selectedItem: null,
808
+ initialHighlightedIndex: 0,
809
+ defaultHighlightedIndex: 0,
810
+ onIsOpenChange({ isOpen: newIsOpen }) {
811
+ if (newIsOpen && inputValue !== "") setInputValue("");
812
+ },
813
+ onHighlightedIndexChange: ({ highlightedIndex, type }) => {
814
+ if (virtualize && type !== useCombobox.stateChangeTypes.MenuMouseLeave && highlightedIndex >= 0) {
815
+ const rowIndex = navigableToVirtualRowRef.current.get(highlightedIndex);
816
+ if (rowIndex != null) virtualizer.scrollToIndex(rowIndex, { align: "auto" });
817
+ }
818
+ },
819
+ onStateChange({ type, selectedItem: newSelectedItem, inputValue: newInputValue }) {
820
+ switch (type) {
821
+ case useCombobox.stateChangeTypes.InputChange:
822
+ setInputValue(newInputValue || "");
823
+ onInputChange?.(newInputValue || "");
824
+ break;
825
+ case useCombobox.stateChangeTypes.InputKeyDownEnter:
826
+ case useCombobox.stateChangeTypes.ItemClick:
827
+ if (newSelectedItem && newSelectedItem.value === SELECT_ALL_VALUE) {
828
+ handleSelectAllToggle();
829
+ break;
830
+ }
831
+ if (newSelectedItem) if (values.includes(newSelectedItem.value)) removeSelectedItem(newSelectedItem);
832
+ else addSelectedItem(newSelectedItem);
833
+ break;
834
+ default: break;
835
+ }
836
+ },
837
+ stateReducer(state, actionAndChanges) {
838
+ const { type, changes } = actionAndChanges;
839
+ switch (type) {
840
+ case useCombobox.stateChangeTypes.ItemClick:
841
+ case useCombobox.stateChangeTypes.InputKeyDownEnter: return {
842
+ ...changes,
843
+ isOpen: true,
844
+ inputValue: "",
845
+ highlightedIndex: state.highlightedIndex
846
+ };
847
+ case useCombobox.stateChangeTypes.InputBlur:
848
+ if (isOpen) return {
849
+ ...changes,
850
+ isOpen: true
851
+ };
852
+ return changes;
853
+ case useCombobox.stateChangeTypes.InputClick:
854
+ case useCombobox.stateChangeTypes.ToggleButtonClick: return changes;
855
+ default: return changes;
856
+ }
857
+ }
858
+ });
859
+ const renderOption = useCallback((option, currentIndex) => {
860
+ const isHighlighted = highlightedIndex === currentIndex;
861
+ const isSelected = values.includes(option.value);
862
+ if (option.value === SELECT_ALL_VALUE) return /* @__PURE__ */ jsx(StyledMenuItem$1, {
863
+ ...getItemProps({
864
+ item: option,
865
+ index: currentIndex
866
+ }),
867
+ focused: isHighlighted,
868
+ selected: false,
869
+ "aria-labelledby": `combobox-option-label-${currentIndex}`,
870
+ $size: size,
871
+ tabIndex: -1,
872
+ children: /* @__PURE__ */ jsxs(Stack, {
873
+ direction: "horizontal",
874
+ align: "center",
875
+ spacing: Spacing[2],
876
+ children: [/* @__PURE__ */ jsx(Checkbox, {
877
+ checked: selectedState.allSelected,
878
+ indeterminate: selectedState.indeterminate,
879
+ tabIndex: -1
880
+ }), /* @__PURE__ */ jsx(CheckboxLabel, {
881
+ id: `combobox-option-label-${currentIndex}`,
882
+ $size: size,
883
+ children: /* @__PURE__ */ jsx(OptionLabel, { children: option.label })
884
+ })]
885
+ })
886
+ }, "select-all");
887
+ return /* @__PURE__ */ jsx(StyledMenuItem$1, {
888
+ ...getItemProps({
889
+ item: option,
890
+ index: currentIndex,
891
+ "aria-selected": isSelected
892
+ }),
893
+ focused: isHighlighted,
894
+ selected: false,
895
+ "aria-labelledby": `combobox-option-label-${currentIndex}`,
896
+ $size: size,
897
+ tabIndex: -1,
898
+ children: /* @__PURE__ */ jsxs(Stack, {
899
+ direction: "horizontal",
900
+ align: "center",
901
+ spacing: Spacing[2],
902
+ children: [/* @__PURE__ */ jsx(Checkbox, {
903
+ checked: isSelected,
904
+ tabIndex: -1
905
+ }), /* @__PURE__ */ jsx(CheckboxLabel, {
906
+ id: `combobox-option-label-${currentIndex}`,
907
+ $size: size,
908
+ children: option.labelStickerVariant ? /* @__PURE__ */ jsx(Sticker, {
909
+ variant: option.labelStickerVariant,
910
+ children: option.label
911
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(OptionLabel, {
912
+ title: option.label,
913
+ $labelStyle: option.PLEASE_DO_NOT_USE_labelFontStyle,
914
+ children: option.label
915
+ }), option.description && /* @__PURE__ */ jsx(Description, {
916
+ title: option.description,
917
+ children: option.description
918
+ })] })
919
+ })]
920
+ })
921
+ }, `${option.value}-${currentIndex}`);
922
+ }, [
923
+ highlightedIndex,
924
+ values,
925
+ getItemProps,
926
+ size,
927
+ selectedState
928
+ ]);
929
+ const isMenuOpen = isOpen;
930
+ const handleKeyDown = useCallback((event) => {
931
+ if (event.key === "Enter" && !isMenuOpen) openMenu();
932
+ }, [isMenuOpen, openMenu]);
933
+ const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
934
+ useEffect(() => {
935
+ onOpenChange?.(isMenuOpen);
936
+ }, [isMenuOpen, onOpenChange]);
937
+ useEffect(() => {
938
+ if (isMenuOpen && navigableItems.length > 0) {
939
+ if (highlightedIndex === -1 || highlightedIndex >= navigableItems.length) setHighlightedIndex(0);
940
+ }
941
+ }, [
942
+ navigableItems,
943
+ isMenuOpen,
944
+ highlightedIndex,
945
+ setHighlightedIndex
946
+ ]);
947
+ const searchInputId = `${field.inputId}-search`;
948
+ useEffect(() => {
949
+ if (isMenuOpen && searchInputRef.current) searchInputRef.current.focus();
950
+ }, [isMenuOpen]);
951
+ const handleSearchInputKeyDown = useCallback((e) => {
952
+ if (e.key === "ArrowDown" && navigableItems.length > 0) {
953
+ e.preventDefault();
954
+ setHighlightedIndex(highlightedIndex === -1 ? 0 : (highlightedIndex + 1) % navigableItems.length);
955
+ }
956
+ if (e.key === "ArrowUp" && navigableItems.length > 0) {
957
+ e.preventDefault();
958
+ setHighlightedIndex(highlightedIndex === -1 ? navigableItems.length - 1 : (highlightedIndex - 1 + navigableItems.length) % navigableItems.length);
959
+ }
960
+ if (e.key === "Enter" && highlightedIndex >= 0 && navigableItems[highlightedIndex]) {
961
+ e.preventDefault();
962
+ const selectedItem = navigableItems[highlightedIndex];
963
+ if (selectedItem.value === SELECT_ALL_VALUE) {
964
+ handleSelectAllToggle();
965
+ return;
966
+ }
967
+ if (values.includes(selectedItem.value)) removeSelectedItem(selectedItem);
968
+ else addSelectedItem(selectedItem);
969
+ }
970
+ if (e.key === "Escape") {
971
+ closeMenu();
972
+ if (comboboxInputRef.current) comboboxInputRef.current.focus();
973
+ }
974
+ if (e.key === "Tab" && highlightedIndex >= 0 && navigableItems[highlightedIndex]) closeMenu();
975
+ }, [
976
+ navigableItems,
977
+ highlightedIndex,
978
+ setHighlightedIndex,
979
+ values,
980
+ addSelectedItem,
981
+ removeSelectedItem,
982
+ closeMenu,
983
+ comboboxInputRef,
984
+ handleSelectAllToggle
985
+ ]);
986
+ useOutsideClick({
987
+ ref: comboboxContainerRef,
988
+ onOutsideClick: useCallback((e) => {
989
+ if (!embedded && isMenuOpen && !e.target?.closest("#combobox-dropdown-portal-wrapper")) closeMenu();
990
+ }, [
991
+ embedded,
992
+ isMenuOpen,
993
+ closeMenu
994
+ ])
995
+ });
996
+ const externalTrigger = (() => {
997
+ if (embedded || trigger == null || !isValidElement(trigger)) return null;
998
+ const triggerProps = trigger.props;
999
+ return cloneElement(trigger, getToggleButtonProps({
1000
+ ...triggerProps,
1001
+ disabled: field.disabled || Boolean(triggerProps.disabled)
1002
+ }));
1003
+ })();
1004
+ const handleSearchInputBlur = useCallback((e) => {
1005
+ if (!isMenuOpen) return;
1006
+ const relatedTarget = e.relatedTarget;
1007
+ if (!embedded && (!relatedTarget || !comboboxContainerRef.current?.contains(relatedTarget))) closeMenu();
1008
+ }, [
1009
+ embedded,
1010
+ isMenuOpen,
1011
+ closeMenu
1012
+ ]);
1013
+ return /* @__PURE__ */ jsxs(Container, {
1014
+ ...props,
1015
+ ref: comboboxContainerRef,
1016
+ children: [embedded ? null : externalTrigger != null ? externalTrigger : /* @__PURE__ */ jsxs(InputContainer, { children: [
1017
+ /* @__PURE__ */ jsx(MultiSelectComboboxInput, {
1018
+ ...getInputProps(getDropdownProps({
1019
+ ...props,
1020
+ ref: comboboxInputRef,
1021
+ id: field.inputId,
1022
+ placeholder: selectedItems.length === 0 ? placeholder : "",
1023
+ disabled: field.disabled,
1024
+ "aria-label": ariaLabel,
1025
+ "aria-labelledby": labelId,
1026
+ "aria-describedby": [field.helperTextId, field.hasWarning ? field.warningTextId : null].filter(Boolean).join(" ") || void 0,
1027
+ "aria-errormessage": field.hasError ? field.errorTextId : void 0,
1028
+ "aria-invalid": field.hasError,
1029
+ preventKeyAction: isMenuOpen,
1030
+ onKeyDown: handleKeyDown
1031
+ })),
1032
+ size,
1033
+ $isOpen: isMenuOpen,
1034
+ hasWarning: field.hasWarning,
1035
+ hasError: field.hasError,
1036
+ value: ""
1037
+ }),
1038
+ truncate && selectedItems.length > 0 && /* @__PURE__ */ jsxs(HiddenMeasurementContainer, {
1039
+ "aria-hidden": "true",
1040
+ children: [selectedItems.map((item, index) => {
1041
+ return /* @__PURE__ */ jsx("div", {
1042
+ ref: (el) => measurementStickerRefs.current[index] = el,
1043
+ children: /* @__PURE__ */ jsx(Sticker, {
1044
+ variant: flatOptions.find((opt) => opt.value === item.value)?.labelStickerVariant || "grey",
1045
+ disabled: field.disabled,
1046
+ children: item.label
1047
+ })
1048
+ }, `measurement-${item.value}-${index}`);
1049
+ }), /* @__PURE__ */ jsx("div", {
1050
+ ref: measurementTruncatorRef,
1051
+ children: /* @__PURE__ */ jsxs(TruncatorSticker, {
1052
+ variant: "grey",
1053
+ disabled: field.disabled,
1054
+ children: ["+", selectedItems.length - visibleCount]
1055
+ })
1056
+ })]
1057
+ }),
1058
+ /* @__PURE__ */ jsx(SelectedItemsContainer, {
1059
+ $size: size,
1060
+ $truncate: truncate,
1061
+ ref: selectedItemsContainerRef,
1062
+ children: truncate ? /* @__PURE__ */ jsxs(TruncatedItemsWrapper, { children: [selectedItems.slice(0, visibleCount).map((item, index) => {
1063
+ const { ref: _ref, ...stickerProps } = getSelectedItemProps({
1064
+ selectedItem: item,
1065
+ index
1066
+ });
1067
+ const stickerVariant = flatOptions.find((opt) => opt.value === item.value)?.labelStickerVariant || "grey";
1068
+ return /* @__PURE__ */ jsx(TruncatedSticker, {
1069
+ ...stickerProps,
1070
+ variant: stickerVariant,
1071
+ disabled: field.disabled,
1072
+ $isOnlyItem: visibleCount === 1,
1073
+ children: item.label
1074
+ }, `selected-${item.value}-${index}`);
1075
+ }), visibleCount < selectedItems.length && /* @__PURE__ */ jsxs(TruncatorSticker, {
1076
+ variant: "grey",
1077
+ disabled: field.disabled,
1078
+ children: ["+", selectedItems.length - visibleCount]
1079
+ })] }) : selectedItems.map((item, index) => {
1080
+ const { ref, ...stickerProps } = getSelectedItemProps({
1081
+ selectedItem: item,
1082
+ index
1083
+ });
1084
+ const stickerVariant = flatOptions.find((opt) => opt.value === item.value)?.labelStickerVariant || "grey";
1085
+ return /* @__PURE__ */ jsx(Sticker, {
1086
+ ...stickerProps,
1087
+ variant: stickerVariant,
1088
+ onDismiss: (e) => {
1089
+ e.stopPropagation();
1090
+ removeSelectedItem(item);
1091
+ },
1092
+ dismissButtonProps: { tabIndex: -1 },
1093
+ disabled: field.disabled,
1094
+ tabIndex: -1,
1095
+ children: item.label
1096
+ }, `selected-${item.value}-${index}`);
1097
+ })
1098
+ }),
1099
+ selectedItems.length > 0 ? /* @__PURE__ */ jsx(CaretButton, {
1100
+ id: `${field.inputId}__clear-all`,
1101
+ onClick: reset,
1102
+ size,
1103
+ disabled: field.disabled,
1104
+ "aria-label": "Clear all selected items",
1105
+ children: /* @__PURE__ */ jsx(CircleXInverseIcon, {})
1106
+ }) : /* @__PURE__ */ jsx(CaretButton, {
1107
+ ...getToggleButtonProps({ ref: caretButtonRef }),
1108
+ size,
1109
+ disabled: field.disabled,
1110
+ "aria-label": `${isMenuOpen ? "Close" : "Open"} options menu`,
1111
+ "aria-haspopup": "listbox",
1112
+ children: /* @__PURE__ */ jsx(CaretDownIcon, {})
1113
+ })
1114
+ ] }), /* @__PURE__ */ jsx(DropdownPortalWrapper, {
1115
+ portal: embedded ? false : portal,
1116
+ children: /* @__PURE__ */ jsxs(DropdownContainer, {
1117
+ $isOpen: isMenuOpen,
1118
+ $portal: embedded ? false : portal,
1119
+ $embedded: embedded,
1120
+ $top: dropdownPosition.top,
1121
+ $left: dropdownPosition.left,
1122
+ $width: dropdownPosition.width,
1123
+ $minWidth: externalTrigger ? EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH$1 : void 0,
1124
+ ...getMenuProps(),
1125
+ "aria-multiselectable": "true",
1126
+ children: [isMenuOpen && /* @__PURE__ */ jsx(SearchInputContainer, {
1127
+ $embedded: embedded,
1128
+ children: /* @__PURE__ */ jsx(InputGroup, {
1129
+ leftIcon: embedded ? void 0 : /* @__PURE__ */ jsx(SearchIcon, {}),
1130
+ size,
1131
+ children: /* @__PURE__ */ jsx(SearchInput, {
1132
+ $embedded: embedded,
1133
+ id: searchInputId,
1134
+ ref: searchInputRef,
1135
+ placeholder: searchPlaceholder,
1136
+ value: inputValue,
1137
+ onChange: (e) => {
1138
+ setInputValue(e.target.value);
1139
+ onInputChange?.(e.target.value);
1140
+ },
1141
+ onKeyDown: handleSearchInputKeyDown,
1142
+ onBlur: handleSearchInputBlur,
1143
+ disabled: field.disabled,
1144
+ "aria-label": embedded ? "Search options" : ariaLabel ?? searchPlaceholder,
1145
+ size
1146
+ })
1147
+ })
1148
+ }), /* @__PURE__ */ jsx(MultiSelectScrollableMenuList, {
1149
+ $embedded: embedded,
1150
+ tabIndex: -1,
1151
+ ref: scrollableListRef,
1152
+ children: isMenuOpen && /* @__PURE__ */ jsx(Fragment, { children: isOptionsLoading ? /* @__PURE__ */ jsx(LoadingContainer, { children: /* @__PURE__ */ jsx(Spinner, { size: "md" }) }) : navigableItems.length > 0 ? renderOptionsWithGroups({
1153
+ options: optionsToRender,
1154
+ filteredOptions: navigableItems,
1155
+ renderOption,
1156
+ virtualizer: virtualize ? virtualizer : void 0,
1157
+ virtualRows: virtualize ? virtualRows : void 0
1158
+ }) : /* @__PURE__ */ jsx(EmptyState, {
1159
+ role: "status",
1160
+ "aria-live": "polite",
1161
+ size,
1162
+ children: emptyStateMessage
1163
+ }) })
1164
+ })]
1165
+ })
1166
+ })]
1167
+ });
1168
+ }
1169
+ const ComboboxMultiSelect = forwardRef(ComboboxMultiSelectComponent);
1170
+ //#endregion
1171
+ //#region components/Combobox/ComboboxSingleSelect.tsx
1172
+ const StyledMenuItem = styled(MenuItem)`
1173
+ display: flex;
1174
+ flex-direction: column;
1175
+ align-items: flex-start;
1176
+ gap: ${Spacing[1]};
1177
+ min-width: 0; /* Allow content to shrink below natural size */
1178
+ width: 100%; /* Ensure full width of dropdown */
1179
+ box-sizing: border-box;
1180
+
1181
+ /* Force all children to respect the container width */
1182
+ > * {
1183
+ width: 100%;
1184
+ min-width: 0;
1185
+ box-sizing: border-box;
1186
+ }
1187
+ `;
1188
+ const ParentMenuItem = styled(MenuItem)`
1189
+ ${IconContainer} {
1190
+ margin-right: 0;
1191
+ }
1192
+ `;
1193
+ const ParentChevron = styled.span`
1194
+ display: inline-flex;
1195
+ align-items: center;
1196
+ color: ${Color.BorderIconSecondary};
1197
+ `;
1198
+ const EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH = "240px";
1199
+ const SingleSelectScrollableMenuList = styled(ScrollableMenuList)`
1200
+ ${({ $embedded }) => $embedded && css`
1201
+ padding: 0;
1202
+ `}
1203
+ `;
1204
+ const BackRow = styled.button`
1205
+ display: flex;
1206
+ align-items: center;
1207
+ gap: ${({ $size }) => $size === "sm" ? Spacing[1] : Spacing[2]};
1208
+ width: 100%;
1209
+ padding: ${({ $size }) => $size === "sm" ? `${Spacing[1]} ${Spacing[2]}` : Spacing[2]};
1210
+ background: transparent;
1211
+ border: 0;
1212
+ cursor: pointer;
1213
+ color: ${Color.TextPrimary};
1214
+ ${({ $size }) => $size === "sm" ? Typography.TextSmall : Typography.TextMedium};
1215
+
1216
+ svg {
1217
+ color: ${Color.BorderIconPrimary};
1218
+ }
1219
+ `;
1220
+ const StickerDisplay = styled(Sticker)`
1221
+ position: absolute;
1222
+ left: ${Spacing[2]};
1223
+ top: 50%;
1224
+ transform: translateY(-50%);
1225
+ pointer-events: none;
1226
+ z-index: 1;
1227
+ `;
1228
+ const StickerComboboxInput = styled(ComboboxInput)`
1229
+ /* Hide text when sticker is shown */
1230
+ color: transparent;
1231
+ caret-color: transparent;
1232
+ `;
1233
+ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading, value, onChange, onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, id, labelId, "aria-label": ariaLabel, onOpenChange, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, ...props }, ref) {
1234
+ const field = useFormField({
1235
+ hasWarning,
1236
+ hasError,
1237
+ disabled,
1238
+ inputId: id
1239
+ });
1240
+ const [inputValue, setInputValue] = useState("");
1241
+ const [isDropdownOpen, setIsDropdownOpen] = useState(false);
1242
+ const [navigationPath, setNavigationPath] = useState([]);
1243
+ const comboboxInputRef = useRef(null);
1244
+ const internalContainerRef = useRef(null);
1245
+ const pendingDescentRef = useRef(null);
1246
+ const portalContainerRef = externalPortalContainerRef || internalContainerRef;
1247
+ useImperativeHandle(ref, () => ({ ...comboboxInputRef.current }), []);
1248
+ const isSearching = inputValue.trim() !== "";
1249
+ const nestedOptions = useMemo(() => getOptionsAtPath(options, navigationPath), [options, navigationPath]);
1250
+ const hasNestedGroups = useMemo(() => containsNestedGroup(options), [options]);
1251
+ const navigableItems = useMemo(() => getNavigableItemsAtLevel(nestedOptions), [nestedOptions]);
1252
+ const searchableLeaves = useMemo(() => {
1253
+ if (!isSearching || !hasNestedGroups) return [];
1254
+ return flattenLeafOptions(options).map(({ option }) => option);
1255
+ }, [
1256
+ options,
1257
+ isSearching,
1258
+ hasNestedGroups
1259
+ ]);
1260
+ const searchableLeafFuse = useMemo(() => {
1261
+ if (!isSearching || !hasNestedGroups) return null;
1262
+ return new Fuse(flattenLeafOptions(options).map(({ option, breadcrumb }) => ({
1263
+ option,
1264
+ label: String(option.label),
1265
+ description: option.description,
1266
+ ancestors: breadcrumb.join(" ")
1267
+ })), {
1268
+ shouldSort: false,
1269
+ threshold: 0,
1270
+ ignoreLocation: true,
1271
+ minMatchCharLength: 1,
1272
+ keys: [
1273
+ "label",
1274
+ "description",
1275
+ "ancestors"
1276
+ ]
1277
+ });
1278
+ }, [
1279
+ options,
1280
+ isSearching,
1281
+ hasNestedGroups
1282
+ ]);
1283
+ const renderSource = isSearching ? hasNestedGroups ? searchableLeaves : options : nestedOptions;
1284
+ const standardFilteredOptions = useFilteredOptions(renderSource, inputValue);
1285
+ const filteredOptions = useMemo(() => {
1286
+ if (!isSearching || !hasNestedGroups || searchableLeafFuse == null) return standardFilteredOptions;
1287
+ if (inputValue === "") return searchableLeaves;
1288
+ return Array.from(new Set(searchableLeafFuse.search(inputValue).map(({ item }) => item.option)).values());
1289
+ }, [
1290
+ isSearching,
1291
+ hasNestedGroups,
1292
+ searchableLeafFuse,
1293
+ inputValue,
1294
+ searchableLeaves,
1295
+ standardFilteredOptions
1296
+ ]);
1297
+ const downshiftItems = useMemo(() => {
1298
+ if (isSearching) return filteredOptions.map((option) => ({
1299
+ kind: "leaf",
1300
+ option
1301
+ }));
1302
+ return navigableItems.filter((item) => item.kind === "group" || filteredOptions.some((f) => f.value === item.option.value));
1303
+ }, [
1304
+ isSearching,
1305
+ filteredOptions,
1306
+ navigableItems
1307
+ ]);
1308
+ const allLeaves = useMemo(() => flattenLeafOptions(options), [options]);
1309
+ const flatOptionsForFallback = useMemo(() => flattenOptions(options), [options]);
1310
+ const selectedOption = allLeaves.find(({ option }) => option.value === value)?.option ?? flatOptionsForFallback.find((option) => option.value === value) ?? null;
1311
+ const selectedNavigableItem = useMemo(() => selectedOption ? {
1312
+ kind: "leaf",
1313
+ option: selectedOption
1314
+ } : null, [selectedOption?.value, selectedOption?.label]);
1315
+ const itemToString = useCallback((item) => {
1316
+ if (!item) return "";
1317
+ return item.kind === "leaf" ? item.option.label : item.group.label;
1318
+ }, []);
1319
+ const handleAscend = useCallback(() => {
1320
+ setNavigationPath((prev) => prev.length > 0 ? prev.slice(0, -1) : prev);
1321
+ setInputValue("");
1322
+ }, []);
1323
+ const handleDescend = useCallback((groupLabel) => {
1324
+ setNavigationPath((prev) => [...prev, groupLabel]);
1325
+ setInputValue("");
1326
+ }, []);
1327
+ const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, openMenu } = useCombobox({
1328
+ items: downshiftItems,
1329
+ itemToString,
1330
+ isOpen: embedded ? true : void 0,
1331
+ selectedItem: isDropdownOpen ? null : selectedNavigableItem,
1332
+ inputValue,
1333
+ onInputValueChange({ inputValue: newInputValue }) {
1334
+ if (newInputValue === "" && !embedded && trigger == null) onChange?.(null);
1335
+ setInputValue(newInputValue || "");
1336
+ onInputChange?.(newInputValue || "");
1337
+ },
1338
+ onIsOpenChange({ isOpen: newIsOpen }) {
1339
+ setIsDropdownOpen(newIsOpen);
1340
+ if (newIsOpen) {
1341
+ if (selectedOption || value && inputValue === flatOptionsForFallback.find((opt) => opt.value === value)?.label) setInputValue("");
1342
+ } else setInputValue(selectedOption?.label || "");
1343
+ },
1344
+ onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {
1345
+ if (newSelectedItem == null || newSelectedItem.kind !== "leaf") return;
1346
+ const leaf = newSelectedItem.option;
1347
+ onChange?.(leaf.value);
1348
+ setInputValue(leaf.label);
1349
+ },
1350
+ stateReducer(state, actionAndChanges) {
1351
+ const { changes, type } = actionAndChanges;
1352
+ switch (type) {
1353
+ case useCombobox.stateChangeTypes.InputBlur: return {
1354
+ ...changes,
1355
+ selectedItem: state.selectedItem
1356
+ };
1357
+ case useCombobox.stateChangeTypes.ItemClick:
1358
+ case useCombobox.stateChangeTypes.InputKeyDownEnter: {
1359
+ const candidate = changes.selectedItem;
1360
+ if (candidate && candidate.kind === "group") {
1361
+ pendingDescentRef.current = candidate.group.label;
1362
+ return {
1363
+ ...changes,
1364
+ selectedItem: state.selectedItem,
1365
+ isOpen: true
1366
+ };
1367
+ }
1368
+ return changes;
1369
+ }
1370
+ default: return changes;
1371
+ }
1372
+ }
1373
+ });
1374
+ useEffect(() => {
1375
+ if (pendingDescentRef.current != null) {
1376
+ const target = pendingDescentRef.current;
1377
+ pendingDescentRef.current = null;
1378
+ handleDescend(target);
1379
+ }
1380
+ });
1381
+ useEffect(() => {
1382
+ if (!isOpen && !embedded && navigationPath.length > 0) setNavigationPath([]);
1383
+ }, [
1384
+ embedded,
1385
+ isOpen,
1386
+ navigationPath.length
1387
+ ]);
1388
+ const renderLeaf = useCallback((option, currentIndex) => {
1389
+ const isHighlighted = highlightedIndex === currentIndex;
1390
+ const isSelected = selectedOption?.value === option.value;
1391
+ const itemProps = getItemProps({
1392
+ item: {
1393
+ kind: "leaf",
1394
+ option
1395
+ },
1396
+ index: currentIndex,
1397
+ "aria-selected": isSelected
1398
+ });
1399
+ const labelContent = option.labelStickerVariant ? /* @__PURE__ */ jsx(Sticker, {
1400
+ variant: option.labelStickerVariant,
1401
+ children: option.label
1402
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(OptionLabel, {
1403
+ title: option.label,
1404
+ $labelStyle: option.PLEASE_DO_NOT_USE_labelFontStyle,
1405
+ children: option.label
1406
+ }), option.description && /* @__PURE__ */ jsx(Description, {
1407
+ title: option.description,
1408
+ children: option.description
1409
+ })] });
1410
+ return /* @__PURE__ */ jsx(StyledMenuItem, {
1411
+ ...itemProps,
1412
+ focused: isHighlighted,
1413
+ selected: isSelected,
1414
+ size,
1415
+ tabIndex: -1,
1416
+ children: labelContent
1417
+ }, `leaf-${String(option.value)}-${currentIndex}`);
1418
+ }, [
1419
+ highlightedIndex,
1420
+ selectedOption,
1421
+ getItemProps,
1422
+ size
1423
+ ]);
1424
+ const renderNestedGroupRow = useCallback((group, currentIndex) => {
1425
+ const isHighlighted = highlightedIndex === currentIndex;
1426
+ return /* @__PURE__ */ jsx(ParentMenuItem, {
1427
+ ...getItemProps({
1428
+ item: {
1429
+ kind: "group",
1430
+ group
1431
+ },
1432
+ index: currentIndex
1433
+ }),
1434
+ "aria-haspopup": "menu",
1435
+ focused: isHighlighted,
1436
+ size,
1437
+ tabIndex: -1,
1438
+ stretchLabel: true,
1439
+ suffixIcon: /* @__PURE__ */ jsx(ParentChevron, {
1440
+ "aria-hidden": "true",
1441
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
1442
+ }),
1443
+ children: /* @__PURE__ */ jsx(OptionLabel, {
1444
+ title: group.label,
1445
+ children: group.label
1446
+ })
1447
+ }, `group-${group.label}-${currentIndex}`);
1448
+ }, [
1449
+ highlightedIndex,
1450
+ getItemProps,
1451
+ size
1452
+ ]);
1453
+ const renderNestedLevel = useCallback((items) => {
1454
+ let navIndex = -1;
1455
+ const walk = (node, key) => {
1456
+ if (isOptionGroup(node)) {
1457
+ if (node.nested) {
1458
+ if (!downshiftItems.some((i) => i.kind === "group" && i.group === node)) return null;
1459
+ navIndex++;
1460
+ return /* @__PURE__ */ jsx(Fragment$1, { children: renderNestedGroupRow(node, navIndex) }, key);
1461
+ }
1462
+ const childNodes = [];
1463
+ for (let i = 0; i < node.options.length; i++) {
1464
+ const rendered = walk(node.options[i], `${key}-${i}`);
1465
+ if (rendered != null) childNodes.push(rendered);
1466
+ }
1467
+ if (childNodes.length === 0) return null;
1468
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(MenuHeading, { children: node.label }), childNodes] }, key);
1469
+ }
1470
+ if (!downshiftItems.some((i) => i.kind === "leaf" && i.option === node)) return null;
1471
+ navIndex++;
1472
+ return renderLeaf(node, navIndex);
1473
+ };
1474
+ return items.map((item, idx) => walk(item, `item-${idx}`));
1475
+ }, [
1476
+ downshiftItems,
1477
+ renderLeaf,
1478
+ renderNestedGroupRow
1479
+ ]);
1480
+ const renderOption = useCallback((option, currentIndex) => renderLeaf(option, currentIndex), [renderLeaf]);
1481
+ const isMenuOpen = isOpen;
1482
+ const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
1483
+ const handleKeyDown = useCallback((event) => {
1484
+ if (event.key === "Enter" && !isMenuOpen) {
1485
+ openMenu();
1486
+ return;
1487
+ }
1488
+ if (!isMenuOpen || isSearching) return;
1489
+ if (event.key === "ArrowRight") {
1490
+ const highlighted = downshiftItems[highlightedIndex];
1491
+ if (highlighted && highlighted.kind === "group") {
1492
+ event.preventDefault();
1493
+ handleDescend(highlighted.group.label);
1494
+ }
1495
+ return;
1496
+ }
1497
+ if (event.key === "ArrowLeft" && navigationPath.length > 0) {
1498
+ const input = event.currentTarget;
1499
+ if ((input.selectionStart ?? 0) === 0 && (input.selectionEnd ?? 0) === 0) {
1500
+ event.preventDefault();
1501
+ handleAscend();
1502
+ }
1503
+ }
1504
+ }, [
1505
+ isMenuOpen,
1506
+ isSearching,
1507
+ downshiftItems,
1508
+ highlightedIndex,
1509
+ navigationPath.length,
1510
+ openMenu,
1511
+ handleDescend,
1512
+ handleAscend
1513
+ ]);
1514
+ useEffect(() => {
1515
+ onOpenChange?.(isMenuOpen);
1516
+ }, [isMenuOpen, onOpenChange]);
1517
+ useEffect(() => {
1518
+ if (!isMenuOpen) setInputValue(selectedOption?.label || "");
1519
+ }, [selectedOption, isMenuOpen]);
1520
+ const selectedLabel = selectedOption?.label || "";
1521
+ useEffect(() => {
1522
+ if (embedded) setInputValue(selectedLabel);
1523
+ }, [selectedLabel, embedded]);
1524
+ useEffect(() => {
1525
+ if (isMenuOpen && downshiftItems.length > 0) {
1526
+ if (highlightedIndex === -1 || highlightedIndex >= downshiftItems.length) setHighlightedIndex(0);
1527
+ }
1528
+ }, [
1529
+ downshiftItems,
1530
+ isMenuOpen,
1531
+ highlightedIndex,
1532
+ setHighlightedIndex
1533
+ ]);
1534
+ const displayValue = isMenuOpen ? inputValue : selectedOption?.label || "";
1535
+ const hasSticker = !isMenuOpen && selectedOption?.labelStickerVariant;
1536
+ const InputComponent = hasSticker ? StickerComboboxInput : ComboboxInput;
1537
+ const showBackRow = isMenuOpen && navigationPath.length > 0 && !isSearching;
1538
+ const externalTrigger = (() => {
1539
+ if (embedded || trigger == null || !isValidElement(trigger)) return null;
1540
+ const triggerProps = trigger.props;
1541
+ return cloneElement(trigger, getToggleButtonProps({
1542
+ ...triggerProps,
1543
+ disabled: field.disabled || Boolean(triggerProps.disabled)
1544
+ }));
1545
+ })();
1546
+ const searchInputProps = getInputProps({
1547
+ ref: comboboxInputRef,
1548
+ id: field.inputId,
1549
+ placeholder: "Search…",
1550
+ disabled: field.disabled,
1551
+ "aria-label": embedded ? "Search options" : ariaLabel ?? "Search options",
1552
+ "aria-labelledby": embedded ? void 0 : labelId,
1553
+ "aria-describedby": [field.helperTextId, field.hasWarning ? field.warningTextId : null].filter(Boolean).join(" ") || void 0,
1554
+ "aria-errormessage": field.hasError ? field.errorTextId : void 0,
1555
+ "aria-invalid": field.hasError,
1556
+ onKeyDown: handleKeyDown
1557
+ });
1558
+ return /* @__PURE__ */ jsxs(Container, {
1559
+ ...props,
1560
+ ref: internalContainerRef,
1561
+ children: [embedded ? null : externalTrigger != null ? externalTrigger : /* @__PURE__ */ jsxs(InputContainer, { children: [
1562
+ hasSticker && /* @__PURE__ */ jsx(StickerDisplay, {
1563
+ variant: selectedOption.labelStickerVariant,
1564
+ children: selectedOption.label
1565
+ }),
1566
+ /* @__PURE__ */ jsx(InputComponent, {
1567
+ ...getInputProps({
1568
+ ...props,
1569
+ ref: comboboxInputRef,
1570
+ id: field.inputId,
1571
+ placeholder,
1572
+ disabled: field.disabled,
1573
+ "aria-label": ariaLabel,
1574
+ "aria-labelledby": labelId,
1575
+ "aria-describedby": [field.helperTextId, field.hasWarning ? field.warningTextId : null].filter(Boolean).join(" ") || void 0,
1576
+ "aria-errormessage": field.hasError ? field.errorTextId : void 0,
1577
+ "aria-invalid": field.hasError,
1578
+ onKeyDown: handleKeyDown
1579
+ }),
1580
+ size,
1581
+ $isOpen: isMenuOpen,
1582
+ hasWarning: field.hasWarning,
1583
+ hasError: field.hasError,
1584
+ value: displayValue,
1585
+ $selectedItemStyle: selectedOption?.PLEASE_DO_NOT_USE_labelFontStyle
1586
+ }),
1587
+ /* @__PURE__ */ jsx(CaretButton, {
1588
+ ...getToggleButtonProps(),
1589
+ size,
1590
+ disabled: field.disabled,
1591
+ "aria-label": `${isMenuOpen ? "Close" : "Open"} options menu`,
1592
+ "aria-haspopup": "listbox",
1593
+ children: /* @__PURE__ */ jsx(CaretDownIcon, {})
1594
+ })
1595
+ ] }), /* @__PURE__ */ jsx(DropdownPortalWrapper, {
1596
+ portal: embedded ? false : portal,
1597
+ children: /* @__PURE__ */ jsxs(DropdownContainer, {
1598
+ $isOpen: isMenuOpen,
1599
+ $portal: embedded ? false : portal,
1600
+ $embedded: embedded,
1601
+ $top: dropdownPosition.top,
1602
+ $left: dropdownPosition.left,
1603
+ $width: dropdownPosition.width,
1604
+ $minWidth: externalTrigger ? EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH : void 0,
1605
+ ...getMenuProps(),
1606
+ children: [(externalTrigger || embedded) && /* @__PURE__ */ jsx(SearchInputContainer, {
1607
+ $embedded: embedded,
1608
+ children: /* @__PURE__ */ jsx(InputGroup, {
1609
+ leftIcon: embedded ? void 0 : /* @__PURE__ */ jsx(SearchIcon, {}),
1610
+ size,
1611
+ children: /* @__PURE__ */ jsx(SearchInput, {
1612
+ $embedded: embedded,
1613
+ ...searchInputProps,
1614
+ size,
1615
+ hasWarning: field.hasWarning,
1616
+ hasError: field.hasError,
1617
+ value: inputValue,
1618
+ autoComplete: "off"
1619
+ })
1620
+ })
1621
+ }), /* @__PURE__ */ jsx(SingleSelectScrollableMenuList, {
1622
+ $embedded: embedded,
1623
+ tabIndex: -1,
1624
+ children: isMenuOpen && /* @__PURE__ */ jsxs(Fragment, { children: [showBackRow && /* @__PURE__ */ jsxs(BackRow, {
1625
+ type: "button",
1626
+ tabIndex: -1,
1627
+ onMouseDown: (event) => {
1628
+ event.preventDefault();
1629
+ handleAscend();
1630
+ },
1631
+ onClick: (event) => {
1632
+ if (event.detail === 0) handleAscend();
1633
+ },
1634
+ "aria-label": "Back to previous menu",
1635
+ $size: size,
1636
+ children: [/* @__PURE__ */ jsx(ArrowLeftIcon, {
1637
+ "aria-hidden": "true",
1638
+ size: size === "sm" ? 12 : 16
1639
+ }), /* @__PURE__ */ jsx("span", { children: "Back" })]
1640
+ }), isOptionsLoading ? /* @__PURE__ */ jsx(LoadingContainer, { children: /* @__PURE__ */ jsx(Spinner, { size: "md" }) }) : downshiftItems.length > 0 ? hasNestedGroups && !isSearching ? renderNestedLevel(nestedOptions) : renderOptionsWithGroups({
1641
+ options: renderSource,
1642
+ filteredOptions,
1643
+ renderOption
1644
+ }) : /* @__PURE__ */ jsx(EmptyState, {
1645
+ role: "status",
1646
+ "aria-live": "polite",
1647
+ size,
1648
+ children: emptyStateMessage
1649
+ })] })
1650
+ })]
1651
+ })
1652
+ })]
1653
+ });
1654
+ }
1655
+ const ComboboxSingleSelect = forwardRef(ComboboxSingleSelectComponent);
1656
+ //#endregion
1657
+ //#region components/Combobox/Combobox.tsx
1658
+ function ComboboxComponent(props, ref) {
1659
+ if (props.multiple) return /* @__PURE__ */ jsx(ComboboxMultiSelect, {
1660
+ ref,
1661
+ ...props
1662
+ });
1663
+ else return /* @__PURE__ */ jsx(ComboboxSingleSelect, {
1664
+ ref,
1665
+ ...props
1666
+ });
1667
+ }
1668
+ const Combobox = forwardRef(ComboboxComponent);
1669
+ //#endregion
1670
+ export { CaretButton as n, flattenOptions as r, Combobox as t };
1671
+
1672
+ //# sourceMappingURL=Combobox-B_-swcix.mjs.map