@servicetitan/anvil2 3.13.6 → 3.14.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 (414) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/{AiMark-D8dx3b1Q.js → AiMark-CWufA6pV.js} +7 -62
  3. package/dist/{AiMark-D8dx3b1Q.js.map → AiMark-CWufA6pV.js.map} +1 -1
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-N-Es76Om.js → Alert-RkvFtmRP.js} +2 -2
  6. package/dist/{Alert-N-Es76Om.js.map → Alert-RkvFtmRP.js.map} +1 -1
  7. package/dist/Alert.js +1 -1
  8. package/dist/{AnvilProvider-DcYAaAvs.js → AnvilProvider-DagOuc9c.js} +13 -7
  9. package/dist/AnvilProvider-DagOuc9c.js.map +1 -0
  10. package/dist/AnvilProvider.js +1 -1
  11. package/dist/{Avatar-D31JDNrs.js → Avatar-DZxHhMTP.js} +2 -4
  12. package/dist/Avatar-DZxHhMTP.js.map +1 -0
  13. package/dist/{Avatar-DXI-w1Vi.js → Avatar-DkWoRhJu.js} +2 -2
  14. package/dist/{Avatar-DXI-w1Vi.js.map → Avatar-DkWoRhJu.js.map} +1 -1
  15. package/dist/Avatar.js +2 -2
  16. package/dist/{Breadcrumbs-Di0HJmcH.js → Breadcrumbs-DbOrdao2.js} +2 -2
  17. package/dist/{Breadcrumbs-Di0HJmcH.js.map → Breadcrumbs-DbOrdao2.js.map} +1 -1
  18. package/dist/Breadcrumbs.js +1 -1
  19. package/dist/Button-Dwh_Nd4l.js.map +1 -1
  20. package/dist/{Calendar-DnK6UwPE.js → Calendar-CK-AAaSG.js} +33 -41
  21. package/dist/Calendar-CK-AAaSG.js.map +1 -0
  22. package/dist/{Calendar-C1mgmbWt.js → Calendar-DLnn6dJE.js} +2 -2
  23. package/dist/{Calendar-C1mgmbWt.js.map → Calendar-DLnn6dJE.js.map} +1 -1
  24. package/dist/Calendar.css +50 -48
  25. package/dist/Calendar.js +2 -2
  26. package/dist/{Checkbox-CknwM231.js → Checkbox-CboZhOtU.js} +3 -3
  27. package/dist/{Checkbox-CknwM231.js.map → Checkbox-CboZhOtU.js.map} +1 -1
  28. package/dist/{Checkbox-FvMXGsgi.js → Checkbox-Cn4iNLW_.js} +2 -2
  29. package/dist/{Checkbox-FvMXGsgi.js.map → Checkbox-Cn4iNLW_.js.map} +1 -1
  30. package/dist/Checkbox.js +1 -1
  31. package/dist/{Chip-AILbiVZ6.js → Chip-UbrxYEqs.js} +4 -6
  32. package/dist/Chip-UbrxYEqs.js.map +1 -0
  33. package/dist/Chip.js +1 -1
  34. package/dist/Combobox.js +1 -1
  35. package/dist/{DataTable-BE1YvSto.js → DataTable-COExZbOC.js} +11 -25
  36. package/dist/DataTable-COExZbOC.js.map +1 -0
  37. package/dist/{DateFieldRange-VK82YRwV.js → DateFieldRange-CpTxlASD.js} +5 -5
  38. package/dist/{DateFieldRange-VK82YRwV.js.map → DateFieldRange-CpTxlASD.js.map} +1 -1
  39. package/dist/DateFieldRange.js +1 -1
  40. package/dist/{DateFieldSingle-BikPSISX.js → DateFieldSingle-DR2kfrzh.js} +5 -5
  41. package/dist/{DateFieldSingle-BikPSISX.js.map → DateFieldSingle-DR2kfrzh.js.map} +1 -1
  42. package/dist/DateFieldSingle.js +1 -1
  43. package/dist/{DateFieldYearless-DQIEBYKe.js → DateFieldYearless-4mS_2Mgw.js} +5 -5
  44. package/dist/{DateFieldYearless-DQIEBYKe.js.map → DateFieldYearless-4mS_2Mgw.js.map} +1 -1
  45. package/dist/DateFieldYearless.js +1 -1
  46. package/dist/{DateFieldYearlessRange-BpQqvD9U.js → DateFieldYearlessRange-C-yvKBkJ.js} +4 -4
  47. package/dist/{DateFieldYearlessRange-BpQqvD9U.js.map → DateFieldYearlessRange-C-yvKBkJ.js.map} +1 -1
  48. package/dist/DateFieldYearlessRange.js +1 -1
  49. package/dist/{DaysOfTheWeek-Re26vN8g.js → DaysOfTheWeek-Bo4w8SsT.js} +2 -2
  50. package/dist/{DaysOfTheWeek-Re26vN8g.js.map → DaysOfTheWeek-Bo4w8SsT.js.map} +1 -1
  51. package/dist/DaysOfTheWeek.js +1 -1
  52. package/dist/{Dialog-BMPFoRQh.js → Dialog-Ds25dKQp.js} +4 -4
  53. package/dist/{Dialog-BMPFoRQh.js.map → Dialog-Ds25dKQp.js.map} +1 -1
  54. package/dist/Dialog.js +1 -1
  55. package/dist/{Drawer-BCw_ZHSD.js → Drawer-Da-bj_6o.js} +4 -4
  56. package/dist/{Drawer-BCw_ZHSD.js.map → Drawer-Da-bj_6o.js.map} +1 -1
  57. package/dist/Drawer.js +1 -1
  58. package/dist/DrillDown.js +1 -1
  59. package/dist/{EditCard-CTEk64eN.js → EditCard-CocV93gS.js} +2 -2
  60. package/dist/{EditCard-CTEk64eN.js.map → EditCard-CocV93gS.js.map} +1 -1
  61. package/dist/EditCard.js +1 -1
  62. package/dist/{FieldLabel-CYCk2rz-.js → FieldLabel-6aFKQfyD.js} +2 -2
  63. package/dist/FieldLabel-6aFKQfyD.js.map +1 -0
  64. package/dist/FieldLabel.js +1 -1
  65. package/dist/{FilterBar-XMZ-Q-aW.js → FilterBar-CZT1ryz_.js} +6 -7
  66. package/dist/FilterBar-CZT1ryz_.js.map +1 -0
  67. package/dist/FilterBar.js +1 -1
  68. package/dist/Helper-BHpOgh7k.js.map +1 -1
  69. package/dist/Icon-B5zwN7GD.js.map +1 -1
  70. package/dist/{InputMask-Bm7ZYtQy.js → InputMask-CNV0Ucli.js} +3 -3
  71. package/dist/{InputMask-Bm7ZYtQy.js.map → InputMask-CNV0Ucli.js.map} +1 -1
  72. package/dist/InputMask.js +1 -1
  73. package/dist/{ListView-Bkv1ZCSu.js → ListView-DFAWrwzi.js} +2 -2
  74. package/dist/ListView-DFAWrwzi.js.map +1 -0
  75. package/dist/ListView.js +1 -1
  76. package/dist/{Listbox-BWy_uBqm.js → Listbox-BErqErNN.js} +2 -2
  77. package/dist/Listbox-BErqErNN.js.map +1 -0
  78. package/dist/Listbox.js +1 -1
  79. package/dist/LocalizationContext-UsmB5mnR.js.map +1 -1
  80. package/dist/LocalizationProvider-BPcOU7YX.js.map +1 -1
  81. package/dist/{MenuFooter--lBF8OjJ.js → MenuFooter-fGSZYh8e.js} +2 -2
  82. package/dist/MenuFooter-fGSZYh8e.js.map +1 -0
  83. package/dist/MultiSelectField.js +1 -1
  84. package/dist/{MultiSelectFieldSync-C57Hms2z.js → MultiSelectFieldSync-CqWUidCm.js} +8 -8
  85. package/dist/MultiSelectFieldSync-CqWUidCm.js.map +1 -0
  86. package/dist/MultiSelectMenu.js +1 -1
  87. package/dist/{MultiSelectMenuSync-DxU1AtCL.js → MultiSelectMenuSync-DG3rKyQc.js} +6 -6
  88. package/dist/{MultiSelectMenuSync-DxU1AtCL.js.map → MultiSelectMenuSync-DG3rKyQc.js.map} +1 -1
  89. package/dist/{NumberField-BOLMhpdk.js → NumberField-DRYYJHec.js} +3 -3
  90. package/dist/{NumberField-BOLMhpdk.js.map → NumberField-DRYYJHec.js.map} +1 -1
  91. package/dist/NumberField.js +1 -1
  92. package/dist/{Page-CBmCe-YR.js → Page-BmpojvuI.js} +8 -8
  93. package/dist/{Page-CBmCe-YR.js.map → Page-BmpojvuI.js.map} +1 -1
  94. package/dist/Page.js +1 -1
  95. package/dist/{Pagination-Hjalx9ZX.js → Pagination-Bc4fhdNm.js} +3 -3
  96. package/dist/{Pagination-Hjalx9ZX.js.map → Pagination-Bc4fhdNm.js.map} +1 -1
  97. package/dist/Pagination.js +1 -1
  98. package/dist/{Popover-BQ-R2hs0.js → Popover-BgVOsP4J.js} +2 -2
  99. package/dist/{Popover-BQ-R2hs0.js.map → Popover-BgVOsP4J.js.map} +1 -1
  100. package/dist/Popover.js +1 -1
  101. package/dist/PortalProvider-Cj_y3gbC.js.map +1 -1
  102. package/dist/{ProgressBar-BUmYFa81.js → ProgressBar-Chb0uKfL.js} +2 -2
  103. package/dist/{ProgressBar-BUmYFa81.js.map → ProgressBar-Chb0uKfL.js.map} +1 -1
  104. package/dist/ProgressBar.js +1 -1
  105. package/dist/{Radio-BgbBIhPS.js → Radio-DcNlFfSu.js} +3 -3
  106. package/dist/{Radio-BgbBIhPS.js.map → Radio-DcNlFfSu.js.map} +1 -1
  107. package/dist/{Radio-C2pWQ84U.js → Radio-gpMEsFss.js} +2 -2
  108. package/dist/{Radio-C2pWQ84U.js.map → Radio-gpMEsFss.js.map} +1 -1
  109. package/dist/Radio.js +1 -1
  110. package/dist/{RichTextEditor-Chzl-zeW.js → RichTextEditor-DeO4p-S-.js} +8 -8
  111. package/dist/{RichTextEditor-Chzl-zeW.js.map → RichTextEditor-DeO4p-S-.js.map} +1 -1
  112. package/dist/RichTextEditor.js +1 -1
  113. package/dist/{SavedFiltersButton-DFy_R8yv.js → SavedFiltersButton-Cvf1mJk8.js} +10 -10
  114. package/dist/{SavedFiltersButton-DFy_R8yv.js.map → SavedFiltersButton-Cvf1mJk8.js.map} +1 -1
  115. package/dist/SavedFiltersButton.js +1 -1
  116. package/dist/{SelectCard-BGTB3ay0.js → SelectCard-bp5hRyHK.js} +3 -3
  117. package/dist/{SelectCard-BGTB3ay0.js.map → SelectCard-bp5hRyHK.js.map} +1 -1
  118. package/dist/SelectCard.js +1 -1
  119. package/dist/SelectField.js +1 -1
  120. package/dist/{SelectFieldLabel-CcX2GAym.js → SelectFieldLabel-DZqxaZsp.js} +2 -2
  121. package/dist/SelectFieldLabel-DZqxaZsp.js.map +1 -0
  122. package/dist/{SelectFieldSync-CLpTOgdr.js → SelectFieldSync-Wkx6DGpg.js} +7 -7
  123. package/dist/{SelectFieldSync-CLpTOgdr.js.map → SelectFieldSync-Wkx6DGpg.js.map} +1 -1
  124. package/dist/SelectMenu.js +1 -1
  125. package/dist/{SelectMenuSync-DqUIPJtu.js → SelectMenuSync-O55TODxn.js} +6 -6
  126. package/dist/{SelectMenuSync-DqUIPJtu.js.map → SelectMenuSync-O55TODxn.js.map} +1 -1
  127. package/dist/{SelectOptions-BkqBzRiG.js → SelectOptions-0A8BYx1q.js} +2 -2
  128. package/dist/SelectOptions-0A8BYx1q.js.map +1 -0
  129. package/dist/{SelectTrigger-DdIvzkNw.js → SelectTrigger-BfJ7DWYq.js} +3 -3
  130. package/dist/{SelectTrigger-DdIvzkNw.js.map → SelectTrigger-BfJ7DWYq.js.map} +1 -1
  131. package/dist/SelectTrigger.js +1 -1
  132. package/dist/{SelectTriggerBase-f2z0XQDf.js → SelectTriggerBase-DvsI-kSG.js} +3 -3
  133. package/dist/{SelectTriggerBase-f2z0XQDf.js.map → SelectTriggerBase-DvsI-kSG.js.map} +1 -1
  134. package/dist/StatusIcon-BqorkNJf.js.map +1 -1
  135. package/dist/{Switch-DWaFomvP.js → Switch-CrDmBj4D.js} +2 -2
  136. package/dist/{Switch-DWaFomvP.js.map → Switch-CrDmBj4D.js.map} +1 -1
  137. package/dist/Switch.js +1 -1
  138. package/dist/Table.js +1 -1
  139. package/dist/{Text-D2TIPmZ2.js → Text-CZccJAnm.js} +2 -2
  140. package/dist/{Text-D2TIPmZ2.js.map → Text-CZccJAnm.js.map} +1 -1
  141. package/dist/Text.js +1 -1
  142. package/dist/{TextField-wIc7ic0E.js → TextField-D0f9LwgQ.js} +3 -3
  143. package/dist/{TextField-wIc7ic0E.js.map → TextField-D0f9LwgQ.js.map} +1 -1
  144. package/dist/{TextField-DJaBZ4Je.js → TextField-DX5qyWPo.js} +2 -2
  145. package/dist/{TextField-DJaBZ4Je.js.map → TextField-DX5qyWPo.js.map} +1 -1
  146. package/dist/TextField.js +1 -1
  147. package/dist/{Textarea-D4c6VjNs.js → Textarea-CdTcekFd.js} +3 -3
  148. package/dist/{Textarea-D4c6VjNs.js.map → Textarea-CdTcekFd.js.map} +1 -1
  149. package/dist/Textarea.js +1 -1
  150. package/dist/ThemeProvider-DW-Mflv6.js.map +1 -1
  151. package/dist/ThemeProviderContext-l52GohYT.js.map +1 -1
  152. package/dist/{TimeField-DpnX_t31.js → TimeField-BxNglWQt.js} +4 -4
  153. package/dist/TimeField-BxNglWQt.js.map +1 -0
  154. package/dist/TimeField.js +1 -1
  155. package/dist/Toast.js +2 -2
  156. package/dist/{Toaster-Cl9BSxHs.js → Toaster-C-Z_FMbW.js} +3 -3
  157. package/dist/{Toaster-Cl9BSxHs.js.map → Toaster-C-Z_FMbW.js.map} +1 -1
  158. package/dist/{Toaster-11pmgwx5.js → Toaster-nyQgF9Ki.js} +2 -2
  159. package/dist/{Toaster-11pmgwx5.js.map → Toaster-nyQgF9Ki.js.map} +1 -1
  160. package/dist/{Toolbar-C9_Z1wAt.js → Toolbar-BUbMtBVz.js} +4 -4
  161. package/dist/{Toolbar-C9_Z1wAt.js.map → Toolbar-BUbMtBVz.js.map} +1 -1
  162. package/dist/{Toolbar-Dq9KOJoH.js → Toolbar-BxAFPvbn.js} +5 -5
  163. package/dist/{Toolbar-Dq9KOJoH.js.map → Toolbar-BxAFPvbn.js.map} +1 -1
  164. package/dist/Toolbar.js +2 -2
  165. package/dist/{ToolbarButtonToggle-BGnYIt6-.js → ToolbarButtonToggle-NSJ2XfXT.js} +2 -2
  166. package/dist/{ToolbarButtonToggle-BGnYIt6-.js.map → ToolbarButtonToggle-NSJ2XfXT.js.map} +1 -1
  167. package/dist/TrackingProvider-Co4lyoI9.js.map +1 -1
  168. package/dist/TrackingProviderContext-CrVA7KHv.js.map +1 -1
  169. package/dist/TreeSelectField.js +1 -1
  170. package/dist/{TreeSelectFieldSync-nD0qctC8.js → TreeSelectFieldSync-DpvwlM7B.js} +6 -6
  171. package/dist/{TreeSelectFieldSync-nD0qctC8.js.map → TreeSelectFieldSync-DpvwlM7B.js.map} +1 -1
  172. package/dist/TreeSelectMenu.js +1 -1
  173. package/dist/{TreeSelectMenuSync-B8pwy4dA.js → TreeSelectMenuSync-BDitYX_k.js} +5 -5
  174. package/dist/{TreeSelectMenuSync-B8pwy4dA.js.map → TreeSelectMenuSync-BDitYX_k.js.map} +1 -1
  175. package/dist/{TypeaheadTextField-2kW-oCMo.js → TypeaheadTextField-Cj09sEji.js} +3 -3
  176. package/dist/{TypeaheadTextField-2kW-oCMo.js.map → TypeaheadTextField-Cj09sEji.js.map} +1 -1
  177. package/dist/TypeaheadTextField.js +1 -1
  178. package/dist/{YearlessDateInputWithPicker-CuHWd_Vp.js → YearlessDateInputWithPicker-CoomgSEK.js} +8 -6
  179. package/dist/YearlessDateInputWithPicker-CoomgSEK.js.map +1 -0
  180. package/dist/anvParts-DFVq7-Cm.js +25 -0
  181. package/dist/anvParts-DFVq7-Cm.js.map +1 -0
  182. package/dist/arrayIdsEqual-DnevhwqN.js.map +1 -1
  183. package/dist/assets/icons/st/gnav_automations_active.svg +1 -0
  184. package/dist/assets/icons/st/gnav_automations_inactive.svg +1 -0
  185. package/dist/assets/icons/st/gnav_command_center_active.svg +1 -0
  186. package/dist/assets/icons/st/gnav_command_center_inactive.svg +1 -0
  187. package/dist/assets/icons/st.ts +4 -0
  188. package/dist/beta.js +17 -17
  189. package/dist/{bulkActionTypes-cnslVUIT.js → bulkActionTypes-DAo3_ECS.js} +2 -2
  190. package/dist/bulkActionTypes-DAo3_ECS.js.map +1 -0
  191. package/dist/childrenToString-Bz9MqbHb.js.map +1 -1
  192. package/dist/confirmationTypes-DeRtO_Cw.js.map +1 -1
  193. package/dist/{downshift.esm-xtSnQp44.js → downshift.esm-U4VMqrF-.js} +3 -1
  194. package/dist/downshift.esm-U4VMqrF-.js.map +1 -0
  195. package/dist/{filter-state-B7lCzjsR.js → filter-state-CZcczj37.js} +21 -21
  196. package/dist/{filter-state-B7lCzjsR.js.map → filter-state-CZcczj37.js.map} +1 -1
  197. package/dist/floating-ui.react-dom-BIKT960u.js.map +1 -1
  198. package/dist/getActiveElement-BcSyVE7S.js.map +1 -1
  199. package/dist/getKeyboardFocusableElements-B_U9rt6y.js.map +1 -1
  200. package/dist/{index-BHztJ8H6.js → index-BFxzUzoz.js} +2 -2
  201. package/dist/{index-BHztJ8H6.js.map → index-BFxzUzoz.js.map} +1 -1
  202. package/dist/index.js +44 -45
  203. package/dist/index.js.map +1 -1
  204. package/dist/portalScopeClassNames-DA28LrXe.js.map +1 -1
  205. package/dist/src/components/DateFieldYearless/internal/YearlessDateSelectionPopover.d.ts +2 -2
  206. package/dist/src/hooks/useAccessibleColor/useAccessibleColor.d.ts +3 -28
  207. package/dist/src/hooks/useBreakpoint/useBreakpoint.d.ts +15 -60
  208. package/dist/src/hooks/useMergeRefs/useMergeRefs.d.ts +3 -20
  209. package/dist/src/hooks/usePrefersColorScheme/usePrefersColorScheme.d.ts +2 -11
  210. package/dist/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.d.ts +2 -10
  211. package/dist/src/hooks/useSize/index.d.ts +2 -13
  212. package/dist/src/hooks/useSwipe/useSwipe.d.ts +3 -20
  213. package/dist/src/hooks/useTrackingId/index.d.ts +6 -17
  214. package/dist/src/internal/components/AddNewItemButton.d.ts +4 -30
  215. package/dist/src/internal/components/Helper/Helper.d.ts +12 -8
  216. package/dist/src/internal/components/InView.d.ts +4 -24
  217. package/dist/src/internal/components/InlineMarkdown/InlineMarkdown.d.ts +2 -19
  218. package/dist/src/internal/components/Label/Label.d.ts +12 -51
  219. package/dist/src/internal/components/ManualTestLayout/ManualTestLayout.d.ts +3 -2
  220. package/dist/src/internal/components/MenuFooter/MenuFooter.d.ts +11 -17
  221. package/dist/src/internal/components/MultiSelectOptions.d.ts +15 -0
  222. package/dist/src/internal/components/OptionCheckbox.d.ts +2 -0
  223. package/dist/src/internal/components/OptionContentArea.d.ts +4 -0
  224. package/dist/src/internal/components/OptionRow.d.ts +4 -0
  225. package/dist/src/internal/components/OptionsDialog/OptionsDialog.d.ts +13 -1
  226. package/dist/src/internal/components/OptionsPanel.d.ts +16 -0
  227. package/dist/src/internal/components/OptionsPopover/OptionsPopover.d.ts +9 -14
  228. package/dist/src/internal/components/Popover/Popover.d.ts +45 -180
  229. package/dist/src/internal/components/Popover/PopoverButton.d.ts +0 -20
  230. package/dist/src/internal/components/Popover/PopoverClose.d.ts +0 -20
  231. package/dist/src/internal/components/Popover/PopoverContent.d.ts +4 -25
  232. package/dist/src/internal/components/Popover/PopoverTrigger.d.ts +1 -23
  233. package/dist/src/internal/components/Popover/internal/PopoverContext.d.ts +0 -21
  234. package/dist/src/internal/components/Popover/internal/usePopoverContext.d.ts +1 -3
  235. package/dist/src/internal/components/SelectOption.d.ts +8 -0
  236. package/dist/src/internal/components/SelectOptions.d.ts +15 -0
  237. package/dist/src/internal/components/Shadow/Shadow.d.ts +1 -0
  238. package/dist/src/internal/components/StatusIcon/StatusIcon.d.ts +4 -33
  239. package/dist/src/internal/components/Surface/Surface.d.ts +40 -73
  240. package/dist/src/internal/components/Surface/surfaceGeometry.d.ts +12 -0
  241. package/dist/src/internal/components/VirtualizedOptionsPanel.d.ts +1 -0
  242. package/dist/src/internal/components/YearSelector/YearSelector.d.ts +14 -48
  243. package/dist/src/internal/components/YearSelector/internal/YearItem.d.ts +1 -0
  244. package/dist/src/internal/components/YearSelector/internal/useYearSelectorKeys.d.ts +4 -0
  245. package/dist/src/internal/constants/anvParts.d.ts +3 -55
  246. package/dist/src/internal/flubber/a2c.d.ts +0 -4
  247. package/dist/src/internal/flubber/arc.d.ts +0 -4
  248. package/dist/src/internal/flubber/bezier.d.ts +0 -4
  249. package/dist/src/internal/flubber/errors.d.ts +0 -4
  250. package/dist/src/internal/flubber/index.d.ts +0 -4
  251. package/dist/src/internal/flubber/interpolate.d.ts +3 -0
  252. package/dist/src/internal/flubber/linear.d.ts +0 -4
  253. package/dist/src/internal/flubber/parse.d.ts +0 -4
  254. package/dist/src/internal/flubber/path-properties.d.ts +0 -4
  255. package/dist/src/internal/functions/areOptionsValueEqual.d.ts +2 -5
  256. package/dist/src/internal/functions/buildSelectItems.d.ts +2 -4
  257. package/dist/src/internal/functions/childrenToString.d.ts +3 -21
  258. package/dist/src/internal/functions/getActiveElement.d.ts +4 -0
  259. package/dist/src/internal/functions/getInitial.d.ts +3 -13
  260. package/dist/src/internal/functions/getKeyboardFocusableElements.d.ts +6 -30
  261. package/dist/src/internal/functions/inlineMarkdown.d.ts +3 -16
  262. package/dist/src/internal/functions/isThenable.d.ts +1 -1
  263. package/dist/src/internal/functions/kebabize.d.ts +3 -13
  264. package/dist/src/internal/functions/mapOrder.d.ts +4 -0
  265. package/dist/src/internal/functions/popoverTargetDomProps.d.ts +1 -1
  266. package/dist/src/internal/functions/portalScopeClassNames.d.ts +6 -13
  267. package/dist/src/internal/functions/safePopover.d.ts +2 -0
  268. package/dist/src/internal/functions/sizeToToken.d.ts +1 -0
  269. package/dist/src/internal/functions/stripInlineMarkdown.d.ts +3 -5
  270. package/dist/src/internal/functions/syncFilterUtils.d.ts +4 -2
  271. package/dist/src/internal/functions/warnOnce.d.ts +1 -2
  272. package/dist/src/internal/hooks/useBulkActionRunner.d.ts +4 -27
  273. package/dist/src/internal/hooks/useCommitSelectionIfChanged.d.ts +7 -14
  274. package/dist/src/internal/hooks/useConfirmationDraft.d.ts +4 -4
  275. package/dist/src/internal/hooks/useContainerQuery/useContainerQuery.d.ts +2 -33
  276. package/dist/src/internal/hooks/useDebouncedCallback/useDebouncedCallback.d.ts +3 -25
  277. package/dist/src/internal/hooks/useDialogScrollLock/useDialogScrollLock.d.ts +6 -31
  278. package/dist/src/internal/hooks/useDialogTransitionStates/useDialogTransitionStates.d.ts +2 -27
  279. package/dist/src/internal/hooks/useDownshiftEnvironment/useDownshiftEnvironment.d.ts +8 -24
  280. package/dist/src/internal/hooks/useFocusWithin/useFocusWithin.d.ts +3 -14
  281. package/dist/src/internal/hooks/useGroupedOptions.d.ts +4 -22
  282. package/dist/src/internal/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +4 -47
  283. package/dist/src/internal/hooks/useInvalidateOnOptionsChange.d.ts +2 -7
  284. package/dist/src/internal/hooks/useIsScrollable/useIsScrollable.d.ts +1 -5
  285. package/dist/src/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.d.ts +1 -38
  286. package/dist/src/internal/hooks/useLayoutPropsUtil/useLayoutPropsUtil.d.ts +2 -38
  287. package/dist/src/internal/hooks/useNumberField/internal/createNumberMaskOptions.d.ts +2 -5
  288. package/dist/src/internal/hooks/useNumberField/internal/createTrailingZerosHandlers.d.ts +1 -2
  289. package/dist/src/internal/hooks/useNumberField/internal/numberMaskUtils.d.ts +0 -6
  290. package/dist/src/internal/hooks/useNumberField/internal/useNumberFieldInputMode.d.ts +2 -17
  291. package/dist/src/internal/hooks/useNumberField/internal/useNumberFieldKeys.d.ts +4 -30
  292. package/dist/src/internal/hooks/useNumberField/useNumberField.d.ts +19 -65
  293. package/dist/src/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +5 -33
  294. package/dist/src/internal/hooks/useOpenCloseTransitionStates/useOpenCloseTransitionStates.d.ts +4 -28
  295. package/dist/src/internal/hooks/useOptionallyControlledState/useOptionallyControlledState.d.ts +2 -46
  296. package/dist/src/internal/hooks/useOptionsSections.d.ts +4 -9
  297. package/dist/src/internal/hooks/usePinnedOptions.d.ts +4 -24
  298. package/dist/src/internal/hooks/usePlatform/usePlatform.d.ts +3 -50
  299. package/dist/src/internal/hooks/usePopoverCloseDelayWorkaround/usePopoverCloseDelayWorkaround.d.ts +4 -0
  300. package/dist/src/internal/hooks/usePopoverTransitionStates/usePopoverTransitionStates.d.ts +1 -21
  301. package/dist/src/internal/hooks/usePrevious/usePrevious.d.ts +1 -0
  302. package/dist/src/internal/hooks/useProcessedOptions.d.ts +2 -3
  303. package/dist/src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.d.ts +18 -61
  304. package/dist/src/internal/hooks/useSelectOrchestration.d.ts +4 -3
  305. package/dist/src/internal/hooks/useToggleSelection.d.ts +3 -3
  306. package/dist/src/internal/hooks/useTypeAhead/useTypeAhead.d.ts +3 -11
  307. package/dist/src/internal/testing/anvPartsContract.d.ts +9 -9
  308. package/dist/src/internal/testing/prefersColorScheme.d.ts +7 -0
  309. package/dist/src/internal/testing/reactHostProps.d.ts +2 -2
  310. package/dist/src/internal/types/addNewItemTypes.d.ts +14 -16
  311. package/dist/src/internal/types/argTypes.d.ts +2 -0
  312. package/dist/src/internal/types/bulkActionTypes.d.ts +12 -41
  313. package/dist/src/internal/types/confirmationTypes.d.ts +6 -7
  314. package/dist/src/internal/types/optionContent.d.ts +6 -9
  315. package/dist/src/internal/types/props.d.ts +6 -1
  316. package/dist/src/internal/types/selectFieldInternalTypes.d.ts +10 -12
  317. package/dist/src/internal/utils/arrayIdsEqual.d.ts +1 -5
  318. package/dist/src/internal/utils/generateChromaticStickersheetProps.d.ts +4 -8
  319. package/dist/src/internal/utils/inlineMarkdownRegex.d.ts +0 -4
  320. package/dist/src/internal/utils/layerManager.d.ts +5 -28
  321. package/dist/src/internal/utils/uniquifySvgDomIds.d.ts +0 -2
  322. package/dist/src/providers/AnvilProvider/AnvilProvider.d.ts +4 -0
  323. package/dist/src/providers/AnvilProvider/AnvilProviderContext.d.ts +16 -6
  324. package/dist/src/providers/LocalizationProvider/LocalizationContext.d.ts +7 -0
  325. package/dist/src/providers/LocalizationProvider/LocalizationProvider.d.ts +6 -0
  326. package/dist/src/providers/LocalizationProvider/LocalizationStoryWrapper.d.ts +1 -0
  327. package/dist/src/providers/LocalizationProvider/useTranslations.d.ts +6 -0
  328. package/dist/src/providers/PortalProvider/PortalProvider.d.ts +1 -0
  329. package/dist/src/providers/PortalProvider/PortalProviderContext.d.ts +3 -0
  330. package/dist/src/providers/ThemeProvider/ThemeProvider.d.ts +16 -0
  331. package/dist/src/providers/ThemeProvider/index.d.ts +1 -1
  332. package/dist/src/providers/ThemeProvider/internal/ThemeProviderContext.d.ts +2 -0
  333. package/dist/src/providers/ThemeProvider/themeToCssVars.d.ts +3 -4
  334. package/dist/src/providers/ThemeProvider/useTheme.d.ts +5 -0
  335. package/dist/src/providers/TrackingProvider/TrackingProvider.d.ts +1 -0
  336. package/dist/src/providers/TrackingProvider/TrackingProviderContext.d.ts +7 -0
  337. package/dist/src/providers/TrackingProvider/useTrackingContext.d.ts +5 -0
  338. package/dist/src/themes/carto.d.ts +3 -43
  339. package/dist/src/types/DataTrackingId.d.ts +1 -0
  340. package/dist/src/types/DistributiveOmit.d.ts +1 -14
  341. package/dist/src/types/MaxLengthCounterProps.d.ts +4 -0
  342. package/dist/src/types/PassThroughProps.d.ts +3 -0
  343. package/dist/src/types/ai-marks.d.ts +14 -45
  344. package/dist/src/types/ianaZones.d.ts +2 -0
  345. package/dist/src/types/locales.d.ts +1 -0
  346. package/dist/src/types/props.d.ts +14 -16
  347. package/dist/{stripInlineMarkdown-82hVO9EP.js → stripInlineMarkdown-CosQSmBr.js} +2 -2
  348. package/dist/stripInlineMarkdown-CosQSmBr.js.map +1 -0
  349. package/dist/{syncFilterUtils-CMH8ApTo.js → syncFilterUtils-_uwyt6FD.js} +20 -19
  350. package/dist/syncFilterUtils-_uwyt6FD.js.map +1 -0
  351. package/dist/themes.js.map +1 -1
  352. package/dist/token/core/component-variables.scss +156 -0
  353. package/dist/token/core/component.d.ts +78 -0
  354. package/dist/token/core/component.js +1018 -0
  355. package/dist/token/core/component.scss +82 -0
  356. package/dist/token.js +1096 -0
  357. package/dist/token.js.map +1 -1
  358. package/dist/{treeSync-8byHuYib.js → treeSync-Bp80Xduj.js} +4 -4
  359. package/dist/{treeSync-8byHuYib.js.map → treeSync-Bp80Xduj.js.map} +1 -1
  360. package/dist/useAccessibleColor-BYKjkGRg.js.map +1 -1
  361. package/dist/useBreakpoint-BBNRlMGZ.js.map +1 -1
  362. package/dist/useDebouncedCallback-DLkapjcP.js.map +1 -1
  363. package/dist/useDialogScrollLock-BW-aVboo.js.map +1 -1
  364. package/dist/{useDrilldown-CicFEJpD.js → useDrilldown-D5XGfAUT.js} +3 -3
  365. package/dist/{useDrilldown-CicFEJpD.js.map → useDrilldown-D5XGfAUT.js.map} +1 -1
  366. package/dist/useFocusWithin-hi77jsrB.js.map +1 -1
  367. package/dist/{useInfiniteCombobox-BS7W8JkW.js → useInfiniteCombobox-ORhH44Rp.js} +7 -7
  368. package/dist/{useInfiniteCombobox-BS7W8JkW.js.map → useInfiniteCombobox-ORhH44Rp.js.map} +1 -1
  369. package/dist/{useInitialFocus-BIvXK1Rp.js → useInitialFocus-CGybEc6x.js} +2 -6
  370. package/dist/useInitialFocus-CGybEc6x.js.map +1 -0
  371. package/dist/useIntersectionObserver-BEmMDO3P.js.map +1 -1
  372. package/dist/{useInvalidateOnOptionsChange-BKKS9HXb.js → useInvalidateOnOptionsChange-ieSgbkwT.js} +5 -5
  373. package/dist/useInvalidateOnOptionsChange-ieSgbkwT.js.map +1 -0
  374. package/dist/useLayoutPropsUtil-DjqeAJZ9.js.map +1 -1
  375. package/dist/useMergeRefs-Dfmtq9cI.js.map +1 -1
  376. package/dist/useNumberField-CXFYUZ_n.js.map +1 -1
  377. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -1
  378. package/dist/useOptionallyControlledState-DbDuos5L.js.map +1 -1
  379. package/dist/{usePopoverTransitionStates-B1opfxxn.js → usePopoverTransitionStates-CDXCdyKa.js} +2 -1
  380. package/dist/usePopoverTransitionStates-CDXCdyKa.js.map +1 -0
  381. package/dist/usePrefersColorScheme-CwOF0TjZ.js.map +1 -1
  382. package/dist/usePrefersReducedMotion-DR9B_D6w.js.map +1 -1
  383. package/dist/usePrevious-Bvq-5auG.js.map +1 -1
  384. package/dist/useSize.js.map +1 -1
  385. package/dist/useSwipe-Cp-CJxLU.js.map +1 -1
  386. package/dist/useTheme-B4i6a3bM.js.map +1 -1
  387. package/dist/useTrackingContext-C522P4sv.js.map +1 -1
  388. package/dist/useTrackingId.js.map +1 -1
  389. package/dist/warnOnce-Y9PRHcU4.js.map +1 -1
  390. package/package.json +3 -3
  391. package/dist/AnvilProvider-DcYAaAvs.js.map +0 -1
  392. package/dist/Avatar-D31JDNrs.js.map +0 -1
  393. package/dist/Calendar-DnK6UwPE.js.map +0 -1
  394. package/dist/Chip-AILbiVZ6.js.map +0 -1
  395. package/dist/DataTable-BE1YvSto.js.map +0 -1
  396. package/dist/FieldLabel-CYCk2rz-.js.map +0 -1
  397. package/dist/FilterBar-XMZ-Q-aW.js.map +0 -1
  398. package/dist/ListView-Bkv1ZCSu.js.map +0 -1
  399. package/dist/Listbox-BWy_uBqm.js.map +0 -1
  400. package/dist/MenuFooter--lBF8OjJ.js.map +0 -1
  401. package/dist/MultiSelectFieldSync-C57Hms2z.js.map +0 -1
  402. package/dist/SelectFieldLabel-CcX2GAym.js.map +0 -1
  403. package/dist/SelectOptions-BkqBzRiG.js.map +0 -1
  404. package/dist/TimeField-DpnX_t31.js.map +0 -1
  405. package/dist/YearlessDateInputWithPicker-CuHWd_Vp.js.map +0 -1
  406. package/dist/anvParts-BGg5dgfl.js +0 -43
  407. package/dist/anvParts-BGg5dgfl.js.map +0 -1
  408. package/dist/bulkActionTypes-cnslVUIT.js.map +0 -1
  409. package/dist/downshift.esm-xtSnQp44.js.map +0 -1
  410. package/dist/stripInlineMarkdown-82hVO9EP.js.map +0 -1
  411. package/dist/syncFilterUtils-CMH8ApTo.js.map +0 -1
  412. package/dist/useInitialFocus-BIvXK1Rp.js.map +0 -1
  413. package/dist/useInvalidateOnOptionsChange-BKKS9HXb.js.map +0 -1
  414. package/dist/usePopoverTransitionStates-B1opfxxn.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultiSelectFieldSync-C57Hms2z.js","sources":["../src/components/MultiSelectField/parts.ts","../src/components/MultiSelectField/internal/MultiSelectFieldInput.tsx","../src/components/MultiSelectField/internal/useComboMultiple.tsx","../src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.tsx","../src/components/MultiSelectField/internal/MultiSelectFieldTrigger.tsx","../src/components/MultiSelectField/internal/useSelectModeMultiple.ts","../src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.tsx","../src/internal/hooks/useCommitSelectionIfChanged.ts","../src/components/MultiSelectField/MultiSelectField.tsx","../src/components/MultiSelectField/MultiSelectFieldSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for MultiSelectField's interactive sub-elements.\n *\n * Scope a query by the consumer's `data-cy` on the field root\n * (`[data-cy=\"x\"] [data-anv-part=\"input\"]`). Portaled parts (`menu`, `option`,\n * `dialog`, `popover`) come from the shared option internals and render in the\n * top layer — target them by part attribute or the field's `#{id}-popover` /\n * `#{id}-dialog`.\n *\n * Every role MultiSelectField needs is a shared one, so all values come from\n * `COMMON_PART`.\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n chip: COMMON_PART.chip,\n overflowChip: COMMON_PART.overflowChip,\n clearButton: COMMON_PART.clearButton,\n toggleButton: COMMON_PART.toggleButton,\n} as const;\n","import styles from \"./MultiSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport type { 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 type ReactElement,\n type RefObject,\n useRef,\n type KeyboardEvent,\n type MouseEvent,\n} from \"react\";\nimport type {\n MultiSelectFieldChipProps,\n MultiSelectFieldOption,\n} from \"../types\";\nimport { useChipLayout } from \"./useChipLayout\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"../parts\";\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} [isHighlighted] - Applies a subdued primary background to draw attention to the field\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<TID extends string | number> = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disableToggleButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n isHighlighted?: 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<TID>[];\n onRemoveOption?: (option: MultiSelectFieldOption<TID>) => void;\n singleRow?: boolean;\n maxChips?: number;\n getChipProps?: (\n option: MultiSelectFieldOption<TID>,\n ) => 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 = <TID extends string | number>({\n placeholder,\n size,\n disableClearButton,\n disableToggleButton,\n disabled,\n readOnly,\n isHighlighted,\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<TID>) => {\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 [styles[\"is-disabled\"]]: disabled,\n [styles[\"highlight\"]]: isHighlighted,\n });\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Handle backspace to remove the last removable chip when input is empty.\n // Disabled selected options are locked and are skipped.\n if (\n e.key === \"Backspace\" &&\n !inputProps?.value &&\n selectedOptions.length > 0 &&\n onRemoveOption &&\n !disabled &&\n !readOnly\n ) {\n const lastRemovable = [...selectedOptions]\n .reverse()\n .find((option) => !option.disabled);\n if (lastRemovable) {\n onRemoveOption(lastRemovable);\n }\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 if (disabled) {\n return;\n }\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 aria-disabled={disabled || undefined}\n onClick={handleWrapperClick}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div\n className={styles[\"rows-wrapper\"]}\n ref={rowsRef}\n data-single-row={singleRow || undefined}\n >\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 {...{ [ANV_PART_ATTR]: PARTS.chip }}\n label={option.label}\n onClose={\n disabled || readOnly || option.disabled\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 {...{ [ANV_PART_ATTR]: PARTS.overflowChip }}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n id={id}\n type=\"text\"\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n {...inputProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\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 {...{ [ANV_PART_ATTR]: PARTS.clearButton }}\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 {...toggleButtonProps}\n disabled={disabled}\n {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\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 type UseComboboxProps,\n type UseComboboxState,\n type UseComboboxStateChangeOptions,\n} from \"downshift\";\nimport type {\n MultiSelectFieldGroupByValue,\n MultiSelectFieldOption,\n MultiSelectFieldPinnedOptions,\n} from \"../types\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport type { CheckState } from \"../../../types\";\nimport { useEffect, 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 TID extends string | number = string | number,\n> = {\n /** An array of currently loaded options */\n options: MultiSelectFieldOption<TID>[];\n /** Options to pin to the top of the list */\n pinned?: MultiSelectFieldPinnedOptions<TID>;\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 checkState: CheckState;\n };\n /** Function that receives the search value and returns config for \"Select Filtered\". */\n selectFiltered?: (searchValue: string) => {\n label?: string;\n checkState: CheckState;\n };\n /** True while a `compute`-driven bulk action is in flight. Disables option rows. */\n bulkPending: boolean;\n /** Called when the user activates the select-all or select-filtered row. */\n onBulkActivate: (\n kind: \"selectAll\" | \"selectFiltered\",\n searchValue: string,\n ) => void;\n /** The currently selected options (controlled from outside) */\n selectedOptions: MultiSelectFieldOption<TID>[];\n onSelectedOptionsChange: (options: MultiSelectFieldOption<TID>[]) => 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 = <TID extends string | number>({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectAll,\n selectFiltered,\n bulkPending,\n onBulkActivate,\n selectedOptions,\n onSelectedOptionsChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disabled,\n loading = false,\n virtualize = false,\n onScrollToHighlight,\n}: UseComboMultipleOptions<TID>) => {\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<TID>({\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<TID>({\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<SelectItem<TID>>({\n isItemDisabled: (item, _index) => {\n if (!item) {\n return false; // Downshift passes -1 index with an undefined item. Ignore it.\n }\n // While a bulk-action promise is pending, freeze all row interactions.\n if (bulkPending) return true;\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 itemToKey: (item) => item?.id,\n onSelectedItemChange: ({ type, selectedItem: si }) => {\n // Ignore Downshift syncs (e.g. ControlledPropUpdatedSelectedItem) so a\n // parent that writes `value` in onSelectedOptionsChange cannot re-enter.\n if (\n type !== useCombobox.stateChangeTypes.ItemClick &&\n type !== useCombobox.stateChangeTypes.InputKeyDownEnter\n ) {\n return;\n }\n if (!si) {\n return;\n }\n if (si.type === \"select-all\") {\n onBulkActivate(\"selectAll\", inputValue);\n } else if (si.type === \"select-filtered\") {\n onBulkActivate(\"selectFiltered\", inputValue);\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 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 useEffect(() => {\n if (disabled) {\n closeMenu();\n }\n }, [disabled, closeMenu]);\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<TID extends string | number>(\n state: UseComboboxState<SelectItem<TID>>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectItem<TID>>,\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 type { 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 { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../../internal/types/addNewItemTypes\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport { popoverTargetDomProps } from \"../../../internal/functions/popoverTargetDomProps\";\nimport type { MultiSelectFieldComboboxInternalProps } from \"./types\";\n\n/**\n * Combobox mode: searchable multi-select using useCombobox.\n */\nexport const MultiSelectFieldComboboxMode = <TID extends string | number>({\n labelAiMark,\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\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 bulkPending,\n onBulkActivate,\n singleRow,\n maxChips,\n getChipProps,\n onSearchChange,\n addItemLabel,\n onAddNewItem,\n handleRemoveOption,\n handleClear,\n dataAttributes,\n}: MultiSelectFieldComboboxInternalProps<TID>) => {\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<TID>({\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 bulkPending,\n onBulkActivate,\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 const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <div\n {...dataAttributes}\n data-anv=\"multi-select-field\"\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 moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={getToggleButtonProps({ disabled: !!disabled })}\n onClear={handleClear}\n id={`${id}-input`}\n inputProps={getInputProps({\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || 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 isHighlighted={isHighlighted}\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 footer={addNewItemButton ?? undefined}\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 {...dataAttributes}\n data-anv=\"multi-select-field\"\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 moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n inputProps={getInputProps({\n ...popoverTargetDomProps(`${id}-popover`),\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n toggleButtonProps={getToggleButtonProps({ disabled: !!disabled })}\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 onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\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 type { 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 { type ReactElement, type RefObject, useRef } from \"react\";\nimport { useMergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\nimport type {\n MultiSelectFieldChipProps,\n MultiSelectFieldOption,\n} from \"../types\";\nimport { useChipLayout } from \"./useChipLayout\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { popoverTargetDomProps } from \"../../../internal/functions/popoverTargetDomProps\";\nimport { PARTS } from \"../parts\";\n\nexport type MultiSelectFieldTriggerProps<TID extends string | number> = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n isHighlighted?: 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<TID>[];\n onRemoveOption?: (option: MultiSelectFieldOption<TID>) => void;\n singleRow?: boolean;\n maxChips?: number;\n getChipProps?: (\n option: MultiSelectFieldOption<TID>,\n ) => 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 = <TID extends string | number>({\n placeholder,\n size,\n disableClearButton,\n disabled,\n readOnly,\n isHighlighted,\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<TID>) => {\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 [styles[\"is-disabled\"]]: disabled,\n [styles[\"highlight\"]]: isHighlighted,\n });\n\n return (\n <div\n ref={mergedRef}\n {...restToggleButtonProps}\n {...popoverTargetDomProps(popoverTarget)}\n id={id}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : restToggleButtonProps.onClick}\n onKeyDown={disabled ? undefined : restToggleButtonProps.onKeyDown}\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n className={cx(inputWrapperClassNames, restToggleButtonProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div\n className={styles[\"rows-wrapper\"]}\n ref={rowsRef}\n data-single-row={singleRow || undefined}\n >\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 {...{ [ANV_PART_ATTR]: PARTS.chip }}\n label={option.label}\n onClose={\n disabled || readOnly || option.disabled\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 {...{ [ANV_PART_ATTR]: PARTS.overflowChip }}\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 {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 {...{ [ANV_PART_ATTR]: PARTS.clearButton }}\n onClick={(e) => {\n e.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n )}\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 {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\n className={styles[\"toggle-button\"]}\n />\n </div>\n </div>\n </div>\n );\n};\n\nMultiSelectFieldTrigger.displayName = \"MultiSelectFieldTrigger\";\n","import {\n useSelect,\n type UseSelectState,\n type UseSelectStateChangeOptions,\n} from \"downshift\";\nimport type {\n MultiSelectFieldGroupByValue,\n MultiSelectFieldOption,\n MultiSelectFieldPinnedOptions,\n} from \"../types\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport type { CheckState } from \"../../../types\";\nimport { useEffect, 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<TID extends string | number> = {\n options: MultiSelectFieldOption<TID>[];\n pinned?: MultiSelectFieldPinnedOptions<TID>;\n groupToString?: (groupValue: MultiSelectFieldGroupByValue) => string;\n groupSorter?: (\n a: MultiSelectFieldGroupByValue,\n b: MultiSelectFieldGroupByValue,\n ) => number;\n selectAll?: {\n label: string;\n checkState: CheckState;\n };\n /** True while a `compute`-driven bulk action is in flight. Disables option rows. */\n bulkPending: boolean;\n /** Called when the user activates the select-all row. */\n onBulkActivate: (\n kind: \"selectAll\" | \"selectFiltered\",\n searchValue: string,\n ) => void;\n selectedOptions: MultiSelectFieldOption<TID>[];\n onSelectedOptionsChange: (options: MultiSelectFieldOption<TID>[]) => 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 = <TID extends string | number>({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectAll,\n bulkPending,\n onBulkActivate,\n selectedOptions,\n onSelectedOptionsChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseSelectModeMultipleOptions<TID>) => {\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<SelectItem<TID>>({\n isItemDisabled: (item) => {\n if (!item) return false;\n // While a bulk-action promise is pending, freeze all row interactions.\n if (bulkPending) return true;\n return (disabled || item.disabled) ?? false;\n },\n environment,\n selectedItem: null,\n itemToKey: (item) => item?.id,\n onSelectedItemChange: ({ type, selectedItem: si }) => {\n // Ignore Downshift syncs (e.g. ControlledPropUpdatedSelectedItem) so a\n // parent that writes `value` in onSelectedOptionsChange cannot re-enter.\n if (\n type !== useSelect.stateChangeTypes.ItemClick &&\n type !== useSelect.stateChangeTypes.ToggleButtonKeyDownEnter &&\n type !== useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton\n ) {\n return;\n }\n if (!si) {\n return;\n }\n if (si.type === \"select-all\") {\n onBulkActivate(\"selectAll\", \"\");\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 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 useEffect(() => {\n if (disabled) {\n closeMenu();\n }\n }, [disabled, closeMenu]);\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<TID extends string | number>(\n state: UseSelectState<SelectItem<TID>>,\n actionAndChanges: UseSelectStateChangeOptions<SelectItem<TID>>,\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 type { 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 { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../../internal/types/addNewItemTypes\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport type { MultiSelectFieldBaseInternalProps } from \"./types\";\n\n/**\n * Select mode: non-searchable multi-select using useSelect.\n * Active when disableSearch is true.\n */\nexport const MultiSelectFieldSelectMode = <TID extends string | number>({\n labelAiMark,\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\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 bulkPending,\n onBulkActivate,\n singleRow,\n maxChips,\n getChipProps,\n addItemLabel,\n onAddNewItem,\n handleRemoveOption,\n handleClear,\n dataAttributes,\n}: MultiSelectFieldBaseInternalProps<TID>) => {\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<TID>({\n displayAs,\n onSelectedOptionsChange,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n virtualize,\n groupToString,\n groupSorter,\n selectedOptions,\n selectAll,\n bulkPending,\n onBulkActivate,\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 addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n \"\",\n ) ? (\n <AddNewItemButton\n searchText=\"\"\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n const toggleButtonProps = getToggleButtonProps({\n disabled: !!disabled,\n \"aria-required\": required ? true : undefined,\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n } as Record<string, unknown>);\n\n if (displayAs === \"dialog\") {\n return (\n <div\n {...dataAttributes}\n data-anv=\"multi-select-field\"\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 moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\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 footer={addNewItemButton ?? undefined}\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 {...dataAttributes}\n data-anv=\"multi-select-field\"\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 moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\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 onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\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 { useCallback, useRef } from \"react\";\nimport { arrayIdsEqual } from \"../utils/arrayIdsEqual\";\n\n/**\n * Returns a stable commit function that invokes `onChange` only when `next`\n * is a different set of `id`s than the latest `selected` value.\n *\n * Downshift can re-invoke a click handler captured on an earlier render.\n * That stale handler still sees the pre-click selection, so it reports an\n * add of ids the parent already holds. Consumers that write a new array from\n * that callback (MobX `observer`, `setState(next.map(...))`) re-render, and\n * the stale handler fires again.\n *\n * Comparing against the latest selection — not the closed-over one — breaks\n * that loop without treating the stale add as a toggle/deselect.\n *\n * @param selected The current selected options\n * @param onChange Called when the id set actually changes\n * @returns A stable function that commits `next` only when ids differ\n */\nexport function useCommitSelectionIfChanged<T extends { id: string | number }>(\n selected: T[],\n onChange: (next: T[]) => void,\n): (next: T[]) => void {\n const selectedRef = useRef(selected);\n selectedRef.current = selected;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n return useCallback((next: T[]) => {\n if (arrayIdsEqual(next, selectedRef.current)) {\n return;\n }\n onChangeRef.current(next);\n }, []);\n}\n","import type { MultiSelectFieldHandle, MultiSelectFieldProps } from \"./types\";\nimport {\n type ForwardedRef,\n forwardRef,\n type ReactNode,\n useCallback,\n useId,\n useRef,\n} from \"react\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../components/FieldMessage\";\nimport { warnOnce } from \"../../internal/functions\";\nimport type { CheckState, DataAttributes } from \"../../types\";\nimport { MultiSelectFieldComboboxMode } from \"./internal/MultiSelectFieldComboboxMode\";\nimport { MultiSelectFieldSelectMode } from \"./internal/MultiSelectFieldSelectMode\";\nimport type {\n MultiSelectFieldBaseInternalProps,\n MultiSelectFieldComboboxInternalProps,\n} from \"./internal/types\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\nimport { useBulkActionRunner } from \"../../internal/hooks/useBulkActionRunner\";\nimport { useCommitSelectionIfChanged } from \"../../internal/hooks/useCommitSelectionIfChanged\";\nimport {\n resolveBulkActionCheckState,\n resolveBulkActionLabel,\n} from \"../../internal/types/bulkActionTypes\";\n\nconst MultiSelectFieldInner = <TID extends string | number>(\n propsWithLayout: MultiSelectFieldProps<TID>,\n ref: ForwardedRef<MultiSelectFieldHandle>,\n) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(componentProps).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\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 moreInfo,\n description,\n required,\n labelAiMark,\n disabled,\n readOnly,\n isHighlighted,\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 addItemLabel,\n onAddNewItem,\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 const moreInfoUid = 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<TID>({\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 // Downshift can re-invoke a click handler from an earlier render. Skip\n // commits whose ids already match the latest value so a parent that writes\n // a new array from onSelectedOptionsChange cannot loop.\n const commitSelection = useCommitSelectionIfChanged(\n selectedOptions,\n onSelectedOptionsChange,\n );\n\n const handleRemoveOption = useCallback(\n (option: { id: string | number }) => {\n const target = selectedOptions.find((opt) => opt.id === option.id);\n // Disabled selected options are locked — chip close / keyboard removal\n // must not drop them from the value.\n if (target?.disabled) {\n return;\n }\n commitSelection(selectedOptions.filter((opt) => opt.id !== option.id));\n },\n [selectedOptions, commitSelection],\n );\n\n const handleClear = useCallback(() => {\n // Preserve disabled (locked) selections; only clear removable chips.\n const lockedOptions = selectedOptions.filter((opt) => opt.disabled);\n commitSelection(lockedOptions);\n }, [selectedOptions, commitSelection]);\n\n const removableSelectedCount = selectedOptions.filter(\n (opt) => !opt.disabled,\n ).length;\n\n const disableClearButton =\n removableSelectedCount === 0 || isDisabledOrReadOnly;\n\n const { pending: bulkPending, runBulk } = useBulkActionRunner({\n setDraft: commitSelection,\n });\n\n const handleBulkActivate = useCallback(\n (kind: \"selectAll\" | \"selectFiltered\", searchValue: string) => {\n const config =\n kind === \"selectAll\"\n ? selectAllProp\n : selectFilteredProp?.(searchValue);\n if (!config) return;\n if (config.compute) {\n runBulk(config.compute, selectedOptions);\n } else if (config.onClick) {\n config.onClick();\n }\n },\n [runBulk, selectedOptions, selectAllProp, selectFilteredProp],\n );\n\n // A function `checkState` is resolved against the current selection so the\n // row's checkbox can reflect how much of the set is selected.\n const selectAll = selectAllProp\n ? {\n label: resolveBulkActionLabel(selectAllProp.label, selectedOptions),\n checkState: bulkPending\n ? (\"loading\" as CheckState)\n : resolveBulkActionCheckState(\n selectAllProp.checkState,\n selectedOptions,\n ),\n }\n : undefined;\n\n const selectFiltered = selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: resolveBulkActionLabel(\n config.label,\n selectedOptions,\n `Select items matching \"${searchValue}\"`,\n ),\n checkState: bulkPending\n ? (\"loading\" as CheckState)\n : resolveBulkActionCheckState(config.checkState, selectedOptions),\n };\n }\n : undefined;\n\n const baseProps: MultiSelectFieldBaseInternalProps<TID> = {\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange: commitSelection,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId: moreInfo ? moreInfoUid : undefined,\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 bulkPending,\n onBulkActivate: handleBulkActivate,\n singleRow,\n maxChips,\n getChipProps,\n addItemLabel,\n onAddNewItem,\n handleRemoveOption,\n handleClear,\n dataAttributes,\n };\n\n if (disableSearch) {\n return <MultiSelectFieldSelectMode {...baseProps} />;\n }\n\n const comboboxProps: MultiSelectFieldComboboxInternalProps<TID> = {\n ...baseProps,\n debounceMs,\n selectFiltered,\n onSearchChange,\n };\n\n return <MultiSelectFieldComboboxMode {...comboboxProps} />;\n};\n\n/**\n * MultiSelectField component: a form field for selecting multiple options at once from a searchable dropdown, showing the chosen values as tags or chips.\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 * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n */\nexport const MultiSelectField = Object.assign(\n forwardRef(MultiSelectFieldInner),\n { displayName: \"MultiSelectField\" },\n) as <TID extends string | number = string | number>(\n propsWithLayout: MultiSelectFieldProps<TID> & {\n ref?: ForwardedRef<MultiSelectFieldHandle>;\n },\n) => ReactNode;\n","import { useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectField } from \"./MultiSelectField\";\nimport type {\n MultiSelectFieldHandle,\n MultiSelectFieldProps,\n MultiSelectFieldOption,\n} from \"./types\";\nimport type { CheckState } from \"../../types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../internal/functions/syncFilterUtils\";\nimport { useInvalidateOnOptionsChange } from \"../../internal/hooks/useInvalidateOnOptionsChange\";\n\nconst getEnabledSelectionStats = <TID extends string | number>(\n options: MultiSelectFieldOption<TID>[],\n current: MultiSelectFieldOption<TID>[],\n) => {\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = current.filter((v) => enabledIds.has(v.id)).length;\n const totalCount = enabledOptions.length;\n const allSelected = totalCount > 0 && selectedCount === totalCount;\n\n return { enabledOptions, enabledIds, selectedCount, allSelected };\n};\n\nexport type MultiSelectFieldSyncProps<\n TID extends string | number = string | number,\n> = Omit<\n MultiSelectFieldProps<TID>,\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<TID>[];\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<TID, MultiSelectFieldOption<TID>>\n | MatchSorterOptions<MultiSelectFieldOption<TID>>;\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 = <TID extends string | number>(\n props: MultiSelectFieldSyncProps<TID>,\n) => {\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 labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n\n const checkState = (current: MultiSelectFieldOption<TID>[]): CheckState => {\n const { selectedCount, allSelected } = getEnabledSelectionStats(\n options,\n current,\n );\n return allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n };\n\n const label =\n typeof labelProp === \"function\"\n ? (current: MultiSelectFieldOption<TID>[]) =>\n labelProp(getEnabledSelectionStats(options, current).allSelected)\n : labelProp;\n\n const handleClick = () => {\n const { enabledOptions, allSelected } = getEnabledSelectionStats(\n options,\n value,\n );\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 enabledFilteredIds = new Set(\n enabledFilteredOptions.map((o) => o.id),\n );\n\n const label =\n (typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined) ?? `Select items matching \"${searchValue}\"`;\n\n const checkState = (\n current: MultiSelectFieldOption<TID>[],\n ): CheckState => {\n const currentIds = new Set(current.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => currentIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n currentIds.has(opt.id),\n );\n\n return allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n };\n\n const handleClick = () => {\n const { allSelected: allFilteredSelected } = getEnabledSelectionStats(\n enabledFilteredOptions,\n value,\n );\n if (allFilteredSelected) {\n onSelectedOptionsChange(\n value.filter((v) => !enabledFilteredIds.has(v.id)),\n );\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 useInvalidateOnOptionsChange(fieldRef, 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,MAAM,KAAA,GAAQ;AAAA,EACnB,SAAS,WAAA,CAAY,OAAA;AAAA,EACrB,OAAO,WAAA,CAAY,KAAA;AAAA,EACnB,MAAM,WAAA,CAAY,IAAA;AAAA,EAClB,cAAc,WAAA,CAAY,YAAA;AAAA,EAC1B,aAAa,WAAA,CAAY,WAAA;AAAA,EACzB,cAAc,WAAA,CAAY;AAC5B,CAAA;;AC+EO,MAAM,wBAAwB,CAA8B;AAAA,EACjE,WAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;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,KAAuC;AACrC,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,QAAA;AAAA,IAClC,CAAC,MAAA,CAAO,aAAa,CAAC,GAAG,QAAA;AAAA,IACzB,CAAC,MAAA,CAAO,WAAW,CAAC,GAAG;AAAA,GACxB,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAuC;AAGjE,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,MAAM,aAAA,GAAgB,CAAC,GAAG,eAAe,CAAA,CACtC,OAAA,EAAQ,CACR,IAAA,CAAK,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,QAAQ,CAAA;AACpC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,cAAA,CAAe,aAAa,CAAA;AAAA,MAC9B;AAAA,IACF;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;AAC5D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA;AAAA,IACF;AAEA,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,iBAAe,QAAA,IAAY,MAAA;AAAA,QAC3B,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,0BAE7D,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,cAChC,GAAA,EAAK,OAAA;AAAA,cACL,mBAAiB,SAAA,IAAa,MAAA;AAAA,cAE7B,QAAA,EAAA;AAAA,gBAAA,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,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,oBAEhC,QAAA,kBAAA,GAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACE,GAAG,eAAe,MAAM,CAAA;AAAA,wBACxB,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,IAAA,EAAK;AAAA,wBAClC,OAAO,MAAA,CAAO,KAAA;AAAA,wBACd,OAAA,EACE,YAAY,QAAA,IAAY,MAAA,CAAO,WAC3B,MAAA,GACA,MAAM,eAAe,MAAM,CAAA;AAAA,wBAEjC,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,wBACxB,OAAO,MAAA,CAAO;AAAA;AAAA;AAChB,mBAAA;AAAA,kBAdK,CAAA,cAAA,EAAiB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,iBAgB3C,CAAA,GACD,IAAA;AAAA,gBAEH,cAAc,CAAA,mBACb,GAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,cAAc,CAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,IAAI,WAAW,CAAA,CAAA;AAAA,oBACtB,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,oBACxB,KAAA,EAAO,eAAA,CACJ,KAAA,CAAM,YAAY,CAAA,CAClB,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,KAAK,CAAA,CAC5B,IAAA,CAAK,IAAI,CAAA;AAAA,oBACX,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,YAAA;AAAa;AAAA,mBAE9C,CAAA,GACE,IAAA;AAAA,qCAEH,IAAA,EAAA,EAAK,SAAA,EAAW,OAAO,YAAY,CAAA,EAAG,YAAW,QAAA,EAChD,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,EAAA;AAAA,sBACA,IAAA,EAAK,MAAA;AAAA,sBACL,WAAA;AAAA,sBACA,QAAA;AAAA,sBACA,QAAA;AAAA,sBACC,GAAG,UAAA;AAAA,sBACH,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,KAAA,EAAM;AAAA,sBACnC,GAAA,EAAK,cAAA;AAAA,sBACL,SAAA,EAAW,kBAAA;AAAA,sBACX,WAAW,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA,EAAG,YAAY,SAAA,EAAW;AAAA,wBACpD,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG;AAAA,uBACpB;AAAA;AAAA,mBACH;AAAA,kBACC,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS;AAAA,iBAAA,EAC/D;AAAA;AAAA;AAAA,WACF;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,gBAC/B,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,WAAA,EAAY;AAAA,gBACzC,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,gBACJ,GAAG,iBAAA;AAAA,gBACJ,QAAA;AAAA,gBACC,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,YAAA,EAAa;AAAA,gBAC1C,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;;AC7N7B,MAAM,mBAAmB,CAA8B;AAAA,EAC5D,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;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,KAAoC;AAClC,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,CAAsB;AAAA,MACpB,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,CAAwB;AAAA,IAClD,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,CAA6B;AAAA,IAC/B,cAAA,EAAgB,CAAC,IAAA,EAAM,MAAA,KAAW;AAChC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,aAAa,OAAO,IAAA;AACxB,MAAA,OAAA,CAAQ,QAAA,IAAY,KAAK,QAAA,KAAa,KAAA;AAAA,IACxC,CAAA;AAAA,IACA,WAAA;AAAA;AAAA,IAEA,YAAA,EAAc,IAAA;AAAA,IACd,SAAA,EAAW,CAAC,IAAA,KAAS,IAAA,EAAM,EAAA;AAAA,IAC3B,sBAAsB,CAAC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAG,KAAM;AAGpD,MAAA,IACE,SAAS,WAAA,CAAY,gBAAA,CAAiB,aACtC,IAAA,KAAS,WAAA,CAAY,iBAAiB,iBAAA,EACtC;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,CAAG,SAAS,YAAA,EAAc;AAC5B,QAAA,cAAA,CAAe,aAAa,UAAU,CAAA;AAAA,MACxC,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,iBAAA,EAAmB;AACxC,QAAA,cAAA,CAAe,kBAAkB,UAAU,CAAA;AAAA,MAC7C,CAAA,MAAA,IACE,GAAG,IAAA,KAAS,QAAA,IACZ,GAAG,IAAA,KAAS,eAAA,IACZ,EAAA,CAAG,IAAA,KAAS,gBAAA,EACZ;AACA,QAAA,eAAA,CAAgB,GAAG,QAAQ,CAAA;AAAA,MAC7B;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,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,SAAA,EAAU;AAAA,IACZ;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA;AAExB,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;;ACjVO,MAAM,+BAA+B,CAA8B;AAAA,EACxE,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,aAAA;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,QAAA;AAAA,EACA,UAAA;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,WAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAkD;AAChD,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,CAAsB;AAAA,IACxB,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,WAAA;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,MAAM,gBAAA,GAAmB,oBAAA;AAAA,IACvB,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,mBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,UAAA;AAAA,MACZ,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA,EAAa;AAAA;AAAA,GACf,GACE,IAAA;AAEJ,EAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,UAAA,EAAS,oBAAA;AAAA,QACT,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,QAAA;AAAA,cACA,QAAA;AAAA,cACA;AAAA;AAAA,WACF;AAAA,0BACA,GAAA;AAAA,YAAC,qBAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,QAAA;AAAA,cACA,aAAA;AAAA,cACA,mBAAA,EAAqB,KAAA;AAAA,cACrB,WAAA;AAAA,cACA,kBAAA;AAAA,cACA,mBAAmB,oBAAA,CAAqB,EAAE,UAAU,CAAC,CAAC,UAAU,CAAA;AAAA,cAChE,OAAA,EAAS,WAAA;AAAA,cACT,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,cACT,YAAY,aAAA,CAAc;AAAA,gBACxB,kBAAA,EACE,CAAC,aAAA,IAAiB,SAAA,EAAW,QAAA,IAAY,UAAU,CAAA,CAChD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,gBAClB,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,aAAA;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,cAEF,QAAQ,gBAAA,IAAoB,MAAA;AAAA,cAE5B,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,MACE,GAAG,cAAA;AAAA,MACJ,UAAA,EAAS,oBAAA;AAAA,MACT,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,QAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,QAAA;AAAA,YACA,aAAA;AAAA,YACA,YAAY,aAAA,CAAc;AAAA,cACxB,GAAG,qBAAA,CAAsB,CAAA,EAAG,EAAE,CAAA,QAAA,CAAU,CAAA;AAAA,cACxC,kBAAA,EACE,CAAC,aAAA,IAAiB,SAAA,EAAW,QAAA,IAAY,UAAU,CAAA,CAChD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,cAClB,cAAA,EAAgB,QAAQ,IAAA,GAAO;AAAA,aAChC,CAAA;AAAA,YACD,mBAAmB,oBAAA,CAAqB,EAAE,UAAU,CAAC,CAAC,UAAU,CAAA;AAAA,YAChE,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,OAAA,EAAS,SAAA;AAAA,YACT,KAAA,EAAM,WAAA;AAAA,YACN,QAAQ,gBAAA,IAAoB,MAAA;AAAA,YAE5B,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;;ACnTO,MAAM,0BAA0B,CAA8B;AAAA,EACnE,WAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;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,KAAyC;AACvC,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,QAAA;AAAA,IAClC,CAAC,MAAA,CAAO,aAAa,CAAC,GAAG,QAAA;AAAA,IACzB,CAAC,MAAA,CAAO,WAAW,CAAC,GAAG;AAAA,GACxB,CAAA;AAED,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,SAAA;AAAA,MACJ,GAAG,qBAAA;AAAA,MACH,GAAG,sBAAsB,aAAa,CAAA;AAAA,MACvC,EAAA;AAAA,MACA,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,OAAA,EAAS,QAAA,GAAW,MAAA,GAAY,qBAAA,CAAsB,OAAA;AAAA,MACtD,SAAA,EAAW,QAAA,GAAW,MAAA,GAAY,qBAAA,CAAsB,SAAA;AAAA,MACvD,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,OAAA,EAAQ;AAAA,MACrC,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAErE,QAAA,EAAA;AAAA,QAAA,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS,IAAA;AAAA,wBAE7D,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,YAChC,GAAA,EAAK,OAAA;AAAA,YACL,mBAAiB,SAAA,IAAa,MAAA;AAAA,YAE7B,QAAA,EAAA;AAAA,cAAA,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,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,kBAEhC,QAAA,kBAAA,GAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBACE,GAAG,eAAe,MAAM,CAAA;AAAA,sBACxB,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,IAAA,EAAK;AAAA,sBAClC,OAAO,MAAA,CAAO,KAAA;AAAA,sBACd,SACE,QAAA,IAAY,QAAA,IAAY,OAAO,QAAA,GAC3B,MAAA,GACA,CAAC,CAAA,KAAM;AACL,wBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,wBAAA,cAAA,CAAe,MAAM,CAAA;AACrB,wBAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,sBAC5B,CAAA;AAAA,sBAEN,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,sBACxB,OAAO,MAAA,CAAO;AAAA;AAAA;AAChB,iBAAA;AAAA,gBAlBK,CAAA,cAAA,EAAiB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,eAoB3C,CAAA,GACD,IAAA;AAAA,cAEH,cAAc,CAAA,mBACb,GAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,cAAc,CAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,IAAI,WAAW,CAAA,CAAA;AAAA,kBACtB,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,kBACxB,KAAA,EAAO,eAAA,CACJ,KAAA,CAAM,YAAY,CAAA,CAClB,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,KAAK,CAAA,CAC5B,IAAA,CAAK,IAAI,CAAA;AAAA,kBACX,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,YAAA;AAAa;AAAA,iBAE9C,CAAA,GACE,IAAA;AAAA,cAEH,eAAA,CAAgB,MAAA,KAAW,CAAA,mBAC1B,IAAA,CAAC,IAAA,EAAA,EAAK,WAAW,MAAA,CAAO,YAAY,CAAA,EAAG,UAAA,EAAW,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA,EAAG;AAAA,sBAC7B,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG;AAAA,qBACpB,CAAA;AAAA,oBAEA,QAAA,EAAA;AAAA;AAAA,iBACH;AAAA,gBACC,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS;AAAA,eAAA,EAC/D,CAAA,GACE;AAAA;AAAA;AAAA,SACN;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,iBAAiB,CAAA,EACrC,QAAA,EAAA;AAAA,UAAA,kBAAA,GAAqB,uBACpB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,sBAAsB,CAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAMP,QAAA;AAAA,cACN,YAAA,EAAW,iBAAA;AAAA,cACX,UAAA,EAAW,OAAA;AAAA,cACX,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,cAC/B,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,WAAA,EAAY;AAAA,cACzC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,OAAA,IAAU;AAAA,cACZ;AAAA;AAAA,WACF,EACF,CAAA;AAAA,0BAEF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,uBAAuB,CAAA,EAC5C,QAAA,kBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAMC,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,cACT,GAAG,EAAE,CAAC,aAAa,GAAG,MAAM,YAAA,EAAa;AAAA,cAC1C,SAAA,EAAW,OAAO,eAAe;AAAA;AAAA,WACnC,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,uBAAA,CAAwB,WAAA,GAAc,yBAAA;;AClJ/B,MAAM,wBAAwB,CAA8B;AAAA,EACjE,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;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,KAAyC;AACvC,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,MAAMC,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,CAA2B;AAAA,IAC7B,cAAA,EAAgB,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAElB,MAAA,IAAI,aAAa,OAAO,IAAA;AACxB,MAAA,OAAA,CAAQ,QAAA,IAAY,KAAK,QAAA,KAAa,KAAA;AAAA,IACxC,CAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA,EAAc,IAAA;AAAA,IACd,SAAA,EAAW,CAAC,IAAA,KAAS,IAAA,EAAM,EAAA;AAAA,IAC3B,sBAAsB,CAAC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAG,KAAM;AAGpD,MAAA,IACE,IAAA,KAAS,SAAA,CAAU,gBAAA,CAAiB,SAAA,IACpC,IAAA,KAAS,SAAA,CAAU,gBAAA,CAAiB,wBAAA,IACpC,IAAA,KAAS,SAAA,CAAU,gBAAA,CAAiB,8BAAA,EACpC;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,CAAG,SAAS,YAAA,EAAc;AAC5B,QAAA,cAAA,CAAe,aAAa,EAAE,CAAA;AAAA,MAChC,CAAA,MAAA,IACE,GAAG,IAAA,KAAS,QAAA,IACZ,GAAG,IAAA,KAAS,eAAA,IACZ,EAAA,CAAG,IAAA,KAAS,gBAAA,EACZ;AACA,QAAA,eAAA,CAAgB,GAAG,QAAQ,CAAA;AAAA,MAC7B;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,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,SAAA,EAAU;AAAA,IACZ;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA;AAExB,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;;AC9MO,MAAM,6BAA6B,CAA8B;AAAA,EACtE,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,aAAA;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,QAAA;AAAA,EACA,UAAA;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,WAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAA8C;AAC5C,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,CAA2B;AAAA,IAC7B,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,WAAA;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,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,gBAAA,GAAmB,oBAAA;AAAA,IACvB,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,mBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAW,EAAA;AAAA,MACX,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA,EAAa;AAAA;AAAA,GACf,GACE,IAAA;AAEJ,EAAA,MAAM,oBAAoB,oBAAA,CAAqB;AAAA,IAC7C,QAAA,EAAU,CAAC,CAAC,QAAA;AAAA,IACZ,eAAA,EAAiB,WAAW,IAAA,GAAO,MAAA;AAAA,IACnC,kBAAA,EACE,CAAC,aAAA,IAAiB,SAAA,EAAW,QAAA,IAAY,UAAU,CAAA,CAChD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,IAClB,cAAA,EAAgB,QAAQ,IAAA,GAAO;AAAA,GACL,CAAA;AAE5B,EAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,UAAA,EAAS,oBAAA;AAAA,QACT,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,QAAA;AAAA,cACA,QAAA;AAAA,cACA;AAAA;AAAA,WACF;AAAA,0BACA,GAAA;AAAA,YAAC,uBAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,QAAA;AAAA,cACA,aAAA;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,cACP,QAAQ,gBAAA,IAAoB,MAAA;AAAA,cAE5B,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,MACE,GAAG,cAAA;AAAA,MACJ,UAAA,EAAS,oBAAA;AAAA,MACT,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,QAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,uBAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,QAAA;AAAA,YACA,aAAA;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,OAAA,EAAS,SAAA;AAAA,YACT,KAAA,EAAM,WAAA;AAAA,YACN,QAAQ,gBAAA,IAAoB,MAAA;AAAA,YAE5B,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;;ACnSO,SAAS,2BAAA,CACd,UACA,QAAA,EACqB;AACrB,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAA,OAAO,WAAA,CAAY,CAAC,IAAA,KAAc;AAChC,IAAA,IAAI,aAAA,CAAc,IAAA,EAAM,WAAA,CAAY,OAAO,CAAA,EAAG;AAC5C,MAAA;AAAA,IACF;AACA,IAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AACP;;ACRA,MAAM,qBAAA,GAAwB,CAC5B,eAAA,EACA,GAAA,KACG;AACH,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,eAAe,CAAA;AAE3E,EAAA,MAAM,iBAAiB,MAAA,CAAO,WAAA;AAAA,IAC5B,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,GAAA,CAAI,UAAA,CAAW,OAAO,CAAC;AAAA,GAC1E;AAEA,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,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;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,YAAA;AAAA,IACA,YAAA;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;AACxB,EAAA,MAAM,cAAc,KAAA,EAAM;AAE1B,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,CAA4B;AAAA,IAC9B,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;AAKD,EAAA,MAAM,eAAA,GAAkB,2BAAA;AAAA,IACtB,eAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,MAAA,KAAoC;AACnC,MAAA,MAAM,MAAA,GAAS,gBAAgB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AAGjE,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA;AAAA,MACF;AACA,MAAA,eAAA,CAAgB,eAAA,CAAgB,OAAO,CAAC,GAAA,KAAQ,IAAI,EAAA,KAAO,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,CAAC,iBAAiB,eAAe;AAAA,GACnC;AAEA,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AAEpC,IAAA,MAAM,gBAAgB,eAAA,CAAgB,MAAA,CAAO,CAAC,GAAA,KAAQ,IAAI,QAAQ,CAAA;AAClE,IAAA,eAAA,CAAgB,aAAa,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,eAAA,EAAiB,eAAe,CAAC,CAAA;AAErC,EAAA,MAAM,yBAAyB,eAAA,CAAgB,MAAA;AAAA,IAC7C,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI;AAAA,GAChB,CAAE,MAAA;AAEF,EAAA,MAAM,kBAAA,GACJ,2BAA2B,CAAA,IAAK,oBAAA;AAElC,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,OAAA,KAAY,mBAAA,CAAoB;AAAA,IAC5D,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,MAAsC,WAAA,KAAwB;AAC7D,MAAA,MAAM,MAAA,GACJ,IAAA,KAAS,WAAA,GACL,aAAA,GACA,qBAAqB,WAAW,CAAA;AACtC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,MAAA,CAAO,SAAS,eAAe,CAAA;AAAA,MACzC,CAAA,MAAA,IAAW,OAAO,OAAA,EAAS;AACzB,QAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,MACjB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,eAAA,EAAiB,aAAA,EAAe,kBAAkB;AAAA,GAC9D;AAIA,EAAA,MAAM,YAAY,aAAA,GACd;AAAA,IACE,KAAA,EAAO,sBAAA,CAAuB,aAAA,CAAc,KAAA,EAAO,eAAe,CAAA;AAAA,IAClE,UAAA,EAAY,cACP,SAAA,GACD,2BAAA;AAAA,MACE,aAAA,CAAc,UAAA;AAAA,MACd;AAAA;AACF,GACN,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,KAAA,EAAO,sBAAA;AAAA,QACL,MAAA,CAAO,KAAA;AAAA,QACP,eAAA;AAAA,QACA,0BAA0B,WAAW,CAAA,CAAA;AAAA,OACvC;AAAA,MACA,YAAY,WAAA,GACP,SAAA,GACD,2BAAA,CAA4B,MAAA,CAAO,YAAY,eAAe;AAAA,KACpE;AAAA,EACF,CAAA,GACA,MAAA;AAEJ,EAAA,MAAM,SAAA,GAAoD;AAAA,IACxD,EAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,uBAAA,EAAyB,eAAA;AAAA,IACzB,SAAA;AAAA,IACA,oBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;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,QAAA;AAAA,IACA,UAAA,EAAY,WAAW,WAAA,GAAc,MAAA;AAAA,IACrC,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,WAAA;AAAA,IACA,cAAA,EAAgB,kBAAA;AAAA,IAChB,SAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;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,GAA4D;AAAA,IAChE,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,CAAA;AAqBO,MAAM,mBAAmB,MAAA,CAAO,MAAA;AAAA,EACrC,WAAW,qBAAqB,CAAA;AAAA,EAChC,EAAE,aAAa,kBAAA;AACjB;;AChSA,MAAM,wBAAA,GAA2B,CAC/B,OAAA,EACA,OAAA,KACG;AACH,EAAA,MAAM,iBAAiB,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAI,QAAQ,CAAA;AAC5D,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,cAAA,CAAe,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,WAAW,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA,CAAE,MAAA;AAClE,EAAA,MAAM,aAAa,cAAA,CAAe,MAAA;AAClC,EAAA,MAAM,WAAA,GAAc,UAAA,GAAa,CAAA,IAAK,aAAA,KAAkB,UAAA;AAExD,EAAA,OAAO,EAAE,cAAA,EAAgB,UAAA,EAAY,aAAA,EAAe,WAAA,EAAY;AAClE,CAAA;AA6GO,MAAM,oBAAA,GAAuB,CAClC,KAAA,KACG;AACH,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,SAAA,GACJ,OAAO,aAAA,KAAkB,QAAA,GAAW,cAAc,KAAA,GAAQ,MAAA;AAE5D,IAAA,MAAM,UAAA,GAAa,CAAC,OAAA,KAAuD;AACzE,MAAA,MAAM,EAAE,aAAA,EAAe,WAAA,EAAY,GAAI,wBAAA;AAAA,QACrC,OAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,WAAA,GACH,SAAA,GACA,aAAA,GAAgB,CAAA,GACd,eAAA,GACA,WAAA;AAAA,IACR,CAAA;AAEA,IAAA,MAAM,KAAA,GACJ,OAAO,SAAA,KAAc,UAAA,GACjB,CAAC,OAAA,KACC,SAAA,CAAU,wBAAA,CAAyB,OAAA,EAAS,OAAO,CAAA,CAAE,WAAW,CAAA,GAClE,SAAA;AAEN,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,EAAE,cAAA,EAAgB,WAAA,EAAY,GAAI,wBAAA;AAAA,QACtC,OAAA;AAAA,QACA;AAAA,OACF;AACA,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,qBAAqB,IAAI,GAAA;AAAA,QAC7B,sBAAA,CAAuB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE;AAAA,OACxC;AAEA,MAAA,MAAM,KAAA,GAAA,CACH,OAAO,kBAAA,KAAuB,UAAA,GAC3B,kBAAA,CAAmB,WAAW,CAAA,CAAE,KAAA,GAChC,MAAA,KAAc,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAA,CAAA;AAEzD,MAAA,MAAM,UAAA,GAAa,CACjB,OAAA,KACe;AACf,QAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACnD,QAAA,MAAM,mBAAA,GACJ,sBAAA,CAAuB,MAAA,GAAS,CAAA,IAChC,sBAAA,CAAuB,KAAA,CAAM,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,EAAE,CAAC,CAAA;AAC9D,QAAA,MAAM,uBAAuB,sBAAA,CAAuB,IAAA;AAAA,UAAK,CAAC,GAAA,KACxD,UAAA,CAAW,GAAA,CAAI,IAAI,EAAE;AAAA,SACvB;AAEA,QAAA,OAAO,mBAAA,GACH,SAAA,GACA,oBAAA,GACE,eAAA,GACA,WAAA;AAAA,MACR,CAAA;AAEA,MAAA,MAAM,cAAc,MAAM;AACxB,QAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,wBAAA;AAAA,UAC3C,sBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,mBAAA,EAAqB;AACvB,UAAA,uBAAA;AAAA,YACE,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,CAAC,kBAAA,CAAmB,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC;AAAA,WACnD;AAAA,QACF,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,4BAAA,CAA6B,UAAU,OAAO,CAAA;AAE9C,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 +0,0 @@
1
- {"version":3,"file":"SelectFieldLabel-CcX2GAym.js","sources":["../src/internal/functions/popoverTargetDomProps.ts","../src/components/SelectField/internal/SelectFieldLabel.tsx"],"sourcesContent":["import { version as reactVersion } from \"react\";\n\n/** React 18 warns on `popoverTarget`; React 19 warns on `popovertarget`. */\nexport function popoverTargetDomProps(\n id: string | undefined,\n version: string = reactVersion,\n) {\n return id\n ? {\n [Number.parseInt(version, 10) >= 19\n ? \"popoverTarget\"\n : \"popovertarget\"]: id,\n }\n : {};\n}\n","import type { ReactNode } from \"react\";\nimport {\n FieldLabel,\n type FieldLabelProps,\n} from \"../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../components/SrOnly\";\n\ntype GetLabelProps = (options?: object) => { id: string; htmlFor: string };\n\n/**\n * Props for the SelectFieldLabel component\n * @property {AiMarkWithTooltipOrPopoverProps} aiMark - The AI mark to display\n * @property {string} label - The text content to display as the label\n * @property {GetLabelProps} getLabelProps - Downshift getter function that returns accessibility props for the label\n * @property {boolean} [required] - Whether the field is required. Shows a red asterisk (*) when true.\n * @property {ReactNode} [moreInfo] - Additional information to display in a tooltip\n * @property {string} [moreInfoId] - ID for the sr-only description span, referenced via aria-describedby on the associated input\n * @property {boolean} [moreInfoOpen] - Controls the open state of the more info tooltip\n * @property {boolean} [hideLabel] - Visually hides the label while keeping it accessible to screen readers\n */\nexport type SelectFieldLabelProps = {\n aiMark?: FieldLabelProps[\"aiMark\"];\n label: string;\n getLabelProps: GetLabelProps;\n hideLabel?: boolean;\n moreInfo?: ReactNode;\n moreInfoId?: string;\n moreInfoOpen?: boolean;\n required?: boolean;\n};\n\n/**\n * Internal label component for the SelectField that renders an accessible label element.\n *\n * Features:\n * - Renders a FieldLabel with proper accessibility attributes from Downshift\n * - Automatically associates the label with the combobox input\n * - Supports screen readers with proper labeling\n * - Optional required field indicator with red asterisk\n * - Help tooltip with info icon for additional context\n * - Can visually hide the label while maintaining accessibility\n *\n * @example\n * <SelectFieldLabel\n * label=\"Select an option\"\n * getLabelProps={getLabelProps}\n * required\n * moreInfo=\"Choose from available options\"\n * />\n */\nexport const SelectFieldLabel = ({\n aiMark,\n label,\n getLabelProps,\n hideLabel = false,\n moreInfo,\n moreInfoId,\n moreInfoOpen,\n required,\n}: SelectFieldLabelProps) => {\n const labelContent = (\n <FieldLabel\n {...getLabelProps()}\n aiMark={aiMark}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n moreInfoOpen={moreInfoOpen}\n >\n {label}\n </FieldLabel>\n );\n\n if (hideLabel) {\n return <SrOnly>{labelContent}</SrOnly>;\n }\n\n return labelContent;\n};\n"],"names":["version","reactVersion"],"mappings":";;;;;AAGO,SAAS,qBAAA,CACd,EAAA,EACAA,SAAA,GAAkBC,OAAA,EAClB;AACA,EAAA,OAAO,EAAA,GACH;AAAA,IACE,CAAC,OAAO,QAAA,CAASD,SAAA,EAAS,EAAE,CAAA,IAAK,EAAA,GAC7B,eAAA,GACA,eAAe,GAAG;AAAA,MAExB,EAAC;AACP;;ACoCO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA,EAAc;AAAA,MAClB,MAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAO,GAAA,CAAC,UAAQ,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,YAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectOptions-BkqBzRiG.js","sources":["../src/internal/components/SelectOptions.tsx"],"sourcesContent":["import type { SelectFieldOption } from \"../../components/SelectField/types\";\nimport { type CSSProperties, forwardRef, useCallback } from \"react\";\nimport type { CheckState } from \"../../types\";\nimport { OptionsPanel, type OptionsPanelHandle } from \"./OptionsPanel\";\nimport { VirtualizedOptionsPanel } from \"./VirtualizedOptionsPanel\";\nimport type {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type SelectOptionsProps = {\n isOpen: boolean;\n items: SelectItem[];\n getMenuProps: GetMenuPropsFn;\n getItemProps: GetItemPropsFn;\n highlightedIndex: number;\n selectedOption: SelectFieldOption | null;\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n virtualize?: boolean;\n};\n\nexport const SelectOptions = forwardRef<OptionsPanelHandle, SelectOptionsProps>(\n ({ selectedOption, virtualize, ...rest }, ref) => {\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState =>\n selectedOption?.id === item.original.id ? \"checked\" : \"unchecked\",\n [selectedOption],\n );\n\n const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;\n\n return (\n <ListComponent\n {...rest}\n ref={ref}\n selectionType=\"single\"\n getCheckedState={getCheckedState}\n />\n );\n },\n);\n\nSelectOptions.displayName = \"SelectOptions\";\n"],"names":[],"mappings":";;;;AA+BO,MAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,CAAC,EAAE,cAAA,EAAgB,YAAY,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAChD,IAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,MACtB,CAAC,IAAA,KACC,cAAA,EAAgB,OAAO,IAAA,CAAK,QAAA,CAAS,KAAK,SAAA,GAAY,WAAA;AAAA,MACxD,CAAC,cAAc;AAAA,KACjB;AAEA,IAAA,MAAM,aAAA,GAAgB,aAAa,uBAAA,GAA0B,YAAA;AAE7D,IAAA,uBACE,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACE,GAAG,IAAA;AAAA,QACJ,GAAA;AAAA,QACA,aAAA,EAAc,QAAA;AAAA,QACd;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimeField-DpnX_t31.js","sources":["../src/internal/hooks/usePopoverCloseDelayWorkaround/usePopoverCloseDelayWorkaround.ts","../../hammer-icon/mdi/round/access_time.svg","../src/components/TimeField/internal/constants.ts","../src/components/TimeField/internal/utils/timeFormatting.ts","../src/components/TimeField/internal/utils/timeParsing.ts","../src/components/TimeField/internal/utils/timeOptions.ts","../src/components/TimeField/internal/utils/timeValidation.ts","../src/components/TimeField/internal/utils/timeRounding.ts","../src/components/TimeField/internal/maskito/timePlaceholderMask.ts","../src/components/TimeField/internal/MaskedTimeInput.tsx","../src/components/TimeField/TimeField.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n// The Popover continues to render Popover.Content for X milliseconds after the popover is closed.\n// To prevent the popover content from appearing empty, we need to continue to show it inside Popover.Content for X milliseconds.\n// This is just a hack until we have a `onCloseAnimationEnd` prop on Popover.\nexport const usePopoverCloseDelayWorkaround = (\n popoverOpen: boolean,\n delay: number = 300,\n) => {\n const [shouldShowContent, setShouldShowContent] = useState(popoverOpen);\n\n useEffect(() => {\n if (!popoverOpen) {\n const timeout = setTimeout(() => {\n setShouldShowContent(false);\n }, delay);\n return () => clearTimeout(timeout);\n }\n setShouldShowContent(true);\n }, [popoverOpen, delay]);\n\n return shouldShowContent;\n};\n","import * as React from \"react\";\nconst SvgAccessTime = (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: \"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm-.22-13h-.06c-.4 0-.72.32-.72.72v4.72c0 .35.18.68.49.86l4.15 2.49c.34.2.78.1.98-.24a.71.71 0 0 0-.25-.99l-3.87-2.3V7.72c0-.4-.32-.72-.72-.72z\" }));\nexport default SvgAccessTime;\n","import type { TimeFormat } from \"./types\";\nimport IconAccessTime from \"@servicetitan/hammer-icon/mdi/round/access_time.svg\";\n\n// Time Constants\nexport const TIME_CONSTANTS = {\n /** Minutes in a full day (24 hours * 60 minutes) */\n MINUTES_IN_DAY: 1440,\n /** Maximum hour in 24-hour format */\n MAX_HOUR_24: 23,\n /** Maximum minute value */\n MAX_MINUTE: 59,\n /** Timeout in milliseconds for input debouncing */\n INPUT_DEBOUNCE_TIMEOUT: 100,\n} as const;\n\n// Format Constants\nexport const FORMAT_CONSTANTS = {\n /** 12-hour time format */\n TWELVE_HOUR: 12 as const,\n /** 24-hour time format */\n TWENTY_FOUR_HOUR: 24 as const,\n} as const;\n\n/**\n * Placeholder strings for different time formats.\n */\nexport const TIME_FORMAT_PLACEHOLDERS: Record<TimeFormat, string> = {\n 12: \"––:–– ––\",\n 24: \"––:––\",\n};\n\n/**\n * Clock icon used as prefix in the time input field.\n */\nexport const CLOCK_ICON = IconAccessTime;\n","import type { TimeFormat } from \"../types\";\n\n/**\n * Converts hours and minutes to a formatted time string.\n *\n * @param hours - Hours (0-23)\n * @param minutes - Minutes (0-59)\n * @param format - Target format (12 or 24 hour)\n * @returns Formatted time string\n */\nexport function formatTimeString(\n hours: number,\n minutes: number,\n format: TimeFormat,\n): string {\n // Handle 24:00 edge case\n if (hours === 24) {\n hours = 0; // Convert 24:00 to 00:00\n }\n\n if (format === 12) {\n // Convert to 12-hour format\n let displayHours = hours;\n let period = \"AM\";\n\n if (hours === 0) {\n displayHours = 12;\n } else if (hours > 12) {\n displayHours = hours - 12;\n period = \"PM\";\n } else if (hours === 12) {\n period = \"PM\";\n }\n\n return `${displayHours.toString().padStart(2, \"0\")}:${minutes.toString().padStart(2, \"0\")} ${period}`;\n } else {\n // 24-hour format\n return `${hours.toString().padStart(2, \"0\")}:${minutes.toString().padStart(2, \"0\")}`;\n }\n}\n","import type { TimeFormat } from \"../types\";\nimport { formatTimeString } from \"./timeFormatting\";\nimport { TIME_CONSTANTS } from \"../constants\";\n\n/**\n * Maximum hour value for 24-hour format.\n */\nexport const MAX_HOUR = TIME_CONSTANTS.MAX_HOUR_24;\n\n/**\n * Maximum minute value.\n */\nexport const MAX_MINUTE = TIME_CONSTANTS.MAX_MINUTE;\n\n/**\n * Converts constraint times to normalized minutes for comparison.\n * Helper to eliminate duplicate constraint conversion logic.\n *\n * @param min - Minimum time constraint\n * @param max - Maximum time constraint\n * @returns Object with minMinutes and maxMinutes for constraint checking\n */\nfunction getConstraintMinutes(min?: string, max?: string) {\n const minMinutes = min ? timeToMinutes(convertTimeFormat(min, 24)) : 0;\n const maxMinutes = max\n ? timeToMinutes(convertTimeFormat(max, 24))\n : TIME_CONSTANTS.MINUTES_IN_DAY;\n return { minMinutes, maxMinutes };\n}\n\n/**\n * Checks if time in minutes falls within the given constraints.\n *\n * @param timeMinutes - Time to check in minutes since midnight\n * @param minMinutes - Minimum allowed time in minutes\n * @param maxMinutes - Maximum allowed time in minutes\n * @returns True if time is within constraints\n */\nfunction isWithinConstraints(\n timeMinutes: number,\n minMinutes: number,\n maxMinutes: number,\n): boolean {\n return timeMinutes >= minMinutes && timeMinutes <= maxMinutes;\n}\n\n/**\n * Converts a time string to total minutes since midnight.\n *\n * @param timeStr - Time string in HH:mm format (24-hour)\n * @returns Total minutes since midnight\n */\nexport const timeToMinutes = (timeStr: string): number => {\n const match = timeStr.match(/^(\\d{1,2}):(\\d{2})(?:\\s*(AM|PM))?$/i);\n if (!match) return 0;\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const period = match[3]?.toUpperCase();\n\n // Validate minutes range\n if (minutes > MAX_MINUTE) return 0;\n\n if (period === \"PM\" && hours !== 12) {\n hours += 12;\n } else if (period === \"AM\" && hours === 12) {\n hours = 0;\n }\n\n // Validate final hours range (0-23)\n if (hours > MAX_HOUR) return 0;\n\n return hours * 60 + minutes;\n};\n\n/**\n * Converts a time string between 12-hour and 24-hour formats.\n *\n * @param time - Time string to convert\n * @param targetFormat - Target format (12 or 24)\n * @returns Converted time string\n */\nexport function convertTimeFormat(\n time: string,\n targetFormat: TimeFormat,\n): string {\n if (!time) return time;\n\n const minutes = timeToMinutes(time);\n\n // If timeToMinutes returns 0, it means the input couldn't be parsed as a valid time\n // Return the original string as the JSDoc comment promises\n if (minutes === 0 && time !== \"00:00\" && time !== \"12:00 AM\") {\n return time;\n }\n\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n\n return formatTimeString(hours, mins, targetFormat);\n}\n\n/**\n * Normalizes partial time input by adding missing components.\n *\n * @param value - Raw input value\n * @returns Normalized time string\n */\nfunction normalizePartialInput(value: string): string {\n // Remove placeholder characters first (including en dashes)\n const cleanValue = value.replace(/[–_:]/g, \"\").replace(/\\s+/g, \"\");\n\n if (/^\\d{1,2}$/.test(cleanValue)) {\n // Single or double digit hours, add \":00\"\n const result = `${cleanValue}:00`;\n return result;\n } else if (/^\\d{1,2}:\\d{1}$/.test(cleanValue)) {\n // Hours and single digit minutes, add \"0\"\n const result = `${cleanValue}0`;\n return result;\n } else if (/^\\d{4}$/.test(cleanValue)) {\n // Four digits, insert colon after first two\n const result = `${cleanValue.slice(0, 2)}:${cleanValue.slice(2)}`;\n return result;\n } else if (/^\\d{4}(AM|PM)$/i.test(cleanValue)) {\n // Four digits followed by AM/PM, insert colon after first two\n const digits = cleanValue.slice(0, 4);\n const ampm = cleanValue.slice(4);\n const result = `${digits.slice(0, 2)}:${digits.slice(2)} ${ampm}`;\n return result;\n }\n\n return value;\n}\n\n/**\n * Parses 12-hour format time input.\n *\n * @param normalizedValue - Normalized input value\n * @param min - Minimum allowed time constraint\n * @param max - Maximum allowed time constraint\n * @returns Parsed time components or null if invalid\n */\nfunction parse12HourFormat(\n normalizedValue: string,\n min?: string,\n max?: string,\n): { hours: number; minutes: number } | null {\n const match = normalizedValue.match(/^(\\d{1,2}):(\\d{1,2})(?:\\s*(AM|PM))?$/i);\n if (!match) return null;\n\n let hours = parseInt(match[1], 10);\n let minutes = parseInt(match[2], 10);\n const ampm = match[3]?.toUpperCase();\n\n // Handle partial minute input (e.g., \"10:5\" should be \"10:50\")\n if (minutes < 10 && normalizedValue.match(/^(\\d{1,2}):(\\d{1})$/)) {\n minutes *= 10;\n }\n\n // Handle AM/PM conversion to 24-hour format\n if (ampm === \"PM\") {\n if (hours !== 12) {\n hours += 12; // Convert to 24-hour (1 PM = 13:00, 2 PM = 14:00, etc.)\n }\n // 12 PM stays as 12:00\n } else if (ampm === \"AM\") {\n if (hours === 12) {\n hours = 0; // 12 AM = 00:00\n }\n // All other AM times stay as-is\n } else {\n // No AM/PM specified - need to choose between AM and PM\n if (hours === 12) {\n hours = 12; // 12:00 = 12 PM\n } else {\n // For hours 1-11, check constraints to decide AM vs PM\n if (min || max) {\n // Check which interpretation (AM or PM) is valid within constraints\n const amHours = hours;\n const pmHours = hours + 12;\n\n const { minMinutes, maxMinutes } = getConstraintMinutes(min, max);\n\n const amMinutes = amHours * 60 + minutes;\n const pmMinutes = pmHours * 60 + minutes;\n\n const amValid = isWithinConstraints(amMinutes, minMinutes, maxMinutes);\n const pmValid = isWithinConstraints(pmMinutes, minMinutes, maxMinutes);\n\n if (amValid && pmValid) {\n // Both are valid, prefer AM (original behavior)\n // hours stays as-is (AM)\n } else if (pmValid) {\n // Only PM is valid, use PM\n hours = pmHours;\n } else if (amValid) {\n // Only AM is valid, use AM\n // hours stays as-is (AM)\n } else {\n // Neither is valid - this should be caught by constraint validation later\n // hours stays as-is (AM) for now\n }\n }\n // If no constraints, assume AM (original behavior)\n }\n }\n\n return { hours, minutes };\n}\n\n/**\n * Parses 24-hour format time input.\n *\n * @param normalizedValue - Normalized input value\n * @returns Parsed time components or null if invalid\n */\nfunction parse24HourFormat(\n normalizedValue: string,\n): { hours: number; minutes: number } | null {\n const match = normalizedValue.match(/^(\\d{1,2}):(\\d{1,2})$/);\n\n if (!match) {\n return null;\n }\n\n const hours = parseInt(match[1], 10);\n let minutes = parseInt(match[2], 10);\n\n // Handle partial minute input (e.g., \"10:5\" should be \"10:50\")\n if (minutes < 10 && normalizedValue.match(/^(\\d{1,2}):(\\d{1})$/)) {\n minutes *= 10;\n }\n\n const result = { hours, minutes };\n return result;\n}\n\n/**\n * Validates time constraints for 12-hour format with partial inputs.\n *\n * @param timeString - Formatted time string\n * @param value - Original input value\n * @param min - Minimum allowed time\n * @param max - Maximum allowed time\n * @returns True if time is within constraints\n */\nfunction validate12HourConstraints(\n timeString: string,\n value: string,\n min?: string,\n max?: string,\n): boolean {\n if (!min && !max) return true;\n\n // Check if the original input had AM/PM specified\n const originalHasAMPM =\n value.toUpperCase().includes(\"AM\") || value.toUpperCase().includes(\"PM\");\n\n if (!originalHasAMPM) {\n // This is a partial input without AM/PM - check if either AM or PM interpretation would be valid\n // Extract just the time part (HH:MM) without AM/PM\n const timePart = timeString.replace(/\\s*(AM|PM)$/i, \"\");\n const amTime = `${timePart} AM`;\n const pmTime = `${timePart} PM`;\n\n const amMinutes = timeToMinutes(convertTimeFormat(amTime, 24));\n const pmMinutes = timeToMinutes(convertTimeFormat(pmTime, 24));\n\n const { minMinutes, maxMinutes } = getConstraintMinutes(min, max);\n\n // If either AM or PM interpretation is valid, allow the input\n return (\n isWithinConstraints(amMinutes, minMinutes, maxMinutes) ||\n isWithinConstraints(pmMinutes, minMinutes, maxMinutes)\n );\n } else {\n // AM/PM is specified, check the specific time\n const timeMinutes = timeToMinutes(convertTimeFormat(timeString, 24));\n const { minMinutes, maxMinutes } = getConstraintMinutes(min, max);\n\n return isWithinConstraints(timeMinutes, minMinutes, maxMinutes);\n }\n}\n\n/**\n * Validates time constraints for 24-hour format.\n *\n * @param timeString - Formatted time string\n * @param min - Minimum allowed time\n * @param max - Maximum allowed time\n * @returns True if time is within constraints\n */\nfunction validate24HourConstraints(\n timeString: string,\n min?: string,\n max?: string,\n): boolean {\n if (!min && !max) return true;\n\n const timeMinutes = timeToMinutes(timeString);\n const { minMinutes, maxMinutes } = getConstraintMinutes(min, max);\n\n // Check if the exact time is valid\n if (isWithinConstraints(timeMinutes, minMinutes, maxMinutes)) {\n return true;\n }\n\n // Handle partial inputs - check if this time could potentially be valid\n // For example, if someone types \"1:00\" but constraints are 09:00-17:00,\n // we should allow it because they might be typing \"14:00\"\n const hours = Math.floor(timeMinutes / 60);\n const minutes = timeMinutes % 60;\n\n // If this is a partial hour (like \"1:00\"), check if any hour in the valid range\n // could potentially match this pattern\n if (minutes === 0) {\n // Check if any hour in the valid range could start with this digit\n for (let h = minMinutes; h <= maxMinutes; h += 60) {\n const potentialHour = Math.floor(h / 60);\n if (potentialHour.toString().startsWith(hours.toString())) {\n return true;\n }\n }\n }\n\n // If this is a partial minute (like \"14:3\"), check if any minute in the valid range\n // could potentially match this pattern\n if (\n hours >= Math.floor(minMinutes / 60) &&\n hours <= Math.floor(maxMinutes / 60)\n ) {\n const hourMinutes = hours * 60;\n const hourMinMinutes = Math.max(minMinutes, hourMinutes);\n const hourMaxMinutes = Math.min(maxMinutes, hourMinutes + 59);\n\n for (let m = hourMinMinutes; m <= hourMaxMinutes; m++) {\n const potentialMinutes = m % 60;\n if (potentialMinutes.toString().startsWith(minutes.toString())) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Parses input value and converts it to a time string with validation.\n *\n * @param value - The raw input value (may contain placeholders)\n * @param format - The time format (12 or 24 hour)\n * @param removePlaceholder - Function to remove placeholder characters\n * @param min - Minimum allowed time constraint\n * @param max - Maximum allowed time constraint\n * @returns Object containing parsed time string, validation state, and empty state\n */\nexport function parseInputValue(\n value: string,\n format: TimeFormat,\n removePlaceholder: (value: string) => string,\n min?: string,\n max?: string,\n) {\n const valueMinusPlaceholder = removePlaceholder(value);\n\n if (valueMinusPlaceholder === \"\") {\n return {\n time: null,\n isInputValid: false,\n isInputEmpty: true,\n };\n }\n\n // Normalize partial inputs\n const normalizedValue = normalizePartialInput(valueMinusPlaceholder);\n\n // Parse based on format\n const parsed =\n format === 12\n ? parse12HourFormat(normalizedValue, min, max)\n : parse24HourFormat(normalizedValue);\n\n if (!parsed) {\n return {\n time: null,\n isInputValid: false,\n isInputEmpty: false,\n };\n }\n\n const { hours, minutes } = parsed;\n\n // Validate hours and minutes\n if (hours < 0 || hours > MAX_HOUR || minutes < 0 || minutes > MAX_MINUTE) {\n return {\n time: null,\n isInputValid: false,\n isInputEmpty: false,\n };\n }\n\n // Convert to formatted string\n const timeString = formatTimeString(hours, minutes, format);\n\n // Validate constraints\n const isValid =\n format === 12\n ? validate12HourConstraints(timeString, value, min, max)\n : validate24HourConstraints(timeString, min, max);\n\n if (!isValid) {\n return {\n time: null,\n isInputValid: false,\n isInputEmpty: false,\n };\n }\n\n return {\n time: timeString,\n isInputValid: true,\n isInputEmpty: false,\n };\n}\n","import type { TimeFormat } from \"../types\";\nimport { timeToMinutes } from \"./timeParsing\";\nimport { formatTimeString } from \"./timeFormatting\";\nimport { TIME_CONSTANTS, TIME_FORMAT_PLACEHOLDERS } from \"../constants\";\n\n/**\n * Generates time options for the dropdown based on step, min/max constraints, and format.\n *\n * @param step - Time increment in minutes (default 30)\n * @param min - Minimum allowed time as string\n * @param max - Maximum allowed time as string\n * @param format - Time format (12 or 24 hour)\n * @returns Array of time options formatted as strings\n */\nexport function generateTimeOptions({\n step = 30,\n min,\n max,\n format,\n}: {\n step?: number;\n min?: string;\n max?: string;\n format: TimeFormat;\n}): string[] {\n const options: string[] = [];\n\n const minMinutes = min ? timeToMinutes(min) : 0;\n const maxMinutes = max\n ? timeToMinutes(max)\n : TIME_CONSTANTS.MINUTES_IN_DAY - 1;\n\n // Generate options at step intervals\n for (\n let minutes = 0;\n minutes < TIME_CONSTANTS.MINUTES_IN_DAY;\n minutes += step\n ) {\n // Skip if outside min/max range\n if (minutes < minMinutes || minutes > maxMinutes) {\n continue;\n }\n\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n\n options.push(formatTimeString(hours, mins, format));\n }\n\n return options;\n}\n\n/**\n * Normalizes a time string by removing special characters and converting to lowercase.\n * Used for fuzzy matching in dropdown filtering.\n *\n * @param str - The time string to normalize\n * @returns Normalized string for comparison\n */\nfunction normalizeTimeString(str: string): string {\n return str\n .replace(/[–_:]/g, \"\") // Remove en dashes, underscores, and colons\n .replace(/\\s+/g, \"\") // Remove spaces\n .toLowerCase();\n}\n\n/**\n * Filters time options based on user input.\n *\n * @param options - Array of available time options\n * @param userInput - The current user input (after Maskito processing)\n * @returns Filtered array of matching options\n */\nexport function filterTimeOptions(\n options: string[],\n userInput: string,\n): string[] {\n if (\n !userInput ||\n userInput === TIME_FORMAT_PLACEHOLDERS[12] ||\n userInput === TIME_FORMAT_PLACEHOLDERS[24]\n ) {\n return options;\n }\n\n const normalizedInput = normalizeTimeString(userInput);\n\n const filtered = options.filter((option) => {\n const normalizedOption = normalizeTimeString(option);\n return normalizedOption.startsWith(normalizedInput);\n });\n\n return filtered;\n}\n","import { timeToMinutes } from \"./timeParsing\";\nimport type { TimeFormat } from \"../types\";\n\n/**\n * Checks if a time aligns with a given step interval.\n *\n * @param time - The time to check\n * @param step - The step increment in minutes\n * @returns True if the time aligns with the step\n */\nexport function isTimeOnStep(time: string, step: number): boolean {\n if (!step || step <= 0) return true;\n\n const totalMinutes = timeToMinutes(time);\n return totalMinutes % step === 0;\n}\n\n/**\n * Checks if a time is valid (exists and can be parsed).\n *\n * @param time - The time to check\n * @returns True if the time is valid\n */\nexport function isValidTime(time: string | null): boolean {\n if (!time) return false;\n return timeToMinutes(time) > 0 || time === \"00:00\";\n}\n\n/**\n * Checks if a partial input might become valid as the user continues typing.\n * For example, \"1\" in a 10-11 AM range could become \"10:00 AM\" or \"11:00 AM\".\n * Or \"2\" in a 20:00-23:00 range could become \"20:00\", \"21:00\", etc.\n *\n * @param inputValue - The current input value (may include mask characters)\n * @param format - The time format (12 or 24 hour)\n * @param min - Minimum allowed time constraint\n * @param max - Maximum allowed time constraint\n * @returns True if the partial input could potentially become valid\n */\nexport function isPartialInputPotentiallyValid(\n inputValue: string,\n format: TimeFormat,\n min?: string,\n max?: string,\n): boolean {\n // Must have both constraints or neither\n if (!min || !max) return false;\n\n // Extract just the digits from the input\n const digits = inputValue.replace(/[^\\d]/g, \"\");\n\n // Only handle single digit case - check if it could start a valid hour\n if (digits.length === 1) {\n const digit = parseInt(digits, 10);\n\n // Convert constraints to minutes for easier comparison\n const minMinutes = timeToMinutes(min);\n const maxMinutes = timeToMinutes(max);\n\n // Check all possible hours this digit could represent\n for (let h = 0; h <= 23; h++) {\n // Check if this hour starts with our digit (check both padded and unpadded)\n const hourStr = h.toString().padStart(2, \"0\");\n const hourStrNoPad = h.toString();\n\n const startsWithDigit =\n hourStr.startsWith(digit.toString()) ||\n hourStrNoPad.startsWith(digit.toString());\n\n if (!startsWithDigit) continue;\n\n if (format === 24) {\n // 24-hour format - simple check\n const hourMinutes = h * 60;\n if (hourMinutes >= minMinutes && hourMinutes <= maxMinutes) {\n return true;\n }\n } else {\n // 12-hour format - check both AM and PM versions\n if (h === 0) {\n // Hour 0 = 12 AM (midnight)\n if (digit === 1) {\n // \"1\" could be \"12 AM\"\n const midnightMinutes = 0;\n if (\n midnightMinutes >= minMinutes &&\n midnightMinutes <= maxMinutes\n ) {\n return true;\n }\n }\n } else if (h >= 1 && h <= 12) {\n // Hours 1-12: check both AM and PM\n\n // AM version\n const amHour24 = h === 12 ? 0 : h; // 12 AM = hour 0, others stay same\n const amMinutes = amHour24 * 60;\n if (amMinutes >= minMinutes && amMinutes <= maxMinutes) {\n return true;\n }\n\n // PM version\n const pmHour24 = h === 12 ? 12 : h + 12; // 12 PM = hour 12, others add 12\n const pmMinutes = pmHour24 * 60;\n if (pmMinutes >= minMinutes && pmMinutes <= maxMinutes) {\n return true;\n }\n }\n }\n }\n }\n\n return false;\n}\n","import type { TimeFormat } from \"../types\";\nimport { timeToMinutes } from \"./timeParsing\";\nimport { isTimeOnStep, isValidTime } from \"./timeValidation\";\nimport { formatTimeString } from \"./timeFormatting\";\n\n/**\n * Options for auto-rounding functionality.\n */\nexport interface AutoRoundingOptions {\n /** Whether auto-rounding is enabled. */\n autoround: boolean;\n /** Time increment in minutes. */\n step?: number;\n /** Time format (12 or 24 hour). */\n format: TimeFormat;\n}\n\n/**\n * Gets the next future step for a given time based on the step increment.\n *\n * @param time - The current time string\n * @param step - The step increment in minutes\n * @param format - The time format (12 or 24 hour)\n * @returns The next step time string\n */\nexport function getNextFutureStep(\n time: string,\n step: number,\n format: TimeFormat,\n): string {\n if (!step || step <= 0) return time;\n\n // Convert time string to minutes\n const totalMinutes = timeToMinutes(time);\n\n // Find the next step that's AFTER the current time\n const nextStep = Math.ceil(totalMinutes / step) * step;\n\n // Convert back to string format\n const hours = Math.floor(nextStep / 60);\n const minutes = nextStep % 60;\n\n return formatTimeString(hours, minutes, format);\n}\n\n/**\n * Handles auto-rounding of time values based on step intervals.\n *\n * @param time - The time to potentially auto-round\n * @param options - Auto-rounding configuration options\n * @returns The rounded time or the original time if no rounding is needed\n */\nexport function handleAutoRounding(\n time: string | null,\n options: AutoRoundingOptions,\n): string | null {\n const { autoround, step, format } = options;\n\n if (!autoround || !time) return time;\n\n // Check if the time is already on a valid step\n const stepValue = step ?? 30;\n\n // If the time is already on a valid step, no rounding needed\n if (isTimeOnStep(time, stepValue)) {\n return time;\n }\n\n // Auto-round to the next step\n return getNextFutureStep(time, stepValue, format);\n}\n\n/**\n * Generates AM/PM variants for 12-hour format auto-rounding when user hasn't specified AM/PM.\n *\n * @param currentTime - The current time string\n * @param step - Step increment in minutes\n * @param inputValue - Original user input to check for AM/PM specification\n * @returns Array of time options (AM only, PM only, or both)\n */\nexport function generateAmPmVariants(\n currentTime: string,\n step: number,\n inputValue: string,\n): string[] {\n const hasAM = inputValue.toUpperCase().includes(\"AM\");\n const hasPM = inputValue.toUpperCase().includes(\"PM\");\n\n // Helper function to get next step for a given time\n const getNextStepForTime = (time: string) => {\n const currentMinutes = timeToMinutes(time);\n const nextStepMinutes = Math.ceil(currentMinutes / step) * step;\n const finalMinutes =\n nextStepMinutes === currentMinutes\n ? nextStepMinutes + step\n : nextStepMinutes;\n\n const hours = Math.floor(finalMinutes / 60);\n const minutes = finalMinutes % 60;\n return formatTimeString(hours, minutes, 12);\n };\n\n const nextStep = getNextFutureStep(currentTime, step, 12);\n\n // If user specified AM or PM, only show options in that period\n if (hasAM || hasPM) {\n return [nextStep];\n } else {\n // User didn't specify AM/PM, show both options\n // For PM version, add 12 hours to the current time\n const currentMinutes = timeToMinutes(currentTime);\n const pmMinutes = currentMinutes + 12 * 60;\n const pmHours = Math.floor(pmMinutes / 60);\n const pmMins = pmMinutes % 60;\n const pmVersion = getNextStepForTime(formatTimeString(pmHours, pmMins, 24));\n return [nextStep, pmVersion]; // Both AM and PM\n }\n}\n\n/**\n * Tries to generate PM interpretation options for ambiguous input.\n *\n * @param currentTime - The current time string\n * @param step - Step increment in minutes\n * @param inputValue - Original user input\n * @returns Array of PM time options or empty array\n */\nexport function generatePmInterpretation(\n currentTime: string,\n step: number,\n inputValue: string,\n): string[] {\n // Only try PM interpretation if no AM/PM was specified\n if (\n inputValue.toUpperCase().includes(\"AM\") ||\n inputValue.toUpperCase().includes(\"PM\")\n ) {\n return [];\n }\n\n // Try PM version of the current time\n const currentMinutes = timeToMinutes(currentTime);\n const pmMinutes = currentMinutes + 12 * 60;\n const pmHours = Math.floor(pmMinutes / 60);\n const pmMins = pmMinutes % 60;\n const pmTime = formatTimeString(pmHours, pmMins, 12);\n\n // Check if the PM time is valid\n if (isValidTime(pmTime)) {\n const pmNextStep = getNextFutureStep(pmTime, step, 12);\n return [pmNextStep];\n }\n\n return [];\n}\n\n/**\n * Gets auto-rounding options for dropdown suggestions when no matches are found.\n *\n * @param currentTime - The current parsed time\n * @param step - Step increment in minutes\n * @param format - Time format (12 or 24 hour)\n * @param inputValue - Original user input\n * @param min - Minimum time constraint\n * @returns Array of auto-rounded time options\n */\nexport function getAutoRoundingOptions(\n currentTime: string | null,\n step: number,\n format: TimeFormat,\n inputValue: string,\n min?: string,\n): string[] {\n if (!currentTime) {\n return [];\n }\n\n // Only add next future step if the current time is valid\n if (!isValidTime(currentTime)) {\n // For 12-hour format, try PM interpretation\n if (format === 12) {\n return generatePmInterpretation(currentTime, step, inputValue);\n }\n return [];\n }\n\n const nextStep = getNextFutureStep(currentTime, step, format);\n\n // For 12-hour format without time range, show AM/PM variants\n if (format === 12 && !min) {\n return generateAmPmVariants(currentTime, step, inputValue);\n }\n\n return [nextStep];\n}\n","import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoTimeOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\nimport type { TimeFormat } from \"../types\";\n\n/**\n * Creates Maskito options for time input with placeholder support.\n *\n * Features:\n * - Time-specific masking for 12/24 hour formats\n * - Placeholder character support\n * - Filtered preprocessors to avoid conflicts\n * - Combined plugins and postprocessors\n *\n * @param format - The time format (12 or 24 hour)\n * @param placeholder - The placeholder string to use\n * @returns Object containing Maskito options and removePlaceholder function\n */\nconst timePlaceholderMask = ({\n format,\n placeholder,\n}: {\n format: TimeFormat;\n placeholder: string;\n}) => {\n // Use Maskito Time Kit for time-specific options\n const timeOptions = maskitoTimeOptionsGenerator({\n mode: format === 12 ? \"HH:MM AA\" : \"HH:MM\",\n step: 0, // We handle step logic in your business layer\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const timePlaceholderMask = {\n ...timeOptions,\n plugins: plugins.concat(timeOptions.plugins || []),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...timeOptions.preprocessors,\n ],\n postprocessors: [\n ...timeOptions.postprocessors,\n ...placeholderOptions.postprocessors,\n ],\n } satisfies Required<MaskitoOptions>;\n\n return { options: timePlaceholderMask, removePlaceholder };\n};\n\nexport default timePlaceholderMask;\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { TimeFormat } from \"./types\";\nimport timePlaceholderMask from \"./maskito/timePlaceholderMask\";\nimport { useMaskito } from \"@maskito/react\";\nimport { useMergeRefs } from \"../../../hooks\";\nimport {\n CLOCK_ICON,\n TIME_CONSTANTS,\n TIME_FORMAT_PLACEHOLDERS,\n} from \"./constants\";\nimport { Icon } from \"../../Icon\";\nimport { convertTimeFormat, parseInputValue } from \"./utils/timeParsing\";\nimport { isPartialInputPotentiallyValid } from \"./utils/timeValidation\";\nimport {\n TextField,\n type TextFieldProps,\n} from \"../../TextField/internal/TextField\";\n\nimport cx from \"classnames\";\nimport styles from \"../TimeField.module.scss\";\n\n/**\n * Change event data for MaskedTimeInput onInputChange callback.\n */\nexport type MaskedTimeInputChange = {\n /**\n * The original input change event.\n */\n event: React.ChangeEvent<HTMLInputElement>;\n /**\n * The parsed time as a string if valid, otherwise null.\n */\n time: string | null;\n /**\n * True if the input matches the mask and is not empty.\n */\n isInputValid: boolean;\n /**\n * True if the input is empty.\n */\n isInputEmpty: boolean;\n};\n\n/**\n * Props for the MaskedTimeInput component.\n * @extends Omit<TextFieldProps, \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"prefix\" | \"type\" | \"maxLength\" | \"hint\">\n */\nexport interface MaskedTimeInputProps\n extends Omit<\n TextFieldProps,\n | \"onChange\"\n | \"value\"\n | \"ref\"\n | \"showCounter\"\n | \"prefix\"\n | \"type\"\n | \"maxLength\"\n | \"hint\"\n > {\n /**\n * External time selection from dropdown\n */\n selectedTime?: string | null;\n /**\n * The time format (12 or 24 hour).\n */\n format: TimeFormat;\n /**\n * The placeholder string for the input.\n */\n placeholder: string;\n /**\n * Minimum allowed time constraint.\n */\n min?: string;\n /**\n * Maximum allowed time constraint.\n */\n max?: string;\n /**\n * Callback fired when the input value changes.\n */\n onInputChange?: (change: MaskedTimeInputChange) => void;\n /**\n * Callback fired when a key is pressed.\n */\n onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the input receives focus.\n */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * Data attribute indicating if the current input is valid.\n */\n \"data-input-valid\"?: boolean;\n}\n\n/**\n * A masked time input component for entering time in 12/24 hour format.\n *\n * Features:\n * - Input masking and placeholder using Maskito\n * - Smart validation and parsing\n * - Hard-coded clock icon prefix\n * - Controlled or uncontrolled usage\n * - Automatic time format conversion\n * - Placeholder handling and cleanup\n *\n * @example\n * <MaskedTimeInput\n * selectedTime=\"14:30\"\n * format={24}\n * placeholder=\"––:––\"\n * onInputChange={(change) => {\n * console.log('Input changed:', change.time);\n * }}\n * />\n */\nexport const MaskedTimeInput = forwardRef<\n HTMLInputElement,\n MaskedTimeInputProps\n>(\n (\n {\n selectedTime,\n format,\n placeholder,\n min,\n max,\n onInputChange,\n onKeyDown,\n onFocus,\n onBlur,\n className,\n ...props\n },\n ref,\n ) => {\n const [inputValue, setInputValue] = useState(placeholder);\n\n const { options, removePlaceholder } = timePlaceholderMask({\n format,\n placeholder,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const isUserTypingRef = useRef(false);\n const inputValueRef = useRef<string>(placeholder);\n const previousPlaceholderRef = useRef<string>(placeholder);\n\n // Parse current input value - following DateFields pattern\n const currentParsedData = useMemo(() => {\n return parseInputValue(inputValue, format, removePlaceholder, min, max);\n }, [inputValue, format, removePlaceholder, min, max]);\n\n // Update refs when values change\n useEffect(() => {\n inputValueRef.current = inputValue;\n }, [inputValue]);\n\n useEffect(() => {\n previousPlaceholderRef.current = placeholder;\n }, [placeholder]);\n\n // Handle external selectedTime updates (e.g., from dropdown selections)\n useEffect(() => {\n if (selectedTime !== undefined && !isUserTypingRef.current) {\n const newInputValue = selectedTime\n ? convertTimeFormat(selectedTime, format)\n : placeholder;\n\n setInputValue(newInputValue);\n inputValueRef.current = newInputValue;\n }\n }, [selectedTime, format, placeholder]);\n\n // Handle placeholder changes\n useEffect(() => {\n // Only run when placeholder actually changes\n if (placeholder === previousPlaceholderRef.current) return;\n\n // Only update if input is actually a placeholder\n const isOldPlaceholder =\n inputValue === TIME_FORMAT_PLACEHOLDERS[12] ||\n inputValue === TIME_FORMAT_PLACEHOLDERS[24];\n\n if (isOldPlaceholder) {\n setInputValue(placeholder);\n }\n\n previousPlaceholderRef.current = placeholder;\n }, [placeholder, inputValue]);\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n isUserTypingRef.current = true;\n\n const { time, isInputValid, isInputEmpty } = parseInputValue(\n event.target.value,\n format,\n removePlaceholder,\n min,\n max,\n );\n\n // Check if this might be a potentially valid partial input\n const isPotentiallyValidPartial =\n !isInputValid &&\n !isInputEmpty &&\n event.target.value.length >= placeholder.length && // User is typing, not deleting\n isPartialInputPotentiallyValid(event.target.value, format, min, max);\n\n // Only update the input value if it's valid, empty, or potentially valid partial\n if (isInputValid || isInputEmpty || isPotentiallyValidPartial) {\n setInputValue(event.target.value);\n } else {\n // Reset to placeholder when input is invalid to clear the mask's internal state\n setInputValue(placeholder);\n }\n\n onInputChange?.({\n event,\n time,\n isInputValid,\n isInputEmpty,\n });\n\n // Reset typing flag after a delay\n setTimeout(() => {\n isUserTypingRef.current = false;\n }, TIME_CONSTANTS.INPUT_DEBOUNCE_TIMEOUT);\n },\n [format, removePlaceholder, onInputChange, min, max, placeholder],\n );\n\n const resetTypingFlag = useCallback(() => {\n isUserTypingRef.current = false;\n }, []);\n\n // Handle auto-completion on blur\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n // Auto-complete if we have a valid parsed time\n if (currentParsedData.time && currentParsedData.isInputValid) {\n const completedValue = convertTimeFormat(\n currentParsedData.time,\n format,\n );\n setInputValue(completedValue);\n }\n\n // Call parent's blur handler if provided\n onBlur?.(event);\n },\n [currentParsedData, format, onBlur],\n );\n\n useImperativeHandle(ref, () => {\n const input = inputRef.current;\n if (!input)\n return null as unknown as HTMLInputElement & {\n resetTypingFlag: () => void;\n };\n return Object.assign(input, {\n resetTypingFlag,\n });\n });\n\n const classNames = useMemo(() => {\n return cx(styles[\"time-field\"], className);\n }, [className]);\n\n return (\n <TextField\n ref={combinedRef}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n data-time={currentParsedData.time ?? \"\"}\n value={inputValue}\n onChange={handleChange}\n prefix={<Icon svg={CLOCK_ICON} />}\n autoComplete=\"off\"\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={handleBlur}\n className={classNames}\n {...props}\n />\n );\n },\n);\n\nMaskedTimeInput.displayName = \"MaskedTimeInput\";\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport type { DataTrackingId } from \"../../types\";\nimport type { TextFieldProps } from \"../TextField\";\nimport type { TimeFieldChangeHandler, TimeFormat } from \"./internal/types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport {\n useLayoutPropsUtil,\n useOptionallyControlledState,\n usePopoverCloseDelayWorkaround,\n} from \"../../internal/hooks\";\nimport { TIME_FORMAT_PLACEHOLDERS } from \"./internal/constants\";\nimport {\n filterTimeOptions,\n generateTimeOptions,\n} from \"./internal/utils/timeOptions\";\nimport {\n getAutoRoundingOptions,\n handleAutoRounding,\n} from \"./internal/utils/timeRounding\";\nimport {\n MaskedTimeInput,\n type MaskedTimeInputChange,\n} from \"./internal/MaskedTimeInput\";\nimport { Popover } from \"../../internal/components/Popover\";\nimport Listbox from \"../Listbox\";\n\n/**\n * Props for the TimeField component.\n * @extends Omit<TextFieldProps, \"onChange\" | \"value\" | \"defaultValue\" | \"type\" | \"min\" | \"max\" | \"step\" | \"maxLength\" | \"showCounter\">\n */\nexport type TimeFieldProps = Omit<\n TextFieldProps,\n | \"onChange\"\n | \"value\"\n | \"defaultValue\"\n | \"type\"\n | \"min\"\n | \"max\"\n | \"step\"\n | \"maxLength\"\n | \"showCounter\"\n | \"prefix\"\n> & {\n /**\n * The current value of the time field.\n * @example \"14:30\" or \"02:30 PM\"\n */\n value?: string | null;\n /**\n * The default value for uncontrolled mode.\n * @example \"14:30\" or \"02:30 PM\"\n */\n defaultValue?: string | null;\n /**\n * Callback when the time value changes.\n */\n onChange?: TimeFieldChangeHandler;\n /**\n * Time format to use.\n * @default 12\n */\n format?: TimeFormat;\n /**\n * Time increment in minutes.\n * @default 30\n */\n step?: number;\n /**\n * Whether to automatically round to the nearest step.\n * @default false\n */\n autoround?: boolean;\n /**\n * Whether to disable the dropdown suggestions.\n * @default false\n */\n disableSuggestions?: boolean;\n} & (\n | {\n /**\n * Minimum allowed time constraint.\n * @example \"09:00 AM\" or \"09:00\"\n */\n min: string;\n /**\n * Maximum allowed time constraint.\n * @example \"05:00 PM\" or \"17:00\"\n */\n max: string;\n }\n | {\n min?: never;\n max?: never;\n }\n ) &\n DataTrackingId;\n\n/**\n * TimeField component for entering time values with auto-rounding and suggestions.\n *\n * Features:\n * - Supports 12-hour and 24-hour time formats\n * - Min/max time constraints handled during input parsing\n * - Auto-rounding to step intervals when autoround is true\n * - Dropdown suggestions for quick time selection\n * - Controlled and uncontrolled modes\n * - Smart input masking with placeholders\n * - Integration with MaskedTimeInput for auto-complete\n * - Validation handled by implementors using onChange callback\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <TimeField\n * label=\"Meeting Time\"\n * value=\"14:30\"\n * format={24}\n * step={30}\n * min=\"09:00\"\n * max=\"17:00\"\n * autoround\n * disableSuggestions\n * onChange={(change) => {\n * // Handle time change and validation\n * if (change.isInputEmpty && required) {\n * // Show required error\n * }\n * }}\n * />\n */\nexport const TimeField = (props: TimeFieldProps) => {\n const { componentProps } = useLayoutPropsUtil(props);\n const {\n label,\n labelProps,\n size,\n value: valueProp,\n defaultValue,\n min,\n max,\n onChange,\n format = 12,\n step = 30,\n required,\n description,\n error: errorProp,\n disableSuggestions = false,\n autoround = false,\n className,\n disabled,\n ...rest\n } = componentProps;\n\n // Dropdown state management\n const [isDropdownOpen, setIsDropdownOpenRaw] = useState(false);\n\n const setIsDropdownOpen = (open: boolean) => {\n setIsDropdownOpenRaw(open);\n };\n\n const [selectedOptionIndex, setSelectedOptionIndex] = useState(0);\n const [inputValueForFiltering, setInputValueForFiltering] = useState(\"\");\n const [currentParsedTime, setCurrentParsedTime] = useState<string | null>(\n null,\n );\n\n // Controlled state for the visual input value when an option is selected from dropdown\n const [selectedTime, setSelectedTime] = useOptionallyControlledState<\n string | null\n >({\n controlledValue: valueProp,\n defaultValue: defaultValue ?? null,\n });\n\n // Get parsed data from MaskedTimeInput via data attributes\n const [inputParsedData, setInputParsedData] = useState<{\n time: string | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n }>({ time: null, isInputValid: false, isInputEmpty: true });\n\n // Track the last onChange call to prevent duplicate calls\n const lastOnChangeCallRef = useRef<{\n time: string | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n } | null>(null);\n\n // Track if dropdown is being clicked (vs tabbed to)\n const isDropdownClickingRef = useRef(false);\n\n // Track if we just made a selection (to prevent auto-reopening on focus)\n const [justSelected, setJustSelected] = useState(false);\n\n // Track if Tab was just pressed (to prevent useEffect from reopening dropdown)\n const tabJustPressedRef = useRef(false);\n // Set when the popover is explicitly closed (e.g. via Escape through useDismiss),\n // to prevent the auto-reopen effect from immediately reopening it while focus\n // stays on the input.\n const closeJustTriggeredRef = useRef(false);\n\n // Popover support and refs\n const inputRef = useRef<\n HTMLInputElement & {\n resetTypingFlag?: () => void;\n }\n >(null);\n const popoverContentRef = useRef<HTMLDivElement>(null);\n // Beta Popover.Trigger passes a callback ref (not RefObject) — store it in a ref\n // and delegate via a stable callback so useMergeRefs stays stable across renders.\n const popoverRefSetter = useRef<((node: Element | null) => void) | null>(\n null,\n );\n const popoverCallbackRef = useCallback((node: HTMLInputElement | null) => {\n popoverRefSetter.current?.(node);\n }, []);\n const combinedRef = useMergeRefs([popoverCallbackRef, inputRef]);\n\n // Get placeholder based on format\n const placeholder = TIME_FORMAT_PLACEHOLDERS[format];\n\n // Optimize dropdown rendering - only show options when dropdown is open\n const shouldShowOptionsFromHook =\n usePopoverCloseDelayWorkaround(isDropdownOpen);\n\n // Override the delay when Tab was just pressed to prevent empty popover\n const shouldShowOptions = tabJustPressedRef.current\n ? false\n : shouldShowOptionsFromHook;\n\n // Cleanup timeouts on unmount\n const dropdownTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Cleanup timeouts when component unmounts\n useEffect(() => {\n const dropdownRef = dropdownTimeoutRef.current;\n return () => {\n if (dropdownRef) {\n clearTimeout(dropdownRef);\n }\n };\n }, []);\n\n // Generate time options for dropdown\n const allTimeOptions = useMemo(\n () => generateTimeOptions({ step, min, max, format }),\n [step, min, max, format],\n );\n\n // Split the complex filtering logic into focused memos\n const baseFilteredOptions = useMemo(() => {\n // If no input or placeholder, show all options\n if (!inputValueForFiltering || inputValueForFiltering.match(/^[–_:]+$/)) {\n return allTimeOptions;\n }\n\n return filterTimeOptions(allTimeOptions, inputValueForFiltering);\n }, [allTimeOptions, inputValueForFiltering]);\n\n const autoRoundingOptions = useMemo(() => {\n // Only generate auto-rounding options if enabled and no base matches\n if (\n !autoround ||\n baseFilteredOptions.length > 0 ||\n !inputValueForFiltering ||\n inputValueForFiltering.match(/^[–_:]+$/)\n ) {\n return [];\n }\n\n // Get current time for auto-rounding logic\n const currentTime = currentParsedTime || inputParsedData.time;\n\n const autoRoundedOptions = getAutoRoundingOptions(\n currentTime,\n step ?? 30,\n format,\n inputValueForFiltering,\n min,\n );\n\n // Filter out any options that are already in baseFiltered\n return autoRoundedOptions.filter(\n (option) => !baseFilteredOptions.includes(option),\n );\n }, [\n autoround,\n baseFilteredOptions,\n inputValueForFiltering,\n currentParsedTime,\n inputParsedData.time,\n format,\n min,\n step,\n ]);\n\n const filteredOptions = useMemo(() => {\n // If input is completely invalid AND we have no matches, show all options\n if (baseFilteredOptions.length === 0 && autoRoundingOptions.length === 0) {\n if (\n !inputParsedData.isInputValid &&\n inputValueForFiltering &&\n !inputValueForFiltering.match(/^[–_:]+$/)\n ) {\n return allTimeOptions;\n }\n }\n\n return [...baseFilteredOptions, ...autoRoundingOptions];\n }, [\n baseFilteredOptions,\n autoRoundingOptions,\n allTimeOptions,\n inputValueForFiltering,\n inputParsedData.isInputValid,\n ]);\n\n // Handle blur - close dropdown and validate current input state\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n // Skip blur processing if clicking in the dropdown (prevents duplicate onChange)\n // but allow blur for other cases like tabbing away\n if (\n event.relatedTarget &&\n popoverContentRef.current?.contains(event.relatedTarget as Node) &&\n isDropdownClickingRef.current\n ) {\n isDropdownClickingRef.current = false; // Reset flag\n return;\n }\n\n // Close dropdown on blur\n setIsDropdownOpen(false);\n setSelectedOptionIndex(0);\n\n // Get parsed data from MaskedTimeInput data attributes - following DateFields pattern\n const input = event.target as HTMLInputElement;\n const parsedInputTime = input.dataset.time || null;\n const isInputValid = input.dataset.inputValid === \"true\";\n const isInputEmpty = input.dataset.inputEmpty === \"true\";\n\n // Use the parsed input time directly, don't fall back to old values\n let finalTime = parsedInputTime;\n\n // Auto-rounding logic - apply when autoround is enabled regardless of suggestions\n if (autoround && finalTime && isInputValid) {\n const beforeRounding = finalTime;\n finalTime = handleAutoRounding(finalTime, {\n autoround,\n step,\n format,\n });\n\n // If auto-rounding changed the time, update the visual input\n if (finalTime !== beforeRounding) {\n inputRef.current?.resetTypingFlag?.();\n setSelectedTime(finalTime);\n }\n }\n\n // Check if this onChange call would be a duplicate\n const currentChange = {\n time: finalTime,\n isInputValid,\n isInputEmpty,\n };\n\n const lastChange = lastOnChangeCallRef.current;\n const isDuplicate =\n lastChange &&\n lastChange.time === currentChange.time &&\n lastChange.isInputValid === currentChange.isInputValid &&\n lastChange.isInputEmpty === currentChange.isInputEmpty;\n\n // Only call onChange if this is not a duplicate\n if (!isDuplicate) {\n onChange?.(currentChange);\n lastOnChangeCallRef.current = currentChange;\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [format, step, autoround, onChange],\n );\n\n // Add focus handler\n const handleFocus = useCallback(() => {\n if (!disabled && !disableSuggestions && !justSelected) {\n setIsDropdownOpen(true);\n // Don't automatically select the first option on focus\n // This allows the input to remain empty when user just focuses\n setSelectedOptionIndex(0);\n }\n }, [disabled, disableSuggestions, justSelected]);\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n\n // Prevent the auto-reopen effect from immediately reopening while focus\n // remains on the (now disabled) input.\n closeJustTriggeredRef.current = true;\n setIsDropdownOpen(false);\n const timeoutId = window.setTimeout(() => {\n closeJustTriggeredRef.current = false;\n }, 50);\n\n return () => {\n window.clearTimeout(timeoutId);\n closeJustTriggeredRef.current = false;\n };\n }, [disabled]);\n\n // Handle dropdown state based on filtered options\n useEffect(() => {\n // Close dropdown if no options available or only 1 option (no choice to make)\n if (filteredOptions.length <= 1 && isDropdownOpen) {\n setIsDropdownOpen(false);\n }\n\n // Reopen dropdown when multiple options become available while input is focused\n if (\n !disabled &&\n !disableSuggestions &&\n filteredOptions.length > 1 &&\n document.activeElement &&\n document.activeElement.tagName === \"INPUT\" &&\n !isDropdownOpen &&\n !justSelected &&\n !tabJustPressedRef.current &&\n !closeJustTriggeredRef.current\n ) {\n setIsDropdownOpen(true);\n setSelectedOptionIndex(0);\n }\n }, [\n filteredOptions,\n disabled,\n disableSuggestions,\n isDropdownOpen,\n justSelected,\n ]);\n\n // Handle input changes from MaskedTimeInput\n const handleInputChange = (change: MaskedTimeInputChange) => {\n // Update input value for filtering\n setInputValueForFiltering(change.event.target.value);\n\n // Update current parsed time for auto-rounding logic\n setCurrentParsedTime(change.time);\n\n // Update parsed data state from the change event\n setInputParsedData({\n time: change.time,\n isInputValid: change.isInputValid,\n isInputEmpty: change.isInputEmpty,\n });\n\n // Reset selected option index when user types\n setSelectedOptionIndex(0);\n\n // Clear the just-selected flag when user starts typing\n setJustSelected(false);\n\n // Reset selectedTime when user types to allow consecutive auto-rounding\n setSelectedTime(null);\n };\n\n // Scroll the selected option into view within the popover\n const scrollToSelectedOption = useCallback(() => {\n if (!popoverContentRef.current || selectedOptionIndex < 0) return;\n\n // Get all option elements and select by index\n const optionElements =\n popoverContentRef.current.querySelectorAll('[role=\"option\"]');\n const targetElement = optionElements[selectedOptionIndex];\n\n if (targetElement) {\n targetElement.scrollIntoView({\n block: \"nearest\",\n behavior: \"auto\",\n });\n }\n }, [selectedOptionIndex]);\n\n // Scroll to selected option when selectedOptionIndex changes\n useEffect(() => {\n if (isDropdownOpen && selectedOptionIndex >= 0) {\n scrollToSelectedOption();\n }\n }, [selectedOptionIndex, isDropdownOpen, scrollToSelectedOption]);\n\n // Handle dropdown option selection (Enter key and mouse clicks)\n const handleOptionSelect = useCallback(\n (selectedTime: string) => {\n // Reset typing flag FIRST to ensure MaskedTimeInput will accept the new value\n if (inputRef.current?.resetTypingFlag) {\n inputRef.current.resetTypingFlag();\n }\n\n // Close dropdown after selection\n setIsDropdownOpen(false);\n setSelectedOptionIndex(0);\n\n // Set flag to prevent auto-reopening on focus\n setJustSelected(true);\n\n // Update all state to reflect the selection\n setCurrentParsedTime(selectedTime);\n setSelectedTime(selectedTime);\n\n const changeData = {\n time: selectedTime,\n isInputValid: true,\n isInputEmpty: false,\n };\n\n // Notify parent of the change\n onChange?.(changeData);\n\n // Update the last onChange call ref to prevent duplicate in blur\n lastOnChangeCallRef.current = changeData;\n\n // Focus the input after selection\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onChange],\n );\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isDropdownOpen) {\n return; // Let normal input behavior handle it\n }\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setSelectedOptionIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0,\n );\n break;\n case \"ArrowUp\":\n event.preventDefault();\n setSelectedOptionIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1,\n );\n break;\n case \"Enter\":\n event.preventDefault();\n if (filteredOptions[selectedOptionIndex]) {\n // Enter: select option, keep dropdown open\n handleOptionSelect(filteredOptions[selectedOptionIndex]);\n }\n break;\n case \"Tab\":\n // Set flag to prevent useEffect from reopening dropdown\n tabJustPressedRef.current = true;\n\n // Close dropdown and let natural tab behavior happen\n setIsDropdownOpen(false);\n setSelectedOptionIndex(0);\n\n // Clear the flag after blur completes\n setTimeout(() => {\n tabJustPressedRef.current = false;\n }, 50);\n break;\n }\n },\n [isDropdownOpen, selectedOptionIndex, filteredOptions, handleOptionSelect],\n );\n\n const popoverDisabled = disableSuggestions;\n\n const { aiMark, ...labelPropsWithoutAiMark } = labelProps || {};\n\n const data = {\n label: childrenToString(label),\n labelProps: labelPropsWithoutAiMark,\n description: childrenToString(description),\n size,\n format,\n step,\n min,\n max,\n autoround,\n disableSuggestions,\n };\n const trackingId = useTrackingId({\n name: \"TimeField\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n\n const justTheInput = (\n <MaskedTimeInput\n data-tracking-id={trackingId}\n ref={combinedRef}\n selectedTime={selectedTime}\n format={format}\n placeholder={placeholder}\n min={min}\n max={max}\n onInputChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n label={label}\n labelProps={labelProps}\n size={size}\n description={description}\n error={errorProp}\n className={popoverDisabled ? className : undefined}\n disabled={disabled}\n {...rest}\n aria-label={label ? undefined : \"Select a time\"}\n data-anv=\"time-field\"\n />\n );\n\n if (popoverDisabled) {\n return justTheInput;\n }\n\n return (\n <Popover\n open={isDropdownOpen}\n role=\"listbox\"\n noPadding\n placement=\"bottom-start\"\n matchReferenceWidth\n onClickOutside={() => {\n setIsDropdownOpen(false);\n }}\n onClose={() => {\n closeJustTriggeredRef.current = true;\n setIsDropdownOpen(false);\n setTimeout(() => {\n closeJustTriggeredRef.current = false;\n }, 50);\n }}\n fitScreen\n maxHeight={205}\n >\n <Popover.Trigger>\n {({ ref: setReference }) => {\n popoverRefSetter.current = setReference;\n return justTheInput;\n }}\n </Popover.Trigger>\n\n <Popover.Content\n ref={popoverContentRef}\n data-open={isDropdownOpen}\n data-disabled={disableSuggestions}\n onMouseDown={() => {\n // Set flag to indicate dropdown is being clicked (desktop)\n isDropdownClickingRef.current = true;\n }}\n onTouchStart={() => {\n // Set flag to indicate dropdown is being touched (mobile)\n isDropdownClickingRef.current = true;\n }}\n >\n {shouldShowOptions && (\n <Listbox\n selected={filteredOptions[selectedOptionIndex]}\n onSelectionChange={(selected: string | undefined) => {\n if (selected) {\n handleOptionSelect(selected);\n } else {\n // Re-select the same option instead of deselecting (for TimeField, we never want deselection)\n const currentOption = filteredOptions[selectedOptionIndex];\n if (currentOption) {\n handleOptionSelect(currentOption);\n }\n }\n }}\n aria-label=\"Time suggestions\"\n >\n {filteredOptions.map((option) => (\n <Listbox.Option key={option} value={option} label={option}>\n {option}\n </Listbox.Option>\n ))}\n </Listbox>\n )}\n </Popover.Content>\n </Popover>\n );\n};\n\nTimeField.displayName = \"TimeField\";\n"],"names":["IconAccessTime","timePlaceholderMask","selectedTime"],"mappings":"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"}