@servicetitan/anvil2 1.48.1 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{Alert-Cz_w_cw0.js → Alert-aGBkujwE.js} +4 -4
  3. package/dist/{Alert-Cz_w_cw0.js.map → Alert-aGBkujwE.js.map} +1 -1
  4. package/dist/Alert.js +1 -1
  5. package/dist/{Announcement-C1xSJkl0.js → Announcement-BPwFNhYe.js} +4 -4
  6. package/dist/{Announcement-C1xSJkl0.js.map → Announcement-BPwFNhYe.js.map} +1 -1
  7. package/dist/Announcement.js +1 -1
  8. package/dist/{AnvilProvider-DDo8ZcIA.js → AnvilProvider-DBYMPYAO.js} +3 -3
  9. package/dist/{AnvilProvider-DDo8ZcIA.js.map → AnvilProvider-DBYMPYAO.js.map} +1 -1
  10. package/dist/AnvilProvider.js +1 -1
  11. package/dist/{Avatar-VQrimv28.js → Avatar-DeEV-v-b.js} +2 -2
  12. package/dist/{Avatar-VQrimv28.js.map → Avatar-DeEV-v-b.js.map} +1 -1
  13. package/dist/{Avatar-Bbwk2MCy.js → Avatar-gtxslf5v.js} +2 -2
  14. package/dist/{Avatar-Bbwk2MCy.js.map → Avatar-gtxslf5v.js.map} +1 -1
  15. package/dist/Avatar.js +2 -2
  16. package/dist/{Badge-DOnID5l5.js → Badge-DY5xJkqi.js} +2 -2
  17. package/dist/{Badge-DOnID5l5.js.map → Badge-DY5xJkqi.js.map} +1 -1
  18. package/dist/Badge.js +1 -1
  19. package/dist/{Breadcrumbs-DKqd8VRz.js → Breadcrumbs-DjR-2OEH.js} +5 -5
  20. package/dist/{Breadcrumbs-DKqd8VRz.js.map → Breadcrumbs-DjR-2OEH.js.map} +1 -1
  21. package/dist/Breadcrumbs.js +1 -1
  22. package/dist/{Button-DzcOa6iJ.js → Button-92_FKAyV.js} +3 -3
  23. package/dist/{Button-DzcOa6iJ.js.map → Button-92_FKAyV.js.map} +1 -1
  24. package/dist/Button.js +1 -1
  25. package/dist/{ButtonCompound-Dvr3Fres.js → ButtonCompound-COdSELhh.js} +2 -2
  26. package/dist/{ButtonCompound-Dvr3Fres.js.map → ButtonCompound-COdSELhh.js.map} +1 -1
  27. package/dist/ButtonCompound.js +1 -1
  28. package/dist/{ButtonLink-DGIRpyK6.js → ButtonLink-C0zR7Wnb.js} +3 -3
  29. package/dist/{ButtonLink-DGIRpyK6.js.map → ButtonLink-C0zR7Wnb.js.map} +1 -1
  30. package/dist/ButtonLink.js +1 -1
  31. package/dist/{ButtonToggle-Dv6VAm4W.js → ButtonToggle--sKvhBoA.js} +3 -3
  32. package/dist/{ButtonToggle-Dv6VAm4W.js.map → ButtonToggle--sKvhBoA.js.map} +1 -1
  33. package/dist/ButtonToggle.js +1 -1
  34. package/dist/{Calendar-8bP4LsQV.js → Calendar-1MhJ03iy.js} +2 -2
  35. package/dist/{Calendar-8bP4LsQV.js.map → Calendar-1MhJ03iy.js.map} +1 -1
  36. package/dist/{Calendar-NDOcurOz.js → Calendar-B7ypKGUn.js} +5 -5
  37. package/dist/{Calendar-NDOcurOz.js.map → Calendar-B7ypKGUn.js.map} +1 -1
  38. package/dist/Calendar.js +2 -2
  39. package/dist/{Card-Cyoz-LaD.js → Card-Ch3sMUo5.js} +2 -2
  40. package/dist/{Card-Cyoz-LaD.js.map → Card-Ch3sMUo5.js.map} +1 -1
  41. package/dist/Card.js +1 -1
  42. package/dist/{Checkbox-Bsa1FgoI.js → Checkbox-Bhjj-jM4.js} +5 -5
  43. package/dist/{Checkbox-Bsa1FgoI.js.map → Checkbox-Bhjj-jM4.js.map} +1 -1
  44. package/dist/{Checkbox-BJnt8TFk.js → Checkbox-C5Qjq_tU.js} +2 -2
  45. package/dist/{Checkbox-BJnt8TFk.js.map → Checkbox-C5Qjq_tU.js.map} +1 -1
  46. package/dist/Checkbox.js +2 -2
  47. package/dist/{Chip-BGa1Inb8.js → Chip-X2EwdZ97.js} +4 -4
  48. package/dist/{Chip-BGa1Inb8.js.map → Chip-X2EwdZ97.js.map} +1 -1
  49. package/dist/Chip.js +1 -1
  50. package/dist/{Combobox-BfqKpX1v.js → Combobox-C4COM7BZ.js} +13 -13
  51. package/dist/{Combobox-BfqKpX1v.js.map → Combobox-C4COM7BZ.js.map} +1 -1
  52. package/dist/Combobox.js +1 -1
  53. package/dist/{DataTable-xUON92DR.js → DataTable-BkNCMaVu.js} +93 -89
  54. package/dist/DataTable-BkNCMaVu.js.map +1 -0
  55. package/dist/{DateField-Cm0FIG3Y.js → DateField-C5rA3USK.js} +6 -6
  56. package/dist/{DateField-Cm0FIG3Y.js.map → DateField-C5rA3USK.js.map} +1 -1
  57. package/dist/DateField.js +1 -1
  58. package/dist/{DateFieldRange-CGGqW_cg.js → DateFieldRange-BLfEH-oC.js} +7 -7
  59. package/dist/{DateFieldRange-CGGqW_cg.js.map → DateFieldRange-BLfEH-oC.js.map} +1 -1
  60. package/dist/DateFieldRange.js +1 -1
  61. package/dist/{DateFieldSingle-BYWuJ3IL.js → DateFieldSingle-7Cx_FMtb.js} +7 -7
  62. package/dist/{DateFieldSingle-BYWuJ3IL.js.map → DateFieldSingle-7Cx_FMtb.js.map} +1 -1
  63. package/dist/DateFieldSingle.js +1 -1
  64. package/dist/DateFieldYearless-D2uo-uqE.js +132 -0
  65. package/dist/DateFieldYearless-D2uo-uqE.js.map +1 -0
  66. package/dist/DateFieldYearless.js +1 -1
  67. package/dist/DateFieldYearlessRange-BivGidsU.js +178 -0
  68. package/dist/DateFieldYearlessRange-BivGidsU.js.map +1 -0
  69. package/dist/DateFieldYearlessRange.css +36 -0
  70. package/dist/DateFieldYearlessRange.d.ts +2 -0
  71. package/dist/DateFieldYearlessRange.js +2 -0
  72. package/dist/DateFieldYearlessRange.js.map +1 -0
  73. package/dist/{DaysOfTheWeek-BIi9dyJP.js → DaysOfTheWeek-Dn6zHxpt.js} +6 -6
  74. package/dist/{DaysOfTheWeek-BIi9dyJP.js.map → DaysOfTheWeek-Dn6zHxpt.js.map} +1 -1
  75. package/dist/DaysOfTheWeek.js +1 -1
  76. package/dist/{Details-Bg7QzlOm.js → Details-CkaKTRvc.js} +3 -3
  77. package/dist/{Details-Bg7QzlOm.js.map → Details-CkaKTRvc.js.map} +1 -1
  78. package/dist/Details.js +1 -1
  79. package/dist/{Dialog-fJClGTI6.js → Dialog-CxH4Vnbb.js} +4 -4
  80. package/dist/{Dialog-fJClGTI6.js.map → Dialog-CxH4Vnbb.js.map} +1 -1
  81. package/dist/Dialog.js +1 -1
  82. package/dist/{Divider-DYZFKug1.js → Divider-Olv8yWXD.js} +2 -2
  83. package/dist/{Divider-DYZFKug1.js.map → Divider-Olv8yWXD.js.map} +1 -1
  84. package/dist/Divider.js +1 -1
  85. package/dist/Dnd.js +1 -1
  86. package/dist/DndSort.js +5 -5
  87. package/dist/{Drawer-DyHDRTR-.js → Drawer-BLfDJU-e.js} +4 -4
  88. package/dist/{Drawer-DyHDRTR-.js.map → Drawer-BLfDJU-e.js.map} +1 -1
  89. package/dist/Drawer.js +1 -1
  90. package/dist/{EditCard-LdyduHqX.js → EditCard-Ds1UXJIS.js} +6 -6
  91. package/dist/{EditCard-LdyduHqX.js.map → EditCard-Ds1UXJIS.js.map} +1 -1
  92. package/dist/EditCard.js +1 -1
  93. package/dist/{FieldLabel-DIlzcPIQ.js → FieldLabel-CHMCV9wX.js} +38 -19
  94. package/dist/FieldLabel-CHMCV9wX.js.map +1 -0
  95. package/dist/FieldLabel.css +22 -7
  96. package/dist/FieldLabel.js +1 -1
  97. package/dist/{FieldMessage-BbARBii0.js → FieldMessage-DWONT3dr.js} +2 -2
  98. package/dist/{FieldMessage-BbARBii0.js.map → FieldMessage-DWONT3dr.js.map} +1 -1
  99. package/dist/FieldMessage.js +1 -1
  100. package/dist/{Flex-GLF5XRJg.js → Flex-CjPHUTeq.js} +2 -2
  101. package/dist/{Flex-GLF5XRJg.js.map → Flex-CjPHUTeq.js.map} +1 -1
  102. package/dist/Flex.js +1 -1
  103. package/dist/{Grid-BpAt2zA7.js → Grid-DW2cAuHi.js} +2 -2
  104. package/dist/{Grid-BpAt2zA7.js.map → Grid-DW2cAuHi.js.map} +1 -1
  105. package/dist/Grid.js +1 -1
  106. package/dist/{Helper-DHoKHqxV.js → Helper-DjWotFtO.js} +2 -2
  107. package/dist/{Helper-DHoKHqxV.js.map → Helper-DjWotFtO.js.map} +1 -1
  108. package/dist/{Icon-TcJbUdTz.js → Icon-BSuTVNaa.js} +2 -2
  109. package/dist/{Icon-TcJbUdTz.js.map → Icon-BSuTVNaa.js.map} +1 -1
  110. package/dist/Icon.js +1 -1
  111. package/dist/{InputMask-B6oJlChY.js → InputMask-fS5nqXdI.js} +2 -2
  112. package/dist/{InputMask-B6oJlChY.js.map → InputMask-fS5nqXdI.js.map} +1 -1
  113. package/dist/InputMask.js +1 -1
  114. package/dist/{Link-Br_AJ7Af.js → Link-DuYh7Xl2.js} +3 -3
  115. package/dist/{Link-Br_AJ7Af.js.map → Link-DuYh7Xl2.js.map} +1 -1
  116. package/dist/Link.js +1 -1
  117. package/dist/{LinkButton-CwiVzaro.js → LinkButton-pIUNATNE.js} +2 -2
  118. package/dist/{LinkButton-CwiVzaro.js.map → LinkButton-pIUNATNE.js.map} +1 -1
  119. package/dist/LinkButton.js +1 -1
  120. package/dist/{ListView-fBFSagWO.js → ListView-CZ5T8bR1.js} +3 -3
  121. package/dist/{ListView-fBFSagWO.js.map → ListView-CZ5T8bR1.js.map} +1 -1
  122. package/dist/ListView.js +1 -1
  123. package/dist/{Listbox-gtZ2Ao_I.js → Listbox-C-n4IVVj.js} +5 -5
  124. package/dist/{Listbox-gtZ2Ao_I.js.map → Listbox-C-n4IVVj.js.map} +1 -1
  125. package/dist/Listbox.js +1 -1
  126. package/dist/{LocalizationProvider-Cqattc3O.js → LocalizationProvider-u6xdKCBi.js} +2 -2
  127. package/dist/{LocalizationProvider-Cqattc3O.js.map → LocalizationProvider-u6xdKCBi.js.map} +1 -1
  128. package/dist/LocalizationProvider.js +1 -1
  129. package/dist/{Menu-CBbUK_sX.js → Menu-DUAfSImY.js} +4 -4
  130. package/dist/{Menu-CBbUK_sX.js.map → Menu-DUAfSImY.js.map} +1 -1
  131. package/dist/Menu.js +1 -1
  132. package/dist/{NumberField-CNskrtsN.js → NumberField-C62E56_v.js} +7 -7
  133. package/dist/{NumberField-CNskrtsN.js.map → NumberField-C62E56_v.js.map} +1 -1
  134. package/dist/NumberField.js +1 -1
  135. package/dist/Overflow.js +2 -3
  136. package/dist/Overflow.js.map +1 -1
  137. package/dist/{Page-4VdFrCjy.js → Page-CGZQ-nsg.js} +15 -15
  138. package/dist/Page-CGZQ-nsg.js.map +1 -0
  139. package/dist/Page.js +1 -1
  140. package/dist/{Pagination-CQjNN1yN.js → Pagination-BHEEnNas.js} +6 -6
  141. package/dist/{Pagination-CQjNN1yN.js.map → Pagination-BHEEnNas.js.map} +1 -1
  142. package/dist/Pagination.js +1 -1
  143. package/dist/{Popover--c9PXAVi.js → Popover-CIPg_ZgX.js} +5 -4
  144. package/dist/Popover-CIPg_ZgX.js.map +1 -0
  145. package/dist/Popover.js +1 -1
  146. package/dist/{ProgressBar-CXMuhBQV.js → ProgressBar-CUpF9fFW.js} +6 -6
  147. package/dist/{ProgressBar-CXMuhBQV.js.map → ProgressBar-CUpF9fFW.js.map} +1 -1
  148. package/dist/ProgressBar.js +1 -1
  149. package/dist/{Radio-CTYs8JpI.js → Radio-CyCFna1X.js} +2 -2
  150. package/dist/{Radio-CTYs8JpI.js.map → Radio-CyCFna1X.js.map} +1 -1
  151. package/dist/Radio.js +2 -2
  152. package/dist/{RadioGroup-BVGnsTuG.js → RadioGroup-DRS2EjVH.js} +5 -5
  153. package/dist/{RadioGroup-BVGnsTuG.js.map → RadioGroup-DRS2EjVH.js.map} +1 -1
  154. package/dist/{SearchField-DLqva3o3.js → SearchField-DrgNbG3I.js} +3 -3
  155. package/dist/{SearchField-DLqva3o3.js.map → SearchField-DrgNbG3I.js.map} +1 -1
  156. package/dist/SearchField.js +1 -1
  157. package/dist/{SegmentedControl-1OzOQmCp.js → SegmentedControl-C-QOwO7q.js} +2 -2
  158. package/dist/{SegmentedControl-1OzOQmCp.js.map → SegmentedControl-C-QOwO7q.js.map} +1 -1
  159. package/dist/SegmentedControl.js +1 -1
  160. package/dist/{SelectCard-Dw7zW0UN.js → SelectCard-lBcnP5j5.js} +4 -4
  161. package/dist/{SelectCard-Dw7zW0UN.js.map → SelectCard-lBcnP5j5.js.map} +1 -1
  162. package/dist/SelectCard.js +1 -1
  163. package/dist/{SelectTrigger-BQNqyG3M.js → SelectTrigger-qvoGCkb1.js} +5 -5
  164. package/dist/{SelectTrigger-BQNqyG3M.js.map → SelectTrigger-qvoGCkb1.js.map} +1 -1
  165. package/dist/SelectTrigger.js +1 -1
  166. package/dist/{SelectTriggerBase-B-fxog4U.js → SelectTriggerBase-C4gebtca.js} +6 -6
  167. package/dist/{SelectTriggerBase-B-fxog4U.js.map → SelectTriggerBase-C4gebtca.js.map} +1 -1
  168. package/dist/{SideNav-COiPAIph.js → SideNav-B1sH17Uc.js} +3 -3
  169. package/dist/{SideNav-COiPAIph.js.map → SideNav-B1sH17Uc.js.map} +1 -1
  170. package/dist/SideNav.js +1 -1
  171. package/dist/Skeleton.js +1 -1
  172. package/dist/{Stepper-xcgOQzru.js → Stepper-B0U_YrbZ.js} +4 -4
  173. package/dist/{Stepper-xcgOQzru.js.map → Stepper-B0U_YrbZ.js.map} +1 -1
  174. package/dist/Stepper.js +1 -1
  175. package/dist/{Switch-mhyHJeex.js → Switch-DjL2CsQi.js} +5 -5
  176. package/dist/{Switch-mhyHJeex.js.map → Switch-DjL2CsQi.js.map} +1 -1
  177. package/dist/Switch.js +1 -1
  178. package/dist/{Tab-BISlFW_i.js → Tab-6UavokJJ.js} +3 -3
  179. package/dist/{Tab-BISlFW_i.js.map → Tab-6UavokJJ.js.map} +1 -1
  180. package/dist/Tab.js +1 -1
  181. package/dist/Table.js +1 -1
  182. package/dist/{Text-CDzLZl1O.js → Text-kPA-VzsB.js} +2 -2
  183. package/dist/{Text-CDzLZl1O.js.map → Text-kPA-VzsB.js.map} +1 -1
  184. package/dist/Text.js +1 -1
  185. package/dist/{TextField-CUrYEZR4.js → TextField-DOSwy_gm.js} +2 -2
  186. package/dist/{TextField-CUrYEZR4.js.map → TextField-DOSwy_gm.js.map} +1 -1
  187. package/dist/{TextField-DPTJjF8V.js → TextField-DcyjojNg.js} +4 -4
  188. package/dist/{TextField-DPTJjF8V.js.map → TextField-DcyjojNg.js.map} +1 -1
  189. package/dist/TextField.js +1 -1
  190. package/dist/{Textarea-f0jAKcvn.js → Textarea-DacevzmW.js} +4 -4
  191. package/dist/{Textarea-f0jAKcvn.js.map → Textarea-DacevzmW.js.map} +1 -1
  192. package/dist/Textarea.js +1 -1
  193. package/dist/{ThemeProvider-CUiXHn4p.js → ThemeProvider-Bmsz__5N.js} +2 -2
  194. package/dist/{ThemeProvider-CUiXHn4p.js.map → ThemeProvider-Bmsz__5N.js.map} +1 -1
  195. package/dist/ThemeProvider.js +1 -1
  196. package/dist/{TimeField-CGSwrpl0.js → TimeField-C4s8fjDG.js} +7 -7
  197. package/dist/{TimeField-CGSwrpl0.js.map → TimeField-C4s8fjDG.js.map} +1 -1
  198. package/dist/TimeField.js +1 -1
  199. package/dist/Toast.js +2 -2
  200. package/dist/{Toaster-C6iB4h0P.js → Toaster-BxbR-XcR.js} +2 -2
  201. package/dist/{Toaster-C6iB4h0P.js.map → Toaster-BxbR-XcR.js.map} +1 -1
  202. package/dist/{Toaster-D72xHdfH.js → Toaster-Dg7M4W4U.js} +4 -4
  203. package/dist/{Toaster-D72xHdfH.js.map → Toaster-Dg7M4W4U.js.map} +1 -1
  204. package/dist/{Toolbar-CcJa_YpH.js → Toolbar-BvFwcXOk.js} +20 -20
  205. package/dist/{Toolbar-CcJa_YpH.js.map → Toolbar-BvFwcXOk.js.map} +1 -1
  206. package/dist/Toolbar.js +1 -1
  207. package/dist/{Tooltip-BOfdwyTv.js → Tooltip-CZsoFe6C.js} +2 -2
  208. package/dist/{Tooltip-BOfdwyTv.js.map → Tooltip-CZsoFe6C.js.map} +1 -1
  209. package/dist/Tooltip.js +1 -1
  210. package/dist/YearlessDateInputWithPicker-MHLlAdrH.js +949 -0
  211. package/dist/YearlessDateInputWithPicker-MHLlAdrH.js.map +1 -0
  212. package/dist/YearlessDateInputWithPicker.css +199 -0
  213. package/dist/beta/components/Table/DataTable/DataTable.d.ts +4 -4
  214. package/dist/beta/components/Table/DataTable/internal/useAsyncData.d.ts +5 -0
  215. package/dist/beta.js +4 -4
  216. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +57 -3
  217. package/dist/components/DateFieldYearless/internal/PickerList.d.ts +61 -0
  218. package/dist/components/DateFieldYearless/internal/PickerListOption.d.ts +61 -0
  219. package/dist/components/DateFieldYearless/internal/YearlessDateInput.d.ts +51 -0
  220. package/dist/components/DateFieldYearless/internal/YearlessDateInputWithPicker.d.ts +134 -0
  221. package/dist/components/DateFieldYearless/internal/YearlessDateSelectionPopover.d.ts +27 -0
  222. package/dist/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.d.ts +3 -1
  223. package/dist/components/DateFieldYearless/internal/maskito/yearlessDateSegmentsStepping.d.ts +12 -0
  224. package/dist/components/DateFieldYearless/internal/utils.d.ts +50 -1
  225. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +59 -0
  226. package/dist/components/DateFieldYearlessRange/index.d.ts +1 -0
  227. package/dist/components/FieldLabel/FieldLabel.d.ts +9 -48
  228. package/dist/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +3 -1
  229. package/dist/components/Popover/Popover.d.ts +1 -0
  230. package/dist/components/Popover/PopoverContent.d.ts +8 -0
  231. package/dist/components/index.d.ts +1 -0
  232. package/dist/{index-CUVkL0hr.js → index-B25zeBIC.js} +3 -3
  233. package/dist/{index-CUVkL0hr.js.map → index-B25zeBIC.js.map} +1 -1
  234. package/dist/{index.esm-BwMVvxTV.js → index.esm-C2ZhC_8d.js} +2 -2
  235. package/dist/{index.esm-BwMVvxTV.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
  236. package/dist/index.js +68 -67
  237. package/dist/index.js.map +1 -1
  238. package/dist/{useLayoutPropsUtil-C7FVYB8F.js → useLayoutPropsUtil-BlIWftBb.js} +2 -2
  239. package/dist/{useLayoutPropsUtil-C7FVYB8F.js.map → useLayoutPropsUtil-BlIWftBb.js.map} +1 -1
  240. package/dist/{utils-CyPyKUVh.js → utils-B8bmyfFR.js} +2 -2
  241. package/dist/{utils-CyPyKUVh.js.map → utils-B8bmyfFR.js.map} +1 -1
  242. package/package.json +2 -1
  243. package/dist/DataTable-xUON92DR.js.map +0 -1
  244. package/dist/DateFieldYearless-BXRgNWzy.js +0 -266
  245. package/dist/DateFieldYearless-BXRgNWzy.js.map +0 -1
  246. package/dist/FieldLabel-DIlzcPIQ.js.map +0 -1
  247. package/dist/Page-4VdFrCjy.js.map +0 -1
  248. package/dist/Popover--c9PXAVi.js.map +0 -1
  249. package/dist/components/DateFieldYearless/internal/MaskedYearlessDateInput.d.ts +0 -35
@@ -0,0 +1,949 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { forwardRef, useRef, useImperativeHandle, useMemo, useEffect, useState, useCallback } from 'react';
3
+ import { P as Popover } from './Popover-CIPg_ZgX.js';
4
+ import { I as Icon$1 } from './Icon-BSuTVNaa.js';
5
+ import { F as Flex } from './Flex-CjPHUTeq.js';
6
+ import { S as SvgCheck } from './check-Cf67OWrZ.js';
7
+ import { c as cx } from './index-tZvMCc77.js';
8
+ import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
9
+ import { g as maskitoUpdateElement, m as maskitoDateOptionsGenerator, a as maskitoWithPlaceholder, h as maskitoTransform, u as useMaskito } from './index.esm-C2ZhC_8d.js';
10
+ import { u as useMergeRefs } from './DrawerContext-D4tWTLVf.js';
11
+ import { m as makeZeroShortcutPreprocessor } from './makeZeroShortcutPreprocessor-CxsiGTRW.js';
12
+ import { t as textFieldStyles } from './TextField.module-pD1felN8.js';
13
+ import { S as Spinner } from './Spinner-xEFwsq8_.js';
14
+ import { u as usePrevious } from './usePrevious-Bvq-5auG.js';
15
+ import { m as mergeRefs } from './useMergeRefs-Dfmtq9cI.js';
16
+ import { u as usePopoverSupport } from './usePopoverSupport-CWTCDfN2.js';
17
+ import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
18
+ import { u as useFocusWithin } from './useFocusWithin-hi77jsrB.js';
19
+
20
+ import './YearlessDateInputWithPicker.css';const children = "_children_hme83_88";
21
+ const Icon = "_Icon_hme83_91";
22
+ const styles = {
23
+ "picker-list": "_picker-list_hme83_2",
24
+ "picker-list-option": "_picker-list-option_hme83_15",
25
+ children: children,
26
+ Icon: Icon
27
+ };
28
+
29
+ const PickerListOption = forwardRef((props, ref) => {
30
+ const {
31
+ className,
32
+ children,
33
+ onClick,
34
+ item,
35
+ isSelected,
36
+ onSelectionChange,
37
+ alignItems,
38
+ justifyItems,
39
+ alignContent,
40
+ justifyContent,
41
+ placeItems,
42
+ placeContent,
43
+ ...rest
44
+ } = props;
45
+ const disabled = item.disabled || false;
46
+ const handleSelection = () => {
47
+ if (disabled) return;
48
+ if (isSelected) {
49
+ onSelectionChange(void 0);
50
+ } else {
51
+ onSelectionChange(item);
52
+ }
53
+ };
54
+ const onClickHandler = (e) => {
55
+ onClick?.(e);
56
+ handleSelection();
57
+ };
58
+ const onKeyDownHandler = (e) => {
59
+ if (e.key === "Enter" || e.key === " ") {
60
+ e.preventDefault();
61
+ handleSelection();
62
+ }
63
+ };
64
+ const PickerListOptionClassNames = cx(
65
+ styles["picker-list-option"],
66
+ className
67
+ );
68
+ return /* @__PURE__ */ jsxs(
69
+ "li",
70
+ {
71
+ className: PickerListOptionClassNames,
72
+ "data-anv": "picker-list-option",
73
+ role: "option",
74
+ "aria-disabled": disabled,
75
+ "aria-selected": isSelected,
76
+ "data-item-label": item.label,
77
+ onClick: onClickHandler,
78
+ onKeyDown: onKeyDownHandler,
79
+ tabIndex: -1,
80
+ ref,
81
+ ...rest,
82
+ children: [
83
+ /* @__PURE__ */ jsx(
84
+ Flex,
85
+ {
86
+ className: styles["children"],
87
+ grow: 1,
88
+ shrink: 1,
89
+ alignItems,
90
+ justifyItems,
91
+ alignContent,
92
+ justifyContent,
93
+ placeItems,
94
+ placeContent,
95
+ children: children || item.label
96
+ }
97
+ ),
98
+ /* @__PURE__ */ jsx(
99
+ Icon$1,
100
+ {
101
+ "aria-hidden": true,
102
+ svg: SvgCheck,
103
+ inherit: true,
104
+ className: styles["Icon"],
105
+ style: { opacity: isSelected ? 1 : 0 }
106
+ }
107
+ )
108
+ ]
109
+ }
110
+ );
111
+ });
112
+ PickerListOption.displayName = "PickerListOption";
113
+
114
+ const PickerList = forwardRef(
115
+ (props, ref) => {
116
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
117
+ const {
118
+ className,
119
+ items,
120
+ onSelectionChange,
121
+ selected: selectedProp,
122
+ style,
123
+ ...rest
124
+ } = componentProps;
125
+ const listRef = useRef(null);
126
+ const scrollToItem = (label, behavior = "smooth") => {
127
+ const listElement = listRef.current;
128
+ const itemElement = listElement?.querySelector(
129
+ `li[data-item-label="${label}"]`
130
+ );
131
+ if (listElement && itemElement) {
132
+ const itemTop = itemElement.offsetTop;
133
+ const itemHeight = itemElement.offsetHeight;
134
+ const listHeight = listElement.clientHeight;
135
+ const targetScrollTop = itemTop - listHeight / 2 + itemHeight / 2;
136
+ const maxScrollTop = listElement.scrollHeight - listHeight;
137
+ const clampedScrollTop = Math.max(
138
+ 0,
139
+ Math.min(targetScrollTop, maxScrollTop)
140
+ );
141
+ listElement.scrollTo({
142
+ top: clampedScrollTop,
143
+ behavior
144
+ });
145
+ }
146
+ };
147
+ const scrollToValue = (value, behavior = "smooth") => {
148
+ const item = items.find((item2) => item2.value === value);
149
+ if (item) {
150
+ scrollToItem(item.label, behavior);
151
+ }
152
+ };
153
+ useImperativeHandle(ref, () => ({
154
+ scrollToItem,
155
+ scrollToValue
156
+ }));
157
+ const handleSelectionChange = (item) => {
158
+ onSelectionChange?.(item);
159
+ };
160
+ const PickerListClassNames = cx(styles["picker-list"], className);
161
+ const styleCombined = {
162
+ ...style,
163
+ ...layoutStyles
164
+ };
165
+ return /* @__PURE__ */ jsx(
166
+ "ul",
167
+ {
168
+ role: "listbox",
169
+ style: styleCombined,
170
+ className: PickerListClassNames,
171
+ "data-anv": "picker-list",
172
+ ref: listRef,
173
+ ...rest,
174
+ tabIndex: -1,
175
+ children: items.map((item) => /* @__PURE__ */ jsx(
176
+ PickerListOption,
177
+ {
178
+ item,
179
+ isSelected: selectedProp?.value === item.value,
180
+ onSelectionChange: handleSelectionChange
181
+ },
182
+ item.label
183
+ ))
184
+ }
185
+ );
186
+ }
187
+ );
188
+ PickerList.displayName = "PickerList";
189
+
190
+ function validateYearlessDate({
191
+ value,
192
+ constraints
193
+ }) {
194
+ const { required, unavailable, minDate, maxDate } = constraints;
195
+ if (!value || !value?.day && !value?.month) {
196
+ return required ? false : true;
197
+ }
198
+ if (value.day === null || value.month === null) {
199
+ return false;
200
+ }
201
+ if (unavailable?.dates?.some(
202
+ (d) => d.day === value.day && d.month === value.month
203
+ )) {
204
+ return false;
205
+ }
206
+ const minDateMonth = minDate?.month ?? 1;
207
+ const minDateDay = minDate?.day ?? 1;
208
+ const maxDateMonth = maxDate?.month ?? 12;
209
+ const maxDateDay = maxDate?.day ?? 31;
210
+ if (value.month < minDateMonth || // Earlier month
211
+ value.month === minDateMonth && value.day < minDateDay) {
212
+ return false;
213
+ }
214
+ if (value.month > maxDateMonth || // Later month
215
+ value.month === maxDateMonth && value.day > maxDateDay) {
216
+ return false;
217
+ }
218
+ return true;
219
+ }
220
+ function getMonthNames({
221
+ locale,
222
+ format
223
+ }) {
224
+ const formatFn = new Intl.DateTimeFormat(locale, { month: format }).format;
225
+ return [...Array(12).keys()].map(
226
+ (m) => formatFn(new Date(Date.UTC(2021, (m + 1) % 12)))
227
+ );
228
+ }
229
+ function parseInputValue(value, mode, removePlaceholder) {
230
+ const valueMinusPlaceholder = removePlaceholder(value);
231
+ const [segment1, segment2] = valueMinusPlaceholder.split("/");
232
+ const incompleteFirstSegment = segment1?.length !== 2;
233
+ const incompleteSecondSegment = segment2?.length !== 2;
234
+ if (mode === "dd/mm") {
235
+ return {
236
+ value: {
237
+ day: incompleteFirstSegment ? null : parseInt(segment1),
238
+ month: incompleteSecondSegment ? null : parseInt(segment2)
239
+ },
240
+ isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,
241
+ isInputEmpty: valueMinusPlaceholder === ""
242
+ };
243
+ }
244
+ return {
245
+ value: {
246
+ day: incompleteSecondSegment ? null : parseInt(segment2),
247
+ month: incompleteFirstSegment ? null : parseInt(segment1)
248
+ },
249
+ isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,
250
+ isInputEmpty: valueMinusPlaceholder === ""
251
+ };
252
+ }
253
+ function swapMode(inputString, previousMode, mode) {
254
+ const { day, month } = divideSegments(inputString, previousMode);
255
+ return stringifyYearlessDate(day, month, mode);
256
+ }
257
+ function divideSegments(value, mode) {
258
+ const [segment1, segment2] = value.split("/");
259
+ if (mode === "dd/mm") {
260
+ return { day: segment1, month: segment2 };
261
+ }
262
+ return { day: segment2, month: segment1 };
263
+ }
264
+ function stringifyYearlessDate(day, month, mode) {
265
+ const dd = (day ?? "__").toString().padStart(2, "0");
266
+ const mm = (month ?? "__").toString().padStart(2, "0");
267
+ if (mode === "dd/mm") {
268
+ return `${dd}/${mm}`;
269
+ }
270
+ return `${mm}/${dd}`;
271
+ }
272
+ function getDaysInMonth(month) {
273
+ return new Date(2024, month, 0).getDate();
274
+ }
275
+ function getInvalidMonthsForDay(day) {
276
+ const invalidMonths = [];
277
+ for (let month = 1; month <= 12; month++) {
278
+ const daysInMonth = getDaysInMonth(month);
279
+ if (day > daysInMonth) {
280
+ invalidMonths.push(month);
281
+ }
282
+ }
283
+ return invalidMonths;
284
+ }
285
+
286
+ const dateFieldYearlessStyles = {
287
+ "scrolling-container": "_scrolling-container_141ci_7"
288
+ };
289
+
290
+ function YearlessDateSelectionPopover({
291
+ children,
292
+ popoverRef,
293
+ popoverContentRef,
294
+ month,
295
+ day,
296
+ onMonthChange,
297
+ onDayChange,
298
+ onClose,
299
+ mode,
300
+ onFocus,
301
+ onBlur
302
+ }) {
303
+ const monthListboxRef = useRef(null);
304
+ const dayListboxRef = useRef(null);
305
+ const months = useMemo(() => {
306
+ return getMonthNames({ locale: "en-US", format: "short" }).map(
307
+ (name, index) => ({
308
+ label: name,
309
+ value: index + 1
310
+ })
311
+ );
312
+ }, []);
313
+ const days = useMemo(() => {
314
+ return Array.from({ length: 31 }, (_, i) => ({
315
+ label: `${i + 1}`,
316
+ value: i + 1
317
+ }));
318
+ }, []);
319
+ const invalidDays = useMemo(() => {
320
+ if (!month) {
321
+ return [];
322
+ }
323
+ const daysInMonth = getDaysInMonth(month);
324
+ return Array.from(
325
+ { length: 31 - daysInMonth },
326
+ (_, i) => daysInMonth + i + 1
327
+ );
328
+ }, [month]);
329
+ const invalidMonths = useMemo(() => {
330
+ if (!day) {
331
+ return [];
332
+ }
333
+ return getInvalidMonthsForDay(day);
334
+ }, [day]);
335
+ const scrollToSelectedOption = (value, ref, behavior = "smooth") => {
336
+ if (value && ref.current) {
337
+ ref.current.scrollToValue(value, behavior);
338
+ }
339
+ };
340
+ useEffect(() => {
341
+ scrollToSelectedOption(month, monthListboxRef, "smooth");
342
+ }, [month]);
343
+ useEffect(() => {
344
+ scrollToSelectedOption(day, dayListboxRef, "smooth");
345
+ }, [day]);
346
+ const handleMonthChange = (selected) => {
347
+ if (selected?.value) {
348
+ onMonthChange?.(selected.value);
349
+ if (day && invalidDays.includes(day)) {
350
+ onDayChange?.(null);
351
+ }
352
+ }
353
+ };
354
+ const handleDayChange = (selected) => {
355
+ if (selected?.value) {
356
+ onDayChange?.(selected.value);
357
+ if (month && invalidMonths.includes(month)) {
358
+ onMonthChange?.(null);
359
+ }
360
+ }
361
+ };
362
+ const monthPicker = /* @__PURE__ */ jsx(
363
+ PickerList,
364
+ {
365
+ ref: monthListboxRef,
366
+ items: months.map((item) => ({
367
+ ...item,
368
+ disabled: invalidMonths.includes(item.value)
369
+ })),
370
+ selected: months.find((m) => m.value === month),
371
+ style: { maxHeight: "240px", overflow: "auto" },
372
+ className: dateFieldYearlessStyles["scrolling-container"],
373
+ onSelectionChange: handleMonthChange
374
+ }
375
+ );
376
+ const dayPicker = /* @__PURE__ */ jsx(
377
+ PickerList,
378
+ {
379
+ ref: dayListboxRef,
380
+ items: days.map((item) => ({
381
+ ...item,
382
+ disabled: invalidDays.includes(item.value)
383
+ })),
384
+ selected: days.find((d) => d.value === day),
385
+ className: dateFieldYearlessStyles["scrolling-container"],
386
+ onSelectionChange: handleDayChange
387
+ }
388
+ );
389
+ return /* @__PURE__ */ jsxs(
390
+ Popover,
391
+ {
392
+ ref: popoverRef,
393
+ placement: "bottom-start",
394
+ disableFlipFallback: true,
395
+ disableCaret: true,
396
+ disableAutoUpdate: true,
397
+ onClose,
398
+ onOpenAnimationStart: () => {
399
+ scrollToSelectedOption(month, monthListboxRef, "instant");
400
+ scrollToSelectedOption(day, dayListboxRef, "instant");
401
+ },
402
+ children: [
403
+ /* @__PURE__ */ jsx(Popover.Trigger, { children: (triggerProps) => /* @__PURE__ */ jsx(Fragment, { children: children(triggerProps) }) }),
404
+ /* @__PURE__ */ jsx(
405
+ Popover.Content,
406
+ {
407
+ ref: popoverContentRef,
408
+ hideWhileClosed: true,
409
+ onFocus,
410
+ onBlur,
411
+ children: /* @__PURE__ */ jsx(Flex, { gap: 2, style: { maxHeight: "240px" }, children: mode === "dd/mm" ? /* @__PURE__ */ jsxs(Fragment, { children: [
412
+ dayPicker,
413
+ monthPicker
414
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
415
+ monthPicker,
416
+ dayPicker
417
+ ] }) })
418
+ }
419
+ )
420
+ ]
421
+ }
422
+ );
423
+ }
424
+
425
+ const MIN_MONTH = 1;
426
+ const MAX_MONTH = 12;
427
+ const MIN_DAY = 1;
428
+ const MAX_DAY = 31;
429
+ const SEGMENT_LENGTH = 2;
430
+ function createYearlessDateSegmentsSteppingPlugin({
431
+ mode
432
+ }) {
433
+ const segmentsIndexes = createSegmentIndexes(mode);
434
+ return (element) => {
435
+ const listener = (event) => {
436
+ if (event.key === "ArrowRight") {
437
+ handleArrowRight(element, event);
438
+ return;
439
+ }
440
+ if (event.key !== "ArrowUp" && event.key !== "ArrowDown") {
441
+ return;
442
+ }
443
+ event.preventDefault();
444
+ const selectionStart = element.selectionStart ?? 0;
445
+ const activeSegment = getActiveSegment({
446
+ segmentsIndexes,
447
+ selectionStart
448
+ });
449
+ if (!activeSegment) {
450
+ return;
451
+ }
452
+ const segmentSelection = segmentsIndexes.get(activeSegment);
453
+ if (!segmentSelection) {
454
+ return;
455
+ }
456
+ const maxValue = getMaxValueForSegment(
457
+ activeSegment,
458
+ element.value,
459
+ segmentsIndexes
460
+ );
461
+ const updatedValue = updateSegmentValue({
462
+ selection: segmentSelection,
463
+ value: element.value,
464
+ increment: event.key === "ArrowUp" ? -1 : 1,
465
+ min: MIN_DAY,
466
+ max: maxValue
467
+ });
468
+ const finalValue = activeSegment === "month" ? adjustDayForNewMonth(updatedValue, segmentsIndexes) : updatedValue;
469
+ maskitoUpdateElement(element, {
470
+ value: finalValue,
471
+ selection: [selectionStart, selectionStart]
472
+ });
473
+ };
474
+ element.addEventListener("keydown", listener);
475
+ return () => element.removeEventListener("keydown", listener);
476
+ };
477
+ }
478
+ function createSegmentIndexes(mode) {
479
+ const map = /* @__PURE__ */ new Map();
480
+ if (mode === "mm/dd") {
481
+ map.set("month", [0, SEGMENT_LENGTH]);
482
+ map.set("day", [SEGMENT_LENGTH + 1, SEGMENT_LENGTH * 2 + 1]);
483
+ } else if (mode === "dd/mm") {
484
+ map.set("day", [0, SEGMENT_LENGTH]);
485
+ map.set("month", [SEGMENT_LENGTH + 1, SEGMENT_LENGTH * 2 + 1]);
486
+ }
487
+ return map;
488
+ }
489
+ function handleArrowRight(element, event) {
490
+ const selectionStart = element.selectionStart ?? 0;
491
+ const value = element.value;
492
+ if (selectionStart === SEGMENT_LENGTH && value.includes("__")) {
493
+ event.preventDefault();
494
+ maskitoUpdateElement(element, {
495
+ value: value + "/",
496
+ selection: [selectionStart + 1, selectionStart + 1]
497
+ });
498
+ }
499
+ }
500
+ function adjustDayForNewMonth(value, segmentsIndexes) {
501
+ const monthSelection = segmentsIndexes.get("month");
502
+ const daySelection = segmentsIndexes.get("day");
503
+ if (!monthSelection || !daySelection) {
504
+ return value;
505
+ }
506
+ const monthValue = parseSegmentValue(value, monthSelection);
507
+ const dayValue = parseSegmentValue(value, daySelection);
508
+ if (monthValue < MIN_MONTH || monthValue > MAX_MONTH || dayValue < MIN_DAY) {
509
+ return value;
510
+ }
511
+ const maxDaysInMonth = getDaysInMonth(monthValue);
512
+ if (dayValue <= maxDaysInMonth) {
513
+ return value;
514
+ }
515
+ const [dayFrom, dayTo] = daySelection;
516
+ const adjustedDay = String(maxDaysInMonth).padStart(dayTo - dayFrom, "0");
517
+ return value.slice(0, dayFrom) + adjustedDay + value.slice(dayTo, value.length);
518
+ }
519
+ function parseSegmentValue(value, selection) {
520
+ const [from, to] = selection;
521
+ const segmentText = value.slice(from, to);
522
+ if (segmentText.includes("_")) return 0;
523
+ return Number(segmentText.padEnd(to - from, "0"));
524
+ }
525
+ function getMaxValueForSegment(segment, value, segmentsIndexes) {
526
+ if (segment === "month") {
527
+ return MAX_MONTH;
528
+ }
529
+ const monthSelection = segmentsIndexes.get("month");
530
+ if (!monthSelection) {
531
+ return MAX_DAY;
532
+ }
533
+ const monthValue = parseSegmentValue(value, monthSelection);
534
+ if (monthValue < MIN_MONTH || monthValue > MAX_MONTH) {
535
+ return MAX_DAY;
536
+ }
537
+ return getDaysInMonth(monthValue);
538
+ }
539
+ function getActiveSegment({
540
+ segmentsIndexes,
541
+ selectionStart
542
+ }) {
543
+ for (const [segmentName, segmentRange] of segmentsIndexes.entries()) {
544
+ const [from, to] = segmentRange;
545
+ if (from <= selectionStart && selectionStart <= to) {
546
+ return segmentName;
547
+ }
548
+ }
549
+ return null;
550
+ }
551
+ function updateSegmentValue({
552
+ selection,
553
+ value,
554
+ increment,
555
+ min,
556
+ max
557
+ }) {
558
+ const [from, to] = selection;
559
+ const segmentValue = parseSegmentValue(value, selection);
560
+ if (segmentValue === 0 && increment < 0) return value;
561
+ const newSegmentValue = Math.max(
562
+ min,
563
+ Math.min(max, segmentValue + increment)
564
+ );
565
+ return value.slice(0, from) + String(newSegmentValue).padStart(to - from, "0") + value.slice(to, value.length);
566
+ }
567
+
568
+ const yearlessDatePlaceholderMask = ({
569
+ mode,
570
+ separator = "/",
571
+ placeholder,
572
+ enableStepping = false
573
+ }) => {
574
+ const dateOptions = maskitoDateOptionsGenerator({
575
+ mode,
576
+ separator
577
+ });
578
+ const { plugins, removePlaceholder, ...placeholderOptions } = maskitoWithPlaceholder(placeholder);
579
+ const datePlaceholderMask = {
580
+ ...dateOptions,
581
+ plugins: plugins.concat([
582
+ ...dateOptions.plugins || [],
583
+ ...enableStepping ? [createYearlessDateSegmentsSteppingPlugin({ mode })] : []
584
+ ]),
585
+ preprocessors: [
586
+ ...placeholderOptions.preprocessors,
587
+ ...dateOptions.preprocessors,
588
+ makeZeroShortcutPreprocessor(mode, separator)
589
+ ],
590
+ postprocessors: [
591
+ ...dateOptions.postprocessors,
592
+ ...placeholderOptions.postprocessors
593
+ ]
594
+ };
595
+ const transform = (value) => {
596
+ return maskitoTransform(value, datePlaceholderMask);
597
+ };
598
+ return { options: datePlaceholderMask, removePlaceholder, transform };
599
+ };
600
+
601
+ const YearlessDateInput = forwardRef(
602
+ ({
603
+ onChange,
604
+ mode = "mm/dd",
605
+ value,
606
+ error,
607
+ size,
608
+ wrapperProps,
609
+ rootProps,
610
+ loading = false,
611
+ enableStepping = false,
612
+ className: classNameProp,
613
+ ...restProps
614
+ }, ref) => {
615
+ const placeholder = "__/__";
616
+ const [inputValue, setInputValue] = useState(placeholder);
617
+ const { options, removePlaceholder, transform } = yearlessDatePlaceholderMask({
618
+ mode,
619
+ placeholder,
620
+ enableStepping
621
+ });
622
+ const maskedInputRef = useMaskito({ options });
623
+ const inputRef = useRef(null);
624
+ const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);
625
+ const previousValue = usePrevious(value);
626
+ const previousMode = usePrevious(mode);
627
+ useEffect(() => {
628
+ if (mode !== previousMode) {
629
+ setInputValue(
630
+ (oldInputValue) => swapMode(oldInputValue, previousMode ?? mode, mode)
631
+ );
632
+ }
633
+ }, [mode, previousMode]);
634
+ const triggerAutoChange = useCallback(
635
+ (stringValue) => {
636
+ const {
637
+ value: v,
638
+ isInputValid,
639
+ isInputEmpty
640
+ } = parseInputValue(stringValue, mode, removePlaceholder);
641
+ onChange?.({
642
+ event: null,
643
+ value: v,
644
+ isInputValid,
645
+ isInputEmpty
646
+ });
647
+ },
648
+ [mode, removePlaceholder, onChange]
649
+ );
650
+ useEffect(() => {
651
+ if (previousValue?.day !== value?.day || previousValue?.month !== value?.month) {
652
+ if (value?.day && value?.month) {
653
+ const stringValue = stringifyYearlessDate(
654
+ value.day,
655
+ value.month,
656
+ mode
657
+ );
658
+ const transformedValue = transform(stringValue);
659
+ setInputValue(transformedValue);
660
+ if (transformedValue !== stringValue) {
661
+ triggerAutoChange(transformedValue);
662
+ }
663
+ } else if (previousValue !== null && previousValue !== void 0 && (value === null || value?.day === null && value?.month === null)) {
664
+ setInputValue(placeholder);
665
+ } else {
666
+ return;
667
+ }
668
+ }
669
+ }, [value, mode, previousValue, transform, triggerAutoChange]);
670
+ const currentParsedData = useMemo(() => {
671
+ return parseInputValue(inputValue, mode, removePlaceholder);
672
+ }, [inputValue, mode, removePlaceholder]);
673
+ const handleChange = (event) => {
674
+ setInputValue(event.target.value);
675
+ const {
676
+ value: v,
677
+ isInputValid,
678
+ isInputEmpty
679
+ } = parseInputValue(event.target.value, mode, removePlaceholder);
680
+ const isDateDifferent = v === null !== (currentParsedData.value === null) || v?.day !== currentParsedData.value?.day || v?.month !== currentParsedData.value?.month;
681
+ if (!isDateDifferent) {
682
+ return;
683
+ }
684
+ onChange?.({
685
+ event,
686
+ value: v ?? currentParsedData.value ?? null,
687
+ isInputValid,
688
+ isInputEmpty
689
+ });
690
+ };
691
+ useImperativeHandle(ref, () => {
692
+ const input = inputRef.current;
693
+ if (!input) return null;
694
+ return Object.assign(input, {
695
+ setValue: (value2) => {
696
+ if (!value2) {
697
+ setInputValue(placeholder);
698
+ return parseInputValue(placeholder, mode, removePlaceholder);
699
+ }
700
+ const valueAsString = stringifyYearlessDate(
701
+ value2.day ?? null,
702
+ value2.month ?? null,
703
+ mode
704
+ );
705
+ const transformedValue = transform(valueAsString);
706
+ setInputValue(transformedValue);
707
+ return parseInputValue(transformedValue, mode, removePlaceholder);
708
+ },
709
+ removePlaceholder
710
+ });
711
+ }, [mode, placeholder, removePlaceholder, transform]);
712
+ return /* @__PURE__ */ jsx(
713
+ "div",
714
+ {
715
+ className: cx(textFieldStyles["textfield"]),
716
+ "data-anv": "yearless-date-input",
717
+ ...rootProps,
718
+ children: /* @__PURE__ */ jsxs(
719
+ "div",
720
+ {
721
+ ...wrapperProps,
722
+ className: cx(
723
+ textFieldStyles["input-wrapper"],
724
+ wrapperProps?.className,
725
+ {
726
+ [textFieldStyles["small"]]: size === "small",
727
+ [textFieldStyles["large"]]: size === "large",
728
+ [dateFieldYearlessStyles["small"]]: size === "small",
729
+ [dateFieldYearlessStyles["large"]]: size === "large"
730
+ }
731
+ ),
732
+ children: [
733
+ /* @__PURE__ */ jsx(
734
+ "input",
735
+ {
736
+ ...restProps,
737
+ ref: combinedRef,
738
+ "data-month-value": value?.month,
739
+ "data-day-value": value?.day,
740
+ "data-input-valid": currentParsedData.isInputValid,
741
+ "data-input-empty": currentParsedData.isInputEmpty,
742
+ value: inputValue,
743
+ onChange: handleChange,
744
+ className: cx(
745
+ textFieldStyles["input"],
746
+ dateFieldYearlessStyles["input"],
747
+ {
748
+ [textFieldStyles["error"]]: error ?? false
749
+ },
750
+ classNameProp
751
+ )
752
+ }
753
+ ),
754
+ loading ? /* @__PURE__ */ jsx("div", { className: textFieldStyles["loading-spinner-wrapper"], children: /* @__PURE__ */ jsx(Spinner, {}) }) : null
755
+ ]
756
+ }
757
+ )
758
+ }
759
+ );
760
+ }
761
+ );
762
+ YearlessDateInput.displayName = "YearlessDateInput";
763
+
764
+ const YearlessDateInputWithPicker = forwardRef((props, ref) => {
765
+ const {
766
+ value: valueProp,
767
+ defaultValue: defaultValueProp,
768
+ onChange: onChangeProp,
769
+ minDate,
770
+ maxDate,
771
+ unavailable,
772
+ required,
773
+ disablePicker = false,
774
+ mode = "mm/dd",
775
+ size = "medium",
776
+ error = false,
777
+ loading = false,
778
+ onFocus: onFocusProp,
779
+ onBlur: onBlurProp,
780
+ ...restProps
781
+ } = props;
782
+ const inputRef = useRef(null);
783
+ const popoverRef = useRef(null);
784
+ const popoverContentRef = useRef(null);
785
+ const popoverSupported = usePopoverSupport();
786
+ const [value, setValue] = useOptionallyControlledState({
787
+ controlledValue: valueProp,
788
+ defaultValue: defaultValueProp
789
+ });
790
+ const [tempPickerValue, setTempPickerValue] = useState(
791
+ value
792
+ );
793
+ useImperativeHandle(
794
+ ref,
795
+ () => ({
796
+ focus: () => {
797
+ if (!inputRef.current) return;
798
+ return inputRef.current.focus();
799
+ },
800
+ setValue: (value2) => {
801
+ if (!inputRef.current) return;
802
+ inputRef.current.setValue(value2);
803
+ }
804
+ }),
805
+ [inputRef]
806
+ );
807
+ const currentValidity = useMemo(
808
+ () => validateYearlessDate({
809
+ value: value ?? null,
810
+ constraints: {
811
+ required,
812
+ unavailable,
813
+ minDate,
814
+ maxDate
815
+ }
816
+ }),
817
+ [value, required, unavailable, minDate, maxDate]
818
+ );
819
+ const handleInputChange = (change) => {
820
+ const { event, value: value2, ...restChange } = change;
821
+ setValue(value2);
822
+ setTempPickerValue(value2);
823
+ onChangeProp?.({
824
+ ...restChange,
825
+ value: value2,
826
+ isValid: validateYearlessDate({
827
+ value: value2,
828
+ constraints: {
829
+ required,
830
+ unavailable,
831
+ minDate,
832
+ maxDate
833
+ }
834
+ })
835
+ });
836
+ };
837
+ const inputProps = {
838
+ required,
839
+ mode,
840
+ autoComplete: "off",
841
+ ...restProps,
842
+ value,
843
+ onChange: handleInputChange,
844
+ "data-valid": currentValidity,
845
+ size,
846
+ error,
847
+ loading
848
+ };
849
+ const { props: focusWithinProps } = useFocusWithin({
850
+ onFocus: (e) => {
851
+ requestAnimationFrame(() => {
852
+ onFocusProp?.(e);
853
+ });
854
+ },
855
+ onBlur: (e) => {
856
+ requestAnimationFrame(() => {
857
+ onBlurProp?.(e);
858
+ });
859
+ popoverRef.current?.closePopover();
860
+ },
861
+ otherRelatedElements: popoverContentRef?.current ? [popoverContentRef.current] : []
862
+ });
863
+ if (disablePicker || !popoverSupported) {
864
+ return /* @__PURE__ */ jsx(YearlessDateInput, { ref: inputRef, ...inputProps });
865
+ }
866
+ const handlePickerChange = (newValue) => {
867
+ setTempPickerValue(newValue);
868
+ if (!inputRef.current) return;
869
+ if (mode === "mm/dd" && newValue.month || mode === "dd/mm" && newValue.day) {
870
+ const valueSet = inputRef.current.setValue(newValue);
871
+ setValue(valueSet.value);
872
+ onChangeProp?.({
873
+ ...valueSet,
874
+ isValid: validateYearlessDate({
875
+ value: valueSet.value,
876
+ constraints: {
877
+ required,
878
+ unavailable,
879
+ minDate,
880
+ maxDate
881
+ }
882
+ })
883
+ });
884
+ }
885
+ };
886
+ const handlePickerMonthChange = (month) => {
887
+ handlePickerChange({
888
+ day: value?.day ?? tempPickerValue?.day ?? null,
889
+ month
890
+ });
891
+ };
892
+ const handlePickerDayChange = (day) => {
893
+ handlePickerChange({
894
+ day,
895
+ month: value?.month ?? tempPickerValue?.month ?? null
896
+ });
897
+ };
898
+ const handlePickerClose = () => {
899
+ setTempPickerValue(null);
900
+ };
901
+ const handleInputFocus = (event) => {
902
+ focusWithinProps.onFocus?.(event);
903
+ };
904
+ const handleInputBlur = (event) => {
905
+ focusWithinProps.onBlur?.(event);
906
+ };
907
+ const handlePopoverBlur = (event) => {
908
+ focusWithinProps.onBlur?.(event);
909
+ };
910
+ return /* @__PURE__ */ jsx(
911
+ YearlessDateSelectionPopover,
912
+ {
913
+ popoverRef,
914
+ popoverContentRef,
915
+ month: value?.month ?? tempPickerValue?.month ?? null,
916
+ day: value?.day ?? tempPickerValue?.day ?? null,
917
+ onMonthChange: handlePickerMonthChange,
918
+ onDayChange: handlePickerDayChange,
919
+ onClose: handlePickerClose,
920
+ mode,
921
+ onBlur: handlePopoverBlur,
922
+ children: ({ ref: ref2, onKeyDown }) => /* @__PURE__ */ jsx(
923
+ YearlessDateInput,
924
+ {
925
+ ...inputProps,
926
+ ref: mergeRefs([
927
+ inputRef,
928
+ ref2
929
+ ]),
930
+ onKeyDown: (ev) => {
931
+ onKeyDown?.(ev);
932
+ inputProps.onKeyDown?.(ev);
933
+ },
934
+ onClick: (ev) => {
935
+ inputProps.onClick?.(ev);
936
+ popoverRef.current?.openPopover();
937
+ },
938
+ onFocus: handleInputFocus,
939
+ onBlur: handleInputBlur,
940
+ enableStepping: true
941
+ }
942
+ )
943
+ }
944
+ );
945
+ });
946
+ YearlessDateInputWithPicker.displayName = "YearlessDateInputWithPicker";
947
+
948
+ export { YearlessDateInputWithPicker as Y };
949
+ //# sourceMappingURL=YearlessDateInputWithPicker-MHLlAdrH.js.map