@servicetitan/anvil2 1.46.1 → 1.46.2

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 (231) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{Alert-BNGvfMAV.js → Alert-CPOBY6O5.js} +2 -2
  3. package/dist/{Alert-BNGvfMAV.js.map → Alert-CPOBY6O5.js.map} +1 -1
  4. package/dist/Alert.js +1 -1
  5. package/dist/{Announcement-CoheCP1i.js → Announcement-BvzAEdx8.js} +2 -2
  6. package/dist/{Announcement-CoheCP1i.js.map → Announcement-BvzAEdx8.js.map} +1 -1
  7. package/dist/Announcement.js +1 -1
  8. package/dist/AnvilProvider-C_qRQnE6.js.map +1 -1
  9. package/dist/Avatar-CyGjhToG.js.map +1 -1
  10. package/dist/Avatar-D07f9NH_.js.map +1 -1
  11. package/dist/Badge-DCA9mfc2.js.map +1 -1
  12. package/dist/Breadcrumbs-C4_PEolS.js.map +1 -1
  13. package/dist/{Button-BxFXQ0-n.js → Button-VNQQgZ45.js} +2 -2
  14. package/dist/{Button-BxFXQ0-n.js.map → Button-VNQQgZ45.js.map} +1 -1
  15. package/dist/Button.css +48 -48
  16. package/dist/Button.js +1 -1
  17. package/dist/Button.module-C1g9rrJs.js +25 -0
  18. package/dist/Button.module-C1g9rrJs.js.map +1 -0
  19. package/dist/{ButtonCompound-BF2Q6gGX.js → ButtonCompound-BbPK-Xjj.js} +2 -2
  20. package/dist/{ButtonCompound-BF2Q6gGX.js.map → ButtonCompound-BbPK-Xjj.js.map} +1 -1
  21. package/dist/ButtonCompound.js +1 -1
  22. package/dist/{ButtonLink-CXv65WVV.js → ButtonLink-CqR1F5Wn.js} +3 -3
  23. package/dist/{ButtonLink-CXv65WVV.js.map → ButtonLink-CqR1F5Wn.js.map} +1 -1
  24. package/dist/ButtonLink.js +1 -1
  25. package/dist/{ButtonToggle-pSwg7NvT.js → ButtonToggle-PCeSG-5D.js} +3 -3
  26. package/dist/{ButtonToggle-pSwg7NvT.js.map → ButtonToggle-PCeSG-5D.js.map} +1 -1
  27. package/dist/ButtonToggle.js +1 -1
  28. package/dist/{Calendar-BQ5F2ENO.js → Calendar-X9qUi6Vx.js} +269 -123
  29. package/dist/Calendar-X9qUi6Vx.js.map +1 -0
  30. package/dist/Calendar.js +1 -1
  31. package/dist/Card-vTYeSkxt.js.map +1 -1
  32. package/dist/{Checkbox-DDrmVC-u.js → Checkbox-BDohwHXQ.js} +2 -2
  33. package/dist/{Checkbox-DDrmVC-u.js.map → Checkbox-BDohwHXQ.js.map} +1 -1
  34. package/dist/{Checkbox-Dl4KTwEJ.js → Checkbox-CcYtto5f.js} +2 -2
  35. package/dist/{Checkbox-Dl4KTwEJ.js.map → Checkbox-CcYtto5f.js.map} +1 -1
  36. package/dist/Checkbox.js +2 -2
  37. package/dist/Chip-Bz-vlQ4D.js.map +1 -1
  38. package/dist/{Combobox-B9nesJuc.js → Combobox-DQmW8Tyl.js} +144 -53
  39. package/dist/Combobox-DQmW8Tyl.js.map +1 -0
  40. package/dist/Combobox.js +1 -1
  41. package/dist/{DateField-DXxPsRtf.js → DateField-C43nfkbx.js} +7 -7
  42. package/dist/{DateField-DXxPsRtf.js.map → DateField-C43nfkbx.js.map} +1 -1
  43. package/dist/DateField.js +1 -1
  44. package/dist/{DateFieldRange-Xauviu1w.js → DateFieldRange-g7n5QYww.js} +8 -8
  45. package/dist/{DateFieldRange-Xauviu1w.js.map → DateFieldRange-g7n5QYww.js.map} +1 -1
  46. package/dist/DateFieldRange.js +1 -1
  47. package/dist/{DateFieldSingle-yLnwpVzd.js → DateFieldSingle-D3tneqeG.js} +8 -8
  48. package/dist/{DateFieldSingle-yLnwpVzd.js.map → DateFieldSingle-D3tneqeG.js.map} +1 -1
  49. package/dist/DateFieldSingle.js +1 -1
  50. package/dist/{DateFieldYearless-Ba7HiTiI.js → DateFieldYearless-3JBVj3wn.js} +4 -4
  51. package/dist/{DateFieldYearless-Ba7HiTiI.js.map → DateFieldYearless-3JBVj3wn.js.map} +1 -1
  52. package/dist/DateFieldYearless.js +1 -1
  53. package/dist/{DaysOfTheWeek-BYSYZySH.js → DaysOfTheWeek-RcPgDoM3.js} +4 -4
  54. package/dist/{DaysOfTheWeek-BYSYZySH.js.map → DaysOfTheWeek-RcPgDoM3.js.map} +1 -1
  55. package/dist/DaysOfTheWeek.js +1 -1
  56. package/dist/Details-CF8DImjw.js.map +1 -1
  57. package/dist/{Dialog-CgkrvrQu.js → Dialog-FNJ16gY6.js} +6 -6
  58. package/dist/{Dialog-CgkrvrQu.js.map → Dialog-FNJ16gY6.js.map} +1 -1
  59. package/dist/Dialog.js +1 -1
  60. package/dist/Divider-DJe8kLf2.js.map +1 -1
  61. package/dist/Dnd.js +1 -1
  62. package/dist/DndSort.js +2 -2
  63. package/dist/DndSort.js.map +1 -1
  64. package/dist/{Drawer-CM4ZbAro.js → Drawer-DT31CMRd.js} +6 -6
  65. package/dist/{Drawer-CM4ZbAro.js.map → Drawer-DT31CMRd.js.map} +1 -1
  66. package/dist/Drawer.js +1 -1
  67. package/dist/{DrawerContext-DboTgTmo.js → DrawerContext-D4tWTLVf.js} +27 -10
  68. package/dist/DrawerContext-D4tWTLVf.js.map +1 -0
  69. package/dist/{EditCard-WKzZ2XCz.js → EditCard-CZzL0nx7.js} +2 -2
  70. package/dist/{EditCard-WKzZ2XCz.js.map → EditCard-CZzL0nx7.js.map} +1 -1
  71. package/dist/EditCard.js +1 -1
  72. package/dist/{FieldLabel-BsbTTyom.js → FieldLabel-BP8QK5UR.js} +2 -2
  73. package/dist/{FieldLabel-BsbTTyom.js.map → FieldLabel-BP8QK5UR.js.map} +1 -1
  74. package/dist/FieldLabel.js +1 -1
  75. package/dist/FieldMessage-B7uQ8vmr.js.map +1 -1
  76. package/dist/Flex-BdQMekvA.js.map +1 -1
  77. package/dist/Grid-MGUC698u.js.map +1 -1
  78. package/dist/Helper-BkIDJqgA.js.map +1 -1
  79. package/dist/Icon-D8SPKeO4.js.map +1 -1
  80. package/dist/{InputMask-_F139qFu.js → InputMask-CPuYMcw9.js} +3 -3
  81. package/dist/{InputMask-_F139qFu.js.map → InputMask-CPuYMcw9.js.map} +1 -1
  82. package/dist/InputMask.js +1 -1
  83. package/dist/Layout-CUUb2PVr.js.map +1 -1
  84. package/dist/Link-eRsLWPaQ.js.map +1 -1
  85. package/dist/LinkButton-2lXfrVoU.js.map +1 -1
  86. package/dist/{ListView-pb3rIcze.js → ListView-BJI8BQJ-.js} +2 -2
  87. package/dist/{ListView-pb3rIcze.js.map → ListView-BJI8BQJ-.js.map} +1 -1
  88. package/dist/ListView.js +1 -1
  89. package/dist/Listbox-CUhMbFm2.js.map +1 -1
  90. package/dist/LocalizationContext-UsmB5mnR.js.map +1 -1
  91. package/dist/LocalizationProvider-DEZyjW5d.js.map +1 -1
  92. package/dist/{Menu-DEVZz9xZ.js → Menu-t_11BIhU.js} +3 -3
  93. package/dist/{Menu-DEVZz9xZ.js.map → Menu-t_11BIhU.js.map} +1 -1
  94. package/dist/Menu.js +1 -1
  95. package/dist/{NumberField-CkZZrkYC.js → NumberField-Bjf9Tyvf.js} +6 -6
  96. package/dist/{NumberField-CkZZrkYC.js.map → NumberField-Bjf9Tyvf.js.map} +1 -1
  97. package/dist/NumberField.js +1 -1
  98. package/dist/Overflow.js.map +1 -1
  99. package/dist/{Page-BMDkbDcU.js → Page-BAyXnhz2.js} +9 -9
  100. package/dist/Page-BAyXnhz2.js.map +1 -0
  101. package/dist/Page.js +1 -1
  102. package/dist/{Pagination-BJsCppgW.js → Pagination-DCBic619.js} +47 -23
  103. package/dist/Pagination-DCBic619.js.map +1 -0
  104. package/dist/Pagination.css +6 -6
  105. package/dist/Pagination.js +1 -1
  106. package/dist/{Popover-r26xMIfm.js → Popover-CrksxqKk.js} +11 -5
  107. package/dist/Popover-CrksxqKk.js.map +1 -0
  108. package/dist/Popover.js +1 -1
  109. package/dist/PortalProvider-9lXkQ0xY.js.map +1 -1
  110. package/dist/{ProgressBar-DXcXZEJ2.js → ProgressBar-CgsAW2d8.js} +2 -2
  111. package/dist/{ProgressBar-DXcXZEJ2.js.map → ProgressBar-CgsAW2d8.js.map} +1 -1
  112. package/dist/ProgressBar.js +1 -1
  113. package/dist/{Radio-C89VCMXd.js → Radio-C_rvxw74.js} +2 -2
  114. package/dist/{Radio-C89VCMXd.js.map → Radio-C_rvxw74.js.map} +1 -1
  115. package/dist/Radio.js +2 -2
  116. package/dist/{RadioGroup-C_4buUtG.js → RadioGroup-DxBblSrx.js} +2 -2
  117. package/dist/{RadioGroup-C_4buUtG.js.map → RadioGroup-DxBblSrx.js.map} +1 -1
  118. package/dist/SearchField-Bb0uObwG.js.map +1 -1
  119. package/dist/{SegmentedControl-CsjjV1Dz.js → SegmentedControl-DC4BpdH5.js} +3 -3
  120. package/dist/{SegmentedControl-CsjjV1Dz.js.map → SegmentedControl-DC4BpdH5.js.map} +1 -1
  121. package/dist/SegmentedControl.js +1 -1
  122. package/dist/{SelectCard-BTYZg9TG.js → SelectCard-DunNE9R3.js} +3 -3
  123. package/dist/{SelectCard-BTYZg9TG.js.map → SelectCard-DunNE9R3.js.map} +1 -1
  124. package/dist/SelectCard.js +1 -1
  125. package/dist/{SelectTrigger-f1hvRrSC.js → SelectTrigger-BYysLREL.js} +2 -2
  126. package/dist/{SelectTrigger-f1hvRrSC.js.map → SelectTrigger-BYysLREL.js.map} +1 -1
  127. package/dist/SelectTrigger.js +1 -1
  128. package/dist/{SelectTriggerBase-DP9fmRSo.js → SelectTriggerBase-DqUpJgzk.js} +3 -3
  129. package/dist/{SelectTriggerBase-DP9fmRSo.js.map → SelectTriggerBase-DqUpJgzk.js.map} +1 -1
  130. package/dist/{SideNav-CBAzYyML.js → SideNav-B9AWmF_H.js} +2 -2
  131. package/dist/SideNav-B9AWmF_H.js.map +1 -0
  132. package/dist/SideNav.js +1 -1
  133. package/dist/Skeleton.js.map +1 -1
  134. package/dist/Spinner-wmO8Epw0.js.map +1 -1
  135. package/dist/SrOnly-CTsYSuby.js.map +1 -1
  136. package/dist/{Stepper-D-fOH9TF.js → Stepper-DHTrvfXw.js} +3 -3
  137. package/dist/{Stepper-D-fOH9TF.js.map → Stepper-DHTrvfXw.js.map} +1 -1
  138. package/dist/Stepper.js +1 -1
  139. package/dist/Switch-C2ddZcr9.js.map +1 -1
  140. package/dist/{Tab-wNucMTgo.js → Tab-0zx9hsw8.js} +44 -36
  141. package/dist/Tab-0zx9hsw8.js.map +1 -0
  142. package/dist/Tab.js +1 -1
  143. package/dist/Text-BqvcbXyp.js.map +1 -1
  144. package/dist/{TextField-D8fow9j7.js → TextField-CFWs3lm9.js} +2 -2
  145. package/dist/{TextField-D8fow9j7.js.map → TextField-CFWs3lm9.js.map} +1 -1
  146. package/dist/{TextField-BiHxlzE3.js → TextField-Cge6IRo5.js} +2 -2
  147. package/dist/{TextField-BiHxlzE3.js.map → TextField-Cge6IRo5.js.map} +1 -1
  148. package/dist/TextField.js +1 -1
  149. package/dist/{Textarea-BdVJJlbP.js → Textarea-CXd3NKkW.js} +2 -2
  150. package/dist/{Textarea-BdVJJlbP.js.map → Textarea-CXd3NKkW.js.map} +1 -1
  151. package/dist/Textarea.js +1 -1
  152. package/dist/ThemeProvider-Be3Pvtpz.js.map +1 -1
  153. package/dist/ThemeProviderContext-l52GohYT.js.map +1 -1
  154. package/dist/{TimeField-CmbErrsZ.js → TimeField-4v5aCwiG.js} +345 -355
  155. package/dist/TimeField-4v5aCwiG.js.map +1 -0
  156. package/dist/TimeField.js +1 -1
  157. package/dist/Toast.js +2 -2
  158. package/dist/{Toaster-9cpG_tWR.js → Toaster-D-rNSLTq.js} +17 -17
  159. package/dist/{Toaster-9cpG_tWR.js.map → Toaster-D-rNSLTq.js.map} +1 -1
  160. package/dist/{Toaster-B7zUwJOt.js → Toaster-bON5Xc1P.js} +2 -2
  161. package/dist/{Toaster-B7zUwJOt.js.map → Toaster-bON5Xc1P.js.map} +1 -1
  162. package/dist/{Toolbar-D4zuUFhb.js → Toolbar-B2Jsuptz.js} +14 -14
  163. package/dist/{Toolbar-D4zuUFhb.js.map → Toolbar-B2Jsuptz.js.map} +1 -1
  164. package/dist/Toolbar.js +1 -1
  165. package/dist/{Tooltip-BI3Xs75X.js → Tooltip-CtCLw_vx.js} +8 -2
  166. package/dist/{Tooltip-BI3Xs75X.js.map → Tooltip-CtCLw_vx.js.map} +1 -1
  167. package/dist/Tooltip.js +1 -1
  168. package/dist/TrackingProvider-BtSjkmpM.js.map +1 -1
  169. package/dist/beta.js +1 -1
  170. package/dist/childrenToString-Bz9MqbHb.js.map +1 -1
  171. package/dist/components/Combobox/ComboboxTypes.d.ts +10 -5
  172. package/dist/components/Combobox/internal/ComboboxGroupContext.d.ts +1 -1
  173. package/dist/components/Combobox/internal/useGroups.d.ts +2 -2
  174. package/dist/components/DndSort/internal/test-utils.d.ts +1 -1
  175. package/dist/components/TimeField/TimeField.d.ts +4 -1
  176. package/dist/extends-Bg2s_OKl.js.map +1 -1
  177. package/dist/getActiveElement-BcSyVE7S.js.map +1 -1
  178. package/dist/getKeyboardFocusableElements-QqcABz0D.js.map +1 -1
  179. package/dist/{index-V5Ez2gq_.js → index-DrM3iid4.js} +2 -2
  180. package/dist/{index-V5Ez2gq_.js.map → index-DrM3iid4.js.map} +1 -1
  181. package/dist/index-tZvMCc77.js.map +1 -1
  182. package/dist/{index.esm-D889iexm.js → index.esm-BwMVvxTV.js} +199 -144
  183. package/dist/index.esm-BwMVvxTV.js.map +1 -0
  184. package/dist/index.js +45 -45
  185. package/dist/index.js.map +1 -1
  186. package/dist/makeZeroShortcutPreprocessor-CxsiGTRW.js.map +1 -1
  187. package/dist/{proxy-CreWmH-e.js → proxy-BbFHSE6L.js} +8631 -8680
  188. package/dist/proxy-BbFHSE6L.js.map +1 -0
  189. package/dist/{use-reduced-motion-znCm41qB.js → use-reduced-motion-DSpxmqyT.js} +3 -3
  190. package/dist/use-reduced-motion-DSpxmqyT.js.map +1 -0
  191. package/dist/useAccessibleColor-BYKjkGRg.js.map +1 -1
  192. package/dist/useBreakpoint-Cv5fnZxs.js.map +1 -1
  193. package/dist/{useDateFieldOrchestration-BNJCsRkS.js → useDateFieldOrchestration-DyAc3gPJ.js} +3 -3
  194. package/dist/{useDateFieldOrchestration-BNJCsRkS.js.map → useDateFieldOrchestration-DyAc3gPJ.js.map} +1 -1
  195. package/dist/{useDialogTransitionStates-2NaE_noq.js → useDialogTransitionStates-C1TtiwA_.js} +3 -3
  196. package/dist/{useDialogTransitionStates-2NaE_noq.js.map → useDialogTransitionStates-C1TtiwA_.js.map} +1 -1
  197. package/dist/useFocusWithin-BhhgRXdZ.js.map +1 -1
  198. package/dist/useInfiniteCombobox-WcRgC9p6.js.map +1 -1
  199. package/dist/useIntersectionObserver-BEmMDO3P.js.map +1 -1
  200. package/dist/useLayoutPropsUtil-DjD5IMh0.js.map +1 -1
  201. package/dist/useMergeRefs-Bde85AWI.js.map +1 -1
  202. package/dist/{useOnClickOutside-BHEWMLa9.js → useOnClickOutside-B1ddwORK.js} +5 -2
  203. package/dist/useOnClickOutside-B1ddwORK.js.map +1 -0
  204. package/dist/useOptionallyControlledState-DbDuos5L.js.map +1 -1
  205. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js.map +1 -1
  206. package/dist/{usePopoverSupport-DIjjfodl.js → usePopoverSupport-CWTCDfN2.js} +2 -2
  207. package/dist/{usePopoverSupport-DIjjfodl.js.map → usePopoverSupport-CWTCDfN2.js.map} +1 -1
  208. package/dist/usePrefersColorScheme-_hT7dK7_.js.map +1 -1
  209. package/dist/usePrevious-Bvq-5auG.js.map +1 -1
  210. package/dist/useSize.js.map +1 -1
  211. package/dist/{useSwipe-CULmVQEk.js → useSwipe-Cp-CJxLU.js} +2 -2
  212. package/dist/{useSwipe-CULmVQEk.js.map → useSwipe-Cp-CJxLU.js.map} +1 -1
  213. package/dist/useSwipe.js +1 -1
  214. package/dist/useTrackingContext-DRwDL8DE.js.map +1 -1
  215. package/dist/useTrackingId.js.map +1 -1
  216. package/package.json +12 -18
  217. package/dist/Button.module-pUNSKoVC.js +0 -25
  218. package/dist/Button.module-pUNSKoVC.js.map +0 -1
  219. package/dist/Calendar-BQ5F2ENO.js.map +0 -1
  220. package/dist/Combobox-B9nesJuc.js.map +0 -1
  221. package/dist/DrawerContext-DboTgTmo.js.map +0 -1
  222. package/dist/Page-BMDkbDcU.js.map +0 -1
  223. package/dist/Pagination-BJsCppgW.js.map +0 -1
  224. package/dist/Popover-r26xMIfm.js.map +0 -1
  225. package/dist/SideNav-CBAzYyML.js.map +0 -1
  226. package/dist/Tab-wNucMTgo.js.map +0 -1
  227. package/dist/TimeField-CmbErrsZ.js.map +0 -1
  228. package/dist/index.esm-D889iexm.js.map +0 -1
  229. package/dist/proxy-CreWmH-e.js.map +0 -1
  230. package/dist/use-reduced-motion-znCm41qB.js.map +0 -1
  231. package/dist/useOnClickOutside-BHEWMLa9.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tab-wNucMTgo.js","sources":["../../../node_modules/.pnpm/motion@12.4.10_@emotion+is-prop-valid@1.3.1_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../../../node_modules/.pnpm/motion@12.4.10_@emotion+is-prop-valid@1.3.1_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../../../node_modules/.pnpm/motion@12.4.10_@emotion+is-prop-valid@1.3.1_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/utils.mjs","../../../node_modules/.pnpm/motion@12.4.10_@emotion+is-prop-valid@1.3.1_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/index.mjs","../src/components/Tab/internal/TabContext.tsx","../src/components/Tab/TabButton.tsx","../../hammer-icon/mdi/round/arrow_back.svg","../../hammer-icon/mdi/round/arrow_forward.svg","../src/components/Tab/TabList.tsx","../src/components/Tab/TabPanel.tsx","../src/components/Tab/Tab.tsx"],"sourcesContent":["\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useRef, useContext, useInsertionEffect } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\n\n/**\n * Measurement functionality has to be within a separate component\n * to leverage snapshot lifecycle.\n */\nclass PopChildMeasure extends React.Component {\n getSnapshotBeforeUpdate(prevProps) {\n const element = this.props.childRef.current;\n if (element && prevProps.isPresent && !this.props.isPresent) {\n const parent = element.offsetParent;\n const parentWidth = parent instanceof HTMLElement ? parent.offsetWidth || 0 : 0;\n const size = this.props.sizeRef.current;\n size.height = element.offsetHeight || 0;\n size.width = element.offsetWidth || 0;\n size.top = element.offsetTop;\n size.left = element.offsetLeft;\n size.right = parentWidth - size.width - size.left;\n }\n return null;\n }\n /**\n * Required with getSnapshotBeforeUpdate to stop React complaining.\n */\n componentDidUpdate() { }\n render() {\n return this.props.children;\n }\n}\nfunction PopChild({ children, isPresent, anchorX }) {\n const id = useId();\n const ref = useRef(null);\n const size = useRef({\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n right: 0,\n });\n const { nonce } = useContext(MotionConfigContext);\n /**\n * We create and inject a style block so we can apply this explicit\n * sizing in a non-destructive manner by just deleting the style block.\n *\n * We can't apply size via render as the measurement happens\n * in getSnapshotBeforeUpdate (post-render), likewise if we apply the\n * styles directly on the DOM node, we might be overwriting\n * styles set via the style prop.\n */\n useInsertionEffect(() => {\n const { width, height, top, left, right } = size.current;\n if (isPresent || !ref.current || !width || !height)\n return;\n const x = anchorX === \"left\" ? `left: ${left}` : `right: ${right}`;\n ref.current.dataset.motionPopId = id;\n const style = document.createElement(\"style\");\n if (nonce)\n style.nonce = nonce;\n document.head.appendChild(style);\n if (style.sheet) {\n style.sheet.insertRule(`\n [data-motion-pop-id=\"${id}\"] {\n position: absolute !important;\n width: ${width}px !important;\n height: ${height}px !important;\n ${x}px !important;\n top: ${top}px !important;\n }\n `);\n }\n return () => {\n document.head.removeChild(style);\n };\n }, [isPresent]);\n return (jsx(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size, children: React.cloneElement(children, { ref }) }));\n}\n\nexport { PopChild };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useCallback, useMemo } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PopChild } from './PopChild.mjs';\n\nconst PresenceChild = ({ children, initial, isPresent, onExitComplete, custom, presenceAffectsLayout, mode, anchorX, }) => {\n const presenceChildren = useConstant(newChildrenMap);\n const id = useId();\n const memoizedOnExitComplete = useCallback((childId) => {\n presenceChildren.set(childId, true);\n for (const isComplete of presenceChildren.values()) {\n if (!isComplete)\n return; // can stop searching when any is incomplete\n }\n onExitComplete && onExitComplete();\n }, [presenceChildren, onExitComplete]);\n const context = useMemo(() => ({\n id,\n initial,\n isPresent,\n custom,\n onExitComplete: memoizedOnExitComplete,\n register: (childId) => {\n presenceChildren.set(childId, false);\n return () => presenceChildren.delete(childId);\n },\n }), \n /**\n * If the presence of a child affects the layout of the components around it,\n * we want to make a new context value to ensure they get re-rendered\n * so they can detect that layout change.\n */\n presenceAffectsLayout\n ? [Math.random(), memoizedOnExitComplete]\n : [isPresent, memoizedOnExitComplete]);\n useMemo(() => {\n presenceChildren.forEach((_, key) => presenceChildren.set(key, false));\n }, [isPresent]);\n /**\n * If there's no `motion` components to fire exit animations, we want to remove this\n * component immediately.\n */\n React.useEffect(() => {\n !isPresent &&\n !presenceChildren.size &&\n onExitComplete &&\n onExitComplete();\n }, [isPresent]);\n if (mode === \"popLayout\") {\n children = (jsx(PopChild, { isPresent: isPresent, anchorX: anchorX, children: children }));\n }\n return (jsx(PresenceContext.Provider, { value: context, children: children }));\n};\nfunction newChildrenMap() {\n return new Map();\n}\n\nexport { PresenceChild };\n","import { Children, isValidElement } from 'react';\n\nconst getChildKey = (child) => child.key || \"\";\nfunction onlyElements(children) {\n const filtered = [];\n // We use forEach here instead of map as map mutates the component key by preprending `.$`\n Children.forEach(children, (child) => {\n if (isValidElement(child))\n filtered.push(child);\n });\n return filtered;\n}\n\nexport { getChildKey, onlyElements };\n","\"use client\";\nimport { jsx, Fragment } from 'react/jsx-runtime';\nimport { useMemo, useRef, useState, useContext } from 'react';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { usePresence } from './use-presence.mjs';\nimport { onlyElements, getChildKey } from './utils.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\n/**\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\n *\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\n *\n * Any `motion` components that have an `exit` property defined will animate out when removed from\n * the tree.\n *\n * ```jsx\n * import { motion, AnimatePresence } from 'framer-motion'\n *\n * export const Items = ({ items }) => (\n * <AnimatePresence>\n * {items.map(item => (\n * <motion.div\n * key={item.id}\n * initial={{ opacity: 0 }}\n * animate={{ opacity: 1 }}\n * exit={{ opacity: 0 }}\n * />\n * ))}\n * </AnimatePresence>\n * )\n * ```\n *\n * You can sequence exit animations throughout a tree using variants.\n *\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\n * once all `motion` components have finished animating out. Likewise, any components using\n * `usePresence` all need to call `safeToRemove`.\n *\n * @public\n */\nconst AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = \"sync\", propagate = false, anchorX = \"left\", }) => {\n const [isParentPresent, safeToRemove] = usePresence(propagate);\n /**\n * Filter any children that aren't ReactElements. We can only track components\n * between renders with a props.key.\n */\n const presentChildren = useMemo(() => onlyElements(children), [children]);\n /**\n * Track the keys of the currently rendered children. This is used to\n * determine which children are exiting.\n */\n const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);\n /**\n * If `initial={false}` we only want to pass this to components in the first render.\n */\n const isInitialRender = useRef(true);\n /**\n * A ref containing the currently present children. When all exit animations\n * are complete, we use this to re-render the component with the latest children\n * *committed* rather than the latest children *rendered*.\n */\n const pendingPresentChildren = useRef(presentChildren);\n /**\n * Track which exiting children have finished animating out.\n */\n const exitComplete = useConstant(() => new Map());\n /**\n * Save children to render as React state. To ensure this component is concurrent-safe,\n * we check for exiting children via an effect.\n */\n const [diffedChildren, setDiffedChildren] = useState(presentChildren);\n const [renderedChildren, setRenderedChildren] = useState(presentChildren);\n useIsomorphicLayoutEffect(() => {\n isInitialRender.current = false;\n pendingPresentChildren.current = presentChildren;\n /**\n * Update complete status of exiting children.\n */\n for (let i = 0; i < renderedChildren.length; i++) {\n const key = getChildKey(renderedChildren[i]);\n if (!presentKeys.includes(key)) {\n if (exitComplete.get(key) !== true) {\n exitComplete.set(key, false);\n }\n }\n else {\n exitComplete.delete(key);\n }\n }\n }, [renderedChildren, presentKeys.length, presentKeys.join(\"-\")]);\n const exitingChildren = [];\n if (presentChildren !== diffedChildren) {\n let nextChildren = [...presentChildren];\n /**\n * Loop through all the currently rendered components and decide which\n * are exiting.\n */\n for (let i = 0; i < renderedChildren.length; i++) {\n const child = renderedChildren[i];\n const key = getChildKey(child);\n if (!presentKeys.includes(key)) {\n nextChildren.splice(i, 0, child);\n exitingChildren.push(child);\n }\n }\n /**\n * If we're in \"wait\" mode, and we have exiting children, we want to\n * only render these until they've all exited.\n */\n if (mode === \"wait\" && exitingChildren.length) {\n nextChildren = exitingChildren;\n }\n setRenderedChildren(onlyElements(nextChildren));\n setDiffedChildren(presentChildren);\n /**\n * Early return to ensure once we've set state with the latest diffed\n * children, we can immediately re-render.\n */\n return null;\n }\n if (process.env.NODE_ENV !== \"production\" &&\n mode === \"wait\" &&\n renderedChildren.length > 1) {\n console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to \"wait\". This will lead to odd visual behaviour.`);\n }\n /**\n * If we've been provided a forceRender function by the LayoutGroupContext,\n * we can use it to force a re-render amongst all surrounding components once\n * all components have finished animating out.\n */\n const { forceRender } = useContext(LayoutGroupContext);\n return (jsx(Fragment, { children: renderedChildren.map((child) => {\n const key = getChildKey(child);\n const isPresent = propagate && !isParentPresent\n ? false\n : presentChildren === renderedChildren ||\n presentKeys.includes(key);\n const onExit = () => {\n if (exitComplete.has(key)) {\n exitComplete.set(key, true);\n }\n else {\n return;\n }\n let isEveryExitComplete = true;\n exitComplete.forEach((isExitComplete) => {\n if (!isExitComplete)\n isEveryExitComplete = false;\n });\n if (isEveryExitComplete) {\n forceRender === null || forceRender === void 0 ? void 0 : forceRender();\n setRenderedChildren(pendingPresentChildren.current);\n propagate && (safeToRemove === null || safeToRemove === void 0 ? void 0 : safeToRemove());\n onExitComplete && onExitComplete();\n }\n };\n return (jsx(PresenceChild, { isPresent: isPresent, initial: !isInitialRender.current || initial\n ? undefined\n : false, custom: custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode, onExitComplete: isPresent ? undefined : onExit, anchorX: anchorX, children: child }, key));\n }) }));\n};\n\nexport { AnimatePresence };\n","import { createContext, Dispatch, KeyboardEvent, SetStateAction } from \"react\";\n\ntype TabContextProps = {\n current: number; // id of tabpanel\n setCurrent?: Dispatch<SetStateAction<number>>;\n focus: number; // id of tabpanel\n setFocus?: Dispatch<SetStateAction<number>>;\n items?: NodeListOf<HTMLElement>;\n uid?: string;\n onKeyDownHandler?: (e: KeyboardEvent<HTMLButtonElement>) => void;\n gotoNext?: (refocus?: boolean) => void;\n goToPrev?: (refocus?: boolean) => void;\n dir?: string;\n};\n\nconst initialValue = {\n current: 0,\n focus: 0,\n};\n\nexport const TabContext = createContext<TabContextProps>(initialValue);\n","import {\n forwardRef,\n useContext,\n MouseEvent,\n useRef,\n ComponentPropsWithoutRef,\n KeyboardEvent,\n} from \"react\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport { DataTrackingId } from \"../../types\";\nimport { TabContext } from \"./internal/TabContext\";\n\nimport styles from \"./Tab.module.scss\";\nimport cx from \"classnames\";\n/**\n * Props for the TabButton component\n * @extends Omit<ComponentPropsWithoutRef<\"button\">, \"onClick\" | \"disabled\">\n */\nexport type TabButtonProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"onClick\" | \"disabled\"\n> & {\n /**\n * Unique identifier for the tab button.\n */\n id: string;\n /**\n * ID of the tab panel that this button controls.\n */\n controls: string;\n /**\n * Callback function called when the tab button is clicked.\n * @param e The mouse event\n * @param index The index of the tab button\n */\n onClick?: (e: MouseEvent<HTMLButtonElement>, index?: number) => void;\n} & DataTrackingId;\n\n/**\n * TabButton component for individual tab navigation buttons.\n *\n * Features:\n * - Automatic ARIA attributes for accessibility\n * - Visual indicator for active state\n * - Keyboard navigation support\n * - Smooth animations with reduced motion support\n * - Proper focus management\n * - RTL language support\n *\n * @example\n * <Tab.Button id=\"tab1\" controls=\"panel1\" onClick={(e, index) => console.log('Tab clicked:', index)}>\n * First Tab\n * </Tab.Button>\n */\nexport const TabButton = forwardRef<HTMLButtonElement, TabButtonProps>(\n (props, ref) => {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const shouldReduceMotion = useReducedMotion();\n const {\n current,\n items,\n setCurrent,\n focus,\n setFocus,\n onKeyDownHandler: focusController,\n uid,\n } = useContext(TabContext);\n\n const {\n onClick,\n children,\n onFocus,\n onKeyDown,\n controls,\n id,\n className,\n style,\n ...rest\n } = props;\n\n const index =\n items && Array.prototype.indexOf.call(items, buttonRef.current);\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n if (index === undefined) return;\n onClick?.(e, index);\n\n setCurrent?.(index);\n\n setFocus?.(index);\n items?.[index].focus();\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLButtonElement>) => {\n focusController?.(e);\n onKeyDown?.(e);\n };\n\n const data = {\n id,\n controls,\n };\n\n const trackingId = useTrackingId({\n name: \"TabButton\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n\n const tabButtonClassNames = cx(styles[\"tab-button\"], className);\n\n return (\n <button\n data-tracking-id={trackingId}\n type=\"button\"\n role=\"tab\"\n data-anv=\"tab-button\"\n id={id}\n className={tabButtonClassNames}\n aria-selected={items?.[current].id === id}\n aria-controls={controls}\n onClick={onClickHandler}\n onKeyDown={onKeyDownHandler}\n tabIndex={items?.[focus].id === id ? 0 : -1}\n {...rest}\n ref={useMergeRefs([buttonRef, ref])}\n >\n <span className={styles[\"inner\"]}>{children}</span>\n {items?.[current].id === id && (\n <motion.span\n layoutId={uid}\n className={styles[\"indicator\"]}\n transition={{\n duration: shouldReduceMotion\n ? 0\n : +core.primitive.Duration.value.replace(\"ms\", \"\") / 1000,\n }}\n />\n )}\n </button>\n );\n },\n);\n\nTabButton.displayName = \"TabButton\";\n","import * as React from \"react\";\nconst SvgArrowBack = (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: \"M19 11H7.83l4.88-4.88c.39-.39.39-1.03 0-1.42a.996.996 0 0 0-1.41 0l-6.59 6.59a.996.996 0 0 0 0 1.41l6.59 6.59a.996.996 0 1 0 1.41-1.41L7.83 13H19c.55 0 1-.45 1-1s-.45-1-1-1z\" }));\nexport default SvgArrowBack;\n","import * as React from \"react\";\nconst SvgArrowForward = (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: \"M5 13h11.17l-4.88 4.88c-.39.39-.39 1.03 0 1.42.39.39 1.02.39 1.41 0l6.59-6.59a.996.996 0 0 0 0-1.41l-6.58-6.6a.996.996 0 1 0-1.41 1.41L16.17 11H5c-.55 0-1 .45-1 1s.45 1 1 1z\" }));\nexport default SvgArrowForward;\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useState,\n UIEvent,\n useContext,\n useLayoutEffect,\n useRef,\n useCallback,\n} from \"react\";\nimport ArrowBack from \"@servicetitan/hammer-icon/mdi/round/arrow_back.svg\";\nimport ArrowForward from \"@servicetitan/hammer-icon/mdi/round/arrow_forward.svg\";\nimport { Icon } from \"../Icon\";\n\nimport cx from \"classnames\";\nimport styles from \"./Tab.module.scss\";\nimport { TabContext } from \"./internal/TabContext\";\n\n/**\n * Props for the TabList component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type TabListProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * TabList component for containing and managing tab buttons.\n *\n * Features:\n * - Horizontal scrolling for overflow tabs\n * - Navigation arrows for overflow content\n * - RTL language support\n * - Automatic overflow detection\n * - Proper ARIA roles for accessibility\n * - Smooth scrolling behavior\n * - Visual indicator positioning\n *\n * @example\n * <Tab.List>\n * <Tab.Button id=\"tab1\" controls=\"panel1\">First Tab</Tab.Button>\n * <Tab.Button id=\"tab2\" controls=\"panel2\">Second Tab</Tab.Button>\n * <Tab.Button id=\"tab3\" controls=\"panel3\">Third Tab</Tab.Button>\n * </Tab.List>\n */\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(\n (props, ref) => {\n const { className, children, onKeyDown, ...rest } = props;\n const { goToPrev, gotoNext, dir } = useContext(TabContext);\n const [leftOverflow, setLeftOverflow] = useState(false);\n const [rightOverflow, setRightOverflow] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n const [indicatorPos, _setIndicatorPos] = useState<{\n left: number;\n width: number;\n }>();\n\n const calculateOverflow = useCallback(\n (el: HTMLElement) => {\n const leftOverflows =\n dir === \"ltr\"\n ? el.scrollLeft > 0\n : el.scrollLeft > el.offsetWidth - el.scrollWidth + 1;\n const rightOverflows =\n dir === \"ltr\"\n ? el.scrollLeft < el.scrollWidth - el.offsetWidth\n : el.scrollLeft < 0;\n setLeftOverflow(leftOverflows);\n setRightOverflow(rightOverflows);\n },\n [dir],\n );\n\n useLayoutEffect(() => {\n if (!scrollRef.current) return;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n calculateOverflow(entry.target as HTMLElement);\n }\n });\n\n observer.observe(scrollRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }, [calculateOverflow]);\n\n // update overflow position on scroll\n const overflowPosition = (e: UIEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n calculateOverflow(target);\n };\n\n const tabListClassNames = cx(styles[\"tab-list\"], className);\n\n const scrollerClassNames = cx(styles[\"scroller\"], {\n [styles[\"left\"]]: leftOverflow,\n [styles[\"right\"]]: rightOverflow,\n });\n\n return (\n <div\n {...rest}\n className={tabListClassNames}\n data-anv=\"tab-list\"\n ref={ref}\n >\n {(dir === \"ltr\" ? leftOverflow : rightOverflow) && (\n <button\n tabIndex={-1}\n onClick={() => goToPrev?.(false)}\n className={styles[\"overflow-prev\"]}\n aria-label=\"Previous tab\"\n >\n <Icon svg={ArrowBack} aria-hidden size=\"medium\" />\n </button>\n )}\n <div\n onScroll={overflowPosition}\n className={scrollerClassNames}\n role=\"tablist\"\n ref={scrollRef}\n >\n {children}\n <span\n className={styles[\"indicator\"]}\n style={{\n insetInlineStart: dir === \"ltr\" ? indicatorPos?.left : undefined,\n insetInlineEnd: dir === \"rtl\" ? indicatorPos?.left : undefined,\n width: indicatorPos?.width,\n }}\n />\n </div>\n {(dir === \"ltr\" ? rightOverflow : leftOverflow) && (\n <button\n tabIndex={-1}\n onClick={() => gotoNext?.(false)}\n className={styles[\"overflow-next\"]}\n aria-label=\"Next tab\"\n >\n <Icon svg={ArrowForward} aria-hidden size=\"medium\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nTabList.displayName = \"TabList\";\n","import { ComponentPropsWithoutRef, forwardRef, useContext } from \"react\";\nimport { motion } from \"motion/react\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport { TabContext } from \"./internal/TabContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./Tab.module.scss\";\n\n/**\n * Props for the TabPanel component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\">\n */\nexport type TabPanelProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\"\n> & {\n /**\n * Unique identifier for the tab panel.\n */\n id: string;\n};\n\n/**\n * TabPanel component for displaying tab content.\n *\n * Features:\n * - Automatic visibility based on active tab\n * - Smooth fade animations\n * - Proper ARIA attributes for accessibility\n * - Automatic association with tab buttons\n * - Focus management\n * - Layout animations\n *\n * @example\n * <Tab.Panel id=\"panel1\">\n * <h2>First Tab Content</h2>\n * <p>This is the content for the first tab.</p>\n * </Tab.Panel>\n */\nexport const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(\n (props, ref) => {\n const { id, className, style, ...rest } = props;\n const { current, items } = useContext(TabContext);\n\n let labelledby;\n\n items?.forEach((el) => {\n const controlId = el.getAttribute(\"aria-controls\");\n if (controlId === id) {\n labelledby = el.id;\n }\n });\n const currentId = items?.[current]?.getAttribute(\"aria-controls\");\n const isCurrent = currentId === id;\n\n const tabPanelClassNames = cx(styles[\"tab-panel\"], className);\n\n if (!isCurrent) return null;\n return (\n <motion.div\n className={tabPanelClassNames}\n transition={{\n opacity: {\n duration:\n +core.primitive.DurationSlow.value.replace(\"ms\", \"\") / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n layout\n {...rest}\n role=\"tabpanel\"\n data-anv=\"tab-panel\"\n id={id}\n aria-labelledby={labelledby}\n tabIndex={0}\n ref={ref}\n />\n );\n },\n);\n\nTabPanel.displayName = \"TabPanel\";\n","import {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n Ref,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { TabButton } from \"./TabButton\";\nimport { TabList } from \"./TabList\";\nimport { TabPanel } from \"./TabPanel\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { TabContext } from \"./internal/TabContext\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { useMergeRefs } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./Tab.module.scss\";\n\n/**\n * Props for the Tab component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\">\n * @extends LayoutUtilProps\n */\nexport type TabProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\"\n> &\n LayoutUtilProps & {\n /**\n * The index of the tab that should be active by default.\n */\n defaultIndex: number;\n /**\n * Whether the tabs should fill the available width.\n * @default false\n */\n fill?: boolean;\n };\n\nconst TabElement = forwardRef((props: TabProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { defaultIndex, className, style, fill, ...rest } = componentProps;\n const tabRef = useRef<HTMLDivElement>(null);\n const [items, setItems] = useState<NodeListOf<HTMLElement>>();\n const [current, setCurrent] = useState<number>(defaultIndex ?? 0);\n const [focus, setFocus] = useState<number>(defaultIndex ?? 0);\n const [dir, setDir] = useState(\"ltr\");\n const uid = useId();\n\n useEffect(() => {\n setItems(tabRef.current?.querySelectorAll(\"[role=tab]:not([disabled])\"));\n }, [tabRef]);\n\n useEffect(() => {\n if (tabRef.current?.closest(\"[dir]\")?.getAttribute(\"dir\") === \"rtl\") {\n setDir(\"rtl\");\n } else {\n setDir(\"ltr\");\n }\n }, []);\n\n useEffect(() => {\n if (!tabRef.current) return;\n\n const mutationCallback = () => {\n setItems(tabRef.current?.querySelectorAll(\"[role=tab]:not([disabled])\"));\n };\n\n const observer = new MutationObserver(mutationCallback);\n observer.observe(tabRef.current, {\n childList: true, // Observe changes to child elements\n subtree: true, // Observe changes to descendants of the target\n attributes: true, // Observe changes to attributes\n characterData: true, // Observe changes to text content\n });\n return () => {\n observer.disconnect();\n };\n }, []);\n\n // scroll behavior of the focus tab item\n const focusScroller = (node: HTMLElement | undefined) => {\n node?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n });\n };\n\n const gotoNext = useCallback(\n (_refocus = true) => {\n if (focus + 1 === items?.length) {\n setFocus?.(0);\n items?.[0].focus();\n focusScroller(items?.[0]);\n return;\n }\n setFocus?.(focus + 1);\n items?.[focus + 1].focus();\n focusScroller(items?.[focus + 1]);\n },\n [focus, items],\n );\n\n const goToPrev = useCallback(\n (_refocus = true) => {\n if (focus === 0) {\n const lastItemIndex = items ? items?.length - 1 : 0;\n setFocus?.(lastItemIndex);\n items?.[lastItemIndex].focus();\n focusScroller(items?.[lastItemIndex]);\n return;\n }\n setFocus?.(focus - 1);\n items?.[focus - 1].focus();\n focusScroller(items?.[focus - 1]);\n },\n [focus, items],\n );\n\n const onKeyDownHandler = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n setCurrent?.(focus);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (dir === \"ltr\") {\n gotoNext();\n } else {\n goToPrev();\n }\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n if (dir === \"ltr\") {\n goToPrev();\n } else {\n gotoNext();\n }\n break;\n default:\n break;\n }\n },\n [dir, focus, goToPrev, gotoNext],\n );\n\n const value = useMemo(\n () => ({\n current,\n setCurrent,\n focus,\n setFocus,\n items,\n uid,\n onKeyDownHandler,\n gotoNext,\n goToPrev,\n dir,\n }),\n [current, focus, goToPrev, gotoNext, items, onKeyDownHandler, uid, dir],\n );\n\n const tabClassNames = cx(styles[\"tab\"], className, {\n [styles[\"fill\"]]: fill,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <TabContext.Provider value={value}>\n <AnimatePresence initial={false}>\n <motion.div\n transition={{ duration: 0 }}\n layout\n className={tabClassNames}\n data-anv=\"tab\"\n style={styleCombined}\n {...rest}\n ref={useMergeRefs([tabRef, ref])}\n />\n </AnimatePresence>\n </TabContext.Provider>\n );\n});\n\nTabElement.displayName = \"Tab\";\n\n/**\n * Tab component for organizing content into multiple sections with navigation.\n *\n * Features:\n * - Keyboard navigation support (arrow keys, Enter, Space)\n * - Accessible with proper ARIA roles and attributes\n * - Smooth animations and transitions\n * - RTL language support\n * - Automatic focus management\n * - Scroll behavior for overflow tabs\n * - Compound component pattern with Tab.Button, Tab.List, and Tab.Panel\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <Tab defaultIndex={0}>\n * <Tab.List>\n * <Tab.Button id=\"tab1\" controls=\"panel1\">First Tab</Tab.Button>\n * <Tab.Button id=\"tab2\" controls=\"panel2\">Second Tab</Tab.Button>\n * </Tab.List>\n * <Tab.Panel id=\"panel1\">Content for first tab</Tab.Panel>\n * <Tab.Panel id=\"panel2\">Content for second tab</Tab.Panel>\n * </Tab>\n */\nexport const Tab = Object.assign(TabElement, {\n /**\n * TabButton component for individual tab navigation buttons.\n *\n * Features:\n * - Automatic ARIA attributes for accessibility\n * - Visual indicator for active state\n * - Keyboard navigation support\n * - Smooth animations with reduced motion support\n * - Proper focus management\n * - RTL language support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Tab.Button id=\"tab1\" controls=\"panel1\" onClick={(e, index) => console.log('Tab clicked:', index)}>\n * First Tab\n * </Tab.Button>\n */\n Button: TabButton,\n /**\n * TabList component for containing and managing tab buttons.\n *\n * Features:\n * - Horizontal scrolling for overflow tabs\n * - Navigation arrows for overflow content\n * - RTL language support\n * - Automatic overflow detection\n * - Proper ARIA roles for accessibility\n * - Smooth scrolling behavior\n * - Visual indicator positioning\n *\n * @example\n * <Tab.List>\n * <Tab.Button id=\"tab1\" controls=\"panel1\">First Tab</Tab.Button>\n * <Tab.Button id=\"tab2\" controls=\"panel2\">Second Tab</Tab.Button>\n * <Tab.Button id=\"tab3\" controls=\"panel3\">Third Tab</Tab.Button>\n * </Tab.List>\n */\n List: TabList,\n /**\n * TabPanel component for displaying tab content.\n *\n * Features:\n * - Automatic visibility based on active tab\n * - Smooth fade animations\n * - Proper ARIA attributes for accessibility\n * - Automatic association with tab buttons\n * - Focus management\n * - Layout animations\n *\n * @example\n * <Tab.Panel id=\"panel1\">\n * <h2>First Tab Content</h2>\n * <p>This is the content for the first tab.</p>\n * </Tab.Panel>\n */\n Panel: TabPanel,\n});\n"],"names":["index","core.primitive.Duration","ArrowBack","ArrowForward","core.primitive.DurationSlow"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimeField-CmbErrsZ.js","sources":["../../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 * 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { TextField, TextFieldProps } 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(\n ref,\n () =>\n ({\n ...inputRef.current,\n focus: () => inputRef.current?.focus(),\n resetTypingFlag,\n }) as HTMLInputElement & { resetTypingFlag: () => void },\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 {\n Ref,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport { TextFieldProps } from \"../TextField\";\nimport { TimeFieldChangeHandler, TimeFormat } from \"./internal/types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport {\n useLayoutPropsUtil,\n useOptionallyControlledState,\n usePopoverCloseDelayWorkaround,\n usePopoverSupport,\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 MaskedTimeInputChange,\n} from \"./internal/MaskedTimeInput\";\nimport Popover from \"../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 = forwardRef(\n (props: TimeFieldProps, ref: Ref<HTMLInputElement>) => {\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 ...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 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\n // Popover support and refs\n const inputRef = useRef<\n HTMLInputElement & {\n resetTypingFlag?: () => void;\n }\n >(null);\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([inputRef, ref]);\n const popoverSupported = usePopoverSupport();\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 (\n baseFilteredOptions.length === 0 &&\n autoRoundingOptions.length === 0\n ) {\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 (!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 }, [disableSuggestions, justSelected]);\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 !disableSuggestions &&\n filteredOptions.length > 1 &&\n document.activeElement &&\n document.activeElement.tagName === \"INPUT\" &&\n !isDropdownOpen &&\n !justSelected &&\n !tabJustPressedRef.current\n ) {\n setIsDropdownOpen(true);\n setSelectedOptionIndex(0);\n }\n }, [filteredOptions, disableSuggestions, isDropdownOpen, justSelected]);\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 [\n isDropdownOpen,\n selectedOptionIndex,\n filteredOptions,\n handleOptionSelect,\n ],\n );\n\n const popoverDisabled = disableSuggestions || !popoverSupported;\n\n const data = {\n label: childrenToString(label),\n labelProps,\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 {...rest}\n data-anv=\"time-field\"\n />\n );\n\n if (popoverDisabled) {\n return justTheInput;\n }\n\n return (\n <Popover\n open={isDropdownOpen}\n noPadding\n disableCaret\n placement=\"bottom-start\"\n matchReferenceWidth\n modal={false}\n onClickOutside={() => {\n setIsDropdownOpen(false);\n }}\n onClose={() => {\n setIsDropdownOpen(false);\n }}\n fitScreen\n maxHeight={205}\n >\n <Popover.Trigger>\n {({ ref: popoverRef }) => (\n <div\n ref={popoverRef as unknown as React.Ref<HTMLDivElement>}\n className={className}\n >\n {justTheInput}\n </div>\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);\n\nTimeField.displayName = \"TimeField\";\n"],"names":["IconAccessTime","timePlaceholderMask","selectedTime"],"mappings":";;;;;;;;;;;;;;;;;AACA,MAAM,aAAa,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,+RAA+R,EAAE,CAAC,CAAC;;ACG/f,MAAM,cAAiB,GAAA;AAAA;AAAA,EAE5B,cAAgB,EAAA,IAAA;AAAA;AAAA,EAEhB,WAAa,EAAA,EAAA;AAAA;AAAA,EAEb,UAAY,EAAA,EAAA;AAAA;AAAA,EAEZ,sBAAwB,EAAA;AAC1B,CAAA;AAaO,MAAM,wBAAuD,GAAA;AAAA,EAClE,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA;AACN,CAAA;AAKO,MAAM,UAAa,GAAAA,aAAA;;ACxBV,SAAA,gBAAA,CACd,KACA,EAAA,OAAA,EACA,MACQ,EAAA;AAER,EAAA,IAAI,UAAU,EAAI,EAAA;AAChB,IAAQ,KAAA,GAAA,CAAA;AAAA;AAGV,EAAA,IAAI,WAAW,EAAI,EAAA;AAEjB,IAAA,IAAI,YAAe,GAAA,KAAA;AACnB,IAAA,IAAI,MAAS,GAAA,IAAA;AAEb,IAAA,IAAI,UAAU,CAAG,EAAA;AACf,MAAe,YAAA,GAAA,EAAA;AAAA,KACjB,MAAA,IAAW,QAAQ,EAAI,EAAA;AACrB,MAAA,YAAA,GAAe,KAAQ,GAAA,EAAA;AACvB,MAAS,MAAA,GAAA,IAAA;AAAA,KACX,MAAA,IAAW,UAAU,EAAI,EAAA;AACvB,MAAS,MAAA,GAAA,IAAA;AAAA;AAGX,IAAA,OAAO,GAAG,YAAa,CAAA,QAAA,EAAW,CAAA,QAAA,CAAS,GAAG,GAAG,CAAC,CAAI,CAAA,EAAA,OAAA,CAAQ,UAAW,CAAA,QAAA,CAAS,GAAG,GAAG,CAAC,IAAI,MAAM,CAAA,CAAA;AAAA,GAC9F,MAAA;AAEL,IAAA,OAAO,CAAG,EAAA,KAAA,CAAM,QAAS,EAAA,CAAE,SAAS,CAAG,EAAA,GAAG,CAAC,CAAA,CAAA,EAAI,QAAQ,QAAS,EAAA,CAAE,QAAS,CAAA,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA;AAEtF;;AChCO,MAAM,WAAW,cAAe,CAAA,WAAA;AAKhC,MAAM,aAAa,cAAe,CAAA,UAAA;AAUzC,SAAS,oBAAA,CAAqB,KAAc,GAAc,EAAA;AACxD,EAAA,MAAM,aAAa,GAAM,GAAA,aAAA,CAAc,kBAAkB,GAAK,EAAA,EAAE,CAAC,CAAI,GAAA,CAAA;AACrE,EAAM,MAAA,UAAA,GAAa,MACf,aAAc,CAAA,iBAAA,CAAkB,KAAK,EAAE,CAAC,IACxC,cAAe,CAAA,cAAA;AACnB,EAAO,OAAA,EAAE,YAAY,UAAW,EAAA;AAClC;AAUA,SAAS,mBAAA,CACP,WACA,EAAA,UAAA,EACA,UACS,EAAA;AACT,EAAO,OAAA,WAAA,IAAe,cAAc,WAAe,IAAA,UAAA;AACrD;AAQa,MAAA,aAAA,GAAgB,CAAC,OAA4B,KAAA;AACxD,EAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,CAAM,qCAAqC,CAAA;AACjE,EAAI,IAAA,CAAC,OAAc,OAAA,CAAA;AAEnB,EAAA,IAAI,KAAQ,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AACjC,EAAA,MAAM,OAAU,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AACrC,EAAA,MAAM,MAAS,GAAA,KAAA,CAAM,CAAC,CAAA,EAAG,WAAY,EAAA;AAGrC,EAAI,IAAA,OAAA,GAAU,YAAmB,OAAA,CAAA;AAEjC,EAAI,IAAA,MAAA,KAAW,IAAQ,IAAA,KAAA,KAAU,EAAI,EAAA;AACnC,IAAS,KAAA,IAAA,EAAA;AAAA,GACA,MAAA,IAAA,MAAA,KAAW,IAAQ,IAAA,KAAA,KAAU,EAAI,EAAA;AAC1C,IAAQ,KAAA,GAAA,CAAA;AAAA;AAIV,EAAI,IAAA,KAAA,GAAQ,UAAiB,OAAA,CAAA;AAE7B,EAAA,OAAO,QAAQ,EAAK,GAAA,OAAA;AACtB,CAAA;AASgB,SAAA,iBAAA,CACd,MACA,YACQ,EAAA;AACR,EAAI,IAAA,CAAC,MAAa,OAAA,IAAA;AAElB,EAAM,MAAA,OAAA,GAAU,cAAc,IAAI,CAAA;AAIlC,EAAA,IAAI,OAAY,KAAA,CAAA,IAAK,IAAS,KAAA,OAAA,IAAW,SAAS,UAAY,EAAA;AAC5D,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,GAAU,EAAE,CAAA;AACrC,EAAA,MAAM,OAAO,OAAU,GAAA,EAAA;AAEvB,EAAO,OAAA,gBAAA,CAAiB,KAAO,EAAA,IAAA,EAAM,YAAY,CAAA;AACnD;AAQA,SAAS,sBAAsB,KAAuB,EAAA;AAEpD,EAAM,MAAA,UAAA,GAAa,MAAM,OAAQ,CAAA,QAAA,EAAU,EAAE,CAAE,CAAA,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAEjE,EAAI,IAAA,WAAA,CAAY,IAAK,CAAA,UAAU,CAAG,EAAA;AAEhC,IAAM,MAAA,MAAA,GAAS,GAAG,UAAU,CAAA,GAAA,CAAA;AAC5B,IAAO,OAAA,MAAA;AAAA,GACE,MAAA,IAAA,iBAAA,CAAkB,IAAK,CAAA,UAAU,CAAG,EAAA;AAE7C,IAAM,MAAA,MAAA,GAAS,GAAG,UAAU,CAAA,CAAA,CAAA;AAC5B,IAAO,OAAA,MAAA;AAAA,GACE,MAAA,IAAA,SAAA,CAAU,IAAK,CAAA,UAAU,CAAG,EAAA;AAErC,IAAM,MAAA,MAAA,GAAS,CAAG,EAAA,UAAA,CAAW,KAAM,CAAA,CAAA,EAAG,CAAC,CAAC,CAAI,CAAA,EAAA,UAAA,CAAW,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC/D,IAAO,OAAA,MAAA;AAAA,GACE,MAAA,IAAA,iBAAA,CAAkB,IAAK,CAAA,UAAU,CAAG,EAAA;AAE7C,IAAA,MAAM,MAAS,GAAA,UAAA,CAAW,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA;AACpC,IAAM,MAAA,IAAA,GAAO,UAAW,CAAA,KAAA,CAAM,CAAC,CAAA;AAC/B,IAAA,MAAM,MAAS,GAAA,CAAA,EAAG,MAAO,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,CAAC,CAAA,CAAA,EAAI,MAAO,CAAA,KAAA,CAAM,CAAC,CAAC,IAAI,IAAI,CAAA,CAAA;AAC/D,IAAO,OAAA,MAAA;AAAA;AAGT,EAAO,OAAA,KAAA;AACT;AAUA,SAAS,iBAAA,CACP,eACA,EAAA,GAAA,EACA,GAC2C,EAAA;AAC3C,EAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,KAAA,CAAM,uCAAuC,CAAA;AAC3E,EAAI,IAAA,CAAC,OAAc,OAAA,IAAA;AAEnB,EAAA,IAAI,KAAQ,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AACjC,EAAA,IAAI,OAAU,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AACnC,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,CAAC,CAAA,EAAG,WAAY,EAAA;AAGnC,EAAA,IAAI,OAAU,GAAA,EAAA,IAAM,eAAgB,CAAA,KAAA,CAAM,qBAAqB,CAAG,EAAA;AAChE,IAAW,OAAA,IAAA,EAAA;AAAA;AAIb,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAA,IAAI,UAAU,EAAI,EAAA;AAChB,MAAS,KAAA,IAAA,EAAA;AAAA;AACX,GAEF,MAAA,IAAW,SAAS,IAAM,EAAA;AACxB,IAAA,IAAI,UAAU,EAAI,EAAA;AAChB,MAAQ,KAAA,GAAA,CAAA;AAAA;AACV,GAEK,MAAA;AAEL,IAAA,IAAI,UAAU,EAAI,EAAA;AAChB,MAAQ,KAAA,GAAA,EAAA;AAAA,KACH,MAAA;AAEL,MAAA,IAAI,OAAO,GAAK,EAAA;AAEd,QAAA,MAAM,OAAU,GAAA,KAAA;AAChB,QAAA,MAAM,UAAU,KAAQ,GAAA,EAAA;AAExB,QAAA,MAAM,EAAE,UAAY,EAAA,UAAA,EAAe,GAAA,oBAAA,CAAqB,KAAK,GAAG,CAAA;AAEhE,QAAM,MAAA,SAAA,GAAY,UAAU,EAAK,GAAA,OAAA;AACjC,QAAM,MAAA,SAAA,GAAY,UAAU,EAAK,GAAA,OAAA;AAEjC,QAAA,MAAM,OAAU,GAAA,mBAAA,CAAoB,SAAW,EAAA,UAAA,EAAY,UAAU,CAAA;AACrE,QAAA,MAAM,OAAU,GAAA,mBAAA,CAAoB,SAAW,EAAA,UAAA,EAAY,UAAU,CAAA;AAErE,QAAA,IAAI,WAAW,OAAS,EAAA,WAGb,OAAS,EAAA;AAElB,UAAQ,KAAA,GAAA,OAAA;AAAA;AAOV;AACF;AAEF;AAGF,EAAO,OAAA,EAAE,OAAO,OAAQ,EAAA;AAC1B;AAQA,SAAS,kBACP,eAC2C,EAAA;AAC3C,EAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,KAAA,CAAM,uBAAuB,CAAA;AAE3D,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AACnC,EAAA,IAAI,OAAU,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AAGnC,EAAA,IAAI,OAAU,GAAA,EAAA,IAAM,eAAgB,CAAA,KAAA,CAAM,qBAAqB,CAAG,EAAA;AAChE,IAAW,OAAA,IAAA,EAAA;AAAA;AAGb,EAAM,MAAA,MAAA,GAAS,EAAE,KAAA,EAAO,OAAQ,EAAA;AAChC,EAAO,OAAA,MAAA;AACT;AAWA,SAAS,yBACP,CAAA,UAAA,EACA,KACA,EAAA,GAAA,EACA,GACS,EAAA;AACT,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAY,OAAA,IAAA;AAGzB,EAAM,MAAA,eAAA,GACJ,KAAM,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,IAAI,CAAA,IAAK,KAAM,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,IAAI,CAAA;AAEzE,EAAA,IAAI,CAAC,eAAiB,EAAA;AAGpB,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,OAAQ,CAAA,cAAA,EAAgB,EAAE,CAAA;AACtD,IAAM,MAAA,MAAA,GAAS,GAAG,QAAQ,CAAA,GAAA,CAAA;AAC1B,IAAM,MAAA,MAAA,GAAS,GAAG,QAAQ,CAAA,GAAA,CAAA;AAE1B,IAAA,MAAM,SAAY,GAAA,aAAA,CAAc,iBAAkB,CAAA,MAAA,EAAQ,EAAE,CAAC,CAAA;AAC7D,IAAA,MAAM,SAAY,GAAA,aAAA,CAAc,iBAAkB,CAAA,MAAA,EAAQ,EAAE,CAAC,CAAA;AAE7D,IAAA,MAAM,EAAE,UAAY,EAAA,UAAA,EAAe,GAAA,oBAAA,CAAqB,KAAK,GAAG,CAAA;AAGhE,IACE,OAAA,mBAAA,CAAoB,WAAW,UAAY,EAAA,UAAU,KACrD,mBAAoB,CAAA,SAAA,EAAW,YAAY,UAAU,CAAA;AAAA,GAElD,MAAA;AAEL,IAAA,MAAM,WAAc,GAAA,aAAA,CAAc,iBAAkB,CAAA,UAAA,EAAY,EAAE,CAAC,CAAA;AACnE,IAAA,MAAM,EAAE,UAAY,EAAA,UAAA,EAAe,GAAA,oBAAA,CAAqB,KAAK,GAAG,CAAA;AAEhE,IAAO,OAAA,mBAAA,CAAoB,WAAa,EAAA,UAAA,EAAY,UAAU,CAAA;AAAA;AAElE;AAUA,SAAS,yBAAA,CACP,UACA,EAAA,GAAA,EACA,GACS,EAAA;AACT,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAY,OAAA,IAAA;AAEzB,EAAM,MAAA,WAAA,GAAc,cAAc,UAAU,CAAA;AAC5C,EAAA,MAAM,EAAE,UAAY,EAAA,UAAA,EAAe,GAAA,oBAAA,CAAqB,KAAK,GAAG,CAAA;AAGhE,EAAA,IAAI,mBAAoB,CAAA,WAAA,EAAa,UAAY,EAAA,UAAU,CAAG,EAAA;AAC5D,IAAO,OAAA,IAAA;AAAA;AAMT,EAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,WAAA,GAAc,EAAE,CAAA;AACzC,EAAA,MAAM,UAAU,WAAc,GAAA,EAAA;AAI9B,EAAA,IAAI,YAAY,CAAG,EAAA;AAEjB,IAAA,KAAA,IAAS,CAAI,GAAA,UAAA,EAAY,CAAK,IAAA,UAAA,EAAY,KAAK,EAAI,EAAA;AACjD,MAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,GAAI,EAAE,CAAA;AACvC,MAAA,IAAI,cAAc,QAAS,EAAA,CAAE,WAAW,KAAM,CAAA,QAAA,EAAU,CAAG,EAAA;AACzD,QAAO,OAAA,IAAA;AAAA;AACT;AACF;AAKF,EACE,IAAA,KAAA,IAAS,IAAK,CAAA,KAAA,CAAM,UAAa,GAAA,EAAE,CACnC,IAAA,KAAA,IAAS,IAAK,CAAA,KAAA,CAAM,UAAa,GAAA,EAAE,CACnC,EAAA;AACA,IAAA,MAAM,cAAc,KAAQ,GAAA,EAAA;AAC5B,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,GAAI,CAAA,UAAA,EAAY,WAAW,CAAA;AACvD,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,GAAI,CAAA,UAAA,EAAY,cAAc,EAAE,CAAA;AAE5D,IAAA,KAAA,IAAS,CAAI,GAAA,cAAA,EAAgB,CAAK,IAAA,cAAA,EAAgB,CAAK,EAAA,EAAA;AACrD,MAAA,MAAM,mBAAmB,CAAI,GAAA,EAAA;AAC7B,MAAA,IAAI,iBAAiB,QAAS,EAAA,CAAE,WAAW,OAAQ,CAAA,QAAA,EAAU,CAAG,EAAA;AAC9D,QAAO,OAAA,IAAA;AAAA;AACT;AACF;AAGF,EAAO,OAAA,KAAA;AACT;AAYO,SAAS,eACd,CAAA,KAAA,EACA,MACA,EAAA,iBAAA,EACA,KACA,GACA,EAAA;AACA,EAAM,MAAA,qBAAA,GAAwB,kBAAkB,KAAK,CAAA;AAErD,EAAA,IAAI,0BAA0B,EAAI,EAAA;AAChC,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,YAAc,EAAA,KAAA;AAAA,MACd,YAAc,EAAA;AAAA,KAChB;AAAA;AAIF,EAAM,MAAA,eAAA,GAAkB,sBAAsB,qBAAqB,CAAA;AAGnE,EAAM,MAAA,MAAA,GACJ,WAAW,EACP,GAAA,iBAAA,CAAkB,iBAAiB,GAAK,EAAA,GAAG,CAC3C,GAAA,iBAAA,CAAkB,eAAe,CAAA;AAEvC,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,YAAc,EAAA,KAAA;AAAA,MACd,YAAc,EAAA;AAAA,KAChB;AAAA;AAGF,EAAM,MAAA,EAAE,KAAO,EAAA,OAAA,EAAY,GAAA,MAAA;AAG3B,EAAA,IAAI,QAAQ,CAAK,IAAA,KAAA,GAAQ,YAAY,OAAU,GAAA,CAAA,IAAK,UAAU,UAAY,EAAA;AACxE,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,YAAc,EAAA,KAAA;AAAA,MACd,YAAc,EAAA;AAAA,KAChB;AAAA;AAIF,EAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,KAAO,EAAA,OAAA,EAAS,MAAM,CAAA;AAG1D,EAAA,MAAM,OACJ,GAAA,MAAA,KAAW,EACP,GAAA,yBAAA,CAA0B,UAAY,EAAA,KAAA,EAAO,GAAK,EAAA,GAAG,CACrD,GAAA,yBAAA,CAA0B,UAAY,EAAA,GAAA,EAAK,GAAG,CAAA;AAEpD,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,YAAc,EAAA,KAAA;AAAA,MACd,YAAc,EAAA;AAAA,KAChB;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,UAAA;AAAA,IACN,YAAc,EAAA,IAAA;AAAA,IACd,YAAc,EAAA;AAAA,GAChB;AACF;;AC1ZO,SAAS,mBAAoB,CAAA;AAAA,EAClC,IAAO,GAAA,EAAA;AAAA,EACP,GAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAKa,EAAA;AACX,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,MAAM,UAAa,GAAA,GAAA,GAAM,aAAc,CAAA,GAAG,CAAI,GAAA,CAAA;AAC9C,EAAA,MAAM,aAAa,GACf,GAAA,aAAA,CAAc,GAAG,CAAA,GACjB,eAAe,cAAiB,GAAA,CAAA;AAGpC,EAAA,KAAA,IACM,UAAU,CACd,EAAA,OAAA,GAAU,cAAe,CAAA,cAAA,EACzB,WAAW,IACX,EAAA;AAEA,IAAI,IAAA,OAAA,GAAU,UAAc,IAAA,OAAA,GAAU,UAAY,EAAA;AAChD,MAAA;AAAA;AAGF,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,GAAU,EAAE,CAAA;AACrC,IAAA,MAAM,OAAO,OAAU,GAAA,EAAA;AAEvB,IAAA,OAAA,CAAQ,IAAK,CAAA,gBAAA,CAAiB,KAAO,EAAA,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA;AAGpD,EAAO,OAAA,OAAA;AACT;AASA,SAAS,oBAAoB,GAAqB,EAAA;AAChD,EAAO,OAAA,GAAA,CACJ,QAAQ,QAAU,EAAA,EAAE,EACpB,OAAQ,CAAA,MAAA,EAAQ,EAAE,CAAA,CAClB,WAAY,EAAA;AACjB;AASgB,SAAA,iBAAA,CACd,SACA,SACU,EAAA;AACV,EACE,IAAA,CAAC,aACD,SAAc,KAAA,wBAAA,CAAyB,EAAE,CACzC,IAAA,SAAA,KAAc,wBAAyB,CAAA,EAAE,CACzC,EAAA;AACA,IAAO,OAAA,OAAA;AAAA;AAGT,EAAM,MAAA,eAAA,GAAkB,oBAAoB,SAAS,CAAA;AAErD,EAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,MAAW,KAAA;AAC1C,IAAM,MAAA,gBAAA,GAAmB,oBAAoB,MAAM,CAAA;AACnD,IAAO,OAAA,gBAAA,CAAiB,WAAW,eAAe,CAAA;AAAA,GACnD,CAAA;AAED,EAAO,OAAA,QAAA;AACT;;ACnFgB,SAAA,YAAA,CAAa,MAAc,IAAuB,EAAA;AAChE,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAQ,IAAA,CAAA,EAAU,OAAA,IAAA;AAE/B,EAAM,MAAA,YAAA,GAAe,cAAc,IAAI,CAAA;AACvC,EAAA,OAAO,eAAe,IAAS,KAAA,CAAA;AACjC;AAQO,SAAS,YAAY,IAA8B,EAAA;AACxD,EAAI,IAAA,CAAC,MAAa,OAAA,KAAA;AAClB,EAAA,OAAO,aAAc,CAAA,IAAI,CAAI,GAAA,CAAA,IAAK,IAAS,KAAA,OAAA;AAC7C;AAaO,SAAS,8BACd,CAAA,UAAA,EACA,MACA,EAAA,GAAA,EACA,GACS,EAAA;AAET,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAY,OAAA,KAAA;AAGzB,EAAA,MAAM,MAAS,GAAA,UAAA,CAAW,OAAQ,CAAA,QAAA,EAAU,EAAE,CAAA;AAG9C,EAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,IAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,MAAA,EAAQ,EAAE,CAAA;AAGjC,IAAM,MAAA,UAAA,GAAa,cAAc,GAAG,CAAA;AACpC,IAAM,MAAA,UAAA,GAAa,cAAc,GAAG,CAAA;AAGpC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAK,IAAA,EAAA,EAAI,CAAK,EAAA,EAAA;AAE5B,MAAA,MAAM,UAAU,CAAE,CAAA,QAAA,EAAW,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AAC5C,MAAM,MAAA,YAAA,GAAe,EAAE,QAAS,EAAA;AAEhC,MAAM,MAAA,eAAA,GACJ,OAAQ,CAAA,UAAA,CAAW,KAAM,CAAA,QAAA,EAAU,CAAA,IACnC,YAAa,CAAA,UAAA,CAAW,KAAM,CAAA,QAAA,EAAU,CAAA;AAE1C,MAAA,IAAI,CAAC,eAAiB,EAAA;AAEtB,MAAA,IAAI,WAAW,EAAI,EAAA;AAEjB,QAAA,MAAM,cAAc,CAAI,GAAA,EAAA;AACxB,QAAI,IAAA,WAAA,IAAe,UAAc,IAAA,WAAA,IAAe,UAAY,EAAA;AAC1D,UAAO,OAAA,IAAA;AAAA;AACT,OACK,MAAA;AAEL,QAAA,IAAI,MAAM,CAAG,EAAA;AAEX,UAAA,IAAI,UAAU,CAAG,EAAA;AAEf,YAAA,MAAM,eAAkB,GAAA,CAAA;AACxB,YACE,IAAA,eAAA,IAAmB,UACnB,IAAA,eAAA,IAAmB,UACnB,EAAA;AACA,cAAO,OAAA,IAAA;AAAA;AACT;AACF,SACS,MAAA,IAAA,CAAA,IAAK,CAAK,IAAA,CAAA,IAAK,EAAI,EAAA;AAI5B,UAAM,MAAA,QAAA,GAAW,CAAM,KAAA,EAAA,GAAK,CAAI,GAAA,CAAA;AAChC,UAAA,MAAM,YAAY,QAAW,GAAA,EAAA;AAC7B,UAAI,IAAA,SAAA,IAAa,UAAc,IAAA,SAAA,IAAa,UAAY,EAAA;AACtD,YAAO,OAAA,IAAA;AAAA;AAIT,UAAA,MAAM,QAAW,GAAA,CAAA,KAAM,EAAK,GAAA,EAAA,GAAK,CAAI,GAAA,EAAA;AACrC,UAAA,MAAM,YAAY,QAAW,GAAA,EAAA;AAC7B,UAAI,IAAA,SAAA,IAAa,UAAc,IAAA,SAAA,IAAa,UAAY,EAAA;AACtD,YAAO,OAAA,IAAA;AAAA;AACT;AACF;AACF;AACF;AAGF,EAAO,OAAA,KAAA;AACT;;ACxFgB,SAAA,iBAAA,CACd,IACA,EAAA,IAAA,EACA,MACQ,EAAA;AACR,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAQ,IAAA,CAAA,EAAU,OAAA,IAAA;AAG/B,EAAM,MAAA,YAAA,GAAe,cAAc,IAAI,CAAA;AAGvC,EAAA,MAAM,QAAW,GAAA,IAAA,CAAK,IAAK,CAAA,YAAA,GAAe,IAAI,CAAI,GAAA,IAAA;AAGlD,EAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,GAAW,EAAE,CAAA;AACtC,EAAA,MAAM,UAAU,QAAW,GAAA,EAAA;AAE3B,EAAO,OAAA,gBAAA,CAAiB,KAAO,EAAA,OAAA,EAAS,MAAM,CAAA;AAChD;AASgB,SAAA,kBAAA,CACd,MACA,OACe,EAAA;AACf,EAAA,MAAM,EAAE,SAAA,EAAW,IAAM,EAAA,MAAA,EAAW,GAAA,OAAA;AAEpC,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,IAAA,EAAa,OAAA,IAAA;AAGhC,EAAA,MAAM,YAAY,IAAQ,IAAA,EAAA;AAG1B,EAAI,IAAA,YAAA,CAAa,IAAM,EAAA,SAAS,CAAG,EAAA;AACjC,IAAO,OAAA,IAAA;AAAA;AAIT,EAAO,OAAA,iBAAA,CAAkB,IAAM,EAAA,SAAA,EAAW,MAAM,CAAA;AAClD;AAUgB,SAAA,oBAAA,CACd,WACA,EAAA,IAAA,EACA,UACU,EAAA;AACV,EAAA,MAAM,KAAQ,GAAA,UAAA,CAAW,WAAY,EAAA,CAAE,SAAS,IAAI,CAAA;AACpD,EAAA,MAAM,KAAQ,GAAA,UAAA,CAAW,WAAY,EAAA,CAAE,SAAS,IAAI,CAAA;AAGpD,EAAM,MAAA,kBAAA,GAAqB,CAAC,IAAiB,KAAA;AAC3C,IAAM,MAAA,cAAA,GAAiB,cAAc,IAAI,CAAA;AACzC,IAAA,MAAM,eAAkB,GAAA,IAAA,CAAK,IAAK,CAAA,cAAA,GAAiB,IAAI,CAAI,GAAA,IAAA;AAC3D,IAAA,MAAM,YACJ,GAAA,eAAA,KAAoB,cAChB,GAAA,eAAA,GAAkB,IAClB,GAAA,eAAA;AAEN,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,YAAA,GAAe,EAAE,CAAA;AAC1C,IAAA,MAAM,UAAU,YAAe,GAAA,EAAA;AAC/B,IAAO,OAAA,gBAAA,CAAiB,KAAO,EAAA,OAAA,EAAS,EAAE,CAAA;AAAA,GAC5C;AAEA,EAAA,MAAM,QAAW,GAAA,iBAAA,CAAkB,WAAa,EAAA,IAAA,EAAM,EAAE,CAAA;AAGxD,EAAA,IAAI,SAAS,KAAO,EAAA;AAClB,IAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,GACX,MAAA;AAGL,IAAM,MAAA,cAAA,GAAiB,cAAc,WAAW,CAAA;AAChD,IAAM,MAAA,SAAA,GAAY,iBAAiB,EAAK,GAAA,EAAA;AACxC,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,KAAM,CAAA,SAAA,GAAY,EAAE,CAAA;AACzC,IAAA,MAAM,SAAS,SAAY,GAAA,EAAA;AAC3B,IAAA,MAAM,YAAY,kBAAmB,CAAA,gBAAA,CAAiB,OAAS,EAAA,MAAA,EAAQ,EAAE,CAAC,CAAA;AAC1E,IAAO,OAAA,CAAC,UAAU,SAAS,CAAA;AAAA;AAE/B;AAUgB,SAAA,wBAAA,CACd,WACA,EAAA,IAAA,EACA,UACU,EAAA;AAEV,EACE,IAAA,UAAA,CAAW,WAAY,EAAA,CAAE,QAAS,CAAA,IAAI,CACtC,IAAA,UAAA,CAAW,WAAY,EAAA,CAAE,QAAS,CAAA,IAAI,CACtC,EAAA;AACA,IAAA,OAAO,EAAC;AAAA;AAIV,EAAM,MAAA,cAAA,GAAiB,cAAc,WAAW,CAAA;AAChD,EAAM,MAAA,SAAA,GAAY,iBAAiB,EAAK,GAAA,EAAA;AACxC,EAAA,MAAM,OAAU,GAAA,IAAA,CAAK,KAAM,CAAA,SAAA,GAAY,EAAE,CAAA;AACzC,EAAA,MAAM,SAAS,SAAY,GAAA,EAAA;AAC3B,EAAA,MAAM,MAAS,GAAA,gBAAA,CAAiB,OAAS,EAAA,MAAA,EAAQ,EAAE,CAAA;AAGnD,EAAI,IAAA,WAAA,CAAY,MAAM,CAAG,EAAA;AACvB,IAAA,MAAM,UAAa,GAAA,iBAAA,CAAkB,MAAQ,EAAA,IAAA,EAAM,EAAE,CAAA;AACrD,IAAA,OAAO,CAAC,UAAU,CAAA;AAAA;AAGpB,EAAA,OAAO,EAAC;AACV;AAYO,SAAS,sBACd,CAAA,WAAA,EACA,IACA,EAAA,MAAA,EACA,YACA,GACU,EAAA;AACV,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,OAAO,EAAC;AAAA;AAIV,EAAI,IAAA,CAAC,WAAY,CAAA,WAAW,CAAG,EAAA;AAE7B,IAAA,IAAI,WAAW,EAAI,EAAA;AACjB,MAAO,OAAA,wBAAA,CAAyB,WAAa,EAAA,IAAA,EAAM,UAAU,CAAA;AAAA;AAE/D,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,MAAM,QAAW,GAAA,iBAAA,CAAkB,WAAa,EAAA,IAAA,EAAM,MAAM,CAAA;AAG5D,EAAI,IAAA,MAAA,KAAW,EAAM,IAAA,CAAC,GAAK,EAAA;AACzB,IAAO,OAAA,oBAAA,CAAqB,WAAa,EAAA,IAAA,EAAM,UAAU,CAAA;AAAA;AAG3D,EAAA,OAAO,CAAC,QAAQ,CAAA;AAClB;;AC9KA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,MAAA;AAAA,EACA;AACF,CAGM,KAAA;AAEJ,EAAA,MAAM,cAAc,2BAA4B,CAAA;AAAA,IAC9C,IAAA,EAAM,MAAW,KAAA,EAAA,GAAK,UAAa,GAAA,OAAA;AAAA,IACnC,IAAM,EAAA;AAAA;AAAA,GACP,CAAA;AAED,EAAA,MAAM,EAAE,OAAS,EAAA,iBAAA,EAAmB,GAAG,kBAAmB,EAAA,GACxD,uBAAuB,WAAW,CAAA;AAEpC,EAAA,MAAMC,oBAAsB,GAAA;AAAA,IAC1B,GAAG,WAAA;AAAA,IACH,SAAS,OAAQ,CAAA,MAAA,CAAO,WAAY,CAAA,OAAA,IAAW,EAAE,CAAA;AAAA,IACjD,aAAe,EAAA;AAAA,MACb,GAAG,kBAAmB,CAAA,aAAA;AAAA,MACtB,GAAG,WAAY,CAAA;AAAA,KACjB;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,GAAG,WAAY,CAAA,cAAA;AAAA,MACf,GAAG,kBAAmB,CAAA;AAAA;AACxB,GACF;AAEA,EAAO,OAAA,EAAE,OAASA,EAAAA,oBAAAA,EAAqB,iBAAkB,EAAA;AAC3D,CAAA;;;;;;ACyEO,MAAM,eAAkB,GAAA,UAAA;AAAA,EAI7B,CACE;AAAA,IACE,YAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,WAAW,CAAA;AAExD,IAAA,MAAM,EAAE,OAAA,EAAS,iBAAkB,EAAA,GAAI,mBAAoB,CAAA;AAAA,MACzD,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,cAAiB,GAAA,UAAA,CAAW,EAAE,OAAA,EAAS,CAAA;AAC7C,IAAM,MAAA,QAAA,GAAW,OAAyB,IAAI,CAAA;AAC9C,IAAA,MAAM,cAAc,YAAa,CAAA,CAAC,cAAgB,EAAA,QAAA,EAAU,GAAG,CAAC,CAAA;AAChE,IAAM,MAAA,eAAA,GAAkB,OAAO,KAAK,CAAA;AACpC,IAAM,MAAA,aAAA,GAAgB,OAAe,WAAW,CAAA;AAChD,IAAM,MAAA,sBAAA,GAAyB,OAAe,WAAW,CAAA;AAGzD,IAAM,MAAA,iBAAA,GAAoB,QAAQ,MAAM;AACtC,MAAA,OAAO,eAAgB,CAAA,UAAA,EAAY,MAAQ,EAAA,iBAAA,EAAmB,KAAK,GAAG,CAAA;AAAA,OACrE,CAAC,UAAA,EAAY,QAAQ,iBAAmB,EAAA,GAAA,EAAK,GAAG,CAAC,CAAA;AAGpD,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,aAAA,CAAc,OAAU,GAAA,UAAA;AAAA,KAC1B,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,sBAAA,CAAuB,OAAU,GAAA,WAAA;AAAA,KACnC,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,YAAiB,KAAA,MAAA,IAAa,CAAC,eAAA,CAAgB,OAAS,EAAA;AAC1D,QAAA,MAAM,aAAgB,GAAA,YAAA,GAClB,iBAAkB,CAAA,YAAA,EAAc,MAAM,CACtC,GAAA,WAAA;AAEJ,QAAA,aAAA,CAAc,aAAa,CAAA;AAC3B,QAAA,aAAA,CAAc,OAAU,GAAA,aAAA;AAAA;AAC1B,KACC,EAAA,CAAC,YAAc,EAAA,MAAA,EAAQ,WAAW,CAAC,CAAA;AAGtC,IAAA,SAAA,CAAU,MAAM;AAEd,MAAI,IAAA,WAAA,KAAgB,uBAAuB,OAAS,EAAA;AAGpD,MAAA,MAAM,mBACJ,UAAe,KAAA,wBAAA,CAAyB,EAAE,CAC1C,IAAA,UAAA,KAAe,yBAAyB,EAAE,CAAA;AAE5C,MAAA,IAAI,gBAAkB,EAAA;AACpB,QAAA,aAAA,CAAc,WAAW,CAAA;AAAA;AAG3B,MAAA,sBAAA,CAAuB,OAAU,GAAA,WAAA;AAAA,KAChC,EAAA,CAAC,WAAa,EAAA,UAAU,CAAC,CAAA;AAE5B,IAAA,MAAM,YAAe,GAAA,WAAA;AAAA,MACnB,CAAC,KAA+C,KAAA;AAC9C,QAAA,eAAA,CAAgB,OAAU,GAAA,IAAA;AAE1B,QAAA,MAAM,EAAE,IAAA,EAAM,YAAc,EAAA,YAAA,EAAiB,GAAA,eAAA;AAAA,UAC3C,MAAM,MAAO,CAAA,KAAA;AAAA,UACb,MAAA;AAAA,UACA,iBAAA;AAAA,UACA,GAAA;AAAA,UACA;AAAA,SACF;AAGA,QAAM,MAAA,yBAAA,GACJ,CAAC,YACD,IAAA,CAAC,gBACD,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA,IAAU,WAAY,CAAA,MAAA;AAAA,QACzC,+BAA+B,KAAM,CAAA,MAAA,CAAO,KAAO,EAAA,MAAA,EAAQ,KAAK,GAAG,CAAA;AAGrE,QAAI,IAAA,YAAA,IAAgB,gBAAgB,yBAA2B,EAAA;AAC7D,UAAc,aAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,SAC3B,MAAA;AAEL,UAAA,aAAA,CAAc,WAAW,CAAA;AAAA;AAG3B,QAAgB,aAAA,GAAA;AAAA,UACd,KAAA;AAAA,UACA,IAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA,SACD,CAAA;AAGD,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,eAAA,CAAgB,OAAU,GAAA,KAAA;AAAA,SAC5B,EAAG,eAAe,sBAAsB,CAAA;AAAA,OAC1C;AAAA,MACA,CAAC,MAAQ,EAAA,iBAAA,EAAmB,aAAe,EAAA,GAAA,EAAK,KAAK,WAAW;AAAA,KAClE;AAEA,IAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,MAAA,eAAA,CAAgB,OAAU,GAAA,KAAA;AAAA,KAC5B,EAAG,EAAE,CAAA;AAGL,IAAA,MAAM,UAAa,GAAA,WAAA;AAAA,MACjB,CAAC,KAA8C,KAAA;AAE7C,QAAI,IAAA,iBAAA,CAAkB,IAAQ,IAAA,iBAAA,CAAkB,YAAc,EAAA;AAC5D,UAAA,MAAM,cAAiB,GAAA,iBAAA;AAAA,YACrB,iBAAkB,CAAA,IAAA;AAAA,YAClB;AAAA,WACF;AACA,UAAA,aAAA,CAAc,cAAc,CAAA;AAAA;AAI9B,QAAA,MAAA,GAAS,KAAK,CAAA;AAAA,OAChB;AAAA,MACA,CAAC,iBAAmB,EAAA,MAAA,EAAQ,MAAM;AAAA,KACpC;AAEA,IAAA,mBAAA;AAAA,MACE,GAAA;AAAA,MACA,OACG;AAAA,QACC,GAAG,QAAS,CAAA,OAAA;AAAA,QACZ,KAAO,EAAA,MAAM,QAAS,CAAA,OAAA,EAAS,KAAM,EAAA;AAAA,QACrC;AAAA,OACF;AAAA,KACJ;AAEA,IAAM,MAAA,UAAA,GAAa,QAAQ,MAAM;AAC/B,MAAA,OAAO,EAAG,CAAA,MAAA,CAAO,YAAY,CAAA,EAAG,SAAS,CAAA;AAAA,KAC3C,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,IACE,uBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,WAAA;AAAA,QACL,oBAAkB,iBAAkB,CAAA,YAAA;AAAA,QACpC,oBAAkB,iBAAkB,CAAA,YAAA;AAAA,QACpC,WAAA,EAAW,kBAAkB,IAAQ,IAAA,EAAA;AAAA,QACrC,KAAO,EAAA,UAAA;AAAA,QACP,QAAU,EAAA,YAAA;AAAA,QACV,MAAQ,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,GAAA,EAAK,UAAY,EAAA,CAAA;AAAA,QAC/B,YAAa,EAAA,KAAA;AAAA,QACb,SAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAQ,EAAA,UAAA;AAAA,QACR,SAAW,EAAA,UAAA;AAAA,QACV,GAAG;AAAA;AAAA,KACN;AAAA;AAGN,CAAA;AAEA,eAAA,CAAgB,WAAc,GAAA,iBAAA;;AC9JvB,MAAM,SAAY,GAAA,UAAA;AAAA,EACvB,CAAC,OAAuB,GAA+B,KAAA;AACrD,IAAA,MAAM,EAAE,cAAA,EAAmB,GAAA,kBAAA,CAAmB,KAAK,CAAA;AACnD,IAAM,MAAA;AAAA,MACJ,KAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAO,EAAA,SAAA;AAAA,MACP,YAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAS,GAAA,EAAA;AAAA,MACT,IAAO,GAAA,EAAA;AAAA,MACP,QAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAO,EAAA,SAAA;AAAA,MACP,kBAAqB,GAAA,KAAA;AAAA,MACrB,SAAY,GAAA,KAAA;AAAA,MACZ,SAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,cAAA;AAGJ,IAAA,MAAM,CAAC,cAAA,EAAgB,oBAAoB,CAAA,GAAI,SAAS,KAAK,CAAA;AAE7D,IAAM,MAAA,iBAAA,GAAoB,CAAC,IAAkB,KAAA;AAC3C,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,KAC3B;AACA,IAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAAS,CAAC,CAAA;AAChE,IAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GAAI,SAAS,EAAE,CAAA;AACvE,IAAM,MAAA,CAAC,iBAAmB,EAAA,oBAAoB,CAAI,GAAA,QAAA;AAAA,MAChD;AAAA,KACF;AAGA,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,4BAEtC,CAAA;AAAA,MACA,eAAiB,EAAA,SAAA;AAAA,MACjB,cAAc,YAAgB,IAAA;AAAA,KAC/B,CAAA;AAGD,IAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAI3C,CAAA,EAAE,IAAM,EAAA,IAAA,EAAM,YAAc,EAAA,KAAA,EAAO,YAAc,EAAA,IAAA,EAAM,CAAA;AAG1D,IAAM,MAAA,mBAAA,GAAsB,OAIlB,IAAI,CAAA;AAGd,IAAM,MAAA,qBAAA,GAAwB,OAAO,KAAK,CAAA;AAG1C,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AAGtD,IAAM,MAAA,iBAAA,GAAoB,OAAO,KAAK,CAAA;AAGtC,IAAM,MAAA,QAAA,GAAW,OAIf,IAAI,CAAA;AACN,IAAM,MAAA,iBAAA,GAAoB,OAAuB,IAAI,CAAA;AACrD,IAAA,MAAM,WAAc,GAAA,YAAA,CAAa,CAAC,QAAA,EAAU,GAAG,CAAC,CAAA;AAChD,IAAA,MAAM,mBAAmB,iBAAkB,EAAA;AAG3C,IAAM,MAAA,WAAA,GAAc,yBAAyB,MAAM,CAAA;AAGnD,IAAM,MAAA,yBAAA,GACJ,+BAA+B,cAAc,CAAA;AAG/C,IAAM,MAAA,iBAAA,GAAoB,iBAAkB,CAAA,OAAA,GACxC,KACA,GAAA,yBAAA;AAGJ,IAAM,MAAA,kBAAA,GAAqB,OAA8B,IAAI,CAAA;AAG7D,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,cAAc,kBAAmB,CAAA,OAAA;AACvC,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,WAAa,EAAA;AACf,UAAA,YAAA,CAAa,WAAW,CAAA;AAAA;AAC1B,OACF;AAAA,KACF,EAAG,EAAE,CAAA;AAGL,IAAA,MAAM,cAAiB,GAAA,OAAA;AAAA,MACrB,MAAM,mBAAoB,CAAA,EAAE,MAAM,GAAK,EAAA,GAAA,EAAK,QAAQ,CAAA;AAAA,MACpD,CAAC,IAAA,EAAM,GAAK,EAAA,GAAA,EAAK,MAAM;AAAA,KACzB;AAGA,IAAM,MAAA,mBAAA,GAAsB,QAAQ,MAAM;AAExC,MAAA,IAAI,CAAC,sBAAA,IAA0B,sBAAuB,CAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AACvE,QAAO,OAAA,cAAA;AAAA;AAGT,MAAO,OAAA,iBAAA,CAAkB,gBAAgB,sBAAsB,CAAA;AAAA,KAC9D,EAAA,CAAC,cAAgB,EAAA,sBAAsB,CAAC,CAAA;AAE3C,IAAM,MAAA,mBAAA,GAAsB,QAAQ,MAAM;AAExC,MACE,IAAA,CAAC,SACD,IAAA,mBAAA,CAAoB,MAAS,GAAA,CAAA,IAC7B,CAAC,sBACD,IAAA,sBAAA,CAAuB,KAAM,CAAA,UAAU,CACvC,EAAA;AACA,QAAA,OAAO,EAAC;AAAA;AAIV,MAAM,MAAA,WAAA,GAAc,qBAAqB,eAAgB,CAAA,IAAA;AAEzD,MAAA,MAAM,kBAAqB,GAAA,sBAAA;AAAA,QACzB,WAAA;AAAA,QACA,IAAQ,IAAA,EAAA;AAAA,QACR,MAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,OAAO,kBAAmB,CAAA,MAAA;AAAA,QACxB,CAAC,MAAA,KAAW,CAAC,mBAAA,CAAoB,SAAS,MAAM;AAAA,OAClD;AAAA,KACC,EAAA;AAAA,MACD,SAAA;AAAA,MACA,mBAAA;AAAA,MACA,sBAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAgB,CAAA,IAAA;AAAA,MAChB,MAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAM,MAAA,eAAA,GAAkB,QAAQ,MAAM;AAEpC,MAAA,IACE,mBAAoB,CAAA,MAAA,KAAW,CAC/B,IAAA,mBAAA,CAAoB,WAAW,CAC/B,EAAA;AACA,QACE,IAAA,CAAC,gBAAgB,YACjB,IAAA,sBAAA,IACA,CAAC,sBAAuB,CAAA,KAAA,CAAM,UAAU,CACxC,EAAA;AACA,UAAO,OAAA,cAAA;AAAA;AACT;AAGF,MAAA,OAAO,CAAC,GAAG,mBAAqB,EAAA,GAAG,mBAAmB,CAAA;AAAA,KACrD,EAAA;AAAA,MACD,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,sBAAA;AAAA,MACA,eAAgB,CAAA;AAAA,KACjB,CAAA;AAGD,IAAA,MAAM,UAAa,GAAA,WAAA;AAAA,MACjB,CAAC,KAA8C,KAAA;AAG7C,QACE,IAAA,KAAA,CAAM,iBACN,iBAAkB,CAAA,OAAA,EAAS,SAAS,KAAM,CAAA,aAAqB,CAC/D,IAAA,qBAAA,CAAsB,OACtB,EAAA;AACA,UAAA,qBAAA,CAAsB,OAAU,GAAA,KAAA;AAChC,UAAA;AAAA;AAIF,QAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,QAAA,sBAAA,CAAuB,CAAC,CAAA;AAGxB,QAAA,MAAM,QAAQ,KAAM,CAAA,MAAA;AACpB,QAAM,MAAA,eAAA,GAAkB,KAAM,CAAA,OAAA,CAAQ,IAAQ,IAAA,IAAA;AAC9C,QAAM,MAAA,YAAA,GAAe,KAAM,CAAA,OAAA,CAAQ,UAAe,KAAA,MAAA;AAClD,QAAM,MAAA,YAAA,GAAe,KAAM,CAAA,OAAA,CAAQ,UAAe,KAAA,MAAA;AAGlD,QAAA,IAAI,SAAY,GAAA,eAAA;AAGhB,QAAI,IAAA,SAAA,IAAa,aAAa,YAAc,EAAA;AAC1C,UAAA,MAAM,cAAiB,GAAA,SAAA;AACvB,UAAA,SAAA,GAAY,mBAAmB,SAAW,EAAA;AAAA,YACxC,SAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACD,CAAA;AAGD,UAAA,IAAI,cAAc,cAAgB,EAAA;AAChC,YAAA,QAAA,CAAS,SAAS,eAAkB,IAAA;AACpC,YAAA,eAAA,CAAgB,SAAS,CAAA;AAAA;AAC3B;AAIF,QAAA,MAAM,aAAgB,GAAA;AAAA,UACpB,IAAM,EAAA,SAAA;AAAA,UACN,YAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,MAAM,aAAa,mBAAoB,CAAA,OAAA;AACvC,QAAA,MAAM,WACJ,GAAA,UAAA,IACA,UAAW,CAAA,IAAA,KAAS,aAAc,CAAA,IAAA,IAClC,UAAW,CAAA,YAAA,KAAiB,aAAc,CAAA,YAAA,IAC1C,UAAW,CAAA,YAAA,KAAiB,aAAc,CAAA,YAAA;AAG5C,QAAA,IAAI,CAAC,WAAa,EAAA;AAChB,UAAA,QAAA,GAAW,aAAa,CAAA;AACxB,UAAA,mBAAA,CAAoB,OAAU,GAAA,aAAA;AAAA;AAChC,OACF;AAAA;AAAA,MAEA,CAAC,MAAA,EAAQ,IAAM,EAAA,SAAA,EAAW,QAAQ;AAAA,KACpC;AAGA,IAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,MAAI,IAAA,CAAC,kBAAsB,IAAA,CAAC,YAAc,EAAA;AACxC,QAAA,iBAAA,CAAkB,IAAI,CAAA;AAGtB,QAAA,sBAAA,CAAuB,CAAC,CAAA;AAAA;AAC1B,KACC,EAAA,CAAC,kBAAoB,EAAA,YAAY,CAAC,CAAA;AAGrC,IAAA,SAAA,CAAU,MAAM;AAEd,MAAI,IAAA,eAAA,CAAgB,MAAU,IAAA,CAAA,IAAK,cAAgB,EAAA;AACjD,QAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA;AAIzB,MAAA,IACE,CAAC,kBACD,IAAA,eAAA,CAAgB,MAAS,GAAA,CAAA,IACzB,SAAS,aACT,IAAA,QAAA,CAAS,aAAc,CAAA,OAAA,KAAY,WACnC,CAAC,cAAA,IACD,CAAC,YACD,IAAA,CAAC,kBAAkB,OACnB,EAAA;AACA,QAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,QAAA,sBAAA,CAAuB,CAAC,CAAA;AAAA;AAC1B,OACC,CAAC,eAAA,EAAiB,kBAAoB,EAAA,cAAA,EAAgB,YAAY,CAAC,CAAA;AAGtE,IAAM,MAAA,iBAAA,GAAoB,CAAC,MAAkC,KAAA;AAE3D,MAA0B,yBAAA,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA;AAGnD,MAAA,oBAAA,CAAqB,OAAO,IAAI,CAAA;AAGhC,MAAmB,kBAAA,CAAA;AAAA,QACjB,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,cAAc,MAAO,CAAA,YAAA;AAAA,QACrB,cAAc,MAAO,CAAA;AAAA,OACtB,CAAA;AAGD,MAAA,sBAAA,CAAuB,CAAC,CAAA;AAGxB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAGrB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,KACtB;AAGA,IAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,MAAA,IAAI,CAAC,iBAAA,CAAkB,OAAW,IAAA,mBAAA,GAAsB,CAAG,EAAA;AAG3D,MAAA,MAAM,cACJ,GAAA,iBAAA,CAAkB,OAAQ,CAAA,gBAAA,CAAiB,iBAAiB,CAAA;AAC9D,MAAM,MAAA,aAAA,GAAgB,eAAe,mBAAmB,CAAA;AAExD,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,aAAA,CAAc,cAAe,CAAA;AAAA,UAC3B,KAAO,EAAA,SAAA;AAAA,UACP,QAAU,EAAA;AAAA,SACX,CAAA;AAAA;AACH,KACF,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAGxB,IAAA,SAAA,CAAU,MAAM;AACd,MAAI,IAAA,cAAA,IAAkB,uBAAuB,CAAG,EAAA;AAC9C,QAAuB,sBAAA,EAAA;AAAA;AACzB,KACC,EAAA,CAAC,mBAAqB,EAAA,cAAA,EAAgB,sBAAsB,CAAC,CAAA;AAGhE,IAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,MACzB,CAACC,aAAyB,KAAA;AAExB,QAAI,IAAA,QAAA,CAAS,SAAS,eAAiB,EAAA;AACrC,UAAA,QAAA,CAAS,QAAQ,eAAgB,EAAA;AAAA;AAInC,QAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,QAAA,sBAAA,CAAuB,CAAC,CAAA;AAGxB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAGpB,QAAA,oBAAA,CAAqBA,aAAY,CAAA;AACjC,QAAA,eAAA,CAAgBA,aAAY,CAAA;AAE5B,QAAA,MAAM,UAAa,GAAA;AAAA,UACjB,IAAMA,EAAAA,aAAAA;AAAA,UACN,YAAc,EAAA,IAAA;AAAA,UACd,YAAc,EAAA;AAAA,SAChB;AAGA,QAAA,QAAA,GAAW,UAAU,CAAA;AAGrB,QAAA,mBAAA,CAAoB,OAAU,GAAA,UAAA;AAG9B,QAAA,qBAAA,CAAsB,MAAM;AAC1B,UAAA,QAAA,CAAS,SAAS,KAAM,EAAA;AAAA,SACzB,CAAA;AAAA,OACH;AAAA;AAAA,MAEA,CAAC,QAAQ;AAAA,KACX;AAGA,IAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,MACpB,CAAC,KAAiD,KAAA;AAChD,QAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,UAAA;AAAA;AAGF,QAAA,QAAQ,MAAM,GAAK;AAAA,UACjB,KAAK,WAAA;AACH,YAAA,KAAA,CAAM,cAAe,EAAA;AACrB,YAAA,sBAAA;AAAA,cAAuB,CAAC,IACtB,KAAA,IAAA,GAAO,gBAAgB,MAAS,GAAA,CAAA,GAAI,OAAO,CAAI,GAAA;AAAA,aACjD;AACA,YAAA;AAAA,UACF,KAAK,SAAA;AACH,YAAA,KAAA,CAAM,cAAe,EAAA;AACrB,YAAA,sBAAA;AAAA,cAAuB,CAAC,IACtB,KAAA,IAAA,GAAO,IAAI,IAAO,GAAA,CAAA,GAAI,gBAAgB,MAAS,GAAA;AAAA,aACjD;AACA,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,KAAA,CAAM,cAAe,EAAA;AACrB,YAAI,IAAA,eAAA,CAAgB,mBAAmB,CAAG,EAAA;AAExC,cAAmB,kBAAA,CAAA,eAAA,CAAgB,mBAAmB,CAAC,CAAA;AAAA;AAEzD,YAAA;AAAA,UACF,KAAK,KAAA;AAEH,YAAA,iBAAA,CAAkB,OAAU,GAAA,IAAA;AAG5B,YAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,YAAA,sBAAA,CAAuB,CAAC,CAAA;AAGxB,YAAA,UAAA,CAAW,MAAM;AACf,cAAA,iBAAA,CAAkB,OAAU,GAAA,KAAA;AAAA,eAC3B,EAAE,CAAA;AACL,YAAA;AAAA;AACJ,OACF;AAAA,MACA;AAAA,QACE,cAAA;AAAA,QACA,mBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AACF,KACF;AAEA,IAAM,MAAA,eAAA,GAAkB,sBAAsB,CAAC,gBAAA;AAE/C,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,KAAA,EAAO,iBAAiB,KAAK,CAAA;AAAA,MAC7B,UAAA;AAAA,MACA,WAAA,EAAa,iBAAiB,WAAW,CAAA;AAAA,MACzC,IAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,aAAa,aAAc,CAAA;AAAA,MAC/B,IAAM,EAAA,WAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAa,EAAA,CAAC,CAAC,IAAA,CAAK,kBAAkB;AAAA,KACvC,CAAA;AAED,IAAA,MAAM,YACJ,mBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,kBAAkB,EAAA,UAAA;AAAA,QAClB,GAAK,EAAA,WAAA;AAAA,QACL,YAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,aAAe,EAAA,iBAAA;AAAA,QACf,SAAW,EAAA,aAAA;AAAA,QACX,MAAQ,EAAA,UAAA;AAAA,QACR,OAAS,EAAA,WAAA;AAAA,QACT,KAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAO,EAAA,SAAA;AAAA,QACP,SAAA,EAAW,kBAAkB,SAAY,GAAA,MAAA;AAAA,QACxC,GAAG,IAAA;AAAA,QACJ,UAAS,EAAA;AAAA;AAAA,KACX;AAGF,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAO,OAAA,YAAA;AAAA;AAGT,IACE,uBAAA,IAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAM,EAAA,cAAA;AAAA,QACN,SAAS,EAAA,IAAA;AAAA,QACT,YAAY,EAAA,IAAA;AAAA,QACZ,SAAU,EAAA,cAAA;AAAA,QACV,mBAAmB,EAAA,IAAA;AAAA,QACnB,KAAO,EAAA,KAAA;AAAA,QACP,gBAAgB,MAAM;AACpB,UAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,SACzB;AAAA,QACA,SAAS,MAAM;AACb,UAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,SACzB;AAAA,QACA,SAAS,EAAA,IAAA;AAAA,QACT,SAAW,EAAA,GAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAQ,OAAR,EAAA,EACE,WAAC,EAAE,GAAA,EAAK,YACP,qBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAK,EAAA,UAAA;AAAA,cACL,SAAA;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WAGP,EAAA,CAAA;AAAA,0BAEA,GAAA;AAAA,YAAC,OAAQ,CAAA,OAAA;AAAA,YAAR;AAAA,cACC,GAAK,EAAA,iBAAA;AAAA,cACL,WAAW,EAAA,cAAA;AAAA,cACX,eAAe,EAAA,kBAAA;AAAA,cACf,aAAa,MAAM;AAEjB,gBAAA,qBAAA,CAAsB,OAAU,GAAA,IAAA;AAAA,eAClC;AAAA,cACA,cAAc,MAAM;AAElB,gBAAA,qBAAA,CAAsB,OAAU,GAAA,IAAA;AAAA,eAClC;AAAA,cAEC,QACC,EAAA,iBAAA,oBAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAU,gBAAgB,mBAAmB,CAAA;AAAA,kBAC7C,iBAAA,EAAmB,CAAC,QAAiC,KAAA;AACnD,oBAAA,IAAI,QAAU,EAAA;AACZ,sBAAA,kBAAA,CAAmB,QAAQ,CAAA;AAAA,qBACtB,MAAA;AAEL,sBAAM,MAAA,aAAA,GAAgB,gBAAgB,mBAAmB,CAAA;AACzD,sBAAA,IAAI,aAAe,EAAA;AACjB,wBAAA,kBAAA,CAAmB,aAAa,CAAA;AAAA;AAClC;AACF,mBACF;AAAA,kBACA,YAAW,EAAA,kBAAA;AAAA,kBAEV,QAAgB,EAAA,eAAA,CAAA,GAAA,CAAI,CAAC,MAAA,yBACnB,OAAQ,CAAA,MAAA,EAAR,EAA4B,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,MAChD,EAAA,QAAA,EAAA,MAAA,EAAA,EADkB,MAErB,CACD;AAAA;AAAA;AACH;AAAA;AAEJ;AAAA;AAAA,KACF;AAAA;AAGN;AAEA,SAAA,CAAU,WAAc,GAAA,WAAA;;;;"}