@servicetitan/anvil2 2.7.1 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/CHANGELOG.md +73 -1
  2. package/dist/{floating-ui.react-aKYfs-aw.js → AiMark-DR-w6Nbm.js} +767 -5
  3. package/dist/AiMark-DR-w6Nbm.js.map +1 -0
  4. package/dist/AiMark.css +260 -0
  5. package/dist/AiMark.d.ts +2 -0
  6. package/dist/AiMark.js +2 -0
  7. package/dist/AiMark.js.map +1 -0
  8. package/dist/{Alert-C_o2f78C.js → Alert-Dj61Bq8h.js} +27 -13
  9. package/dist/Alert-Dj61Bq8h.js.map +1 -0
  10. package/dist/Alert.css +23 -15
  11. package/dist/Alert.js +1 -1
  12. package/dist/{Announcement-CyrTvgP4.js → Announcement-B9zm-_1S.js} +2 -2
  13. package/dist/{Announcement-CyrTvgP4.js.map → Announcement-B9zm-_1S.js.map} +1 -1
  14. package/dist/Announcement.js +1 -1
  15. package/dist/{AnvilProvider-ClfmLl_6.js → AnvilProvider-DUPYyMc7.js} +2 -2
  16. package/dist/{AnvilProvider-ClfmLl_6.js.map → AnvilProvider-DUPYyMc7.js.map} +1 -1
  17. package/dist/AnvilProvider.js +1 -1
  18. package/dist/{Breadcrumbs-C_WK9Yul.js → Breadcrumbs-ojgYVZwe.js} +3 -3
  19. package/dist/{Breadcrumbs-C_WK9Yul.js.map → Breadcrumbs-ojgYVZwe.js.map} +1 -1
  20. package/dist/Breadcrumbs.js +1 -1
  21. package/dist/Button-BdrrhBTI.js +2185 -0
  22. package/dist/Button-BdrrhBTI.js.map +1 -0
  23. package/dist/Button.js +1 -1
  24. package/dist/{ButtonToggle-DaYJWso_.js → ButtonToggle-DaFQ3DBG.js} +2 -2
  25. package/dist/{ButtonToggle-DaYJWso_.js.map → ButtonToggle-DaFQ3DBG.js.map} +1 -1
  26. package/dist/ButtonToggle.js +1 -1
  27. package/dist/{Calendar-BTStJPV1.js → Calendar-Cka4unyi.js} +2 -2
  28. package/dist/{Calendar-BTStJPV1.js.map → Calendar-Cka4unyi.js.map} +1 -1
  29. package/dist/{Calendar-Frpv5rRY.js → Calendar-Dxl9QnfP.js} +3 -3
  30. package/dist/{Calendar-Frpv5rRY.js.map → Calendar-Dxl9QnfP.js.map} +1 -1
  31. package/dist/Calendar.js +2 -2
  32. package/dist/Card-wz71dEVA.js.map +1 -1
  33. package/dist/{Checkbox-Drgai_lS.js → Checkbox-B-XTVPbX.js} +24 -13
  34. package/dist/Checkbox-B-XTVPbX.js.map +1 -0
  35. package/dist/{Checkbox-CTZdZym4.js → Checkbox-Cw1-KFvq.js} +2 -2
  36. package/dist/{Checkbox-CTZdZym4.js.map → Checkbox-Cw1-KFvq.js.map} +1 -1
  37. package/dist/Checkbox.js +1 -1
  38. package/dist/{Chip-CVyEctAz.js → Chip-Ce0WGKAc.js} +42 -12
  39. package/dist/Chip-Ce0WGKAc.js.map +1 -0
  40. package/dist/Chip.css +44 -28
  41. package/dist/Chip.js +1 -1
  42. package/dist/{Combobox-BRtfrYyZ.js → Combobox-CNQUROyr.js} +4 -4
  43. package/dist/{Combobox-BRtfrYyZ.js.map → Combobox-CNQUROyr.js.map} +1 -1
  44. package/dist/Combobox.js +1 -1
  45. package/dist/{DataTable-BmVPjMMg.js → DataTable-BCV_mtSy.js} +572 -98
  46. package/dist/DataTable-BCV_mtSy.js.map +1 -0
  47. package/dist/DataTable.css +148 -103
  48. package/dist/{DateFieldRange-D9DtlkSQ.js → DateFieldRange-D2hnF50O.js} +6 -6
  49. package/dist/{DateFieldRange-D9DtlkSQ.js.map → DateFieldRange-D2hnF50O.js.map} +1 -1
  50. package/dist/DateFieldRange.js +1 -1
  51. package/dist/{DateFieldSingle-CkdeCUJv.js → DateFieldSingle-BuaB7RDr.js} +6 -6
  52. package/dist/{DateFieldSingle-CkdeCUJv.js.map → DateFieldSingle-BuaB7RDr.js.map} +1 -1
  53. package/dist/DateFieldSingle.js +1 -1
  54. package/dist/{DateFieldYearless-b81ZcYdp.js → DateFieldYearless-DLeMEutt.js} +22 -6
  55. package/dist/DateFieldYearless-DLeMEutt.js.map +1 -0
  56. package/dist/DateFieldYearless.js +1 -1
  57. package/dist/{DateFieldYearlessRange-ClAFzIDD.js → DateFieldYearlessRange-BfPuYKKC.js} +3 -3
  58. package/dist/DateFieldYearlessRange-BfPuYKKC.js.map +1 -0
  59. package/dist/DateFieldYearlessRange.js +1 -1
  60. package/dist/{DaysOfTheWeek-2Zeh79oR.js → DaysOfTheWeek-BW1T8sTU.js} +4 -4
  61. package/dist/{DaysOfTheWeek-2Zeh79oR.js.map → DaysOfTheWeek-BW1T8sTU.js.map} +1 -1
  62. package/dist/DaysOfTheWeek.js +1 -1
  63. package/dist/{Dialog-CloZWa1Q.js → Dialog-Cewu2pd_.js} +38 -10
  64. package/dist/Dialog-Cewu2pd_.js.map +1 -0
  65. package/dist/Dialog.js +1 -1
  66. package/dist/{DialogCancelButton-DQDMzGeT.js → DialogCancelButton-Czz4Wpse.js} +2 -2
  67. package/dist/{DialogCancelButton-DQDMzGeT.js.map → DialogCancelButton-Czz4Wpse.js.map} +1 -1
  68. package/dist/{Drawer-CfkoH081.js → Drawer-Cb5asXWf.js} +38 -10
  69. package/dist/Drawer-Cb5asXWf.js.map +1 -0
  70. package/dist/Drawer.js +1 -1
  71. package/dist/DrillDown.js +1 -1
  72. package/dist/DrillDown.module-C8VOhzaF.js.map +1 -1
  73. package/dist/{EditCard-CLN0GBN_.js → EditCard-DlJE3LXN.js} +3 -3
  74. package/dist/{EditCard-CLN0GBN_.js.map → EditCard-DlJE3LXN.js.map} +1 -1
  75. package/dist/EditCard.js +1 -1
  76. package/dist/FieldLabel-HO2VP-4B.js +180 -0
  77. package/dist/FieldLabel-HO2VP-4B.js.map +1 -0
  78. package/dist/FieldLabel.css +33 -73
  79. package/dist/FieldLabel.js +1 -1
  80. package/dist/{InputMask-CI4Q5UwG.js → InputMask-CLLTehFI.js} +3 -3
  81. package/dist/{InputMask-CI4Q5UwG.js.map → InputMask-CLLTehFI.js.map} +1 -1
  82. package/dist/InputMask.js +1 -1
  83. package/dist/{ListView-DAbBuss4.js → ListView-CPi-qG2w.js} +2 -2
  84. package/dist/{ListView-DAbBuss4.js.map → ListView-CPi-qG2w.js.map} +1 -1
  85. package/dist/ListView.js +1 -1
  86. package/dist/{Listbox-D_T55BFX.js → Listbox-Bp4hqIpH.js} +2 -2
  87. package/dist/{Listbox-D_T55BFX.js.map → Listbox-Bp4hqIpH.js.map} +1 -1
  88. package/dist/Listbox.js +1 -1
  89. package/dist/{Menu-CRoJYJ53.js → Menu-CCavGohP.js} +92 -95
  90. package/dist/Menu-CCavGohP.js.map +1 -0
  91. package/dist/Menu.js +1 -1
  92. package/dist/MultiSelectField.js +1 -1
  93. package/dist/{MultiSelectFieldSync-CSOitvtu.js → MultiSelectFieldSync-ChZCW4M9.js} +32 -19
  94. package/dist/MultiSelectFieldSync-ChZCW4M9.js.map +1 -0
  95. package/dist/MultiSelectMenu.js +1 -1
  96. package/dist/{MultiSelectMenuSync-62OeGmkz.js → MultiSelectMenuSync-7C1wW4oO.js} +3 -3
  97. package/dist/{MultiSelectMenuSync-62OeGmkz.js.map → MultiSelectMenuSync-7C1wW4oO.js.map} +1 -1
  98. package/dist/{NumberField-CHBXBMSj.js → NumberField-CZSTHBeO.js} +16 -5
  99. package/dist/NumberField-CZSTHBeO.js.map +1 -0
  100. package/dist/NumberField.js +1 -1
  101. package/dist/{Page-DtSjnBJL.js → Page-BHdvTlfE.js} +116 -63
  102. package/dist/Page-BHdvTlfE.js.map +1 -0
  103. package/dist/Page.css +76 -76
  104. package/dist/Page.js +1 -1
  105. package/dist/{Pagination-CbBte3GQ.js → Pagination-DecGSuW4.js} +5 -5
  106. package/dist/{Pagination-CbBte3GQ.js.map → Pagination-DecGSuW4.js.map} +1 -1
  107. package/dist/Pagination.js +1 -1
  108. package/dist/{Popover-Rha0q-Pv.js → Popover-BbqTZw-1.js} +4 -6
  109. package/dist/{Popover-Rha0q-Pv.js.map → Popover-BbqTZw-1.js.map} +1 -1
  110. package/dist/Popover.js +1 -1
  111. package/dist/{ProgressBar-DEaMqbM-.js → ProgressBar-CZcxkdX6.js} +2 -2
  112. package/dist/{ProgressBar-DEaMqbM-.js.map → ProgressBar-CZcxkdX6.js.map} +1 -1
  113. package/dist/ProgressBar.js +1 -1
  114. package/dist/{Radio-CCvu8mbI.js → Radio-BFr8AdHc.js} +2 -2
  115. package/dist/{Radio-CCvu8mbI.js.map → Radio-BFr8AdHc.js.map} +1 -1
  116. package/dist/{Radio-Bw2LDl9G.js → Radio-DJZVMCv0.js} +24 -13
  117. package/dist/Radio-DJZVMCv0.js.map +1 -0
  118. package/dist/Radio.js +1 -1
  119. package/dist/{SegmentedControl-BAi4pnFe.js → SegmentedControl-B9NWUF7s.js} +3 -3
  120. package/dist/{SegmentedControl-BAi4pnFe.js.map → SegmentedControl-B9NWUF7s.js.map} +1 -1
  121. package/dist/SegmentedControl.js +1 -1
  122. package/dist/{SelectCard-ZaAD0wR1.js → SelectCard-DVcWJRbX.js} +51 -24
  123. package/dist/SelectCard-DVcWJRbX.js.map +1 -0
  124. package/dist/SelectCard.js +1 -1
  125. package/dist/SelectField.js +1 -1
  126. package/dist/{SelectFieldLabel-EJCXA02B.js → SelectFieldLabel-kEBS8L4l.js} +5 -4
  127. package/dist/SelectFieldLabel-kEBS8L4l.js.map +1 -0
  128. package/dist/{SelectFieldSync-DA54WXOk.js → SelectFieldSync-o1Cp9UYC.js} +14 -14
  129. package/dist/SelectFieldSync-o1Cp9UYC.js.map +1 -0
  130. package/dist/SelectMenu.js +1 -1
  131. package/dist/{SelectMenuSync-BQaSTcaN.js → SelectMenuSync-DXrwecFt.js} +3 -3
  132. package/dist/{SelectMenuSync-BQaSTcaN.js.map → SelectMenuSync-DXrwecFt.js.map} +1 -1
  133. package/dist/{SelectOptions-D-DzWmKE.js → SelectOptions-Dy2OWqxn.js} +2 -2
  134. package/dist/{SelectOptions-D-DzWmKE.js.map → SelectOptions-Dy2OWqxn.js.map} +1 -1
  135. package/dist/{SelectTrigger-DWyRndmY.js → SelectTrigger-DhKYzEAr.js} +7 -5
  136. package/dist/SelectTrigger-DhKYzEAr.js.map +1 -0
  137. package/dist/SelectTrigger.js +1 -1
  138. package/dist/{SelectTriggerBase-B6aZd2a6.js → SelectTriggerBase-Ni8WqeUx.js} +76 -63
  139. package/dist/SelectTriggerBase-Ni8WqeUx.js.map +1 -0
  140. package/dist/SelectTriggerBase.css +83 -66
  141. package/dist/SelectTriggerBase.module-CKoq6qzX.js +38 -0
  142. package/dist/SelectTriggerBase.module-CKoq6qzX.js.map +1 -0
  143. package/dist/{SideNav-CxHemV3H.js → SideNav-CrxYExjh.js} +11 -11
  144. package/dist/{SideNav-CxHemV3H.js.map → SideNav-CrxYExjh.js.map} +1 -1
  145. package/dist/SideNav.css +72 -55
  146. package/dist/SideNav.js +1 -1
  147. package/dist/Skeleton.css +18 -12
  148. package/dist/Skeleton.js +24 -11
  149. package/dist/Skeleton.js.map +1 -1
  150. package/dist/{Stepper-CQUXV6P4.js → Stepper-Dt2xAXth.js} +3 -3
  151. package/dist/{Stepper-CQUXV6P4.js.map → Stepper-Dt2xAXth.js.map} +1 -1
  152. package/dist/Stepper.js +1 -1
  153. package/dist/{Switch-DpPHr3G3.js → Switch-C84MBChG.js} +14 -2
  154. package/dist/Switch-C84MBChG.js.map +1 -0
  155. package/dist/Switch.js +1 -1
  156. package/dist/{Tab-BGGNcz9S.js → Tab-BZpTCG0i.js} +3 -3
  157. package/dist/{Tab-BGGNcz9S.js.map → Tab-BZpTCG0i.js.map} +1 -1
  158. package/dist/Tab.js +1 -1
  159. package/dist/Table.js +1 -1
  160. package/dist/{Text-BJo4oMI2.js → Text-WiS8UZkY.js} +30 -12
  161. package/dist/Text-WiS8UZkY.js.map +1 -0
  162. package/dist/Text.css +37 -20
  163. package/dist/Text.js +1 -1
  164. package/dist/{TextField-o8zvVFDk.js → TextField-Bul_uln5.js} +21 -5
  165. package/dist/TextField-Bul_uln5.js.map +1 -0
  166. package/dist/{TextField-CMv9CpBq.js → TextField-OznkTx4e.js} +2 -2
  167. package/dist/{TextField-CMv9CpBq.js.map → TextField-OznkTx4e.js.map} +1 -1
  168. package/dist/TextField.js +1 -1
  169. package/dist/{Textarea-B4bBvO8c.js → Textarea-CCYLsJ1x.js} +21 -5
  170. package/dist/Textarea-CCYLsJ1x.js.map +1 -0
  171. package/dist/Textarea.js +1 -1
  172. package/dist/{TimeField-BEgnjk4R.js → TimeField-BPvPbD8H.js} +6 -5
  173. package/dist/{TimeField-BEgnjk4R.js.map → TimeField-BPvPbD8H.js.map} +1 -1
  174. package/dist/TimeField.js +1 -1
  175. package/dist/Toast.js +2 -2
  176. package/dist/{Toaster-B38WlKC7.js → Toaster-CIaIvwH6.js} +2 -2
  177. package/dist/{Toaster-B38WlKC7.js.map → Toaster-CIaIvwH6.js.map} +1 -1
  178. package/dist/{Toaster-6_LVKok2.js → Toaster-DYJm06Vb.js} +5 -5
  179. package/dist/Toaster-DYJm06Vb.js.map +1 -0
  180. package/dist/{Toolbar-0EKhrvZN.js → Toolbar-ByyI7SqG.js} +15 -15
  181. package/dist/{Toolbar-0EKhrvZN.js.map → Toolbar-ByyI7SqG.js.map} +1 -1
  182. package/dist/Toolbar.js +1 -1
  183. package/dist/{Tooltip-BHwSTwsv.js → Tooltip-C1PBRnJv.js} +2 -3
  184. package/dist/{Tooltip-BHwSTwsv.js.map → Tooltip-C1PBRnJv.js.map} +1 -1
  185. package/dist/Tooltip.js +1 -1
  186. package/dist/{YearlessDateInputWithPicker-BC4lRuny.js → YearlessDateInputWithPicker-C_twiQW5.js} +2 -3
  187. package/dist/{YearlessDateInputWithPicker-BC4lRuny.js.map → YearlessDateInputWithPicker-C_twiQW5.js.map} +1 -1
  188. package/dist/assets/icons/st/ai_mark_gradient.svg +1 -1
  189. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
  190. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldInput.d.ts +3 -2
  191. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
  192. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldTrigger.d.ts +3 -2
  193. package/dist/beta/components/MultiSelectField/internal/types.d.ts +4 -3
  194. package/dist/beta/components/MultiSelectField/types.d.ts +28 -7
  195. package/dist/beta/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
  196. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +4 -4
  197. package/dist/beta/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
  198. package/dist/beta/components/SelectField/types.d.ts +5 -5
  199. package/dist/beta/components/Table/DataTable/DataTable.d.ts +8 -5
  200. package/dist/beta/components/Table/DataTable/internal/DataTableFooter.d.ts +5 -5
  201. package/dist/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +4 -4
  202. package/dist/beta/components/Table/DataTable/internal/usePageDataCache.d.ts +29 -0
  203. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +13 -2
  204. package/dist/beta/components/Table/DataTable/types.d.ts +30 -0
  205. package/dist/beta/components/Table/base/cells/TableHeaderCell.d.ts +4 -0
  206. package/dist/beta/components/Table/createColumnHelper.d.ts +17 -10
  207. package/dist/beta/components/Table/formatters/htmlFormatter.d.ts +13 -0
  208. package/dist/beta/components/Table/formatters/htmlToMarkdown.d.ts +11 -0
  209. package/dist/beta/components/Table/formatters/index.d.ts +2 -0
  210. package/dist/beta/components/Table/formatters/markdownFormatter.d.ts +11 -0
  211. package/dist/beta/components/Table/types.d.ts +41 -8
  212. package/dist/beta/components/Toolbar/Toolbar.d.ts +10 -6
  213. package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +5 -3
  214. package/dist/beta.js +9 -9
  215. package/dist/components/AiMark/AiMark.d.ts +87 -0
  216. package/dist/components/AiMark/index.d.ts +1 -0
  217. package/dist/components/AiMark/internal/AiMarkIconAnimated.d.ts +30 -0
  218. package/dist/components/AiMark/internal/AiMarkInteractive.d.ts +10 -0
  219. package/dist/components/AiMark/stories/aiMarkStoryArgTypes.d.ts +16 -0
  220. package/dist/components/Alert/Alert.d.ts +12 -0
  221. package/dist/components/Button/Button.d.ts +14 -6
  222. package/dist/components/Button/internal/buttonAiMarkUtils.d.ts +18 -0
  223. package/dist/components/Button/internal/index.d.ts +1 -0
  224. package/dist/components/Card/Card.d.ts +6 -1
  225. package/dist/components/Checkbox/Checkbox.d.ts +2 -0
  226. package/dist/components/Checkbox/CheckboxGroup.d.ts +27 -6
  227. package/dist/components/Chip/Chip.d.ts +10 -1
  228. package/dist/components/Chip/internal/Chip.d.ts +4 -0
  229. package/dist/components/DateFieldRange/internal/MaskedDateRangeInput.d.ts +1 -1
  230. package/dist/components/DateFieldRange/internal/useDateFieldRangeConversion.d.ts +1 -1
  231. package/dist/components/DateFieldSingle/internal/MaskedDateInput.d.ts +1 -1
  232. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -1
  233. package/dist/components/DateFieldYearless/internal/YearlessDateInput.d.ts +1 -1
  234. package/dist/components/DateFieldYearless/internal/YearlessDateInputWithPicker.d.ts +1 -1
  235. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +7 -0
  236. package/dist/components/DrillDown/internal/DrillDownContext.d.ts +4 -0
  237. package/dist/components/DrillDown/internal/useDrillDownContextState.d.ts +4 -0
  238. package/dist/components/FieldLabel/FieldLabel.d.ts +2 -1
  239. package/dist/components/FieldLabel/internal/FieldLabelButton.d.ts +3 -2
  240. package/dist/components/NumberField/NumberField.d.ts +29 -2
  241. package/dist/components/Radio/Radio.d.ts +2 -0
  242. package/dist/components/Radio/RadioGroup.d.ts +27 -6
  243. package/dist/components/SelectCard/SelectCard.d.ts +1 -1
  244. package/dist/components/SelectCard/SelectCardGroup.d.ts +18 -1
  245. package/dist/components/SelectCard/internal/SelectCardContext.d.ts +11 -0
  246. package/dist/components/SelectCard/internal/SelectCardProvider.d.ts +11 -1
  247. package/dist/components/Skeleton/SkeletonCircle.d.ts +8 -0
  248. package/dist/components/Skeleton/SkeletonPill.d.ts +8 -0
  249. package/dist/components/Skeleton/SkeletonRectangle.d.ts +8 -0
  250. package/dist/components/Skeleton/SkeletonText.d.ts +6 -1
  251. package/dist/components/Skeleton/index.d.ts +3 -0
  252. package/dist/components/Switch/Switch.d.ts +11 -1
  253. package/dist/components/Text/types.d.ts +9 -0
  254. package/dist/components/TextField/internal/TextField.d.ts +11 -0
  255. package/dist/components/Textarea/Textarea.d.ts +9 -2
  256. package/dist/components/Toast/internal/Toast.d.ts +5 -0
  257. package/dist/components/Toast/toast.d.ts +1 -1
  258. package/dist/components/Toolbar/Toolbar.d.ts +5 -3
  259. package/dist/components/Toolbar/ToolbarSelect.d.ts +5 -3
  260. package/dist/components/index.d.ts +1 -0
  261. package/dist/{floating-ui.react-dom-imrk9N49.js → floating-ui.react-dom-CHrYz13o.js} +17 -2
  262. package/dist/floating-ui.react-dom-CHrYz13o.js.map +1 -0
  263. package/dist/hooks/index.d.ts +1 -0
  264. package/dist/hooks/usePrefersReducedMotion/index.d.ts +1 -0
  265. package/dist/hooks/usePrefersReducedMotion/usePrefersReducedMotion.d.ts +15 -0
  266. package/dist/index.js +48 -47
  267. package/dist/index.js.map +1 -1
  268. package/dist/internal/components/InlineMarkdown/InlineMarkdown.d.ts +23 -0
  269. package/dist/internal/components/InlineMarkdown/index.d.ts +1 -0
  270. package/dist/internal/components/Label/Label.d.ts +1 -1
  271. package/dist/internal/components/Popover/Popover.d.ts +3 -1
  272. package/dist/internal/components/index.d.ts +2 -1
  273. package/dist/internal/flubber/a2c.d.ts +16 -0
  274. package/dist/internal/flubber/add.d.ts +3 -0
  275. package/dist/internal/flubber/arc.d.ts +26 -0
  276. package/dist/internal/flubber/bezier.d.ts +32 -0
  277. package/dist/internal/flubber/errors.d.ts +5 -0
  278. package/dist/internal/flubber/index.d.ts +6 -0
  279. package/dist/internal/flubber/interpolate.d.ts +7 -0
  280. package/dist/internal/flubber/linear.d.ts +27 -0
  281. package/dist/internal/flubber/math.d.ts +10 -0
  282. package/dist/internal/flubber/normalize.d.ts +4 -0
  283. package/dist/internal/flubber/parse.d.ts +7 -0
  284. package/dist/internal/flubber/path-properties.d.ts +23 -0
  285. package/dist/internal/flubber/rotate.d.ts +2 -0
  286. package/dist/internal/flubber/svg.d.ts +9 -0
  287. package/dist/internal/functions/index.d.ts +2 -0
  288. package/dist/internal/functions/inlineMarkdown.d.ts +20 -0
  289. package/dist/internal/functions/stripInlineMarkdown.d.ts +8 -0
  290. package/dist/internal/index.d.ts +1 -0
  291. package/dist/internal/types/props.d.ts +2 -1
  292. package/dist/internal/types/selectFieldInternalTypes.d.ts +2 -2
  293. package/dist/internal/utils/index.d.ts +1 -0
  294. package/dist/internal/utils/inlineMarkdownRegex.d.ts +5 -0
  295. package/dist/{proxy-BbFHSE6L.js → proxy-DEehATlA.js} +8 -2
  296. package/dist/{proxy-BbFHSE6L.js.map → proxy-DEehATlA.js.map} +1 -1
  297. package/dist/stripInlineMarkdown-Cg1qlNwL.js +25 -0
  298. package/dist/stripInlineMarkdown-Cg1qlNwL.js.map +1 -0
  299. package/dist/{syncFilterUtils-B03Pc941.js → syncFilterUtils-UR5Vgqkh.js} +8 -9
  300. package/dist/{syncFilterUtils-B03Pc941.js.map → syncFilterUtils-UR5Vgqkh.js.map} +1 -1
  301. package/dist/types/ai-marks.d.ts +72 -0
  302. package/dist/types/index.d.ts +1 -0
  303. package/dist/{use-reduced-motion-DSpxmqyT.js → use-reduced-motion-CqjZZ5QB.js} +2 -2
  304. package/dist/{use-reduced-motion-DSpxmqyT.js.map → use-reduced-motion-CqjZZ5QB.js.map} +1 -1
  305. package/dist/{useDrilldown-BW2XkUcK.js → useDrilldown-D6VZNSCX.js} +46 -20
  306. package/dist/{useDrilldown-BW2XkUcK.js.map → useDrilldown-D6VZNSCX.js.map} +1 -1
  307. package/dist/{useInitialFocus-BRRbylek.js → useInitialFocus-BUxEDMEG.js} +65 -24
  308. package/dist/useInitialFocus-BUxEDMEG.js.map +1 -0
  309. package/dist/{index.esm-K9kxJhLx.js → usePopoverTransitionStates-CDXCdyKa.js} +88 -2
  310. package/dist/usePopoverTransitionStates-CDXCdyKa.js.map +1 -0
  311. package/dist/usePrefersReducedMotion-DR9B_D6w.js +37 -0
  312. package/dist/usePrefersReducedMotion-DR9B_D6w.js.map +1 -0
  313. package/dist/usePrefersReducedMotion.d.ts +2 -0
  314. package/dist/usePrefersReducedMotion.js +2 -0
  315. package/dist/usePrefersReducedMotion.js.map +1 -0
  316. package/dist/{useToggleSelection-Dip0eimQ.js → useToggleSelection-BBdrIVWs.js} +2 -2
  317. package/dist/{useToggleSelection-Dip0eimQ.js.map → useToggleSelection-BBdrIVWs.js.map} +1 -1
  318. package/package.json +2 -2
  319. package/dist/Alert-C_o2f78C.js.map +0 -1
  320. package/dist/Button-CVsGhVJz.js +0 -113
  321. package/dist/Button-CVsGhVJz.js.map +0 -1
  322. package/dist/Checkbox-Drgai_lS.js.map +0 -1
  323. package/dist/Chip-CVyEctAz.js.map +0 -1
  324. package/dist/DataTable-BmVPjMMg.js.map +0 -1
  325. package/dist/DateFieldYearless-b81ZcYdp.js.map +0 -1
  326. package/dist/DateFieldYearlessRange-ClAFzIDD.js.map +0 -1
  327. package/dist/Dialog-CloZWa1Q.js.map +0 -1
  328. package/dist/Drawer-CfkoH081.js.map +0 -1
  329. package/dist/FieldLabel-CQ5QGTVq.js +0 -125
  330. package/dist/FieldLabel-CQ5QGTVq.js.map +0 -1
  331. package/dist/Menu-CRoJYJ53.js.map +0 -1
  332. package/dist/MultiSelectFieldSync-CSOitvtu.js.map +0 -1
  333. package/dist/NumberField-CHBXBMSj.js.map +0 -1
  334. package/dist/Page-DtSjnBJL.js.map +0 -1
  335. package/dist/Popover-CQhLSNYR.js +0 -537
  336. package/dist/Popover-CQhLSNYR.js.map +0 -1
  337. package/dist/Popover2.css +0 -68
  338. package/dist/Radio-Bw2LDl9G.js.map +0 -1
  339. package/dist/SelectCard-ZaAD0wR1.js.map +0 -1
  340. package/dist/SelectFieldLabel-EJCXA02B.js.map +0 -1
  341. package/dist/SelectFieldSync-DA54WXOk.js.map +0 -1
  342. package/dist/SelectTrigger-DWyRndmY.js.map +0 -1
  343. package/dist/SelectTriggerBase-B6aZd2a6.js.map +0 -1
  344. package/dist/SelectTriggerBase.module-B0NFRlQP.js +0 -36
  345. package/dist/SelectTriggerBase.module-B0NFRlQP.js.map +0 -1
  346. package/dist/Switch-DpPHr3G3.js.map +0 -1
  347. package/dist/Text-BJo4oMI2.js.map +0 -1
  348. package/dist/TextField-o8zvVFDk.js.map +0 -1
  349. package/dist/Textarea-B4bBvO8c.js.map +0 -1
  350. package/dist/Toaster-6_LVKok2.js.map +0 -1
  351. package/dist/floating-ui.react-aKYfs-aw.js.map +0 -1
  352. package/dist/floating-ui.react-dom-imrk9N49.js.map +0 -1
  353. package/dist/index.esm-K9kxJhLx.js.map +0 -1
  354. package/dist/safePopover-BDso-xSH.js +0 -17
  355. package/dist/safePopover-BDso-xSH.js.map +0 -1
  356. package/dist/useInitialFocus-BRRbylek.js.map +0 -1
  357. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js +0 -68
  358. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js.map +0 -1
  359. package/dist/usePopoverTransitionStates-CDIoNUuf.js +0 -24
  360. package/dist/usePopoverTransitionStates-CDIoNUuf.js.map +0 -1
  361. /package/dist/{anvil-fonts.css → AnvilProvider.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectFieldSync-ChZCW4M9.js","sources":["../src/beta/components/MultiSelectField/internal/useChipLayout.ts","../src/beta/components/MultiSelectField/internal/MultiSelectFieldInput.tsx","../src/beta/components/MultiSelectField/internal/useComboMultiple.tsx","../src/beta/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.tsx","../src/beta/components/MultiSelectField/internal/MultiSelectFieldTrigger.tsx","../src/beta/components/MultiSelectField/internal/useSelectModeMultiple.ts","../src/beta/components/MultiSelectField/internal/MultiSelectFieldSelectMode.tsx","../src/beta/components/MultiSelectField/MultiSelectField.tsx","../src/beta/components/MultiSelectField/MultiSelectFieldSync.tsx"],"sourcesContent":["import { useState, useLayoutEffect, useRef, RefObject } from \"react\";\n\nconst hasMultipleRows = (container: HTMLElement) => {\n const children = Array.from(container.children);\n if (children.length <= 1) return false;\n const firstTop = children[0].getBoundingClientRect().top;\n return children.some(\n (child) => child.getBoundingClientRect().top !== firstTop,\n );\n};\n\ntype UseChipLayoutOptions = {\n selectedOptionsLength: number;\n singleRow?: boolean;\n maxChips?: number;\n};\n\n/**\n * Manages chip layout calculations shared between MultiSelectFieldInput and\n * MultiSelectFieldTrigger. Handles single-row overflow detection, visible chip\n * count, and the \"+N\" hidden chip indicator.\n * @param options - Configuration for chip layout behaviour\n * @returns rowsRef to attach to the chip container, plus computed display/hidden counts\n */\nexport function useChipLayout({\n selectedOptionsLength,\n singleRow,\n maxChips,\n}: UseChipLayoutOptions): {\n rowsRef: RefObject<HTMLDivElement>;\n displayCount: number;\n hiddenCount: number;\n} {\n const rowsRef = useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = useState<number | null>(null);\n\n const prevSelectedLengthRef = useRef(selectedOptionsLength);\n useLayoutEffect(() => {\n if (prevSelectedLengthRef.current !== selectedOptionsLength) {\n prevSelectedLengthRef.current = selectedOptionsLength;\n setVisibleCount(null);\n }\n }, [selectedOptionsLength]);\n\n useLayoutEffect(() => {\n if (!singleRow || !rowsRef.current) {\n setVisibleCount(null);\n return;\n }\n\n if (visibleCount === null) {\n if (hasMultipleRows(rowsRef.current)) {\n const firstRowTop =\n rowsRef.current.children[0]?.getBoundingClientRect().top;\n const firstRowCount = Array.from(rowsRef.current.children).filter(\n (c) => c.getBoundingClientRect().top === firstRowTop,\n ).length;\n setVisibleCount(Math.max(firstRowCount - 1, 0));\n }\n return;\n }\n\n if (hasMultipleRows(rowsRef.current) && visibleCount > 0) {\n setVisibleCount(visibleCount - 1);\n }\n }, [singleRow, selectedOptionsLength, visibleCount]);\n\n const maxAllowed = maxChips ?? 10;\n const displayCount =\n singleRow && visibleCount !== null\n ? Math.min(visibleCount, maxAllowed)\n : Math.min(selectedOptionsLength, maxAllowed);\n const hiddenCount = selectedOptionsLength - displayCount;\n\n return { rowsRef, displayCount, hiddenCount };\n}\n","import styles from \"./MultiSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { PassThroughProps, Size } from \"../../../../types\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport { mergeRefs } from \"../../../../hooks/useMergeRefs/useMergeRefs\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport {\n ReactElement,\n RefObject,\n useRef,\n KeyboardEvent,\n MouseEvent,\n} from \"react\";\nimport { MultiSelectFieldChipProps, MultiSelectFieldOption } from \"../types\";\nimport { useChipLayout } from \"./useChipLayout\";\n\n/**\n * Props for the MultiSelectFieldInput component\n * @property {string} [placeholder] - Placeholder text displayed when input is empty\n * @property {Extract<Size, \"small\" | \"medium\" | \"large\">} [size] - Size variant of the input\n * @property {boolean} [disableClearButton] - Hides the clear button when true\n * @property {boolean} [disableToggleButton] - Hides the toggle button when true\n * @property {boolean} [disabled] - Disables the input entirely\n * @property {boolean} [readOnly] - Cannot be modified but remains interactive\n * @property {boolean} [error] - Shows error styling on the input when true\n * @property {() => void} [onClear] - Callback fired when the clear button is clicked\n * @property {string} [id] - HTML id attribute for the input element\n * @property {RefObject<HTMLDivElement>} [inputWrapperRef] - Ref for the input wrapper div element\n * @property {PassThroughProps<\"div\">} [htmlInputWrapperProps] - Additional props passed to the wrapper div\n * @property {PassThroughProps<\"input\">} [inputProps] - Additional props passed to the input element\n * @property {PassThroughProps<\"button\">} [toggleButtonProps] - Additional props passed to the toggle button\n * @property {string | ReactElement} [prefix] - Content to display before the input\n * @property {string | ReactElement} [suffix] - Content to display after the input\n * @property {MultiSelectFieldOption[]} [selectedOptions] - Array of selected options to display as chips\n * @property {(option: MultiSelectFieldOption) => void} [onRemoveOption] - Callback when a chip is removed\n * @property {boolean} [singleRow] - When true, restricts the field to a single row height\n * @property {number} [maxChips] - Maximum number of chips to display before showing +N indicator (default: 10)\n */\nexport type MultiSelectFieldInputProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disableToggleButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n htmlInputWrapperProps?: PassThroughProps<\"div\">;\n inputProps?: PassThroughProps<\"input\">;\n toggleButtonProps?: PassThroughProps<\"button\">;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions?: MultiSelectFieldOption[];\n onRemoveOption?: (option: MultiSelectFieldOption) => void;\n singleRow?: boolean;\n maxChips?: number;\n getChipProps?: (option: MultiSelectFieldOption) => MultiSelectFieldChipProps;\n onWrapperClick?: (e: MouseEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Internal input component for the MultiSelectField that provides the text input,\n * chip display for selected options, and action buttons.\n *\n * Features:\n * - Text input for filtering options\n * - Chip display for selected options with remove functionality\n * - Optional clear button for removing all selections\n * - Optional toggle button for opening/closing the dropdown menu\n * - Supports multiple size variants (small, medium, large)\n * - Fully accessible with proper ARIA labels on buttons\n * - Supports pass-through props for customization of internal elements\n * - Optional prefix and suffix content\n * - Error state styling\n * - Single row mode with singleRow prop\n * - Chip count limiting with maxChips prop\n *\n * @example\n * <MultiSelectFieldInput\n * placeholder=\"Search...\"\n * size=\"medium\"\n * selectedOptions={[{ id: 1, label: \"Option 1\" }]}\n * onRemoveOption={(option) => handleRemove(option)}\n * onClear={() => handleClearAll()}\n * />\n */\nexport const MultiSelectFieldInput = ({\n placeholder,\n size,\n disableClearButton,\n disableToggleButton,\n disabled,\n readOnly,\n error,\n onClear,\n id,\n inputWrapperRef,\n htmlInputWrapperProps,\n inputProps,\n toggleButtonProps,\n prefix,\n suffix,\n selectedOptions = [],\n onRemoveOption,\n singleRow,\n maxChips,\n getChipProps,\n onWrapperClick,\n}: MultiSelectFieldInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const externalRef = (inputProps as { ref?: React.Ref<HTMLInputElement> })\n ?.ref;\n const mergedInputRef = mergeRefs([inputRef, externalRef]);\n\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"no-toggle-button\"]]: disableToggleButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Handle backspace to remove the last chip when input is empty\n if (\n e.key === \"Backspace\" &&\n !inputProps?.value &&\n selectedOptions.length > 0 &&\n onRemoveOption &&\n !disabled &&\n !readOnly\n ) {\n onRemoveOption(selectedOptions[selectedOptions.length - 1]);\n }\n\n // Call the original onKeyDown if provided\n if (inputProps?.onKeyDown) {\n (inputProps.onKeyDown as (e: KeyboardEvent<HTMLInputElement>) => void)(e);\n }\n };\n\n const handleWrapperClick = (e: MouseEvent<HTMLDivElement>) => {\n // Skip if clicking on interactive elements (buttons) or input\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.tagName === \"INPUT\") {\n return;\n }\n onWrapperClick?.(e);\n inputRef.current?.focus();\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events -- Click-to-focus container; Despite the disabled rules, this remains accessible. Keyboard interaction is provided by the input and nested buttons are filtered out in the handler.\n <div\n ref={inputWrapperRef}\n {...htmlInputWrapperProps}\n className={cx(inputWrapperClassNames, htmlInputWrapperProps?.className)}\n onClick={handleWrapperClick}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedOptions.length > 0 && onRemoveOption\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n label={option.label}\n onClose={\n disabled || readOnly\n ? undefined\n : () => onRemoveOption(option)\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n {...inputProps}\n ref={mergedInputRef}\n onKeyDown={handleInputKeyDown}\n className={cx(styles[\"input\"], inputProps?.className, {\n [styles[\"error\"]]: error,\n })}\n />\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n\n <div className={styles[\"buttons-wrapper\"]}>\n {disableClearButton ? null : (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n onClick={() => {\n onClear?.();\n }}\n />\n </div>\n )}\n {disableToggleButton ? null : (\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n {...toggleButtonProps}\n className={cx(\n styles[\"toggle-button\"],\n toggleButtonProps?.className,\n )}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nMultiSelectFieldInput.displayName = \"MultiSelectFieldInput\";\n","import {\n useCombobox,\n UseComboboxProps,\n UseComboboxState,\n UseComboboxStateChangeOptions,\n} from \"downshift\";\nimport {\n MultiSelectFieldGroupByValue,\n MultiSelectFieldOption,\n MultiSelectFieldPinnedOptions,\n} from \"../types\";\nimport { SelectItem } from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { CheckState } from \"../../../../types\";\nimport { useMemo, useState } from \"react\";\nimport { useDownshiftEnvironment } from \"../../../../internal/hooks\";\nimport { useProcessedOptions } from \"../../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../../internal/functions/buildSelectItems\";\nimport { useToggleSelection } from \"../../../../internal/hooks/useToggleSelection\";\n\nexport type UseComboMultipleOptions = {\n /** An array of currently loaded options */\n options: MultiSelectFieldOption[];\n /** Options to pin to the top of the list */\n pinned?: MultiSelectFieldPinnedOptions;\n /** Function to convert a group value to a display label */\n groupToString?: (groupValue: MultiSelectFieldGroupByValue) => string;\n /** Function to sort group sections */\n groupSorter?: (\n a: MultiSelectFieldGroupByValue,\n b: MultiSelectFieldGroupByValue,\n ) => number;\n /** Configuration for the \"Select All\" option (shown when search is empty) */\n selectAll?: {\n label: string;\n onClick: () => void;\n checkState: CheckState;\n };\n /** Function that receives the search value and returns config for \"Select Filtered\" */\n selectFiltered?: (searchValue: string) => {\n label?: string;\n onClick: () => void;\n checkState: CheckState;\n };\n /** The currently selected options (controlled from outside) */\n selectedOptions: MultiSelectFieldOption[];\n onSelectedOptionsChange: (options: MultiSelectFieldOption[]) => void;\n displayAs: \"popover\" | \"dialog\";\n disabled: boolean;\n /** Whether options are currently loading (hides select-filtered to prevent stale selections) */\n loading?: boolean;\n /** Whether the list is virtualized (disables built-in scroll behavior) */\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n} & Pick<UseComboboxProps<SelectItem>, \"onInputValueChange\" | \"onIsOpenChange\">;\n\n/**\n * Hook that wraps downshift's useCombobox for multi-select behavior.\n * Unlike useCombo, this hook:\n * - Keeps the menu open after item selection\n * - Does not track internal selection state (controlled externally)\n * - Preserves input value on item selection for continued filtering\n * @param options - Configuration options for the hook\n * @returns Downshift combobox props and state\n */\nexport const useComboMultiple = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectAll,\n selectFiltered,\n selectedOptions,\n onSelectedOptionsChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disabled,\n loading = false,\n virtualize = false,\n onScrollToHighlight,\n}: UseComboMultipleOptions) => {\n const [inputValue, setInputValue] = useState(\"\");\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: inputValue,\n groupToString,\n groupSorter,\n },\n );\n\n // Compute bulk action items (select-all or select-filtered, mutually exclusive)\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n const hasSearchTerm = inputValue.trim().length > 0;\n const hasResults =\n ungroupedItems.length > 0 ||\n groupSections.some((s) => s.options.length > 0) ||\n pinnedSections.some((s) => s.options.length > 0);\n\n if (hasSearchTerm && selectFiltered && hasResults && !loading) {\n const config = selectFiltered(inputValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: config.label ?? `Select items matching \"${inputValue}\"`,\n },\n checkState: config.checkState,\n });\n } else if (!hasSearchTerm && selectAll) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: {\n id: \"select-all\",\n label: selectAll.label ?? \"Select All\",\n },\n checkState: selectAll.checkState,\n });\n }\n return items;\n }, [\n inputValue,\n ungroupedItems,\n groupSections,\n pinnedSections,\n selectFiltered,\n selectAll,\n loading,\n ]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n inputValue: downshiftInputValue,\n closeMenu,\n openMenu,\n toggleMenu,\n } = useCombobox({\n isItemDisabled: (item, _index) => {\n if (!item) {\n return false; // Downshift passes -1 index with an undefined item. Ignore it.\n }\n return (disabled || item.disabled) ?? false;\n },\n environment: environment,\n // For multi-select, we don't track a single selected item\n selectedItem: null,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem | null;\n }) => {\n if (si) {\n if (si.type === \"select-all\") {\n selectAll?.onClick();\n } else if (si.type === \"select-filtered\") {\n selectFiltered?.(inputValue).onClick();\n } else if (\n si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\"\n ) {\n handleItemClick(si.original);\n }\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useCombobox.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onInputValueChange: (changes) => {\n // Update local input value for pinned options search\n setInputValue(changes.inputValue ?? \"\");\n // Call the external handler\n onInputValueChange?.(changes);\n },\n scrollIntoView: virtualize\n ? () => {}\n : (node, menuNode) => {\n if (!node || !menuNode) return;\n\n const firstItem = items[0];\n const hasBulkAction =\n firstItem?.type === \"select-all\" ||\n firstItem?.type === \"select-filtered\";\n\n if (!hasBulkAction) {\n const nodeRect = node.getBoundingClientRect();\n const menuRect = menuNode.getBoundingClientRect();\n if (\n nodeRect.bottom > menuRect.bottom ||\n nodeRect.top < menuRect.top\n ) {\n node.scrollIntoView({ block: \"nearest\" });\n }\n return;\n }\n\n const bulkActionEl = menuNode.querySelector(\n '[data-type=\"select-all\"], [data-type=\"select-filtered\"]',\n );\n if (node === bulkActionEl) {\n menuNode.scrollTop = 0;\n return;\n }\n\n const stickyHeight =\n bulkActionEl?.getBoundingClientRect().height ?? 0;\n const nodeRect = node.getBoundingClientRect();\n const menuRect = menuNode.getBoundingClientRect();\n const visibleTop = menuRect.top + stickyHeight;\n\n if (nodeRect.top < visibleTop) {\n menuNode.scrollTop -= visibleTop - nodeRect.top;\n } else if (nodeRect.bottom > menuRect.bottom) {\n menuNode.scrollTop += nodeRect.bottom - menuRect.bottom;\n }\n },\n onIsOpenChange,\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n });\n\n return {\n inputValue: downshiftInputValue,\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n toggleMenu,\n selectedOptions,\n };\n};\n\nfunction stateReducer(\n state: UseComboboxState<SelectItem>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputBlur:\n // keep the dialog open if the user blurs the input while the dialog is open\n if (displayAs === \"dialog\" && state.isOpen) {\n return {\n ...changes,\n isOpen: state.isOpen,\n // Preserve input value for multi-select\n inputValue: state.inputValue,\n };\n }\n return {\n ...changes,\n // For multi-select, preserve the input value on blur\n inputValue: state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputKeyDownEscape:\n case useCombobox.stateChangeTypes.FunctionCloseMenu:\n return {\n ...changes,\n // Clear input value when menu is closed\n inputValue: \"\",\n };\n case useCombobox.stateChangeTypes.InputClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n // keep the dialog open if the user clicks the input while the dialog is open\n return {\n ...changes,\n isOpen: state.isOpen,\n };\n }\n return changes;\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n // Optimize for continuing to select items based on the input value\n return {\n ...changes,\n isOpen: state.isOpen, // Keep menu open\n highlightedIndex: state.highlightedIndex, // Preserve highlight position\n inputValue: state.inputValue, // Preserve input value for continued filtering\n };\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return {\n ...changes,\n inputValue: state.inputValue,\n };\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { MultiSelectOptions } from \"../../../../internal/components/MultiSelectOptions\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\nimport { MultiSelectFieldInput } from \"./MultiSelectFieldInput\";\nimport { SelectFieldLabel } from \"../../SelectField/internal/SelectFieldLabel\";\nimport { useDebouncedCallback } from \"../../../../internal/hooks/useDebouncedCallback\";\nimport styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useComboMultiple } from \"./useComboMultiple\";\nimport { OptionsPopover } from \"../../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { FieldMessage } from \"../../../../components/FieldMessage\";\nimport { MultiSelectFieldComboboxInternalProps } from \"./types\";\n\n/**\n * Combobox mode: searchable multi-select using useCombobox.\n */\nexport const MultiSelectFieldComboboxMode = ({\n labelAiMark,\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n debounceMs,\n selectAll,\n selectFiltered,\n singleRow,\n maxChips,\n getChipProps,\n onSearchChange,\n handleRemoveOption,\n handleClear,\n}: MultiSelectFieldComboboxInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const debouncedOptionLoader = useDebouncedCallback((inputValue: string) => {\n loadOptions(inputValue, { initial: true });\n }, debounceMs);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n inputValue,\n items,\n sectionsMeta,\n closeMenu,\n toggleMenu,\n } = useComboMultiple({\n displayAs,\n onSelectedOptionsChange,\n disabled: isDisabledOrReadOnly,\n options,\n loading,\n pinned,\n virtualize,\n groupToString,\n groupSorter,\n selectedOptions,\n selectAll,\n selectFiltered,\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n },\n onInputValueChange: ({ inputValue: iv }) => {\n debouncedOptionLoader(iv ?? \"\");\n onSearchChange?.(iv ?? \"\");\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const handleLoadMore = async () => {\n await loadMore(inputValue);\n };\n\n if (displayAs === \"dialog\") {\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n />\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={getToggleButtonProps()}\n onClear={handleClear}\n id={`${id}-input`}\n inputProps={getInputProps({\n \"aria-describedby\": hasHelperText ? helperUid : undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n onWrapperClick={toggleMenu}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n initialFocusResolver={(elements) => {\n return (\n elements.find((element) => element.tagName === \"INPUT\") ||\n elements[0]\n );\n }}\n field={\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n inputProps={getInputProps()}\n disableToggleButton\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={handleClear}\n id={`${id}-dialog-input`}\n inputWrapperRef={inputWrapperRef}\n size=\"medium\"\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow\n maxChips={20}\n getChipProps={getChipProps}\n />\n }\n >\n <MultiSelectOptions\n isOpen\n items={items}\n getMenuProps={getMenuProps}\n ref={listRef}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n />\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n inputProps={getInputProps({\n popovertarget: `${id}-popover`,\n \"aria-describedby\": hasHelperText ? helperUid : undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n toggleButtonProps={getToggleButtonProps()}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={handleClear}\n id={`${id}-input`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n onWrapperClick={toggleMenu}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClickOutside={closeMenu}\n width=\"reference\"\n >\n <MultiSelectOptions\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n ref={listRef}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import styles from \"./MultiSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { Size } from \"../../../../types\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { ReactElement, RefObject, useRef } from \"react\";\nimport { useMergeRefs } from \"../../../../hooks/useMergeRefs/useMergeRefs\";\nimport { MultiSelectFieldChipProps, MultiSelectFieldOption } from \"../types\";\nimport { useChipLayout } from \"./useChipLayout\";\n\nexport type MultiSelectFieldTriggerProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n popoverTarget?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toggleButtonProps?: Record<string, any>;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions?: MultiSelectFieldOption[];\n onRemoveOption?: (option: MultiSelectFieldOption) => void;\n singleRow?: boolean;\n maxChips?: number;\n getChipProps?: (option: MultiSelectFieldOption) => MultiSelectFieldChipProps;\n};\n\n/**\n * Non-searchable trigger for MultiSelectField when disableSearch is true.\n * Renders chips for selected items in a div-based trigger (no input element).\n */\nexport const MultiSelectFieldTrigger = ({\n placeholder,\n size,\n disableClearButton,\n disabled,\n readOnly,\n error,\n onClear,\n id,\n inputWrapperRef,\n toggleButtonProps,\n prefix,\n suffix,\n selectedOptions = [],\n onRemoveOption,\n singleRow,\n maxChips,\n getChipProps,\n popoverTarget,\n}: MultiSelectFieldTriggerProps) => {\n const { ref: downshiftRef, ...restToggleButtonProps } =\n toggleButtonProps ?? {};\n const triggerRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([inputWrapperRef, downshiftRef, triggerRef]);\n\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n ref={mergedRef}\n {...restToggleButtonProps}\n // @ts-expect-error: popovertarget is a valid HTML attribute\n popovertarget={popoverTarget}\n id={id}\n className={cx(inputWrapperClassNames, restToggleButtonProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedOptions.length > 0 && onRemoveOption\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n label={option.label}\n onClose={\n disabled || readOnly\n ? undefined\n : (e) => {\n e.stopPropagation();\n onRemoveOption(option);\n triggerRef.current?.focus();\n }\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n />\n </div>\n ) : null}\n\n {selectedOptions.length === 0 ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <div\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n >\n {placeholder}\n </div>\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n ) : null}\n </div>\n\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n tabIndex={-1}\n className={styles[\"toggle-button\"]}\n />\n </div>\n </div>\n </div>\n {disableClearButton ? null : (\n <div\n className={styles[\"buttons-wrapper\"]}\n style={{ insetInlineEnd: \"2rem\" }}\n >\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n onClick={(e) => {\n e.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n\nMultiSelectFieldTrigger.displayName = \"MultiSelectFieldTrigger\";\n","import {\n useSelect,\n UseSelectState,\n UseSelectStateChangeOptions,\n} from \"downshift\";\nimport {\n MultiSelectFieldGroupByValue,\n MultiSelectFieldOption,\n MultiSelectFieldPinnedOptions,\n} from \"../types\";\nimport { SelectItem } from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { CheckState } from \"../../../../types\";\nimport { useMemo } from \"react\";\nimport { useDownshiftEnvironment } from \"../../../../internal/hooks\";\nimport { useProcessedOptions } from \"../../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../../internal/functions/buildSelectItems\";\nimport { useToggleSelection } from \"../../../../internal/hooks/useToggleSelection\";\n\nexport type UseSelectModeMultipleOptions = {\n options: MultiSelectFieldOption[];\n pinned?: MultiSelectFieldPinnedOptions;\n groupToString?: (groupValue: MultiSelectFieldGroupByValue) => string;\n groupSorter?: (\n a: MultiSelectFieldGroupByValue,\n b: MultiSelectFieldGroupByValue,\n ) => number;\n selectAll?: {\n label: string;\n onClick: () => void;\n checkState: CheckState;\n };\n selectedOptions: MultiSelectFieldOption[];\n onSelectedOptionsChange: (options: MultiSelectFieldOption[]) => void;\n onIsOpenChange?: (changes: { isOpen?: boolean }) => void;\n displayAs: \"popover\" | \"dialog\";\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n};\n\n/**\n * Wraps downshift's useSelect for non-searchable multi-select fields.\n * Keeps menu open after selection and handles bulk actions.\n */\nexport const useSelectModeMultiple = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectAll,\n selectedOptions,\n onSelectedOptionsChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseSelectModeMultipleOptions) => {\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: \"\",\n groupToString,\n groupSorter,\n },\n );\n\n // Compute bulk action items for non-searchable mode (only select-all)\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: {\n id: \"select-all\",\n label: selectAll.label ?? \"Select All\",\n },\n checkState: selectAll.checkState,\n });\n }\n return items;\n }, [selectAll]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n closeMenu,\n openMenu,\n } = useSelect({\n isItemDisabled: (item) => {\n if (!item) return false;\n return (disabled || item.disabled) ?? false;\n },\n environment,\n selectedItem: null,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem | null;\n }) => {\n if (si) {\n if (si.type === \"select-all\") {\n selectAll?.onClick();\n } else if (\n si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\"\n ) {\n handleItemClick(si.original);\n }\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useSelect.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange,\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n ...(virtualize && { scrollIntoView: () => {} }),\n });\n\n return {\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n toggleMenu: () => (isOpen ? closeMenu() : openMenu()),\n selectedOptions,\n };\n};\n\nfunction stateReducer(\n state: UseSelectState<SelectItem>,\n actionAndChanges: UseSelectStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen, selectedItem: null };\n }\n return { ...changes, selectedItem: null };\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: state.isOpen,\n highlightedIndex: state.highlightedIndex,\n };\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEscape:\n case useSelect.stateChangeTypes.FunctionCloseMenu:\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen };\n }\n return changes;\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { MultiSelectOptions } from \"../../../../internal/components/MultiSelectOptions\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\nimport { MultiSelectFieldTrigger } from \"./MultiSelectFieldTrigger\";\nimport { SelectFieldLabel } from \"../../SelectField/internal/SelectFieldLabel\";\nimport styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useSelectModeMultiple } from \"./useSelectModeMultiple\";\nimport { OptionsPopover } from \"../../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { FieldMessage } from \"../../../../components/FieldMessage\";\nimport { MultiSelectFieldBaseInternalProps } from \"./types\";\n\n/**\n * Select mode: non-searchable multi-select using useSelect.\n * Active when disableSearch is true.\n */\nexport const MultiSelectFieldSelectMode = ({\n labelAiMark,\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n selectAll,\n singleRow,\n maxChips,\n getChipProps,\n handleRemoveOption,\n handleClear,\n}: MultiSelectFieldBaseInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n items,\n sectionsMeta,\n closeMenu,\n } = useSelectModeMultiple({\n displayAs,\n onSelectedOptionsChange,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n virtualize,\n groupToString,\n groupSorter,\n selectedOptions,\n selectAll,\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const handleLoadMore = async () => {\n await loadMore(\"\");\n };\n\n const toggleButtonProps = getToggleButtonProps({\n disabled: !!disabled,\n \"aria-required\": required ? true : undefined,\n \"aria-describedby\": hasHelperText ? helperUid : undefined,\n \"aria-invalid\": error ? true : undefined,\n } as Record<string, unknown>);\n\n if (displayAs === \"dialog\") {\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n />\n <MultiSelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={handleClear}\n id={`${id}-trigger`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n getMenuProps={(opts) =>\n getMenuProps({\n ...opts,\n style: { ...opts?.style, outline: \"none\" },\n onKeyDown: toggleButtonProps.onKeyDown,\n tabIndex: 0,\n \"aria-activedescendant\":\n toggleButtonProps[\"aria-activedescendant\"],\n })\n }\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n />\n <MultiSelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={handleClear}\n id={`${id}-trigger`}\n popoverTarget={`${id}-popover`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClickOutside={closeMenu}\n width=\"reference\"\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import { MultiSelectFieldHandle, MultiSelectFieldProps } from \"./types\";\nimport { forwardRef, useCallback, useId, useRef } from \"react\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../../components/FieldMessage\";\nimport { warnOnce } from \"../../../internal/functions\";\nimport { CheckState } from \"../../../types\";\nimport { MultiSelectFieldComboboxMode } from \"./internal/MultiSelectFieldComboboxMode\";\nimport { MultiSelectFieldSelectMode } from \"./internal/MultiSelectFieldSelectMode\";\nimport {\n MultiSelectFieldBaseInternalProps,\n MultiSelectFieldComboboxInternalProps,\n} from \"./internal/types\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\n\n/**\n * MultiSelectField component for selecting multiple options from a searchable dropdown.\n *\n * Features:\n * - Multiple selection with chip display\n * - Search and filtering capabilities (disable with `disableSearch`)\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Optional \"Select All\" functionality\n * - Optional \"Select Filtered\" functionality (selects options matching current search)\n * - Sticky positioning for Select All / Select Filtered items\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Single row mode to restrict height (singleRow prop)\n * - Chip count limiting (maxChips prop)\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n */\nexport const MultiSelectField = forwardRef<\n MultiSelectFieldHandle,\n MultiSelectFieldProps\n>((propsWithLayout, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n hideLabel,\n placeholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n size,\n error,\n hint,\n description,\n required,\n labelAiMark,\n disabled,\n readOnly,\n prefix,\n suffix,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n singleRow,\n maxChips,\n warning,\n pinned,\n onSearchChange,\n className,\n style,\n virtualize,\n disableSearch,\n getChipProps,\n } = componentProps;\n\n const groupToString =\n \"groupToString\" in componentProps\n ? componentProps.groupToString\n : undefined;\n const groupSorter =\n \"groupSorter\" in componentProps ? componentProps.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n\n warnDeprecatedErrorUsage(\"MultiSelectField\", error);\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectField: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isDisabledOrReadOnly = (disabled || readOnly) ?? false;\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions:\n \"lazyOptions\" in componentProps ? componentProps.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const handleRemoveOption = useCallback(\n (option: { id: string | number }) => {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n },\n [selectedOptions, onSelectedOptionsChange],\n );\n\n const handleClear = useCallback(() => {\n onSelectedOptionsChange([]);\n }, [onSelectedOptionsChange]);\n\n const disableClearButton =\n selectedOptions.length === 0 || isDisabledOrReadOnly;\n\n const selectAll = selectAllProp\n ? {\n label: selectAllProp.label ?? \"Select All\",\n onClick: selectAllProp.onClick,\n checkState: (selectAllProp.checkState === true\n ? \"checked\"\n : selectAllProp.checkState === false\n ? \"unchecked\"\n : (selectAllProp.checkState ?? \"indeterminate\")) as CheckState,\n }\n : undefined;\n\n const selectFiltered = selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n checkState: (config.checkState === true\n ? \"checked\"\n : config.checkState === false\n ? \"unchecked\"\n : (config.checkState ?? \"indeterminate\")) as CheckState,\n };\n }\n : undefined;\n\n const baseProps: MultiSelectFieldBaseInternalProps = {\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n labelAiMark,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n selectAll,\n singleRow,\n maxChips,\n getChipProps,\n handleRemoveOption,\n handleClear,\n };\n\n if (disableSearch) {\n return <MultiSelectFieldSelectMode {...baseProps} />;\n }\n\n const comboboxProps: MultiSelectFieldComboboxInternalProps = {\n ...baseProps,\n debounceMs,\n selectFiltered,\n onSearchChange,\n };\n\n return <MultiSelectFieldComboboxMode {...comboboxProps} />;\n});\n\nMultiSelectField.displayName = \"MultiSelectField\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectField } from \"./MultiSelectField\";\nimport {\n MultiSelectFieldHandle,\n MultiSelectFieldProps,\n MultiSelectFieldOption,\n} from \"./types\";\nimport { CheckState } from \"../../../types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type MultiSelectFieldSyncProps = Omit<\n MultiSelectFieldProps,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /**\n * The options to display in the multi-select field.\n */\n options: MultiSelectFieldOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * Before any search is performed, options appear in the order they are supplied.\n * By default, options are filtered by `label` and `searchText` using match-sorter,\n * which also ranks results by match quality (best matches first).\n *\n * @example\n * <MultiSelectFieldSync\n * options={options}\n * filter={(options, searchValue) => {\n * return options.filter((option) => {\n * return option.label?.toLowerCase().includes(searchValue.toLowerCase());\n * });\n * }}\n * />\n *\n * @example\n * <MultiSelectFieldSync\n * options={options}\n * filter={{ keys: [\"label\"] }}\n * />\n */\n filter?:\n | SyncFilterFn<MultiSelectFieldOption>\n | MatchSorterOptions<MultiSelectFieldOption>;\n /**\n * Enables the \"Select All\" option at the top of the list.\n * Can be a boolean to enable with default label, or an object to customize the label.\n * Click handling and check state are managed automatically based on the options and value.\n *\n * Select All and Select Filtered are mutually exclusive:\n * - Select All is shown when the search input is empty.\n * - Select Filtered (if enabled) is shown when a search term is active.\n *\n * The label can be a string or a function that receives a boolean indicating whether all options are selected.\n *\n * @example\n * <MultiSelectFieldSync selectAll options={options} {...props} />\n *\n * @example\n * <MultiSelectFieldSync selectAll={{ label: \"Select All Items\" }} options={options} {...props} />\n *\n * @example\n * <MultiSelectFieldSync\n * selectAll={{ label: (checked) => checked ? \"Deselect All\" : \"Select All\" }}\n * options={options}\n * {...props}\n * />\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Enables the \"Select Filtered\" option when a search term is active.\n * Can be a boolean to enable with default label, or a function that receives the\n * search value and returns a config object with a custom label.\n * Click handling and check state are managed automatically based on the filtered options and value.\n *\n * When clicked, all enabled options matching the current search term are selected (or deselected if all are already selected).\n *\n * Select All and Select Filtered are mutually exclusive:\n * - Select All (if enabled) is shown when the search input is empty.\n * - Select Filtered is shown when a search term is active.\n *\n * @example\n * <MultiSelectFieldSync selectAll selectFiltered options={options} {...props} />\n *\n * @example\n * <MultiSelectFieldSync\n * selectFiltered={(searchValue) => ({\n * label: `Select items matching \"${searchValue}\"`,\n * })}\n * options={options}\n * {...props}\n * />\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/**\n * MultiSelectFieldSync is a simplified version of MultiSelectField that is used to display a list of options in a multi-select field.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`.\n * - Performs client-side filtering of the options.\n * - Optionally accepts a function to filter the options, or a MatchSorterOptions object to customize the default filtering.\n * - Simplified `selectAll` prop that automatically handles click and check state.\n * - Simplified `selectFiltered` prop that automatically selects/deselects filtered options.\n * - Supports all the other props of MultiSelectField.\n */\nexport const MultiSelectFieldSync = (props: MultiSelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = value.filter((v) => enabledIds.has(v.id)).length;\n const allSelected = selectedCount === enabledOptions.length;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n const label =\n typeof labelProp === \"function\" ? labelProp(allSelected) : labelProp;\n\n const checkState: CheckState = allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allSelected) {\n onSelectedOptionsChange([]);\n } else {\n onSelectedOptionsChange(enabledOptions);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n }, [selectAllProp, options, value, onSelectedOptionsChange]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const selectedIds = new Set(value.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => selectedIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n selectedIds.has(opt.id),\n );\n\n const label =\n typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined;\n\n const checkState: CheckState = allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allFilteredSelected) {\n const filteredIds = new Set(enabledFilteredOptions.map((o) => o.id));\n onSelectedOptionsChange(value.filter((v) => !filteredIds.has(v.id)));\n } else {\n const currentIds = new Set(value.map((v) => v.id));\n const newSelections = enabledFilteredOptions.filter(\n (opt) => !currentIds.has(opt.id),\n );\n onSelectedOptionsChange([...value, ...newSelections]);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n };\n }, [selectFilteredProp, options, value, onSelectedOptionsChange, filter]);\n\n const fieldRef = useRef<MultiSelectFieldHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <MultiSelectField\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["Close","Chevron_Right","items","nodeRect","menuRect","stateReducer","inputValue","styles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,eAAA,GAAkB,CAAC,SAAA,KAA2B;AAClD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,MAAA,IAAU,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,CAAC,CAAA,CAAE,uBAAsB,CAAE,GAAA;AACrD,EAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IACd,CAAC,KAAA,KAAU,KAAA,CAAM,qBAAA,GAAwB,GAAA,KAAQ;AAAA,GACnD;AACF,CAAA;AAeO,SAAS,aAAA,CAAc;AAAA,EAC5B,qBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAIE;AACA,EAAA,MAAM,OAAA,GAAU,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AAEpE,EAAA,MAAM,qBAAA,GAAwB,OAAO,qBAAqB,CAAA;AAC1D,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,qBAAA,CAAsB,YAAY,qBAAA,EAAuB;AAC3D,MAAA,qBAAA,CAAsB,OAAA,GAAU,qBAAA;AAChC,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACtB;AAAA,EACF,CAAA,EAAG,CAAC,qBAAqB,CAAC,CAAA;AAE1B,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,CAAQ,OAAA,EAAS;AAClC,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,MAAA,IAAI,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpC,QAAA,MAAM,cACJ,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAC,CAAA,EAAG,uBAAsB,CAAE,GAAA;AACvD,QAAA,MAAM,gBAAgB,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA;AAAA,UACzD,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAA,GAAwB,GAAA,KAAQ;AAAA,SAC3C,CAAE,MAAA;AACF,QAAA,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,aAAA,GAAgB,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MAChD;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAA,IAAK,eAAe,CAAA,EAAG;AACxD,MAAA,eAAA,CAAgB,eAAe,CAAC,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,qBAAA,EAAuB,YAAY,CAAC,CAAA;AAEnD,EAAA,MAAM,aAAa,QAAA,IAAY,EAAA;AAC/B,EAAA,MAAM,YAAA,GACJ,SAAA,IAAa,YAAA,KAAiB,IAAA,GAC1B,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,UAAU,CAAA,GACjC,IAAA,CAAK,GAAA,CAAI,qBAAA,EAAuB,UAAU,CAAA;AAChD,EAAA,MAAM,cAAc,qBAAA,GAAwB,YAAA;AAE5C,EAAA,OAAO,EAAE,OAAA,EAAS,YAAA,EAAc,WAAA,EAAY;AAC9C;;ACgBO,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,EAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAkB,EAAC;AAAA,EACnB,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAkC;AAChC,EAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,cAAe,UAAA,EACjB,GAAA;AACJ,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,CAAC,QAAA,EAAU,WAAW,CAAC,CAAA;AAExD,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAc,WAAA,KAAgB,aAAA,CAAc;AAAA,IAC3D,uBAAuB,eAAA,CAAgB,MAAA;AAAA,IACvC,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,sBAAA,GAAyB,EAAA,CAAG,MAAA,CAAO,eAAe,CAAA,EAAG;AAAA,IACzD,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,IAC5B,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,IAC5B,CAAC,MAAA,CAAO,iBAAiB,CAAC,GAAG,kBAAA;AAAA,IAC7B,CAAC,MAAA,CAAO,kBAAkB,CAAC,GAAG,mBAAA;AAAA,IAC9B,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,QAAA,IAAY;AAAA,GACnC,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAuC;AAEjE,IAAA,IACE,CAAA,CAAE,GAAA,KAAQ,WAAA,IACV,CAAC,UAAA,EAAY,KAAA,IACb,eAAA,CAAgB,MAAA,GAAS,CAAA,IACzB,cAAA,IACA,CAAC,QAAA,IACD,CAAC,QAAA,EACD;AACA,MAAA,cAAA,CAAe,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAC,UAAA,CAAW,UAA2D,CAAC,CAAA;AAAA,IAC1E;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkC;AAE5D,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,IAAI,OAAO,OAAA,CAAQ,QAAQ,CAAA,IAAK,MAAA,CAAO,YAAY,OAAA,EAAS;AAC1D,MAAA;AAAA,IACF;AACA,IAAA,cAAA,GAAiB,CAAC,CAAA;AAClB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA;AAAA;AAAA,oBAEE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,eAAA;AAAA,QACJ,GAAG,qBAAA;AAAA,QACJ,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,qBAAA,EAAuB,SAAS,CAAA;AAAA,QACtE,OAAA,EAAS,kBAAA;AAAA,QAER,QAAA,EAAA;AAAA,UAAA,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS,IAAA;AAAA,+BAE5D,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,cAAc,CAAA,EAAG,KAAK,OAAA,EAC1C,QAAA,EAAA;AAAA,YAAA,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,cAAA,GAC3B,eAAA,CAAgB,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAClD,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,gBAEhC,QAAA,kBAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACE,GAAG,eAAe,MAAM,CAAA;AAAA,oBACzB,OAAO,MAAA,CAAO,KAAA;AAAA,oBACd,SACE,QAAA,IAAY,QAAA,GACR,MAAA,GACA,MAAM,eAAe,MAAM,CAAA;AAAA,oBAEjC,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,oBACxB,OAAO,MAAA,CAAO;AAAA;AAAA;AAChB,eAAA;AAAA,cAbK,CAAA,cAAA,EAAiB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,aAe3C,CAAA,GACD,IAAA;AAAA,YAEH,cAAc,CAAA,mBACb,GAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,cAAc,CAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAI,WAAW,CAAA,CAAA;AAAA,gBACtB,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,gBACxB,KAAA,EAAO,eAAA,CACJ,KAAA,CAAM,YAAY,CAAA,CAClB,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,KAAK,CAAA,CAC5B,IAAA,CAAK,IAAI;AAAA;AAAA,eAEhB,CAAA,GACE,IAAA;AAAA,iCAEH,IAAA,EAAA,EAAK,SAAA,EAAW,OAAO,YAAY,CAAA,EAAG,YAAW,QAAA,EAChD,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,EAAA;AAAA,kBACA,WAAA;AAAA,kBACA,QAAA;AAAA,kBACA,QAAA;AAAA,kBACC,GAAG,UAAA;AAAA,kBACJ,GAAA,EAAK,cAAA;AAAA,kBACL,SAAA,EAAW,kBAAA;AAAA,kBACX,WAAW,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA,EAAG,YAAY,SAAA,EAAW;AAAA,oBACpD,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG;AAAA,mBACpB;AAAA;AAAA,eACH;AAAA,cACC,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS;AAAA,aAAA,EAC/D;AAAA,WAAA,EACF,CAAA;AAAA,0BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,iBAAiB,CAAA,EACrC,QAAA,EAAA;AAAA,YAAA,kBAAA,GAAqB,uBACpB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,sBAAsB,CAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAMA,QAAA;AAAA,gBACN,YAAA,EAAW,iBAAA;AAAA,gBACX,UAAA,EAAW,OAAA;AAAA,gBACX,IAAA,EAAK,OAAA;AAAA,gBACL,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,gBAChC,SAAS,MAAM;AACb,kBAAA,OAAA,IAAU;AAAA,gBACZ;AAAA;AAAA,aACF,EACF,CAAA;AAAA,YAED,sBAAsB,IAAA,mBACrB,GAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,uBAAuB,CAAA,EAC5C,QAAA,kBAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAMC,eAAA;AAAA,gBACN,YAAA,EAAW,aAAA;AAAA,gBACX,UAAA,EAAW,OAAA;AAAA,gBACX,IAAA,EAAK,OAAA;AAAA,gBACL,QAAA;AAAA,gBACC,GAAG,iBAAA;AAAA,gBACJ,SAAA,EAAW,EAAA;AAAA,kBACT,OAAO,eAAe,CAAA;AAAA,kBACtB,iBAAA,EAAmB;AAAA;AACrB;AAAA,aACF,EACF;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA;AACF;AAEJ,CAAA;AAEA,qBAAA,CAAsB,WAAA,GAAc,uBAAA;;ACpM7B,MAAM,mBAAmB,CAAC;AAAA,EAC/B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA,GAAY,SAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,KAA+B;AAC7B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAE/C,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAA,EAAgB,aAAA,EAAc,GAAI,mBAAA;AAAA,IACxD;AAAA,MACE,OAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAa,UAAA;AAAA,MACb,aAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,MAAMC,SAAsB,EAAC;AAC7B,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA;AACjD,IAAA,MAAM,UAAA,GACJ,eAAe,MAAA,GAAS,CAAA,IACxB,cAAc,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAC,CAAA,IAC9C,eAAe,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEjD,IAAA,IAAI,aAAA,IAAiB,cAAA,IAAkB,UAAA,IAAc,CAAC,OAAA,EAAS;AAC7D,MAAA,MAAM,MAAA,GAAS,eAAe,UAAU,CAAA;AACxC,MAAAA,OAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,EAAA,EAAI,iBAAA;AAAA,UACJ,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAA;AAAA,SAC7D;AAAA,QACA,YAAY,MAAA,CAAO;AAAA,OACpB,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,SAAA,EAAW;AACtC,MAAAA,OAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,EAAA,EAAI,YAAA;AAAA,UACJ,KAAA,EAAO,UAAU,KAAA,IAAS;AAAA,SAC5B;AAAA,QACA,YAAY,SAAA,CAAU;AAAA,OACvB,CAAA;AAAA,IACH;AACA,IAAA,OAAOA,MAAAA;AAAA,EACT,CAAA,EAAG;AAAA,IACD,UAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAa,GAAI,OAAA;AAAA,IAC9B,MACE,gBAAA,CAAiB;AAAA,MACf,WAAA,EAAa,eAAA;AAAA,MACb,cAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,CAAC,eAAA,EAAiB,cAAA,EAAgB,aAAA,EAAe,cAAc;AAAA,GACjE;AAEA,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAe,WAAA,KAAgB,uBAAA,EAAwB;AAEpE,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,kBAAA,CAAmB;AAAA,IAC7C,OAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA,EAAY,mBAAA;AAAA,IACZ,SAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,MACE,WAAA,CAAY;AAAA,IACd,cAAA,EAAgB,CAAC,IAAA,EAAM,MAAA,KAAW;AAChC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAA,CAAQ,QAAA,IAAY,KAAK,QAAA,KAAa,KAAA;AAAA,IACxC,CAAA;AAAA,IACA,WAAA;AAAA;AAAA,IAEA,YAAA,EAAc,IAAA;AAAA,IACd,sBAAsB,CAAC;AAAA,MACrB,YAAA,EAAc;AAAA,KAChB,KAEM;AACJ,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,IAAI,EAAA,CAAG,SAAS,YAAA,EAAc;AAC5B,UAAA,SAAA,EAAW,OAAA,EAAQ;AAAA,QACrB,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,iBAAA,EAAmB;AACxC,UAAA,cAAA,GAAiB,UAAU,EAAE,OAAA,EAAQ;AAAA,QACvC,CAAA,MAAA,IACE,GAAG,IAAA,KAAS,QAAA,IACZ,GAAG,IAAA,KAAS,eAAA,IACZ,EAAA,CAAG,IAAA,KAAS,gBAAA,EACZ;AACA,UAAA,eAAA,CAAgB,GAAG,QAAQ,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,0BAA0B,CAAC,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAI,KAAM;AAC7D,MAAA,IAAI,IAAA,KAAS,WAAA,CAAY,gBAAA,CAAiB,aAAA,IAAiB,OAAO,CAAA,EAAG;AACnE,QAAA,mBAAA,GAAsB,GAAG,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,OAAA,KAAY;AAE/B,MAAA,aAAA,CAAc,OAAA,CAAQ,cAAc,EAAE,CAAA;AAEtC,MAAA,kBAAA,GAAqB,OAAO,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,cAAA,EAAgB,aACZ,MAAM;AAAA,IAAC,CAAA,GACP,CAAC,IAAA,EAAM,QAAA,KAAa;AAClB,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU;AAExB,MAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,MAAA,MAAM,aAAA,GACJ,SAAA,EAAW,IAAA,KAAS,YAAA,IACpB,WAAW,IAAA,KAAS,iBAAA;AAEtB,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,MAAMC,SAAAA,GAAW,KAAK,qBAAA,EAAsB;AAC5C,QAAA,MAAMC,SAAAA,GAAW,SAAS,qBAAA,EAAsB;AAChD,QAAA,IACED,UAAS,MAAA,GAASC,SAAAA,CAAS,UAC3BD,SAAAA,CAAS,GAAA,GAAMC,UAAS,GAAA,EACxB;AACA,UAAA,IAAA,CAAK,cAAA,CAAe,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,QAC1C;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,eAAe,QAAA,CAAS,aAAA;AAAA,QAC5B;AAAA,OACF;AACA,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,QAAA,CAAS,SAAA,GAAY,CAAA;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAA,GACJ,YAAA,EAAc,qBAAA,EAAsB,CAAE,MAAA,IAAU,CAAA;AAClD,MAAA,MAAM,QAAA,GAAW,KAAK,qBAAA,EAAsB;AAC5C,MAAA,MAAM,QAAA,GAAW,SAAS,qBAAA,EAAsB;AAChD,MAAA,MAAM,UAAA,GAAa,SAAS,GAAA,GAAM,YAAA;AAElC,MAAA,IAAI,QAAA,CAAS,MAAM,UAAA,EAAY;AAC7B,QAAA,QAAA,CAAS,SAAA,IAAa,aAAa,QAAA,CAAS,GAAA;AAAA,MAC9C,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ;AAC5C,QAAA,QAAA,CAAS,SAAA,IAAa,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,MAAA;AAAA,MACnD;AAAA,IACF,CAAA;AAAA,IACJ,cAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAa,IAAA,EAAyB;AACpC,MAAA,OAAO,IAAA,EAAM,SAAS,KAAA,IAAS,EAAA;AAAA,IACjC,CAAA;AAAA,IACA,cAAc,CAAC,KAAA,EAAO,qBACpBC,cAAA,CAAa,KAAA,EAAO,kBAAkB,SAAS;AAAA,GAClD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,mBAAA;AAAA,IACZ,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEA,SAASA,cAAA,CACP,KAAA,EACA,gBAAA,EACA,SAAA,EACA;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,gBAAA;AAE1B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,YAAY,gBAAA,CAAiB,SAAA;AAEhC,MAAA,IAAI,SAAA,KAAc,QAAA,IAAY,KAAA,CAAM,MAAA,EAAQ;AAC1C,QAAA,OAAO;AAAA,UACL,GAAG,OAAA;AAAA,UACH,QAAQ,KAAA,CAAM,MAAA;AAAA;AAAA,UAEd,YAAY,KAAA,CAAM;AAAA,SACpB;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,GAAG,OAAA;AAAA;AAAA,QAEH,YAAY,KAAA,CAAM;AAAA,OACpB;AAAA,IACF,KAAK,YAAY,gBAAA,CAAiB,kBAAA;AAAA,IAClC,KAAK,YAAY,gBAAA,CAAiB,iBAAA;AAChC,MAAA,OAAO;AAAA,QACL,GAAG,OAAA;AAAA;AAAA,QAEH,UAAA,EAAY;AAAA,OACd;AAAA,IACF,KAAK,YAAY,gBAAA,CAAiB,UAAA;AAChC,MAAA,IAAI,SAAA,KAAc,QAAA,IAAY,KAAA,CAAM,MAAA,EAAQ;AAE1C,QAAA,OAAO;AAAA,UACL,GAAG,OAAA;AAAA,UACH,QAAQ,KAAA,CAAM;AAAA,SAChB;AAAA,MACF;AACA,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,YAAY,gBAAA,CAAiB,iBAAA;AAAA,IAClC,KAAK,YAAY,gBAAA,CAAiB,SAAA;AAEhC,MAAA,OAAO;AAAA,QACL,GAAG,OAAA;AAAA,QACH,QAAQ,KAAA,CAAM,MAAA;AAAA;AAAA,QACd,kBAAkB,KAAA,CAAM,gBAAA;AAAA;AAAA,QACxB,YAAY,KAAA,CAAM;AAAA;AAAA,OACpB;AAAA,IACF,KAAK,YAAY,gBAAA,CAAiB,iCAAA;AAChC,MAAA,OAAO;AAAA,QACL,GAAG,OAAA;AAAA,QACH,YAAY,KAAA,CAAM;AAAA,OACpB;AAAA,IACF;AACE,MAAA,OAAO,OAAA;AAAA;AAEb;;AC7TO,MAAM,+BAA+B,CAAC;AAAA,EAC3C,WAAA;AAAA,EACA,EAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAA6C;AAC3C,EAAA,MAAM,OAAA,GAAU,OAA2B,IAAI,CAAA;AAE/C,EAAA,MAAM,qBAAA,GAAwB,oBAAA,CAAqB,CAACC,WAAAA,KAAuB;AACzE,IAAA,WAAA,CAAYA,WAAAA,EAAY,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,EAC3C,GAAG,UAAU,CAAA;AAEb,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,gBAAA,CAAiB;AAAA,IACnB,SAAA;AAAA,IACA,uBAAA;AAAA,IACA,QAAA,EAAU,oBAAA;AAAA,IACV,OAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAM,eAAe,OAAA,EAAS;AAC5B,MAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,CAAC,oBAAA,IAAwB,QAAQ,MAAA,EAAQ;AACrE,QAAA,MAAM,WAAA,CAAY,EAAA,EAAI,EAAE,OAAA,EAAS,MAAM,CAAA;AACvC,QAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,EAAE,UAAA,EAAY,IAAG,KAAM;AAC1C,MAAA,qBAAA,CAAsB,MAAM,EAAE,CAAA;AAC9B,MAAA,cAAA,GAAiB,MAAM,EAAE,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,qBAAqB,CAAC,CAAA,KAAM,OAAA,CAAQ,OAAA,EAAS,cAAc,CAAC;AAAA,GAC7D,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,qBAAqB,YAAY;AACrC,MAAA,IAAI,WAAA,KAAgB,WAAA,IAAe,CAAC,oBAAA,EAAsB;AACxD,QAAA,MAAM,WAAA,CAAY,EAAA,EAAI,EAAE,OAAA,EAAS,MAAM,CAAA;AACvC,QAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AACA,IAAA,kBAAA,EAAmB;AAAA,EACrB,GAAG,CAAC,WAAA,EAAa,oBAAA,EAAsB,WAAA,EAAa,uBAAuB,CAAC,CAAA;AAE5E,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,MAAM,SAAS,UAAU,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EACE,SAAA,GACI,CAAA,EAAGC,QAAA,CAAO,cAAc,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GACtCA,QAAA,CAAO,cAAc,CAAA;AAAA,QAE3B,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAM;AAAA,QACnC,GAAA,EAAK,aAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,MAAA,EAAQ,WAAA;AAAA,cACR,KAAA;AAAA,cACA,SAAA;AAAA,cACA,aAAA;AAAA,cACA;AAAA;AAAA,WACF;AAAA,0BACA,GAAA;AAAA,YAAC,qBAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,QAAA;AAAA,cACA,mBAAA,EAAqB,KAAA;AAAA,cACrB,WAAA;AAAA,cACA,kBAAA;AAAA,cACA,mBAAmB,oBAAA,EAAqB;AAAA,cACxC,OAAA,EAAS,WAAA;AAAA,cACT,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,cACT,YAAY,aAAA,CAAc;AAAA,gBACxB,kBAAA,EAAoB,gBAAgB,SAAA,GAAY,MAAA;AAAA,gBAChD,cAAA,EAAgB,QAAQ,IAAA,GAAO;AAAA,eAChC,CAAA;AAAA,cACD,IAAA;AAAA,cACA,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,cACT,MAAA;AAAA,cACA,MAAA;AAAA,cACA,eAAA;AAAA,cACA,cAAA,EAAgB,kBAAA;AAAA,cAChB,SAAA;AAAA,cACA,QAAA;AAAA,cACA,YAAA;AAAA,cACA,cAAA,EAAgB;AAAA;AAAA,WAClB;AAAA,UACC,aAAA,mBACC,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,SAAA;AAAA,cACJ,IAAA;AAAA,cACA,KAAA,EAAO,aAAA;AAAA,cACP,OAAA;AAAA,cACA;AAAA;AAAA,WACF,GACE,IAAA;AAAA,0BACJ,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,GAAG,EAAE,CAAA,OAAA,CAAA;AAAA,cACT,MAAA;AAAA,cACA,OAAA,EAAS,SAAA;AAAA,cACT,KAAA,EAAO,KAAA;AAAA,cACP,oBAAA,EAAsB,CAAC,QAAA,KAAa;AAClC,gBAAA,OACE,QAAA,CAAS,KAAK,CAAC,OAAA,KAAY,QAAQ,OAAA,KAAY,OAAO,CAAA,IACtD,QAAA,CAAS,CAAC,CAAA;AAAA,cAEd,CAAA;AAAA,cACA,KAAA,kBACE,GAAA;AAAA,gBAAC,qBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA;AAAA,kBACA,QAAA;AAAA,kBACA,YAAY,aAAA,EAAc;AAAA,kBAC1B,mBAAA,EAAmB,IAAA;AAAA,kBACnB,WAAA;AAAA,kBACA,kBAAA;AAAA,kBACA,OAAA,EAAS,WAAA;AAAA,kBACT,EAAA,EAAI,GAAG,EAAE,CAAA,aAAA,CAAA;AAAA,kBACT,eAAA;AAAA,kBACA,IAAA,EAAK,QAAA;AAAA,kBACL,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,kBACT,MAAA;AAAA,kBACA,MAAA;AAAA,kBACA,eAAA;AAAA,kBACA,cAAA,EAAgB,kBAAA;AAAA,kBAChB,SAAA,EAAS,IAAA;AAAA,kBACT,QAAA,EAAU,EAAA;AAAA,kBACV;AAAA;AAAA,eACF;AAAA,cAGF,QAAA,kBAAA,GAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACC,MAAA,EAAM,IAAA;AAAA,kBACN,KAAA;AAAA,kBACA,YAAA;AAAA,kBACA,GAAA,EAAK,OAAA;AAAA,kBACL,YAAA;AAAA,kBACA,gBAAA;AAAA,kBACA,eAAA;AAAA,kBACA,OAAA;AAAA,kBACA,UAAA,EAAY,cAAA;AAAA,kBACZ,OAAA;AAAA,kBACA,WAAA;AAAA,kBACA,QAAA,EAAU,oBAAA;AAAA,kBACV,YAAA;AAAA,kBACA;AAAA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EACE,SAAA,GACI,CAAA,EAAGA,QAAA,CAAO,cAAc,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GACtCA,QAAA,CAAO,cAAc,CAAA;AAAA,MAE3B,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAM;AAAA,MAEnC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,KAAA;AAAA,YACA,SAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,QAAA;AAAA,YACA,YAAY,aAAA,CAAc;AAAA,cACxB,aAAA,EAAe,GAAG,EAAE,CAAA,QAAA,CAAA;AAAA,cACpB,kBAAA,EAAoB,gBAAgB,SAAA,GAAY,MAAA;AAAA,cAChD,cAAA,EAAgB,QAAQ,IAAA,GAAO;AAAA,aAChC,CAAA;AAAA,YACD,mBAAmB,oBAAA,EAAqB;AAAA,YACxC,mBAAA,EAAqB,KAAA;AAAA,YACrB,WAAA;AAAA,YACA,kBAAA;AAAA,YACA,OAAA,EAAS,WAAA;AAAA,YACT,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,YACT,eAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,YACT,MAAA;AAAA,YACA,MAAA;AAAA,YACA,eAAA;AAAA,YACA,cAAA,EAAgB,kBAAA;AAAA,YAChB,SAAA;AAAA,YACA,QAAA;AAAA,YACA,YAAA;AAAA,YACA,cAAA,EAAgB;AAAA;AAAA,SAClB;AAAA,QACC,aAAA,mBACC,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,SAAA;AAAA,YACJ,IAAA;AAAA,YACA,KAAA,EAAO,aAAA;AAAA,YACP,OAAA;AAAA,YACA;AAAA;AAAA,SACF,GACE,IAAA;AAAA,wBACJ,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,GAAG,EAAE,CAAA,QAAA,CAAA;AAAA,YACT,gBAAA,EAAkB,eAAA;AAAA,YAClB,IAAA,EAAM,UAAU,SAAA,KAAc,SAAA;AAAA,YAC9B,cAAA,EAAgB,SAAA;AAAA,YAChB,KAAA,EAAM,WAAA;AAAA,YAEN,QAAA,kBAAA,GAAA;AAAA,cAAC,kBAAA;AAAA,cAAA;AAAA,gBACC,MAAA;AAAA,gBACA,KAAA;AAAA,gBACA,YAAA;AAAA,gBACA,GAAA,EAAK,OAAA;AAAA,gBACL,YAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,eAAA;AAAA,gBACA,OAAA;AAAA,gBACA,UAAA,EAAY,cAAA;AAAA,gBACZ,OAAA;AAAA,gBACA,WAAA;AAAA,gBACA,QAAA,EAAU,oBAAA;AAAA,gBACV,YAAA;AAAA,gBACA;AAAA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,GACF;AAEJ,CAAA;;AC/QO,MAAM,0BAA0B,CAAC;AAAA,EACtC,WAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,EAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAkB,EAAC;AAAA,EACnB,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAoC;AAClC,EAAA,MAAM,EAAE,GAAA,EAAK,YAAA,EAAc,GAAG,qBAAA,EAAsB,GAClD,qBAAqB,EAAC;AACxB,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,YAAY,YAAA,CAAa,CAAC,eAAA,EAAiB,YAAA,EAAc,UAAU,CAAC,CAAA;AAE1E,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAc,WAAA,KAAgB,aAAA,CAAc;AAAA,IAC3D,uBAAuB,eAAA,CAAgB,MAAA;AAAA,IACvC,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,sBAAA,GAAyB,EAAA,CAAG,MAAA,CAAO,eAAe,CAAA,EAAG;AAAA,IACzD,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,IAC5B,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,IAC5B,CAAC,MAAA,CAAO,iBAAiB,CAAC,GAAG,kBAAA;AAAA,IAC7B,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,QAAA,IAAY;AAAA,GACnC,CAAA;AAED,EAAA,4BACG,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,YAAW,EACjC,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACJ,GAAG,qBAAA;AAAA,QAEJ,aAAA,EAAe,aAAA;AAAA,QACf,EAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,qBAAA,EAAuB,SAAS,CAAA;AAAA,QAErE,QAAA,EAAA;AAAA,UAAA,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS,IAAA;AAAA,+BAE5D,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,cAAc,CAAA,EAAG,KAAK,OAAA,EAC1C,QAAA,EAAA;AAAA,YAAA,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,cAAA,GAC3B,eAAA,CAAgB,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAClD,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,gBAEhC,QAAA,kBAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACE,GAAG,eAAe,MAAM,CAAA;AAAA,oBACzB,OAAO,MAAA,CAAO,KAAA;AAAA,oBACd,OAAA,EACE,QAAA,IAAY,QAAA,GACR,MAAA,GACA,CAAC,CAAA,KAAM;AACL,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,sBAAA,cAAA,CAAe,MAAM,CAAA;AACrB,sBAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,oBAC5B,CAAA;AAAA,oBAEN,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,oBACxB,OAAO,MAAA,CAAO;AAAA;AAAA;AAChB,eAAA;AAAA,cAjBK,CAAA,cAAA,EAAiB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,aAmB3C,CAAA,GACD,IAAA;AAAA,YAEH,cAAc,CAAA,mBACb,GAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,cAAc,CAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAI,WAAW,CAAA,CAAA;AAAA,gBACtB,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,gBACxB,KAAA,EAAO,eAAA,CACJ,KAAA,CAAM,YAAY,CAAA,CAClB,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,KAAK,CAAA,CAC5B,IAAA,CAAK,IAAI;AAAA;AAAA,eAEhB,CAAA,GACE,IAAA;AAAA,YAEH,eAAA,CAAgB,MAAA,KAAW,CAAA,mBAC1B,IAAA,CAAC,IAAA,EAAA,EAAK,WAAW,MAAA,CAAO,YAAY,CAAA,EAAG,UAAA,EAAW,QAAA,EAChD,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA,EAAG;AAAA,oBAC7B,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG;AAAA,mBACpB,CAAA;AAAA,kBAEA,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cACC,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS;AAAA,aAAA,EAC/D,CAAA,GACE;AAAA,WAAA,EACN,CAAA;AAAA,0BAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,iBAAiB,CAAA,EACtC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,uBAAuB,CAAA,EAC5C,QAAA,kBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAMN,eAAA;AAAA,cACN,YAAA,EAAW,aAAA;AAAA,cACX,UAAA,EAAW,OAAA;AAAA,cACX,IAAA,EAAK,OAAA;AAAA,cACL,QAAA;AAAA,cACA,QAAA,EAAU,EAAA;AAAA,cACV,SAAA,EAAW,OAAO,eAAe;AAAA;AAAA,aAErC,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,IACC,qBAAqB,IAAA,mBACpB,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,OAAO,iBAAiB,CAAA;AAAA,QACnC,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAA,EAAO;AAAA,QAEhC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,sBAAsB,CAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAMD,QAAA;AAAA,YACN,YAAA,EAAW,iBAAA;AAAA,YACX,UAAA,EAAW,OAAA;AAAA,YACX,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,YAChC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,cAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,cAAA,OAAA,IAAU;AAAA,YACZ;AAAA;AAAA,SACF,EACF;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ,CAAA;AAEA,uBAAA,CAAwB,WAAA,GAAc,yBAAA;;ACxI/B,MAAM,wBAAwB,CAAC;AAAA,EACpC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA,GAAY,SAAA;AAAA,EACZ,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,KAAoC;AAClC,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAA,EAAgB,aAAA,EAAc,GAAI,mBAAA;AAAA,IACxD;AAAA,MACE,OAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAa,EAAA;AAAA,MACb,aAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,MAAME,SAAsB,EAAC;AAC7B,IAAA,IAAI,SAAA,EAAW;AACb,MAAAA,OAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,EAAA,EAAI,YAAA;AAAA,UACJ,KAAA,EAAO,UAAU,KAAA,IAAS;AAAA,SAC5B;AAAA,QACA,YAAY,SAAA,CAAU;AAAA,OACvB,CAAA;AAAA,IACH;AACA,IAAA,OAAOA,MAAAA;AAAA,EACT,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAa,GAAI,OAAA;AAAA,IAC9B,MACE,gBAAA,CAAiB;AAAA,MACf,WAAA,EAAa,eAAA;AAAA,MACb,cAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,CAAC,eAAA,EAAiB,cAAA,EAAgB,aAAA,EAAe,cAAc;AAAA,GACjE;AAEA,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAe,WAAA,KAAgB,uBAAA,EAAwB;AAEpE,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,kBAAA,CAAmB;AAAA,IAC7C,OAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,SAAA,CAAU;AAAA,IACZ,cAAA,EAAgB,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,MAAA,OAAA,CAAQ,QAAA,IAAY,KAAK,QAAA,KAAa,KAAA;AAAA,IACxC,CAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA,EAAc,IAAA;AAAA,IACd,sBAAsB,CAAC;AAAA,MACrB,YAAA,EAAc;AAAA,KAChB,KAEM;AACJ,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,IAAI,EAAA,CAAG,SAAS,YAAA,EAAc;AAC5B,UAAA,SAAA,EAAW,OAAA,EAAQ;AAAA,QACrB,CAAA,MAAA,IACE,GAAG,IAAA,KAAS,QAAA,IACZ,GAAG,IAAA,KAAS,eAAA,IACZ,EAAA,CAAG,IAAA,KAAS,gBAAA,EACZ;AACA,UAAA,eAAA,CAAgB,GAAG,QAAQ,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,0BAA0B,CAAC,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAI,KAAM;AAC7D,MAAA,IAAI,IAAA,KAAS,SAAA,CAAU,gBAAA,CAAiB,aAAA,IAAiB,OAAO,CAAA,EAAG;AACjE,QAAA,mBAAA,GAAsB,GAAG,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAa,IAAA,EAAyB;AACpC,MAAA,OAAO,IAAA,EAAM,SAAS,KAAA,IAAS,EAAA;AAAA,IACjC,CAAA;AAAA,IACA,cAAc,CAAC,KAAA,EAAO,qBACpB,YAAA,CAAa,KAAA,EAAO,kBAAkB,SAAS,CAAA;AAAA,IACjD,GAAI,UAAA,IAAc,EAAE,cAAA,EAAgB,MAAM;AAAA,IAAC,CAAA;AAAE,GAC9C,CAAA;AAED,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA,EAAY,MAAO,MAAA,GAAS,SAAA,KAAc,QAAA,EAAS;AAAA,IACnD;AAAA,GACF;AACF,CAAA;AAEA,SAAS,YAAA,CACP,KAAA,EACA,gBAAA,EACA,SAAA,EACA;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,gBAAA;AAC1B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,UAAU,gBAAA,CAAiB,gBAAA;AAC9B,MAAA,IAAI,SAAA,KAAc,QAAA,IAAY,KAAA,CAAM,MAAA,EAAQ;AAC1C,QAAA,OAAO,EAAE,GAAG,OAAA,EAAS,QAAQ,KAAA,CAAM,MAAA,EAAQ,cAAc,IAAA,EAAK;AAAA,MAChE;AACA,MAAA,OAAO,EAAE,GAAG,OAAA,EAAS,YAAA,EAAc,IAAA,EAAK;AAAA,IAC1C,KAAK,UAAU,gBAAA,CAAiB,wBAAA;AAAA,IAChC,KAAK,UAAU,gBAAA,CAAiB,8BAAA;AAAA,IAChC,KAAK,UAAU,gBAAA,CAAiB,SAAA;AAC9B,MAAA,OAAO;AAAA,QACL,GAAG,OAAA;AAAA,QACH,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,kBAAkB,KAAA,CAAM;AAAA,OAC1B;AAAA,IACF,KAAK,UAAU,gBAAA,CAAiB,yBAAA;AAAA,IAChC,KAAK,UAAU,gBAAA,CAAiB,iBAAA;AAC9B,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,UAAU,gBAAA,CAAiB,iBAAA;AAC9B,MAAA,IAAI,SAAA,KAAc,QAAA,IAAY,KAAA,CAAM,MAAA,EAAQ;AAC1C,QAAA,OAAO,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,MAC5C;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AACE,MAAA,OAAO,OAAA;AAAA;AAEb;;ACzLO,MAAM,6BAA6B,CAAC;AAAA,EACzC,WAAA;AAAA,EACA,EAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAyC;AACvC,EAAA,MAAM,OAAA,GAAU,OAA2B,IAAI,CAAA;AAE/C,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACE,qBAAA,CAAsB;AAAA,IACxB,SAAA;AAAA,IACA,uBAAA;AAAA,IACA,QAAA,EAAU,oBAAA;AAAA,IACV,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAM,eAAe,OAAA,EAAS;AAC5B,MAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,CAAC,oBAAA,IAAwB,QAAQ,MAAA,EAAQ;AACrE,QAAA,MAAM,WAAA,CAAY,EAAA,EAAI,EAAE,OAAA,EAAS,MAAM,CAAA;AACvC,QAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AAAA,IACA,qBAAqB,CAAC,CAAA,KAAM,OAAA,CAAQ,OAAA,EAAS,cAAc,CAAC;AAAA,GAC7D,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,qBAAqB,YAAY;AACrC,MAAA,IAAI,WAAA,KAAgB,WAAA,IAAe,CAAC,oBAAA,EAAsB;AACxD,QAAA,MAAM,WAAA,CAAY,EAAA,EAAI,EAAE,OAAA,EAAS,MAAM,CAAA;AACvC,QAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AACA,IAAA,kBAAA,EAAmB;AAAA,EACrB,GAAG,CAAC,WAAA,EAAa,oBAAA,EAAsB,WAAA,EAAa,uBAAuB,CAAC,CAAA;AAE5E,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,MAAM,SAAS,EAAE,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,oBAAoB,oBAAA,CAAqB;AAAA,IAC7C,QAAA,EAAU,CAAC,CAAC,QAAA;AAAA,IACZ,eAAA,EAAiB,WAAW,IAAA,GAAO,MAAA;AAAA,IACnC,kBAAA,EAAoB,gBAAgB,SAAA,GAAY,MAAA;AAAA,IAChD,cAAA,EAAgB,QAAQ,IAAA,GAAO;AAAA,GACL,CAAA;AAE5B,EAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EACE,SAAA,GACI,CAAA,EAAGK,QAAA,CAAO,cAAc,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GACtCA,QAAA,CAAO,cAAc,CAAA;AAAA,QAE3B,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAM;AAAA,QACnC,GAAA,EAAK,aAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,MAAA,EAAQ,WAAA;AAAA,cACR,KAAA;AAAA,cACA,SAAA;AAAA,cACA,aAAA;AAAA,cACA;AAAA;AAAA,WACF;AAAA,0BACA,GAAA;AAAA,YAAC,uBAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,QAAA;AAAA,cACA,WAAA;AAAA,cACA,kBAAA;AAAA,cACA,iBAAA;AAAA,cACA,OAAA,EAAS,WAAA;AAAA,cACT,EAAA,EAAI,GAAG,EAAE,CAAA,QAAA,CAAA;AAAA,cACT,eAAA;AAAA,cACA,IAAA;AAAA,cACA,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,cACT,MAAA;AAAA,cACA,MAAA;AAAA,cACA,eAAA;AAAA,cACA,cAAA,EAAgB,kBAAA;AAAA,cAChB,SAAA;AAAA,cACA,QAAA;AAAA,cACA;AAAA;AAAA,WACF;AAAA,UACC,aAAA,mBACC,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,SAAA;AAAA,cACJ,IAAA;AAAA,cACA,KAAA,EAAO,aAAA;AAAA,cACP,OAAA;AAAA,cACA;AAAA;AAAA,WACF,GACE,IAAA;AAAA,0BACJ,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,GAAG,EAAE,CAAA,OAAA,CAAA;AAAA,cACT,MAAA;AAAA,cACA,OAAA,EAAS,SAAA;AAAA,cACT,KAAA,EAAO,KAAA;AAAA,cAEP,QAAA,kBAAA,GAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACC,GAAA,EAAK,OAAA;AAAA,kBACL,MAAA,EAAM,IAAA;AAAA,kBACN,KAAA;AAAA,kBACA,YAAA,EAAc,CAAC,IAAA,KACb,YAAA,CAAa;AAAA,oBACX,GAAG,IAAA;AAAA,oBACH,OAAO,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,SAAS,MAAA,EAAO;AAAA,oBACzC,WAAW,iBAAA,CAAkB,SAAA;AAAA,oBAC7B,QAAA,EAAU,CAAA;AAAA,oBACV,uBAAA,EACE,kBAAkB,uBAAuB;AAAA,mBAC5C,CAAA;AAAA,kBAEH,YAAA;AAAA,kBACA,gBAAA;AAAA,kBACA,eAAA;AAAA,kBACA,OAAA;AAAA,kBACA,UAAA,EAAY,cAAA;AAAA,kBACZ,OAAA;AAAA,kBACA,WAAA;AAAA,kBACA,QAAA,EAAU,oBAAA;AAAA,kBACV,YAAA;AAAA,kBACA;AAAA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EACE,SAAA,GACI,CAAA,EAAGA,QAAA,CAAO,cAAc,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GACtCA,QAAA,CAAO,cAAc,CAAA;AAAA,MAE3B,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAM;AAAA,MAEnC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,KAAA;AAAA,YACA,SAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,uBAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,QAAA;AAAA,YACA,WAAA;AAAA,YACA,kBAAA;AAAA,YACA,iBAAA;AAAA,YACA,OAAA,EAAS,WAAA;AAAA,YACT,EAAA,EAAI,GAAG,EAAE,CAAA,QAAA,CAAA;AAAA,YACT,aAAA,EAAe,GAAG,EAAE,CAAA,QAAA,CAAA;AAAA,YACpB,eAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,YACT,MAAA;AAAA,YACA,MAAA;AAAA,YACA,eAAA;AAAA,YACA,cAAA,EAAgB,kBAAA;AAAA,YAChB,SAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,QACC,aAAA,mBACC,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,SAAA;AAAA,YACJ,IAAA;AAAA,YACA,KAAA,EAAO,aAAA;AAAA,YACP,OAAA;AAAA,YACA;AAAA;AAAA,SACF,GACE,IAAA;AAAA,wBACJ,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,GAAG,EAAE,CAAA,QAAA,CAAA;AAAA,YACT,gBAAA,EAAkB,eAAA;AAAA,YAClB,IAAA,EAAM,UAAU,SAAA,KAAc,SAAA;AAAA,YAC9B,cAAA,EAAgB,SAAA;AAAA,YAChB,KAAA,EAAM,WAAA;AAAA,YAEN,QAAA,kBAAA,GAAA;AAAA,cAAC,kBAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,OAAA;AAAA,gBACL,MAAA;AAAA,gBACA,KAAA;AAAA,gBACA,YAAA;AAAA,gBACA,YAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,eAAA;AAAA,gBACA,OAAA;AAAA,gBACA,UAAA,EAAY,cAAA;AAAA,gBACZ,OAAA;AAAA,gBACA,WAAA;AAAA,gBACA,QAAA,EAAU,oBAAA;AAAA,gBACV,YAAA;AAAA,gBACA;AAAA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,GACF;AAEJ,CAAA;;AC/OO,MAAM,gBAAA,GAAmB,UAAA,CAG9B,CAAC,eAAA,EAAiB,GAAA,KAAQ;AAC1B,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,eAAe,CAAA;AAE3E,EAAA,MAAM,eAAA,GAAkB,OAAuB,IAAI,CAAA;AAEnD,EAAA,MAAM;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,KAAA,EAAO,eAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,aAAA,EAAe,iBAAA;AAAA,IACf,IAAA;AAAA,IACA,WAAA,EAAa,eAAA;AAAA,IACb,KAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA,GAAa,GAAA;AAAA,IACb,uBAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA,EAAW,aAAA;AAAA,IACX,cAAA,EAAgB,kBAAA;AAAA,IAChB,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,GAAI,cAAA;AAEJ,EAAA,MAAM,aAAA,GACJ,eAAA,IAAmB,cAAA,GACf,cAAA,CAAe,aAAA,GACf,MAAA;AACN,EAAA,MAAM,WAAA,GACJ,aAAA,IAAiB,cAAA,GAAiB,cAAA,CAAe,WAAA,GAAc,MAAA;AAEjE,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAM,KAAK,MAAA,IAAU,MAAA;AACrB,EAAA,MAAM,YAAY,KAAA,EAAM;AAExB,EAAA,wBAAA,CAAyB,oBAAoB,KAAK,CAAA;AAElD,EAAA,IAAI,iBAAiB,kBAAA,EAAoB;AACvC,IAAA,QAAA;AAAA,MACE;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,gBACJ,OAAO,KAAA,KAAU,SAAA,IAAa,KAAA,KAAU,SAAY,MAAA,GAAY,KAAA;AAClE,EAAA,MAAM,aAAA,GAAgB,CAAC,EAAE,IAAA,IAAQ,iBAAiB,OAAA,IAAW,WAAA,CAAA;AAC7D,EAAA,MAAM,oBAAA,GAAA,CAAwB,YAAY,QAAA,KAAa,KAAA;AAEvD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,WAAA;AAAA,IACA,oBAAA;AAAA,IACA,uBAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,MACE,sBAAA,CAAuB;AAAA,IACzB,IAAA;AAAA,IACA,WAAA,EAAa,eAAA;AAAA,IACb,KAAA;AAAA,IACA,WAAA,EACE,aAAA,IAAiB,cAAA,GAAiB,cAAA,CAAe,WAAA,GAAc,MAAA;AAAA,IACjE,WAAA,EAAa,eAAA;AAAA,IACb,aAAA,EAAe,iBAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,MAAA,KAAoC;AACnC,MAAA,uBAAA;AAAA,QACE,gBAAgB,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE;AAAA,OACtD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,iBAAiB,uBAAuB;AAAA,GAC3C;AAEA,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,uBAAuB,CAAC,CAAA;AAE5B,EAAA,MAAM,kBAAA,GACJ,eAAA,CAAgB,MAAA,KAAW,CAAA,IAAK,oBAAA;AAElC,EAAA,MAAM,YAAY,aAAA,GACd;AAAA,IACE,KAAA,EAAO,cAAc,KAAA,IAAS,YAAA;AAAA,IAC9B,SAAS,aAAA,CAAc,OAAA;AAAA,IACvB,UAAA,EAAa,aAAA,CAAc,UAAA,KAAe,IAAA,GACtC,SAAA,GACA,cAAc,UAAA,KAAe,KAAA,GAC3B,WAAA,GACC,aAAA,CAAc,UAAA,IAAc;AAAA,GACrC,GACA,MAAA;AAEJ,EAAA,MAAM,cAAA,GAAiB,kBAAA,GACnB,CAAC,WAAA,KAAwB;AACvB,IAAA,MAAM,MAAA,GAAS,mBAAmB,WAAW,CAAA;AAC7C,IAAA,OAAO;AAAA,MACL,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAA,EAAa,MAAA,CAAO,UAAA,KAAe,IAAA,GAC/B,SAAA,GACA,OAAO,UAAA,KAAe,KAAA,GACpB,WAAA,GACC,MAAA,CAAO,UAAA,IAAc;AAAA,KAC9B;AAAA,EACF,CAAA,GACA,MAAA;AAEJ,EAAA,MAAM,SAAA,GAA+C;AAAA,IACnD,EAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,uBAAA;AAAA,IACA,SAAA;AAAA,IACA,oBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,oBAAA;AAAA,IACA,uBAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,uBAAO,GAAA,CAAC,0BAAA,EAAA,EAA4B,GAAG,SAAA,EAAW,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,aAAA,GAAuD;AAAA,IAC3D,GAAG,SAAA;AAAA,IACH,UAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBAAO,GAAA,CAAC,4BAAA,EAAA,EAA8B,GAAG,aAAA,EAAe,CAAA;AAC1D,CAAC;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;AC7GxB,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAqC;AACxE,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,QAAQ,UAAA,GAAa,iBAAA;AAAA,IACrB,SAAA,EAAW,aAAA;AAAA,IACX,cAAA,EAAgB,kBAAA;AAAA,IAChB,KAAA;AAAA,IACA,uBAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM,cAAA,CAAe,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAErE,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,eAAe,OAAO,MAAA;AAE3B,IAAA,MAAM,iBAAiB,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAI,QAAQ,CAAA;AAC5D,IAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,cAAA,CAAe,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AAC9D,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,WAAW,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA,CAAE,MAAA;AAChE,IAAA,MAAM,WAAA,GAAc,kBAAkB,cAAA,CAAe,MAAA;AAErD,IAAA,MAAM,SAAA,GACJ,OAAO,aAAA,KAAkB,QAAA,GAAW,cAAc,KAAA,GAAQ,MAAA;AAC5D,IAAA,MAAM,QACJ,OAAO,SAAA,KAAc,UAAA,GAAa,SAAA,CAAU,WAAW,CAAA,GAAI,SAAA;AAE7D,IAAA,MAAM,UAAA,GAAyB,WAAA,GAC3B,SAAA,GACA,aAAA,GAAgB,IACd,eAAA,GACA,WAAA;AAEN,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,uBAAA,CAAwB,EAAE,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,uBAAA,CAAwB,cAAc,CAAA;AAAA,MACxC;AAAA,IACF,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,OAAA,EAAS,KAAA,EAAO,uBAAuB,CAAC,CAAA;AAE3D,EAAA,MAAM,oBAAA,GAAuB,QAAQ,MAAM;AACzC,IAAA,IAAI,CAAC,oBAAoB,OAAO,MAAA;AAEhC,IAAA,OAAO,CAAC,WAAA,KAAwB;AAC9B,MAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,EAAS,WAAW,CAAA;AACnD,MAAA,MAAM,yBAAyB,eAAA,CAAgB,MAAA;AAAA,QAC7C,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI;AAAA,OAChB;AACA,MAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAClD,MAAA,MAAM,mBAAA,GACJ,sBAAA,CAAuB,MAAA,GAAS,CAAA,IAChC,sBAAA,CAAuB,KAAA,CAAM,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,EAAE,CAAC,CAAA;AAC/D,MAAA,MAAM,uBAAuB,sBAAA,CAAuB,IAAA;AAAA,QAAK,CAAC,GAAA,KACxD,WAAA,CAAY,GAAA,CAAI,IAAI,EAAE;AAAA,OACxB;AAEA,MAAA,MAAM,QACJ,OAAO,kBAAA,KAAuB,aAC1B,kBAAA,CAAmB,WAAW,EAAE,KAAA,GAChC,MAAA;AAEN,MAAA,MAAM,UAAA,GAAyB,mBAAA,GAC3B,SAAA,GACA,oBAAA,GACE,eAAA,GACA,WAAA;AAEN,MAAA,MAAM,cAAc,MAAM;AACxB,QAAA,IAAI,mBAAA,EAAqB;AACvB,UAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,sBAAA,CAAuB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACnE,UAAA,uBAAA,CAAwB,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,YAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AAAA,QACrE,CAAA,MAAO;AACL,UAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACjD,UAAA,MAAM,gBAAgB,sBAAA,CAAuB,MAAA;AAAA,YAC3C,CAAC,GAAA,KAAQ,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,EAAE;AAAA,WACjC;AACA,UAAA,uBAAA,CAAwB,CAAC,GAAG,KAAA,EAAO,GAAG,aAAa,CAAC,CAAA;AAAA,QACtD;AAAA,MACF,CAAA;AAEA,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,GAAG,CAAC,kBAAA,EAAoB,SAAS,KAAA,EAAO,uBAAA,EAAyB,MAAM,CAAC,CAAA;AAExE,EAAA,MAAM,QAAA,GAAW,OAA+B,IAAI,CAAA;AACpD,EAAA,MAAM,cAAA,GAAiB,OAAO,OAAO,CAAA;AAErC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAA,CAAe,YAAY,OAAA,EAAS;AACtC,MAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AACzB,MAAA,QAAA,CAAS,SAAS,UAAA,EAAW;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,WAAA,EAAa,CAAC,WAAA,KAAgB,MAAA,CAAO,SAAS,WAAW,CAAA;AAAA,MACzD,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA;AAAA,MACA,uBAAA;AAAA,MACA,SAAA,EAAW,eAAA;AAAA,MACX,cAAA,EAAgB,oBAAA;AAAA,MACf,GAAG;AAAA;AAAA,GACN;AAEJ;;;;"}
@@ -1,2 +1,2 @@
1
- export { M as MultiSelectMenu, a as MultiSelectMenuSync } from './MultiSelectMenuSync-62OeGmkz.js';
1
+ export { M as MultiSelectMenu, a as MultiSelectMenuSync } from './MultiSelectMenuSync-7C1wW4oO.js';
2
2
  //# sourceMappingURL=MultiSelectMenu.js.map
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { forwardRef, useRef, useId, useMemo, useState, useCallback, useEffect } from 'react';
3
- import { u as useToggleSelection, M as MultiSelectOptions } from './useToggleSelection-Dip0eimQ.js';
4
- import { a as useSelectOrchestration, b as useProcessedOptions, c as buildSelectItems, d as useDebouncedCallback, e as OptionsDialog, f as OptionsPopover, g as defaultSyncFilter, t as toSyncFilterFn } from './syncFilterUtils-B03Pc941.js';
3
+ import { u as useToggleSelection, M as MultiSelectOptions } from './useToggleSelection-BBdrIVWs.js';
4
+ import { a as useSelectOrchestration, b as useProcessedOptions, c as buildSelectItems, d as useDebouncedCallback, e as OptionsDialog, f as OptionsPopover, g as defaultSyncFilter, t as toSyncFilterFn } from './syncFilterUtils-UR5Vgqkh.js';
5
5
  import { u as useMenuInteraction } from './useMenuInteraction-BwZ2ORo9.js';
6
6
  import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
7
7
  import { S as SearchField } from './SearchField-im7AHGYo.js';
@@ -449,4 +449,4 @@ const MultiSelectMenuSync = (props) => {
449
449
  };
450
450
 
451
451
  export { MultiSelectMenu as M, MultiSelectMenuSync as a };
452
- //# sourceMappingURL=MultiSelectMenuSync-62OeGmkz.js.map
452
+ //# sourceMappingURL=MultiSelectMenuSync-7C1wW4oO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectMenuSync-62OeGmkz.js","sources":["../src/beta/components/MultiSelectMenu/MultiSelectMenu.tsx","../src/beta/components/MultiSelectMenu/MultiSelectMenuSync.tsx"],"sourcesContent":["import { MultiSelectMenuHandle, MultiSelectMenuProps } from \"./types\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { warnOnce } from \"../../../internal/functions\";\nimport { CheckState } from \"../../../types\";\nimport { MultiSelectOptions } from \"../../../internal/components/MultiSelectOptions\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"../SelectMenu/internal/useMenuInteraction\";\nimport { useToggleSelection } from \"../../../internal/hooks/useToggleSelection\";\nimport { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\nimport { SearchField } from \"../../../components\";\n\n/**\n * MultiSelectMenu component for selecting multiple options from a dropdown triggered by any element.\n *\n * Features:\n * - Attaches to any trigger element via a render prop\n * - Multiple selection with checkbox indicators\n * - Optional search input rendered inside the popover/dialog\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Optional \"Select All\" functionality\n * - Optional \"Select Filtered\" functionality\n * - Pinned options support\n * - Grouped options support\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Configurable popover width\n *\n * @example\n * <MultiSelectMenu\n * trigger={(props) => <Button {...props}>Select books</Button>}\n * label=\"Books\"\n * value={selectedOptions}\n * onSelectedOptionsChange={setSelectedOptions}\n * loadOptions={loadOptions}\n * />\n */\nexport const MultiSelectMenu = forwardRef<\n MultiSelectMenuHandle,\n MultiSelectMenuProps\n>((props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n pinned,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n } = props;\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const selectAll = useMemo(\n () =>\n selectAllProp\n ? {\n label: selectAllProp.label ?? \"Select All\",\n onClick: selectAllProp.onClick,\n checkState: (selectAllProp.checkState === true\n ? \"checked\"\n : selectAllProp.checkState === false\n ? \"unchecked\"\n : (selectAllProp.checkState ?? \"indeterminate\")) as CheckState,\n }\n : undefined,\n [selectAllProp],\n );\n\n const selectFiltered = useMemo(\n () =>\n selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n checkState: (config.checkState === true\n ? \"checked\"\n : config.checkState === false\n ? \"unchecked\"\n : (config.checkState ?? \"indeterminate\")) as CheckState,\n };\n }\n : undefined,\n [selectFilteredProp],\n );\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll && !searchValue) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: { id: \"select-all\", label: selectAll.label ?? \"Select All\" },\n checkState: selectAll.checkState,\n });\n }\n if (selectFiltered && searchValue && !loading) {\n const config = selectFiltered(searchValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: config.label ?? \"Select Filtered\",\n },\n checkState: config.checkState,\n });\n }\n return items;\n }, [selectAll, selectFiltered, searchValue, loading]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(selectedOptions.map((o) => o.id)),\n [selectedOptions],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (item.type === \"select-all\") {\n selectAll?.onClick();\n } else if (item.type === \"select-filtered\" && selectFiltered) {\n const config = selectFiltered(searchValue);\n config.onClick();\n } else if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n handleItemClick(item.original);\n }\n },\n [selectAll, selectFiltered, searchValue, handleItemClick],\n );\n\n const {\n isOpen,\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: false,\n id,\n triggerRef,\n label,\n onImplicitClose,\n onExplicitClose,\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n ]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange as React.ChangeEventHandler<HTMLInputElement>}\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClickOutside={handleClickOutside}\n width={popoverWidth ?? 320}\n >\n {searchInput}\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n});\n\nMultiSelectMenu.displayName = \"MultiSelectMenu\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectMenu } from \"./MultiSelectMenu\";\nimport {\n MultiSelectMenuHandle,\n MultiSelectMenuProps,\n MultiSelectMenuOption,\n} from \"./types\";\nimport { CheckState } from \"../../../types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type MultiSelectMenuSyncProps = Omit<\n MultiSelectMenuProps,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /**\n * The options to display in the multi-select menu.\n */\n options: MultiSelectMenuOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * By default, options are filtered by `label` and `searchText` using match-sorter.\n */\n filter?:\n | SyncFilterFn<MultiSelectMenuOption>\n | MatchSorterOptions<MultiSelectMenuOption>;\n /**\n * Enables the \"Select All\" option at the top of the list.\n * Can be a boolean to enable with default label, or an object to customize the label.\n * Click handling and check state are managed automatically.\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Enables the \"Select Filtered\" option when a search term is active.\n * Can be a boolean to enable with default label, or a function returning a config with a custom label.\n * Click handling and check state are managed automatically.\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/**\n * MultiSelectMenuSync is a simplified version of MultiSelectMenu for client-side option sets.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`\n * - Performs client-side filtering of the options\n * - Simplified `selectAll` prop that automatically handles click and check state\n * - Simplified `selectFiltered` prop that automatically selects/deselects filtered options\n * - Supports all other props of MultiSelectMenu\n *\n * @example\n * <MultiSelectMenuSync\n * trigger={(props) => <Button {...props}>Pick books</Button>}\n * label=\"Books\"\n * options={bookOptions}\n * value={selectedOptions}\n * onSelectedOptionsChange={setSelectedOptions}\n * selectAll\n * />\n */\nexport const MultiSelectMenuSync = (props: MultiSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = value.filter((v) => enabledIds.has(v.id)).length;\n const totalCount = enabledOptions.length;\n const allSelected = selectedCount === totalCount;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n const label =\n typeof labelProp === \"function\" ? labelProp(allSelected) : labelProp;\n\n const checkState: CheckState = allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allSelected) {\n onSelectedOptionsChange([]);\n } else {\n onSelectedOptionsChange(enabledOptions);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n }, [selectAllProp, options, value, onSelectedOptionsChange]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const selectedIds = new Set(value.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => selectedIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n selectedIds.has(opt.id),\n );\n\n const label =\n typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined;\n\n const checkState: CheckState = allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allFilteredSelected) {\n const filteredIds = new Set(enabledFilteredOptions.map((o) => o.id));\n onSelectedOptionsChange(value.filter((v) => !filteredIds.has(v.id)));\n } else {\n const currentIds = new Set(value.map((v) => v.id));\n const newSelections = enabledFilteredOptions.filter(\n (opt) => !currentIds.has(opt.id),\n );\n onSelectedOptionsChange([...value, ...newSelections]);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n };\n }, [selectFilteredProp, options, value, onSelectedOptionsChange, filter]);\n\n const fieldRef = useRef<MultiSelectMenuHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <MultiSelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["searchValue","items"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelectMenuSync-7C1wW4oO.js","sources":["../src/beta/components/MultiSelectMenu/MultiSelectMenu.tsx","../src/beta/components/MultiSelectMenu/MultiSelectMenuSync.tsx"],"sourcesContent":["import { MultiSelectMenuHandle, MultiSelectMenuProps } from \"./types\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { warnOnce } from \"../../../internal/functions\";\nimport { CheckState } from \"../../../types\";\nimport { MultiSelectOptions } from \"../../../internal/components/MultiSelectOptions\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"../SelectMenu/internal/useMenuInteraction\";\nimport { useToggleSelection } from \"../../../internal/hooks/useToggleSelection\";\nimport { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\nimport { SearchField } from \"../../../components\";\n\n/**\n * MultiSelectMenu component for selecting multiple options from a dropdown triggered by any element.\n *\n * Features:\n * - Attaches to any trigger element via a render prop\n * - Multiple selection with checkbox indicators\n * - Optional search input rendered inside the popover/dialog\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Optional \"Select All\" functionality\n * - Optional \"Select Filtered\" functionality\n * - Pinned options support\n * - Grouped options support\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Configurable popover width\n *\n * @example\n * <MultiSelectMenu\n * trigger={(props) => <Button {...props}>Select books</Button>}\n * label=\"Books\"\n * value={selectedOptions}\n * onSelectedOptionsChange={setSelectedOptions}\n * loadOptions={loadOptions}\n * />\n */\nexport const MultiSelectMenu = forwardRef<\n MultiSelectMenuHandle,\n MultiSelectMenuProps\n>((props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n pinned,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n } = props;\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const selectAll = useMemo(\n () =>\n selectAllProp\n ? {\n label: selectAllProp.label ?? \"Select All\",\n onClick: selectAllProp.onClick,\n checkState: (selectAllProp.checkState === true\n ? \"checked\"\n : selectAllProp.checkState === false\n ? \"unchecked\"\n : (selectAllProp.checkState ?? \"indeterminate\")) as CheckState,\n }\n : undefined,\n [selectAllProp],\n );\n\n const selectFiltered = useMemo(\n () =>\n selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n checkState: (config.checkState === true\n ? \"checked\"\n : config.checkState === false\n ? \"unchecked\"\n : (config.checkState ?? \"indeterminate\")) as CheckState,\n };\n }\n : undefined,\n [selectFilteredProp],\n );\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll && !searchValue) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: { id: \"select-all\", label: selectAll.label ?? \"Select All\" },\n checkState: selectAll.checkState,\n });\n }\n if (selectFiltered && searchValue && !loading) {\n const config = selectFiltered(searchValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: config.label ?? \"Select Filtered\",\n },\n checkState: config.checkState,\n });\n }\n return items;\n }, [selectAll, selectFiltered, searchValue, loading]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(selectedOptions.map((o) => o.id)),\n [selectedOptions],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (item.type === \"select-all\") {\n selectAll?.onClick();\n } else if (item.type === \"select-filtered\" && selectFiltered) {\n const config = selectFiltered(searchValue);\n config.onClick();\n } else if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n handleItemClick(item.original);\n }\n },\n [selectAll, selectFiltered, searchValue, handleItemClick],\n );\n\n const {\n isOpen,\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: false,\n id,\n triggerRef,\n label,\n onImplicitClose,\n onExplicitClose,\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n ]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange as React.ChangeEventHandler<HTMLInputElement>}\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClickOutside={handleClickOutside}\n width={popoverWidth ?? 320}\n >\n {searchInput}\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n});\n\nMultiSelectMenu.displayName = \"MultiSelectMenu\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectMenu } from \"./MultiSelectMenu\";\nimport {\n MultiSelectMenuHandle,\n MultiSelectMenuProps,\n MultiSelectMenuOption,\n} from \"./types\";\nimport { CheckState } from \"../../../types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type MultiSelectMenuSyncProps = Omit<\n MultiSelectMenuProps,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /**\n * The options to display in the multi-select menu.\n */\n options: MultiSelectMenuOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * By default, options are filtered by `label` and `searchText` using match-sorter.\n */\n filter?:\n | SyncFilterFn<MultiSelectMenuOption>\n | MatchSorterOptions<MultiSelectMenuOption>;\n /**\n * Enables the \"Select All\" option at the top of the list.\n * Can be a boolean to enable with default label, or an object to customize the label.\n * Click handling and check state are managed automatically.\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Enables the \"Select Filtered\" option when a search term is active.\n * Can be a boolean to enable with default label, or a function returning a config with a custom label.\n * Click handling and check state are managed automatically.\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/**\n * MultiSelectMenuSync is a simplified version of MultiSelectMenu for client-side option sets.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`\n * - Performs client-side filtering of the options\n * - Simplified `selectAll` prop that automatically handles click and check state\n * - Simplified `selectFiltered` prop that automatically selects/deselects filtered options\n * - Supports all other props of MultiSelectMenu\n *\n * @example\n * <MultiSelectMenuSync\n * trigger={(props) => <Button {...props}>Pick books</Button>}\n * label=\"Books\"\n * options={bookOptions}\n * value={selectedOptions}\n * onSelectedOptionsChange={setSelectedOptions}\n * selectAll\n * />\n */\nexport const MultiSelectMenuSync = (props: MultiSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = value.filter((v) => enabledIds.has(v.id)).length;\n const totalCount = enabledOptions.length;\n const allSelected = selectedCount === totalCount;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n const label =\n typeof labelProp === \"function\" ? labelProp(allSelected) : labelProp;\n\n const checkState: CheckState = allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allSelected) {\n onSelectedOptionsChange([]);\n } else {\n onSelectedOptionsChange(enabledOptions);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n }, [selectAllProp, options, value, onSelectedOptionsChange]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const selectedIds = new Set(value.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => selectedIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n selectedIds.has(opt.id),\n );\n\n const label =\n typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined;\n\n const checkState: CheckState = allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allFilteredSelected) {\n const filteredIds = new Set(enabledFilteredOptions.map((o) => o.id));\n onSelectedOptionsChange(value.filter((v) => !filteredIds.has(v.id)));\n } else {\n const currentIds = new Set(value.map((v) => v.id));\n const newSelections = enabledFilteredOptions.filter(\n (opt) => !currentIds.has(opt.id),\n );\n onSelectedOptionsChange([...value, ...newSelections]);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n };\n }, [selectFilteredProp, options, value, onSelectedOptionsChange, filter]);\n\n const fieldRef = useRef<MultiSelectMenuHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <MultiSelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["searchValue","items"],"mappings":"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"}
@@ -5,15 +5,17 @@ import { c as cx } from './index-De1g9FRV.js';
5
5
  import { S as Spinner } from './Spinner-BqmcE2pb.js';
6
6
  import { t as textFieldStyles } from './TextField.module-BP-hDP5m.js';
7
7
  import { w as warnDeprecatedErrorUsage } from './utils-CM48ODEJ.js';
8
- import { B as Button } from './Button-CVsGhVJz.js';
8
+ import { B as Button } from './Button-BdrrhBTI.js';
9
9
  import { I as Icon } from './Icon-DuIlne4x.js';
10
- import { F as FieldLabel } from './FieldLabel-CQ5QGTVq.js';
10
+ import { F as FieldLabel } from './FieldLabel-HO2VP-4B.js';
11
11
  import { u as useNumberField } from './useNumberField-eMyk7MB8.js';
12
12
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DMDdfIah.js';
13
13
  import { u as useFocusWithin } from './useFocusWithin-hi77jsrB.js';
14
14
  import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
15
+ import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
15
16
  import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
16
17
  import { useTrackingId } from './useTrackingId.js';
18
+ import { s as stripInlineMarkdown } from './stripInlineMarkdown-Cg1qlNwL.js';
17
19
  import { H as Helper } from './Helper-B_FIOlhy.js';
18
20
 
19
21
  import './NumberField.css';const small = "_small_wkha4_24";
@@ -62,6 +64,7 @@ const NumberField = forwardRef(
62
64
  minimumFractionDigits = 0,
63
65
  step = 1,
64
66
  hideControls = false,
67
+ hideLabel = false,
65
68
  ...rest
66
69
  } = componentProps;
67
70
  const numberFieldRef = useRef(null);
@@ -92,6 +95,11 @@ const NumberField = forwardRef(
92
95
  const helperUid = useId();
93
96
  const moreInfoUid = useId();
94
97
  warnDeprecatedErrorUsage("NumberField", error);
98
+ if (label === void 0) {
99
+ warnOnce(
100
+ "NumberField: label will be required in v4.0.0. Use hideLabel to visually hide the label."
101
+ );
102
+ }
95
103
  const errorMessages = typeof error === "boolean" || error === void 0 ? void 0 : error;
96
104
  const hasHelperText = hint || errorMessages || warning || description;
97
105
  const ariaDescribedBy = [hasHelperText && helperUid, moreInfo && moreInfoUid].filter(Boolean).join(" ") || void 0;
@@ -121,7 +129,7 @@ const NumberField = forwardRef(
121
129
  style: styleCombined,
122
130
  ...wrapperProps,
123
131
  children: [
124
- label && /* @__PURE__ */ jsx(
132
+ label && !hideLabel && /* @__PURE__ */ jsx(
125
133
  FieldLabel,
126
134
  {
127
135
  moreInfo,
@@ -168,7 +176,10 @@ const NumberField = forwardRef(
168
176
  readOnly,
169
177
  disabled,
170
178
  ref: combinedInputRef,
171
- "aria-label": label ? void 0 : placeholder,
179
+ "aria-label": (
180
+ // TODO(v4.0.0): remove typeof check — label will always be string
181
+ hideLabel && typeof label === "string" ? stripInlineMarkdown(label) : label ? void 0 : placeholder
182
+ ),
172
183
  "aria-describedby": ariaDescribedBy,
173
184
  "aria-invalid": error ? !!error : void 0
174
185
  }
@@ -233,4 +244,4 @@ const NumberField = forwardRef(
233
244
  NumberField.displayName = "NumberField";
234
245
 
235
246
  export { NumberField as N };
236
- //# sourceMappingURL=NumberField-CHBXBMSj.js.map
247
+ //# sourceMappingURL=NumberField-CZSTHBeO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberField-CZSTHBeO.js","sources":["../../hammer-icon/mdi/round/add.svg","../../hammer-icon/mdi/round/remove.svg","../src/components/NumberField/NumberField.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z\" }));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgRemove = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M18 13H6c-.55 0-1-.45-1-1s.45-1 1-1h12c.55 0 1 .45 1 1s-.45 1-1 1z\" }));\nexport default SvgRemove;\n","import {\n ReactElement,\n forwardRef,\n isValidElement,\n ComponentPropsWithoutRef,\n useId,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Spinner } from \"../Spinner\";\nimport textFieldStyles from \"../TextField/TextField.module.scss\";\nimport numberFieldStyles from \"./NumberField.module.scss\";\nimport { Helper, HelperProps } from \"../../internal/components\";\nimport { warnDeprecatedErrorUsage } from \"../FieldMessage\";\nimport { LayoutUtilProps, Size, DataTrackingId } from \"../../types\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport IconAdd from \"@servicetitan/hammer-icon/mdi/round/add.svg\";\nimport IconRemove from \"@servicetitan/hammer-icon/mdi/round/remove.svg\";\nimport {\n useFocusWithin,\n useLayoutPropsUtil,\n useNumberField,\n} from \"../../internal/hooks\";\nimport {\n childrenToString,\n stripInlineMarkdown,\n warnOnce,\n} from \"../../internal/functions\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { FieldLabelProps } from \"../../internal/types\";\n\n/**\n * Props for the NumberField component.\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\" | \"prefix\" | \"type\" | \"inputMode\" | \"value\" | \"defaultValue\" | \"onFocus\" | \"onBlur\" | \"onChange\">\n * @extends LayoutUtilProps\n * @extends FieldLabelProps\n * @extends DataTrackingId\n */\nexport type NumberFieldProps = Omit<\n ComponentPropsWithoutRef<\"input\">,\n | \"size\"\n | \"prefix\"\n | \"type\"\n | \"inputMode\"\n | \"value\"\n | \"defaultValue\"\n | \"onFocus\"\n | \"onBlur\"\n | \"onChange\"\n> &\n LayoutUtilProps &\n FieldLabelProps & {\n /**\n * Error state for the field. Pass `true` to indicate error styling without a message.\n * Pass a string, string[], or ReactElement (deprecated) for error messages.\n */\n error?: boolean | string | ReactElement | string[];\n // TODO(v4.0.0): make label required\n /**\n * Label for the field.\n * Omitting `label` is deprecated — it will be required in v4.0.0. Use `hideLabel` to visually hide it.\n */\n label?: string;\n /**\n * When `true`, hides the visible label and moves it to `aria-label` on the input.\n * Requires `label` to be set — the label is always needed for accessibility.\n * @default false\n */\n hideLabel?: boolean;\n prefix?: string;\n suffix?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n description?: HelperProps[\"description\"];\n /**\n * @deprecated No longer used. Error messages always use `aria-live=\"assertive\"`.\n */\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n hint?: HelperProps[\"hint\"];\n /**\n * Warning message(s) to display. Supports a single string or an array of strings.\n */\n warning?: string | string[];\n loading?: boolean;\n disabled?: boolean;\n minValue?: number;\n maxValue?: number;\n maximumFractionDigits?: number;\n minimumFractionDigits?: number;\n step?: number;\n value?: number | null;\n defaultValue?: number | null;\n onChange?: (value: number | null) => void;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n hideControls?: boolean;\n } & DataTrackingId;\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n error,\n errorAriaLive: _errorAriaLive,\n defaultValue: defaultValueProp,\n value: valueProp,\n label,\n moreInfo,\n prefix,\n suffix,\n size,\n required,\n onChange: onChangeProp,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n id: idProp,\n description,\n hint,\n warning,\n loading,\n disabled,\n readOnly,\n labelProps,\n style,\n placeholder,\n minValue,\n maxValue,\n maximumFractionDigits = 0,\n minimumFractionDigits = 0,\n step = 1,\n hideControls = false,\n hideLabel = false,\n ...rest\n } = componentProps;\n const numberFieldRef = useRef<HTMLDivElement>(null);\n\n const { props: wrapperProps } = useFocusWithin({\n onFocus: (e) => {\n onFocusProp?.(e);\n },\n onBlur: (e) => {\n onBlurProp?.(e);\n },\n });\n\n const { inputProps, inputRef, incrementButtonProps, decrementButtonProps } =\n useNumberField({\n minValue,\n maxValue,\n maximumFractionDigits,\n minimumFractionDigits,\n step,\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange: onChangeProp,\n label,\n });\n\n const combinedInputRef = useMergeRefs([numberFieldRef, inputRef, ref]);\n\n const labelUid = useId();\n const id = idProp ?? labelUid;\n const prefixUid = useId();\n const suffixUid = useId();\n const helperUid = useId();\n const moreInfoUid = useId();\n\n warnDeprecatedErrorUsage(\"NumberField\", error);\n\n // TODO(v4.0.0): remove once label is required\n if (label === undefined) {\n warnOnce(\n \"NumberField: label will be required in v4.0.0. Use hideLabel to visually hide the label.\",\n );\n }\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n\n const hasHelperText = hint || errorMessages || warning || description;\n\n const ariaDescribedBy =\n [hasHelperText && helperUid, moreInfo && moreInfoUid]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const styleCombined = { ...style, ...layoutStyles };\n\n const data = {\n label: childrenToString(props.label),\n prefix: childrenToString(props.prefix),\n suffix: childrenToString(props.suffix),\n description: childrenToString(props.description),\n size: props.size,\n minValue: props.minValue,\n maxValue: props.maxValue,\n step: props.step,\n maximumFractionDigits: props.maximumFractionDigits,\n minimumFractionDigits: props.minimumFractionDigits,\n };\n\n const trackingId = useTrackingId({\n name: \"NumberField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <div\n className={cx(textFieldStyles[\"textfield\"], className)}\n data-anv=\"number-field\"\n style={styleCombined}\n {...wrapperProps}\n >\n {/* TODO(v4.0.0): simplify to !hideLabel once label is required */}\n {label && !hideLabel && (\n <FieldLabel\n moreInfo={moreInfo}\n moreInfoId={moreInfo ? moreInfoUid : undefined}\n required={required}\n htmlFor={id}\n {...labelProps}\n >\n {label}\n </FieldLabel>\n )}\n <div\n className={cx(textFieldStyles[\"input-wrapper\"], {\n [textFieldStyles[\"small\"]]: size === \"small\",\n [textFieldStyles[\"large\"]]: size === \"large\",\n [numberFieldStyles[\"small\"]]: size === \"small\",\n [numberFieldStyles[\"large\"]]: size === \"large\",\n })}\n role=\"presentation\"\n onClick={() => numberFieldRef.current?.focus()}\n >\n {prefix ? (\n <div\n aria-hidden\n className={textFieldStyles[\"prefix\"]}\n id={`prefix${prefixUid}`}\n >\n {prefix}\n </div>\n ) : null}\n <input\n id={id}\n className={cx(textFieldStyles[\"input\"], {\n [textFieldStyles[\"error\"]]: error,\n })}\n data-tracking-id={trackingId}\n {...rest}\n {...inputProps}\n required={required}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n ref={combinedInputRef}\n aria-label={\n // TODO(v4.0.0): remove typeof check — label will always be string\n hideLabel && typeof label === \"string\"\n ? stripInlineMarkdown(label)\n : label\n ? undefined\n : placeholder\n }\n aria-describedby={ariaDescribedBy}\n aria-invalid={error ? !!error : undefined}\n />\n {loading ? (\n <div\n className={textFieldStyles[\"loading-spinner-wrapper\"]}\n data-testid=\"spinner\"\n >\n <Spinner size=\"small\" />\n </div>\n ) : null}\n {suffix ? (\n <div\n className={textFieldStyles[\"suffix\"]}\n aria-hidden\n id={`suffix${suffixUid}`}\n >\n {suffix}\n </div>\n ) : null}\n {!hideControls && !disabled && !readOnly && (\n <div className={numberFieldStyles[\"stepper-buttons\"]}>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n {...decrementButtonProps}\n >\n <Icon svg={IconRemove} />\n </Button>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n {...incrementButtonProps}\n >\n <Icon svg={IconAdd} />\n </Button>\n </div>\n )}\n </div>\n {hasHelperText ? (\n <Helper\n id={helperUid}\n hint={hint}\n showCounter={false}\n error={\n typeof errorMessages === \"string\" || Array.isArray(errorMessages)\n ? errorMessages\n : undefined\n }\n warning={warning}\n errorMessage={\n isValidElement(errorMessages) ? errorMessages : undefined\n }\n description={description}\n />\n ) : null}\n </div>\n );\n },\n);\n\nNumberField.displayName = \"NumberField\";\n"],"names":["IconRemove","IconAdd"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { N as NumberField, N as default } from './NumberField-CHBXBMSj.js';
1
+ export { N as NumberField, N as default } from './NumberField-CZSTHBeO.js';
2
2
  //# sourceMappingURL=NumberField.js.map