@commercetools/nimbus 2.2.0 → 2.3.1

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 (561) hide show
  1. package/dist/chunks/{Button-BjcDZ5eb.es.js → Button-CmpJG0ec.es.js} +7 -7
  2. package/dist/chunks/{Button-BjcDZ5eb.es.js.map → Button-CmpJG0ec.es.js.map} +1 -1
  3. package/dist/chunks/{CollectionBuilder-BOe312C_.es.js → CollectionBuilder-DYW6tbzU.es.js} +2 -2
  4. package/dist/chunks/{CollectionBuilder-BOe312C_.es.js.map → CollectionBuilder-DYW6tbzU.es.js.map} +1 -1
  5. package/dist/chunks/{DateField-DCWy1Ysp.es.js → DateField-D4hq_06Z.es.js} +21 -21
  6. package/dist/chunks/{DateField-DCWy1Ysp.es.js.map → DateField-D4hq_06Z.es.js.map} +1 -1
  7. package/dist/chunks/{DatePicker-CL72jbDo.es.js → DatePicker-BiUqIBOt.es.js} +17 -17
  8. package/dist/chunks/{DatePicker-CL72jbDo.es.js.map → DatePicker-BiUqIBOt.es.js.map} +1 -1
  9. package/dist/chunks/{Dialog-B0BQfdQa.es.js → Dialog-C3fAbDNn.es.js} +24 -24
  10. package/dist/chunks/{Dialog-B0BQfdQa.es.js.map → Dialog-C3fAbDNn.es.js.map} +1 -1
  11. package/dist/chunks/{FocusScope-CqEZq7sr.es.js → FocusScope-bj_mamFe.es.js} +36 -36
  12. package/dist/chunks/{FocusScope-CqEZq7sr.es.js.map → FocusScope-bj_mamFe.es.js.map} +1 -1
  13. package/dist/chunks/{Group-BQc9LuMT.es.js → Group-C9jsb9_m.es.js} +8 -8
  14. package/dist/chunks/{Group-BQc9LuMT.es.js.map → Group-C9jsb9_m.es.js.map} +1 -1
  15. package/dist/chunks/{Header-CiYtrnTw.es.js → Header-Dc_tzDs3.es.js} +5 -5
  16. package/dist/chunks/{Header-CiYtrnTw.es.js.map → Header-Dc_tzDs3.es.js.map} +1 -1
  17. package/dist/chunks/{Heading-BMsylHxq.es.js → Heading-YOwfzTQe.es.js} +14 -14
  18. package/dist/chunks/{Heading-BMsylHxq.es.js.map → Heading-YOwfzTQe.es.js.map} +1 -1
  19. package/dist/chunks/{Input-Cmg08oRP.es.js → Input-aKSXZBAh.es.js} +5 -5
  20. package/dist/chunks/{Input-Cmg08oRP.es.js.map → Input-aKSXZBAh.es.js.map} +1 -1
  21. package/dist/chunks/{Label-DIseLESi.es.js → Label-Bu5lTMzy.es.js} +2 -2
  22. package/dist/chunks/{Label-DIseLESi.es.js.map → Label-Bu5lTMzy.es.js.map} +1 -1
  23. package/dist/chunks/{ListBox-RrHJjnuq.es.js → ListBox-CYNLUQ3a.es.js} +15 -15
  24. package/dist/chunks/{ListBox-RrHJjnuq.es.js.map → ListBox-CYNLUQ3a.es.js.map} +1 -1
  25. package/dist/chunks/{Modal-K4JEy19g.es.js → Modal-DJG9WuG4.es.js} +7 -7
  26. package/dist/chunks/{Modal-K4JEy19g.es.js.map → Modal-DJG9WuG4.es.js.map} +1 -1
  27. package/dist/chunks/{OverlayArrow-BIjbCSXk.es.js → OverlayArrow-qm-lnjhS.es.js} +2 -2
  28. package/dist/chunks/{OverlayArrow-BIjbCSXk.es.js.map → OverlayArrow-qm-lnjhS.es.js.map} +1 -1
  29. package/dist/chunks/{ProgressBar-Dm2Ge45l.es.js → ProgressBar-DogfCeuX.es.js} +5 -5
  30. package/dist/chunks/{ProgressBar-Dm2Ge45l.es.js.map → ProgressBar-DogfCeuX.es.js.map} +1 -1
  31. package/dist/chunks/{SelectionManager-CX9btso_.es.js → SelectionManager-LP-e3_n1.es.js} +10 -10
  32. package/dist/chunks/{SelectionManager-CX9btso_.es.js.map → SelectionManager-LP-e3_n1.es.js.map} +1 -1
  33. package/dist/chunks/{Separator-x6wk4JUe.es.js → Separator-dJgzu8hU.es.js} +4 -4
  34. package/dist/chunks/{Separator-x6wk4JUe.es.js.map → Separator-dJgzu8hU.es.js.map} +1 -1
  35. package/dist/chunks/{ToggleButton-BqW-X6iJ.es.js → ToggleButton-B-feHlsu.es.js} +7 -7
  36. package/dist/chunks/{ToggleButton-BqW-X6iJ.es.js.map → ToggleButton-B-feHlsu.es.js.map} +1 -1
  37. package/dist/chunks/{VisuallyHidden-BLRzeMsq.es.js → VisuallyHidden-BIA5VRNP.es.js} +3 -3
  38. package/dist/chunks/{VisuallyHidden-BLRzeMsq.es.js.map → VisuallyHidden-BIA5VRNP.es.js.map} +1 -1
  39. package/dist/chunks/{accordion-CVpg-FdJ.cjs.js → accordion-W2xqGUed.cjs.js} +2 -2
  40. package/dist/chunks/{accordion-CVpg-FdJ.cjs.js.map → accordion-W2xqGUed.cjs.js.map} +1 -1
  41. package/dist/chunks/{accordion-Dh0RVlNx.es.js → accordion-rScmyg3S.es.js} +2 -2
  42. package/dist/chunks/{accordion-Dh0RVlNx.es.js.map → accordion-rScmyg3S.es.js.map} +1 -1
  43. package/dist/chunks/{accordion.content-GGayEeqD.es.js → accordion.content-9ii6Isyh.es.js} +33 -32
  44. package/dist/chunks/{accordion.content-GGayEeqD.es.js.map → accordion.content-9ii6Isyh.es.js.map} +1 -1
  45. package/dist/chunks/accordion.content-Ca78ZBHt.cjs.js +2 -0
  46. package/dist/chunks/{accordion.content-Cqet9SQ-.cjs.js.map → accordion.content-Ca78ZBHt.cjs.js.map} +1 -1
  47. package/dist/chunks/{alert-DCgWOaY2.es.js → alert-292BzLRA.es.js} +2 -2
  48. package/dist/chunks/{alert-DCgWOaY2.es.js.map → alert-292BzLRA.es.js.map} +1 -1
  49. package/dist/chunks/{alert-pPmN9CXZ.cjs.js → alert-DnESjVYR.cjs.js} +2 -2
  50. package/dist/chunks/{alert-pPmN9CXZ.cjs.js.map → alert-DnESjVYR.cjs.js.map} +1 -1
  51. package/dist/chunks/badge-DUiqk6w9.es.js +17 -0
  52. package/dist/chunks/{badge-CgYpum7D.es.js.map → badge-DUiqk6w9.es.js.map} +1 -1
  53. package/dist/chunks/{button-BR4fvcmi.cjs.js → button-BYuPX7Oa.cjs.js} +2 -2
  54. package/dist/chunks/{button-BR4fvcmi.cjs.js.map → button-BYuPX7Oa.cjs.js.map} +1 -1
  55. package/dist/chunks/{button-BEJnxXsL.es.js → button-BwnDZDxC.es.js} +6 -6
  56. package/dist/chunks/{button-BEJnxXsL.es.js.map → button-BwnDZDxC.es.js.map} +1 -1
  57. package/dist/chunks/{calendar-lSoXK-yt.es.js → calendar-BXzL7PB5.es.js} +13 -13
  58. package/dist/chunks/{calendar-lSoXK-yt.es.js.map → calendar-BXzL7PB5.es.js.map} +1 -1
  59. package/dist/chunks/calendar-hlWmLdWT.cjs.js +2 -0
  60. package/dist/chunks/{calendar-B01Vti5k.cjs.js.map → calendar-hlWmLdWT.cjs.js.map} +1 -1
  61. package/dist/chunks/{card-Bk3xHlo2.cjs.js → card-BXy28CJn.cjs.js} +2 -2
  62. package/dist/chunks/{card-Bk3xHlo2.cjs.js.map → card-BXy28CJn.cjs.js.map} +1 -1
  63. package/dist/chunks/{card-q5i119kB.es.js → card-DufueR8q.es.js} +2 -2
  64. package/dist/chunks/{card-q5i119kB.es.js.map → card-DufueR8q.es.js.map} +1 -1
  65. package/dist/chunks/{checkbox-BJANm94D.cjs.js → checkbox-BDAugCSm.cjs.js} +2 -2
  66. package/dist/chunks/{checkbox-BJANm94D.cjs.js.map → checkbox-BDAugCSm.cjs.js.map} +1 -1
  67. package/dist/chunks/{checkbox-CputcCVr.es.js → checkbox-DyjLPpNB.es.js} +10 -10
  68. package/dist/chunks/{checkbox-CputcCVr.es.js.map → checkbox-DyjLPpNB.es.js.map} +1 -1
  69. package/dist/chunks/{collapsible-motion-Biq0QGUr.cjs.js → collapsible-motion-CogDY_t9.cjs.js} +2 -2
  70. package/dist/chunks/{collapsible-motion-Biq0QGUr.cjs.js.map → collapsible-motion-CogDY_t9.cjs.js.map} +1 -1
  71. package/dist/chunks/{collapsible-motion-DvtUDuxb.es.js → collapsible-motion-OPkHQog1.es.js} +5 -5
  72. package/dist/chunks/{collapsible-motion-DvtUDuxb.es.js.map → collapsible-motion-OPkHQog1.es.js.map} +1 -1
  73. package/dist/chunks/{combobox-vjauyzlS.es.js → combobox-C_mvoNgT.es.js} +367 -355
  74. package/dist/chunks/combobox-C_mvoNgT.es.js.map +1 -0
  75. package/dist/chunks/combobox-DneI7nqJ.cjs.js +2 -0
  76. package/dist/chunks/combobox-DneI7nqJ.cjs.js.map +1 -0
  77. package/dist/chunks/data-table-BhxeFbKo.cjs.js +2 -0
  78. package/dist/chunks/{data-table-CBZLbe9h.cjs.js.map → data-table-BhxeFbKo.cjs.js.map} +1 -1
  79. package/dist/chunks/{data-table-DA4SdIgU.es.js → data-table-zA32nJuv.es.js} +972 -952
  80. package/dist/chunks/{data-table-DA4SdIgU.es.js.map → data-table-zA32nJuv.es.js.map} +1 -1
  81. package/dist/chunks/{date-input-DkYcGwBy.cjs.js → date-input-CGCdF-Ci.cjs.js} +2 -2
  82. package/dist/chunks/{date-input-DkYcGwBy.cjs.js.map → date-input-CGCdF-Ci.cjs.js.map} +1 -1
  83. package/dist/chunks/{date-input-Cd9q4qBj.es.js → date-input-CkxW6Dwe.es.js} +4 -4
  84. package/dist/chunks/{date-input-Cd9q4qBj.es.js.map → date-input-CkxW6Dwe.es.js.map} +1 -1
  85. package/dist/chunks/date-picker-CKiTw4k0.cjs.js +2 -0
  86. package/dist/chunks/{date-picker-DQ5IZcRe.cjs.js.map → date-picker-CKiTw4k0.cjs.js.map} +1 -1
  87. package/dist/chunks/{date-picker-B8VVNXU3.es.js → date-picker-oben2gT5.es.js} +19 -19
  88. package/dist/chunks/{date-picker-B8VVNXU3.es.js.map → date-picker-oben2gT5.es.js.map} +1 -1
  89. package/dist/chunks/{date-range-picker-BnbKgO1E.es.js → date-range-picker-DUZjHF9Y.es.js} +15 -15
  90. package/dist/chunks/{date-range-picker-BnbKgO1E.es.js.map → date-range-picker-DUZjHF9Y.es.js.map} +1 -1
  91. package/dist/chunks/date-range-picker-YzIHScYE.cjs.js +2 -0
  92. package/dist/chunks/{date-range-picker-CO2HH0mY.cjs.js.map → date-range-picker-YzIHScYE.cjs.js.map} +1 -1
  93. package/dist/chunks/{date-range-picker-field-BuI6eLMY.es.js → date-range-picker-field-DPDAq0Vk.es.js} +3 -3
  94. package/dist/chunks/{date-range-picker-field-BuI6eLMY.es.js.map → date-range-picker-field-DPDAq0Vk.es.js.map} +1 -1
  95. package/dist/chunks/{date-range-picker-field-DcIo1YzI.cjs.js → date-range-picker-field-KYVjc37N.cjs.js} +2 -2
  96. package/dist/chunks/{date-range-picker-field-DcIo1YzI.cjs.js.map → date-range-picker-field-KYVjc37N.cjs.js.map} +1 -1
  97. package/dist/chunks/{dialog-gyrFT8w0.cjs.js → dialog-D_bclPPG.cjs.js} +2 -2
  98. package/dist/chunks/{dialog-gyrFT8w0.cjs.js.map → dialog-D_bclPPG.cjs.js.map} +1 -1
  99. package/dist/chunks/{dialog-DuS3dXVi.es.js → dialog-DnTNN0As.es.js} +7 -7
  100. package/dist/chunks/{dialog-DuS3dXVi.es.js.map → dialog-DnTNN0As.es.js.map} +1 -1
  101. package/dist/chunks/{draggable-list-z7a7tu_F.es.js → draggable-list-BA-Ta1tl.es.js} +22 -22
  102. package/dist/chunks/{draggable-list-z7a7tu_F.es.js.map → draggable-list-BA-Ta1tl.es.js.map} +1 -1
  103. package/dist/chunks/{draggable-list-fvTG-VYt.cjs.js → draggable-list-DICiNibe.cjs.js} +2 -2
  104. package/dist/chunks/{draggable-list-fvTG-VYt.cjs.js.map → draggable-list-DICiNibe.cjs.js.map} +1 -1
  105. package/dist/chunks/{drawer-BPcEUbUt.es.js → drawer-5iAAFedv.es.js} +49 -49
  106. package/dist/chunks/drawer-5iAAFedv.es.js.map +1 -0
  107. package/dist/chunks/drawer-C0f91Gif.cjs.js +2 -0
  108. package/dist/chunks/drawer-C0f91Gif.cjs.js.map +1 -0
  109. package/dist/chunks/{extract-style-props-BdibuNZ7.es.js → extract-style-props-B8tpnj8B.es.js} +2 -2
  110. package/dist/chunks/{extract-style-props-BdibuNZ7.es.js.map → extract-style-props-B8tpnj8B.es.js.map} +1 -1
  111. package/dist/chunks/{extract-style-props-B4hqila-.cjs.js → extract-style-props-YkvHQ4GF.cjs.js} +2 -2
  112. package/dist/chunks/{extract-style-props-B4hqila-.cjs.js.map → extract-style-props-YkvHQ4GF.cjs.js.map} +1 -1
  113. package/dist/chunks/flex-BqxAMF-7.es.js +11 -0
  114. package/dist/chunks/flex-BqxAMF-7.es.js.map +1 -0
  115. package/dist/chunks/flex-DwGL6TCj.cjs.js +2 -0
  116. package/dist/chunks/flex-DwGL6TCj.cjs.js.map +1 -0
  117. package/dist/chunks/{focusSafely-Cwb0Tyy6.es.js → focusSafely-RvsgqoUt.es.js} +3 -3
  118. package/dist/chunks/{focusSafely-Cwb0Tyy6.es.js.map → focusSafely-RvsgqoUt.es.js.map} +1 -1
  119. package/dist/chunks/{form-field-FdRNl2bZ.cjs.js → form-field-6MPrXfZA.cjs.js} +2 -2
  120. package/dist/chunks/{form-field-FdRNl2bZ.cjs.js.map → form-field-6MPrXfZA.cjs.js.map} +1 -1
  121. package/dist/chunks/{form-field-BfDU18h3.es.js → form-field-JQ-0X24M.es.js} +4 -4
  122. package/dist/chunks/{form-field-BfDU18h3.es.js.map → form-field-JQ-0X24M.es.js.map} +1 -1
  123. package/dist/chunks/{getScrollParent-MZgwmCKW.es.js → getScrollParent-DlqhSzBC.es.js} +2 -2
  124. package/dist/chunks/{getScrollParent-MZgwmCKW.es.js.map → getScrollParent-DlqhSzBC.es.js.map} +1 -1
  125. package/dist/chunks/{group-CCBgdph2.es.js → group-jGsHh1w7.es.js} +2 -2
  126. package/dist/chunks/{group-CCBgdph2.es.js.map → group-jGsHh1w7.es.js.map} +1 -1
  127. package/dist/chunks/{heading-nfjoR4vL.es.js → heading-CwsT9zp_.es.js} +2 -2
  128. package/dist/chunks/{heading-nfjoR4vL.es.js.map → heading-CwsT9zp_.es.js.map} +1 -1
  129. package/dist/chunks/{icon-button-CeB8_Yyr.cjs.js → icon-button-Bri4vUUz.cjs.js} +2 -2
  130. package/dist/chunks/{icon-button-CeB8_Yyr.cjs.js.map → icon-button-Bri4vUUz.cjs.js.map} +1 -1
  131. package/dist/chunks/{icon-button-CosIm3oY.es.js → icon-button-DBBY3Dn9.es.js} +2 -2
  132. package/dist/chunks/{icon-button-CosIm3oY.es.js.map → icon-button-DBBY3Dn9.es.js.map} +1 -1
  133. package/dist/chunks/{icon-toggle-button-C4Tnlt4t.cjs.js → icon-toggle-button-CBfDNuf9.cjs.js} +2 -2
  134. package/dist/chunks/{icon-toggle-button-C4Tnlt4t.cjs.js.map → icon-toggle-button-CBfDNuf9.cjs.js.map} +1 -1
  135. package/dist/chunks/{icon-toggle-button-8fX8JAXp.es.js → icon-toggle-button-q_nRJLdc.es.js} +2 -2
  136. package/dist/chunks/{icon-toggle-button-8fX8JAXp.es.js.map → icon-toggle-button-q_nRJLdc.es.js.map} +1 -1
  137. package/dist/chunks/{index-C2qW4ynb.es.js → index-BQXCumBh.es.js} +186 -186
  138. package/dist/chunks/index-BQXCumBh.es.js.map +1 -0
  139. package/dist/chunks/index-jx_KUftr.cjs.js +34 -0
  140. package/dist/chunks/index-jx_KUftr.cjs.js.map +1 -0
  141. package/dist/chunks/{inline-svg-Cwl9dFvu.es.js → inline-svg-DeHAHjI4.es.js} +2 -2
  142. package/dist/chunks/{inline-svg-Cwl9dFvu.es.js.map → inline-svg-DeHAHjI4.es.js.map} +1 -1
  143. package/dist/chunks/{inline-svg-BzzKpbrB.cjs.js → inline-svg-ZvGLE5-3.cjs.js} +2 -2
  144. package/dist/chunks/{inline-svg-BzzKpbrB.cjs.js.map → inline-svg-ZvGLE5-3.cjs.js.map} +1 -1
  145. package/dist/chunks/{kbd-Bl5Ncm2d.es.js → kbd-B11Qoo4k.es.js} +2 -2
  146. package/dist/chunks/{kbd-Bl5Ncm2d.es.js.map → kbd-B11Qoo4k.es.js.map} +1 -1
  147. package/dist/chunks/{link-BMUyXcmC.es.js → link-Db65JZE6.es.js} +9 -9
  148. package/dist/chunks/{link-BMUyXcmC.es.js.map → link-Db65JZE6.es.js.map} +1 -1
  149. package/dist/chunks/{loading-spinner-gf62wtm3.es.js → loading-spinner-BtDS9yzp.es.js} +6 -6
  150. package/dist/chunks/{loading-spinner-gf62wtm3.es.js.map → loading-spinner-BtDS9yzp.es.js.map} +1 -1
  151. package/dist/chunks/{localized-field-DdeHzXdh.es.js → localized-field-1QnknoHl.es.js} +13 -13
  152. package/dist/chunks/{localized-field-DdeHzXdh.es.js.map → localized-field-1QnknoHl.es.js.map} +1 -1
  153. package/dist/chunks/{localized-field-D78l88ux.cjs.js → localized-field-D-j174BM.cjs.js} +2 -2
  154. package/dist/chunks/{localized-field-D78l88ux.cjs.js.map → localized-field-D-j174BM.cjs.js.map} +1 -1
  155. package/dist/chunks/{make-element-focusable-7-aXFtDJ.es.js → make-element-focusable-DVfaQntJ.es.js} +6 -6
  156. package/dist/chunks/{make-element-focusable-7-aXFtDJ.es.js.map → make-element-focusable-DVfaQntJ.es.js.map} +1 -1
  157. package/dist/chunks/{menu-Dno8yFDE.cjs.js → menu-CGzwkVSN.cjs.js} +2 -2
  158. package/dist/chunks/{menu-Dno8yFDE.cjs.js.map → menu-CGzwkVSN.cjs.js.map} +1 -1
  159. package/dist/chunks/{menu-Zlnps1eW.es.js → menu-CY7e-1VD.es.js} +6 -6
  160. package/dist/chunks/{menu-Zlnps1eW.es.js.map → menu-CY7e-1VD.es.js.map} +1 -1
  161. package/dist/chunks/{mergeProps-Dsl8k3Ig.es.js → mergeProps-D1jjFfMs.es.js} +6 -6
  162. package/dist/chunks/{mergeProps-Dsl8k3Ig.es.js.map → mergeProps-D1jjFfMs.es.js.map} +1 -1
  163. package/dist/chunks/{money-input-D65vrUj4.es.js → money-input-51QkN1Fh.es.js} +19 -19
  164. package/dist/chunks/{money-input-D65vrUj4.es.js.map → money-input-51QkN1Fh.es.js.map} +1 -1
  165. package/dist/chunks/{money-input-C9eVmgeL.cjs.js → money-input-DvHk2_Bj.cjs.js} +2 -2
  166. package/dist/chunks/{money-input-C9eVmgeL.cjs.js.map → money-input-DvHk2_Bj.cjs.js.map} +1 -1
  167. package/dist/chunks/{money-input-field-CSnaaDk-.es.js → money-input-field-CoCvzzGE.es.js} +3 -3
  168. package/dist/chunks/{money-input-field-CSnaaDk-.es.js.map → money-input-field-CoCvzzGE.es.js.map} +1 -1
  169. package/dist/chunks/{money-input-field-BGZ_9HKh.cjs.js → money-input-field-sM_cBUFp.cjs.js} +2 -2
  170. package/dist/chunks/{money-input-field-BGZ_9HKh.cjs.js.map → money-input-field-sM_cBUFp.cjs.js.map} +1 -1
  171. package/dist/chunks/{multiline-text-input-CrDTYrM3.es.js → multiline-text-input-BmAvzvIS.es.js} +8 -8
  172. package/dist/chunks/{multiline-text-input-CrDTYrM3.es.js.map → multiline-text-input-BmAvzvIS.es.js.map} +1 -1
  173. package/dist/chunks/{multiline-text-input-CULLuZBp.cjs.js → multiline-text-input-Dqkuj0Sk.cjs.js} +2 -2
  174. package/dist/chunks/{multiline-text-input-CULLuZBp.cjs.js.map → multiline-text-input-Dqkuj0Sk.cjs.js.map} +1 -1
  175. package/dist/chunks/{multiline-text-input-field-BX-w2v1Y.cjs.js → multiline-text-input-field-BaWFTwye.cjs.js} +2 -2
  176. package/dist/chunks/{multiline-text-input-field-BX-w2v1Y.cjs.js.map → multiline-text-input-field-BaWFTwye.cjs.js.map} +1 -1
  177. package/dist/chunks/{multiline-text-input-field-C6UTl_c8.es.js → multiline-text-input-field-D91TYhJ1.es.js} +3 -3
  178. package/dist/chunks/{multiline-text-input-field-C6UTl_c8.es.js.map → multiline-text-input-field-D91TYhJ1.es.js.map} +1 -1
  179. package/dist/chunks/{nimbus-provider-S02SpkpM.es.js → nimbus-provider-C84q7ZFt.es.js} +2 -2
  180. package/dist/chunks/{nimbus-provider-S02SpkpM.es.js.map → nimbus-provider-C84q7ZFt.es.js.map} +1 -1
  181. package/dist/chunks/{nimbus-provider-Dnu5ohMR.cjs.js → nimbus-provider-DGdgb9VU.cjs.js} +2 -2
  182. package/dist/chunks/{nimbus-provider-Dnu5ohMR.cjs.js.map → nimbus-provider-DGdgb9VU.cjs.js.map} +1 -1
  183. package/dist/chunks/{number-input-Dp13Mn-8.es.js → number-input-CicVxjYf.es.js} +14 -14
  184. package/dist/chunks/{number-input-Dp13Mn-8.es.js.map → number-input-CicVxjYf.es.js.map} +1 -1
  185. package/dist/chunks/{number-input-CR1hdy-B.cjs.js → number-input-DVO-qqmy.cjs.js} +2 -2
  186. package/dist/chunks/{number-input-CR1hdy-B.cjs.js.map → number-input-DVO-qqmy.cjs.js.map} +1 -1
  187. package/dist/chunks/{number-input-field-C90uFO4e.es.js → number-input-field-1kIn8j-V.es.js} +3 -3
  188. package/dist/chunks/{number-input-field-C90uFO4e.es.js.map → number-input-field-1kIn8j-V.es.js.map} +1 -1
  189. package/dist/chunks/{number-input-field-BDNpAP6t.cjs.js → number-input-field-3SIWl2ys.cjs.js} +2 -2
  190. package/dist/chunks/{number-input-field-BDNpAP6t.cjs.js.map → number-input-field-3SIWl2ys.cjs.js.map} +1 -1
  191. package/dist/chunks/{pagination-BlrGdyD5.es.js → pagination-5xlqgcGF.es.js} +10 -10
  192. package/dist/chunks/{pagination-BlrGdyD5.es.js.map → pagination-5xlqgcGF.es.js.map} +1 -1
  193. package/dist/chunks/pagination-xF9OBqqw.cjs.js +2 -0
  194. package/dist/chunks/{pagination-BIxlGft7.cjs.js.map → pagination-xF9OBqqw.cjs.js.map} +1 -1
  195. package/dist/chunks/{password-input-8bkpGOIX.es.js → password-input-BHeK11T5.es.js} +4 -4
  196. package/dist/chunks/{password-input-8bkpGOIX.es.js.map → password-input-BHeK11T5.es.js.map} +1 -1
  197. package/dist/chunks/{password-input-BVbQ42NG.cjs.js → password-input-Dqkx7rna.cjs.js} +2 -2
  198. package/dist/chunks/{password-input-BVbQ42NG.cjs.js.map → password-input-Dqkx7rna.cjs.js.map} +1 -1
  199. package/dist/chunks/{password-input-field-B5lWzWAQ.cjs.js → password-input-field-Bdk2PGh-.cjs.js} +2 -2
  200. package/dist/chunks/{password-input-field-B5lWzWAQ.cjs.js.map → password-input-field-Bdk2PGh-.cjs.js.map} +1 -1
  201. package/dist/chunks/{password-input-field-XXaNUALk.es.js → password-input-field-D_9uQszl.es.js} +3 -3
  202. package/dist/chunks/{password-input-field-XXaNUALk.es.js.map → password-input-field-D_9uQszl.es.js.map} +1 -1
  203. package/dist/chunks/{popover-CuA9VugH.es.js → popover-BB1pYTlN.es.js} +2 -2
  204. package/dist/chunks/{popover-CuA9VugH.es.js.map → popover-BB1pYTlN.es.js.map} +1 -1
  205. package/dist/chunks/{progress-bar-C2ZnGdLv.es.js → progress-bar-5RFD3Gzz.es.js} +15 -15
  206. package/dist/chunks/{progress-bar-C2ZnGdLv.es.js.map → progress-bar-5RFD3Gzz.es.js.map} +1 -1
  207. package/dist/chunks/progress-bar-lMoiWhLT.cjs.js +2 -0
  208. package/dist/chunks/{progress-bar-dRKyuT1-.cjs.js.map → progress-bar-lMoiWhLT.cjs.js.map} +1 -1
  209. package/dist/chunks/{radio-input-DV-hhL4S.es.js → radio-input-DJ7dbsdR.es.js} +42 -42
  210. package/dist/chunks/{radio-input-DV-hhL4S.es.js.map → radio-input-DJ7dbsdR.es.js.map} +1 -1
  211. package/dist/chunks/{radio-input-BecbxXcF.cjs.js → radio-input-DUxKE-Cs.cjs.js} +2 -2
  212. package/dist/chunks/{radio-input-BecbxXcF.cjs.js.map → radio-input-DUxKE-Cs.cjs.js.map} +1 -1
  213. package/dist/chunks/{range-calendar-CEIaa08T.es.js → range-calendar-B6Pxr7zJ.es.js} +13 -13
  214. package/dist/chunks/{range-calendar-CEIaa08T.es.js.map → range-calendar-B6Pxr7zJ.es.js.map} +1 -1
  215. package/dist/chunks/range-calendar-D5S4X72j.cjs.js +2 -0
  216. package/dist/chunks/{range-calendar-Dq5Gtsb6.cjs.js.map → range-calendar-D5S4X72j.cjs.js.map} +1 -1
  217. package/dist/chunks/{rich-text-input-CRGUa5d2.es.js → rich-text-input-Bj1pRFPq.es.js} +13 -13
  218. package/dist/chunks/{rich-text-input-CRGUa5d2.es.js.map → rich-text-input-Bj1pRFPq.es.js.map} +1 -1
  219. package/dist/chunks/{rich-text-input-Dml5F7pU.cjs.js → rich-text-input-DJfzOb_3.cjs.js} +2 -2
  220. package/dist/chunks/{rich-text-input-Dml5F7pU.cjs.js.map → rich-text-input-DJfzOb_3.cjs.js.map} +1 -1
  221. package/dist/chunks/scoped-search-input-Dsh8-OgU.cjs.js +2 -0
  222. package/dist/chunks/scoped-search-input-Dsh8-OgU.cjs.js.map +1 -0
  223. package/dist/chunks/scoped-search-input-L6cMYzuY.es.js +151 -0
  224. package/dist/chunks/scoped-search-input-L6cMYzuY.es.js.map +1 -0
  225. package/dist/chunks/{scrollIntoView-B7D07fJk.es.js → scrollIntoView-CQMm8-SR.es.js} +5 -5
  226. package/dist/chunks/{scrollIntoView-B7D07fJk.es.js.map → scrollIntoView-CQMm8-SR.es.js.map} +1 -1
  227. package/dist/chunks/{search-input-BNXlpYtP.cjs.js → search-input-BtnmYYzw.cjs.js} +2 -2
  228. package/dist/chunks/{search-input-BNXlpYtP.cjs.js.map → search-input-BtnmYYzw.cjs.js.map} +1 -1
  229. package/dist/chunks/{search-input-BDUJ48BC.es.js → search-input-QR7sGTGP.es.js} +11 -11
  230. package/dist/chunks/{search-input-BDUJ48BC.es.js.map → search-input-QR7sGTGP.es.js.map} +1 -1
  231. package/dist/chunks/{search-input-field-v60x1oiw.cjs.js → search-input-field-CMescsqG.cjs.js} +2 -2
  232. package/dist/chunks/{search-input-field-v60x1oiw.cjs.js.map → search-input-field-CMescsqG.cjs.js.map} +1 -1
  233. package/dist/chunks/{search-input-field-CEemw2P1.es.js → search-input-field-t_x6V99P.es.js} +3 -3
  234. package/dist/chunks/{search-input-field-CEemw2P1.es.js.map → search-input-field-t_x6V99P.es.js.map} +1 -1
  235. package/dist/chunks/select-Cqs4hTbk.cjs.js +2 -0
  236. package/dist/chunks/{select-Dq_6o0BB.cjs.js.map → select-Cqs4hTbk.cjs.js.map} +1 -1
  237. package/dist/chunks/{select-D9yYDW0d.es.js → select-DESJPjCr.es.js} +40 -40
  238. package/dist/chunks/{select-D9yYDW0d.es.js.map → select-DESJPjCr.es.js.map} +1 -1
  239. package/dist/chunks/{separator-BJ9k_D4l.es.js → separator-Cv7Pq4Ds.es.js} +4 -4
  240. package/dist/chunks/{separator-BJ9k_D4l.es.js.map → separator-Cv7Pq4Ds.es.js.map} +1 -1
  241. package/dist/chunks/{separator-u_4por07.cjs.js → separator-EcxRV37n.cjs.js} +2 -2
  242. package/dist/chunks/{separator-u_4por07.cjs.js.map → separator-EcxRV37n.cjs.js.map} +1 -1
  243. package/dist/chunks/{split-button-B4gVhpP9.cjs.js → split-button-DU3xgYU0.cjs.js} +2 -2
  244. package/dist/chunks/{split-button-B4gVhpP9.cjs.js.map → split-button-DU3xgYU0.cjs.js.map} +1 -1
  245. package/dist/chunks/{split-button-C94SY3qF.es.js → split-button-fFjvmZHq.es.js} +4 -4
  246. package/dist/chunks/{split-button-C94SY3qF.es.js.map → split-button-fFjvmZHq.es.js.map} +1 -1
  247. package/dist/chunks/{switch-Nn1Fbk5O.es.js → switch-CdVnan26.es.js} +7 -7
  248. package/dist/chunks/{switch-Nn1Fbk5O.es.js.map → switch-CdVnan26.es.js.map} +1 -1
  249. package/dist/chunks/{switch-CsiG41ZR.cjs.js → switch-DMi6ns1l.cjs.js} +2 -2
  250. package/dist/chunks/{switch-CsiG41ZR.cjs.js.map → switch-DMi6ns1l.cjs.js.map} +1 -1
  251. package/dist/chunks/table-B5iad7CD.es.js +62 -0
  252. package/dist/chunks/table-B5iad7CD.es.js.map +1 -0
  253. package/dist/chunks/table-BFZZu0lw.cjs.js +2 -0
  254. package/dist/chunks/table-BFZZu0lw.cjs.js.map +1 -0
  255. package/dist/chunks/{tabs-D0OPeQ_J.es.js → tabs-CWDqgw59.es.js} +48 -43
  256. package/dist/chunks/{tabs-D0OPeQ_J.es.js.map → tabs-CWDqgw59.es.js.map} +1 -1
  257. package/dist/chunks/tabs-UcZcFbnu.cjs.js +2 -0
  258. package/dist/chunks/{tabs-iV08OTqG.cjs.js.map → tabs-UcZcFbnu.cjs.js.map} +1 -1
  259. package/dist/chunks/{tag-group-BE8d6xcP.es.js → tag-group-3taLR4L7.es.js} +19 -19
  260. package/dist/chunks/{tag-group-BE8d6xcP.es.js.map → tag-group-3taLR4L7.es.js.map} +1 -1
  261. package/dist/chunks/{tag-group-BI8_32rM.cjs.js → tag-group-BWA-yzCv.cjs.js} +2 -2
  262. package/dist/chunks/{tag-group-BI8_32rM.cjs.js.map → tag-group-BWA-yzCv.cjs.js.map} +1 -1
  263. package/dist/chunks/{text-CIb_VDvO.es.js → text-DvqDjbwb.es.js} +2 -2
  264. package/dist/chunks/{text-CIb_VDvO.es.js.map → text-DvqDjbwb.es.js.map} +1 -1
  265. package/dist/chunks/{text-input-CCiZeQad.es.js → text-input-DzO2bE5d.es.js} +7 -7
  266. package/dist/chunks/{text-input-CCiZeQad.es.js.map → text-input-DzO2bE5d.es.js.map} +1 -1
  267. package/dist/chunks/{text-input-BlxK2Naj.cjs.js → text-input-cMb5fdnO.cjs.js} +2 -2
  268. package/dist/chunks/{text-input-BlxK2Naj.cjs.js.map → text-input-cMb5fdnO.cjs.js.map} +1 -1
  269. package/dist/chunks/{text-input-field-6Cj35cYL.es.js → text-input-field-UbYDvgb4.es.js} +3 -3
  270. package/dist/chunks/{text-input-field-6Cj35cYL.es.js.map → text-input-field-UbYDvgb4.es.js.map} +1 -1
  271. package/dist/chunks/{text-input-field-Cmht3hDK.cjs.js → text-input-field-qfkkCezM.cjs.js} +2 -2
  272. package/dist/chunks/{text-input-field-Cmht3hDK.cjs.js.map → text-input-field-qfkkCezM.cjs.js.map} +1 -1
  273. package/dist/chunks/{time-input-9Q5vV4UD.cjs.js → time-input-B8Z7jn-2.cjs.js} +2 -2
  274. package/dist/chunks/{time-input-9Q5vV4UD.cjs.js.map → time-input-B8Z7jn-2.cjs.js.map} +1 -1
  275. package/dist/chunks/{time-input-CCuIFoY2.es.js → time-input-DnW6Aelf.es.js} +4 -4
  276. package/dist/chunks/{time-input-CCuIFoY2.es.js.map → time-input-DnW6Aelf.es.js.map} +1 -1
  277. package/dist/chunks/{toggle-button-UcXy5q2C.es.js → toggle-button-BuusM0yE.es.js} +4 -4
  278. package/dist/chunks/{toggle-button-UcXy5q2C.es.js.map → toggle-button-BuusM0yE.es.js.map} +1 -1
  279. package/dist/chunks/{toggle-button-L7i1XaWg.cjs.js → toggle-button-DVHvcwQ7.cjs.js} +2 -2
  280. package/dist/chunks/{toggle-button-L7i1XaWg.cjs.js.map → toggle-button-DVHvcwQ7.cjs.js.map} +1 -1
  281. package/dist/chunks/{toggle-button-group-BWpmMkEz.es.js → toggle-button-group-P0oS-q6h.es.js} +2 -2
  282. package/dist/chunks/{toggle-button-group-BWpmMkEz.es.js.map → toggle-button-group-P0oS-q6h.es.js.map} +1 -1
  283. package/dist/chunks/{toolbar-C7-6gqba.es.js → toolbar-B2nAx66D.es.js} +6 -6
  284. package/dist/chunks/{toolbar-C7-6gqba.es.js.map → toolbar-B2nAx66D.es.js.map} +1 -1
  285. package/dist/chunks/{toolbar-D4fLFiSb.cjs.js → toolbar-C50Aroys.cjs.js} +2 -2
  286. package/dist/chunks/{toolbar-D4fLFiSb.cjs.js.map → toolbar-C50Aroys.cjs.js.map} +1 -1
  287. package/dist/chunks/{tooltip-D3QrrizN.es.js → tooltip-CzEuq_Qi.es.js} +7 -7
  288. package/dist/chunks/{tooltip-D3QrrizN.es.js.map → tooltip-CzEuq_Qi.es.js.map} +1 -1
  289. package/dist/chunks/{use-inline-svg-Cua0623E.es.js → use-inline-svg-D-aaBVBt.es.js} +2 -2
  290. package/dist/chunks/{use-inline-svg-Cua0623E.es.js.map → use-inline-svg-D-aaBVBt.es.js.map} +1 -1
  291. package/dist/chunks/{use-inline-svg-C2ko8Bcq.cjs.js → use-inline-svg-D0IP_Zja.cjs.js} +2 -2
  292. package/dist/chunks/{use-inline-svg-C2ko8Bcq.cjs.js.map → use-inline-svg-D0IP_Zja.cjs.js.map} +1 -1
  293. package/dist/chunks/{useButton-CiPiehgC.es.js → useButton-B2TbwHSy.es.js} +4 -4
  294. package/dist/chunks/{useButton-CiPiehgC.es.js.map → useButton-B2TbwHSy.es.js.map} +1 -1
  295. package/dist/chunks/{useDateFormatter-9juUpmrj.es.js → useDateFormatter-Bm8thTNT.es.js} +2 -2
  296. package/dist/chunks/{useDateFormatter-9juUpmrj.es.js.map → useDateFormatter-Bm8thTNT.es.js.map} +1 -1
  297. package/dist/chunks/{useDisclosureState-CWZTR2xM.es.js → useDisclosureState-BqxwXawT.es.js} +3 -3
  298. package/dist/chunks/{useDisclosureState-CWZTR2xM.es.js.map → useDisclosureState-BqxwXawT.es.js.map} +1 -1
  299. package/dist/chunks/{useEvent-CRo5BZDX.es.js → useEvent-D8bTsAyx.es.js} +6 -6
  300. package/dist/chunks/{useEvent-CRo5BZDX.es.js.map → useEvent-D8bTsAyx.es.js.map} +1 -1
  301. package/dist/chunks/{useField-CHrpmkxe.es.js → useField-BfW84CS4.es.js} +8 -8
  302. package/dist/chunks/{useField-CHrpmkxe.es.js.map → useField-BfW84CS4.es.js.map} +1 -1
  303. package/dist/chunks/{useFocus-CrgTusM3.es.js → useFocus-TCNvrvTC.es.js} +6 -6
  304. package/dist/chunks/{useFocus-CrgTusM3.es.js.map → useFocus-TCNvrvTC.es.js.map} +1 -1
  305. package/dist/chunks/{useFocusRing-FPt2Rwil.es.js → useFocusRing-oMAqzr3e.es.js} +4 -4
  306. package/dist/chunks/{useFocusRing-FPt2Rwil.es.js.map → useFocusRing-oMAqzr3e.es.js.map} +1 -1
  307. package/dist/chunks/{useFocusVisible-B3HmFL2Q.es.js → useFocusVisible-Uw6yFmFY.es.js} +6 -6
  308. package/dist/chunks/{useFocusVisible-B3HmFL2Q.es.js.map → useFocusVisible-Uw6yFmFY.es.js.map} +1 -1
  309. package/dist/chunks/{useFocusWithin-EFOG-Jn1.es.js → useFocusWithin-nAsP7Ru3.es.js} +6 -6
  310. package/dist/chunks/{useFocusWithin-EFOG-Jn1.es.js.map → useFocusWithin-nAsP7Ru3.es.js.map} +1 -1
  311. package/dist/chunks/{useFocusable-Cs6i58WP.es.js → useFocusable-Bm-DQaak.es.js} +5 -5
  312. package/dist/chunks/{useFocusable-Cs6i58WP.es.js.map → useFocusable-Bm-DQaak.es.js.map} +1 -1
  313. package/dist/chunks/{useFormReset-BGuIA_u2.es.js → useFormReset-C52dSDoe.es.js} +2 -2
  314. package/dist/chunks/{useFormReset-BGuIA_u2.es.js.map → useFormReset-C52dSDoe.es.js.map} +1 -1
  315. package/dist/chunks/{useFormValidation-BCVLtR0U.es.js → useFormValidation-DxDV9X1M.es.js} +3 -3
  316. package/dist/chunks/{useFormValidation-BCVLtR0U.es.js.map → useFormValidation-DxDV9X1M.es.js.map} +1 -1
  317. package/dist/chunks/{useGridListItem-CJrr2QNO.es.js → useGridListItem-W6DzfYRB.es.js} +10 -10
  318. package/dist/chunks/{useGridListItem-CJrr2QNO.es.js.map → useGridListItem-W6DzfYRB.es.js.map} +1 -1
  319. package/dist/chunks/{useHasTabbableChild-DXq72IE3.es.js → useHasTabbableChild-DemFbZRn.es.js} +3 -3
  320. package/dist/chunks/{useHasTabbableChild-DXq72IE3.es.js.map → useHasTabbableChild-DemFbZRn.es.js.map} +1 -1
  321. package/dist/chunks/{useHover-BQRSM3qT.es.js → useHover-BtRK9g2L.es.js} +2 -2
  322. package/dist/chunks/{useHover-BQRSM3qT.es.js.map → useHover-BtRK9g2L.es.js.map} +1 -1
  323. package/dist/chunks/{useLabel-DQaRD22u.es.js → useLabel-DfbcmKTa.es.js} +5 -5
  324. package/dist/chunks/{useLabel-DQaRD22u.es.js.map → useLabel-DfbcmKTa.es.js.map} +1 -1
  325. package/dist/chunks/{useLabels-BDqWMehi.es.js → useLabels-Gn8v9XZB.es.js} +2 -2
  326. package/dist/chunks/{useLabels-BDqWMehi.es.js.map → useLabels-Gn8v9XZB.es.js.map} +1 -1
  327. package/dist/chunks/{useListState-Dd0Mtev3.es.js → useListState-BgQn1ZbV.es.js} +2 -2
  328. package/dist/chunks/{useListState-Dd0Mtev3.es.js.map → useListState-BgQn1ZbV.es.js.map} +1 -1
  329. package/dist/chunks/{usePress-BuLomD_X.es.js → usePress-C_IPaF8I.es.js} +6 -6
  330. package/dist/chunks/{usePress-BuLomD_X.es.js.map → usePress-C_IPaF8I.es.js.map} +1 -1
  331. package/dist/chunks/{useProgressBar--OvVKto2.es.js → useProgressBar-DCj794Zv.es.js} +7 -7
  332. package/dist/chunks/{useProgressBar--OvVKto2.es.js.map → useProgressBar-DCj794Zv.es.js.map} +1 -1
  333. package/dist/chunks/{useSpinButton-D8B_x4uj.es.js → useSpinButton-BkOWnOWL.es.js} +15 -15
  334. package/dist/chunks/{useSpinButton-D8B_x4uj.es.js.map → useSpinButton-BkOWnOWL.es.js.map} +1 -1
  335. package/dist/chunks/{useSyncRef-BpLviItW.es.js → useSyncRef-DmY05o2G.es.js} +2 -2
  336. package/dist/chunks/{useSyncRef-BpLviItW.es.js.map → useSyncRef-DmY05o2G.es.js.map} +1 -1
  337. package/dist/chunks/{useTextField-yuaT8-G4.es.js → useTextField-9WuJfc9u.es.js} +7 -7
  338. package/dist/chunks/{useTextField-yuaT8-G4.es.js.map → useTextField-9WuJfc9u.es.js.map} +1 -1
  339. package/dist/chunks/{useToggle-DKP3zVOY.es.js → useToggle-BZPMewLP.es.js} +5 -5
  340. package/dist/chunks/{useToggle-DKP3zVOY.es.js.map → useToggle-BZPMewLP.es.js.map} +1 -1
  341. package/dist/chunks/{useToolbar-CbJkugif.es.js → useToolbar-C673xD3E.es.js} +3 -3
  342. package/dist/chunks/{useToolbar-CbJkugif.es.js.map → useToolbar-C673xD3E.es.js.map} +1 -1
  343. package/dist/chunks/{utils-B6pV5ewr.es.js → utils-9vu7GUaz.es.js} +12 -12
  344. package/dist/chunks/{utils-B6pV5ewr.es.js.map → utils-9vu7GUaz.es.js.map} +1 -1
  345. package/dist/chunks/{utils-oAGBWzI5.es.js → utils-Bl-3nKLa.es.js} +14 -14
  346. package/dist/chunks/{utils-oAGBWzI5.es.js.map → utils-Bl-3nKLa.es.js.map} +1 -1
  347. package/dist/chunks/{visually-hidden-Dj5CT-u_.es.js → visually-hidden-m5QY9YV7.es.js} +2 -2
  348. package/dist/chunks/{visually-hidden-Dj5CT-u_.es.js.map → visually-hidden-m5QY9YV7.es.js.map} +1 -1
  349. package/dist/components/accordion/accordion.recipe.d.ts +1 -1
  350. package/dist/components/accordion/accordion.slots.d.ts +5 -5
  351. package/dist/components/accordion.cjs +1 -1
  352. package/dist/components/accordion.es.js +2 -2
  353. package/dist/components/alert/alert.recipe.d.ts +1 -1
  354. package/dist/components/alert/alert.slots.d.ts +3 -3
  355. package/dist/components/alert.cjs +1 -1
  356. package/dist/components/alert.es.js +1 -1
  357. package/dist/components/avatar/avatar.slots.d.ts +1 -1
  358. package/dist/components/badge/badge.slots.d.ts +1 -1
  359. package/dist/components/badge.es.js +1 -1
  360. package/dist/components/button.cjs +1 -1
  361. package/dist/components/button.es.js +1 -1
  362. package/dist/components/calendar/calendar.slots.d.ts +8 -8
  363. package/dist/components/calendar.cjs +1 -1
  364. package/dist/components/calendar.es.js +1 -1
  365. package/dist/components/card.cjs +1 -1
  366. package/dist/components/card.es.js +1 -1
  367. package/dist/components/checkbox.cjs +1 -1
  368. package/dist/components/checkbox.es.js +1 -1
  369. package/dist/components/collapsible-motion/collapsible-motion.slots.d.ts +2 -2
  370. package/dist/components/collapsible-motion.cjs +1 -1
  371. package/dist/components/collapsible-motion.es.js +1 -1
  372. package/dist/components/combobox/combobox.recipe.d.ts +1 -1
  373. package/dist/components/combobox/combobox.slots.d.ts +12 -12
  374. package/dist/components/combobox.cjs +1 -1
  375. package/dist/components/combobox.es.js +1 -1
  376. package/dist/components/components.cjs +1 -1
  377. package/dist/components/components.es.js +1 -1
  378. package/dist/components/data-table/components/data-table.body.d.ts +1 -1
  379. package/dist/components/data-table/components/data-table.header.d.ts +1 -1
  380. package/dist/components/data-table/components/data-table.table.d.ts +1 -1
  381. package/dist/components/data-table/data-table.d.ts +6 -6
  382. package/dist/components/data-table/data-table.i18n.d.ts +5 -0
  383. package/dist/components/data-table/data-table.messages.d.ts +1 -1
  384. package/dist/components/data-table/data-table.slots.d.ts +12 -12
  385. package/dist/components/data-table/intl/de.d.ts +1 -0
  386. package/dist/components/data-table/intl/en.d.ts +1 -0
  387. package/dist/components/data-table/intl/es.d.ts +1 -0
  388. package/dist/components/data-table/intl/fr-FR.d.ts +1 -0
  389. package/dist/components/data-table/intl/pt-BR.d.ts +1 -0
  390. package/dist/components/data-table.cjs +1 -1
  391. package/dist/components/data-table.es.js +1 -1
  392. package/dist/components/date-input/date-input.slots.d.ts +5 -5
  393. package/dist/components/date-input.cjs +1 -1
  394. package/dist/components/date-input.es.js +1 -1
  395. package/dist/components/date-picker/date-picker.recipe.d.ts +1 -1
  396. package/dist/components/date-picker/date-picker.slots.d.ts +6 -6
  397. package/dist/components/date-picker.cjs +1 -1
  398. package/dist/components/date-picker.es.js +1 -1
  399. package/dist/components/date-range-picker/date-range-picker.recipe.d.ts +1 -1
  400. package/dist/components/date-range-picker/date-range-picker.slots.d.ts +8 -8
  401. package/dist/components/date-range-picker-field.cjs +1 -1
  402. package/dist/components/date-range-picker-field.es.js +1 -1
  403. package/dist/components/date-range-picker.cjs +1 -1
  404. package/dist/components/date-range-picker.es.js +1 -1
  405. package/dist/components/dialog/dialog.slots.d.ts +9 -9
  406. package/dist/components/dialog.cjs +1 -1
  407. package/dist/components/dialog.es.js +1 -1
  408. package/dist/components/draggable-list/draggable-list.slots.d.ts +4 -4
  409. package/dist/components/draggable-list.cjs +1 -1
  410. package/dist/components/draggable-list.es.js +1 -1
  411. package/dist/components/drawer/drawer.slots.d.ts +10 -10
  412. package/dist/components/drawer.cjs +1 -1
  413. package/dist/components/drawer.es.js +1 -1
  414. package/dist/components/fields.cjs +1 -1
  415. package/dist/components/fields.es.js +7 -7
  416. package/dist/components/flex/flex.d.ts +18 -2
  417. package/dist/components/flex/flex.types.d.ts +23 -0
  418. package/dist/components/flex/index.d.ts +1 -0
  419. package/dist/components/flex.cjs +1 -1
  420. package/dist/components/flex.es.js +1 -1
  421. package/dist/components/form-field/form-field.recipe.d.ts +1 -1
  422. package/dist/components/form-field/form-field.slots.d.ts +2 -2
  423. package/dist/components/form-field.cjs +1 -1
  424. package/dist/components/form-field.es.js +1 -1
  425. package/dist/components/group.es.js +1 -1
  426. package/dist/components/heading.es.js +1 -1
  427. package/dist/components/hooks.cjs +1 -1
  428. package/dist/components/hooks.es.js +1 -1
  429. package/dist/components/icon-button.cjs +1 -1
  430. package/dist/components/icon-button.es.js +1 -1
  431. package/dist/components/icon-toggle-button.cjs +1 -1
  432. package/dist/components/icon-toggle-button.es.js +1 -1
  433. package/dist/components/inline-svg/inline-svg.slots.d.ts +1 -1
  434. package/dist/components/inline-svg.cjs +1 -1
  435. package/dist/components/inline-svg.es.js +1 -1
  436. package/dist/components/kbd.es.js +1 -1
  437. package/dist/components/link/link.slots.d.ts +1 -1
  438. package/dist/components/link.es.js +1 -1
  439. package/dist/components/loading-spinner/loading-spinner.slots.d.ts +1 -1
  440. package/dist/components/loading-spinner.es.js +1 -1
  441. package/dist/components/localized-field/localized-field.slots.d.ts +10 -10
  442. package/dist/components/localized-field.cjs +1 -1
  443. package/dist/components/localized-field.es.js +1 -1
  444. package/dist/components/menu/menu.recipe.d.ts +1 -1
  445. package/dist/components/money-input/money-input.slots.d.ts +6 -6
  446. package/dist/components/money-input-field.cjs +1 -1
  447. package/dist/components/money-input-field.es.js +1 -1
  448. package/dist/components/money-input.cjs +1 -1
  449. package/dist/components/money-input.es.js +1 -1
  450. package/dist/components/multiline-text-input/multiline-text-input.slots.d.ts +3 -3
  451. package/dist/components/multiline-text-input-field.cjs +1 -1
  452. package/dist/components/multiline-text-input-field.es.js +1 -1
  453. package/dist/components/multiline-text-input.cjs +1 -1
  454. package/dist/components/multiline-text-input.es.js +1 -1
  455. package/dist/components/nimbus-provider.cjs +1 -1
  456. package/dist/components/nimbus-provider.es.js +1 -1
  457. package/dist/components/number-input/number-input.slots.d.ts +6 -6
  458. package/dist/components/number-input-field.cjs +1 -1
  459. package/dist/components/number-input-field.es.js +1 -1
  460. package/dist/components/number-input.cjs +1 -1
  461. package/dist/components/number-input.es.js +1 -1
  462. package/dist/components/pagination.cjs +1 -1
  463. package/dist/components/pagination.es.js +1 -1
  464. package/dist/components/password-input-field.cjs +1 -1
  465. package/dist/components/password-input-field.es.js +1 -1
  466. package/dist/components/password-input.cjs +1 -1
  467. package/dist/components/password-input.es.js +1 -1
  468. package/dist/components/patterns.cjs +1 -1
  469. package/dist/components/patterns.es.js +7 -7
  470. package/dist/components/popover.es.js +1 -1
  471. package/dist/components/progress-bar/progress-bar.slots.d.ts +4 -4
  472. package/dist/components/progress-bar.cjs +1 -1
  473. package/dist/components/progress-bar.es.js +1 -1
  474. package/dist/components/radio-input/radio-input.slots.d.ts +2 -2
  475. package/dist/components/radio-input.cjs +1 -1
  476. package/dist/components/radio-input.es.js +1 -1
  477. package/dist/components/range-calendar/range-calendar.slots.d.ts +8 -8
  478. package/dist/components/range-calendar.cjs +1 -1
  479. package/dist/components/range-calendar.es.js +1 -1
  480. package/dist/components/rich-text-input/rich-text-input.slots.d.ts +2 -2
  481. package/dist/components/rich-text-input.cjs +1 -1
  482. package/dist/components/rich-text-input.es.js +1 -1
  483. package/dist/components/scoped-search-input.cjs +1 -1
  484. package/dist/components/scoped-search-input.es.js +1 -1
  485. package/dist/components/search-input-field.cjs +1 -1
  486. package/dist/components/search-input-field.es.js +1 -1
  487. package/dist/components/search-input.cjs +1 -1
  488. package/dist/components/search-input.es.js +1 -1
  489. package/dist/components/select/select.slots.d.ts +7 -7
  490. package/dist/components/select.cjs +1 -1
  491. package/dist/components/select.es.js +1 -1
  492. package/dist/components/separator.cjs +1 -1
  493. package/dist/components/separator.es.js +1 -1
  494. package/dist/components/split-button/split-button.slots.d.ts +3 -3
  495. package/dist/components/split-button.cjs +1 -1
  496. package/dist/components/split-button.es.js +1 -1
  497. package/dist/components/switch/switch.slots.d.ts +3 -3
  498. package/dist/components/switch.cjs +1 -1
  499. package/dist/components/switch.es.js +1 -1
  500. package/dist/components/table/index.d.ts +1 -0
  501. package/dist/components/table/table.d.ts +40 -6
  502. package/dist/components/table/table.types.d.ts +100 -0
  503. package/dist/components/table.cjs +1 -1
  504. package/dist/components/table.es.js +2 -2
  505. package/dist/components/tabs/components/tabs.root.d.ts +1 -1
  506. package/dist/components/tabs/tabs.d.ts +1 -1
  507. package/dist/components/tabs/tabs.recipe.d.ts +1 -1
  508. package/dist/components/tabs/tabs.slots.d.ts +3 -3
  509. package/dist/components/tabs/tabs.types.d.ts +5 -0
  510. package/dist/components/tabs.cjs +1 -1
  511. package/dist/components/tabs.es.js +1 -1
  512. package/dist/components/tag-group.cjs +1 -1
  513. package/dist/components/tag-group.es.js +1 -1
  514. package/dist/components/text-input-field.cjs +1 -1
  515. package/dist/components/text-input-field.es.js +1 -1
  516. package/dist/components/text-input.cjs +1 -1
  517. package/dist/components/text-input.es.js +1 -1
  518. package/dist/components/text.es.js +1 -1
  519. package/dist/components/time-input/time-input.slots.d.ts +5 -5
  520. package/dist/components/time-input.cjs +1 -1
  521. package/dist/components/time-input.es.js +1 -1
  522. package/dist/components/toggle-button-group.es.js +1 -1
  523. package/dist/components/toggle-button.cjs +1 -1
  524. package/dist/components/toggle-button.es.js +1 -1
  525. package/dist/components/toolbar.cjs +1 -1
  526. package/dist/components/toolbar.es.js +1 -1
  527. package/dist/components/tooltip.es.js +2 -2
  528. package/dist/components/visually-hidden.es.js +1 -1
  529. package/dist/index.cjs +1 -1
  530. package/dist/index.cjs.map +1 -1
  531. package/dist/index.es.js +67 -67
  532. package/dist/setup-jsdom-polyfills.cjs +1 -1
  533. package/dist/setup-jsdom-polyfills.cjs.map +1 -1
  534. package/dist/setup-jsdom-polyfills.es.js +17 -0
  535. package/dist/setup-jsdom-polyfills.es.js.map +1 -1
  536. package/dist/theme/slot-recipes/index.d.ts +8 -8
  537. package/package.json +5 -5
  538. package/dist/chunks/accordion.content-Cqet9SQ-.cjs.js +0 -2
  539. package/dist/chunks/badge-CgYpum7D.es.js +0 -17
  540. package/dist/chunks/calendar-B01Vti5k.cjs.js +0 -2
  541. package/dist/chunks/combobox-B7ck7gxL.cjs.js +0 -2
  542. package/dist/chunks/combobox-B7ck7gxL.cjs.js.map +0 -1
  543. package/dist/chunks/combobox-vjauyzlS.es.js.map +0 -1
  544. package/dist/chunks/data-table-CBZLbe9h.cjs.js +0 -2
  545. package/dist/chunks/date-picker-DQ5IZcRe.cjs.js +0 -2
  546. package/dist/chunks/date-range-picker-CO2HH0mY.cjs.js +0 -2
  547. package/dist/chunks/drawer-BPcEUbUt.es.js.map +0 -1
  548. package/dist/chunks/drawer-DbSJSCl_.cjs.js +0 -2
  549. package/dist/chunks/drawer-DbSJSCl_.cjs.js.map +0 -1
  550. package/dist/chunks/index-C2qW4ynb.es.js.map +0 -1
  551. package/dist/chunks/index-CVXB9mwf.cjs.js +0 -34
  552. package/dist/chunks/index-CVXB9mwf.cjs.js.map +0 -1
  553. package/dist/chunks/pagination-BIxlGft7.cjs.js +0 -2
  554. package/dist/chunks/progress-bar-dRKyuT1-.cjs.js +0 -2
  555. package/dist/chunks/range-calendar-Dq5Gtsb6.cjs.js +0 -2
  556. package/dist/chunks/scoped-search-input-CSpFefUJ.es.js +0 -147
  557. package/dist/chunks/scoped-search-input-CSpFefUJ.es.js.map +0 -1
  558. package/dist/chunks/scoped-search-input-DKCK7idN.cjs.js +0 -2
  559. package/dist/chunks/scoped-search-input-DKCK7idN.cjs.js.map +0 -1
  560. package/dist/chunks/select-Dq_6o0BB.cjs.js +0 -2
  561. package/dist/chunks/tabs-iV08OTqG.cjs.js +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"combobox-vjauyzlS.es.js","sources":["../../../../node_modules/.pnpm/@react-stately+data@3.14.1_react@19.2.0/node_modules/@react-stately/data/dist/useAsyncList.mjs","../../../../node_modules/.pnpm/react-aria-components@1.13.0_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/react-aria-components/dist/ComboBox.mjs","../../../../node_modules/.pnpm/use-debounce@10.1.0_react@19.2.0/node_modules/use-debounce/dist/index.module.js","../../src/components/combobox/combobox.slots.tsx","../../src/components/combobox/intl/en.ts","../../src/components/combobox/intl/de.ts","../../src/components/combobox/intl/es.ts","../../src/components/combobox/intl/fr-FR.ts","../../src/components/combobox/intl/pt-BR.ts","../../src/components/combobox/combobox.messages.ts","../../src/components/combobox/utils/collection.ts","../../src/components/combobox/utils/selection.ts","../../src/components/combobox/components/combobox.root-context.tsx","../../src/components/combobox/components/combobox.hidden-input.tsx","../../src/components/combobox/components/combobox.root.tsx","../../src/components/combobox/components/combobox.input.tsx","../../src/components/combobox/components/combobox.leading-element.tsx","../../src/components/combobox/components/combobox.tag-group.tsx","../../src/components/combobox/components/combobox.trigger.tsx","../../src/components/combobox/components/combobox.popover.tsx","../../src/components/combobox/components/combobox.listbox.tsx","../../src/components/combobox/components/combobox.option.tsx","../../src/components/combobox/components/combobox.section.tsx","../../src/components/combobox/utils/filters.ts","../../src/components/combobox/combobox.tsx"],"sourcesContent":["import {createListActions as $0d86e9c8f07f9a7b$export$79c0c687a5963b0a} from \"./useListData.mjs\";\nimport {useReducer as $fh1mr$useReducer, useRef as $fh1mr$useRef, useEffect as $fh1mr$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $f86e6c1ec7da6ebb$var$reducer(data, action) {\n let selectedKeys;\n switch(data.state){\n case 'idle':\n case 'error':\n switch(action.type){\n case 'loading':\n case 'loadingMore':\n case 'sorting':\n case 'filtering':\n var _action_filterText, _action_sortDescriptor;\n return {\n ...data,\n filterText: (_action_filterText = action.filterText) !== null && _action_filterText !== void 0 ? _action_filterText : data.filterText,\n state: action.type,\n // Reset items to an empty list if loading, but not when sorting.\n items: action.type === 'loading' ? [] : data.items,\n sortDescriptor: (_action_sortDescriptor = action.sortDescriptor) !== null && _action_sortDescriptor !== void 0 ? _action_sortDescriptor : data.sortDescriptor,\n abortController: action.abortController\n };\n case 'update':\n var _action_updater;\n return {\n ...data,\n ...(_action_updater = action.updater) === null || _action_updater === void 0 ? void 0 : _action_updater.call(action, data)\n };\n case 'success':\n case 'error':\n return data;\n default:\n throw new Error(`Invalid action \"${action.type}\" in state \"${data.state}\"`);\n }\n case 'loading':\n case 'sorting':\n case 'filtering':\n switch(action.type){\n case 'success':\n // Ignore if there is a newer abortcontroller in state.\n // This means that multiple requests were going at once.\n // We want to take only the latest result.\n if (action.abortController !== data.abortController) return data;\n var _action_selectedKeys;\n selectedKeys = (_action_selectedKeys = action.selectedKeys) !== null && _action_selectedKeys !== void 0 ? _action_selectedKeys : data.selectedKeys;\n var _action_filterText1, _action_items, _action_sortDescriptor1;\n return {\n ...data,\n filterText: (_action_filterText1 = action.filterText) !== null && _action_filterText1 !== void 0 ? _action_filterText1 : data.filterText,\n state: 'idle',\n items: [\n ...(_action_items = action.items) !== null && _action_items !== void 0 ? _action_items : []\n ],\n selectedKeys: selectedKeys === 'all' ? 'all' : new Set(selectedKeys),\n sortDescriptor: (_action_sortDescriptor1 = action.sortDescriptor) !== null && _action_sortDescriptor1 !== void 0 ? _action_sortDescriptor1 : data.sortDescriptor,\n abortController: undefined,\n cursor: action.cursor\n };\n case 'error':\n if (action.abortController !== data.abortController) return data;\n return {\n ...data,\n state: 'error',\n error: action.error,\n abortController: undefined\n };\n case 'loading':\n case 'loadingMore':\n case 'sorting':\n case 'filtering':\n var // We're already loading, and another load was triggered at the same time.\n // We need to abort the previous load and start a new one.\n _data_abortController;\n (_data_abortController = data.abortController) === null || _data_abortController === void 0 ? void 0 : _data_abortController.abort();\n var _action_filterText2;\n return {\n ...data,\n filterText: (_action_filterText2 = action.filterText) !== null && _action_filterText2 !== void 0 ? _action_filterText2 : data.filterText,\n state: action.type,\n // Reset items to an empty list if loading, but not when sorting.\n items: action.type === 'loading' ? [] : data.items,\n abortController: action.abortController\n };\n case 'update':\n var _action_updater1;\n // We're already loading, and an update happened at the same time (e.g. selectedKey changed).\n // Update data but don't abort previous load.\n return {\n ...data,\n ...(_action_updater1 = action.updater) === null || _action_updater1 === void 0 ? void 0 : _action_updater1.call(action, data)\n };\n default:\n throw new Error(`Invalid action \"${action.type}\" in state \"${data.state}\"`);\n }\n case 'loadingMore':\n switch(action.type){\n case 'success':\n var _action_selectedKeys1;\n selectedKeys = data.selectedKeys === 'all' || action.selectedKeys === 'all' ? 'all' : new Set([\n ...data.selectedKeys,\n ...(_action_selectedKeys1 = action.selectedKeys) !== null && _action_selectedKeys1 !== void 0 ? _action_selectedKeys1 : []\n ]);\n var _action_items1, _action_sortDescriptor2;\n // Append the new items\n return {\n ...data,\n state: 'idle',\n items: [\n ...data.items,\n ...(_action_items1 = action.items) !== null && _action_items1 !== void 0 ? _action_items1 : []\n ],\n selectedKeys: selectedKeys,\n sortDescriptor: (_action_sortDescriptor2 = action.sortDescriptor) !== null && _action_sortDescriptor2 !== void 0 ? _action_sortDescriptor2 : data.sortDescriptor,\n abortController: undefined,\n cursor: action.cursor\n };\n case 'error':\n if (action.abortController !== data.abortController) return data;\n return {\n ...data,\n state: 'error',\n error: action.error\n };\n case 'loading':\n case 'sorting':\n case 'filtering':\n var // We're already loading more, and another load was triggered at the same time.\n // We need to abort the previous load more and start a new one.\n _data_abortController1;\n (_data_abortController1 = data.abortController) === null || _data_abortController1 === void 0 ? void 0 : _data_abortController1.abort();\n var _action_filterText3;\n return {\n ...data,\n filterText: (_action_filterText3 = action.filterText) !== null && _action_filterText3 !== void 0 ? _action_filterText3 : data.filterText,\n state: action.type,\n // Reset items to an empty list if loading, but not when sorting.\n items: action.type === 'loading' ? [] : data.items,\n abortController: action.abortController\n };\n case 'loadingMore':\n var // If already loading more and another loading more is triggered, abort the new load more since\n // it is a duplicate request since the cursor hasn't been updated.\n // Do not overwrite the data.abortController\n _action_abortController;\n (_action_abortController = action.abortController) === null || _action_abortController === void 0 ? void 0 : _action_abortController.abort();\n return data;\n case 'update':\n var _action_updater2;\n // We're already loading, and an update happened at the same time (e.g. selectedKey changed).\n // Update data but don't abort previous load.\n return {\n ...data,\n ...(_action_updater2 = action.updater) === null || _action_updater2 === void 0 ? void 0 : _action_updater2.call(action, data)\n };\n default:\n throw new Error(`Invalid action \"${action.type}\" in state \"${data.state}\"`);\n }\n default:\n throw new Error(`Invalid state \"${data.state}\"`);\n }\n}\nfunction $f86e6c1ec7da6ebb$export$bc3384a35de93d66(options) {\n const { load: load, sort: sort, initialSelectedKeys: initialSelectedKeys, initialSortDescriptor: initialSortDescriptor, getKey: getKey = (item)=>item.id || item.key, initialFilterText: initialFilterText = '' } = options;\n let [data, dispatch] = (0, $fh1mr$useReducer)($f86e6c1ec7da6ebb$var$reducer, {\n state: 'idle',\n error: undefined,\n items: [],\n selectedKeys: initialSelectedKeys === 'all' ? 'all' : new Set(initialSelectedKeys),\n sortDescriptor: initialSortDescriptor,\n filterText: initialFilterText\n });\n const dispatchFetch = async (action, fn)=>{\n let abortController = new AbortController();\n try {\n dispatch({\n ...action,\n abortController: abortController\n });\n var _action_filterText;\n let previousFilterText = (_action_filterText = action.filterText) !== null && _action_filterText !== void 0 ? _action_filterText : data.filterText;\n var _action_sortDescriptor;\n let response = await fn({\n items: data.items.slice(),\n selectedKeys: data.selectedKeys,\n sortDescriptor: (_action_sortDescriptor = action.sortDescriptor) !== null && _action_sortDescriptor !== void 0 ? _action_sortDescriptor : data.sortDescriptor,\n signal: abortController.signal,\n cursor: action.type === 'loadingMore' ? data.cursor : undefined,\n filterText: previousFilterText,\n loadingState: data.state\n });\n var _response_filterText;\n let filterText = (_response_filterText = response.filterText) !== null && _response_filterText !== void 0 ? _response_filterText : previousFilterText;\n dispatch({\n type: 'success',\n ...response,\n abortController: abortController\n });\n // Fetch a new filtered list if filterText is updated via `load` response func rather than list.setFilterText\n // Only do this if not aborted (e.g. user triggers another filter action before load completes)\n if (filterText && filterText !== previousFilterText && !abortController.signal.aborted) dispatchFetch({\n type: 'filtering',\n filterText: filterText\n }, load);\n } catch (e) {\n dispatch({\n type: 'error',\n error: e,\n abortController: abortController\n });\n }\n };\n let didDispatchInitialFetch = (0, $fh1mr$useRef)(false);\n (0, $fh1mr$useEffect)(()=>{\n if (!didDispatchInitialFetch.current) {\n dispatchFetch({\n type: 'loading'\n }, load);\n didDispatchInitialFetch.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return {\n items: data.items,\n selectedKeys: data.selectedKeys,\n sortDescriptor: data.sortDescriptor,\n isLoading: data.state === 'loading' || data.state === 'loadingMore' || data.state === 'sorting' || data.state === 'filtering',\n loadingState: data.state,\n error: data.error,\n filterText: data.filterText,\n getItem (key) {\n return data.items.find((item)=>getKey(item) === key);\n },\n reload () {\n dispatchFetch({\n type: 'loading'\n }, load);\n },\n loadMore () {\n // Ignore if already loading more or if performing server side filtering.\n if (data.state === 'loading' || data.state === 'loadingMore' || data.state === 'filtering' || data.cursor == null) return;\n dispatchFetch({\n type: 'loadingMore'\n }, load);\n },\n sort (sortDescriptor) {\n dispatchFetch({\n type: 'sorting',\n sortDescriptor: sortDescriptor\n }, sort || load);\n },\n ...(0, $0d86e9c8f07f9a7b$export$79c0c687a5963b0a)({\n ...options,\n getKey: getKey,\n cursor: data.cursor\n }, (fn)=>{\n dispatch({\n type: 'update',\n updater: fn\n });\n }),\n setFilterText (filterText) {\n dispatchFetch({\n type: 'filtering',\n filterText: filterText\n }, load);\n }\n };\n}\n\n\nexport {$f86e6c1ec7da6ebb$export$bc3384a35de93d66 as useAsyncList};\n//# sourceMappingURL=useAsyncList.module.js.map\n","import {ButtonContext as $d2b4bc8c273e7be6$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, removeDataAttributes as $64fa3d84918910a7$export$ef03459518577ad4, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $ee014567cb39d3f0$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FormContext as $d3e0e05bdfcf66bd$export$c24727297075ec6a} from \"./Form.mjs\";\nimport {GroupContext as $a049562f99e7db0e$export$f9c6924e160136d1} from \"./Group.mjs\";\nimport {InputContext as $3985021b0ad6602f$export$37fb8590cf2c088c} from \"./Input.mjs\";\nimport {LabelContext as $01b77f81d0f07f68$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {ListBoxContext as $eed445e0843c11d0$export$7ff8f37d2d81a48d, ListStateContext as $eed445e0843c11d0$export$7c5906fe4f1f2af2} from \"./ListBox.mjs\";\nimport {OverlayTriggerStateContext as $de32f1b87079253c$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {PopoverContext as $07b14b47974efb58$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {TextContext as $514c0188e459b4c0$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useFilter as $cP7hC$useFilter, useComboBox as $cP7hC$useComboBox} from \"react-aria\";\nimport {useComboBoxState as $cP7hC$useComboBoxState} from \"react-stately\";\nimport {CollectionBuilder as $cP7hC$CollectionBuilder} from \"@react-aria/collections\";\nimport {useResizeObserver as $cP7hC$useResizeObserver, filterDOMProps as $cP7hC$filterDOMProps} from \"@react-aria/utils\";\nimport $cP7hC$react, {createContext as $cP7hC$createContext, forwardRef as $cP7hC$forwardRef, useMemo as $cP7hC$useMemo, useRef as $cP7hC$useRef, useState as $cP7hC$useState, useCallback as $cP7hC$useCallback} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $d01f2c01039c0eec$export$d414ccceff7063c3 = /*#__PURE__*/ (0, $cP7hC$createContext)(null);\nconst $d01f2c01039c0eec$export$c02625b26074192c = /*#__PURE__*/ (0, $cP7hC$createContext)(null);\nconst $d01f2c01039c0eec$export$72b9695b8216309a = /*#__PURE__*/ (0, $cP7hC$forwardRef)(function ComboBox(props, ref) {\n [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $d01f2c01039c0eec$export$d414ccceff7063c3);\n let { children: children, isDisabled: isDisabled = false, isInvalid: isInvalid = false, isRequired: isRequired = false } = props;\n let content = (0, $cP7hC$useMemo)(()=>{\n var _props_items;\n return /*#__PURE__*/ (0, $cP7hC$react).createElement((0, $eed445e0843c11d0$export$7ff8f37d2d81a48d).Provider, {\n value: {\n items: (_props_items = props.items) !== null && _props_items !== void 0 ? _props_items : props.defaultItems\n }\n }, typeof children === 'function' ? children({\n isOpen: false,\n isDisabled: isDisabled,\n isInvalid: isInvalid,\n isRequired: isRequired,\n defaultChildren: null\n }) : children);\n }, [\n children,\n isDisabled,\n isInvalid,\n isRequired,\n props.items,\n props.defaultItems\n ]);\n return /*#__PURE__*/ (0, $cP7hC$react).createElement((0, $cP7hC$CollectionBuilder), {\n content: content\n }, (collection)=>/*#__PURE__*/ (0, $cP7hC$react).createElement($d01f2c01039c0eec$var$ComboBoxInner, {\n props: props,\n collection: collection,\n comboBoxRef: ref\n }));\n});\n// Contexts to clear inside the popover.\nconst $d01f2c01039c0eec$var$CLEAR_CONTEXTS = [\n (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n (0, $d2b4bc8c273e7be6$export$24d547caef80ccd1),\n (0, $3985021b0ad6602f$export$37fb8590cf2c088c),\n (0, $a049562f99e7db0e$export$f9c6924e160136d1),\n (0, $514c0188e459b4c0$export$9afb8bc826b033ea)\n];\nfunction $d01f2c01039c0eec$var$ComboBoxInner({ props: props, collection: collection, comboBoxRef: ref }) {\n let { name: name, formValue: formValue = 'key', allowsCustomValue: allowsCustomValue } = props;\n if (allowsCustomValue) formValue = 'text';\n let { validationBehavior: formValidationBehavior } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)((0, $d3e0e05bdfcf66bd$export$c24727297075ec6a)) || {};\n var _props_validationBehavior, _ref;\n let validationBehavior = (_ref = (_props_validationBehavior = props.validationBehavior) !== null && _props_validationBehavior !== void 0 ? _props_validationBehavior : formValidationBehavior) !== null && _ref !== void 0 ? _ref : 'native';\n let { contains: contains } = (0, $cP7hC$useFilter)({\n sensitivity: 'base'\n });\n let state = (0, $cP7hC$useComboBoxState)({\n defaultFilter: props.defaultFilter || contains,\n ...props,\n // If props.items isn't provided, rely on collection filtering (aka listbox.items is provided or defaultItems provided to Combobox)\n items: props.items,\n children: undefined,\n collection: collection,\n validationBehavior: validationBehavior\n });\n let buttonRef = (0, $cP7hC$useRef)(null);\n let inputRef = (0, $cP7hC$useRef)(null);\n let listBoxRef = (0, $cP7hC$useRef)(null);\n let popoverRef = (0, $cP7hC$useRef)(null);\n let [labelRef, label] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n let { buttonProps: buttonProps, inputProps: inputProps, listBoxProps: listBoxProps, labelProps: labelProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $cP7hC$useComboBox)({\n ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n label: label,\n inputRef: inputRef,\n buttonRef: buttonRef,\n listBoxRef: listBoxRef,\n popoverRef: popoverRef,\n name: formValue === 'text' ? name : undefined,\n validationBehavior: validationBehavior\n }, state);\n // Make menu width match input + button\n let [menuWidth, setMenuWidth] = (0, $cP7hC$useState)(null);\n let onResize = (0, $cP7hC$useCallback)(()=>{\n if (inputRef.current) {\n var _buttonRef_current;\n let buttonRect = (_buttonRef_current = buttonRef.current) === null || _buttonRef_current === void 0 ? void 0 : _buttonRef_current.getBoundingClientRect();\n let inputRect = inputRef.current.getBoundingClientRect();\n let minX = buttonRect ? Math.min(buttonRect.left, inputRect.left) : inputRect.left;\n let maxX = buttonRect ? Math.max(buttonRect.right, inputRect.right) : inputRect.right;\n setMenuWidth(maxX - minX + 'px');\n }\n }, [\n buttonRef,\n inputRef,\n setMenuWidth\n ]);\n (0, $cP7hC$useResizeObserver)({\n ref: inputRef,\n onResize: onResize\n });\n // Only expose a subset of state to renderProps function to avoid infinite render loop\n let renderPropsState = (0, $cP7hC$useMemo)(()=>({\n isOpen: state.isOpen,\n isDisabled: props.isDisabled || false,\n isInvalid: validation.isInvalid || false,\n isRequired: props.isRequired || false\n }), [\n state.isOpen,\n props.isDisabled,\n validation.isInvalid,\n props.isRequired\n ]);\n let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n ...props,\n values: renderPropsState,\n defaultClassName: 'react-aria-ComboBox'\n });\n let DOMProps = (0, $cP7hC$filterDOMProps)(props, {\n global: true\n });\n delete DOMProps.id;\n var _state_selectedKey;\n return /*#__PURE__*/ (0, $cP7hC$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n values: [\n [\n $d01f2c01039c0eec$export$c02625b26074192c,\n state\n ],\n [\n (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n {\n ...labelProps,\n ref: labelRef\n }\n ],\n [\n (0, $d2b4bc8c273e7be6$export$24d547caef80ccd1),\n {\n ...buttonProps,\n ref: buttonRef,\n isPressed: state.isOpen\n }\n ],\n [\n (0, $3985021b0ad6602f$export$37fb8590cf2c088c),\n {\n ...inputProps,\n ref: inputRef\n }\n ],\n [\n (0, $de32f1b87079253c$export$d2f961adcb0afbe),\n state\n ],\n [\n (0, $07b14b47974efb58$export$9b9a0cd73afb7ca4),\n {\n ref: popoverRef,\n triggerRef: inputRef,\n scrollRef: listBoxRef,\n placement: 'bottom start',\n isNonModal: true,\n trigger: 'ComboBox',\n style: {\n '--trigger-width': menuWidth\n },\n clearContexts: $d01f2c01039c0eec$var$CLEAR_CONTEXTS\n }\n ],\n [\n (0, $eed445e0843c11d0$export$7ff8f37d2d81a48d),\n {\n ...listBoxProps,\n ref: listBoxRef\n }\n ],\n [\n (0, $eed445e0843c11d0$export$7c5906fe4f1f2af2),\n state\n ],\n [\n (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n {\n slots: {\n description: descriptionProps,\n errorMessage: errorMessageProps\n }\n }\n ],\n [\n (0, $a049562f99e7db0e$export$f9c6924e160136d1),\n {\n isInvalid: validation.isInvalid,\n isDisabled: props.isDisabled || false\n }\n ],\n [\n (0, $ee014567cb39d3f0$export$ff05c3ac10437e03),\n validation\n ]\n ]\n }, /*#__PURE__*/ (0, $cP7hC$react).createElement(\"div\", {\n ...DOMProps,\n ...renderProps,\n ref: ref,\n slot: props.slot || undefined,\n \"data-focused\": state.isFocused || undefined,\n \"data-open\": state.isOpen || undefined,\n \"data-disabled\": props.isDisabled || undefined,\n \"data-invalid\": validation.isInvalid || undefined,\n \"data-required\": props.isRequired || undefined\n }), name && formValue === 'key' && /*#__PURE__*/ (0, $cP7hC$react).createElement(\"input\", {\n type: \"hidden\",\n name: name,\n form: props.form,\n value: (_state_selectedKey = state.selectedKey) !== null && _state_selectedKey !== void 0 ? _state_selectedKey : ''\n }));\n}\n\n\nexport {$d01f2c01039c0eec$export$d414ccceff7063c3 as ComboBoxContext, $d01f2c01039c0eec$export$c02625b26074192c as ComboBoxStateContext, $d01f2c01039c0eec$export$72b9695b8216309a as ComboBox};\n//# sourceMappingURL=ComboBox.module.js.map\n","import{useRef as r,useMemo as n,useEffect as t,useState as e,useCallback as u}from\"react\";function c(e,u,c,i){var l=this,a=r(null),o=r(0),f=r(0),v=r(null),d=r([]),m=r(),s=r(),g=r(e),h=r(!0),x=r(),E=r();g.current=e;var b=\"undefined\"!=typeof window,p=!u&&0!==u&&b;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var y=!!(c=c||{}).leading,w=!(\"trailing\"in c)||!!c.trailing,O=!!c.flushOnExit&&w,F=\"maxWait\"in c,L=\"debounceOnServer\"in c&&!!c.debounceOnServer,A=F?Math.max(+c.maxWait||0,u):null,D=n(function(){var r=function(r){var n=d.current,t=m.current;return d.current=m.current=null,o.current=r,f.current=f.current||r,s.current=g.current.apply(t,n)},n=function(r,n){p&&cancelAnimationFrame(v.current),v.current=p?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!h.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||F&&r-o.current>=A},e=function(n){return v.current=null,w&&d.current?r(n):(d.current=m.current=null,s.current)},c=function r(){var c=Date.now();if(y&&f.current===o.current&&D(),t(c))return e(c);if(h.current){var i=u-(c-a.current),l=F?Math.min(i,A-(c-o.current)):i;n(r,l)}},D=function(){i&&i({})},S=function(){if(b||L){var e,i=Date.now(),f=t(i);if(d.current=[].slice.call(arguments),m.current=l,a.current=i,O&&!x.current&&(x.current=function(){var r;\"hidden\"===(null==(r=global.document)?void 0:r.visibilityState)&&E.current.flush()},null==(e=global.document)||null==e.addEventListener||e.addEventListener(\"visibilitychange\",x.current)),f){if(!v.current&&h.current)return o.current=a.current,n(c,u),y?r(a.current):s.current;if(F)return n(c,u),r(a.current)}return v.current||n(c,u),s.current}};return S.cancel=function(){var r=v.current;r&&(p?cancelAnimationFrame(v.current):clearTimeout(v.current)),o.current=0,d.current=a.current=m.current=v.current=null,r&&i&&i({})},S.isPending=function(){return!!v.current},S.flush=function(){return v.current?e(Date.now()):s.current},S},[y,F,u,A,w,O,p,b,L,i]);return E.current=D,t(function(){return h.current=!0,function(){var r;O&&E.current.flush(),x.current&&(null==(r=global.document)||null==r.removeEventListener||r.removeEventListener(\"visibilitychange\",x.current),x.current=null),h.current=!1}},[O]),D}function i(r,n){return r===n}function l(n,t,l){var a=l&&l.equalityFn||i,o=r(n),f=e({})[1],v=c(u(function(r){o.current=r,f({})},[f]),t,l,f),d=r(n);return a(d.current,n)||(v(n),d.current=n),[o.current,v]}function a(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing,l=e.flushOnExit;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i,flushOnExit:void 0!==l&&l})}export{l as useDebounce,c as useDebouncedCallback,a as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { createSlotRecipeContext } from \"@chakra-ui/react\";\n\nimport type {\n ComboBoxRootSlotProps,\n ComboBoxTriggerSlotProps,\n ComboBoxLeadingElementSlotProps,\n ComboBoxContentSlotProps,\n ComboBoxTagGroupSlotProps,\n ComboBoxInputSlotProps,\n ComboBoxPopoverSlotProps,\n ComboBoxListBoxSlotProps,\n ComboBoxSectionSlotProps,\n ComboBoxOptionSlotProps,\n ComboBoxOptionIndicatorSlotProps,\n ComboBoxOptionContentSlotProps,\n} from \"./combobox.types\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n key: \"combobox\",\n});\n\n// Root slot - container for entire combobox (provides recipe context)\nexport const ComboBoxRootSlot = withProvider<\n HTMLDivElement,\n ComboBoxRootSlotProps\n>(\"div\", \"root\");\n\n// Trigger slot - container for input trigger area (input + tags + buttons)\nexport const ComboBoxTriggerSlot = withContext<\n HTMLDivElement,\n ComboBoxTriggerSlotProps\n>(\"div\", \"trigger\");\n\n// LeadingElement slot - wrapper for leading element (icon, etc.)\nexport const ComboBoxLeadingElementSlot = withContext<\n HTMLDivElement,\n ComboBoxLeadingElementSlotProps\n>(\"div\", \"leadingElement\");\n\n// Content slot - wrapper for tags and input (flex container within grid)\nexport const ComboBoxContentSlot = withContext<\n HTMLDivElement,\n ComboBoxContentSlotProps\n>(\"div\", \"content\");\n\n// TagGroup slot - container for selected tags (multi-select)\nexport const ComboBoxTagGroupSlot = withContext<\n HTMLDivElement,\n ComboBoxTagGroupSlotProps\n>(\"div\", \"tagGroup\");\n\n// Input slot - wrapper for React Aria Input component\nexport const ComboBoxInputSlot = withContext<\n HTMLDivElement,\n ComboBoxInputSlotProps\n>(\"div\", \"input\");\n\n// Popover slot - wrapper for popover containing listbox\nexport const ComboBoxPopoverSlot = withContext<\n HTMLDivElement,\n ComboBoxPopoverSlotProps\n>(\"div\", \"popover\");\n\n// ListBox slot - wrapper for React Aria ListBox (used by ComboBox.ListBox component)\nexport const ComboBoxListBoxSlot = withContext<\n HTMLDivElement,\n ComboBoxListBoxSlotProps\n>(\"div\", \"listBox\");\n\n// Section slot - section grouping wrapper (wraps React Aria Section)\nexport const ComboBoxSectionSlot = withContext<\n HTMLDivElement,\n ComboBoxSectionSlotProps\n>(\"div\", \"section\");\n\n// Option slot - individual option wrapper (wraps React Aria ListBoxItem)\nexport const ComboBoxOptionSlot = withContext<\n HTMLDivElement,\n ComboBoxOptionSlotProps\n>(\"div\", \"option\");\n\n// Option indicator slot - checkbox/checkmark indicator for multi-select\nexport const ComboBoxOptionIndicatorSlot = withContext<\n HTMLDivElement,\n ComboBoxOptionIndicatorSlotProps\n>(\"div\", \"optionIndicator\");\n\n// Option content slot - wrapper for option text content\nexport const ComboBoxOptionContentSlot = withContext<\n HTMLDivElement,\n ComboBoxOptionContentSlotProps\n>(\"div\", \"optionContent\");\n","/**\n * Pre-compiled en messages for ComboBox\n * Generated by @internationalized/string-compiler\n * DO NOT EDIT MANUALLY\n */\n\nexport default {\n clearSelection: `Clear selection`,\n toggleOptions: `Toggle options`,\n selectedValues: `Selected values`,\n options: `Options menu`,\n};\n","/**\n * Pre-compiled de messages for ComboBox\n * Generated by @internationalized/string-compiler\n * DO NOT EDIT MANUALLY\n */\n\nexport default {\n clearSelection: `Auswahl löschen`,\n toggleOptions: `Optionen umschalten`,\n selectedValues: `Ausgewählte Werte`,\n options: `Optionsmenü`,\n};\n","/**\n * Pre-compiled es messages for ComboBox\n * Generated by @internationalized/string-compiler\n * DO NOT EDIT MANUALLY\n */\n\nexport default {\n clearSelection: `Borrar selección`,\n toggleOptions: `Alternar opciones`,\n selectedValues: `Valores seleccionados`,\n options: `Menú de opciones`,\n};\n","/**\n * Pre-compiled fr-FR messages for ComboBox\n * Generated by @internationalized/string-compiler\n * DO NOT EDIT MANUALLY\n */\n\nexport default {\n clearSelection: `Effacer la sélection`,\n toggleOptions: `Basculer les options`,\n selectedValues: `Valeurs sélectionnées`,\n options: `Menu des options`,\n};\n","/**\n * Pre-compiled pt-BR messages for ComboBox\n * Generated by @internationalized/string-compiler\n * DO NOT EDIT MANUALLY\n */\n\nexport default {\n clearSelection: `Limpar seleção`,\n toggleOptions: `Alternar opções`,\n selectedValues: `Valores selecionados`,\n options: `Menu de opções`,\n};\n","/**\n * Pre-compiled localized messages for Combobox component\n *\n * Generated by scripts/generate-dictionaries.ts\n * DO NOT EDIT MANUALLY\n *\n * @see https://react-spectrum.adobe.com/react-aria/internationalization.html\n */\n\nimport {\n type LocalizedString,\n type LocalizedStrings,\n} from \"@internationalized/string\";\nimport { normalizeMessages } from \"../../utils/normalize-messages\";\n\n// Pre-compiled message functions\nimport comboboxMessages_en from \"./intl/en\";\nimport comboboxMessages_de from \"./intl/de\";\nimport comboboxMessages_es from \"./intl/es\";\nimport comboboxMessages_fr from \"./intl/fr-FR\";\nimport comboboxMessages_pt from \"./intl/pt-BR\";\n\n// Raw LocalizedStrings object for use with useLocalizedStringFormatter hook\nexport const comboboxMessagesStrings: LocalizedStrings<\n string,\n LocalizedString\n> = {\n en: normalizeMessages(comboboxMessages_en),\n de: normalizeMessages(comboboxMessages_de),\n es: normalizeMessages(comboboxMessages_es),\n \"fr-FR\": normalizeMessages(comboboxMessages_fr),\n \"pt-BR\": normalizeMessages(comboboxMessages_pt),\n} as LocalizedStrings<string, LocalizedString>;\n\n/**\n * Available message keys for Combobox component\n */\nexport type ComboboxMessageKey =\n | \"clearSelection\"\n | \"toggleOptions\"\n | \"selectedValues\"\n | \"options\";\n","import { type Key } from \"react-stately\";\n/**\n * Default key extractor - uses string/number id or object with id property\n */\nexport function defaultGetKey<T extends object>(\n item: T | string | number\n): Key {\n if (typeof item === \"string\" || typeof item === \"number\") {\n return item as Key;\n }\n if (\"id\" in item) {\n return (item as { id: Key }).id;\n }\n throw new Error(\n \"ComboBox - Item must have an 'id' property or provide getKey function\"\n );\n}\n\n/**\n * Default text value extractor - uses string item or object with name property\n */\nexport function defaultGetTextValue<T extends object>(\n item: T | string\n): string {\n if (typeof item === \"string\") {\n return item;\n }\n if (\"name\" in item) {\n return String((item as { name: unknown }).name);\n }\n if (\"label\" in item) {\n return String((item as { label: unknown }).label);\n }\n console.warn(\n \"ComboBox - Item should have 'name' or 'label' property. Provide a getTextValue function to ensure proper item display and filtering.\"\n );\n return String(item);\n}\n\n/**\n * Default getNewOptionData - creates an object with id and name\n */\nexport function defaultGetNewOptionData<T extends object>(\n inputValue: string\n): T {\n return {\n id: inputValue,\n name: inputValue,\n } as T;\n}\n","import { type Key } from \"react-stately\";\n/**\n * Normalize selectedKeys to Set format\n */\nexport const normalizeSelectedKeys = (\n keys: Key | Key[] | undefined | null\n): Set<Key> => {\n if (!keys) return new Set();\n if (keys instanceof Set) return keys;\n return new Set(Array.isArray(keys) ? keys : [keys]);\n};\n\n/**\n * Denormalize selectedKeys from Set to array\n * Always returns an array regardless of selection mode for simpler API\n */\nexport const denormalizeSelectedKeys = (keys: Set<Key>): Key[] => {\n return Array.from(keys);\n};\n","import { createContext, useContext } from \"react\";\nimport type { ComboBoxRootContextValue } from \"../combobox.types\";\n\n/**\n * Context for ComboBox state and configuration.\n * Uses 'object' as the generic type since different ComboBox instances\n * can have different item types, and TypeScript can't track this through context.\n */\nexport const ComboBoxRootContext =\n createContext<ComboBoxRootContextValue<object> | null>(null);\n\n/**\n * Hook to access ComboBox context with proper typing.\n * The generic type T represents the item type used in the ComboBox.\n * At runtime, the context contains the correct type from ComboBox.Root.\n */\nexport const useComboBoxRootContext = <\n T extends object = object,\n>(): ComboBoxRootContextValue<T> => {\n const context = useContext(ComboBoxRootContext);\n if (!context) {\n throw new Error(\n \"Nimbus - ComboBox components must be used within ComboBox.Root\"\n );\n }\n // Type assertion is safe: ComboBox.Root provides the context with type T,\n // but TypeScript can't track generics through context at compile time.\n // We use 'unknown' as an intermediate step to satisfy TypeScript's strict checking.\n return context as unknown as ComboBoxRootContextValue<T>;\n};\n","import { useMemo } from \"react\";\nimport type { ComboBoxHiddenInputProps } from \"../combobox.types\";\n\n/**\n * # ComboBoxHiddenInput (Internal Component)\n *\n * Hidden input element for form submission.\n * Follows React Aria's pattern for ComboBox form integration.\n *\n * By default, submits the selected item's key.\n * When formValue=\"text\" or allowsCustomOptions=true, submits the text value instead.\n *\n * @see https://react-spectrum.adobe.com/react-aria/ComboBox.html#html-forms\n * @internal\n */\nexport const ComboBoxHiddenInput = <T extends object>(\n props: ComboBoxHiddenInputProps<T>\n) => {\n const {\n name,\n form,\n selectedKeys,\n selectionMode,\n formValue,\n allowsCustomOptions,\n collection,\n inputValue,\n } = props;\n\n // Don't render if no name prop provided\n if (!name) return null;\n\n // Compute the value for form submission based on formValue prop\n // Following React Aria's pattern: https://react-spectrum.adobe.com/react-aria/ComboBox.html#html-forms\n const value = useMemo(() => {\n if (selectionMode === \"single\") {\n const selectedKey = Array.from(selectedKeys)[0];\n if (!selectedKey) return \"\";\n\n // If formValue is \"text\" or allowsCustomOptions is true, submit the text\n if (formValue === \"text\" || allowsCustomOptions) {\n // Find the selected item and return its text value\n const selectedItem = Array.from(collection).find(\n (node) => node.key === selectedKey\n );\n return selectedItem?.textValue || inputValue || \"\";\n }\n // Default: return the key\n return String(selectedKey);\n } else {\n // Multi-select: return comma-separated values\n const keys = Array.from(selectedKeys);\n if (formValue === \"text\" || allowsCustomOptions) {\n return keys\n .map((key) => {\n const item = Array.from(collection).find(\n (node) => node.key === key\n );\n return item?.textValue || \"\";\n })\n .filter(Boolean)\n .join(\",\");\n }\n // Default: return comma-separated keys\n return keys.join(\",\");\n }\n }, [\n selectionMode,\n selectedKeys,\n formValue,\n allowsCustomOptions,\n collection,\n inputValue,\n ]);\n\n return (\n <input\n type=\"hidden\"\n name={name}\n form={typeof form === \"string\" ? form : undefined}\n value={value}\n />\n );\n};\n\nComboBoxHiddenInput.displayName = \"ComboBoxHiddenInput\";\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type RefObject,\n} from \"react\";\n\nimport { useSlotRecipe } from \"@chakra-ui/react/styled-system\";\nimport {\n useListState,\n useAsyncList,\n type Node,\n type Key,\n type Collection,\n} from \"react-stately\";\nimport { useId } from \"react-aria\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport {\n CollectionBuilder,\n ComboBoxContext,\n useContextProps,\n Provider,\n InputContext,\n ButtonContext,\n GroupContext,\n TextContext,\n PopoverContext,\n LabelContext,\n ListBoxContext,\n TagGroupContext,\n ListStateContext,\n SelectableCollectionContext,\n type Selection,\n} from \"react-aria-components\";\nimport { useLocalizedStringFormatter } from \"@/hooks\";\nimport { extractStyleProps } from \"@/utils\";\nimport { ComboBoxRootSlot } from \"../combobox.slots\";\nimport type {\n ComboBoxRootProps,\n ComboBoxRootContextValue,\n ComboBoxAsyncConfig,\n} from \"../combobox.types\";\nimport { comboboxMessagesStrings } from \"../combobox.messages\";\nimport {\n defaultGetKey,\n defaultGetTextValue,\n defaultGetNewOptionData,\n} from \"../utils/collection\";\nimport {\n normalizeSelectedKeys,\n denormalizeSelectedKeys,\n} from \"../utils/selection\";\nimport {\n ComboBoxRootContext,\n useComboBoxRootContext,\n} from \"./combobox.root-context\";\nimport { ComboBoxHiddenInput } from \"./combobox.hidden-input\";\n\n/**\n * # ComboBox.Root\n *\n * Root component for ComboBox that provides state management and context for all child components.\n * Handles selection state, input filtering, menu open/close, and custom option creation.\n *\n * @example\n * ```tsx\n * <ComboBox.Root\n * items={items}\n * getKey={(item) => item.id}\n * getTextValue={(item) => item.name}\n * onSelectionChange={(keys) => console.log(keys)}\n * >\n * <ComboBox.Trigger>\n * <ComboBox.Input />\n * </ComboBox.Trigger>\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * ```\n *\n * @supportsStyleProps\n */\n\nexport function ComboBoxRoot<T extends object>(props: ComboBoxRootProps<T>) {\n // Merge props from React Aria's ComboBoxContext if nested in another ComboBox\n let ref: RefObject<HTMLDivElement | null>;\n [props, ref] = useContextProps(props, null, ComboBoxContext);\n\n const {\n selectionMode = \"single\",\n size = \"md\",\n getKey = defaultGetKey,\n getTextValue = defaultGetTextValue,\n children,\n leadingElement,\n inputValue: inputValueFromProps,\n onInputChange: onInputChangeFromProps,\n isLoading: isLoadingFromProps,\n allowsEmptyMenu: allowsEmptyMenuFromProps,\n renderEmptyState: renderEmptyStateFromProps,\n async: asyncConfig,\n filter,\n allowsCustomOptions = false,\n isDisabled = false,\n isInvalid = false,\n isRequired = false,\n isReadOnly = false,\n } = props;\n\n // Standard pattern: split recipe variants, then extract style props\n const recipe = useSlotRecipe({ key: \"combobox\" });\n const [recipeProps, restRecipeProps] = recipe.splitVariantProps(props);\n const [styleProps, functionalProps] = extractStyleProps(restRecipeProps);\n\n // Refs shared with children via context\n // - triggerRef: positions popover relative to trigger element\n // - inputRef: allows trigger to programmatically focus input\n const triggerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // ============================================================\n // CUSTOM OPTIONS HANDLING\n // ============================================================\n // Track custom-created items (when allowsCustomOptions=true)\n // Managed in outer component to persist across searches/renders\n const [customCreatedItems, setCustomCreatedItems] = useState<T[]>([]);\n\n // ============================================================\n // ASYNC MODE HANDLING\n // ============================================================\n // When `async` prop provided: useAsyncList manages loading, debouncing, and fetching\n // Users provide load function + optional config (minSearchLength, debounce, onError)\n const asyncList = useAsyncList<T>({\n getKey,\n async load({ signal, filterText }) {\n if (!asyncConfig) return { items: [] };\n\n // Check minimum search length\n const minLength = asyncConfig.minSearchLength ?? 0;\n if (!filterText || filterText.length < minLength) {\n return { items: [] };\n }\n\n try {\n const items = await asyncConfig.load(filterText, signal);\n return { items };\n } catch (err) {\n // Ignore abort errors (expected when request is cancelled)\n if ((err as Error).name === \"AbortError\") {\n throw err;\n }\n // Call user's error handler if provided\n const error = err as Error;\n asyncConfig.onError?.(error);\n return { items: [] };\n }\n },\n });\n\n // Async mode state\n const [asyncInputValue, setAsyncInputValue] = useState(inputValueFromProps); // For immediate UI updates\n const [asyncPending, setAsyncPending] = useState(false); // Tracks debounce wait period\n const [asyncSelectedItems, setAsyncSelectedItems] = useState<T[]>([]); // Persist selected items across searches\n\n // Debounced filter text update (triggers load function after delay)\n const debounceMs = asyncConfig?.debounce ?? 300;\n const debouncedSetFilterText = useDebouncedCallback((value: string) => {\n setAsyncPending(false);\n asyncList.setFilterText(value); // Triggers load function\n }, debounceMs);\n\n // Input change handler for async mode\n const asyncOnInputChange = useCallback(\n (value: string) => {\n setAsyncInputValue(value); // Immediate display update\n setAsyncPending(true); // Show loading during debounce\n debouncedSetFilterText(value); // Trigger debounced API call\n },\n [debouncedSetFilterText]\n );\n\n // ============================================================\n // PROP ALIASING\n // ============================================================\n // Route props to async handlers when async mode is enabled\n\n const inputValue = asyncConfig ? asyncInputValue : inputValueFromProps;\n const onInputChange = asyncConfig\n ? asyncOnInputChange\n : onInputChangeFromProps;\n\n // Compute loading state from async list or external prop\n const isLoading = asyncConfig\n ? asyncPending ||\n asyncList.loadingState === \"loading\" ||\n asyncList.loadingState === \"loadingMore\" ||\n asyncList.loadingState === \"filtering\"\n : isLoadingFromProps;\n\n // Keep menu open when empty for async/custom options (required for creating custom options)\n const allowsEmptyMenu =\n asyncConfig || allowsCustomOptions ? true : allowsEmptyMenuFromProps;\n\n // Default empty state messages\n const asyncDefaultRenderEmptyState = useCallback(() => {\n // TODO: verify wording and styling for empty states\n if (isLoading) {\n return inputValue?.length\n ? `loading results for \"${inputValue}\"`\n : \"loading results\";\n }\n if (\n inputValue?.length &&\n asyncConfig?.minSearchLength &&\n inputValue.length >= asyncConfig.minSearchLength\n ) {\n return `no results for \"${inputValue}\"`;\n }\n if (asyncConfig?.minSearchLength) {\n return `enter at least ${asyncConfig?.minSearchLength} characters`;\n }\n return \"type to search\";\n }, [asyncConfig?.minSearchLength, isLoading, inputValue]);\n\n const customDefaultRenderEmptyState = useCallback(() => {\n // TODO: verify wording and styling for empty states\n if (isLoading) {\n return inputValue?.length\n ? `loading results for \"${inputValue}\"`\n : \"loading results\";\n }\n return `hit \"enter\" to create an option`;\n }, [isLoading, inputValue]);\n\n const defaultRenderEmptyState = allowsCustomOptions\n ? customDefaultRenderEmptyState\n : asyncConfig\n ? asyncDefaultRenderEmptyState\n : undefined;\n\n const renderEmptyState = defaultRenderEmptyState ?? renderEmptyStateFromProps;\n\n // ============================================================\n // ITEMS MERGING\n // ============================================================\n // Merge items from all sources: async/static + custom created + selected (async multi-select)\n const items = useMemo(() => {\n const baseItems = asyncConfig ? Array.from(asyncList.items) : props.items;\n const baseItemsArray = baseItems ? Array.from(baseItems) : [];\n\n // Deduplicate: add custom items not in base\n const existingKeys = new Set(baseItemsArray.map((item) => getKey(item)));\n const customItemsToAdd = customCreatedItems.filter(\n (item) => !existingKeys.has(getKey(item))\n );\n let mergedItems = [...customItemsToAdd, ...baseItemsArray];\n\n // Async multi-select: add selected items not in current results\n if (\n asyncConfig &&\n selectionMode === \"multiple\" &&\n asyncSelectedItems.length > 0\n ) {\n const mergedKeys = new Set(mergedItems.map((item) => getKey(item)));\n const selectedItemsToAdd = asyncSelectedItems.filter(\n (item) => !mergedKeys.has(getKey(item))\n );\n mergedItems = [...selectedItemsToAdd, ...mergedItems];\n }\n\n return mergedItems;\n }, [\n asyncConfig,\n asyncList.items,\n props.items,\n customCreatedItems,\n asyncSelectedItems,\n selectionMode,\n getKey,\n ]);\n\n // Context value: static configuration and refs shared with all children\n const rootContextValue: ComboBoxRootContextValue<T> = useMemo(\n () => ({\n selectionMode,\n size,\n getKey,\n getTextValue,\n leadingElement,\n triggerRef,\n inputRef,\n isLoading,\n isDisabled,\n isRequired,\n isInvalid,\n isReadOnly,\n }),\n [\n selectionMode,\n getKey,\n getTextValue,\n leadingElement,\n triggerRef,\n inputRef,\n isDisabled,\n isRequired,\n isInvalid,\n isReadOnly,\n ]\n );\n\n // Transform items to add id and textValue properties using getKey and getTextValue\n // This ensures CollectionBuilder can determine keys and the filter can work properly\n const itemsWithMetadata = useMemo(() => {\n if (!items) return undefined;\n return Array.from(items).map((item) => {\n const hasId = \"id\" in item;\n const hasTextValue = \"textValue\" in item;\n\n // If item already has both properties, don't transform it\n if (hasId && hasTextValue) return item;\n\n // Add missing properties using getKey and getTextValue\n return {\n ...item,\n ...(hasId ? {} : { id: getKey(item) }),\n ...(hasTextValue ? {} : { textValue: getTextValue(item) }),\n };\n });\n }, [items, getKey, getTextValue]);\n\n // Build content for CollectionBuilder\n //\n // CRITICAL: This content is built in the OUTER component (ComboBoxRoot) and memoized.\n // If built in the inner component, the collection would be rebuilt every time the menu\n // toggles open/closed, causing:\n // - Loss of virtual focus state when menu reopens\n // - Performance issues from re-parsing JSX tree on every toggle\n // - TagGroup losing track of selected items between renders\n //\n // By building here and passing the stable collection down, we ensure:\n // - Collection persists across menu open/close cycles\n // - Virtual focus state is maintained\n // - Selected items in TagGroup remain stable\n //\n // React Aria's CollectionBuilder parses this JSX tree into a Collection object\n // that both ListBox (options menu) and TagGroup (selected tags) can consume.\n const content = useMemo(\n () => (\n <ComboBoxRootContext.Provider\n value={rootContextValue as ComboBoxRootContextValue<object>}\n >\n <ListBoxContext.Provider value={{ items: itemsWithMetadata }}>\n {typeof children === \"function\"\n ? children({\n isOpen: false,\n isDisabled,\n isInvalid,\n isRequired,\n defaultChildren: null,\n } as T & {\n defaultChildren: null;\n isOpen: boolean;\n isDisabled: boolean;\n isInvalid: boolean;\n isRequired: boolean;\n })\n : children}\n </ListBoxContext.Provider>\n </ComboBoxRootContext.Provider>\n ),\n [\n children,\n isDisabled,\n isInvalid,\n isRequired,\n itemsWithMetadata,\n rootContextValue,\n ]\n );\n\n return (\n <Provider\n // clear child contexts so that parent wrappers do not affect this component\n values={[\n [ButtonContext, {}],\n [InputContext, {}],\n [TagGroupContext, {}],\n ]}\n >\n <ComboBoxRootContext.Provider\n value={rootContextValue as ComboBoxRootContextValue<object>}\n >\n <ComboBoxRootSlot\n ref={ref}\n {...recipeProps}\n {...styleProps}\n size={size}\n data-disabled={isDisabled}\n data-invalid={isInvalid}\n data-required={isRequired}\n data-readonly={isReadOnly}\n data-open={props.isOpen}\n role=\"group\"\n >\n {/* CollectionBuilder parses 'content' JSX into a Collection object */}\n <CollectionBuilder content={content}>\n {(collection) => (\n // Pass the built collection to ComboBoxRootInner which handles all behavior\n <ComboBoxRootInner<T>\n {...functionalProps}\n size={size}\n filter={filter}\n selectionMode={selectionMode}\n inputValue={inputValue}\n onInputChange={onInputChange}\n getKey={getKey}\n getTextValue={getTextValue}\n allowsEmptyMenu={allowsEmptyMenu}\n renderEmptyState={renderEmptyState}\n isDisabled={isDisabled}\n isRequired={isRequired}\n isInvalid={isInvalid}\n isReadOnly={isReadOnly}\n collection={collection as unknown as Collection<Node<T>>}\n allowsCustomOptions={allowsCustomOptions}\n asyncConfig={asyncConfig}\n onAsyncSelectedItemsChange={\n asyncConfig && selectionMode === \"multiple\"\n ? setAsyncSelectedItems\n : undefined\n }\n onAddCustomItem={setCustomCreatedItems}\n onAddAsyncSelectedItem={setAsyncSelectedItems}\n />\n )}\n </CollectionBuilder>\n </ComboBoxRootSlot>\n </ComboBoxRootContext.Provider>\n </Provider>\n );\n}\n\nComboBoxRoot.displayName = \"ComboBox.Root\";\n\ntype ComboBoxRootInnerProps<T extends object> = ComboBoxRootProps<T> & {\n collection: Collection<Node<T>>;\n asyncConfig?: ComboBoxAsyncConfig<T>;\n onAsyncSelectedItemsChange?: (items: T[]) => void;\n onAddCustomItem?: React.Dispatch<React.SetStateAction<T[]>>;\n onAddAsyncSelectedItem?: React.Dispatch<React.SetStateAction<T[]>>;\n};\n\n/**\n * Inner component that receives the built collection and renders the ComboBox\n */\nconst ComboBoxRootInner = <T extends object>(\n props: ComboBoxRootInnerProps<T> & {}\n) => {\n const msg = useLocalizedStringFormatter(comboboxMessagesStrings);\n const {\n selectionMode = \"single\",\n items,\n collection,\n getKey = defaultGetKey,\n children,\n selectedKeys: selectedKeysFromProps = [],\n onSelectionChange,\n disabledKeys,\n inputValue: inputValueFromProps = \"\",\n onInputChange,\n filter,\n placeholder,\n menuTrigger = \"input\",\n shouldCloseOnBlur = true,\n shouldCloseOnSelect = true,\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n allowsEmptyMenu = false,\n renderEmptyState,\n allowsCustomOptions = false,\n isValidNewOption,\n getNewOptionData = defaultGetNewOptionData,\n onCreateOption,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n isDisabled = false,\n isRequired = false,\n isInvalid = false,\n isReadOnly = false,\n shouldFocusWrap = true,\n autoFocus = false,\n name,\n formValue,\n validationBehavior = \"aria\",\n form,\n validate,\n isLoading,\n asyncConfig,\n onAsyncSelectedItemsChange,\n onAddCustomItem,\n onAddAsyncSelectedItem,\n } = props;\n\n // ============================================================\n // REFS & IDS\n // ============================================================\n\n // Stable IDs for ARIA relationships\n const listboxId = useId();\n const tagGroupId = useId();\n\n // DOM refs for scroll positioning and focus management\n const listBoxRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n // ============================================================\n // STATE MANAGEMENT\n // ============================================================\n // Controlled/uncontrolled pattern:\n // - Controlled: Parent manages via props (selectedKeys, inputValue, isOpen)\n // - Uncontrolled: Component manages with internal state + defaults\n\n // SELECTION STATE\n // Selection state (normalized to Set<Key> for consistency)\n const normalizedSelectedKeysFromProps = useMemo(\n () => normalizeSelectedKeys(selectedKeysFromProps),\n [selectedKeysFromProps]\n );\n\n const isSelectionControlled = Boolean(onSelectionChange);\n const [internalNormalizedSelectedKeys, setInternalSelectedKeys] = useState(\n normalizedSelectedKeysFromProps\n );\n const normalizedSelectedKeys = isSelectionControlled\n ? normalizedSelectedKeysFromProps\n : internalNormalizedSelectedKeys;\n\n // INPUT VALUE STATE\n // Items are managed in outer component (see ITEMS MERGING section above)\n\n // Input value state (controlled/uncontrolled)\n const isInputControlled = onInputChange !== undefined;\n\n const computeInitialInputValue = () => {\n if (inputValueFromProps) return inputValueFromProps;\n if (isInputControlled || selectionMode !== \"single\") return \"\";\n\n // Uncontrolled single-select: initialize from selected item text\n const selectedKeysArray = Array.from(normalizedSelectedKeys);\n if (selectedKeysArray.length === 0) return \"\";\n\n const selectedKey = selectedKeysArray[0];\n const selectedNode = collection.getItem(selectedKey);\n return selectedNode?.textValue ?? \"\";\n };\n\n const [internalInputValue, setInternalInputValue] = useState(\n computeInitialInputValue\n );\n const inputValue = isInputControlled\n ? inputValueFromProps\n : internalInputValue;\n\n const prevInputValueRef = useRef(inputValue);\n\n // Menu open/closed state\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen);\n const isOpen = controlledIsOpen ?? internalIsOpen;\n\n // Focus strategy for menu opening (ArrowDown→first, ArrowUp→last)\n const [focusStrategy, setFocusStrategy] = useState<\"first\" | \"last\" | null>(\n null\n );\n\n // Unified setter for open state\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open);\n }\n onOpenChange?.(open);\n },\n [controlledIsOpen, onOpenChange]\n );\n\n // ============================================================\n // DERIVED STATE & MEMOIZATION\n // ============================================================\n\n // Filtered collection based on input value\n // Uses Collection.filter() to preserve navigation methods (getFirstKey, getLastKey, etc.)\n const filteredCollection = useMemo(() => {\n // No input: show all items\n if (inputValue.trim() === \"\") {\n return collection;\n }\n\n // Single-select UX: if input matches selected item exactly, show full list\n // Enables workflow: select item → click input → see all options (not just the selected one)\n if (selectionMode === \"single\") {\n const selectedKeys = Array.from(normalizedSelectedKeys);\n if (selectedKeys.length > 0) {\n const selectedKey = selectedKeys[0];\n const selectedNode = collection.getItem(selectedKey);\n\n if (selectedNode?.textValue === inputValue) {\n return collection;\n }\n }\n }\n\n // Custom filter: adapt user-provided filter to Collection.filter() API\n if (filter) {\n const allNodes = Array.from(collection);\n const filteredNodes = Array.from(filter(allNodes, inputValue));\n const filteredKeys = new Set(filteredNodes.map((node) => node.key));\n\n return (\n collection.filter?.((_nodeValue, node) => {\n return filteredKeys.has(node.key);\n }) ?? collection\n );\n }\n\n // Default: case-insensitive substring match\n const lowerInput = inputValue.toLowerCase();\n return (\n collection.filter?.((nodeValue) => {\n return nodeValue.toLowerCase().includes(lowerInput);\n }) ?? collection\n );\n }, [collection, inputValue, filter, selectionMode, normalizedSelectedKeys]);\n\n // Selected items for TagGroup (multi-select only)\n // Extract actual item objects from keys to pass to TagGroup component\n const selectedItemsFromState = useMemo(\n () =>\n selectionMode === \"multiple\"\n ? Array.from(normalizedSelectedKeys)\n .map((key) => collection.getItem(key)?.value)\n .filter((item): item is T => item !== undefined)\n : [],\n [selectionMode, normalizedSelectedKeys, collection]\n );\n\n // Menu width state (set via ResizeObserver effect below)\n const [triggerWidth, setTriggerWidth] = useState<string | null>(null);\n\n // ============================================================\n // EVENT HANDLERS\n // ============================================================\n\n // Toggle menu open/closed (uses functional update to avoid stale closures)\n const toggleOpen = useCallback(() => {\n const willOpen =\n controlledIsOpen === undefined ? !isOpen : !controlledIsOpen;\n\n if (controlledIsOpen === undefined) {\n setInternalIsOpen((prev) => !prev);\n } else {\n onOpenChange?.(!controlledIsOpen);\n }\n\n // When opening: focus input and set focus to first item\n if (willOpen) {\n inputRef.current?.focus();\n setFocusStrategy(\"first\");\n }\n }, [controlledIsOpen, isOpen, onOpenChange]);\n\n // Input change handler (opens menu when menuTrigger=\"input\")\n const handleInputChange = useCallback(\n (value: string) => {\n if (!isInputControlled) {\n setInternalInputValue(value);\n }\n onInputChange?.(value);\n\n // Open menu on input change (when menuTrigger=\"input\")\n if (menuTrigger === \"input\" && value !== prevInputValueRef.current) {\n setIsOpen(true);\n }\n\n prevInputValueRef.current = value;\n },\n [isInputControlled, onInputChange, menuTrigger, setIsOpen]\n );\n\n // Selection change handler\n // Multi-select: toggle behavior (click to add/remove from selection)\n // Single-select: replace selection and close menu\n const handleSelectionChange = useCallback(\n (keys: Selection, previousKeys?: Set<Key>) => {\n // Convert \"all\" to actual Set of keys\n let actualKeys =\n keys === \"all\"\n ? new Set(Array.from(collection).map((node) => node.key))\n : keys;\n\n const comparisonKeys = previousKeys ?? normalizedSelectedKeys;\n\n // Multi-select toggle: React Aria sends single-key Set on click,\n // we toggle that key in/out instead of replacing entire selection\n const isProperSubset =\n actualKeys.size > 0 &&\n Array.from(actualKeys).every((key) => comparisonKeys.has(key)) &&\n actualKeys.size < comparisonKeys.size;\n\n if (\n selectionMode === \"multiple\" &&\n actualKeys.size === 1 &&\n !isProperSubset\n ) {\n const clickedKey = Array.from(actualKeys)[0];\n const isAlreadySelected = comparisonKeys.has(clickedKey);\n\n const newSelection = new Set(comparisonKeys);\n if (!isAlreadySelected) {\n newSelection.add(clickedKey);\n } else {\n newSelection.delete(clickedKey);\n }\n actualKeys = newSelection;\n }\n\n // Convert Set<Key> back to array for callback\n const denormalized = denormalizeSelectedKeys(actualKeys);\n\n if (onSelectionChange) {\n onSelectionChange(denormalized);\n } else {\n setInternalSelectedKeys(actualKeys);\n }\n\n // Async multi-select: cache selected items to persist across searches\n if (\n asyncConfig &&\n selectionMode === \"multiple\" &&\n onAsyncSelectedItemsChange\n ) {\n const selectedItems = Array.from(actualKeys)\n .map((key) => collection.getItem(key)?.value)\n .filter((item): item is T => item !== undefined);\n onAsyncSelectedItemsChange(selectedItems);\n }\n\n // Single-select: sync input value with selection and close menu\n if (selectionMode === \"single\") {\n const selectedKey = Array.from(actualKeys)[0];\n\n if (selectedKey !== null) {\n const selectedNode = collection.getItem(selectedKey);\n const textValue = selectedNode?.textValue ?? \"\";\n\n // Update input value\n if (!isInputControlled) {\n setInternalInputValue(textValue);\n prevInputValueRef.current = textValue;\n }\n onInputChange?.(textValue);\n }\n\n // Close menu if shouldCloseOnSelect=true\n if (shouldCloseOnSelect) {\n setIsOpen(false);\n }\n }\n },\n [\n collection,\n selectionMode,\n normalizedSelectedKeys,\n onSelectionChange,\n onInputChange,\n shouldCloseOnSelect,\n setIsOpen,\n isInputControlled,\n ]\n );\n\n // React Aria's useListState provides keyboard navigation and selection management\n const state = useListState<T>({\n selectionMode,\n collection: filteredCollection,\n selectedKeys: normalizedSelectedKeys,\n onSelectionChange: handleSelectionChange,\n disabledKeys,\n });\n\n // Clear all selections (and input value in single-select)\n const clearSelection = useCallback(() => {\n state.selectionManager.setSelectedKeys(new Set());\n\n if (selectionMode === \"single\") {\n if (!isInputControlled) {\n setInternalInputValue(\"\");\n prevInputValueRef.current = \"\";\n }\n onInputChange?.(\"\");\n }\n }, [state.selectionManager, selectionMode, isInputControlled, onInputChange]);\n\n // Handle custom option creation (adds item and selects it)\n const handleCustomOptionCreated = useCallback(\n (newItem: T) => {\n // Add to custom items in outer component\n onAddCustomItem?.((prev) => [...prev, newItem]);\n\n // Also cache in async multi-select mode\n if (asyncConfig && selectionMode === \"multiple\") {\n onAddAsyncSelectedItem?.((prev) => [...prev, newItem]);\n }\n\n // Select the new item\n const newKey = getKey(newItem);\n const currentKeys = normalizedSelectedKeys;\n\n if (selectionMode === \"single\") {\n handleSelectionChange(new Set([newKey]), currentKeys);\n } else {\n const newSelection = new Set(currentKeys);\n newSelection.add(newKey);\n handleSelectionChange(newSelection, currentKeys);\n }\n },\n [\n onAddCustomItem,\n asyncConfig,\n selectionMode,\n onAddAsyncSelectedItem,\n getKey,\n normalizedSelectedKeys,\n handleSelectionChange,\n ]\n );\n\n // Handle creating a new custom option from input value\n // Called when user presses Enter with no focused item (allowsCustomOptions=true)\n // Returns true if option was created successfully\n const handleCreateOption = useCallback((): boolean => {\n // Early exit: custom options disabled\n if (!allowsCustomOptions) return false;\n\n const trimmedInput = inputValue.trim();\n // Early exit: empty input\n if (!trimmedInput) return false;\n\n // Check if option already exists in the UNFILTERED collection (not state.collection which is filtered)\n // This prevents duplicates even when the current filter hides the existing option\n const matchesExisting = Array.from(collection).some(\n (node) => node.textValue?.toLowerCase() === trimmedInput.toLowerCase()\n );\n if (matchesExisting) {\n return false;\n }\n\n // Check custom validation if provided\n if (isValidNewOption && !isValidNewOption(trimmedInput)) {\n return false;\n }\n\n // Create the new item using user-provided factory function\n const newItem = getNewOptionData(trimmedInput);\n\n // Notify outer component to add to custom items and handle selection internally\n handleCustomOptionCreated(newItem);\n\n // Clear input for multi-select, set to created text for single-select\n // Note: Selection happens in handleCustomOptionCreated\n if (selectionMode === \"multiple\") {\n // Multi-select: clear input after creating option\n if (!isInputControlled) {\n setInternalInputValue(\"\");\n prevInputValueRef.current = \"\";\n }\n onInputChange?.(\"\");\n } else {\n // Single-select: explicitly set input to the created option's text\n // We must set it here because handleSelectionChange cannot find the item\n // in the collection yet (the state update hasn't triggered a re-render,\n // so the collection hasn't been rebuilt to include the new item)\n if (!isInputControlled) {\n setInternalInputValue(trimmedInput);\n prevInputValueRef.current = trimmedInput;\n }\n onInputChange?.(trimmedInput);\n }\n\n // Notify parent component\n onCreateOption?.(newItem);\n\n return true;\n }, [\n allowsCustomOptions,\n getNewOptionData,\n isValidNewOption,\n inputValue,\n collection,\n selectionMode,\n onInputChange,\n onCreateOption,\n handleCustomOptionCreated,\n isInputControlled,\n setInternalInputValue,\n prevInputValueRef,\n ]);\n\n // Remove keys (for tag removal in multi-select)\n const removeKey = useCallback(\n (keysToRemove: Set<Key>) => {\n if (isDisabled || isReadOnly) return;\n\n const currentKeys = normalizedSelectedKeys;\n const newKeys = new Set(currentKeys);\n keysToRemove.forEach((key) => newKeys.delete(key));\n\n // Pass currentKeys so handleSelectionChange detects this as removal\n handleSelectionChange(newKeys, currentKeys);\n\n // Focus input if all tags removed\n if (newKeys.size === 0) {\n inputRef.current?.focus();\n }\n },\n [normalizedSelectedKeys, handleSelectionChange, isDisabled, isReadOnly]\n );\n\n // ============================================================\n // KEYBOARD NAVIGATION\n // ============================================================\n // Implements ARIA combobox keyboard interaction pattern\n // https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n\n // Handle all keyboard interactions in the input field\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n // Menu closed: open and focus first item\n setIsOpen(true);\n setFocusStrategy(\"first\");\n } else {\n // Menu open: move focus to next item (or first if nothing focused)\n const currentKey = state.selectionManager.focusedKey;\n const nextKey = currentKey\n ? state.collection.getKeyAfter(currentKey)\n : state.collection.getFirstKey();\n state.selectionManager.setFocusedKey(\n nextKey ?? state.collection.getFirstKey()\n );\n }\n break;\n\n case \"ArrowUp\":\n e.preventDefault();\n if (!isOpen) {\n // Menu closed: open and focus last item\n setIsOpen(true);\n setFocusStrategy(\"last\");\n } else {\n // Menu open: move focus to previous item (or last if nothing focused)\n const currentKey = state.selectionManager.focusedKey;\n const prevKey = currentKey\n ? state.collection.getKeyBefore(currentKey)\n : state.collection.getLastKey();\n state.selectionManager.setFocusedKey(\n prevKey ?? state.collection.getLastKey()\n );\n }\n break;\n\n case \"Enter\":\n // Three cases: focused item selection, custom option creation, or form submission\n if (isOpen && state.selectionManager.focusedKey) {\n // Case 1: Item is focused - select it\n e.preventDefault();\n const focusedKey = state.selectionManager.focusedKey;\n\n if (selectionMode === \"multiple\") {\n // Multi-select: toggle focused item in/out of selection\n const newSelection = new Set(normalizedSelectedKeys);\n if (newSelection.has(focusedKey)) {\n newSelection.delete(focusedKey);\n } else {\n newSelection.add(focusedKey);\n }\n handleSelectionChange(newSelection);\n // Keep focus on the same item for further toggling\n } else {\n // Single-select: replace selection and clear focus\n handleSelectionChange(new Set([focusedKey]));\n state.selectionManager.setFocusedKey(null);\n }\n } else if (\n isOpen &&\n !state.selectionManager.focusedKey &&\n allowsCustomOptions\n ) {\n // Case 2: No focused item but custom options enabled - create new option\n const wasCreated = handleCreateOption();\n if (wasCreated) {\n e.preventDefault(); // Only prevent default if option was created\n }\n }\n // Case 3: No focused key and no option created - allow form submission (don't preventDefault)\n break;\n\n case \"Escape\":\n if (isOpen) {\n // Close menu and clear focus\n e.preventDefault();\n setIsOpen(false);\n state.selectionManager.setFocusedKey(null);\n // TODO: Revert to last selected value in single-select mode\n }\n break;\n\n case \"Home\":\n if (isOpen) {\n // Jump to first item in list\n e.preventDefault();\n const firstKey = state.collection.getFirstKey();\n state.selectionManager.setFocusedKey(firstKey);\n }\n break;\n\n case \"End\":\n if (isOpen) {\n // Jump to last item in list\n e.preventDefault();\n const lastKey = state.collection.getLastKey();\n state.selectionManager.setFocusedKey(lastKey);\n }\n break;\n\n case \"Backspace\":\n // When input is empty, backspace acts as a \"delete selection\" shortcut\n if (inputValue === \"\") {\n const selectedKeys = Array.from(normalizedSelectedKeys);\n if (selectedKeys.length > 0) {\n e.preventDefault();\n if (selectionMode === \"single\") {\n // Single-select: clear the selection\n handleSelectionChange(new Set());\n } else {\n // Multi-select: remove the last selected item\n const newKeys = new Set(selectedKeys);\n newKeys.delete(selectedKeys[selectedKeys.length - 1]);\n handleSelectionChange(newKeys);\n }\n }\n }\n break;\n\n default:\n // Regular typing - handled by onChange\n break;\n }\n },\n [\n isOpen,\n state.selectionManager,\n state.collection,\n handleSelectionChange,\n setIsOpen,\n setFocusStrategy,\n selectionMode,\n inputValue,\n normalizedSelectedKeys,\n allowsCustomOptions,\n handleCreateOption,\n ]\n );\n\n // ============================================================\n // FOCUS HANDLERS\n // ============================================================\n\n // Open menu on focus (when menuTrigger=\"focus\")\n // In single select mode with existing value, select all text so cursor goes to beginning\n // and next keypress replaces the value\n const handleFocus = useCallback(() => {\n if (menuTrigger === \"focus\" && !isDisabled && !isReadOnly) {\n setIsOpen(true);\n }\n\n // Single-select with existing value: select all text\n // This places cursor at beginning and makes next input replace the value\n if (selectionMode === \"single\" && inputValue && inputRef.current) {\n inputRef.current.select();\n }\n }, [\n menuTrigger,\n isDisabled,\n isReadOnly,\n setIsOpen,\n selectionMode,\n inputValue,\n ]);\n\n // Close menu on blur (with delay to allow option clicks)\n const handleBlur = useCallback(\n (e: React.FocusEvent) => {\n if (!shouldCloseOnBlur) return;\n\n // Capture currentTarget (React reuses event objects)\n const comboboxRoot = e.currentTarget;\n\n // Delay closing to allow option clicks to fire first\n setTimeout(() => {\n const currentFocus = document.activeElement;\n if (!comboboxRoot.contains(currentFocus)) {\n setIsOpen(false);\n }\n }, 150);\n },\n [shouldCloseOnBlur, setIsOpen]\n );\n\n // ============================================================\n // EFFECTS\n // ============================================================\n\n const lastSelectedKeyRef = useRef<Key | null>(null);\n\n // Auto-focus input on mount (when autoFocus=true)\n useEffect(() => {\n if (autoFocus && inputRef.current && !isDisabled) {\n inputRef.current.focus();\n }\n }, [autoFocus, isDisabled]);\n\n // Notify parent of open state changes (uncontrolled mode)\n const prevIsOpenRef = useRef(isOpen);\n useEffect(() => {\n if (controlledIsOpen === undefined && prevIsOpenRef.current !== isOpen) {\n prevIsOpenRef.current = isOpen;\n onOpenChange?.(isOpen);\n }\n }, [isOpen, controlledIsOpen, onOpenChange]);\n\n // Sync input value with selected item (single-select only)\n useEffect(() => {\n if (selectionMode !== \"single\") return;\n\n const selectedKeys = Array.from(state.selectionManager.selectedKeys);\n const currentSelectedKey = selectedKeys.length > 0 ? selectedKeys[0] : null;\n\n // Only update if selection changed\n if (currentSelectedKey === lastSelectedKeyRef.current) return;\n lastSelectedKeyRef.current = currentSelectedKey;\n\n const selectedNode =\n currentSelectedKey !== null\n ? state.collection.getItem(currentSelectedKey)\n : null;\n\n // If the selected item is not in the collection yet, it might be a newly created custom option\n // In that case, keep the current input value instead of clearing it\n if (currentSelectedKey !== null && !selectedNode) {\n // Item not in collection yet (likely a just-created custom option)\n // Don't overwrite the input value - it was already set correctly in handleCreateOption\n return;\n }\n\n const itemText = selectedNode?.textValue ?? \"\";\n\n // Update input value (respecting controlled/uncontrolled pattern)\n if (!isInputControlled) {\n // Uncontrolled: update internal state directly\n setInternalInputValue(itemText);\n prevInputValueRef.current = itemText;\n } else {\n // Controlled: notify parent via callback\n onInputChange?.(itemText);\n }\n }, [\n selectionMode,\n state.selectionManager.selectedKeys,\n state.collection,\n isInputControlled,\n onInputChange,\n ]);\n\n // Effect: Apply focus strategy when menu opens\n // Focus strategy determines whether to focus first or last item\n // Set by ArrowDown (first) vs ArrowUp (last) keyboard shortcuts\n useEffect(() => {\n if (isOpen && focusStrategy) {\n const key =\n focusStrategy === \"first\"\n ? state.collection.getFirstKey()\n : state.collection.getLastKey();\n\n state.selectionManager.setFocusedKey(key ?? null);\n setFocusStrategy(null); // Reset strategy after applying\n }\n }, [isOpen, focusStrategy, state.collection, state.selectionManager]);\n\n // Effect: Manage React Aria's focus mode when menu opens/closes\n // Focus mode enables virtual focus (aria-activedescendant) for keyboard navigation\n useEffect(() => {\n if (isOpen) {\n // Enable focus mode for virtual focus to work\n state.selectionManager.setFocused(true);\n } else {\n // Disable focus mode and clear focused key\n state.selectionManager.setFocused(false);\n state.selectionManager.setFocusedKey(null);\n }\n }, [isOpen, state.selectionManager]);\n\n // Track if collection has been populated at least once\n // Prevents closing menu before initial collection build completes\n const collectionPopulatedRef = useRef(false);\n if (state.collection.size > 0) {\n collectionPopulatedRef.current = true;\n }\n\n // Effect: Auto-close menu when no items match filter\n // Replicates React Aria's useComboBoxState behavior\n useEffect(() => {\n // Only close if menu is currently open and allowsEmptyMenu is false\n if (!isOpen || allowsEmptyMenu) return;\n\n // Don't close if currently loading async data\n if (isLoading) return;\n\n // Only check for empty collection if it has been populated before\n // This prevents closing the menu before CollectionBuilder finishes parsing children\n if (!collectionPopulatedRef.current) return;\n\n // Check if the collection has any items\n const hasItems = state.collection.size > 0;\n\n // Close menu if no items match the filter\n if (!hasItems) {\n setIsOpen(false);\n }\n }, [\n isOpen,\n allowsEmptyMenu,\n isLoading,\n state.collection.size,\n setIsOpen,\n inputValue,\n ]);\n\n // Effect: Sync menu width with trigger width using ResizeObserver\n // Ensures menu stays aligned and properly sized when trigger resizes\n const { triggerRef, inputRef } = useComboBoxRootContext();\n useEffect(() => {\n const triggerElement = triggerRef.current;\n if (!triggerElement) return;\n\n // Measure and update trigger width\n const updateTriggerWidth = () => {\n const width = triggerElement.offsetWidth;\n setTriggerWidth(`${width}px`);\n };\n\n // Set initial width\n updateTriggerWidth();\n\n // Watch for resize events\n const resizeObserver = new ResizeObserver(updateTriggerWidth);\n resizeObserver.observe(triggerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // ============================================================\n // CONTEXT PROVIDERS\n // ============================================================\n // React Aria's Provider component distributes props to child components via context\n // Each context value configures a specific part of the ComboBox (Input, ListBox, Popover, etc.)\n\n const contextValues = [\n // InputContext: Props for ComboBox.Input component\n // Configures the input field with ARIA attributes, event handlers, and validation\n [\n InputContext,\n {\n ref: inputRef,\n role: \"combobox\" as const, // ARIA role for autocomplete input\n \"aria-autocomplete\": \"list\" as const, // Indicates suggestions are in a list\n \"aria-controls\":\n selectionMode === \"multiple\"\n ? `${tagGroupId} ${listboxId}` // Multi-select: controls both tags and listbox\n : listboxId, // Single-select: controls only listbox\n \"aria-expanded\": isOpen, // Announces menu open/closed state\n \"aria-activedescendant\": state.selectionManager.focusedKey\n ? `${listboxId}-option-${state.selectionManager.focusedKey}` // Virtual focus: announces focused option\n : undefined,\n \"aria-describedby\":\n selectionMode === \"multiple\"\n ? `${tagGroupId} ${ariaDescribedBy ?? \"\"}` // Multi-select: references tag group for context\n : ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n value: inputValue,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) =>\n handleInputChange(e.target.value),\n onKeyDown: handleInputKeyDown,\n onFocus: handleFocus,\n onBlur: handleBlur,\n disabled: isDisabled,\n readOnly: isReadOnly,\n required: isRequired,\n \"aria-invalid\": isInvalid,\n placeholder,\n name,\n form,\n validationbehavior: validationBehavior,\n validate,\n },\n ],\n\n // TagGroupContext: Props for ComboBox.TagGroup component (multi-select only)\n // Renders selected items as removable tags\n [\n TagGroupContext,\n {\n id: tagGroupId,\n \"aria-label\": msg.format(\"selectedValues\"),\n items: selectedItemsFromState, // Selected items to display as tags\n onRemove: removeKey, // Handle tag removal\n },\n ],\n\n // ButtonContext: Props for toggle and clear buttons\n // Uses \"slots\" pattern to configure multiple buttons via single context\n [\n ButtonContext,\n {\n slots: {\n toggle: {\n onPress: toggleOpen,\n \"aria-label\": msg.format(\"toggleOptions\"),\n isDisabled: isDisabled || isReadOnly,\n isPressed: isOpen, // Visual indicator that menu is open\n },\n clear: {\n onPress: clearSelection,\n \"aria-label\": msg.format(\"clearSelection\"),\n style:\n normalizedSelectedKeys.size > 0 ? undefined : { display: \"none\" },\n isDisabled:\n isDisabled ||\n isReadOnly ||\n state.selectionManager.selectedKeys.size === 0, // Disabled when nothing selected\n },\n },\n },\n ],\n\n // PopoverContext: Props for ComboBox.Popover component\n // Controls menu positioning, portal rendering, and open/close behavior\n [\n PopoverContext,\n {\n isOpen: isOpen,\n // No-op onOpenChange: We control state internally, prevent React Aria from managing its own state\n onOpenChange: () => {\n // Intentionally empty - we manage open state via toggleOpen/setIsOpen\n },\n ref: popoverRef,\n triggerRef: triggerRef, // Popover positions relative to this element\n scrollRef: listBoxRef, // Enables scroll-into-view for keyboard navigation\n isNonModal: true, // Non-modal: doesn't trap focus, allows interaction outside\n trigger: \"ComboBox\", // Identifies this as a combobox popover (not tooltip, dialog, etc.)\n placement: \"bottom start\", // Default placement below trigger, aligned to start\n style: {\n \"--nimbus-combobox-trigger-width\": triggerWidth,\n } as React.CSSProperties, // CSS custom property for menu width\n clearContexts: [\n // Clear these contexts so popover content doesn't inherit combobox contexts\n LabelContext,\n ButtonContext,\n InputContext,\n GroupContext,\n TextContext,\n ],\n },\n ],\n\n // SelectableCollectionContext: Enables virtual focus for keyboard navigation\n // Virtual focus uses aria-activedescendant instead of moving browser focus\n [SelectableCollectionContext, { shouldUseVirtualFocus: true }],\n\n // ListBoxContext: Props for ComboBox.ListBox component\n // Configures the option list with items, ARIA attributes, and behaviors\n [\n ListBoxContext,\n {\n items, // Items to render (merged from outer component)\n id: listboxId, // ID referenced by aria-controls on input\n ref: listBoxRef, // Ref for scroll positioning\n renderEmptyState, // Custom empty state renderer\n shouldFocusWrap, // Whether to wrap focus from last to first item\n \"aria-label\": msg.format(\"options\"),\n },\n ],\n\n // ListStateContext: React Aria's collection state for managing selection and focus\n [ListStateContext, state],\n ];\n\n // ============================================================\n // RENDER\n // ============================================================\n // Wrap children in React Aria's Provider to distribute context values\n // Provider passes each context to matching child components (Input, ListBox, Popover, etc.)\n\n return (\n <Provider\n // TypeScript cannot properly infer the complex heterogeneous tuple type required by Provider.\n // The runtime behavior is correct - each context receives its properly typed value.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values={contextValues as any}\n >\n {/* Hidden input for form submission */}\n {/* Serializes selection state as form data when ComboBox is inside a <form> */}\n <ComboBoxHiddenInput\n name={name}\n form={form}\n selectedKeys={normalizedSelectedKeys}\n selectionMode={selectionMode}\n formValue={formValue}\n allowsCustomOptions={allowsCustomOptions}\n collection={state.collection}\n inputValue={inputValue}\n />\n {/* Render children (ComboBox.Input, ComboBox.ListBox, etc.) */}\n {/* Type assertion needed - CollectionChildren<T> is assignable to ReactNode at runtime */}\n {children as React.ReactNode}\n </Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { Input as RaInput, InputContext } from \"react-aria-components\";\nimport { ComboBoxInputSlot } from \"../combobox.slots\";\nimport type { ComboBoxInputProps } from \"../combobox.types\";\nimport { extractStyleProps } from \"@/utils\";\nimport { useComboBoxRootContext } from \"./combobox.root-context\";\n\n/**\n * # ComboBox.Input (Internal Component)\n *\n * Internal text input field for filtering and typing in the combobox.\n * Automatically rendered by ComboBox.Trigger - not exposed to consumers.\n *\n * Consumes React Aria's InputContext which provides all necessary ARIA attributes\n * (role, aria-autocomplete, aria-controls, aria-expanded, etc.).\n *\n * Input width dynamically adjusts to match the text content or placeholder length,\n * collapsing to 1px when empty to avoid creating blank lines in multi-select mode.\n *\n * @internal\n * @supportsStyleProps\n */\nexport const ComboBoxInput = (props: ComboBoxInputProps) => {\n const [styleProps, functionalProps] = extractStyleProps(props);\n const inputContext = useContext(InputContext);\n const { inputRef } = useComboBoxRootContext();\n\n // Get the current value from context (handle both direct and slotted values)\n let currentValue = \"\";\n let placeholder = \"\";\n\n if (\n inputContext &&\n typeof inputContext === \"object\" &&\n \"value\" in inputContext\n ) {\n currentValue = (inputContext.value as string) || \"\";\n placeholder = (inputContext.placeholder as string) || \"\";\n }\n\n // Calculate size attribute: length of value or placeholder, with minimum of 1\n const inputSize = Math.max(currentValue.length || placeholder.length || 1, 1);\n\n return (\n <ComboBoxInputSlot asChild {...styleProps}>\n <RaInput\n ref={inputRef}\n {...functionalProps}\n size={inputSize}\n // If the value & placeholder are falsy, input width should be 1px\n // so it doesn't cause a blank line in content box\n data-empty={!(!!currentValue.length || !!placeholder.length)}\n />\n </ComboBoxInputSlot>\n );\n};\n\nComboBoxInput.displayName = \"ComboBox.Input\";\n","import { ComboBoxLeadingElementSlot } from \"../combobox.slots\";\n\n/**\n * # ComboBox.LeadingElement (Internal Component)\n *\n * Internal wrapper component that positions the leading element (icon, avatar, etc.)\n * within the combobox trigger using CSS Grid's named template area.\n * Automatically rendered by ComboBox.Trigger when leadingElement prop is provided.\n *\n * @internal\n * @supportsStyleProps\n */\nexport const ComboBoxLeadingElement = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n return <ComboBoxLeadingElementSlot>{children}</ComboBoxLeadingElementSlot>;\n};\n","import { useContext } from \"react\";\nimport {\n TagGroupContext,\n type ContextValue,\n type TagGroupProps,\n} from \"react-aria-components\";\nimport { TagGroup } from \"@/components\";\nimport { useComboBoxRootContext } from \"./combobox.root-context\";\nimport { ComboBoxTagGroupSlot } from \"../combobox.slots\";\nimport type { ComboBoxTagGroupProps } from \"../combobox.types\";\nimport { extractStyleProps } from \"@/utils\";\n\n/**\n * # ComboBox.TagGroup (Internal Component)\n *\n * Internal component that displays selected items as tags in multi-select mode.\n * Automatically rendered by ComboBox.Trigger - not exposed to consumers.\n *\n * Consumes React-Aria's TagGroupContext, which is populated by the\n * TagGroupContextProvider in ComboBox.Root with:\n * - items: selected items array from collection\n * - onRemove: handler to remove tags\n * - size: tag size matching ComboBox size\n * - aria-label: accessible label for the tag group\n * - id: generated in ComboBox.Root\n * - selectionMode: \"none\" (tags are not selectable)\n * - disabledKeys: disabled tag keys\n *\n * Renders null in single-select mode to avoid unnecessary DOM elements.\n *\n * @internal\n * @supportsStyleProps\n */\nexport const ComboBoxTagGroup = (props: ComboBoxTagGroupProps) => {\n const { selectionMode, size, getKey, getTextValue, isDisabled, isReadOnly } =\n useComboBoxRootContext();\n const [styleProps, functionalProps] = extractStyleProps(props);\n\n const tagGroupContext =\n useContext<\n ContextValue<TagGroupProps & { items?: object[] }, HTMLDivElement>\n >(TagGroupContext);\n\n // Extract items from context, handling both direct values and slotted values\n const items =\n (tagGroupContext && \"items\" in tagGroupContext\n ? tagGroupContext.items\n : undefined) ?? [];\n\n // Only render in multi-select mode\n if (selectionMode !== \"multiple\") {\n return null;\n }\n\n return (\n <ComboBoxTagGroupSlot {...styleProps} {...functionalProps} asChild>\n {/* TagGroup.Root receives id from TagGroupContext set by custom-context */}\n <TagGroup.Root size={size}>\n <TagGroup.TagList items={items} display=\"contents\">\n {(item) => {\n const itemKey = getKey(item);\n const itemValue = getTextValue(item);\n return (\n <TagGroup.Tag\n id={itemKey}\n textValue={itemValue}\n isDisabled={isDisabled || isReadOnly}\n maxW=\"100%\"\n >\n {itemValue}\n </TagGroup.Tag>\n );\n }}\n </TagGroup.TagList>\n </TagGroup.Root>\n </ComboBoxTagGroupSlot>\n );\n};\n\nComboBoxTagGroup.displayName = \"ComboBox.TagGroup\";\n","import { Close, KeyboardArrowDown } from \"@commercetools/nimbus-icons\";\nimport { IconButton } from \"@/components/icon-button/icon-button\";\nimport { LoadingSpinner } from \"@/components/loading-spinner/loading-spinner\";\nimport { useComboBoxRootContext } from \"./combobox.root-context\";\nimport { ComboBoxTriggerSlot, ComboBoxContentSlot } from \"../combobox.slots\";\nimport type { ComboBoxTriggerProps } from \"../combobox.types\";\nimport { ComboBoxInput } from \"./combobox.input\";\nimport { ComboBoxLeadingElement } from \"./combobox.leading-element\";\nimport { ComboBoxTagGroup } from \"./combobox.tag-group\";\n\n/**\n * # ComboBox.Trigger\n *\n * The trigger element that contains the input field and controls for the combobox.\n * Automatically renders the tag group (for multi-select), input field, toggle button, and clear button.\n * Handles click interactions to focus the input when clicking anywhere on the trigger area.\n *\n * @example\n * ```tsx\n * <ComboBox.Root>\n * <ComboBox.Trigger />\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * <ComboBox.Item value=\"option1\">Option 1</ComboBox.Item>\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * ```\n *\n * @supportsStyleProps\n */\nexport const ComboBoxTrigger = ({\n children,\n ...restProps\n}: ComboBoxTriggerProps) => {\n const { triggerRef, leadingElement, inputRef, isLoading, isDisabled } =\n useComboBoxRootContext();\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // Focus input when clicking anywhere on the trigger, except on buttons\n if (\n !isDisabled &&\n e.target instanceof HTMLElement &&\n !e.target.closest(\"button\")\n ) {\n inputRef.current?.focus();\n }\n };\n\n return (\n <ComboBoxTriggerSlot ref={triggerRef} onClick={handleClick} {...restProps}>\n {leadingElement && (\n <ComboBoxLeadingElement>{leadingElement}</ComboBoxLeadingElement>\n )}\n <ComboBoxContentSlot>\n <ComboBoxTagGroup />\n <ComboBoxInput />\n </ComboBoxContentSlot>\n <IconButton\n slot=\"clear\"\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"primary\"\n >\n <Close />\n </IconButton>\n\n <IconButton\n slot=\"toggle\"\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"neutral\"\n excludeFromTabOrder\n >\n {isLoading ? (\n <LoadingSpinner size=\"xs\" margin=\"50\" />\n ) : (\n <KeyboardArrowDown />\n )}\n </IconButton>\n\n {children}\n </ComboBoxTriggerSlot>\n );\n};\n\nComboBoxTrigger.displayName = \"ComboBox.Trigger\";\n","import { Popover } from \"../../popover\";\nimport { ComboBoxPopoverSlot } from \"../combobox.slots\";\nimport type { ComboBoxPopoverProps } from \"../combobox.types\";\nimport { extractStyleProps } from \"@/utils\";\n\n/**\n * # ComboBox.Popover\n *\n * Popover wrapper for the options dropdown list.\n * Uses Nimbus Popover component which reads from PopoverContext provided by the custom context provider.\n *\n * The PopoverContext provides:\n * - open state\n * - positioning configuration (fixed strategy, bottom-start placement, --nimbus-combobox-trigger-width CSS var)\n * - positionReference (trigger ref for proper positioning)\n *\n * @example\n * ```tsx\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * ```\n *\n * @supportsStyleProps\n */\nexport const ComboBoxPopover = ({\n children,\n ref,\n ...restProps\n}: ComboBoxPopoverProps) => {\n const [styleProps, functionalProps] = extractStyleProps(restProps);\n\n return (\n <ComboBoxPopoverSlot asChild {...styleProps}>\n <Popover\n ref={ref}\n isNonModal={true}\n autoFocus={true}\n {...functionalProps}\n >\n {children}\n </Popover>\n </ComboBoxPopoverSlot>\n );\n};\n\nComboBoxPopover.displayName = \"ComboBox.Popover\";\n","import { cloneElement, isValidElement, type ReactElement } from \"react\";\nimport { ListBox as RaListBox } from \"react-aria-components\";\nimport { ComboBoxListBoxSlot } from \"../combobox.slots\";\nimport type { ComboBoxListBoxProps } from \"../combobox.types\";\nimport { extractStyleProps } from \"@/utils\";\n\n/**\n * # ComboBox.ListBox\n *\n * Container for the dropdown options list that displays filtered results.\n * Use the render prop pattern - do NOT manually map over items as this is less performant.\n * The item is automatically provided from the items passed to ComboBox.Root.\n *\n * Automatically injects `id` and `textValue` props to Option components from item metadata.\n *\n * @example\n * ```tsx\n * <ComboBox.ListBox>\n * {(item) => (\n * <ComboBox.Option>\n * {item.name}\n * </ComboBox.Option>\n * )}\n * </ComboBox.ListBox>\n * ```\n *\n * @supportsStyleProps\n */\nexport function ComboBoxListBox<T extends object>({\n children,\n ref,\n ...restProps\n}: ComboBoxListBoxProps<T>) {\n const [styleProps, functionalProps] = extractStyleProps(restProps);\n\n // Wrap children function to automatically inject id and textValue props\n const wrappedChildren =\n typeof children === \"function\"\n ? (item: T) => {\n const element = children(item);\n\n // If item has id or textValue properties, inject them into the Option\n const itemWithMetadata = item as T & {\n id?: string;\n textValue?: string;\n };\n\n if (\n isValidElement(element) &&\n (itemWithMetadata.id || itemWithMetadata.textValue)\n ) {\n // Clone element and inject id/textValue props\n // Our injected props come AFTER spread to override any existing values\n return cloneElement(\n element as ReactElement<{\n id?: string;\n textValue?: string;\n }>,\n {\n ...(element.props as object),\n ...(itemWithMetadata.id ? { id: itemWithMetadata.id } : {}),\n ...(itemWithMetadata.textValue\n ? { textValue: itemWithMetadata.textValue }\n : {}),\n }\n );\n }\n\n return element;\n }\n : children;\n\n return (\n <ComboBoxListBoxSlot {...styleProps} ref={ref} asChild>\n <RaListBox {...functionalProps}>{wrappedChildren}</RaListBox>\n </ComboBoxListBoxSlot>\n );\n}\n\nComboBoxListBox.displayName = \"ComboBox.ListBox\";\n","import { ListBoxItem } from \"react-aria-components\";\nimport { Check } from \"@commercetools/nimbus-icons\";\nimport {\n ComboBoxOptionSlot,\n ComboBoxOptionIndicatorSlot,\n ComboBoxOptionContentSlot,\n} from \"../combobox.slots\";\nimport type { ComboBoxOptionProps } from \"../combobox.types\";\nimport { extractStyleProps } from \"@/utils\";\n\n/**\n * # ComboBox.Option\n *\n * Individual option within the combobox listbox.\n * Wraps React Aria's ListBoxItem for automatic ARIA management.\n * Displays a checkmark indicator for selected items in multi-select mode.\n * Supports render prop pattern for custom rendering.\n *\n * @example\n * ```tsx\n * <ComboBox.Root>\n * <ComboBox.Option id=\"1\">Option 1</ComboBox.Option>\n * <ComboBox.Option id=\"2\">Option 2</ComboBox.Option>\n * </ComboBox.Root>\n * ```\n *\n * @example Render prop pattern\n * ```tsx\n * <ComboBox.Option id=\"1\">\n * {({ isSelected, isDisabled }) => (\n * <div>\n * Option 1 {isSelected && \"(Selected)\"}\n * </div>\n * )}\n * </ComboBox.Option>\n * ```\n *\n * @supportsStyleProps\n */\n\nexport function ComboBoxOption<T extends object>({\n children,\n ref,\n ...props\n}: ComboBoxOptionProps<T>) {\n const [styleProps, restProps] = extractStyleProps(props);\n\n return (\n <ComboBoxOptionSlot {...styleProps} asChild>\n <ListBoxItem ref={ref} {...restProps}>\n {(renderProps) => {\n const content =\n typeof children === \"function\"\n ? children({\n ...renderProps,\n })\n : children;\n return renderProps.selectionMode === \"multiple\" ? (\n <>\n <ComboBoxOptionIndicatorSlot>\n <span data-selected={renderProps.isSelected}>\n {renderProps.isSelected && <Check />}\n </span>\n </ComboBoxOptionIndicatorSlot>\n\n <ComboBoxOptionContentSlot>{content}</ComboBoxOptionContentSlot>\n </>\n ) : (\n <>{content}</>\n );\n }}\n </ListBoxItem>\n </ComboBoxOptionSlot>\n );\n}\n\nComboBoxOption.displayName = \"ComboBox.Option\";\n","import { type RefAttributes, type ReactNode } from \"react\";\nimport {\n ListBoxSection as RaListBoxSection,\n Header as RaHeader,\n Collection,\n} from \"react-aria-components\";\nimport { ComboBoxSectionSlot } from \"../combobox.slots\";\nimport type { ComboBoxSectionProps } from \"../combobox.types\";\n\n/**\n * # ComboBox.Section\n *\n * Section grouping for options with optional label header.\n * Wraps React Aria's ListBoxSection component.\n * Supports both static children and collection rendering with items.\n *\n * @example Static children\n * ```tsx\n * <ComboBox.ListBox>\n * <ComboBox.Section label=\"Fruits\">\n * <ComboBox.Option id=\"apple\">Apple</ComboBox.Option>\n * <ComboBox.Option id=\"banana\">Banana</ComboBox.Option>\n * </ComboBox.Section>\n * </ComboBox.ListBox>\n * ```\n *\n * @example Collection rendering\n * ```tsx\n * <ComboBox.Section label=\"Fruits\" items={fruits}>\n * {(item) => <ComboBox.Option id={item.id}>{item.name}</ComboBox.Option>}\n * </ComboBox.Section>\n * ```\n *\n * @supportsStyleProps\n */\nexport function ComboBoxSection<T extends object>({\n children,\n label,\n items,\n ref,\n ...props\n}: ComboBoxSectionProps<T> & RefAttributes<HTMLDivElement>) {\n // Validate that children is a function when items is provided\n if (items && typeof children !== \"function\") {\n throw new Error(\n 'ComboBox.Section: When \"items\" is provided, \"children\" must be a function'\n );\n }\n\n return (\n <RaListBoxSection ref={ref} {...props}>\n {label && (\n <ComboBoxSectionSlot asChild>\n <RaHeader>{label}</RaHeader>\n </ComboBoxSectionSlot>\n )}\n {items ? (\n <Collection items={items}>\n {(item: T) => {\n if (typeof children === \"function\") {\n return children(item);\n }\n return null;\n }}\n </Collection>\n ) : (\n (children as ReactNode)\n )}\n </RaListBoxSection>\n );\n}\n\nComboBoxSection.displayName = \"ComboBox.Section\";\n","import type { Node } from \"react-stately\";\n\n/**\n * Default text-based filter for combobox items\n * Filters individual items by their text content\n * Does NOT handle sections - use createSectionAwareFilter for that\n *\n * @param nodes - Collection nodes to filter\n * @param inputValue - Current filter text from input\n * @returns Filtered collection nodes containing only items that match the input\n *\n * @example\n * ```tsx\n * <ComboBox.Root\n * items={items}\n * filter={filterByText}\n * placeholder=\"Search...\"\n * />\n * ```\n *\n * **Behavior:**\n * - Case-insensitive substring matching\n * - Returns all nodes when input is empty or whitespace\n * - Filters based on Node.textValue property\n * - Does not preserve sections (use section-aware filter for that)\n *\n * **Note:** This filter works on individual items only. For filtering with\n * sections preserved, use `createSectionAwareFilter` to wrap your custom\n * filter logic.\n */\nexport function filterByText<T extends object>(\n nodes: Iterable<Node<T>>,\n inputValue: string\n): Iterable<Node<T>> {\n if (!inputValue.trim()) return nodes;\n\n const lowerInput = inputValue.toLowerCase();\n\n const filtered: Node<T>[] = [];\n for (const node of nodes) {\n if (node.textValue.toLowerCase().includes(lowerInput)) {\n filtered.push(node);\n }\n }\n\n return filtered;\n}\n\n/**\n * Starts-with filter for combobox items\n * Matches items where textValue begins with the input\n *\n * @param nodes - Collection nodes to filter\n * @param inputValue - Current filter text from input\n * @returns Filtered collection nodes containing only items that start with the input\n *\n * @example\n * ```tsx\n * <ComboBox.Root\n * items={items}\n * filter={filterByStartsWith}\n * placeholder=\"Type to filter...\"\n * />\n * ```\n *\n * **Behavior:**\n * - Case-insensitive prefix matching\n * - More restrictive than substring matching\n * - Useful for autocomplete-style filtering\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Country/state selection where users type the beginning\n * - Name lookups where first letters matter\n * - Command palettes with prefix shortcuts\n */\nexport function filterByStartsWith<T extends object>(\n nodes: Iterable<Node<T>>,\n inputValue: string\n): Iterable<Node<T>> {\n if (!inputValue.trim()) return nodes;\n\n const lowerInput = inputValue.toLowerCase();\n\n const filtered: Node<T>[] = [];\n for (const node of nodes) {\n if (node.textValue.toLowerCase().startsWith(lowerInput)) {\n filtered.push(node);\n }\n }\n\n return filtered;\n}\n\n/**\n * Case-sensitive filter for combobox items\n * Matches items with exact case matching\n *\n * @param nodes - Collection nodes to filter\n * @param inputValue - Current filter text from input\n * @returns Filtered collection nodes containing only items that match with exact case\n *\n * @example\n * ```tsx\n * <ComboBox.Root\n * items={programmingLanguages}\n * filter={filterByCaseSensitive}\n * placeholder=\"Case-sensitive search...\"\n * />\n * ```\n *\n * **Behavior:**\n * - Exact case matching (case-sensitive substring)\n * - More precise than case-insensitive filtering\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Code/variable name search\n * - File path filtering\n * - Technical identifiers that are case-sensitive\n */\nexport function filterByCaseSensitive<T extends object>(\n nodes: Iterable<Node<T>>,\n inputValue: string\n): Iterable<Node<T>> {\n if (!inputValue.trim()) return nodes;\n\n const filtered: Node<T>[] = [];\n for (const node of nodes) {\n if (node.textValue.includes(inputValue)) {\n filtered.push(node);\n }\n }\n\n return filtered;\n}\n\n/**\n * Word boundary filter for combobox items\n * Matches items where input appears at word boundaries\n *\n * @param nodes - Collection nodes to filter\n * @param inputValue - Current filter text from input\n * @returns Filtered collection nodes where input matches at word boundaries\n *\n * @example\n * ```tsx\n * <ComboBox.Root\n * items={items}\n * filter={filterByWordBoundary}\n * placeholder=\"Search by word...\"\n * />\n * ```\n *\n * **Behavior:**\n * - Matches whole words or word beginnings\n * - Case-insensitive\n * - Input \"eagle\" matches \"Bald Eagle\" but not \"beagle\"\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Product search where partial words don't make sense\n * - Name search with multiple words\n * - Tag/category filtering\n */\nexport function filterByWordBoundary<T extends object>(\n nodes: Iterable<Node<T>>,\n inputValue: string\n): Iterable<Node<T>> {\n if (!inputValue.trim()) return nodes;\n\n // Escape special regex characters\n const escapedInput = inputValue.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regex = new RegExp(`\\\\b${escapedInput}`, \"i\");\n\n const filtered: Node<T>[] = [];\n for (const node of nodes) {\n if (regex.test(node.textValue)) {\n filtered.push(node);\n }\n }\n\n return filtered;\n}\n\n/**\n * Fuzzy matching filter for combobox items\n * Matches items where all input characters appear in order (but not necessarily consecutive)\n *\n * @param nodes - Collection nodes to filter\n * @param inputValue - Current filter text from input\n * @returns Filtered collection nodes that match the fuzzy pattern\n *\n * @example\n * ```tsx\n * <ComboBox.Root\n * items={items}\n * filter={filterByFuzzy}\n * placeholder=\"Fuzzy search...\"\n * />\n * ```\n *\n * **Behavior:**\n * - Case-insensitive fuzzy matching\n * - Input \"ble\" matches \"Bald Eagle\"\n * - All characters must appear in order, but can have gaps\n * - More forgiving than substring matching\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Quick command/action selection\n * - File/folder navigation\n * - Large lists where users know approximate spelling\n * - Abbreviated lookups (e.g., \"nj\" for \"New Jersey\")\n */\nexport function filterByFuzzy<T extends object>(\n nodes: Iterable<Node<T>>,\n inputValue: string\n): Iterable<Node<T>> {\n if (!inputValue.trim()) return nodes;\n\n const lowerInput = inputValue.toLowerCase();\n\n const filtered: Node<T>[] = [];\n for (const node of nodes) {\n const lowerText = node.textValue.toLowerCase();\n let inputIndex = 0;\n\n for (\n let i = 0;\n i < lowerText.length && inputIndex < lowerInput.length;\n i++\n ) {\n if (lowerText[i] === lowerInput[inputIndex]) {\n inputIndex++;\n }\n }\n\n if (inputIndex === lowerInput.length) {\n filtered.push(node);\n }\n }\n\n return filtered;\n}\n\n/**\n * Creates a filter that searches across multiple object properties\n * Useful when items have structured data with multiple searchable fields\n *\n * @param propertyPaths - Array of property paths to search (e.g., ['name', 'description', 'tags'])\n * @returns A filter function that searches across specified properties\n *\n * @example\n * ```tsx\n * type Product = {\n * name: string;\n * category: string;\n * description: string;\n * };\n *\n * const productFilter = createMultiPropertyFilter<Product>(['name', 'category', 'description']);\n *\n * <ComboBox.Root\n * items={products}\n * filter={productFilter}\n * placeholder=\"Search products...\"\n * >\n * {(item) => <ComboBox.Option textValue={item.name}>{item.name}</ComboBox.Option>}\n * </ComboBox.Root>\n * ```\n *\n * **Behavior:**\n * - Searches all specified properties\n * - Case-insensitive substring matching\n * - Matches if ANY property contains the input\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Product catalogs with multiple searchable fields\n * - User directories (search by name, email, department)\n * - Document search (title, author, tags, content)\n * - Complex data structures with nested properties\n *\n * **Note:** Uses node.value to access the original item data.\n * If you need to search nested properties, use dot notation: 'address.city'\n */\nexport function createMultiPropertyFilter<T extends object>(\n propertyPaths: string[]\n): (nodes: Iterable<Node<T>>, inputValue: string) => Iterable<Node<T>> {\n return (nodes: Iterable<Node<T>>, inputValue: string): Iterable<Node<T>> => {\n if (!inputValue.trim()) return nodes;\n\n const lowerInput = inputValue.toLowerCase();\n\n const filtered: Node<T>[] = [];\n for (const node of nodes) {\n const item = node.value;\n if (!item) continue;\n\n // Check each property path\n const matches = propertyPaths.some((path) => {\n // Support nested properties with dot notation\n const value = path.split(\".\").reduce<unknown>((obj, key) => {\n return obj && typeof obj === \"object\"\n ? (obj as Record<string, unknown>)[key]\n : undefined;\n }, item);\n\n if (value === null || value === undefined) return false;\n\n const stringValue = String(value).toLowerCase();\n return stringValue.includes(lowerInput);\n });\n\n if (matches) {\n filtered.push(node);\n }\n }\n\n return filtered;\n };\n}\n\n/**\n * Creates a filter with custom scoring/ranking logic\n * Returns items sorted by relevance score (highest first)\n *\n * @param scoreFn - Function that returns a relevance score for each item (higher = more relevant)\n * @returns A filter function that sorts results by score\n *\n * @example\n * ```tsx\n * // Prefer items that start with input, but also include substring matches\n * const rankedFilter = createRankedFilter<SimpleOption>((node, inputValue) => {\n * const text = node.textValue.toLowerCase();\n * const input = inputValue.toLowerCase();\n *\n * if (text.startsWith(input)) return 100; // Highest score for prefix match\n * if (text.includes(input)) return 50; // Lower score for substring match\n * return 0; // No match\n * });\n *\n * <ComboBox.Root\n * items={items}\n * filter={rankedFilter}\n * placeholder=\"Search...\"\n * />\n * ```\n *\n * **Behavior:**\n * - Applies custom scoring logic to each item\n * - Filters out items with score <= 0\n * - Sorts remaining items by score (descending)\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Search with relevance ranking\n * - Prioritizing certain match types (prefix vs substring)\n * - Boosting items based on metadata (popularity, recency, etc.)\n * - Implementing search algorithms like TF-IDF\n *\n * **Score Guidelines:**\n * - Return 0 or negative for non-matches (will be filtered out)\n * - Higher scores = better matches\n * - Consider using score ranges (e.g., 0-100) for consistent behavior\n */\nexport function createRankedFilter<T extends object>(\n scoreFn: (node: Node<T>, inputValue: string) => number\n): (nodes: Iterable<Node<T>>, inputValue: string) => Iterable<Node<T>> {\n return (nodes: Iterable<Node<T>>, inputValue: string): Iterable<Node<T>> => {\n if (!inputValue.trim()) return nodes;\n\n const scored: Array<{ node: Node<T>; score: number }> = [];\n\n for (const node of nodes) {\n const score = scoreFn(node, inputValue);\n if (score > 0) {\n scored.push({ node, score });\n }\n }\n\n // Sort by score descending\n scored.sort((a, b) => b.score - a.score);\n\n return scored.map((item) => item.node);\n };\n}\n\n/**\n * Creates a filter that matches any of multiple input terms (OR logic)\n * Splits input by spaces and matches if any term matches\n *\n * @param baseFilter - The underlying filter to use for each term (defaults to filterByText)\n * @returns A filter function that matches any term\n *\n * @example\n * ```tsx\n * const multiTermFilter = createMultiTermFilter();\n *\n * <ComboBox.Root\n * items={items}\n * filter={multiTermFilter}\n * placeholder=\"Search (space-separated terms)...\"\n * />\n * // Input \"eagle bison\" matches both \"Bald Eagle\" and \"Bison\"\n * ```\n *\n * **Behavior:**\n * - Splits input by whitespace\n * - Matches if ANY term matches (OR logic)\n * - Each term is filtered using the base filter\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Search with multiple keywords\n * - Tag-based filtering (e.g., \"react typescript\")\n * - Alternative spellings or synonyms\n * - Flexible search where users enter multiple criteria\n *\n * **Note:** To require ALL terms to match (AND logic), consider chaining filters\n * or implementing a custom filter function.\n */\nexport function createMultiTermFilter<T extends object>(\n baseFilter: (\n nodes: Iterable<Node<T>>,\n inputValue: string\n ) => Iterable<Node<T>> = filterByText\n): (nodes: Iterable<Node<T>>, inputValue: string) => Iterable<Node<T>> {\n return (nodes: Iterable<Node<T>>, inputValue: string): Iterable<Node<T>> => {\n if (!inputValue.trim()) return nodes;\n\n const terms = inputValue.split(/\\s+/).filter((term) => term.length > 0);\n if (terms.length === 0) return nodes;\n\n // Collect all matching nodes across all terms\n const matchingKeys = new Set<React.Key>();\n\n for (const term of terms) {\n const filtered = baseFilter(nodes, term);\n for (const node of filtered) {\n matchingKeys.add(node.key);\n }\n }\n\n // Return nodes that matched any term\n const result: Node<T>[] = [];\n for (const node of nodes) {\n if (matchingKeys.has(node.key)) {\n result.push(node);\n }\n }\n\n return result;\n };\n}\n\n/**\n * Creates a section-aware filter that preserves section structure\n * Wraps a custom filter function to work with sections, hiding empty sections\n *\n * @param itemFilter - Filter function to apply to individual items\n * @returns A filter function that preserves sections and hides empty ones\n *\n * @example\n * ```tsx\n * // Using with built-in filters\n * const sectionAwareStartsWith = createSectionAwareFilter(\n * (nodes, input) => filterByStartsWith(nodes, input)\n * );\n *\n * <ComboBox.Root\n * items={sectionsWithItems}\n * filter={sectionAwareStartsWith}\n * >\n * {(section) => (\n * <ComboBox.Section title={section.name}>\n * {section.items.map((item) => (\n * <ComboBox.Option key={item.id} textValue={item.name}>\n * {item.name}\n * </ComboBox.Option>\n * ))}\n * </ComboBox.Section>\n * )}\n * </ComboBox.Root>\n * ```\n *\n * @example\n * ```tsx\n * // Using with custom filter logic\n * const customSectionFilter = createSectionAwareFilter(\n * (nodes, input) => {\n * const lowerInput = input.toLowerCase();\n * const filtered: Node<T>[] = [];\n * for (const node of nodes) {\n * // Custom filtering logic\n * if (node.textValue.toLowerCase().startsWith(lowerInput)) {\n * filtered.push(node);\n * }\n * }\n * return filtered;\n * }\n * );\n * ```\n *\n * **Behavior:**\n * - Applies the item filter to items within each section\n * - Preserves section nodes in the output\n * - Automatically hides sections that have no matching items\n * - Returns all nodes when input is empty\n *\n * **Use Cases:**\n * - Categorized combobox options (Animals → Mammals, Birds, etc.)\n * - Grouped data where sections provide context\n * - Multi-level hierarchies that need filtering\n * - Search where maintaining visual grouping is important\n *\n * **Important Notes:**\n * - The item filter receives ONLY item nodes (not section nodes)\n * - Section nodes are detected by checking node.type === \"section\"\n * - Empty sections are automatically excluded from results\n * - Section order is preserved from the original collection\n *\n * **Performance:**\n * - Filters items separately for each section\n * - More efficient than flat filtering for large datasets with many sections\n */\nexport function createSectionAwareFilter<T extends object>(\n itemFilter: (\n nodes: Iterable<Node<T>>,\n inputValue: string\n ) => Iterable<Node<T>>\n): (nodes: Iterable<Node<T>>, inputValue: string) => Iterable<Node<T>> {\n return (nodes: Iterable<Node<T>>, inputValue: string): Iterable<Node<T>> => {\n if (!inputValue.trim()) return nodes;\n\n const result: Node<T>[] = [];\n let currentSection: Node<T> | null = null;\n const currentSectionItems: Node<T>[] = [];\n\n // Helper to flush current section if it has matching items\n const flushSection = () => {\n if (currentSection && currentSectionItems.length > 0) {\n result.push(currentSection);\n result.push(...currentSectionItems);\n }\n currentSectionItems.length = 0;\n };\n\n for (const node of nodes) {\n // Check if this is a section node\n if (node.type === \"section\") {\n // Flush previous section if any\n flushSection();\n // Store this section for potential inclusion\n currentSection = node;\n } else {\n // This is an item node - apply filter\n const filteredItems = Array.from(itemFilter([node], inputValue));\n if (filteredItems.length > 0) {\n currentSectionItems.push(...filteredItems);\n }\n }\n }\n\n // Flush the last section\n flushSection();\n\n return result;\n };\n}\n","// Export individual components\nimport {\n ComboBoxRoot,\n ComboBoxTrigger,\n ComboBoxPopover,\n ComboBoxListBox,\n ComboBoxOption,\n ComboBoxSection,\n} from \"./components\";\n\n// Export filter utilities\nimport {\n filterByText,\n filterByStartsWith,\n filterByCaseSensitive,\n filterByWordBoundary,\n filterByFuzzy,\n createMultiPropertyFilter,\n createRankedFilter,\n createMultiTermFilter,\n createSectionAwareFilter,\n} from \"./utils/filters\";\n\n/**\n * # ComboBox\n * ============================================================\n *\n * A searchable, filterable selection component with single and multi-select support.\n * Built with React Aria Components for accessibility and keyboard navigation.\n *\n * @see {@link https://nimbus-documentation.vercel.app/components/inputs/combobox}\n *\n * @example\n * ```tsx\n * <ComboBox.Root items={items}>\n * <ComboBox.Trigger />\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * ```\n */\nexport const ComboBox = {\n /**\n * # ComboBox.Root\n *\n * The root component that provides state management and context for the combobox.\n * Handles selection state, input filtering, popover open/close, and keyboard navigation.\n *\n * @example\n * ```tsx\n * <ComboBox.Root items={items}>\n * <ComboBox.Trigger />\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * ```\n */\n Root: ComboBoxRoot,\n\n /**\n * # ComboBox.Trigger\n *\n * The trigger element that contains the input field and controls for the combobox.\n * Automatically renders tag group (multi-select), input field, toggle button, and clear button.\n *\n * @example\n * ```tsx\n * <ComboBox.Root items={items}>\n * <ComboBox.Trigger />\n * <ComboBox.Popover>...</ComboBox.Popover>\n * </ComboBox.Root>\n * ```\n */\n Trigger: ComboBoxTrigger,\n\n /**\n * # ComboBox.Popover\n *\n * The popover container that displays the dropdown options list.\n * Renders in a React portal and handles positioning relative to the trigger.\n *\n * @example\n * ```tsx\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * ```\n */\n Popover: ComboBoxPopover,\n\n /**\n * # ComboBox.ListBox\n *\n * The container for dropdown options that displays filtered results.\n *\n * Use the render prop pattern - do **NOT** manually map over items as this is less performant.\n *\n * @example\n * ```tsx\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * ```\n */\n ListBox: ComboBoxListBox,\n\n /**\n * # ComboBox.Option\n *\n * An individual selectable option within the listbox.\n * Displays a checkmark indicator for selected items in multi-select mode.\n *\n * @example\n * ```tsx\n * <ComboBox.Option>Option text</ComboBox.Option>\n * ```\n *\n * @example Render prop pattern\n * ```tsx\n * <ComboBox.Option>\n * {({ isSelected }) => (\n * <span>Option 1 {isSelected && \"✓\"}</span>\n * )}\n * </ComboBox.Option>\n * ```\n */\n Option: ComboBoxOption,\n\n /**\n * # ComboBox.Section\n *\n * Groups related options together with an optional heading.\n * Supports render prop pattern for dynamic option rendering within sections.\n *\n * @example\n * ```tsx\n * <ComboBox.Section label=\"Category Name\">\n * <ComboBox.Option id=\"opt-1\">Option 1</ComboBox.Option>\n * <ComboBox.Option id=\"opt-2\">Option 2</ComboBox.Option>\n * </ComboBox.Section>\n * ```\n *\n * @example Render prop pattern\n * ```tsx\n * <ComboBox.Section items={categoryItems}>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.Section>\n * ```\n */\n Section: ComboBoxSection,\n\n /**\n * # ComboBox.filters\n *\n * Built-in filter functions and utilities for customizing ComboBox filtering behavior.\n * These filters can be passed to the `filter` prop on ComboBox.Root to control how options are filtered based on user input.\n *\n * **Available Filters:**\n * - `filterByText`: Default substring matching (case-insensitive)\n * - `filterByStartsWith`: Prefix matching\n * - `filterByCaseSensitive`: Exact case substring matching\n * - `filterByWordBoundary`: Word boundary matching\n * - `filterByFuzzy`: Fuzzy matching (characters in order)\n * - `createMultiPropertyFilter`: Search across multiple object properties\n * - `createRankedFilter`: Custom scoring/ranking logic\n * - `createMultiTermFilter`: OR logic for multiple search terms\n * - `createSectionAwareFilter`: Preserves section structure while filtering\n *\n * @example Basic filter usage\n * ```tsx\n * import { ComboBox } from '@commercetools/nimbus';\n *\n * function MyComponent() {\n * return (\n * <ComboBox.Root\n * items={items}\n * filter={ComboBox.filters.filterByStartsWith}\n * >\n * <ComboBox.Trigger />\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * );\n * }\n * ```\n *\n * @example Multi-property search\n * ```tsx\n * const productFilter = ComboBox.filters.createMultiPropertyFilter<Product>([\n * 'name',\n * 'category',\n * 'description'\n * ]);\n *\n * function ProductSearch() {\n * return (\n * <ComboBox.Root items={products} filter={productFilter}>\n * <ComboBox.Trigger />\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * );\n * }\n * ```\n *\n * @example Section-aware filtering\n * ```tsx\n * const sectionFilter = ComboBox.filters.createSectionAwareFilter(\n * ComboBox.filters.filterByFuzzy\n * );\n *\n * function SectionedSearch() {\n * return (\n * <ComboBox.Root items={sectionsWithItems} filter={sectionFilter}>\n * <ComboBox.Trigger />\n * <ComboBox.Popover>\n * <ComboBox.ListBox>\n * {(section) => (\n * <ComboBox.Section>\n * {(item) => <ComboBox.Option>{item.name}</ComboBox.Option>}\n * </ComboBox.Section>\n * )}\n * </ComboBox.ListBox>\n * </ComboBox.Popover>\n * </ComboBox.Root>\n * );\n * }\n * ```\n */\n filters: {\n filterByText,\n filterByStartsWith,\n filterByCaseSensitive,\n filterByWordBoundary,\n filterByFuzzy,\n createMultiPropertyFilter,\n createRankedFilter,\n createMultiTermFilter,\n createSectionAwareFilter,\n },\n};\n"],"names":["$f86e6c1ec7da6ebb$var$reducer","data","action","selectedKeys","_action_filterText","_action_sortDescriptor","_action_updater","_action_selectedKeys","_action_filterText1","_action_items","_action_sortDescriptor1","_data_abortController","_action_filterText2","_action_updater1","_action_selectedKeys1","_action_items1","_action_sortDescriptor2","_data_abortController1","_action_filterText3","_action_abortController","_action_updater2","$f86e6c1ec7da6ebb$export$bc3384a35de93d66","options","load","sort","initialSelectedKeys","initialSortDescriptor","getKey","item","initialFilterText","dispatch","$fh1mr$useReducer","dispatchFetch","fn","abortController","previousFilterText","response","_response_filterText","filterText","e","didDispatchInitialFetch","$fh1mr$useRef","$fh1mr$useEffect","key","sortDescriptor","$0d86e9c8f07f9a7b$export$79c0c687a5963b0a","$d01f2c01039c0eec$export$d414ccceff7063c3","$cP7hC$createContext","c","u","i","l","a","r","o","f","v","d","m","s","g","h","x","E","b","p","y","w","O","F","L","A","D","n","t","S","withProvider","withContext","createSlotRecipeContext","ComboBoxRootSlot","ComboBoxTriggerSlot","ComboBoxLeadingElementSlot","ComboBoxContentSlot","ComboBoxTagGroupSlot","ComboBoxInputSlot","ComboBoxPopoverSlot","ComboBoxListBoxSlot","ComboBoxSectionSlot","ComboBoxOptionSlot","ComboBoxOptionIndicatorSlot","ComboBoxOptionContentSlot","comboboxMessages_en","comboboxMessages_de","comboboxMessages_es","comboboxMessages_fr","comboboxMessages_pt","comboboxMessagesStrings","normalizeMessages","defaultGetKey","defaultGetTextValue","defaultGetNewOptionData","inputValue","normalizeSelectedKeys","keys","denormalizeSelectedKeys","ComboBoxRootContext","createContext","useComboBoxRootContext","context","useContext","ComboBoxHiddenInput","props","name","form","selectionMode","formValue","allowsCustomOptions","collection","value","useMemo","selectedKey","node","jsx","ComboBoxRoot","ref","useContextProps","ComboBoxContext","size","getTextValue","children","leadingElement","inputValueFromProps","onInputChangeFromProps","isLoadingFromProps","allowsEmptyMenuFromProps","renderEmptyStateFromProps","asyncConfig","filter","isDisabled","isInvalid","isRequired","isReadOnly","recipe","useSlotRecipe","recipeProps","restRecipeProps","styleProps","functionalProps","extractStyleProps","triggerRef","useRef","inputRef","customCreatedItems","setCustomCreatedItems","useState","asyncList","useAsyncList","signal","minLength","items","err","error","asyncInputValue","setAsyncInputValue","asyncPending","setAsyncPending","asyncSelectedItems","setAsyncSelectedItems","debounceMs","debouncedSetFilterText","useDebouncedCallback","asyncOnInputChange","useCallback","onInputChange","isLoading","allowsEmptyMenu","asyncDefaultRenderEmptyState","customDefaultRenderEmptyState","renderEmptyState","baseItems","baseItemsArray","existingKeys","mergedItems","mergedKeys","rootContextValue","itemsWithMetadata","hasId","hasTextValue","content","ListBoxContext","Provider","ButtonContext","InputContext","TagGroupContext","CollectionBuilder","ComboBoxRootInner","msg","useLocalizedStringFormatter","selectedKeysFromProps","onSelectionChange","disabledKeys","placeholder","menuTrigger","shouldCloseOnBlur","shouldCloseOnSelect","controlledIsOpen","defaultOpen","onOpenChange","isValidNewOption","getNewOptionData","onCreateOption","ariaLabel","ariaLabelledBy","ariaDescribedBy","shouldFocusWrap","autoFocus","validationBehavior","validate","onAsyncSelectedItemsChange","onAddCustomItem","onAddAsyncSelectedItem","listboxId","useId","tagGroupId","listBoxRef","popoverRef","normalizedSelectedKeysFromProps","isSelectionControlled","internalNormalizedSelectedKeys","setInternalSelectedKeys","normalizedSelectedKeys","isInputControlled","computeInitialInputValue","selectedKeysArray","internalInputValue","setInternalInputValue","prevInputValueRef","internalIsOpen","setInternalIsOpen","isOpen","focusStrategy","setFocusStrategy","setIsOpen","open","filteredCollection","allNodes","filteredNodes","filteredKeys","_nodeValue","lowerInput","nodeValue","selectedItemsFromState","triggerWidth","setTriggerWidth","toggleOpen","willOpen","prev","handleInputChange","handleSelectionChange","previousKeys","actualKeys","comparisonKeys","isProperSubset","clickedKey","isAlreadySelected","newSelection","denormalized","selectedItems","textValue","state","useListState","clearSelection","handleCustomOptionCreated","newItem","newKey","currentKeys","handleCreateOption","trimmedInput","removeKey","keysToRemove","newKeys","handleInputKeyDown","currentKey","nextKey","prevKey","focusedKey","firstKey","lastKey","handleFocus","handleBlur","comboboxRoot","currentFocus","lastSelectedKeyRef","useEffect","prevIsOpenRef","currentSelectedKey","selectedNode","itemText","collectionPopulatedRef","triggerElement","updateTriggerWidth","width","resizeObserver","contextValues","PopoverContext","LabelContext","GroupContext","TextContext","SelectableCollectionContext","ListStateContext","jsxs","ComboBoxInput","inputContext","currentValue","inputSize","RaInput","ComboBoxLeadingElement","ComboBoxTagGroup","tagGroupContext","TagGroup","itemKey","itemValue","ComboBoxTrigger","restProps","IconButton","Close","LoadingSpinner","KeyboardArrowDown","ComboBoxPopover","Popover","ComboBoxListBox","RaListBox","element","itemWithMetadata","isValidElement","cloneElement","ComboBoxOption","ListBoxItem","renderProps","Fragment","Check","ComboBoxSection","label","RaListBoxSection","RaHeader","Collection","filterByText","nodes","filtered","filterByStartsWith","filterByCaseSensitive","filterByWordBoundary","escapedInput","regex","filterByFuzzy","lowerText","inputIndex","createMultiPropertyFilter","propertyPaths","path","obj","createRankedFilter","scoreFn","scored","score","createMultiTermFilter","baseFilter","terms","term","matchingKeys","result","createSectionAwareFilter","itemFilter","currentSection","currentSectionItems","flushSection","filteredItems","ComboBox"],"mappings":"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","x_google_ignoreList":[0,1,2]}